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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 28 ottobre 10, 01:43   #1 (permalink)  Top
User
 
L'avatar di faustog_2
 
Data registr.: 19-07-2008
Residenza: catania
Messaggi: 978
aumentare l'estensione dei servi

salve volevo aprire una discussione che si è parlato in altri ambiti però qui volevo farlo in materia di microcontrollori.
Premetto che con il 16F628 riesco a leggere i dati (impulsi) che arrivano dalla ricevete e posso quindi manipolarli come voglio.. .quello che però vorrei un attimo condivere con voi è il problema che se arriva un inpulso più di 1,5 mS ok ..basta solo allungarlo creando un ulteriore ritardo... ma se dovesse arrivare un inpulso inferiore a 1,5 mS come faccio ad andare indietro nel tempo????? !!!!!!

be per questo la prima cosa che mi viene in mente è posticipare tutto inviando nuovamente lo stesso inpulso al servo poi però bufferizzando il segnale precedente ne creo uno con un tempo inferiore in modo da scendere fino per esempio a 0.5 mS per cui alla fine potrei aumentare la corsa di un servo da 0.5 mS a 2,5 mS... anzichè da 1 a 2 mS ...

Che ne pensate di questa soluzione?
si accettano consigli..
Di seguito una piccola routine fatta stamani per catturare l'impulso proveniente dalla RX (la ricenvente è un' Hitec AFHSS 2,4 Ghz )




BSF STATUS,RP0 ; ** BANK1 **

MOVLW b'00000000'
MOVWF TRISB ; portB all pins output

MOVLW b'11110001'
MOVWF TRISA ; RB7-RB4 and RB1(RX)=input, others output

BCF STATUS,RP0 ; ** BANK0 **

CLRF COUNT
CLRF PORTB
MAIN BTFSS PORTA,0 ; IF (bit 0 di PORTA è = 1)
GOTO MAIN

MOVLW 178 ;
MOVWF CL ;
GOTO $+1 ;
GOTO $+1 ;
DECFSZ CL,F ;
GOTO $-2 ;

XX BTFSS PORTA,0
GOTO SHOW

INCF COUNT,F ; attesa di 2uS
GOTO XX ; attesa di 2uS
SHOW MOVF COUNT,W
MOVWF PORTB
CLRF COUNT
GOTO MAIN

END
faustog_2 non è collegato   Rispondi citando
Vecchio 28 ottobre 10, 09:37   #2 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Non son sicuro di aver capito bene; se volessi leggere il segnale di ingresso per produrne uno diverso in uscita, io disaccoppierei le due cose.
Da un lato il processo di input, gestito tramite interrupt, dall'altro il processo di output che genera il segnale.
Il processo di input imposta una variabile condivisa che è la lunghezza dell'impulso ricevuto; il processo di output, in base al valore di questa variabile genera il segnale di output.

Domanda: ma se vuoi estendere la corsa dei servi, lo devi fare in entrambe le direzioni, quindi non puoi semplicemente aumentare la durata dell'impulso ma anche, nell'altro verso, diminuirla. Giusto?
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 29 ottobre 10, 10:36   #3 (permalink)  Top
User
 
L'avatar di faustog_2
 
Data registr.: 19-07-2008
Residenza: catania
Messaggi: 978
ok

hai capito benissimo...

...praticamente è la stessa cosa... anzichè gestire il segnale di ingresso con l'interrupt.. lo leggo normalmente dal pin ..con uno sfasamento di un ventesimo di secondo viene dato in uscita in un altro pin, una risposta..
..comunque la soluzione proposta da te, è più accademica, secondo è più elegante..

appena ci metto le mani, ti faccio sapere.

a dopo
fausto


Citazione:
Originalmente inviato da illez Visualizza messaggio
Non son sicuro di aver capito bene; se volessi leggere il segnale di ingresso per produrne uno diverso in uscita, io disaccoppierei le due cose.
Da un lato il processo di input, gestito tramite interrupt, dall'altro il processo di output che genera il segnale.
Il processo di input imposta una variabile condivisa che è la lunghezza dell'impulso ricevuto; il processo di output, in base al valore di questa variabile genera il segnale di output.

Domanda: ma se vuoi estendere la corsa dei servi, lo devi fare in entrambe le direzioni, quindi non puoi semplicemente aumentare la durata dell'impulso ma anche, nell'altro verso, diminuirla. Giusto?
faustog_2 non è collegato   Rispondi citando
Vecchio 29 ottobre 10, 18:36   #4 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Non è più accademica o elegante, è l'unica praticabile.
Pensaci: hai due oggetti (l'input e l'output) che vanno a velocità diverse.
Non possono andare a velocità diverse se uno (l'out) aspetta l'altro.

Del resto tu stesso ti sei reso conto del problema
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 29 ottobre 10, 23:09   #5 (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 illez Visualizza messaggio
Non è più accademica o elegante, è l'unica praticabile.
Pensaci: hai due oggetti (l'input e l'output) che vanno a velocità diverse.
Non possono andare a velocità diverse se uno (l'out) aspetta l'altro.

Del resto tu stesso ti sei reso conto del problema
Scusa ma non capisco...

facendo una simulazione su una scala dei tempi:
T=0 Misuro l'impulso, supponiamo sia 1800uS
T=1800 Genero l'impulso 2000
T=3800 Mi metto a riaspettare il nuovo input
T=20000 Arriva il nuovo impulso...

Non capisco dove serva l'interrupt, ma anche andando all'indietro
T=0 Misuro l'impulso 1200
T=1200 Genero l'impulso 1000
T=2200 Mi metto a riaspettare il nuovo impulso
T=20000 Arriva il nuovo...

I due impulsi non vanno a velocità diverse hanno solo lunghezza diversa ma, se si vuole stare nello standard, la ripetizione è 50 hz.
Scomodare la gestione degli interrupt in questo caso non serve, la base dei tempi dei 50hz te la da la ricevente, non è necessario gestire anche la durata della pausa dell'impulso generato.
romoloman non è collegato   Rispondi citando
Vecchio 29 ottobre 10, 23:43   #6 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da romoloman Visualizza messaggio
...
I due impulsi non vanno a velocità diverse hanno solo lunghezza diversa ma, se si vuole stare nello standard, la ripetizione è 50 hz.
Scomodare la gestione degli interrupt in questo caso non serve, la base dei tempi dei 50hz te la da la ricevente, non è necessario gestire anche la durata della pausa dell'impulso generato.
Probabilmente sono stato portato fuori strada dalla domanda, perché è vero, il periodo può variare da 20 a 30ms mentre l'impulso tra 1 e 2ms.
L'interrupt non è necessario, basta leggere il timer per calcolare la durata dell'impulso.
Forse l'interrupt può tornare utile se il firmware fa anche altre cose, ma se fa solo quello direi che si può evitare.
Allora, sarà l'ora tarda, ma continuo a non capire la domanda iniziale.

Che vuol dire tornare indietro nel tempo?
Forse appena arriva alto l'impulso in ingresso lo porti alto anche in uscita e quindi non puoi farlo più breve di quanto ricevi (a meno di predire il futuro)?
Se questa era la domanda, direi che il flusso è sbagliato. Misuri impulso, generi di conseguenza l'impulso in out, più breve o più lungo.
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 31 ottobre 10, 04:00   #7 (permalink)  Top
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
Credo che la domanda iniziale fosse generata dalla voglia di far partire l'impulso in uscita in contemporanea con quello in entrata, ma la cosa è assolutamente inutile ed totalmente infattibile..
romoloman non è collegato   Rispondi citando
Vecchio 31 ottobre 10, 17:02   #8 (permalink)  Top
User
 
L'avatar di faustog_2
 
Data registr.: 19-07-2008
Residenza: catania
Messaggi: 978
ok

il problema è che se fosse solo leggere un impulso e poi come risposta sommare un ritardo opportuno.. il discorso era già risolto... ma in caso di impulsi al di sotto dei 1500 uS occorre avere un ritardo ancora più breve... quindi come intuito qui da tutti IMPOSSIBILE.. per questo si può optare nel rielaborare il ritardo durante la pausa dei 20 - 30 millisecondo e quindi dare risposta opportuna diminuendo il ritardo. tutto qui

Citazione:
Originalmente inviato da romoloman Visualizza messaggio
Credo che la domanda iniziale fosse generata dalla voglia di far partire l'impulso in uscita in contemporanea con quello in entrata, ma la cosa è assolutamente inutile ed totalmente infattibile..
faustog_2 non è collegato   Rispondi citando
Vecchio 31 ottobre 10, 23:00   #9 (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 faustog_2 Visualizza messaggio
il problema è che se fosse solo leggere un impulso e poi come risposta sommare un ritardo opportuno.. il discorso era già risolto... ma in caso di impulsi al di sotto dei 1500 uS occorre avere un ritardo ancora più breve... quindi come intuito qui da tutti IMPOSSIBILE.. per questo si può optare nel rielaborare il ritardo durante la pausa dei 20 - 30 millisecondo e quindi dare risposta opportuna diminuendo il ritardo. tutto qui
Scusami Fausto, ma forse se tu usassi una teminologia opportuna ti si capirebbe meglio.
Tu devi generare un impulso PWM con frequenza totale di 50Hz in base ad un impulso che ti arriva.
Che i due impulsi inizino asseme non ti importa nulla, ne tantomeno importa al servo.
Pertanto l'unica cosa che devi fare è:
leggere l'impulso, calcolare la durata di quello da generare in base alla tua funzione di trasformazione e generare l'impulso in uscita.
Non centrano nulla i ritardi o gli anticipi (credo sia la corretta definizione di "ritardo ancora più breve")

In picbasic il tuo problema lo si risolve con ben 8 righe di codice.
Esempio per aumentare del 20% le corse:

while 1=1
a=pulsin(gpio.portain,1);
if (a!=0) then
b=((a-150)*1.2)+150;
low gpio.portaout;
pulsout(gpio.portaout, b,1);
endif
wend

Alla fine non mi sembra così complesso...
romoloman non è collegato   Rispondi citando
Vecchio 02 novembre 10, 10:38   #10 (permalink)  Top
User
 
L'avatar di faustog_2
 
Data registr.: 19-07-2008
Residenza: catania
Messaggi: 978
ok

scusami se uso terminologia marziana!
appena ho tempo cerco di tradurre tutt oin termini di assembler
..comunque mi la tua osservazione coincide con la mia .. però detta meglio da te ovviamente..

a dopo


Citazione:
Originalmente inviato da romoloman Visualizza messaggio
Scusami Fausto, ma forse se tu usassi una teminologia opportuna ti si capirebbe meglio.
Tu devi generare un impulso PWM con frequenza totale di 50Hz in base ad un impulso che ti arriva.
Che i due impulsi inizino asseme non ti importa nulla, ne tantomeno importa al servo.
Pertanto l'unica cosa che devi fare è:
leggere l'impulso, calcolare la durata di quello da generare in base alla tua funzione di trasformazione e generare l'impulso in uscita.
Non centrano nulla i ritardi o gli anticipi (credo sia la corretta definizione di "ritardo ancora più breve")

In picbasic il tuo problema lo si risolve con ben 8 righe di codice.
Esempio per aumentare del 20% le corse:

while 1=1
a=pulsin(gpio.portain,1);
if (a!=0) then
b=((a-150)*1.2)+150;
low gpio.portaout;
pulsout(gpio.portaout, b,1);
endif
wend

Alla fine non mi sembra così complesso...
faustog_2 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
Aumentare Range TX-RX Katana13 Radiocomandi 12 18 marzo 10 18:00
Aumentare la velocità imperatore82. Aeromodellismo Volo Elettrico 1 04 novembre 09 14:10
Aumentare la spinta twentynine Aeromodellismo Ventole Intubate 18 18 gennaio 09 20:19
Aumentare % miscela truffolo Automodellismo Mot. Scoppio On-Road 10 02 ottobre 07 11:24
eco 8 - aumentare il passo xfile69 Elimodellismo Principianti 0 19 agosto 06 23:51



Tutti gli orari sono GMT +2. Adesso sono le 02:34.


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