Forum: Mikrocontroller und Digitale Elektronik atmega8515 auf STK 500: Timer funtkionieren nicht


von MrWhite (Gast)


Lesenswert?

Hallo Leute,

ich hoffe ihr koennt mir helfen.

Habe auf dem STK500 einen ATMega8515 und moechte dort einen 
Timer-Interrupt nutzen.

Klappt nur leider nicht, habe mittlerweile bestimmt 20 Sources aus dem 
Internet ausprobiert (auch aus diesem Forum), aber nichts funkioniert!

Hat jemand ein Beispiel, das verifiziertermassen funktioniert? Muessen 
noch irgendwelche Einstellungen auf dem STK500 vorgenommen werden? Oder 
muessen eventuell noch bestimmte Fuses eingestellt werden?

Hoffe ihr koennt mir helfen,
MrWhite

von MrWhite (Gast)


Lesenswert?

Nachtrag:

Nutze avr-gcc in der Version 4.3 und avr-dude in Version 5.8.

Der Controller fuehrt alles, was nichts mit Timern zu tun hat ohne 
Probleme aus (nutze sonst keine Interrupts, bin Anfaenger).

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ich nenne mal ein paar Dinge, auf die man achten sollte:

Ist der Timer eingeschaltet?
Ist der Timerinterrupt eingeschaltet?
Ist das Bit "general interrupt enable" gesetzt?
Hat die Interrupt-Service-Routine den richtigen Interruptvektor?

Grüße,

Peter

von MrWhite (Gast)


Lesenswert?

Naja,

der Code aus diesem Post:
Beitrag "Re: Problem mit Timer Atmega8515"

sollte ja zumindest ein LED leuchten lassen, dass an PORTB dran ist. Und 
zwar auf dem STK500 jeweils die oberen und unteren 4 abwechselnd.

Funktioniert aber nicht. Meiner bescheidenen Meinung nach, ist der Code 
abre korrekt.

von Hc Z. (mizch)


Lesenswert?

Was heißt

> Funktioniert aber nicht.

?  Sind die LEDs alle aus, alle an, ist eine 4er-Gruppe davon an?

Was passiert, wenn Du im Programm folgende Zeile
1
   PORTB = 0xff;
gegen diese
1
   PORTB = 0;
tauschst?  Ändert sich an der Anzeige etwas?

von Andreas H. (andreas31)


Lesenswert?

Peter Diener schrieb:
> Ich nenne mal ein paar Dinge, auf die man achten sollte:

Ergänzung:

Ist das 10-polige Flachbandkabel gesteckt?

Grüße
Andreas

von MrWhite (Gast)


Lesenswert?

Hc Zimmerer schrieb:
> Was heißt
>
>> Funktioniert aber nicht.
>
> ?  Sind die LEDs alle aus, alle an, ist eine 4er-Gruppe davon an?
>

Das LED0 blinkt, die anderen 7 sind aus.

> Was passiert, wenn Du im Programm folgende Zeile   PORTB = 0xff;
> gegen diese   PORTB = 0;
> tauschst?  Ändert sich an der Anzeige etwas?

Alle LEDs blinken.

von MrWhite (Gast)


Lesenswert?

Andreas H. schrieb:
> Ergänzung:
>
> Ist das 10-polige Flachbandkabel gesteckt?

Also ganz bloed bin ich auch nicht!

von MrWhite (Gast)


Lesenswert?

Hier mal der exakte Compiler-Aufruf:

avr-gcc -g -Os -I/usr/lib/avr/include/ -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-ahlms=program.lst  -Wl,-Map=program.map,--cref 
-L../../lib  program.c   -o program


Habe mit Optimization-Levels hantiert. O1 oder O0 schafft aber auch 
keine Abhilfe. Das Verhalten des Programms kann ich mir einfach nicht 
erklaeren.

von MrWhite (Gast)


Angehängte Dateien:

Lesenswert?

Neue Erkenntnis.

Wenigstens funktioniert die Hauptschleife, wenn ich den call auf

sei();

auskommentiere!

Kann es sein, dass der Chip permanent im Interrupt gefangen ist? Was 
kann das verursachen.

Anbei der Code.

Bitte helft mir, alleine komme ich vermutlich nie drauf!

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.