Zitat von
__lissy__
Auch hier soll mein Controller (AT MEGA 164 PA) als Master arbeiten. Auf der Leiterplatte befindet sich ebenfallsnoch ein Temperatursensor (Auf Port B Pin 0). Dieser soll der Slave sein, wie auch schon beim Polling-Beispiel.
SCL befindet sich beim ATM164 auf PortC PC0, SDA auf PC1, auf PortB geht's höchstens mit Soft-I2C. Im Code ist zwar der PortC/DDRC richtig angegeben, kommt halt darauf an, wo der Sensor hängt, falls auf PortB, dann stellt die dazwischenliegende Luft ein zu großes Hindernis dar
Das hier macht wenig bis keinen Sinn:
Code:
TWI_DDR |= (1 << SDA);
TWI_DDR |= (1 << SCL);
Denn das Einschalten der I2C-Einheit "überfährt" bereits die normale Pinfunktion. Du könntest höchstens die Port-Bits setzen, dann werden die internen Pullups eingeschaltet.
Sind denn externe Pullups dran?
Außerdem ist der Fehlerfall ungünstig im Code gelöst, da I2C in einem solchen Fall nicht abgeschaltet wird und der Interrupt damit weiter auslöst.
Lesezeichen