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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 22 febbraio 09, 16:00   #1 (permalink)  Top
User
 
Data registr.: 22-02-2009
Messaggi: 2
gestire segnale in ingresso pic

Ciao a tutti,
anche io sto cercando di cimentarmi con i pic per questioni modellistiche, ho letto un sacco di post qui sul forum e anche vari articoli/guide su internet però non riesco a trovare ciò che mi serve; mi sono procurato picbasic di modo da poter scrivere con un altro codice il che mi aiuta parecchio essendo nuovo dell'ambiente però purtroppo non riesco a venirne a capo, il problema è questo:
dovrei far leggere al pic (pensavo un classicissimo 16f84A o un 16f628) il segnale in uscita dalla ricevente che va all'esc per far poi pilotare al pic dei led ecc in particolari momenti.. ad esempio premendo lo stick a fondo oppure dopo averlo fatto tornare in posizione 0
avrei a disposizione anche dei sw per simulare i pic di modo da fare veloci prove.. però non sono riuscito a capire come fare per gestire questi segnali.. (tipo 1,75ms ....1,50ms ... 1,25ms a seconda delle posizioni), ho trovato qualcosa circa l'uso del timer, o degli interrupt... però erano discorsi incentrati su piccole problematiche in cui si poteva leggere solo una piccola parte di codice..troppo piccola per poterne capire il funzionamento.
Spero di essermi spiegato..
ho voluto provare a scrivere qui perchè nonostante cercando nel forum non ho trovato una risposta.. ho letto molti post di gente davvero preparata percui .. beh spero in un aiutino
§NIM§ non è collegato   Rispondi citando
Vecchio 22 febbraio 09, 16:40   #2 (permalink)  Top
User
 
L'avatar di g.mosfet
 
Data registr.: 11-11-2006
Residenza: Romano di L.(BG)
Messaggi: 536
Salve ti spiego come farei..ma tieni conto che non programmo i pic da un pò e che cmq ho avuto poca esperienza....allora io farei cosi:
intanto setti i prescaler del timer in modo che il timer possa contare 1 ms
poi setti sul pin d'ingresso del segnale l'interrupt sul fronte di salita....e metti il pic in attesa appena arriva il fronte di salita del segnale sul pin del pic questo genera un interrupt allora viene richiamata la funzione di gestione dell'interrupt che deve fare le seguenti cose: far partire il timer e settare sul fronte di discesa l'interrupt del pin d'ingresso e stop..il pic deve poi restare in attesa che il timer generi l'interrupt per l'overflow una volta generato l'interrupt del timer viene eseguita la funzione che tu hai scritto per gestire questo interrupt, questa funzione non deve far altro che resettare il timer e farlo ripartire e metti il pic nuovamente in attesa a questo punto aspetti che venga generato un nuovo interrupt da parte del pin di ingresso viene richiamata nuovamente la funzione per la gestione dell'interrupt e questa volta bisogna solamente leggere il valore del timer..........
g.mosfet non è collegato   Rispondi citando
Vecchio 22 febbraio 09, 17:20   #3 (permalink)  Top
User
 
L'avatar di marchino65
 
Data registr.: 09-09-2005
Residenza: Scandicci (FI)
Messaggi: 4.216
Ciao,
in PicBasic (microEngineering Labs - Development tools for Microchip PICmicro MCUs including PicBasic and EPIC programmer) c'è un comando che fa il caso tuo si chiama PULSIN (lettura) e PULSOUT (scrittura), sotto un pò di codice

loop:
.
.
PULSIN porta.0,1,W0
'
if W0 >= 90 and w0 < 126 then goto sequenza1
if W0 >= 126 and w0 < 162 then goto sequenza2
if W0 >= 162 and w0 <= 210 then goto sequenza3
.
.
sequenza1:
fai questo1
goto loop
.
sequenza2:
fai questo2
goto loop
.
sequenza3:
fai questo2
goto loop
.
end


Saluti
marchino65 non è collegato   Rispondi citando
Vecchio 22 febbraio 09, 23:04   #4 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
piccola aggiunta od alternativa a quanto suggerito da g.mosfet:

Il TMR0 deve essere settato in free-running con clock di 1...5us, (in modalità a 16 bit se possibile), a seconda della risoluzione che vuoi ottenere nel misurare la durata dell'impulso (da 250 a 1000 step).

L'ingresso degli impulsi va messo sulla porta RB0 e va abilitato l'interrupt sul fronte di salita della stessa.

Appena arriva un impulso, nella routine di interrupt della RB0 leggi il valore del timer e lo salvi in una variabile, poi inverti il fronte dell'interrupt.

Quando arriva il fronte di discesa sottrai al nuovo valore del timer il vecchio salvato e così hai direttamente la durata dell'impulso, poi ricommuti l'interrupt sul fronte di salita

Ora hai circa 18 ms liberi per far fare tutto quello che vuoi al PIC.

Usando sempre il TMR0 potresti creare impulsi in uscita a Ton variabile sincroni con quello di ingresso.

Un consiglio, le routine di interrupt scrivile in assembler o se il compilatore lo permette scrivendo direttamente nei registri del PIC senza usare librerie che talune volte sono di dubbia efficienza.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 23 febbraio 09, 08:28   #5 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da ElNonino Visualizza messaggio
piccola aggiunta od alternativa a quanto suggerito da g.mosfet:

Il TMR0 deve essere settato in free-running ...
Solo una precisazione: il Timer 0 è a 8 bit; per utilizzare questa tecnica devi scegliere un pic che abbia il Timer1 che è a 16 bit.

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 23 febbraio 09, 09:21   #6 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Citazione:
Originalmente inviato da MSchiepp Visualizza messaggio
Solo una precisazione: il Timer 0 è a 8 bit; per utilizzare questa tecnica devi scegliere un pic che abbia il Timer1 che è a 16 bit.

Michele
Nei PIC serie 16 hai ragione, per deviazione professionale io ormai uso quasi sempre la serie 18FXXXX che ha il timer 0 programmabile ad 8 o 16 bit.

Se all'amico basta una risoluzione di 256 step nella lettura della durata dell'impulso può comunque utilizzare anche un counter ad 8 bit.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 23 febbraio 09, 09:37   #7 (permalink)  Top
User
 
L'avatar di marchino65
 
Data registr.: 09-09-2005
Residenza: Scandicci (FI)
Messaggi: 4.216
Ciao a tutti,
§NIM§ deve soltanto legggere i segnali della ricevente ed accendere dei led, non un sw per gestire una centrale nucleare

Saluti
marchino65 non è collegato   Rispondi citando
Vecchio 23 febbraio 09, 09:43   #8 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Citazione:
Originalmente inviato da marchino65 Visualizza messaggio
Ciao a tutti,
§NIM§ deve soltanto legggere i segnali della ricevente ed accendere dei led, non un sw per gestire una centrale nucleare

Saluti
Guarda che per realizzare quanto ho scritto sono richieste ben 8 righe di codice !!!!!

Ho messo più tempo a descrivere il metodo che ha implementarlo

Inoltre con i micro con poche risorse hw è d'obbligo imparare ed utilizzare tecniche di programmazione efficienti.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 23 febbraio 09, 10:08   #9 (permalink)  Top
User
 
L'avatar di marchino65
 
Data registr.: 09-09-2005
Residenza: Scandicci (FI)
Messaggi: 4.216
Citazione:
Originalmente inviato da ElNonino Visualizza messaggio
Guarda che per realizzare quanto ho scritto sono richieste ben 8 righe di codice !!!!!

Ho messo più tempo a descrivere il metodo che ha implementarlo

Inoltre con i micro con poche risorse hw è d'obbligo imparare ed utilizzare tecniche di programmazione efficienti.

dai, dai, scrivi un pò di codice

SAluti
marchino65 non è collegato   Rispondi citando
Vecchio 24 febbraio 09, 00:47   #10 (permalink)  Top
User
 
Data registr.: 22-02-2009
Messaggi: 2
che dire....

grazie mille a tutti per l'aiuto è dire poco!
ho fatto delle piccole prove al simulatore e dovremmo esserci!!
purtroppo contavo di fare delle prove fisiche questa sera ma ho qualche rogna al programmatore (sospetto del cavo.. in quanto facendo il test hw su icprog non mi tornano dei valori :-\ ) percui temo che dovrò rimandare a domani i test veri e propri.. comunque vi terrò aggiornati !
ancora grazie mille!!!
§NIM§ 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 fate a gestire i thread che vi interessano? aleall Segnalazione Bug e consigli 6 23 ottobre 08 11:45
gestire un servo con un potenziometro jeshinji Circuiti Elettronici 5 08 agosto 08 11:45
E' facile gestire un elicottero a scoppio? Helifante Elimodellismo Principianti 11 10 febbraio 06 18:16
Gestire 2 regolatori con una trasmittente... Kymera76 Circuiti Elettronici 11 24 maggio 05 11:33
Pic, mio caro Pic.... fai4602 Circuiti Elettronici 7 24 novembre 03 20:34



Tutti gli orari sono GMT +2. Adesso sono le 09:42.


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