nfs2k
16.05.2012, 09:46
Hi RN Community
Ich bin über das Thema TWI_Slave_mit_avr-gcc (http://www.rn-wissen.de/index.php/TWI_Slave_mit_avr-gcc) von euch gestolpert.
Dies habe ich natürlich gleich ausprobiert.
Ich benutze 2 Atmega128. Soweit funktioniert auch alles.
Ich kann von dem einen atmega128 im mastermodus die daten zum Slave schicken. Dieser ändert auch seine "Register".
Doch das Auslesen funktioniert irgendwie bei mir nicht wie es in der Doku beschrieben ist.
Also : Start(Slave+write) -> write (register ) -> Repstart (Slave+read) -> readack -> readack -> readnack -> stop.
Ich habe aber herausgefunden (da in der Slaveimplementierung beim Stop && || beim Start-ST-Modus das Register nicht wieder auf 0xFF gesetzt wird) dass ich so trotzdem meine Daten bekomme, da der Slave auch bei erneutem Start noch die alte angefragte Registeradresse kennt.
Also : Start(Slave+write) -> write (register ) ->STOP -> Start (Slave+read) -> readack -> readack -> readnack -> stop.
Wie bekomme ich aber nun den Repstart zum laufen !?
Sobald der Repstart kommt wird die SCL Leitung auf LOW gezogen und der BUS hängt.
Ich habe beim Slave die Switch Case anweisungen debuggt und im Falle des REpstarts geht der Slave in den DEFAULT CASE was ich nicht verstehe wieso er das tut.
Ich hoffe es hat jemand eine idee zur Lösung meines Problems.
Vielen Dank schoneinmal im Voraus
mfg
nfs2k
Ich bin über das Thema TWI_Slave_mit_avr-gcc (http://www.rn-wissen.de/index.php/TWI_Slave_mit_avr-gcc) von euch gestolpert.
Dies habe ich natürlich gleich ausprobiert.
Ich benutze 2 Atmega128. Soweit funktioniert auch alles.
Ich kann von dem einen atmega128 im mastermodus die daten zum Slave schicken. Dieser ändert auch seine "Register".
Doch das Auslesen funktioniert irgendwie bei mir nicht wie es in der Doku beschrieben ist.
Also : Start(Slave+write) -> write (register ) -> Repstart (Slave+read) -> readack -> readack -> readnack -> stop.
Ich habe aber herausgefunden (da in der Slaveimplementierung beim Stop && || beim Start-ST-Modus das Register nicht wieder auf 0xFF gesetzt wird) dass ich so trotzdem meine Daten bekomme, da der Slave auch bei erneutem Start noch die alte angefragte Registeradresse kennt.
Also : Start(Slave+write) -> write (register ) ->STOP -> Start (Slave+read) -> readack -> readack -> readnack -> stop.
Wie bekomme ich aber nun den Repstart zum laufen !?
Sobald der Repstart kommt wird die SCL Leitung auf LOW gezogen und der BUS hängt.
Ich habe beim Slave die Switch Case anweisungen debuggt und im Falle des REpstarts geht der Slave in den DEFAULT CASE was ich nicht verstehe wieso er das tut.
Ich hoffe es hat jemand eine idee zur Lösung meines Problems.
Vielen Dank schoneinmal im Voraus
mfg
nfs2k