Veraltete Raspberry Bibliotheken?

Für Fragen von Einsteigern und Programmieranfängern...

Veraltete Raspberry Bibliotheken?

Beitragvon Marc » 16. Okt 2017, 23:34 Veraltete Raspberry Bibliotheken?

Ich müsste ein serielles SRam via SPI ansprechen, mit dem Raspberry (V3).
Dafür würde ich wohl eine der Bibliotheken brauchen die hier beschrieben sind.
http://wiki.freepascal.org/Lazarus_on_Raspberry_Pi

Wie ich lese läuft Pigpio nur auf einem Broadcom BCM2835? Also Raspberry V1.
Die RPI-Hal bringt auch nur Fehlermeldungen.

Kann es sein das ich was falsch mache oder ist das alles ev. ein wenig veraltet?

Ist dieses eXtended Library besser?
Good code comes from experience, experience comes from bad code.
Marc
 
Beiträge: 148
Registriert: 11. Nov 2016, 14:09
Wohnort: Schweiz
OS, Lazarus, FPC: Linux Mint 18 (WinXP VBox) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 17. Okt 2017, 06:03 Re: Veraltete Raspberry Bibliotheken?

Nö. Musst Du nicht. Linux: Everything is a file.

Du kannst den SPI Port ganz normal über die Dateifunktionen ansprechen, so wie die Gpios auch. Dateiname ist irgendwas mit SPI.
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Marc » 17. Okt 2017, 10:37 Re: Veraltete Raspberry Bibliotheken?

Du meinst bestimmt nicht der 'native Access'?

Der schreibt ja wirklich ein File auf die SD card.
Da sehe ich auch keine Möglichkeit 'SPI' zu machen.
Das ist wohl eher gedacht mal ab und an einen Port zu ändern.

Ich versuche mal das Pascalio, da gehts in den Beispielen wie es scheint vor allem um einen Portexpander.
Nicht exakt was ich brauche, aber wenigstens kann ich da irgendwas compilieren.
Good code comes from experience, experience comes from bad code.
Marc
 
Beiträge: 148
Registriert: 11. Nov 2016, 14:09
Wohnort: Schweiz
OS, Lazarus, FPC: Linux Mint 18 (WinXP VBox) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 17. Okt 2017, 10:46 Re: Veraltete Raspberry Bibliotheken?

Nein, Du kannst den Spi ansprechen wie die Gpios, als Device. Es gibt zwei Spi Devices die als spidev.0 und spidev.1 bezeichnet werden, oder so.

Wenn das 2 Tage Zeit hat, ich schreibe eine nrf24 Routine von C auf Pascal um, der nrf nutzt auch den Spi. Da kann ich Dir die Beispiele reinstellen.
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Marc » 17. Okt 2017, 11:15 Re: Veraltete Raspberry Bibliotheken?

Danke für die Antwort.
Sicher hat das zwei Tage Zeit. :-) Bin jetzt schon Monate an meinem Projekt (Raspberry -> Ram/Rom -> AVR).
Diese NRF24 dinger sind auch sehr interessant.
Ich versuche trotzdem mal was mit Pascalio. Sollte ja Möglich sein. Mann kann nur lernen. :-)
Good code comes from experience, experience comes from bad code.
Marc
 
Beiträge: 148
Registriert: 11. Nov 2016, 14:09
Wohnort: Schweiz
OS, Lazarus, FPC: Linux Mint 18 (WinXP VBox) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 17. Okt 2017, 12:19 Re: Veraltete Raspberry Bibliotheken?

Pascalio sollte schneller sein als Filezugriff, weil das ja direkt über die Register auf die Hardware zugreift. Ist auch bei den Gpios so. Man macht sich halt von externen Libs abhängig. Deswegen versuche ich das zu vermeiden, wenn möglich.
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Socke » 18. Okt 2017, 06:49 Re: Veraltete Raspberry Bibliotheken?

Timm Thaler hat geschrieben:Pascalio sollte schneller sein als Filezugriff, weil das ja direkt über die Register auf die Hardware zugreift. Ist auch bei den Gpios so. Man macht sich halt von externen Libs abhängig. Deswegen versuche ich das zu vermeiden, wenn möglich.

PascalIO verwendet aktuell auch nur die Dateischnittstelle. Den Zugriff per Memory-Mapped-File direkt auf die Register hatte ich nicht hinbekommen, kann aber gerne ergänzt werden.
Falls es um maximale Geschwindigkeit geht, führt kein Weg an einem eigenen Kernel-Modul vorbei; dann könnte der SRAM auch als externer RAM genutzt werden. Ohne Kernel-Modul ist es nur ein externer, anwendungsabhängiger Speicher.

Der Zugriff auf die SPI-Schnittstelle erfolgt über die Klasse TSPILinuxDevice, ein Beispiel findet sich unter https://github.com/SAmeis/pascalio/blob/master/test/spi_linux/Project1.pas

P.S. wenn euch in PascalIO oder der Dokumentation noch etwas fehlt, meldet euch bitte hier im Forum. Ich versuche das dann kurzfristig zu ergänzen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2387
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Timm Thaler » 21. Okt 2017, 22:09 Re: Veraltete Raspberry Bibliotheken?

Für SPI auf dem AVR hab ich hier ein paar Routinen reingestellt: http://wiki.freepascal.org/AVR_Embedded_-_SPI

Erstmal nur für Master-Betrieb, aber um den Speicher auszulesen sollte das gehen.
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Mathias » 21. Okt 2017, 22:55 Re: Veraltete Raspberry Bibliotheken?

Timm Thaler hat geschrieben:Für SPI auf dem AVR hab ich hier ein paar Routinen reingestellt: http://wiki.freepascal.org/AVR_Embedded_-_SPI

Erstmal nur für Master-Betrieb, aber um den Speicher auszulesen sollte das gehen.

Du warst anscheinend auch recht fleissig. :shock: :wink:

Wen ich die I²C Schnittstelle mit Pascal ansprechen kann, werde ich mal ein lib für das I²C LCD-Display schreiben.
Auf dem PC/Raspi läuft diese schon über /dev/i2c
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3194
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 22. Okt 2017, 00:15 Re: Veraltete Raspberry Bibliotheken?

Und hier die Routinen für den Raspberry: http://wiki.freepascal.org/Raspberry_Pi_-_SPI

Hier ist zu beachten, dass der SPI-Controller die Steuerung der Select-Pins (Gpio7 und Gpio8) selbst übernimmt.
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Timm Thaler » 22. Okt 2017, 01:46 Re: Veraltete Raspberry Bibliotheken?

Mathias hat geschrieben:Wen ich die I²C Schnittstelle mit Pascal ansprechen kann, werde ich mal ein lib für das I²C LCD-Display schreiben


Wenn es Software-I2C sein darf: http://wiki.freepascal.org/AVR_Embedded ... _I2C_/_TWI
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Marc » 7. Nov 2017, 00:41 Re: Veraltete Raspberry Bibliotheken?

Timm Thaler hat geschrieben:Und hier die Routinen für den Raspberry: http://wiki.freepascal.org/Raspberry_Pi_-_SPI

Hier ist zu beachten, dass der SPI-Controller die Steuerung der Select-Pins (Gpio7 und Gpio8) selbst übernimmt.


Das sieht ja sehr gut aus. Versuche gerade mein SRam Problem damit zu lösen.
Good code comes from experience, experience comes from bad code.
Marc
 
Beiträge: 148
Registriert: 11. Nov 2016, 14:09
Wohnort: Schweiz
OS, Lazarus, FPC: Linux Mint 18 (WinXP VBox) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Marc » 8. Nov 2017, 01:39 Re: Veraltete Raspberry Bibliotheken?

Ich wieder. Habe mein Projekt mal hochgeladen.
Es funktioniert soweit.
Musste nur ein drei Aenderungen in der Unit (test_spi) machen. Habe es markiert.

Irgendwie habe ich aber Probleme mit der Prozedur 'spi.TransferSync'.
Ich kann die Modes des SRAM setzen, wenn ich aber versuche den Status (mode) wieder auszulesen kriege ich das nicht angezeigt. Das SRAM schickt es korrekt wie es scheint.

Einzelnes Byte speichern funktioniert auch, nur beim Auslesen habe ich wieder dasselbe Problem mit der Prozedur 'spi.TransferSync'.
Weiss gerade nicht ob ich was verkehrt mache oder ob es ein Fehler in der Unit ist?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Good code comes from experience, experience comes from bad code.
Marc
 
Beiträge: 148
Registriert: 11. Nov 2016, 14:09
Wohnort: Schweiz
OS, Lazarus, FPC: Linux Mint 18 (WinXP VBox) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 8. Nov 2017, 03:15 Re: Veraltete Raspberry Bibliotheken?

Marc hat geschrieben:Einzelnes Byte speichern funktioniert auch, nur beim Auslesen habe ich wieder dasselbe Problem mit der Prozedur 'spi.TransferSync'.
Weiss gerade nicht ob ich was verkehrt mache oder ob es ein Fehler in der Unit ist?


Naja, ich hab da mal drübergeschaut: Du schreibst 3 Byte, liest ein Byte und gibst eine Bytezahl von 4 an. Bißchen inkonsequent, oder?

SPI Transfer funktioniert so, dass eine Anzahl Bytes rausgeschrieben wird und gleichzeitig Bytes eingelesen werden. Dafür werden in der Prozedur Buffer reserviert. Werden 4 Byte reserviert, aber nur 3 übergeben, ist das vierte Byte Null, wird aber trotzdem gesendet. Was Move macht, wenn der Eingangsbuffer 4 Byte groß ist, 4 Byte als Länge angegeben werden aber Dein Byte_In nur 1 Byte groß ist - keine Ahnung. Entweder wird nur das erste Byte übertragen, oder das letzte, oder alle 4 Byte, und weil intern eh mit 32bit-Werten gearbeitet wird landen alle 4 Byte in einem 32-bit-integer.

Also Out_Byte und In_Byte müssen nicht gleich groß sein, aber zumindest sollten alle empfangenen Bytes auch in In_Byte passen.
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Marc » 8. Nov 2017, 09:15 Re: Veraltete Raspberry Bibliotheken?

Hallo Timm Thaler. Danke für die Hilfe.

Ja inkonsequent und noch schlimmer Ahnungslos!
Ich mache die Buffer jetzt gleich gross. Muss einfach die ersten Bytes in der Array ignorieren.
So geht es.

Um das RAM zu füllen gäbe es den Sequential Mode. Das müsste insgesamt am schnellsten sein.
So wie ich das Datenblatt verstehe müsste das gehen.
Den kann ich aber nicht verwenden da ich 32768 + 3 Bytes im Out Buffer hätte.
Die Prozedur 'spi.TransmitSync(OutArr, ByteCnt); ' verwendet ja ein Byte als Zähler.
Ich nehme mal an das ist technisch bedingt?

Also werde ich den Page Mode verwenden. Eine einzelne Page hab ich schon mal geschrieben.
Da müsste ich mit der Zeit hinkommen, die ich zur Verfügung habe, das RAM zu füllen (geschätzt ca 0.3 Sec für alle Pages zusammen).
Ist nur etwas unschön die 32768 bytes in 1024 mal 32 bytes umzukopieren. :-)
Good code comes from experience, experience comes from bad code.
Marc
 
Beiträge: 148
Registriert: 11. Nov 2016, 14:09
Wohnort: Schweiz
OS, Lazarus, FPC: Linux Mint 18 (WinXP VBox) | 
CPU-Target: 64Bit
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried