Witam poniżej przedstawiam kod programu za srednikami jest poustawiany timer 16 bit który steruje serwomechanizmem z modeli RC i działa wszystko poprawnie (wyjscie OC1A do serwa)
natomiast ja chcialbym to serwo wysterować 8 bitowym wyjscie (OC0/t0 pin1 do serwa) I niby wszytsko dobrze posutawialem ale serwo ani drgnie dlaczego?
Proszę na przyszłość stosować znaczniki [code] - prawda że bardziej czytelne
[zumek]
natomiast ja chcialbym to serwo wysterować 8 bitowym wyjscie (OC0/t0 pin1 do serwa) I niby wszytsko dobrze posutawialem ale serwo ani drgnie dlaczego?
#include "avr.inc"
#include <m8515def.inc>
.cseg
.org 0x00
Rjmp Reset
.org 0x06
Rjmp TPWM
.org 0x07
Rjmp TKM
.cseg
.org 0x11
; D E F I N I C J E P O R T Ó W
;klawiatura
#define I_Fast PA0 ;Guzik Szybciej
#define I_Slow PA1 ;Guzik Wolniej
#define I_OnOff PA2 ;Guzik On/Off
;Dodatkjowe czujniki
#define I_Stop PA7 ;Pedał stopu
#define I_Clutch PA6 ;Pedał sprzęgła
;Dioda
#define D_OnOff PC0
;Definicja rejestrów
.def Acc = R23
.def Serwo = R17
.def Temp = R22
;Stałe - pozycja sero
.equ Min = 0xB2 ;b6
.equ Max = 0xD9 ;f0
;Obsługa PWM - przerwanie timer1
TPWM: ;Okres 20ms
; Ldi r19, 0x03
; Out TCNT1H, r19
; Ldi r19, 0x1B
; Out TCNT1L, r19
Reti
TKM: ;Okres 20ms
Ldi Acc, 0xC7
Out TCNT0, Acc
Reti
Reset:
;Ustawia wskaźnik stosu
Ldi Acc,low(RAMEND)
Out SPL,Acc
Ldi Acc,high(RAMEND)
Out SPH, Acc
;Konfiguruj Timer0 na tryb PWM - Phase corect , Preskaler 1024
Ldi Acc, 0x45
Out TCCR0, Acc
;Okres 20ms
Ldi Acc, 0xC7
Out TCNT0, Acc
;Stała wypelnienia -> stan niski
Ldi Acc, 0xFF
Out OCR0, Acc
;Konfiguruj Timer1 na tryb PWM 10bit, Preskaler 256
; Ldi Acc, 0xC3
; Out TCCR1A, Acc
; Ldi Acc, 0x04 ;0x04 włacza PWM
; Out TCCR1B, Acc
;Okres 20ms
; Ldi Acc, 0x03
; Out TCNT1H, Acc
; Ldi Acc, 0x1B
; Out TCNT1L, Acc
;Stała wypelnienia -> stan niski
; Ldi Acc, 0xFF
; Out OCR1AH, Acc
; Out OCR1AL, Acc
;Ustaw Porty
Ldi Acc,0x00 ;Port A jaka wejscie klawiszy
Out DDRA, Acc
Ldi Acc, 0xFF
Out PORTA, Acc
Out PINA, Acc
Ldi Acc, 0xFF ;Port C dioda
Out DDRC, Acc
Ldi Acc, 0x00
Out PORTC, Acc
Out PINC, Acc
Ldi Acc, 0x7F ;Port D wyjscie
Out DDRD, Acc
Ldi Acc, 0x80
Out PortD, Acc
Out PIND, Acc
Ldi Acc, 0xFF ;Port B wyjscie
Out DDRB, Acc
Ldi Acc, 0x00
Out PortB, Acc
Out PINB, Acc
Ldi Acc, 0x00 ; odblokuj przerwanie od timera 0
Out TIMSK, Acc
; Ldi Acc, 0x00 ; odblokuj przerwanie od timera 1
; Out TIMSK, Acc
Ldi Acc, Min ;F0
Mov Serwo,Acc
; Out OCR1AL, Acc
Out OCR0, Acc
sei
Sta:
Ldi Acc, Min ;F0
; Out OCR1AL, Acc
Out OCR0, Acc
Cbi PortC,D_OnOff
; Cbi DDRA,I_Stop
; Cbi PortA,I_Stop
Delay_MS 255
Delay_MS 255
Delay_MS 255
Delay_MS 255
Delay_MS 255
Delay_MS 255
Ldi Acc, 0x00 ;0x04 włacza PWM
; Out TCCR1B, Acc
Out TCCR0, Acc
Loop:
Sbic PinA,I_Stop ;Sprawca czy wcisnieto Stop
Rjmp loop
; Rjmp Loop
N1: Sbic PinA,I_Clutch ;Sprawdza czy wcisnieto hamulec
Rjmp N2
Rjmp Loop
N2: Sbis PinA,I_OnOff ; Sprawdza czy właczono tempomat
Rjmp N3
Rjmp Loop
N3: Sbi PortC,D_OnOff
Delay_Ms 255
Delay_Ms 255
Ldi Acc, 0x04 ;0x04 włacza PWM
Out TCCR1B, Acc
Inc Serwo ;cdvxcvcx
Inc Serwo ;cdvxcvcx
; Out OCR1AL, Serwo
Out OCR0, Serwo
Delay_Ms 255
Dec Serwo
Dec Serwo ;vcbcvc
; Out OCR1AL, Serwo
Out OCR0, Serwo
Loop2:
Sbis PinA,I_Fast
RCall Up
Sbis PinA,I_Slow
RCall Down
Sbis PinA,I_OnOff ; Sprawdza czy wyłaczono tempomat
Rjmp Sta
Sbic PinA,I_Stop ;Sprawca czy wcisnieto Stop;
Rjmp Sta
Sbis PinA,I_Clutch ;Sprawdza czy wcisnieto hamulec
Rjmp Sta
Rjmp Loop2
Up:
Inc Serwo
Cpi Serwo,Max
Brcc ed1
rJMP NF
ed1:
dec serwo
rET
nf:
Inc Serwo ;xcvxc
Inc Serwo ;cdvxcvcx
Inc Serwo ;cdvxcvcx
Cbi PortC,D_OnOff
; Out OCR1AL, Serwo
Out OCR0, Serwo
Delay_MS 65
Sbi PortC,D_OnOff
Delay_MS 65
Cbi PortC,D_OnOff
Delay_MS 65
Sbi PortC,D_OnOff
Dec Serwo
Dec Serwo ;vcbcvc
Dec Serwo ;vcbcvc
; Out OCR1AL, Serwo
Out OCR0, Serwo
Ret
end1:
Dec Serwo
Ret
Down:
Dec Serwo
Ldi Temp,Min
Cpc Serwo,Temp
Brcs end2
Rjmp nks
end2:
Inc Serwo
Ret
nks:
Cbi PortC,D_OnOff
; Out OCR1AL, Serwo
Out OCR0, Serwo
Delay_MS 65
Sbi PortC,D_OnOff
Delay_MS 65
Cbi PortC,D_OnOff
Delay_MS 65
Sbi PortC,D_OnOff
; Out OCR1AL, Serwo;
; Delay_MS 200
Ret Proszę na przyszłość stosować znaczniki [code] - prawda że bardziej czytelne
[zumek]