mikrocontroller.net

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


Autor: Yvesco Yvesco (yvesco)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Invers (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Yvesco Yvesco (yvesco)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.