Hallo. Ich hätte da ein kleines Problem, mit dem Timer / Interrupt von meinem Atmega32. Das Problem ist der Timer läuft nicht. Ich will einen Roboter mit digitalen Servos ansteuern, und habe mir einen entsprechenden Quellcode vom Internet geladen. Dieser Quellcode ist zwar für den Atmega 8 geschrieben, müsste aber auch für meinen AVR gehen. Die AVR Simulationssoftware meldet mir fehler, das nicht in den Registern für die Timer / Interrupts geschrieben werden kann. Auch das Osziloskop zeigt kein Signal.Ich hoffe, ihr könnt mit helfen. Hinweis: Ich habe in diesem Programm schon die PORTS A-D eingestellt. (DDRA...) MFG Dominik Wiendl
Die Timerinitialiserung sieht gut aus. Schöner wäre
1 | OCR1A = servofrequenz ; /* compare A 5000*/ |
2 | TCCR1B = (1<<WGM12) | (1<<CS11) | (1<<CS10) ; /* ctc mode, clk/64 */ |
3 | TIMSK = (1<OCIE1A); /* interrupt bei compare A*/ |
4 | sei (); |
gewesen, dann lässt sich das schneller erkennen. Ob das, was in der ISR passiert, alles Sinn macht, keine Ahnung. Auf den ersten Blick ja, auch wenn wartende while-Schleifen in einer ISR arg unschön sind. Ohne Simulator müsstest du das einfach mal als normale Funktion laufen lassen, mit einem delay dahinter. Auch wenn dann das timing nicht stimmt, sollte sich zumindest an den Ausgängen was tun. Alternativ kannst du das im AVRStudio simulieren, oder in VMLAB.
1 | #define servofrequenz 0x0a00 /* 19,88 ms*/ |
Was für einen krummen Qaurz hast du denn da dran? Oliver
dwiendl wrote: > entsprechenden Quellcode vom Internet geladen. Dieser Quellcode ist zwar > für den Atmega 8 geschrieben, müsste aber auch für meinen AVR gehen. Die > AVR Simulationssoftware meldet mir fehler, das nicht in den Registern > für die Timer / Interrupts geschrieben werden kann. Blöde Frage: Du hast aber schon an allen relevanten Stellen bekannt gegeben, dass du einen Mega32 und keinen Mega8 benutzt, und das Programm neu kompiliert? (Ich frage nur, weil das tatsächlich schon mal passiert, dass man insbesondere vergisst, die Simulatoren umzustellen).
Hi, ja ich habe entsprechend neu Complimiert ( einmal als Atmega8 und dann als Atmega32 :) ). Ob das mit dem #define servofrequenz... hinhaut, dass muss ich noch prüfen. Erst einmal muss das Program funktionieren. Es ist ja ein Schulprojekt, und bis jetzt kann der Roboter ja schon die Servos steuern (Servos werden hintereinander gesteuert nur mit dem _delay). Als Zusatz wäre jetzt halt die Aufgabe, ihn in "Echtzeit" zu steuern (mit Interrupt/Timer etc. Das mehrere Servos angesteuert werden können. Vielen Dank für euere Hilfe.
Vergiss simulavr (dafür). Der vollständigste Simulator unter Windows ist AVRStudio, aber am schönsten ist VMLAB :-) Damit kriegst du z.B. solch nette Anzeigen wie die im Anhang. Wie du siehst, funktioniert dein Programm in der Simulation. Oliver
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.