Externes Eeprom am Raspberry mit I2C

Für Fragen von Einsteigern und Programmieranfängern...
Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Marc »

Vielen Dank für die vielen Antworten.
Der Atmega sollte die 32kB innerhalb von ca einer Sekunde vom Sram/Eeprom (ca. Grössenordnung) per I2c auslesen und an eine Maschine weiterreichen. Abhängig von einem Drehgeber, braucht diese konstant die Daten (real time).
Ich glaube nicht das der Raspberry das könnte. Der soll jetzt einfach ein Ram füllen (Pagemode) während der AVR ein anderes ausliest (Byte mode). Wenn der AVR fertig ist mit auslesen wird dann getauscht.
Der Raspberry macht ja kein 'real time'. Es wäre in der Konstellation daher egal wann genau er das RAM beschreibt, aber er muss fertig sein vor dem wechseln. Deshalb ist das Ziel kleiner als eine Sekunde. Je schneller er ist desto grösser ist die Fehlertoleranz. Tönt kompliziert, und ist vieleicht so gar nicht zu machen. Aber ich brauche das, und dehalb versuche ich es.
Wenn es gar nicht geht, brauche ich jemanden der das in Hardware programmiert (Altera ...), aber wird wohl teuer.
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Mathias »

Ich kenne das Problem mit dem Datenpuffern.
Wen man Daten in Echtzeit mit einem PC erfassen will, fängt das Problem an, wen am PC etwas im Hintergrund läuft.
Ich habe schon versucht mit einem Arduino due Daten zu messen, und gleichzeitig zu puffern, so das ich es per USB Blockweise übertragen kann.
Die Daten im Due habe ich mit einem Echtzeit-Timer erfasst und gepuffert. Nur gab es leider Übertragungsfehler zum PC.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Marc »

Fur das was ich da machen will gäbe es schon eine Lösung, aber die lief noch mit win7.
Win 10 schafft das nicht mehr, weil da in unregelmässigen Abständen (2-3 mal die Woche) das System mit irgendwas beschäftigt ist. Und nicht mal ein paar Daten per USB verlässlich raushaut.
Deshalb meine ich das Linux (Raspberry) da etwas besser ist, das geht nicht hin und aktualisiert alleine was.
Good code comes from experience, experience comes from bad code.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Timm Thaler »

Wie kritisch ist das denn, wenn mal ein paar Sekunden nichts kommt? Dass kann Dir mit dem Raspi auch passieren.

Wie stehen denn die Daten zur Verfügung? Wäre es möglich die auf einer SD-Karte zu speichern? Die kannst Du - vorausgesetzt die werden in einem Rusch geschrieben - mit dem AVR auslesen. Da gehen dann 1Gbyte.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Marc »

Wenn das Eeprom/Sram nicht gefüllt würde wäre das schon suboptimal. Solange der AVR den Speicher zeitgerecht auslesen kann würde kein Schaden entstehen.
Ich müsste die Maschine einfach für einen Moment stoppen. Aber das ist möglich.
Seriöserweise bräuchte ich vom Raspberry wohl auch ein Signal an den AVR um anzuzeigen das das schreiben erfolgreich war.

Ich habe das Programm nochmal angehängt.
Es scheint als funktioniert der Page Mode, aber es ist in 300 ms fertig. Was wohl etwas zu schnell ist. ;-)
Muss das aber noch genauer testen.
Dateianhänge
Eeprom Pagemode.tar.gz
(131.77 KiB) 53-mal heruntergeladen
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Mathias »

Es scheint als funktioniert der Page Mode, aber es ist in 300 ms fertig. Was wohl etwas zu schnell ist.

Sowas wollte ich noch mit dem String einbauen, aber da bin ich leider nicht mehr dazu gekommen.
Was mir noch in Erinnerung ist, das ein I²C nur 32Byte in einem Rutsch schreiben/lesen kann.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Marc »

Also ich bin mir nicht sicher das es richtig funktioniert.
Nach Datenblatt vom Eeprom sollten im Pagemode ein Controlbyte zwei Adress Byte und dann im Anschluss 64 Bytes übertragen werden. Was ja ungeheuer Zeit sparen muss.
Muss den Speicher mal mit was füllen (fortlaufende Nummer oder so) um zu sehen ob das wirklich geklappt hat.
Good code comes from experience, experience comes from bad code.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Timm Thaler »

Mathias hat geschrieben:Was mir noch in Erinnerung ist, das ein I²C nur 32Byte in einem Rutsch schreiben/lesen kann.


Nee, kann beliebig lang sein. Durch das SCK kann es auch keine Timingfehler geben.

Der EEprom kann halt nur maximal 64 Byte in die Page empfangen, weil die Page nur 64 Byte groß ist, dannach schreibt er sie wieder von vorn voll.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Marc »

Habe das ganze mal genauer studiert.

Ohne Delays geht es so wohl nicht. Da hat Timm Thaler schon Recht wie es scheint.

Im 'page mode' muss ich ca 4mS warten bis ich eine neue Seite Fehlerfrei schreiben kann.
Sonst verheddert sich die Kommunikation, das passiert allerdings erst wenn eine neue Page geschrieben werden soll.
Wenn Das Programm sonst wo noch Zeit verplemmpert kann die Wartezeit auch kleiner sein.
Aber so in etwa wird es wohl bleiben, ausser vieleicht man ändert die Kommunikationsgeschwindigkeit oder was auch immer.

Vieleicht könnte man per i2c auch feststellen wann genau das Eeprom fertig gespeichert hat. Das würde dann wohl vor allen die Sicherheit erhöhen, aber massiv schneller würde es wahrscheinlich nicht werden.

Werde mal ein paar richtige sRam besorgen (23K256 Danke für den Tip!). Mit denen müsste es gehen.

Oder ich programmiere den AVR das er als 'Slave' die Daten direkt vom Raspberry kriegt. Dann vieleicht auch in einer Art 'Page Mode' bei dem die Seite gleich 32KB hat.
Fragt sich nur ob der AVR denn schneller wäre mit wegspeichern. Der hat zumindest teilweise auch ein Eeprom. Aber der Arbeitsspeicher selbst ist wohl schneller.
Das mache ich noch mit Bascom (habs schon fast verlernt), wenn ich mal Zeit habe will ich mal fpc auf dem AVR probieren. Scheint da ja was zu geben.
Good code comes from experience, experience comes from bad code.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Timm Thaler »

Marc hat geschrieben:Aber so in etwa wird es wohl bleiben, ausser vieleicht man ändert die Kommunikationsgeschwindigkeit oder was auch immer.


Der Eeprom antwortet einfach nicht, bis er mit dem Schreiben fertig ist. Kein Ackn auf Schreibbefehl. Siehe Datenblatt.

Marc hat geschrieben:Vieleicht könnte man per i2c auch feststellen wann genau das Eeprom fertig gespeichert hat. Das würde dann wohl vor allen die Sicherheit erhöhen, aber massiv schneller würde es wahrscheinlich nicht werden.


Ja, indem Du den Eeprom solange eine Schreibanfrage sendest, bis er ein Ackn zurückgibt. Kann aber sein, dass Du das händisch machen musst, wenn es die Raspi-Libs nicht vorsehen. Siehe Datenblatt.

Marc hat geschrieben:Oder ich programmiere den AVR das er als 'Slave' die Daten direkt vom Raspberry kriegt. Dann vieleicht auch in einer Art 'Page Mode' bei dem die Seite gleich 32KB hat...


Der Atmega644 hat nur 4k SRAM und ein bißchen wirst Du noch für andere Daten brauchen. Du musst also die Datenpakete kleiner machen. Siehe Datenblatt.

Der Atmega644 hat auch nur 2k Eeprom. Der hat aber weniger Schreibzyklen und ist genauso langsam wie der externe Eeprom. Lange Schreibzeiten sind eine physikalische Eigenschaft eines Eeproms. Schnell schreiben kannst Du Flash-Speicher, aber den dafür auch deutlich weniger oft.

Nimm den SPI SRAM.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Mathias »

Der Atmega644 hat nur 4k SRAM und ein bißchen wirst Du noch für andere Daten brauchen.

So wie es scheint, ist dieser verwandt mit dem ATmega328 und das er doppelt so viel Speicher besitzt.

Jetzt habe ich ein wenig weiter geguckt, http://cdn-reichelt.de/documents/datenb ... GA644P.pdf
Dort gibt es einen ATmega324, dieser hat gleich viel Speicher wie der ATmega328. Was habe diese für Unterschiede ? Etwa, nur das der eine 2SPI und der andere 3SPI hat ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Marc »

Es gibt vom 644 zwei verschiedene der eine hat 2 UART. Den 328 hab ich noch nie verwendet.
Habe heute zusammen mit den SRAM mal den ATMEGA1284P-PU-ND mit bestellt. Der hat noch mehr Speicher.
Mal sehen was geht.
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Mathias »

Den 328 hab ich noch nie verwendet.

Dies hätte ich nicht gedacht, das ist eine der meist verbreiteten ATmegas, das dieser im Arduino UNO verbaut wird. Zu allem ist er dadurch sehr günstig zu bekommen.

Habe heute zusammen mit den SRAM mal den ATMEGA1284P-PU-ND mit bestellt. Der hat noch mehr Speicher.

Was hindert dich daran ein Arduino due zu kaufen ?
Mit diesem bekommst du eine eierlegende Wollmilchsau.
Bei diesem hast du folgendes zu Verfügung: SRAM 96 KB (two banks: 64KB and 32KB); Clock Speed 84 MHz
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Marc »

Ich habe mit Arduinos noch nie was gemacht. Das ist ja was C ähnliches zum programmieren. Das ist nicht mein Ding.
Ich werwende bis jetzt Bascom, das läuft gut und auf allen Atmegas. Meistens brauche ich Atmega8 oder 644.
Die SRAM hab ich in den USA bestellt, da habe ich den 1284 gleich mitbestellt. Den hab ich auch noch nie gebraucht.
Hat ja extrem viel Speicher (128KB). Mal antesten. Der Preis vom Chip (4.80€) spielt da keine Rolle.

Habe den Arduino Due vorher noch nicht in Erwägung gezogen.
Ja wäre ev. eine Möglichkeit.
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Externes Eeprom am Raspberry mit I2C

Beitrag von Mathias »

Ich habe mit Arduinos noch nie was gemacht. Das ist ja was C ähnliches zum programmieren. Das ist nicht mein Ding.

Ausser das man ihn mit C++ programmieren muss, ist er in der Handhabung sehr einfach, da bei den meisten Arduinos der USB schon fest angelötet ist.
Ich kenne bis jetzt nicht anderes, ausser Sloeber, welcher die Ardunio-Oberfläche in Eclipse integriert.

Ich habe aus eine Arduino-Nano ein SPI-Programmer gebastelt, mit diesem kann ich fast die ganze ATtiny-Familie programmieren. Unter anderem auch die Atmega328.

Habe den Arduino Due vorher noch nicht in Erwägung gezogen.

Da wirst du kaum um die Arduino-Schnittstelle kommen. Weiterer Nachteil, das Board ist sehr gross.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten