PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [gelöst]I²C am Atmega8 - möglicher Kurzschluss



ASUR0
14.11.2010, 13:47
Ich hätte eine (theoretische) Frage zu I²C mit dem Atmega8:

Bei I²C werden alle Pins direkt verbunden mit Pull-Up gegen Vcc
Alle Pins haben open-collector.
Die Pins vom Atmega aber nicht. Wenn ich jetzt beim Atmega z.B. auf SDL auf high gehe, und ein anderer Pin an SDL auf low, dann müsste doch eigentlich ein Kurzschluss entsteht?

Ich möchte den PCF 8574 mit einem Software-emuliertem Master an Pin B4 und B5 anschließen...

radbruch
14.11.2010, 15:21
Hallo

Der Mega8 hat zwar keine open-collector-Ausgänge, dafür kann er mit seinen Ausgängen drei Zustände erzeugen: High, Low, Eingang. Und Eingang (mit internem PullUp) ist funktionell wie ein Open-Collector-High.

Gruß

mic

Besserwessi
14.11.2010, 15:26
Die Pins vom Hardware - TWI (I2C) Interface sind auch nur open Kollektor (bzw. genauer Open Drain), wenn man die Pins als I2C benutzt. Nur wenn der Rest des I2C bus weiter funktionieren soll, wenn der µC keine Versorgungsspannung hat, müsste man noch extra Dioden dazu schalten.

Bei Software I2C müsste man halt Dioden dazu schalten. Dann verhalten sich auch andere Pins ganz ähnlich wie Open-Kollektor Pins. Nur bei weniger als etwa 3 V stört dann der Spannungsabfall an der Diode.

Edit:
Die Lösung von Radbruch ist einfacher und besser.

hardware.bas
14.11.2010, 15:27
... soweit ich weiss sendet beim I2C-Impulsmanagment auch immer nur
ein Teilnehmer, so dass mehrere "volldurchgesteuerte" L oder H sich durch
ev. Parallelschaltungen nicht ins Gehege kommen. VG Micha

radbruch
14.11.2010, 15:49
Als Kennzeichen für den Start einer I2C-Kommunikation zieht ein Teilnehmer die Leitung auf Low. Wenn der AVR dabei ein echtes (hartes) High ausgibt, qualmt's. Elektronische Bauteile funktionieren mit Rauch...

PB4 und PB5 sind die Drehrichtung des linken Motors. Das bedeutet, der asuro kann und darf nur im Stillstand kommunizieren. Welche Software-I2C-Lösung verwendest du? Ich würde das gerne auch mal testen...

Gruß

mic

ASUR0
14.11.2010, 16:47
Vielen Dank für die vielen, schnellen, Antworten.


PB4 und PB5 sind die Drehrichtung des linken Motors. Das bedeutet, der asuro kann und darf nur im Stillstand kommunizieren. Welche Software-I2C-Lösung verwendest du? Ich würde das gerne auch mal testen...

sorry, es heißt PC2 und PC3, die Standard-I²C - Lösung, um dann ein Display anzuschließen.

http://www.asurowiki.de/pmwiki/pmwiki.php/Main/LCDErweiterung

Anscheinend klappt das ziemlich gut, ohne Kurzschluss


Als Kennzeichen für den Start einer I2C-Kommunikation zieht ein Teilnehmer die Leitung auf Low. Wenn der AVR dabei ein echtes (hartes) High ausgibt, qualmt's. Elektronische Bauteile funktionieren mit Rauch...

nett formuliert... d.h. es kann also tatsächlich ein Kurzschluss entsteht?


Und Eingang (mit internem PullUp) ist funktionell wie ein Open-Collector-High.


Ja, hier gibt es noch Hi-Z usw...
aber das nur, wenn der Pin auf Eingang geschalten ist. Bei I²C (wie in der AsuroLib beschrieben) wird der Pin als Ausgang auf High schalten, wofür laut Datenblatt kein PullUp verfügbar ist.


Nach bisschen überlegen kommt mir eine Idee:

Das I²C-Protokoll ist die Lösung:
Der Portexpander ist nur ein Slave, d.h. er schalten nicht selber SCL und SDA auf low, es entsteht kein Kurzschluss. Da er nie startet, braucht/kann er gar nicht SCL auf low ziehen (Datenblatt). Und wenn der etwas antwortet (z.B. ACK etc.) ist der Atmega als Eingang, im High-Z, mit PullUp und verhält sich wie open-collector-High.

Dadurch ist entsteht bestimmt kein Rauch :)

(man kann aber durch einen Programmfehler SCL auf low ziehen (Atmega: ich höre), aber dabei vergessen, SDA als Eingang zu schalten, ... )


Gruß

DL

radbruch
14.11.2010, 17:11
Ja, ich würde sagen, du hast es jetzt drauf :)

Seit ein paar Tagen spiele ich auch mit dem PCF 8574, allerdings nicht am asuro. Der LCD-Schaltplan im asuro-Wiki stimmt nicht mit der Software überein! Die Software selbst funktioniert aber, wenn man beim Anschluß die Defines beachtet:


////// PCF8574p PINS

#define LD4 4 // Pin to Data Bus 4
#define LD5 5 // Pin to Data Bus 5
#define LD6 6 // Pin to Data Bus 6
#define LD7 7 // Pin to Data Bus 7

#define LRS 0 // Pin to RS Pin (Register Select)
#define LRW 1 // Pin to Read/Write Pin
#define LEN 2 // Pin to Enable Pin
#define LBL 3 // Backlight Pin

https://www.roboternetz.de/phpBB2/viewtopic.php?p=525681#525681

Gruß

mic

ASUR0
14.11.2010, 18:22
Ja, ich würde sagen, du hast es jetzt drauf


Würde ich auch sagen :)

Ich habe vor, dass DOGM LCD Modul 163 (http://www.google.de/search?q=DOGM+LCD+Modul+163) zu verwenden und die Software selber zu schreiben, um mich in die Materie zu vertiefen, aber gut zu wissen...

Gruß
DL