Hallo Leute, ich verwende einen XMEGA256A3U Mikrocontroller von Atmel. An dem Mikrocontroller ist ein Schrttmotor per I2C angeschlossen. Es gibt nur einen Master am Bus und das ist mein XMEGA256A3U. Ich schreibe Testdaten in den Slave (siehe Sreenshot). Zuerst erzeuge ich den Start-Pulse, anschließend übertrage ich die Adresse vom Slave und das Bit 0 für schreiben. Dies wird auch alles richtig übertragen und ich erhalte ein ACK vom Slave zurück. Anschließend übertrage ich die Testdaten 0xAA, 0xFF und 0xDD. Alle Testdaten werden richtig übertragen und werden vom Slave mit einem ACK quitiert. Doch nun zu meinem Problem. Nach erfolgreicher Übertragung sende ich die Stop Bedingung doch wie man im zweiten Screenshot sehen kann ist dieser nur sehr kurz und wird daher nicht erkannt. Der XMEGA besitzt das CTRLC (Control Register C) Register. Ich habe in Bit 0 und 1 0b11 reingeschrieben. Durch diesen Befehl soll der XMEGA256A3U automatisch einen Stop Bedingung erzeugen. Ich habe extern zwei Pullups am SDA und SCL angeschlossen. Es sind auch keine Fehler bei der Datenübertragung aufgetreten ich habe das RXACK, ARBLOST und BUSERR Flag geprüft.
Ich habe den Fehler gefunden :-) Ich habde direkt nach den Stop Befehl den I2C Kern deaktiviert :-) Dies sollte man nicht machen :-))))
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.