Hallo Leute,
Habe aus dem RN-Wissen ein paar Codeschnipsel entnommen zum Lesen und schreiben von I2c-EEPROMs. Habe den EEPROM auch richtig angeschlossen, auch die Pull-Ups sind dran.
Aber es geht nicht. Als gelesenen Wert erhalte ich immer "255".
Hier mein Code:
Was mache ich falsch??
Bitte helft mir auf die Sprünge
Danke, AndreasCode:$regfile = "m8def.dat" ' Chip auswählen $crystal = 3686400 'hier Taktfrequenz eintragen $baud = 9600 'Baudrate RS232 ' Config Lcd = 16 * 2 'LCD-Display configurieren Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.6 , Db7 = Portd.5 , E = Portb.1 , Rs = Portb.2 ' Config Scl = Portc.5 'PINs für I2C Bus Config Sda = Portc.4 I2cinit ' Dim X As Byte Dim A As Word 'der wert, welcher ins EEPROM geschrieben werden soll Dim B As Word Dim Schreiben As Byte Dim Lesen As Byte 'Die Adresse muß als Word-Variable definiert werden (Word=16Bit=0...65535) 'Damit kann ein EEPROM mit 256KBit (24C256) angesprochen werden (Adressen von 0...32768) 'und auch einer mit 512KBit (24C512). Adressbereich hier 0...65535 Dim Adresse As Word At $160 'Die Adresse als Word-Variable Dim Low_adresse As Byte At $160 Overlay 'Zeiger auf das erste Byte Dim High_adresse As Byte At $161 Overlay 'Zeiger auf das zweite Byte ' Config Adc = Single , Prescaler = Auto 'AD-Wandler starten Start Adc ' Ddrb = &B00000000 'Ein-Ausgänge definieren 'Ddrc = &B00000000 Ddrd = &B00010000 ' Initlcd 'LCD initialiesieren Cursor Off Cls ' ' Upperline Lcd " Hallo AVR" Wait 2 Cls '===================Hauptprogramm=============================================== 'Do '----schreiben---- For Adresse = 1 To 10 'Adresse geht über die Byte-Grenze Incr X '1 bis Überlauf ' 'Disable Interrupts I2cstart 'Start I2cwbyte &HA0 'Sende Slavadresse I2cwbyte High_adresse 'Sende Speicheradresse High I2cwbyte Low_adresse 'Sende Speicheradresse LOW I2cwbyte X 'Sende Wert I2cstop 'stop Waitms 10 'Enable Interrupts ' Locate 1 , 1 Lcd "->Adr." ; Adresse ; "Wert=" ; X ; " " 'Anzeige vom schreiben Waitms 500 Next Adresse '---lesen---- 'Disable Interrupts For Adresse = 1 To 10 I2cstart 'Start I2cwbyte &HA0 'Sende Slavadresse +1 für Schreiben I2cwbyte High_adresse 'Sende Speicheradresse High I2cwbyte Low_adresse 'Sende Speicheradresse Low I2cstart 'Start I2cwbyte &HA1 'Sende Slavadresse +1 für Lesen I2crbyte Lesen , Nack 'Lese Adresse vom EEprom I2cstop 'Stop 'Enable Interrupts ' Locate 2 , 1 Lcd "<-Adr." ; Adresse ; "Wert=" ; Lesen ; " " 'Anzeige vom lesen Waitms 500 Next Adresse 'loop End







Zitieren
Lesezeichen