Hallo,
ich versuche nebenbei etwas AVR zu lernen, doch es scheint so als ob ich
an den einfachsten Sachen scheitere^^
1 | .include "m8def.inc"
|
2 |
|
3 | .def temp1 = r17
|
4 |
|
5 | rjmp init
|
6 |
|
7 | init:
|
8 |
|
9 | ldi temp1, LOW(RAMEND) ; Stackpointer initialisieren
|
10 | out SPL, temp1
|
11 | ldi temp1, HIGH(RAMEND)
|
12 | out SPH, temp1
|
13 |
|
14 | cbi DDRB,0 ;PB0 Eingang
|
15 | cbi DDRB,1 ;PB1 Eingang
|
16 | sbi PORTB,0 ;PB0 PullUp
|
17 | sbi PORTB,1 ;PB1 PullUp
|
18 | sbi DDRB,3 ;PB3 Ausgang
|
19 |
|
20 | ldi temp1, 0b01101011 ;Timer2,FastPWM,Teiler_64
|
21 | out TCCR2, temp1
|
22 |
|
23 | ldi temp1,40 ;PWM_Wert:40
|
24 | out OCR2,temp1
|
25 | main:
|
26 | sbis PINB,0 ;Erhöhe temp1 wenn PB0=0
|
27 | inc temp1
|
28 | sbis PINB,1 ;Verringere temp1 wenn PB1=0
|
29 | dec temp1
|
30 | rjmp main
|
Das PWM funktioniert (mein Servo nimmt eine Position an, hehe) aber das
mit dem Increase und Decrease hab ich mir wohl zu einfach vorgestellt...
Ich weis das es schon viele Codebeispiele für Servotester gibt, aber ich
möchte gerne verstehen warum meins nicht funktioniert.
Funktion sollte klar sein:
PB3 gibt PWM Signal
PB0 und PB1 erhöhen bzw. verringern den Interruptwert. (verändern also
Pulsfrequenz)
PS: Sorry wegen 0b01101011 das nächste mal wirds 1<<CS0 usw
mfg vincent