Hi XT600SM,
hatte selbes Problem - das Word verschwand im eeprom und ich habs nicht wiedergefunden....
so geht´s:
vielleicht hast du ja auch schon eine Lösung gefunden - der Beitrag ist ja schon etwas älter....Code:$regfile = "m8def.dat" 'MEGA8-Deklarationen $hwstack = 32 $swstack = 8 $framesize = 24 $crystal = 8000000 'intern 8MHz $baud = 9600 'Baudrate definieren '------------------------------------------------------------------------------- 'Ein / Ausgänge definieren: 'Ddrb = &B00111100 '0=Eingang 'Ddrc = &B1111111 Ddrd = &B01100011 '0=Eingang 'PullUps setzen: 'Portb = &B00000000 '1 = PullUp AKTIV 'Portc = &B0000000 '1 = PullUp AKTIV 'Portd = &B00000000 '1 = PullUp AKTIV '------------------------------------------------------------------------------- 'Alias Taster1 Alias Pind.2 Taster2 Alias Pind.3 Taster3 Alias Pind.4 Led1 Alias Portd.5 Led2 Alias Portd.6 '------------------------------------------------------------------------------- 'Variablen '------------------------------------------------------------------------------- 'Timer 'Timer1 = 2x / sec bei 8MHz 'Config Timer1 = Timer , Prescale = 256 'Teiler 'Const Timervorgabe = 49910 'Enable Timer1 'Enable Interrupts '------------------------------------------------------------------------------- Dim Wert As Word 'eigendlicher Wert Dim Wert1 As Byte 'Hilfswert1 Dim Wert2 As Byte 'Hilfswert2 Dim Lesen As Word 'Auslesen Dim Lesenlow As Byte 'Hilfswert1 Dim Lesenhigh As Byte 'Hilfswert2 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 'SDA und SCL definieren Config Sda = Portc.4 ' I2C-Port festlegen Config Scl = Portc.5 ' I2C-Port festlegen Const Ext_eeprom = 162 'I2C Geräteadresse ggf. anpassen Wert = 64998 '------------------------------------------------------------------------------- 'Für RS232: 'On Urxc Onrxd 'Interrupt-Routine setzen 'Enable Urxc 'Interrupt URXC einschalten Enable Interrupts 'Interrupts global zulassen '--------------------------------------------------------------------------------------------------------------- '--------------------------------------------------------------------------------------------------------------- Do If Taster1 = 1 Then '----schreiben---- For Adresse = 250 To 260 'Adresse geht über die Byte-Grenze Incr Wert '1 bis Überlauf Gosub Eeprom_schreiben Print "schreiben ->Adres.=" ; Adresse ; "Wert=" ; Wert ; " " 'Anzeige vom schreiben Waitms 500 Adresse = Adresse + 1 'weil ja immer 2 Bytes abgefragt werden Next Adresse End If If Taster2 = 1 Then '---lesen---- For Adresse = 250 To 260 Gosub Eeprom_lesen Lesen = Makeint(lesenhigh , Lesenlow) Print "lesen <-Adres.=" ; Adresse ; "Wert= " ; Lesen 'Anzeige vom lesen Waitms 500 Adresse = Adresse + 1 'weil ja immer 2 Bytes abgefragt werden Next Adresse End If Loop '------------------------------------------------------ '- Byte (wert) auf EEprom Adresse (address) speichern - '------------------------------------------------------ Eeprom_schreiben: Wert1 = High(wert) Print Wert1 ; " W1 " Wert2 = Low(wert) Print Wert2 ; " W2 " I2cstart 'Start I2cwbyte &HA0 'Sende Slavadresse I2cwbyte High_adresse 'Sende Speicheradresse High I2cwbyte Low_adresse 'Sende Speicheradresse LOW I2cwbyte Wert2 'Sende Wert I2cwbyte Wert1 'Sende Wert I2cstop 'stop Waitms 10 Return '----------------------------------------------------------------- '--- Byte (wert) von EEprom Adresse (address) lesen --- '----------------------------------------------------------------- Eeprom_lesen: 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 Lesenhigh , Ack 'Lese Adresse vom EEprom I2crbyte Lesenlow , Nack 'Lese Adresse vom EEprom I2cstop 'Stop Return![]()







Zitieren

Lesezeichen