Atxmega128a1 - Drehgeber auslesen

OP (Firma: XX) #4571710
Lesenswert?

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
Angehängte Dateien:
OP (Firma: XX) #4571743
Lesenswert?

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^^

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