Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Balkonkraftwerk Speicher und Wechselrichter Tests und Tutorials

Ansteuern vom I2C EEprom's mit Bascom

Allgemein

I2C

ESEO-Home

Struktur:


'---- schreiben ins EEprom ----------------------------------------
I2cstart                                   'Start I2C
I2cwbyte Slave Adresse
I2cwbyte Speicheradresse
I2cwbyte Wert
I2cstop                                    'Stop I2C
Waitms 10                                  'warte 10ms


'--- lesen vom EEprom --------------------------------------------
I2cstart                                    'Start I2C
I2cwbyte Slave Adresse  
I2cwbyte Speicheradresse

I2cstart                                    'Start I2C
I2cwbyte Slave Adresse +1 für schreiben
I2crbyte lese Wert
I2cstop                                     'Stop I2C



Beispiel für EEprom 24C16

Zum besseren Verständniss werden hier die I2C Befehle untereinander geschrieben. In einem grösserem Programm, empfiehlt sich aber eine Sub-Routine zu deklarieren, die dann den Schreib/lese Vorgänge abwickelt.

Beispiel :

'============I2C EEprom schreiben/lesen ==================================

 ' =========== Für 24C16 EEprom =====================
 ' 8MHz Quarz
 ' LCD auf Port B ,
 '
$regfile = "m8def.dat"
$crystal = 8000000

'---Config für LCD -----------------
Config Lcd = 40 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5
Config Lcdbus = 4
Config Lcdmode = Port
Cursor On


'SDA und SCL definieren
Config Sda = Portd.5                                         
Config Scl = Portd.7                                        


Dim X As Byte
Dim A As Byte
Dim B As Byte
Dim Lesen As Byte

CLS
Do
'---- schreibe in EEprom ----
For A = 1 To 10
Incr X                                    '1 bis Überlauf zählen

I2cstart                                  'Start I2C
I2cwbyte &HA0                             'Sende Slave Adresse
I2cwbyte A                                'Sende Speicheradresse
I2cwbyte X                                'Sende Wert
I2cstop                                   'Stop I2C
Waitms 10                                 'warte 10ms

Locate 1 , 1
Lcd "ins EEprom = " ; X ; "  "  ' Ausgabe der geschriebenen Werte am LCD
Waitms 500
Next A


'--- lesen vom EEprom ----
For B = 1 To 10

I2cstart                                    'Start I2C
I2cwbyte &HA0                               'sende Slave Adresse  
I2cwbyte B                                  'sende Speicheradresse

I2cstart                                    'Start I2C
I2cwbyte &HA1                               'sende Slave Adresse +1 für schreiben
I2crbyte Lesen , Nack                       'lese Adresse vom EEprom
I2cstop                                     'Stop I2C

Locate 2 , 1
Lcd "Lese  EEprom= " ; Lesen ; "  "                         'Ausgabe der EEprom Werte
Waitms 500
Next B

Loop
End


Beispiel für EEprom 24C256

EEprom 24C128, 24C256 haben im Gegensatz zu den 24C16'er einen Adressraum von zwei Byte. Darum muss man den Adressberreich in Low und High Adressbereich trennen. (Zuerst Low-Adressbereich schreiben und dann High-Adressberreich)

Beispiel:

'============I2C EEprom schreiben/lesen ==================================

 ' =========== Für 24C256 EEprom =====================
 ' 8MHz Quarz
 ' LCD auf Port B ,
 '
$regfile = "m8def.dat"
$crystal = 8000000

'---Config für LCD -----------------
Config Lcd = 40 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5
Config Lcdbus = 4
Config Lcdmode = Port
Cursor On


'SDA und SCL definieren
Config Sda = Portd.5                                         
Config Scl = Portd.7                                        


Dim X As Byte
Dim A As Byte
Dim B As Byte
Dim Lesen As Byte
CLS

Do
'---- schreibe in EEprom ----
For A = 1 To 10
Incr X                                    '1 bis Überlauf zählen

I2cstart                                  'Start I2C
I2cwbyte &HA0                             'Sende Slave Adresse
I2cwbyte A                                'Sende Speicheradresse LOw
I2cwbyte 1                                'Sende Speicheradresse High
I2cwbyte X                                'Sende Wert
I2cstop                                   'Stop I2C
Waitms 10                                 'warte 10ms

Locate 1 , 1
Lcd "ins EEprom = " ; X ; "  "  ' Ausgabe der geschriebenen Werte am LCD
Waitms 500
Next A


'--- lesen vom EEprom ----
For B = 1 To 10

I2cstart                                    'Start I2C
I2cwbyte &HA0                               'sende Slave Adresse  
I2cwbyte B                                  'sende Speicheradresse Low
I2cwbyte 1                                  'sende Speicheradresse High

I2cstart                                    'Start I2C
I2cwbyte &HA1                               'sende Slave Adresse +1 für schreiben
I2crbyte Lesen , Nack                       'lese Adresse vom EEprom
I2cstop                                     'Stop I2C

Locate 2 , 1
Lcd "Lese  EEprom= " ; Lesen ; "  "                         'Ausgabe der EEprom Werte
Waitms 500
Next B

Loop
End

Autor


Siehe auch

Aus dem Forum


LiFePO4 Speicher Test