![](https://www.baronerosso.it/img/t.gif)
![]() | #1 (permalink) Top |
User Data registr.: 22-02-2005
Messaggi: 751
|
Ciao a tutti.... Ho fatto parecchi programmi per il mitico pic 16f84, ma ormai da un annetto non avevo piu' tempo.... Ieri ho rispolverato il programmatore e ho dato un po di svitor alle rotelline che ho in testa che si erano un po arrugginite, per vedere se mi ricordavo qualche cosa.... Ba dai... qualche cosa mi e' turnata in mente... riesco ancora a far lampeggiare un led ![]() ![]() ![]() Allora.... veniamo al dunque... Mi piaderebbe realizzare un circuitino tipo il cercamodelli, ma completamente programmabile.... Mi spiego meglio... vorrei realizzare un qualche cosa che ad esempio usando un interrutore a tre posizioni mi possa fare con una posiziono una determinata cosa (per esempio un gioco di luci) con un altra posizione (per es. un beep come cercamelli) e cosi' via chi piu' ne ha piu ne metta... A questo punto il dubbio piu' atroce.... Quel'e' il modo piu' semplice e pratico per fare riconoscere al pic il segnale ( o meglio le varie soglie di segnale) in modo da fargli scegliere sa sub da eseguire??? Visto che ad occho mi sembra di riconoscere ancora abbastanza bene le istruzioni, se non avete voglia di spiegarmi potete mandarmi qualche asm di esempio.... Grazie in anticipo a tutti.... |
![]() | ![]() |
![]() | #2 (permalink) Top |
User Data registr.: 26-10-2005 Residenza: Modena
Messaggi: 765
|
Penso che bisogna fare varie prove con un oscilloscopio oppure cercare della documentazione ariguardo delle riceventi ppm o pcm. Vorrei esserti di maggiore aiuto, ma nn conosco tali tecniche trasmissive nei dettagli e soprattutto come viene elaborato il segnale ricevuto dalla ricevente prima di darlo in uscita sul canale...
__________________ Eppure a Kitaro vola..... ![]() ![]() ![]() ![]() ![]() ...forse un giorno pure a me volera' qualcosa ![]() |
![]() | ![]() |
![]() | #3 (permalink) Top | |
UserPlus | Citazione:
![]() ![]() Ma tu vorresti controllare il circuito, che vuoi ottenere con il pic, con un canale proveniente dalla RX o da un semplice interruttore a tre posizioni ? Se e' la prima hai due soluzioni, fai ciclo molto veloce che controlla per quanto tempo il segnale proveninete dalla RX resta a 1, i dati della lunghezza d'impulso li vedi ben schematizzati nella parte del sito riservata ai progetti elettronici "vedi prova servo 1 e 2". (metodo veloce) Altrimenti dovrai scomodare un timer in modo capture su PIC e farti dare da lui i dati di lunghezza dell'impulso. (un po' vago ma questo metodo e' piu' complicato da realizzare e bisogna addentrarsi un po di piu' in registri ecc...) Se e' la seconda controlla quale di 3 piedini settati come input hai il segnale basso (0V) o Alto (5V) e poi fai un salto ad una parte di codice dove metti il tuo gioco di luci o quant'altro. Non ho del codice da darti pronto ma sicuramente se fai rif. a rivp6 trovi di sicuro un valido aiuto e' lui l'esperto ![]()
__________________ C'e' chi vola con l'elettronica e chi fa volare l'elettronica ... entrambi volano. ![]() ________________________________________________ ProtoMax proudly present: ProtoMeter 2 32bit ARM core + ZigBee Radio all in one Telemetry system ... Next on this forum | |
![]() | ![]() |
![]() | #4 (permalink) Top |
User Data registr.: 11-10-2004 Residenza: out of Verona
Messaggi: 573
|
Chiarisci un po meglio come dovrebbe funzionare e in che linguaggio lo programmi. PS: il 16f84 è un pò obsoleto, vedi se riesci a passare al 16F876 o 16F628 o ancora meglio alla serie 18F. Tanto non è che costino molto di più. |
![]() | ![]() |
![]() | #5 (permalink) Top | |
User Data registr.: 22-02-2005
Messaggi: 751
| Citazione:
Vorrei contollarlo con un canale libero della ricevemte.... Ho pensato al 16f84 anche se e' vecchiotto, perche' ne ho alcuni in casa, e soprattutto ho una vecchia demoboard che per provare solo quello... Si, pensavo proprio a un contatore, ma speravo in qualche dritta per semplificare un po il tutto, visto che mi basterebbero un paio di livelli... (nel senso che magari con un interrutore a tre posizioni sulla radio posso per esempio fare -tutto off-luci- cercamodelli) tantop per dirne una... se poi sono di piu' meglio, ma per cominciare qualche esperimento di massima mi basta... non ho pretese... Come linguaggio solitamente uso l'assembler.... | |
![]() | ![]() |
![]() | #6 (permalink) Top |
User Data registr.: 02-04-2005
Messaggi: 2.050
|
Tratto da questo listato per PIC a 8MHz. CH e CL sono due generici registri a 8 bit, PCMCH3 e' l'alias di un pin di ingresso collegato ad un canale della ricevente. Alla fine in W abbiamo un valore pari a 128 con stick al centro e via via +/-4µS per ogni unita' in piu' o in meno. Codice: ;----------------------------------------------------------------------- ; Misura ingresso PPM CANALE 3 ; Risoluzione 4uS, conteggio 16 bit in CH:CL ;----------------------------------------------------------------------- PPM_CH3 CLRF CL ;azzera conteggio CLRF CH BTFSS PPMCH3 ;attende impulso GOTO $-1 INCF CL,F BTFSS STATUS,Z GOTO $+2 INCF CH,F NOP BTFSC PPMCH3 GOTO $-6 CALL NORMCHCL RETURN ;----------------------------------------------------------------------- ; Normalizzazione conteggio 16 bit in valore 8 bit, ; il risultato e' ritornato in W. ; <988uS = 0 ; 1,0mS = 250 +/-1 -247 = 3 +/-1 ; 1,5mS = 375 +/-1 -247 = 128 +/-1 ; 2,0mS = 500 +/-1 -247 = 253 +/-1 ; >2,008mS = 255 ; ; CH:CL = CH:CL - 247 ; IF (CH < 0) THEN RESULT = 0 ; ELSE IF (CH = 0) THEN RESULT = CL ; ELSE RESULT = 255 ;----------------------------------------------------------------------- NORMCHCL MOVLW 247 SUBWF CL,F BTFSS STATUS,C DECF CH,F BTFSC CH,7 RETLW 0 MOVF CH,F BTFSS STATUS,Z RETLW 255 MOVF CL,W RETURN |
![]() | ![]() |
![]() | #7 (permalink) Top |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
|
Segui il consiglio di RIVP6 e passa al 628: il vantaggio è che così hai a disposizione un contatore a 16 bit e rilevare la lunghezza dell'impulso diventa molto facile; in alternativa al codice che vedi qui, puoi usare il 16F84 con il timer0; devi però usare i seguenti accorgimenti: 1) azzerare il timer0 quando rilevi il fromte di salita (invece di dare lo start, dato che il timer0 non si può fermare ed avviare) 2) monitorare anche il flag di overflow e, quando lo trovi ad uno, incrementare la parte alta di un contatore a 16 bit di 1 quindi azzerare il flag di overflow 3) leggere il valore del timer0 ed il elativo flag di overflow quando rilevi il fronte negativo (fine impulso). La stessa logica può essere utilizzata gestendo il punto 2 sotto interrupt. Se invece usi il 628 diventa tutto molto più semplice... ;************************************************* ****************** ; Descrizione bit PortA ;************************************************* ****************** ; #DEFINE Inp PORTA,0 ; input #DEFINE Page_1 STATUS,RP0 ; Page 1 bank switch ;************************************************* ****************** ; Start of code ;************************************************* ****************** ; ORG 0 goto Init ;************************************************* ****************** ; Program init ;************************************************* ****************** ; Init movlw 0xFF ; xxOI IOOO Data dir bsf Page_1 ; Set page 1 movwf TRISA ; I/O Port movlw 0xC2 ; 1000 0010 movwf OPTION_REG ; Presc TMR0/4 bcf Page_1 ; Set page 0 clrf PORTA ; Clear output movlw 0x07 movwf CMCON ;************************************************* ****************** ; Main program start ;************************************************* ****************** ; Start movlw 0x00 movwf TMR1L movwf TMR1H ; Azzera timer 1 bcf T1CON,0 ; Stop Timer1 CountLoop btfsc Inp goto $-1 ; Attende linea bassa btfss Inp goto $-1 ; Inizio impulso bsf T1CON,0 ; Start Timer1 btfsc Inp ; Fine impulso goto $-1 bcf T1CON,0 ; Stop Timer1 END Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. |
![]() | ![]() |
![]() | #8 (permalink) Top |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
|
Ho visto adesso che il listato preso dall'editor MPLAB ha perso tutte le tabulazioni ed un po' più difficile da leggere... Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. |
![]() | ![]() |
![]() | #9 (permalink) Top |
User |
L'ultimo lavoro che ho fatto con il PIC risale ad un annetto fa, ma adesso mi avete messo in testa idee nuove... Prima di tutto suggerisco di passare dall' Assembly al PicBasic, perchè ? Ho lavorato due anni in assembler, quando mi hanno fatto provare il PicBasic dell'assembler non ne ho voluto sapere più parlare ! Quello che in Basic scrivi in dieci righe, con l'assembly lo devi scrivere in una pagina, e poi ci sono un sacco di funzioni già bell'e pronte da utilizzare... Io pensavo una cosa.... al servo arriva un segnale digitale che comunica la posizione angolare, adesso non so a quanti bit viene codificato questo segnale, ma sicuramente sono più di 3. Si potrebbe mettere sul radiocomando un commutatore ad otto posizioni per esempio (lo si può fare anche a 4 o a 2) collegato in modo che questo ad ogni scatto disinserisca o inserisca resistenze in serie al canale della radio che vogliamo utilizzare. In questo modo per esempio potremmo associare (supponendo che la tensione massima sul canale sia di 5 volt, adesso non so i valori reali) alla funzione 1 il valore di 0.5 volt, alla funzione 2 il valore di 1 volt, alla funzione 3 il valore di 1.5 ....alla funzione n il valore 5 volt (questo si può fare semplicemente tramite dei partitori resistivi, se volete vi invio un semplice schemino) La parte progettuale più complicata sta appunto dal lato ricevente. Il PIC dovrebbe "capire" quale range di tensione il TX sta inviando su quel canale. La questione è abbastanza scomoda perchè il PIC oltre ad eseguire per esempio il gioco di luci, deve costantemente tenere sotto controllo gli impulsi che gli arrivano dalla ricevente, perchè se vogliamo cambiare fuzione, lui deve passare ad un'altra subroutine. La difficoltà principale credo sia quella di sincronizzarsi e analizzare il segnale digitale (treno di impulsi) che esce dalla ricevente, in questi giorni ci penso un pò su, vediamo se ne esce fuori qualcosa.. |
![]() | ![]() |
![]() | #10 (permalink) Top | |
User Data registr.: 02-04-2005
Messaggi: 2.050
| Citazione:
![]() | |
![]() | ![]() |
![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
PIC16F84 & motore stepper 200 giri | DDV1982 | Circuiti Elettronici | 13 | 19 giugno 08 18:54 |
AIUTO!!! AIUTO!!! AIUTO!!! INTERFERENZE PAUROSE!!!!!! | alvaro | Elimodellismo in Generale | 10 | 04 ottobre 07 11:36 |
Schema per PIC16F84.... | kriptor86 | Circuiti Elettronici | 5 | 11 marzo 04 18:13 |
Pic16F84 e seriale | dexterman | Circuiti Elettronici | 6 | 01 febbraio 04 16:59 |
Regolatore PIC16F84 --- Motore ? | flyer | Circuiti Elettronici | 3 | 22 dicembre 03 18:55 |