Hallo zusammen! Derzeit versuche ich einen Smart-Sensor (Feuchte-Sensor mit integrierter Elektronik) an einen ATMega128 (2 Pins des Port A) mit einem 2-wire Bus (Sensor/sehr I2C-Bus ähnlich) anzubinden. Die SCL-Leitung(clock) funktioniert problemlos, d.h. der Takt wird übertragen (Pin A0 ist als normaler Ausgang definiert). Jedoch gibts mit der SDA-Leitung(data) Probleme. Die Data-Leitung soll bidirektional betrieben werden, d.h. Daten werden vom MC an den Sensor übermittelt (jeweils 1 Byte) und der Sensor antwortet auf der gleichen Leitung (9.Bit) bei jedem übertragenen Byte mit Acknowledge (ACK = 1) oder Not-Acknowledge(NAK = 0) und überträgt dann Daten mit 2 x 1 Byte an den MC. Wie muss ich den Data-Pin des Ports A von meinem Atmega konfigurieren? Jedesmal umschalten von Ein- auf Ausgang? Extern sind 2 Pull-up Widerstände (5,6k) vorgesehn. Bisher ist der Datenpin immer auf high und wenn auf low geschaltet geschaltet werden soll, bricht die spannung nur auf etwa 4 V zusammen. Was könnte eurer Meinung nach nicht stimmen? Vielen Dank schon mal für eure Hilfe! Grüße, Markus
Hi, Normalerweise schreibst Du auf das PORT-Bit eine 0 und togglest die Bits mit dem DDR Bit. Also PORTA = 0x00; DDRA &= ~0x01; Bit 0 auf Eingang => externer Pull-Up zieht Leitung auf 1 DDRA |= 0x01; Bit 0 auf Ausgang => Leitung sollte auf low getrieben werden. Lesen: DDRA &= 0x01; Eingang Bit = (PINA & 0x01); Bit einlesen Dann ist noch wichtig bei welcher Clock-Flanke die Daten übernommen werden. Gruß Dirk
Freut mich, auch wenn ich beim Einlesen ein ~ unterschlagen habe ;-) Dirk
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.