Forum: Mikrocontroller und Digitale Elektronik Arduino Ansteuerung EEPROM


von Franz (Gast)


Lesenswert?

Hallo, ich wollte heute folgenden EEPROM ansteuern. Erst mit dem Arduino 
zum testen, später sollte das dann mit nem Attiny realisiert werden.

Es handelt sich um folgenden IC:

http://www.it-tronics.de/Files/Datasheets/Active_Components/ICs/24C01WP.pdf

Habe das ganze auf einem Steckbrett aufgebaut und an SCL noch eine LED 
dazugeschaltet damit ich sehen kann ob das ACK auch ankommt. Das ganze 
klappt auch soweit ganz gut. Problem ist nur, dass ich wenn ich auslese 
leider nur 1en bekomme (da der EEPROM von Haus aus ja mit 1en gefüttert 
wurden ist, gehe ich davon aus, dass ich nichts geschrieben habe :D)

Hier ist mein Code:
1
 unsigned char a=0;
2
  unsigned char b=0;
3
  unsigned char c=0;
4
  unsigned char d=0;
5
  unsigned char e=0;
6
  unsigned char f=0;
7
  unsigned char g=0;
8
  unsigned char h=0;
9
  unsigned char z=1;
10
void setup() {
11
12
  /* Definiere OUTPUT PINS*/
13
  pinMode(2,OUTPUT); //SCL
14
  pinMode(3,OUTPUT); //SDA
15
  digitalWrite(2,HIGH);
16
  digitalWrite(3,HIGH);
17
  // SCHREIBE ins EEprom
18
  inittransferwrite();
19
  sendadressbyte();
20
  putdata();
21
  // LESE aus dem EEPROM
22
  inittransferwrite();
23
  sendadressbyte();
24
  inittransferread();
25
  getdata();
26
  
27
  
28
29
}
30
31
void loop()
32
{
33
  Serial.println(z);
34
  Serial.println(a);
35
  Serial.println(b);
36
  Serial.println(c);
37
  Serial.println(d);
38
  Serial.println(e);
39
  Serial.println(f);
40
  Serial.println(g);
41
  Serial.println(h);
42
  delay(1000);
43
}
44
//Hole die Daten
45
void getdata()
46
{
47
 pinMode(3,INPUT);
48
  ticktock();
49
  a=digitalRead(3);
50
  ticktock();
51
  b=digitalRead(3);
52
  ticktock();
53
  c=digitalRead(3);
54
  ticktock();
55
  d=digitalRead(3);
56
  ticktock();
57
  e=digitalRead(3);
58
  ticktock();
59
  f=digitalRead(3);
60
  ticktock();
61
  g=digitalRead(3);
62
  ticktock();
63
  h=digitalRead(3);
64
  ticktock();
65
   
66
  
67
 /* for(int i =0;i<7;i++)
68
  {
69
    erg|=(digitalRead(3)<<(7-i));
70
    ticktock();
71
  }*/
72
endkomm();
73
}
74
75
//Ititialisiere zum lesen
76
void inittransferread()
77
{
78
  ticktock();
79
  digitalWrite(3,LOW); 
80
  delay(1);
81
  digitalWrite(2,LOW);
82
  digitalWrite(3,HIGH);
83
  ticktock();
84
  digitalWrite(3,LOW);
85
  ticktock();
86
  digitalWrite(3,HIGH);
87
  ticktock();
88
  digitalWrite(3,LOW);
89
  ticktock();
90
  digitalWrite(3,LOW);
91
  ticktock();
92
  digitalWrite(3,LOW);
93
  ticktock();
94
  digitalWrite(3,LOW);
95
  ticktock();
96
  digitalWrite(3,HIGH);
97
  ticktock();
98
  
99
 
100
}
101
102
/* Initialisiere zum Schreiben
103
Bits: 1010 000 0*/
104
105
void inittransferwrite()
106
{
107
  digitalWrite(3,LOW); 
108
  delay(1);
109
  digitalWrite(2,LOW);
110
  digitalWrite(3,HIGH);
111
  ticktock();
112
  digitalWrite(3,LOW);
113
  ticktock();
114
  digitalWrite(3,HIGH);
115
  ticktock();
116
  digitalWrite(3,LOW);
117
  ticktock();
118
  digitalWrite(3,LOW);
119
  ticktock();
120
  digitalWrite(3,LOW);
121
  ticktock();
122
  digitalWrite(3,LOW);
123
  ticktock();
124
  digitalWrite(3,LOW);
125
  ticktock();
126
  
127
 
128
}
129
130
/* Adresse an die geschrieben/gelesen werden soll : 1*/
131
132
void sendadressbyte()
133
{
134
  ticktock();
135
  digitalWrite(3,LOW);
136
  ticktock();
137
  digitalWrite(3,LOW);
138
  ticktock();
139
  digitalWrite(3,LOW);
140
  ticktock();
141
  digitalWrite(3,LOW);
142
  ticktock();
143
  digitalWrite(3,LOW);
144
  ticktock();
145
  digitalWrite(3,LOW);
146
  ticktock();
147
  digitalWrite(3,LOW);
148
  ticktock();
149
  digitalWrite(3,HIGH);
150
  ticktock();
151
}
152
153
//Daten die geschrieben werden sollen 0
154
void putdata()
155
{
156
  ticktock();
157
  digitalWrite(3,LOW);
158
  ticktock();
159
  digitalWrite(3,LOW);
160
  ticktock();
161
  digitalWrite(3,LOW);
162
  ticktock();
163
  digitalWrite(3,LOW);
164
  ticktock();
165
  digitalWrite(3,LOW);
166
  ticktock();
167
  digitalWrite(3,LOW);
168
  ticktock();
169
  digitalWrite(3,LOW);
170
  ticktock();
171
  digitalWrite(3,LOW);
172
  ticktock();
173
  ticktock();
174
  
175
 endkomm();
176
 
177
}
178
179
/*Clockzyklus*/
180
void ticktock()
181
{
182
  digitalWrite(2,LOW);
183
  digitalWrite(2,HIGH);
184
  digitalWrite(2,LOW);
185
}
186
187
/*Ende der Kommunikation*/
188
void endkomm()
189
{
190
  digitalWrite(2,HIGH);
191
  delay(1);
192
  digitalWrite(3,HIGH); 
193
}
Als erstes soll geschrieben werden. Dafür folgt die Initialisierung mit 
entsprechendem Write Bit dann die Adresse an die geschrieben werden soll 
(1) und am Schluss das Byte, dass geschrieben werden soll (0)

Jemand nen Tipp?

Würde ungern die Wire Funktion benutzen, da ich ja später für den Attiny 
diese Implementierung nahezu verwenden will.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.