Hi, ich möchte mit einem ATmega8 in C programmiert mit Felury Lib ein FM24C64B lesen und beschreiben, andere Geräte funktionieren am I2C Bus. Nur das lesen des F-Rams geling tmir noch nicht. Der Code sieht so aus: #define Dev24C02 0xA2 uint8_t read_fm24c64(uint8_t address) //Random Read { uint8_t ret; // read previously written value back from EEPROM address 5 i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode i2c_write(0x00); i2c_write(address); i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode ret = i2c_readNak(); // read one byte from EEPROM i2c_stop(); return (ret); } Aber das Programm bleibt beim ausführen hängen. Ich hab noch nicht geschaut bei welcher Operation genau. Ist aber auch erstmal ja egal, habe ich gerade irgendwo einen Denkfehler? Ich hab mir jetzt schon ein paar mal das Datasheet angeschaut und denke genau so müsste es klappen die ersten 255 Byte lesen zu können? Wo ist mein Fehler?
Johannes M. schrieb: > Aber das Programm bleibt beim ausführen hängen. Ich hab noch nicht > geschaut bei welcher Operation genau. Dann mach' genau das erstmal. Eigentlich eine echte Frechheit, sowas zu posten, bevor die eigenen Möglichkeiten ausgeschöpft sind.
Junge junge, nur sozial inkompentene Personen hier, die sich wichtig tun. Es ist doch völlig egal wo das Programm hängt, ich will doch nur grundsätzlich wissen ob die Schritte die richtigen sind. #Troll-hater
Hier am Handy ist der Code ein unleserlicher Buchstabenbrei. Da gibt's keine Hilfe. Oliver
:
Bearbeitet durch User
Johannes M. schrieb: > Wo ist mein Fehler? Du hast nicht dokumentiert wie du deinen Baustein beschaltet hast. Adressen können nicht stimmen .... Ferner haben "Anfänger" die Gewohnheit Abblock-Kondensatoren zu "vergessen". Braucht's ja alles nicht - nur unnötiger Ballast und kosten viel Geld. EEPROMs und solche FRAMs sind sehr empfindlich auf zu schwache Versorgungspannungen. Ja, ohne Abblock-Kondensatoren sind Versorgungspannungen aus der Sicht solcher Bausteine "schwach".
Ich habe früh aufgehört zu lesen, als ich dieses gesehen habe: Johannes M. schrieb: > FM24C64B Und dann: Johannes M. schrieb: > i2c_start_wait(Dev24C02+I2C_WRITE); Ich verstehe die Bedeutung, aber es passt logisch nicht in meinen "DingsBums"
Johannes M. schrieb: > paar mal das Datasheet angeschaut Wer da auch noch hin schauen möchte, kann z.B. diesen Link benutzen, einfacher geht's fast nicht: https://pdf1.alldatasheet.com/datasheet-pdf/view/51904/FAIRCHILD/FM24C64.html Johannes M. schrieb: > mit Felury Lib ein > FM24C64B lesen und beschreiben Es sollte zumindest eine solche Variante der Fleury-Lib voraus gesetzt sein, die das favorisierte IC auch ansteuern kann laut Beschreibung. Link? mfg
:
Bearbeitet durch User
Johannes M. schrieb: > andere Geräte funktionieren am I2C Bus. > Nur das lesen des F-Rams geling tmir noch nicht. Du hast aber im Datenblatt schon gelesen, das Devices mit Extended I²C und Devices ohne Extended I²C nicht am gleichen Bus spielen? Datenblatt Seite 7.
Johannes M. schrieb: > Ich hab noch nicht > geschaut bei welcher Operation genau. Na dann mach das doch mal ;) Johannes M. schrieb: > Ist aber auch erstmal ja egal Wahrscheinlich nicht Johannes M. schrieb: > habe ich gerade irgendwo einen Denkfehler? Ja, du schließt eine Fehlerquelle aus ohne sie vorher überprüft zu haben. ;)
Matthias S. schrieb: > Du hast aber im Datenblatt schon gelesen, das Devices mit Extended I²C > und Devices ohne Extended I²C nicht am gleichen Bus spielen? Das ist Quatsch. Es dürfen nur nicht 2 Slaves die gleiche I2C-Adresse haben, d.h. die Adreßpins A2..0 müssen unterschiedlich gesetzt sein. Das sollte aber klar sein. Für die FRAM kann man die gleiche Lib wie für EEPROM verwenden. Das Schreiben geht nur schneller, da die Wartezeit entfällt.
Peter D. schrieb: > Matthias S. schrieb: >> Du hast aber im Datenblatt schon gelesen, das Devices mit Extended I²C >> und Devices ohne Extended I²C nicht am gleichen Bus spielen? > > Das ist Quatsch. Es dürfen nur nicht 2 Slaves die gleiche I2C-Adresse > haben, d.h. die Adreßpins A2..0 müssen unterschiedlich gesetzt sein. Das > sollte aber klar sein. Sowohl die Fleury-Lib als auch der ATMega haben mit extended I²C ungefähr soviel am Hut wie eine Dampfmaschine mit Raketentreibstoff. Die Einschränkung kommt vom EEProm, spielt aber hier keine Rolle. Oliver
Arduino F. schrieb: > Johannes M. schrieb: >> FM24C64B > Und dann: > Johannes M. schrieb: >> i2c_start_wait(Dev24C02+I2C_WRITE); > > Ich verstehe die Bedeutung, aber es passt logisch nicht in meinen > "DingsBums" Da hast du recht. Im Gegensatz zum 24C02 muss man hier 2 Byte für die Leseadresse angeben. In seinem Code muss also
1 | i2c_write(0x00); |
zweimal nacheinander kommen. Hier ein Beispiel für ein 24C32, das in dem Punkt vergleichbar ist und auch so mit der Fleury-Lib bei mir im Einsatz ist:
1 | uint8_t read_byte_EE(uint16_t mem_addr) |
2 | {
|
3 | uint8_t data; |
4 | uint8_t low_addr = (uint8_t) (mem_addr & 0x00FF); // MemAddr in Low und Highbyte trennen |
5 | uint8_t high_addr = (uint8_t) ((mem_addr & 0xFF00) >> 8); |
6 | |
7 | i2c_start(DEVADDR_24C32+I2C_WRITE); |
8 | i2c_write(high_addr); |
9 | i2c_write(low_addr); |
10 | i2c_rep_start(DEVADDR_24C32+I2C_READ); |
11 | data = i2c_readNak(); |
12 | i2c_stop(); |
13 | |
14 | return data; |
15 | }
|
Geht natürlich auch nur, wenn geklärt ist, ob die Deviceadresse 0xA2 auch am IC so beschaltet ist. Für 0xA2 muss der Pin 1 (A0) auf HIGH sein.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.