Hallo Zusammen Ich eröffne mal einen neuen Beitrag, da es im alten langsam ein Durcheinander gegeben hat, man weis gar nicht mehr genau, was überhaupt das Problem ist. Also hier: Ich bin dabei eine Verbindung mit einem I2C bus zwischen einem Attin45 (Master) und einem Attiny85 (Slave) aufzubauen. Der Master macht die I2C Schnittstelle per Software. Beim Slave verwende ich das USI mit START und OVF Interrupt. Der Master_write_mode funktioniert, ich kann mehrere bytes zum Slave übertragen. Nun habe ich Probleme beim Master_read_mode. Slaveadresse kommt beim Slave an, und jetzt sollte der Slave ein byte zurück an den Master senden, geht aber irgendwie nicht. Ich weiss nicht genau, ob ich das DDRB Register richtig setzte, habe da schon mehrere Varianten versucht. Ich probiere nun seit Tagen, aber ich sehe vor lauter Bäume den Wald nicht mehr Wahrscheinlich ist es nur eine kleine Sache...
So habe mal die ganze Sache mit dem Oszi angeschaut. Startkondition, danach kommt &h31 beim Slave an. Nun schalte ich SDA mit DDRB.0 = 1 auf output. Wenn ich das jetzt richtig sehe, wird SDA jedoch nur etwa 0.5 Takte auf output geschaltet. Kennt sich damit jemand genauer aus ? Bin um jede Hilfe dankbar.
Mit dem bisherigen Code des Slaves, wurde das ACK nach dem empfangen der Adresse, nicht an Master gesendet. Theoretisch sollte der Ablauf des Slaves doch so sein: -START ISR, Counter auf 0 setzten -wenn Counteroverflow, dann wurde die Adresse empfangen, nun ACK senden -> SDA auf Output, Counter = 14 wenn ich SDA auf Output setzte, geht SDA auf low, verlasse ich nun die OVF-ISR, geht SDA sofort wieder auf high. Ich kann also nicht einmal ein ACK vom Slave zum Master senden. Im Datenblatt steht: When the output driver is enabled for the SDA pin it will force the line SDA low if the output of the USI Data Register or the corresponding bit in the PORTB register is zero. Otherwise, the SDA line will not be driven (i.e., it is released). Warum geht den SDA beim verlassen der ISR sofort wieder auf high ?
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.