Bascom I2C Eeprom

Gast #3988873
Lesenswert?

Hallo,
ich habe ein 24C256 und versuche dies anzusteuern allerdings 
funktioniert das nicht. Ich habe den Code aus dem Internet war aber auf 
allen Seiten gleich (bedeutet für mich das dass der einzig richtige ist) 
ich benutze ein 8mhz Quarz und habe einen Atmega 32. Ich habe alles auf 
dem Avr Evaluationsboard von Pollin (Version:2.0.0).

Hier der Code:
1
'============I2C EEprom schreiben/lesen ==================================
2

3
 ' =========== Für 24C256 EEprom =====================
4
 ' 8MHz Quarz
5
 ' LCD auf Port B ,
6
 '
7
$regfile = "m32def.dat"
8
$crystal = 8000000
9
$baud = 9600
10

11

12
'SDA und SCL definieren
13
Config Sda = Portc.1
14
Config Scl = Portc.0
15

16

17
Dim X As Byte
18
Dim A As Byte
19
Dim B As Byte
20
Dim Lesen As Byte
21
Cls
22

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

28
I2cstart                                                    'Start I2C
29
I2cwbyte &HA0                                               'Sende Slave Adresse
30
I2cwbyte 1                                                  'Sende Speicheradresse High
31
I2cwbyte A                                                  'Sende Speicheradresse LOw
32
I2cwbyte X                                                  'Sende Wert
33
I2cstop                                                     'Stop I2C
34
Waitms 10                                                   'warte 10ms
35

36
Locate 1 , 1
37
Print "ins EEprom = " ; X ; "  "                            ' Ausgabe der geschriebenen Werte am LCD
38
Waitms 500
39
Next A
40

41

42
'--- lesen vom EEprom ----
43
For B = 1 To 10
44

45
I2cstart                                                    'Start I2C
46
I2cwbyte &HA0                                               'sende Slave Adresse
47
I2cwbyte 1                                                  'sende Speicheradresse High
48
I2cwbyte B                                                  'sende Speicheradresse Low
49

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

55
Locate 2 , 1
56
Print "Lese  EEprom= " ; Lesen ; "  "                       'Ausgabe der EEprom Werte
57
Waitms 500
58
Next B
59

60
Loop
61
End
LG
Gast #3989515
Lesenswert?

ich schrieb:
> ich habe wie im Code geschrieben ein 16mhz Quarz und die Fuses sind auch
> richtig

ich schrieb im Eingangspost:
> ich benutze ein 8mhz Quarz und habe einen Atmega 32.

Zitat aus dem o.g. Code:

Hier der Code:
'============I2C EEprom schreiben/lesen
==================================

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

Das war's dann: Verarsche Dich selbst!
#3990233
Lesenswert?

Hi, hier mal der Code den ich benutze. Allerdings in einer Schaltung, 
nicht im Pollin-Board. Bei mir wird noch der Schreibschutz benutzt, der 
ist beim Pollinboard ja fest auf High. Vielleicht hilft es ja.
1
'### Config EEPROM-Variablen
2
Const Eeprom_w = &HA0                                       'slave write address
3
Const Eeprom_r = &HA1                                       'slave read address
4
Dim Eeprom_count As Byte                                    ' Zähler
5
Dim Eeprom_anz As Byte
6
Dim Eeprom_adr As Word                                      ' Die Adresse als Word-Variable
7
Dim Eeprom_high_adr As Byte At Eeprom_adr + 1 Overlay       ' Zeiger auf das High-Byte
8
Dim Eeprom_low_adr As Byte At Eeprom_adr Overlay            ' Zeiger auf das Low-Byte
9
Dim Eeprom_data As String * 20                              ' Daten als String
10
Dim Eeprom_data_array(20) As Byte At Eeprom_data Overlay    ' Daten als Array
11

12
Eeprom_data = "Dies ist ein Test"
13
Eeprom_anz = 18                                             ' 18 Zeichen
14
Eeprom_adr=&H0000                                           ' ab Adresse 0 schreiben
15
Gosub Write_eeprom
16

17
Wait 1
18

19
Eeprom_anz = 7                                              ' 7 Zeichen einlesen
20
Eeprom_adr=&H0005                                           ' Ab Adresse 5
21
Gosub Read_eeprom                                           ' Nur "ist ein" einlesen
22
Print Eeprom_data
23

24
End
25

26
'#########################################################################
27
'# Allgemeine Routine zum Lesen aus EEPROM
28
Read_eeprom:
29
    For Eeprom_count = 1 To 19                              'Daten löschen
30
        Eeprom_data_array(eeprom_count) = 0
31
    Next Eeprom_count
32

33
    I2cstart                                                ' Generate start code
34
    I2cwbyte Eeprom_w                                       ' send address
35
    I2cwbyte Eeprom_high_adr
36
    I2cwbyte Eeprom_low_adr
37

38
    I2cstart                                                ' Generate start code
39
    I2cwbyte Eeprom_r                                       ' send address
40
    For Eeprom_count = 1 To Eeprom_anz
41
        If Eeprom_count = Eeprom_anz Then
42
            I2crbyte Eeprom_data_array(eeprom_count) , Nack
43
        Else
44
            I2crbyte Eeprom_data_array(eeprom_count) , Ack
45
        End If
46
    Next Eeprom_count
47
    I2cstop
48
Return
49

50

51
'#########################################################################
52
'# Allgemeine Routine zum Schreiben in EEPROM
53
Write_eeprom:
54
'    Reset Eeprom_wp                                         ' Schreibschutz aufheben
55
'    Waitms 1
56
    I2cstart                                                ' Generate start code
57
    I2cwbyte Eeprom_w                                       ' send address
58
    I2cwbyte Eeprom_high_adr
59
    I2cwbyte Eeprom_low_adr
60
    For Eeprom_count = 1 To Eeprom_anz
61
        I2cwbyte Eeprom_data_array(eeprom_count)
62
    Next Eeprom_count
63
    I2cstop
64
    Waitms 1
65
    Set Eeprom_wp                                           ' Schreibdschutz wieder setzen
66
Return
Gast #3990553
Lesenswert?

Hallo Zusammen,
ich habe es zum laufen bekommen:D.
Mein altes Eeprom war kaputt, der WS war auf HIGH und nicht auf LOW und 
die PullUP Widerstände sind mit 10k zu hoch. Aber dank eurer Hilfe und 
ein bisschen suchen im Datenblatt läuft es jetzt.

Unterm Strich bedeutet das also die Widerstände 9 & 10 auf dem Pollin 
Board mit zwei 1k Widerständen tauschen und WS irgendwie auf LOW legen 
dann läufts!
Vielen Dank!!!!

LG

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren