Mikrocontroller und Digitale Elektronik
›
Thread
PWM TIMER1 ATmega88
MН
M. Н.
Gast
10.07.2011 13:52
#2259025
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
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.
MН
M. Н.
Gast
10.07.2011 14:12
#2259055
MН
M. Н.
Gast
10.07.2011 14:16
#2259059
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
M. H. schrieb:
> Geht nämlich immer noch nicht
Weil dein OCR1A (51400) größer ist als ICR1 (22588).
MН
M. Н.
Gast
10.07.2011 14:29
#2259077
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren