Problem mir TWI (Master Receiver Modus)

Gast #218089
Lesenswert?

Hallo!

ich möchte mittels twi einen DS1631 ansteuern.
Dabei gerate ich beim Master Receiver Modus auf Probleme.

Aber von vorne:
Das Datenblatt gibt mir ja die Kommunikation vor.
Um genau zu sein sollte es so aussehen.

START->ControlByte(Write)->ACK->CommandByte->ACK->
->RepeatSTART->ControlByte(Read)->ACK->MS Data->ACK(Master)->LS
Data(Master)->Stop

Ich verstehe den Ablauf genau bis zum letzten ACK das vom Sensor
stammt. Ab hier komm ich nicht wirklich weiter.

Offene Fragen:
Wie sag ich es dem µC dass er einmal mit ACK antwortet, das andere mal
NACK. Ich kann ja zwischendurch ned umstellen!? (TWEA)
Wie soll ich abfragen ob ich die fertig übertragen Daten aus twbr
auslesen kann? TWINT in einer Schleife abfragen!?
Wie weiß ich ob ein Slave ein oder 2 Datenbyte überträgt. Ich muss ja
den Master darauf vorbereiten....????

Am liebsten wär mir natürlich ein asm-code-schnipsel, der mir all dies
beantwortet.

Ich hoffe ihr könnt mir helfen...
Danke schon mal
Hias
Gast #218090
Lesenswert?

"Offene Fragen:
Wie sag ich es dem µC dass er einmal mit ACK antwortet, das andere mal
NACK. Ich kann ja zwischendurch ned umstellen!? (TWEA)"

Doch, man kann das umstellen.

"Wie soll ich abfragen ob ich die fertig übertragen Daten aus twbr
auslesen kann? TWINT in einer Schleife abfragen!?"

Genau so, oder einen Interrupt schreiben. Das TWINT-Bit wird aber nicht
nur einmal pro Übertragung ausgelöst, sondern mehrmals.

"Wie weiß ich ob ein Slave ein oder 2 Datenbyte überträgt. Ich muss
ja
den Master darauf vorbereiten....????"

Der Master muß einfach "wissen", wieviele Bytes kommen werden.
Umgekehrt (Master->Slave) ist das einfacher, da kann der Slave durch
ein "nACK" dem Master mitteilen, daß er satt ist.

Schau Dir die Diagramme im Datenblatt nochmal an, auch die
Codebeispiele des Datenblattes lassen normalerweise keine Fragen offen.
Gast #218092
Lesenswert?

Hallo nochmal!

ich habe jetzt versucht all das umzusetzten, was thkais gesagt hat.

Leider scheitert es immer noch am Empfang von Daten als Master.

Ich hab im Anhang mal den Code gegeben.
Vielleicht könnte einer von euch mal drüberschauen, speziell
receive_data_byte

Ich bekomm immer ne Error-Meldung, wenn ich in send_stop_r, TWSR
prüfe...

Danke Hias
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren