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
unsignedchara=0;
2
unsignedcharb=0;
3
unsignedcharc=0;
4
unsignedchard=0;
5
unsignedchare=0;
6
unsignedcharf=0;
7
unsignedcharg=0;
8
unsignedcharh=0;
9
unsignedcharz=1;
10
voidsetup(){
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
voidloop()
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
voidgetdata()
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
voidinittransferread()
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
voidinittransferwrite()
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
voidsendadressbyte()
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
voidputdata()
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
voidticktock()
181
{
182
digitalWrite(2,LOW);
183
digitalWrite(2,HIGH);
184
digitalWrite(2,LOW);
185
}
186
187
/*Ende der Kommunikation*/
188
voidendkomm()
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.