logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega8515] PWM na 16 bitowym działa na 8 niechce dlaczego?

rafiks 14 Paź 2009 22:43 1656 3
REKLAMA
  • #1 7129811
    rafiks
    Poziom 18  
    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?

    
    #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]
  • REKLAMA
  • #2 7133208
    janbernat
    Poziom 38  
    Tego nie rozumiem:
    Ldi Acc, 0x04 ;0x04 włacza PWM
    Out TCCR1B, Acc
    Czy dalej korzystasz z Timer1?
  • REKLAMA
  • #3 7475634
    Konto nie istnieje
    Konto nie istnieje  
  • #4 7475912
    acid12
    Poziom 21  
    OC1A, OC1B to sa dwa kanały PWMa

    majac mege8, mozesz miec 3 PWMy,
    1 z licznika 8-bitowego T/C2
    2 z licznika 16-bitowego T/C1

    szczegóły ustawień znajdziesz w nocie, w necie i/lub na elektrodzie :)

    najprostszym zastosowaniem, moze byc np dioda RGB gdzie kazdy kolor jest sterowany innym kanałem PWM, wiec dostaniesz pełną gamę kolorów, dobre do praktyki :)
REKLAMA