Forum: Mikrocontroller und Digitale Elektronik Timer 1 bei ATMega 168


von Martin F. (Firma: privat) (machtin)


Lesenswert?

Hallo zusammen,

wenn ich folgendes Programm im AVR-Studio im Debugger laufen lassen
verhält sich der Timer1 ganz und gar nicht wie in der Doku beschrieben.
(Fehler in der Doku, Fehler im Debugger oder bin ich einfach zu blöd die
Doku zu lesen und zu interpretieren ???)

Ich möchte das der Timer1 beim Starten den OC1A-Pin (PD5) auf 1 zieht,
dann beim Erreichen von OCR1A PD5 auf 0 zieht und
dann beim Erreichen von ICR1 wieder auf 0 springt.

Das sollte (wenn ich die Doku richtig lese) dieses Prg. machen:

.include "m168def.inc"

.def temp = r17

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

; den Endwert (TOP) für den Zähler setzen
; der Zähler zählt bis zu diesem Wert
; (Natürlich braucht man bei 0x003F keinen 16-bit Timer, aber zum 
debugen einfach schneller..:-)
;
ldi      temp, 0x00
sts     ICR1H, temp
ldi      temp, 0x3F
sts     ICR1L, temp

    ;
    ; der Compare Wert
ldi      temp, 0x00
sts     OCR1AH, temp
ldi      temp, 0x1F
sts     OCR1AL, temp

; Den Pin OC1A (PD7) auf Ausgang schalten

ldi      temp, 1<<PD5
out    ddrd,  temp

    ;
    ; Timer 1 einstellen
    ;
    ; Modus 14:
    ;    Fast PWM, ICR1 -> TOP
    ;
    ;     WGM13    WGM12   WGM11    WGM10
    ;      1        1       1        0
    ;
    ;    Timer Vorteiler: 8
    ;     CS12     CS11    CS10
    ;      0        1       0
    ;
    ; Steuerung des Ausgangsport: Set at BOTTOM, Clear at match
    ;     COM1A1   COM1A0
    ;      1        0
    ;

    ldi      temp, 1<<COM1A1 | 1<<WGM11
    sts      TCCR1A, temp

    ldi      temp, 1<<WGM13 | 1<<WGM12 | 1<<CS11
    sts      TCCR1B, temp

    ;


main:
    rjmp     main



Kann mir da jemand aufs Pferd helfen was ich falsch mache ??

Danke,

Martin

von johnny.m (Gast)


Lesenswert?

> ; Den Pin OC1A (PD7) auf Ausgang schalten
> ldi      temp, 1<<PD5
Das ist erstens widersprüchlich und zweitens ist lt. meinem Datenblatt 
der OC1A an PORTB.1 und nicht an PORTD.5 oder 7...

von Martin F. (Firma: privat) (machtin)


Lesenswert?

johnny.m wrote:
>> ; Den Pin OC1A (PD7) auf Ausgang schalten
>> ldi      temp, 1<<PD5
> Das ist erstens widersprüchlich und zweitens ist lt. meinem Datenblatt
> der OC1A an PORTB.1 und nicht an PORTD.5 oder 7...

hast natürlich recht....
(hab mich im Komentar verschrieben und mich im Programm mit dem ATMEGA16 
Datenblatt vertudelt...*schäm*)

Aber nichts desto trotz.....

Kann der Simulator im AV-Studio nun nicht wirklich einen Timer im 
PWM-Modus
simulieren oder hab ich bei der Parametrierung des Timers was falsch 
gemacht ?

Gruss

Martin

von spess53 (Gast)


Lesenswert?

Hi

AVR Simulator Help : Known Issues

Timer/Counters
16-bit Timer/Counters on all devices have several problems with PWM, 
prescaler and output compare. Output compare registers are not buffered 
properly.

MfG Spess

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.