Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 13 marzo 12, 20:57   #1 (permalink)  Top
User
 
Data registr.: 11-04-2009
Residenza: Padova
Messaggi: 14
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
sim176 non è collegato   Rispondi citando
Vecchio 13 marzo 12, 22:16   #2 (permalink)  Top
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
Citazione:
Originalmente inviato da sim176 Visualizza messaggio
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
Sicuro che non dipenda dal servo ? quelli particolarmente economici sono così penosi che fanno 40/50 step massimo... (ne ho trovati anche da 30 ovvero 3° per step)
__________________
Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo
Grazie "TRANQUILLO"
FAI 15766
romoloman non è collegato   Rispondi citando
Vecchio 13 marzo 12, 22:30   #3 (permalink)  Top
User
 
Data registr.: 11-04-2009
Residenza: Padova
Messaggi: 14
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.
sim176 non è collegato   Rispondi citando
Vecchio 13 marzo 12, 22:47   #4 (permalink)  Top
User
 
L'avatar di Mrk89
 
Data registr.: 29-05-2006
Residenza: Catania
Messaggi: 2.933
Citazione:
Originalmente inviato da sim176 Visualizza messaggio
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.
Dalla descrizione dei sintomi sembrerebbe un timer che va in overflow e che quindi gira "a caso". Giusto il ragionamento che hai fatto, ma bisognerebbe avere informazioni in più sulla funzione "pulseout". Come gestisce i prescaler?
__________________
Il filo attaccato all'antenna non mente mai....Troppo vento, si torna a casa....
I miei circuiti elettronici autocostruiti: Postbruciatore per ventole intubate ; Circuito luci per aeromodello-elimodello ; Rallenta servo con protezione da corto circuito
Mrk89 non è collegato   Rispondi citando
Vecchio 14 marzo 12, 19:28   #5 (permalink)  Top
User
 
Data registr.: 11-04-2009
Residenza: Padova
Messaggi: 14
Questo proprio non te lo saprei dire
sim176 non è collegato   Rispondi citando
Vecchio 14 marzo 12, 21:34   #6 (permalink)  Top
User
 
L'avatar di marcosinatti
 
Data registr.: 11-06-2007
Residenza: Sansepolcro (Ar)
Messaggi: 1.948
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...
__________________
Modifica Optic 8Ch ---- Luci Programmabili ---- RcSwitch ---- Il Mio Sito
HK500GT & Flymentor - HK450 & SMPilot- SMTech450 & SMPilot --- SM-PILOT [ The Stabilizer ]

Ultima modifica di marcosinatti : 14 marzo 12 alle ore 21:38
marcosinatti non è collegato   Rispondi citando
Vecchio 14 marzo 12, 23:11   #7 (permalink)  Top
User
 
Data registr.: 11-04-2009
Residenza: Padova
Messaggi: 14
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
sim176 non è collegato   Rispondi citando
Vecchio 15 marzo 12, 01:14   #8 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da marcosinatti Visualizza messaggio
...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...
Giusto! Ma non puoi farlo se la variabile è definita come byte (valore massimo 255).

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 15 marzo 12, 12:00   #9 (permalink)  Top
User
 
Data registr.: 11-04-2009
Residenza: Padova
Messaggi: 14
Azz, giusto, che svista. Devo definirla come word. Stasera provo e vi faccio sapere
sim176 non è collegato   Rispondi citando
Vecchio 15 marzo 12, 20:07   #10 (permalink)  Top
User
 
Data registr.: 11-04-2009
Residenza: Padova
Messaggi: 14
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
sim176 non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
Come rallentare l'atterraggio F-86 sabbre Eflite vlanni Aeromodellismo Ventole Intubate 81 15 novembre 11 19:31
Rallentare la corsa di un servo Mastertone Radiocomandi 2 17 agosto 10 14:24
miscelazione per rallentare atterraggio gianmario Aeromodellismo Ventole Intubate 17 11 agosto 10 22:16
rallentare un attimo il piatto..ds 620.. jaco-rc Elimodellismo Acrobazia 2 18 marzo 10 22:49
Devo far rallentare estense Circuiti Elettronici 19 17 maggio 05 00:51



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


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