I2C Bus mit ATMEL USI

OP #3171000
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...
Angehängte Dateien:
OP #3178219
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.
Angehängte Dateien:
OP #3179002
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 ?
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.