Ich möchte den ATMEGA als I2C Slave einsetzen. Leider habe ich bei der Entwicklung meiner Platine den I2C Bus an PD6/PD7 angeschlossen. Gibt es eine Soft-I2C-Slave Library für einen ATMEGA (32/128/644/1284) zum herunterladen? Die oft genannte Software-Lib von P. Fleury enthält nur ein I2C-Master Implementation. Oder kann ich anstatt der Pins PC0 (SCL) und PC1 (SDA) andere Anschlüsse verwenden (softwaremässig umkonfigurieren) und trotzdem Hardware-I2C benutzen?
Hallo Alois, nimm z.B. die: http://www.jtronics.de/avr-projekte/library-i2c-twi-slave.html Die 2. Frage kann ich nicht beantworten, zumindest mit dieser Lib geht das nicht. Gruß Hermann-Josef
Gast
#3005339
Application Note AVR154 mit Beschreibung und Code. Hättest Du auch mit minimalstem Einsatz selbst finden können.
Alois Neumann schrieb: > Ich möchte den ATMEGA als I2C Slave einsetzen. Leider habe ich bei der > Entwicklung meiner Platine den I2C Bus an PD6/PD7 angeschlossen. > > Gibt es eine Soft-I2C-Slave Library für einen ATMEGA (32/128/644/1284) > zum herunterladen? > > Die oft genannte Software-Lib von P. Fleury enthält nur ein I2C-Master > Implementation. > > Oder kann ich anstatt der Pins PC0 (SCL) und PC1 (SDA) andere Anschlüsse > verwenden (softwaremässig umkonfigurieren) und trotzdem Hardware-I2C > benutzen? Nein - leider nicht! Jedenfalls nicht mit der empfohlenen Software, die funktioniert nur mit entsprechenden Pins, die ein Interrupt / Event werfen. Gruß
Hendrik L. hat recht. Der SDA Pin muss mit einem externen Interrupt Eingang verbunden sein. Habe mein ATMEGA1284P SCL nun mit PD7 und SDA mit PD2 verbunden. Irgendwie scheint aber mein Code nicht zu funktionieren. twislave.h
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
twislave.c
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | |
164 | |
165 | |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | |
195 | |
196 | |
197 | |
198 | |
199 | |
200 | |
201 | |
202 | |
203 | |
204 | |
205 | |
206 | |
207 | |
208 | |
209 | |
210 | |
211 | |
212 | |
213 | |
214 | |
215 | |
216 | |
217 | |
218 | |
219 | |
220 | |
221 | |
222 | |
223 | |
224 | |
225 | |
226 | |
227 | |
228 | |
229 | |
230 | |
231 | |
232 | |
233 | |
234 | |
235 | |
236 | |
237 | |
238 | |
239 | |
240 | |
241 | |
242 | |
243 | |
244 | |
245 | |
246 | |
247 | |
248 | |
249 | |
250 | |
251 | |
252 | |
253 | |
254 | |
255 | |
256 | |
257 | |
258 | |
259 | |
260 | |
261 | |
262 | |
263 | |
264 | |
265 | |
266 | |
267 | |
268 | |
269 | |
270 | |
271 | |
272 | |
273 | |
274 | |
Gast
#3020285
>Irgendwie scheint aber mein Code nicht zu funktionieren. Super Beschreibung. Da freut sich natürlich jeder dir zu helfen. Was funktioniert nicht? Wo hängt es? Exakte Angaben sind erwünscht. >Ich möchte den ATMEGA als I2C Slave einsetzen. Leider habe ich bei der >Entwicklung meiner Platine den I2C Bus an PD6/PD7 angeschlossen. Das lässt sich mit ein paar mal durchtrennen von Leitungen und einigen Fädeldrähten lösen. Das ist auf jeden Fall besser als eine Sofware I2C Krücke.
holger schrieb: >>Irgendwie scheint aber mein Code nicht zu funktionieren. > > Super Beschreibung. Da freut sich natürlich jeder dir zu helfen. > Was funktioniert nicht? Wo hängt es? Exakte Angaben sind erwünscht. Trotz der Verwendung eines externen Interrupts (INT0) scheint der oben verwendete Code nicht zu funktionieren. Die Kommunikation läuft nicht. Der Slave wird an der Adresse: 0x5D am I2C Master nicht angezeigt. >>Ich möchte den ATMEGA als I2C Slave einsetzen. Leider habe ich bei der >>Entwicklung meiner Platine den I2C Bus an PD6/PD7 angeschlossen. > > Das lässt sich mit ein paar mal durchtrennen von Leitungen und > einigen Fädeldrähten lösen. Das ist auf jeden Fall besser als > eine Sofware I2C Krücke. So habe ich es letztendlich gelöst. Habe SCL mit PC0 und SDA mit PC1 verbunden und den Code (Hardware TWI) dementsprechend angepasst. Jetzt läuft es. Es scheint wirklich keine funktionierende TWI-Slave Software-Emulation für den ATMega 32/644/1284 zu geben. Schade :(
Alois Neumann schrieb: > holger schrieb: >>>Irgendwie scheint aber mein Code nicht zu funktionieren. >> >> Super Beschreibung. Da freut sich natürlich jeder dir zu helfen. >> Was funktioniert nicht? Wo hängt es? Exakte Angaben sind erwünscht. > Trotz der Verwendung eines externen Interrupts (INT0) scheint der oben > verwendete Code nicht zu funktionieren. Die Kommunikation läuft nicht. > Der Slave wird an der Adresse: 0x5D am I2C Master nicht angezeigt. Na ja. Das ist ja immer noch keine vernünftige Beschreibung aus der man ablesen könnte, dass du weißt was du tust. Kommt der Interrupt? Wird der Startstate erkannt? Was macht die State Maschine? Du wirst doch wohl ein paar Dinge selbst überprüft haben. So funktioniert nun mal Debugging. Wenn nichts funktioniert, dann muss man rauskriegen, woran es hängt. Ist in allen Lebensbereichen in der Technik so. Du hast jetzt vom reinen Autofahrer zum Mechaniker gewechselt. Als Autofahrer ist es ok, wenn du sagst: mein Auto fährt nicht. Als Mechaniker muss es dir auffallen, dass der Motor deswegen nicht anspringt weil Wasser im Vergaser ist, weil das Auto im den Fluss gefallen ist.
Alois Neumann schrieb: ... > läuft es. > > Es scheint wirklich keine funktionierende TWI-Slave Software-Emulation > für den ATMega 32/644/1284 zu geben. Schade :( Sag mal, liest Du eigentlich die Antworten ??? http://www.jtronics.de/avr-projekte/library-i2c-twi-slave.html Diese Library funktioniert bei mir! Gruß
Gast
#3031799
@Hendrik L Jo, wer des Lesens mächtig ist, ist echt im Vorteil! Sofware I2C war gesucht.
suzi schrieb: > @Hendrik L > > Jo, wer des Lesens mächtig ist, ist echt im Vorteil! > Sofware I2C war gesucht. Okay - sorry! Aber auch für die (HW-) I2C (USI) Schnittstelle brauchst Du Software. Was du suchst, ist so genannte http://de.wikipedia.org/wiki/Bitbang Software ...! Soft-I2C-Slave Lib ist ein wenig ambigiuous. Gruß
Nochmal für alle... einen TWI Slave mit Hardware TWI zu programmieren ist kein Problem. Ich suche eine Software Emulation. Einzigsten Code den ich gefunden habe der darauf abzielt sind die oben erwähnten Zeilen, die bei mir aber nicht laufen. Diese benötigen jedoch mindestens einen externen Hardware-Interrupt Eingang (INT0/INT1 oder INT2). Ansonsten habe ich in dieser Richtung nichts gefunden. Komischerweise gibt es mehrere funktionierende Quellcodes über eine TWI Master Software Emulation. Habe selbst die von Peter Fleury neben einem Hardware TWI am laufen. Aber eine TWI Slave Software Emulation... Fehlanzeige...
Alois Neumann schrieb: > Ich suche eine Software Emulation. Das geht beim AVR nunmal nicht. Bei den standard 100kHz hast Du max 4µs Zeit, um in den Interrupt zu springen und den SCL zu stretchen. Das sind nur 64 Zyklen bei 16MHz und damit hart auf knirsch. Sobald Du noch andere Interrupts benötigst, krachts (der AVR hat ja keine Interruptlevel). Wenn I2C in SW gehen soll, muß man daher mit dem I2C-Takt deutlich runter gehen, z.B. auf 10kHz oder der AVR darf nichts anderes machen, als nur I2C.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.