Hallo zusammen, ich sitzte schon einige Tage an einem TWI Problem. Mein Slave reagiert einfach nicht. Ich habe mitlerweile das ganze Forum durchforstet, aber keine lösung gefunden. Im Anhang ist mein Master und Slave Programm, wäre schön wenn sich dies mal ein Profi dursieht und mir gegebefals weiterhelfen kann. mfg freeclimber
Wahrscheinlich bekommst du mehr Hilfe, wenn du den Code lesbar gestaltest: - festes Einrückschema - korrekte Kommentare - keine Hex-zahlen bei den Registern (sondern (1<<BIT_NAME)) Und beschreib mal was der Code machen soll - ich kann das so nicht erkennen. hth, Jörg
Prgramm Beschreibung: Soll eine einfache I²C routine darstellen Master: Empfängt über den USART eine '1' oder eine '2' und springt dann in das I²C transmitter unterprogramm um an den Slave eine 0x01=1 oder 0x02=2 zu senden. Dieser Teil sollte eigentlich funktionieren. Slave:Soll nun über den Interruptmodus diese 0x01 oder 0x02 empfangen und dann eine routine ausführen. Leider reagiert der Slave überhaupt nicht. Es kommt kein Interrupt zu stande, zumindestens sender er kein ACK zum Master zurück. mfg
Ich blick bei deiner Zustandsmaschine nicht durch, was mir aber auffällt ist
1 | |
2 | |
3 | |
Das ist a) falsch (du willst "(1<<PC0)|(1<<PC1)"), b) unnötig - die internen Pull-ups (20kOhm-50k) sind sowieso für I2C zu Groß. Und für deine Statuswerte bietet sich eine enum an:
1 | |
oder so ähnlich.
Besitzt du eine einfache slave routine in c für mich. Der slave soll nur vom Master im Interruptmodus Daten empfangen. Das würde mir schon sehr weiter helfen. Ihr im forum sind nur so überdimensionierte Programme.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.