francesco
15.05.2008, 15:11
Hallo,
Mein Ziel ist es, mehrere AVRs (alles ATmega16) zu vernetzen, wobei nur ein definierter unveränderlicher Master vorliegt, der an eine unbestimmte Anzahl Slaves (die wahlweise am Bus angesteckt werden können) Daten sendet. Um nicht jedes Mal einen Slave mit einer neuen Adresse festzulegen, besitzen alle Slaves die selbe Adresse und werden vom Master per GENERAL CALL angesprochen. Die Rückantwort der Slaves ist uninteressant, es interessieren nur die Transferdaten vom Master, die für alle Slaves identisch sind. Vom Prinzip her hatte ich auch schon eine erfolgreiche Kommunikation mit mehreren Slaves aufgebaut. Das Problem ist jedoch, dass durch das laufende An- und Abstecken der Teilnehmer (das leider in der Praxis vorkommen kann) sich der Bus manchmal aufhängt und nur wieder durch einen Hardware-Reset des Masters und aller Slaves eine neue Kommunikation stattfindet.
Softwaremäßig (WinAVR-gcc) habe ich schon viele Versuche unternohmmen, doch der Bus startet einfach nicht mehr.
Hat sich schon mal jemand mit diesem Problem auseinandergesetzt?
Nachtrag, betr. Hardware AVR:
------------------------------------
Ein übrigens sehr interessantes Phänomen habe ich beobachtet, wenn ich von einem Slave den Versorgungs-Minus abklemme (U+ und die beiden TWI-Leitungen sind noch angeklemmt). In diesem Falle holt sich der Slave den Minus über die beiden TWI-Leitungen der anderen Teilnehmer. Das Slaveboard - bestehend aus einem ATmega16 und einem Grafikdisplay mit Hintergrundbeleuchtung (zieht normalerweise um die 100mA) wird dabei mit einem "hochohmigen" Minus versorgt, sodass die Hintergrundbeleuchtung schwach leuchtet. Da aber die beiden TWI-Leitungen absolout nirgends nach Masse führen, können diese beiden Pins nur vom anderen Board nach Minus geschaltet werden. Ich finde das ziemlich bedenklich, fließt doch der Strom über den einen Versorgungsplus des Boardes 2 über die Displaybeleuchtung (bzw. auch über die komplette Last der Boardversorgung 2) zu den Portpins PC0 und PC1 des Boardes 1 und von hier endlich nach Masse. Die Atmegas können laut Spezifikation im Extremfall ca. max. 200mA für einen Pin bereit stellen - sowohl Sink als auch Source. Ob für den TWI-Betrieb eine interne Begrenzung vorgesehen ist, bezweifle ich. Also könnte man im ungünstigsten Fall durch die unsymmetrische Spannungsversorgung den Controller zerschießen.
Falls ich falsch liege, korrigiert mich bitte.
francesco
Mein Ziel ist es, mehrere AVRs (alles ATmega16) zu vernetzen, wobei nur ein definierter unveränderlicher Master vorliegt, der an eine unbestimmte Anzahl Slaves (die wahlweise am Bus angesteckt werden können) Daten sendet. Um nicht jedes Mal einen Slave mit einer neuen Adresse festzulegen, besitzen alle Slaves die selbe Adresse und werden vom Master per GENERAL CALL angesprochen. Die Rückantwort der Slaves ist uninteressant, es interessieren nur die Transferdaten vom Master, die für alle Slaves identisch sind. Vom Prinzip her hatte ich auch schon eine erfolgreiche Kommunikation mit mehreren Slaves aufgebaut. Das Problem ist jedoch, dass durch das laufende An- und Abstecken der Teilnehmer (das leider in der Praxis vorkommen kann) sich der Bus manchmal aufhängt und nur wieder durch einen Hardware-Reset des Masters und aller Slaves eine neue Kommunikation stattfindet.
Softwaremäßig (WinAVR-gcc) habe ich schon viele Versuche unternohmmen, doch der Bus startet einfach nicht mehr.
Hat sich schon mal jemand mit diesem Problem auseinandergesetzt?
Nachtrag, betr. Hardware AVR:
------------------------------------
Ein übrigens sehr interessantes Phänomen habe ich beobachtet, wenn ich von einem Slave den Versorgungs-Minus abklemme (U+ und die beiden TWI-Leitungen sind noch angeklemmt). In diesem Falle holt sich der Slave den Minus über die beiden TWI-Leitungen der anderen Teilnehmer. Das Slaveboard - bestehend aus einem ATmega16 und einem Grafikdisplay mit Hintergrundbeleuchtung (zieht normalerweise um die 100mA) wird dabei mit einem "hochohmigen" Minus versorgt, sodass die Hintergrundbeleuchtung schwach leuchtet. Da aber die beiden TWI-Leitungen absolout nirgends nach Masse führen, können diese beiden Pins nur vom anderen Board nach Minus geschaltet werden. Ich finde das ziemlich bedenklich, fließt doch der Strom über den einen Versorgungsplus des Boardes 2 über die Displaybeleuchtung (bzw. auch über die komplette Last der Boardversorgung 2) zu den Portpins PC0 und PC1 des Boardes 1 und von hier endlich nach Masse. Die Atmegas können laut Spezifikation im Extremfall ca. max. 200mA für einen Pin bereit stellen - sowohl Sink als auch Source. Ob für den TWI-Betrieb eine interne Begrenzung vorgesehen ist, bezweifle ich. Also könnte man im ungünstigsten Fall durch die unsymmetrische Spannungsversorgung den Controller zerschießen.
Falls ich falsch liege, korrigiert mich bitte.
francesco