Hi, möchte ca. 30kB XRam an einem ATMega16 über I2C Bus mit Bascom ansprechen. Es sollen regelmässig Messwerte gespeichert werden, doch dafür reichen die vorhandenen 1kB SRam hinten und vorne nicht :-( Habe in meinem Bascom Buch gelesen, es können nur maximal 16kBit angesprochen werden. Möchte z.b. einen ST 24C256 verwenden. Wer hat damit Erfahrung bzw. einen Tip wie es geht??? Im voraus schönen Dank Wünsche allen ein frohes Fest Ralf
Declare Sub Write_eeprom(byval Adresh As Byte , Byval Adresl As Byte , Byval Value As Byte) Declare Sub Read_eeprom(byval Adresh As Byte , Byval Adresl As Byte , Value As Byte) ' Adresse erzeugen: ' Pin A0 und A1 sind intern mit Pulldowns versehen, sind also ' wenn extern nicht beschaltet 0 ' Die Der Baustein halt serienmäßig die Adresse Binär: ' 1 0 1 0 0 A1 A0 R/W ' also, angenommen man möcht bei A0 = 0 und A1=0 schreiben: ' Adresse: 10100000 = 160 ' Lesen Adresse: 10100001 = 161 ' ' der 24c128 und 24c256 brauchen für die Adressierung 2 Byte ' Den High-Byte der Adresse und den Lowbyte der Adresse. ' Einfach, da die soviel Speicher habn :o) Const Addressw = 160 'slave write address Const Addressr = 161 'slave read address Dim B1 As Byte Dim Value As Byte 'dim byte Dim Adresh As Byte 'Highbyte der Adresse Dim Adresl As Byte 'Lowbyte der Adresse Dim A As Byte 'allgemeine Variable für Berechnungen For A = 1 To 5 ' die ersten 5 Byte schreiben Value = A + 100 'Beginnend mit Zahlenwert 105 um Verwechslungen zu vermeiden Call Write_eeprom(1 , A , Value) 'Daten schreiben Next A For A = 1 To 5 'die geschriebenen 5 Byte auslesen Call Read_eeprom(1 , A , Value) 'auslesen Print Value 'Ausgabe an UART Next A 'sample of writing a byte to EEPROM AT2404 Sub Write_eeprom(byval Adresh As Byte , Adresl As Byte , Value As Byte) I2cstart 'start condition I2cwbyte Addressw 'slave address I2cwbyte Adresh 'asdress H of EEPROM I2cwbyte Adresl 'asdress L of EEPROM I2cwbyte Value 'value to write I2cstop 'stop condition Waitms 10 'wait for 10 milliseconds End Sub 'sample of reading a byte from EEPROM AT2404 Sub Read_eeprom(byval Adresh As Byte , Adresl As Byte , Value As Byte) I2cstart 'generate start I2cwbyte Addressw 'slave adsress I2cwbyte Adresh 'asdress H of EEPROM I2cwbyte Adresl 'asdress L of EEPROM I2cstart 'repeated start I2cwbyte Addressr 'slave address (read) I2crbyte Value , Nack 'read byte I2cstop 'generate stop End Sub ' when you want to control a chip with a larger memory like the 24c64 it requires an additional byte ' to be sent (consult the datasheet): ' Wires from the I2C address that are not connected will default to 0 in most cases! ' I2cstart 'start condition ' I2cwbyte &B1010_0000 'slave address ' I2cwbyte H 'high address ' I2cwbyte L 'low address ' I2cwbyte Value 'value to write ' I2cstop 'stop condition ' Waitms 10
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.