Forum: Mikrocontroller und Digitale Elektronik Beispiele PWM aus Tutorial macht mir probleme


von Yvesco Y. (yvesco)


Lesenswert?

Hallo Zusammen ,
ich habe wieder ein Problem ; ich versuche sei ein paar Tage rein in der 
AVR  Welt mit STK500 reinzukommen , aber irgendein Problem kommt mir 
immer in Weg. Jetzt habe ich das Beispile aus dem Tutorial .In der 
Simulation , kommt ich nicht weiter als der loop Scleife: anders gesagt 
das Programm springt nicht nach dem Überlauf zur Marke timer0_overflow.
Was soll ich villeicht da umstellen. vielen Dank im Voraus für alle 
Hinweise.
Das code in Anhang

von Invers (Gast)


Lesenswert?

Beim Simulator muss man insbesondere bei den Timern sehr vorsichtig 
sein. Da sind noch einige Fehler im Simulator.
Aber wenn du schon ein STK500 hast, braucst du ja nicht zu simulieren. 
Machs auf den AVR und teste da!!

von Yvesco Y. (yvesco)


Lesenswert?

Danke für diese Hinweis,
ich habe eigentlich das Programm umgeänder , denn ich damit ein 
Schrittmotor  ansteuert wollte. Denks du ich könnte dieses Programm so 
auf dem AVR flashen ?

Danke .

.include "8515def.inc"

.def temp  = r16

.def PWMCount = r17

.def Schwelle_1 = r18
.def Schwelle_2 = r19
.def Schwelle_3 = r20
.def Schwelle_4 = r21
.org 0x0000

rjmp    main                  ; Reset Handler

.org OVF0addr
 rjmp    timer0_overflow       ; Timer Overflow Handler

main:

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

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

        ldi     Schwelle_1, 1
        ldi     Schwelle_2, 2
        ldi     Schwelle_3, 3
    ldi     Schwelle_4, 4
        ldi     temp, 0b00000001      ; CS00 setzen: Teiler 1
        out     TCCR0, temp

        ldi     temp, 0b00000001      ; TOIE0: Interrupt bei Timer 
Overflow
        out     TIMSK, temp

        sei

loop:   rjmp    loop

timer0_overflow:                      ; Timer 0 Overflow Handler
        inc     PWMCount              ; den PWM Zähler von 0 bis
        cpi     PWMCount, 5         ; 3 zählen lassen
        brne    WorkPWM
        clr     PWMCount

WorkPWM:
        ldi     temp, 0b00001010

        cp      PWMCount, Schwelle_1
        brne    OneOn
        out     PORTB,temp


OneOn:  cp      PWMCount, Schwelle_2
        brne    TwoOn
    andi    temp,$F0
    ori     temp ,$05
        out     PORTB,temp


TwoOn:  cp      PWMCount, Schwelle_3
        brne    ThreeOn
    andi    temp,$F0
    ori     temp,$06
    out     PORTB,temp


ThreeOn:cp      PWMCount,schwelle_4
        brne    aus
    andi    temp,$F0
    ori     temp, $09
        out     PORTB,temp
    aus:
        reti

von Karl H. (kbuchegg)


Lesenswert?

Invers wrote:
> Beim Simulator muss man insbesondere bei den Timern sehr vorsichtig
> sein. Da sind noch einige Fehler im Simulator.

Der Overflow im Timer0 müsste aber richtig kommen

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.