Forum: Mikrocontroller und Digitale Elektronik PWM TIMER1 ATmega88


von M. Н. (Gast)


Lesenswert?

Hallo ich versuche mit einem ATmega88 eine PWM hinzubekommen. Top value 
soll in ICR1 sein.

Mein Code:
1
.include <m88def.inc>
2
  .cseg
3
  .org 0
4
start:
5
  ldi r16, low(RAMEND)
6
  ldi r17, high(RAMEND)
7
  out spl, r16
8
  out sph, r17
9
  ;M::::::::::::::::::::
10
  ldi r16, 0xff
11
  out ddrb, r16
12
  ldi r16, 0
13
  out portb, r16
14
  
15
  ldi r16, low(22588)
16
  ldi r17, high(22588)
17
  sts ICR1l, r16
18
  sts ICR1h, r17
19
  ldi r16, (1<<COM1A1) | (1<<WGM11)
20
  sts tccr1a, r16
21
  ldi r16, (1<<CS11) | (1<<WGM13)
22
  sts tccr1b, r16
23
  ldi r16, 200
24
  sts ocr1al, r16
25
  sts ocr1ah, r16
26
  loop:
27
  
28
  rjmp loop

Es funktioniert nicht. Kann mir jemand sagen was ich falsch mache???

DANKE

von Stefan E. (sternst)


Lesenswert?

M. H. schrieb:
> Es funktioniert nicht. Kann mir jemand sagen was ich falsch mache???

1)
1
To do a 16-bit write, the high byte must be written before the low byte.

2)
1
The ICR1 Register can only be written when using a Waveform
2
Generation mode that utilizes the ICR1 Register for defining
3
the counter’s TOP value. In these cases the Waveform Generation
4
mode (WGM13:0) bits must be set before the TOP value can be written
5
to the ICR1 Register.

von M. Н. (Gast)


Lesenswert?

OK ich versuchs mal

von M. Н. (Gast)


Lesenswert?

ich weiss nicht ob so sein sollte:
1
.include <m88def.inc>
2
  .cseg
3
  .org 0
4
start:
5
  ldi r16, low(RAMEND)
6
  ldi r17, high(RAMEND)
7
  out spl, r16
8
  out sph, r17
9
  ;M::::::::::::::::::::
10
  ldi r16, 0xff
11
  out ddrb, r16
12
  ldi r16, 0
13
  out portb, r16
14
  ldi r16, (1<<COM1A1) |(1<<WGM11)
15
  sts tccr1a, r16
16
  ldi r16, (1<<CS11) | (1<<WGM13)
17
  sts tccr1b, r16
18
  
19
  ldi r16, low(22588)
20
  ldi r17, high(22588)
21
  sts ICR1h, r17
22
  sts ICR1l, r16
23
  
24
  
25
  ldi r16, 200
26
  sts ocr1ah, r16
27
  sts ocr1al, r16
28
  
29
  loop:
30
  
31
  rjmp loop
Geht nämlich immer noch nicht

von Stefan E. (sternst)


Lesenswert?

M. H. schrieb:
> Geht nämlich immer noch nicht

Weil dein OCR1A (51400) größer ist als ICR1 (22588).

von M. Н. (Gast)


Lesenswert?

Stefan Ernst schrieb:
> Weil dein OCR1A (51400) größer ist als ICR1 (22588).

ohhh.. Sch****. Das hätte nicht passieren dürfen. Jetzt gehts..

DANKE an euch

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.