BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   oscillazione servo (https://www.baronerosso.it/forum/circuiti-elettronici/237416-oscillazione-servo.html)

faustog_2 26 gennaio 12 23:46

oscillazione servo
 
salve volevo sottoporvi un piccolo problema, stavo cercando di smanettare su questo codice

PIC appunti di utilizzo

per ottenere un oscillazione più rapida.. a prima vista pensavo che aumentando l'incremento e il decremento potesse oscillare più velocemente da un lato e poi l'altro invece no!

continua ad oscillare allo stesso modo!

è strano

avete qualche idea?

faustog_2 27 gennaio 12 01:37

ok
 
per essere piu preciso

anzichè scrivere

INCF AL,W ;se si incrementa angolo
MOVWF AL

allora modifico l'incremento

MOVF AL,W ; metto in W il valore di AL
ADDLW 5 ; W = W + 5
MOVWF AL ; assegno il valore di W ad AL

in sostanza incremento il valore AL di 5 alla volta anzichè di uno, in questa maniera in teoria dovrebbe oscillare con una velocità maggiore perè di volta in volta aggiunge 5 gradi in pu raggiungendo prima il fondo scala..

ma purtroppo si blocca nn va

dove sbaglio?

Citazione:

Originalmente inviato da faustog_2 (Messaggio 3000611)
salve volevo sottoporvi un piccolo problema, stavo cercando di smanettare su questo codice

PIC appunti di utilizzo

per ottenere un oscillazione più rapida.. a prima vista pensavo che aumentando l'incremento e il decremento potesse oscillare più velocemente da un lato e poi l'altro invece no!

continua ad oscillare allo stesso modo!

è strano

avete qualche idea?


faustog_2 28 gennaio 12 01:45

ok perfetto sistemato
 
ho sistemato, adesso il servo oscilla con una rapidità che può essere modificata facilmente, adesso ho messo di 10 punti a passo.
piuttosto che l'istruzione di incremento meglio l'istruzione ADDLW, posso utilizzare anche il fattore uno come se fosse un incremento, oppure un numero oltre tutto questa istruzione modifica se è il caso il bit Z, quindi

LOOP
btfss INTCON,T0IF ; Controlla che non siano scaduti i 20 mS
GOTO $-1 ; se TMR0 < 20 mS allora vai INDIETRO

CALL SERVO ; altrimenti vai in MOVE_ALL
BTFSC DL,0 ; controlla se direz=0
GOTO MAIN2

MOVF ANGOLO ; SENSO ORARIO
ADDLW 10

BTFSC STATUS,Z
BSF DL,0 ; se si cambia direzione
MOVWF ANGOLO

bcf INTCON,T0IF ; reset T0IF bit

GOTO LOOP ; e torna a mainloop

MAIN2
MOVF ANGOLO ; SENSO ANTIORARIO
SUBLW 10

BTFSS STATUS,Z
BCF DL,0 ; se si cambia direzione

MOVWF ANGOLO

bcf INTCON,T0IF ; reset T0IF bit
GOTO LOOP ; e torna a mainloop


Tutti gli orari sono GMT +2. Adesso sono le 16:24.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002