![](https://www.baronerosso.it/img/t.gif)
![]() | #1 (permalink) Top |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| dove sbaglio?
salve a tutti, volevo realizzare un sontrollo servo oscillante con una velocità maggiore, la realizzazione è piuttosto semplice, c'è pure esplicitamente suggerita negli appunti del tanzilli: PIC appunti di utilizzo ... solo che piuttosto che incrementare di un unità alla volta volevo muovermi a passi di 10 sia in senso crescente che decrescente: in sostanza le istruzioni di INCF e DECF le ho sostituite con... MOVF AL,W ADDLW 10 e MOVLW 10 SUBLW AL Il problema è che il servo fa un avanti e un indietro e poi si blocca, come se la seconda GOTO MAINLOOP non venisse mai eseguita. ;----------------------------------------------------- ; SERVO.ASM - Dimostrativo pilotaggio servocomando ;----------------------------------------------------- PROCESSOR 16F84A RADIX DEC INCLUDE "P16F84A.INC" __CONFIG 11110100010001B AL EQU 32 ;angolo DL EQU 33 ;direzione CL EQU 34 ;contatore ritardo ORG 0 BSF STATUS,RP0 ;Attiva banco 1 CLRF TRISA ;Rende PORTA un'uscita CLRF TRISB ;Rende PORTA un'uscita BCF OPTION_REG,PSA ;prescaler a tmr0 BCF OPTION_REG,T0CS ;clock interno BCF OPTION_REG,1 ;Prescaler /64 BCF STATUS,RP0 ;Ritorna al banco 0 MOVLW 120 ;angolo iniziale 1,5mS MOVWF AL CLRF DL MAINLOOP BTFSS INTCON,T0IF GOTO $-1 ;attende overflow timer CALL SERVO ;emette singolo impulso BTFSC DL,0 ;controlla se direz=0 GOTO MAIN2 MOVF AL,W ADDLW 10 MOVWF AL XORLW 220 ;controlla se =220 BTFSC STATUS,Z BSF DL,0 ;se si cambia direzione MOVLW 0 movwf TMR0 BCF INTCON,T0IF ;resetta bit overflow GOTO MAINLOOP ;e torna a mainloop MAIN2 MOVLW 10 SUBLW AL MOVWF AL XORLW 20 ;controlla se =20 BTFSC STATUS,Z BCF DL,0 ;se si cambia direzione MOVLW 0 movwf TMR0 BCF INTCON,T0IF ;resetta bit overflow GOTO MAINLOOP ;e torna a mainloop ;----------------------------------------------------- ; Genera impulso di comando per un servocomando ; standard (per clock 4MHz e PIC 12F/16F). ; Input: AL da 0 a 255 ( uS = 900 + 5*AL ) ; Usa: AL,CL ( AL = (uS-900)/5 ) ; Output: pin RA0 (Impulso da 900 a 2175 uS) ;----------------------------------------------------- SERVO BSF PORTB,1 MOVLW 178 MOVWF CL GOTO $+1 GOTO $+1 DECFSZ CL,F GOTO $-2 NOP MOVF AL,W MOVWF CL BTFSC STATUS,Z GOTO $+5 GOTO $+1 GOTO $+1 DECFSZ CL,F GOTO $-2 BCF PORTB,1 RETURN END |
![]() | ![]() |
![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
aiuto..non capisco dove sbaglio | tommy88 | Aeromodellismo Volo Elettrico | 34 | 25 febbraio 10 07:02 |
Help!! Cono..dove sbaglio? | zumbit | Elimodellismo Acrobazia | 5 | 02 marzo 09 12:55 |
Dove sbaglio? | Odi | CNC e Stampanti 3D | 6 | 04 settembre 05 00:08 |
Dove sbaglio | maxkh | Elimodellismo Principianti | 0 | 12 gennaio 05 12:47 |