Timer bei Atmega 2560

OP #2196005
Lesenswert?

Liebe Fachleute...,

wir(2 Lehrlinge und ein Ausbildner) versuchen hier seit ca 1ner Woche 
einen Timer bei unserem Atmega 2560 zu programmieren, wir haben einige 
Beispiele im Internet gefunden, jedoch funktioniert keines im 
simulator...

das aufwärts zählen des timer/counter1 funktioniert einwandfrei jedoch 
beim overflow springt er nicht in den angegebenen loop

unser haupt Problem ist, dass keiner wirklich versteht was wir da 
programmieren und wieso es nicht so funktioniert wie es sollte(wir sind 
alle noch totale Anfänger).

Wir hoffen jemand von Euch erklärt uns das ein bisschen (das Tutorial zu 
diesem Thema haben wir bereits mehrere male gelesen)

Programmiert wird im AVR Studio 4
verwendeter Debugger: AVR Simulator
Verwendeter yC : ATmega 2560 8AU

hier noch der quellcode den wir verwenden:

.include "m2560def.inc"

.def temp = r16
.def leds = r17

.org 0x0000
        rjmp    main                  ; Reset Handler
.org OVF0addr
        rjmp    timer0_overflow       ; Timer Overflow Handler

main:
        ; Stackpointer initialisieren
        ldi     temp, HIGH(RAMEND)
        out     SPH, temp
        ldi     temp, LOW(RAMEND)
        out     SPL, temp

        ldi     temp, 0xFF            ; Port B auf Ausgang
        out     DDRB, temp

        ldi     leds, 0xFF

        ldi     temp, (1<<CS00)       ; CS00 setzen: Teiler 1
        out     TCCR0, temp

        ldi     temp, (1<<TOIE0)      ; TOIE0: Interrupt bei Timer 
Overflow
        out     TOIE0, temp

        sei

loop:   rjmp    loop

timer0_overflow:                      ; Timer 0 Overflow Handler
        out     PORTB, leds
        com     leds
        reti


Danke für Eure schnelle Hilfe schon mal im voraus

Mfg Domi
OP #2196020
Lesenswert?

wenn ich TIMSK da rein schreibe bringt er mir eine fehlermeldung beim 
übersetzten
"C:\Dokumente und Einstellungen\Local 
User\Desktop\Test25\Test25.asm(30): error: Undefined symbol: TIMSK"

und nen 2ten fehler habe ich auch noch drauf ...

bei

out     TCCR0, temp

bringt er mir:

"C:\Dokumente und Einstellungen\Local 
User\Desktop\Test25\Test25.asm(27): error: Undefined symbol: TCCR0"
Gast #2196027
Lesenswert?

> wenn ich TIMSK da rein schreibe bringt er mir eine fehlermeldung

Dann schau im Datenblatt nach in welches Register das Bit TOIE0 gehört. 
Es heisst ähnlich wie TIMSK.

> out     TCCR0, temp
> bringt er mir:
> "C:\Dokumente und Einstellungen\Local
> User\Desktop\Test25\Test25.asm(27): error: Undefined symbol: TCCR0"

Dann schau im Datenblatt nach in welches Register das Bit CS00 gehört.
Gast #2196028
Lesenswert?

Hi

>wenn ich TIMSK da rein schreibe bringt er mir eine fehlermeldung beim
>übersetzten
>"C:\Dokumente und Einstellungen\Local
>User\Desktop\Test25\Test25.asm(30): error: Undefined symbol: TIMSK"

Weil es kein TIMSK gibt, sondern TIMSK0, TIMSK1....

>bei
>out     TCCR0, temp
>bringt er mir:
>"C:\Dokumente und Einstellungen\Local
>User\Desktop\Test25\Test25.asm(27): error: Undefined symbol: TCCR0"

Gibt es auch nicht: TCCR0A und TCCR0B.

MfG Spess
OP #2196038
Lesenswert?

geile idee er konnte es übersetzten aber jetzt zählt da überhaupt nichts 
mehr
neuer Quellcode:

.include "m2560def.inc"

.def temp = r16
.def leds = r17

.org 0x0000
        rjmp    main                  ; Reset Handler
.org OVF0addr
        rjmp    timer0_overflow       ; Timer Overflow Handler

main:
        ; Stackpointer initialisieren
        ldi     temp, HIGH(RAMEND)
        out     SPH, temp
        ldi     temp, LOW(RAMEND)
        out     SPL, temp

        ldi     temp, 0xFF            ; Port B auf Ausgang
        out     DDRB, temp

        ldi     leds, 0xFF

        ldi     temp, (1<<CS00)       ; CS00 setzen: Teiler 1
        out     TCCR0A, temp

        ldi     temp, (1<<TOIE0)      ; TOIE0: Interrupt bei Timer 
Overflow
        sts     TIMSK0, temp

        sei

loop:   rjmp    loop

timer0_overflow:                      ; Timer 0 Overflow Handler
        out     PORTB, leds
        com     leds
        reti

mfg
#2196065
Lesenswert?

Domi S. schrieb:
> gut jetzt schaltet er port b aber zählen tut er nicht ... (leider)

Wenn er (der Simulator) den B-Port schaltet, dann zählt er auch.
Der Simulator hat eine 'Optimierung' drinnen, so dass er auch mal 
Anweisungeen still und heimlich durchführt, bis sich was tut. Da deine 
Hauptschleife leer ist, wird er die wohl still ausführen, bis der 
nächste Interrupt auftritt.
OP #2196067
Lesenswert?

gut das hab ich gefunden nur du müsstest uns jetzt gerade mal sehen da 
stehen 2 bis 3 leute um nen bildschirm rum und versuchen zu 
entschlüsseln was atmel mit diesen informationen sagen will

wie gesagt wir sind totale noobs in diesem thema
und irgend wie glaube ich langsam ne s7-300 programmieren is deutlich 
einfacher als nen myC

Trozdem danke wir werden mal weiter entschlüsseln

mfg
#2196068
Lesenswert?

Domi S. schrieb:
> gut das hab ich gefunden nur du müsstest uns jetzt gerade mal sehen da
> stehen 2 bis 3 leute um nen bildschirm rum und versuchen zu
> entschlüsseln was atmel mit diesen informationen sagen will

Ich denke ihr habt das Tutorial durch?

Sobald ein Timer einen Vorteiler zugewiesen hat, zählt er auch.
Welche Vorteiler es gibt, findet sich im Datenblatt.
Dort gibt es auch eine Tabelle, welche Bits gesetzt werden müssen, damit 
welcher Vorteiler zum Zug kommt. Und diese Bits suchst du dir dann in 
den Registern (in jedem Abschnitt "Register Description" sind immer nur 
die für dieses "Gerät" relevanten Register zusammengefasst) und setzt 
sie. So einfach ist das.

Der Rest des Kapitelas beschreibt immer welche Möglichkeiten es gibt und 
was da alles passiert. Im Abschnitt "Register Description" ist dann die 
Zusammenfassung, wie man diese Dinge erreichen kann.

Und: Lesen nimmt euch keiner ab.

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