Forum: Compiler & IDEs Timer/Interrupt-Problem bei Atmega32


von dwiendl (Gast)


Angehängte Dateien:

Lesenswert?

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

von Oliver (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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).

von Dominik Wiendl (Gast)


Lesenswert?

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.

von Dominik Wiendl (Gast)


Angehängte Dateien:

Lesenswert?

Hier einmal das Ergebnis der Simulation beim Atmega32

von Dominik Wiendl (Gast)


Angehängte Dateien:

Lesenswert?

...und beim Atmega8

von Oliver (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.