Hey Leute..Zuerst muss ich sagen dass ich relativ neu bin im Umgang mit µCs..Hab nen bischen mit Arduino gebastelt und bin jetzt auf die Atxmega umgestiegen. Benutze den Atxmega 128a1 mit der IDE Atmel Studio v7 müsste das sein. Das Programm dient grundsätzlich dazu einen Drehgeber auszulesen. Dazu soll er mir erstmal die zurückgelegten Inkremente ausgeben. Stand: Alles initialisiert. UART funktioniert. Interrupt wird ausgelöst. Probleme: Einerseits gibt er in HTerm teilweise vierecke zwischendurch aus. Woran liegt das? Das größte Problem ist jedoch folgendes: Nachdem er in die ISR springt und dort ein Inkrement in die jeweilige Richtung hochzählt, gibt er keinen weiteren Wert aus. Er stoppt sozusagen, nachdem er das Interrupt durchlaufen hat anstatt an die vorherige Stelle in der Main zurückzuspringen. Fehlt mir dazu noch ein Befehl im Code um zurückzuspringen? Er stoppt selbst die serielle Ausgabe. Als ob er in die main nicht mehr rein springt.. Zudem gibt er mir am Ende auch nicht den hochgezählten Wert aus. Beim debuggen ist zu erkennen, dass er das Interrupt richtig abarbeitet. Jedoch nachdem er aus dem Interrupt geht, springt er in den "Disassembly" in die Stellen 127 bis 129 und verbleibt dort im "no source file" (fängt nach 129 wieder bei 127 an).. Packe den Code in einer TXT datei, einen Screenshot von HTerm sowie des Disassembly in den Anhang. Kann mir da jemand helfen? Grüße Bryan
[c] while (1) { Send_UART(Buffer); } [c] du sendest doch immer das gleiche? Kennst du das hier? http://www.mikrocontroller.net/articles/Drehgeber
Bryan O. schrieb: > Packe den Code in einer TXT datei, Packe den Code lieber in eine C-Datei und lass mal die riiiesigen Tabs weg (in der Selbstbeschränkung liegt der Meister). ä, ö, ü sind in C-Code auch eine ungute Idee.
Hey danke für die schnelle antwort. Das Prinzip ist mir ja schon bekannt, da ich damit mal etwas beim Arduino gemacht habe. Genau ich sende immer das gleiche bzw. die gleiche Variable (der Wert verändert sich ja). Das will ich ja auch erstmal zum testen. und da entsteht schon das Problem, dass kein hochzählen möglich ist. Er gibt mir die ganze Zeit den Wert 0 der Variable aus, bis das Interrupt ausgelöst wird. Anschließend macht er nichts mehr. Keine Ausgabe kein nichts. Eigentlich muss es so funktionieren, dass ich die Welle drehe und dadurch das Interrupt ausgelöst wird welches bei jeder Flanke die Inkremente hochzählt. Und ich will mir jetzt erstmal die zurückgelegten Inkremente in eine Richtung ausgeben lassen. Das klappt bisher nicht, da beim ersten Interrupt, wie erwähnt, der Controller nicht wieder in die while springt..weiß nicht ob ichs verständlich erkläre^^
Hier nochmal die .c ...umlaute und kommentare sind trotzdem noch drin :D
Bryan O. schrieb: > kommentare sind trotzdem noch drin Vieeel besser ..... und Kommentare sind willkommen.
Müsste das:
> itoa (increments_backward, Buffer, 10); //Umwandlung der Zahl in
String!!
nicht mit in die while schleife? Dort wo es jetzt steht ergibt es auf
jeden Fall wenig Sinn.
stimmt..er stoppt trotzdem noch sobald das interrupt ausgelöst wird..bzw hängt im disassembly in einer dauerschleife zwischen nummer 127 bis 129
Bryan O. schrieb: > stimmt..er stoppt trotzdem noch sobald das interrupt ausgelöst wird..bzw > hängt im disassembly in einer dauerschleife zwischen nummer 127 bis 129 du sendest auch ständig was, er wird einfach nicht fertig mit senden.
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.