Hallo,
ich möchte Werte aus einer WordVariable im extenen I²C EEProm speichern. (Habe ein 24C512N)
Als Byte funktioniert es wunderbar. Nun habe ich versucht das Word in 2 Bytes zu trennen:
Wert1 = High(wert)
Wert2 = Low(wert)
und hinterher beim lesen zusammenzufügen:
Lesen = Makeint(lesenhigh , Lesenlow)
aber irgendetwas mache ich da falsch, weil nicht die gespeicherten Werte herauskommen.......
könnt ihr mir weiterhelfen?
Danke, TobiasCode:$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 Dim Wert1 As Byte Dim Wert2 As Byte Dim Lesen As Word Dim Lesenlow As Byte Dim Lesenhigh As Byte 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 = 12345 '------------------------------------------------------------------------------- '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 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 Next Adresse End If Loop '------------------------------------------------------ '- Byte (wert) auf EEprom Adresse (address) speichern - '------------------------------------------------------ Eeprom_schreiben: Wert1 = High(wert) Wert2 = Low(wert) I2cstart 'Start I2cwbyte &HA0 'Sende Slavadresse I2cwbyte High_adresse 'Sende Speicheradresse High I2cwbyte Low_adresse 'Sende Speicheradresse LOW I2cwbyte Wert1 'Sende Wert I2cwbyte Wert2 '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 , Lesenlow 'Lese Adresse vom EEprom I2cstop 'Stop Return







Zitieren

Lesezeichen