![]() |
Rallentare un servocomando in picbasic Buona serata a tutti, ho realizzato un circuitino con un PIC 16F84 che, in base allo stato logico in un ingresso, mi muove un servocomando di 90°. Non sono un grande esperto, ma ho buttato giù 2 righe in picbasic, comando pulsout = 100 oppure pulsout = 200 in base allo stato logico. Fin quà tutto bene. Per rallentare il movimento del servo incremento il comando pulsout di una unità alla volta. Ottimo, funziona tutto! Il servo però si muove a piccoli scattini e si nota troppo. Penso di risolvere velocemente cambiando il quarzo da 4mhz a 8mhz, raddoppio tutti tempi e suddivido i 90° in 200 passi anzichè 100. Invece no, non funziona, il servo si posiziona in punti che non riesco a capire. Qualcuno mi sa dire perchè? ecco il codice che ho realizzato: @ DEVICE XT_OSC ' sets programmer to external oscillator - low power, HS would be for faster xtals. DEFINE OSC 4 ' for 4 mhz osc TRISA=%11111111 TRISB=%00000000 ingresso var porta.0 uscita var portb.0 segnale var byte segnale = 100 inizio: if ingresso = 1 then segnale = segnale + 1 else segnale = segnale - 1 endif if segnale > 200 then segnale = 200 if segnale < 100 then segnale = 100 pulsout uscita,segnale pause 18 goto inizio end Grazie a tutti quelli che mi aiutano e anche quelli che non mi aiutano ma può essere utile |
Citazione:
|
Si ho notato che la differenza tra uno economico e di marca è notevole ( sotto tutti gli aspetti ), resta il fatto che non riesco a capire come mai non funziona come mi aspettavo. |
Citazione:
|
Questo proprio non te lo saprei dire |
Due cose. Se ricordo bene la durata del pulseout se raddoppi la frequenza di clock devi raddoppiarla, quindi se a 4Mhz arrivavi a 200 adesso devi arrivare a 400. Prima della label inizio metti un Low Uscita per portare l'uscita a livello basso ad inizio programma perchè il pulseout lavora togglando, quindi se quando il programma parte trova l'uscita a livello alto ti lavora generando gli impulsi negati. Il pause 18 non devi raddoppiarlo basta che usi DEFINE OSC 8 e lui ti ricrea la pausa corretta. Magari non sono questi i problemi ma io proverei... |
Infatti, era quello che pensavo anch'io quando ho creato il programma però non ha funzionato. A sto punto sospetto che il quarzo da 8mhz non "quarzi" correttamente. Appena ne recupero uno nuovo vi faccio sapere |
Citazione:
Michele |
Azz, giusto, che svista. Devo definirla come word. Stasera provo e vi faccio sapere |
Grazie MSchiepp, era proprio quello il problema, la variabile va definita come word. A chi può essere utile, ecco lo stesso programmino funzionante con quarzo da 8mhz @ DEVICE XT_OSC ' sets programmer to external oscillator - low power, HS would be for faster xtals. DEFINE OSC 8 ' for 8 mhz osc TRISA=%11111111 TRISB=%00000000 ingresso var porta.0 uscita var portb.0 segnale var word segnale = 200 inizio: if ingresso = 1 then segnale = segnale + 1 else segnale = segnale - 1 endif if segnale > 400 then segnale = 400 if segnale < 200 then segnale = 200 pulsout uscita,segnale pause 18 goto inizio end Grazie ancora |
Tutti gli orari sono GMT +2. Adesso sono le 22:53. |
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