Ich weiß nich obs an mir liegt jedenfalls hat diese lösung mit sehr viel hin und herprobieren immernoch nicht funktioniert. Habs nu mit bisschen rumsuchen und probieren anders gelöst. Deshalb meine Lösung nochmal damit sich nich noch mehr leute damit rumärgern müssen wenns nich geht
Code:
'Hardware: AT Mega 32
$regfile = "m32def.dat"
$crystal = 7372800
'I2C konfigurieren
Config Sda = Porta.7
Config Scl = Porta.6
Dim Wert As Byte
Dim Adresse As Word
Dim Temp As Byte
'Funktionen deklarieren
Declare Sub Read_byte(byval Ee_adresse As Word, Value As Byte)
Declare Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte)
'Hauptprogramm===================================
Print "EEPROM schreiben...";
Do
For Adresse = 1 To 5 ' die ersten 5 Byte schreiben
Wert = Adresse + 100 'Beginnend mit Zahlenwert 105 um Verwechslungen zu vermeiden
Call Write_byte(adresse , Wert) 'Daten schreiben
Next
Wait 1
Print "*2";
Print "EEPROM lesen: ";
Print "*3";
For Adresse = 1 To 5 'die geschriebenen 5 Byte auslesen
Call Read_byte(adresse , Wert) 'auslesen
Print Str(wert); 'Ausgabe an UART
Next
Loop
'Funktionen=============================
'Routine zum schreiben von Daten in das EEPROM
Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte)
Temp = High(ee_adresse) 'MSB von ee_adresse speichern
I2cstart 'generate start
I2cwbyte &B10100000 'write addres of24C65
I2cwbyte Temp 'write high adress
I2cwbyte Ee_adresse 'write low adress
I2cwbyte Ee_daten 'write daten
I2cstop 'Stop senden zum schreiben
End Sub
'Routine zum lesen von Daten aus dem EEPROM
Function Read_byte(byval Ee_adresse As Word , Value As Byte)
Temp = High(ee_adresse) 'MSB von ee_adresse speichern
I2cstart 'generate start
I2cwbyte &B10100000 'write addres of 24C65
I2cwbyte Temp 'write high adress
I2cwbyte Ee_adresse 'write low adress
I2cstart 'generate repeated start
I2cwbyte &B10100001 'write read commando
I2crbyte Value , Nack
I2cstop
End Function
Lesezeichen