2) Problema Moduli TX-RX 433

Ciao a tutti, descrivo il mio problema reale, ignorate il messaggio precedente.

Ho due stadi, uno ricevente ed uno emittente, ciascuno pilotato da un pic16f84. Per prova, lo stadio emittente spedisce 8 bit sequenzialmente con un'onda quadra di periodo 1 ms (1khz frequenza). Se il bit da spedire è un 1, allora il semi-periodo basso dell'onda dura 0.25 ms, mentre il semiperiodo alto dura 0.750 ms. Se il bit da spedire è uno zero, allora il semiperiodo basso dura 0.750 ms, mentre quello alto 0.250 ms. L'onda quadra la ottengo con una call del genere :

BitHigh bcf PORTB,OUT; 0 per 0.250 ms Call Wait250 bsf PORTB,OUT; 1 per 0.750 ms Call Wait750

bcf PORTB,OUT return ;

BitLow bcf PORTB,OUT ;0 per 0.750 ms Call Wait750 bsf PORTB,OUT ; 1 per 0.250 ms Call Wait250 ; bcf PORTB,OUT return

Dove Wait250 è una routine di ritardo creata con Picloops 2.1 che appunto crea un ritardo di 0.250 ms, mentre wait750 ne crea uno di 0.750 ms , e OUT è la linea della portaB alla quale è collegato il pin IN dello stadio Tx.

Lo stadio ricevente è basato sugli interrupt generati da un cambiamento di stato sulla linea RB0, alla quale è collegato il pin di uscita del modulo RX. In uscita al modulo dovrei avere la stessa onda quadra che ho spedito, per cui misuro la durata di ogni periodo alto con il timer TMR0 (con opportuno prescaler) e la confronto: se la durata del periodo alto è maggiore di un certo valore allora ho ricevuto un 1, altrimenti uno 0. Non ho ancora avuto la possibilità di vedere se la gestione del timer è corretta, perchè il problema che sorge è un altro.

Il problema è che vengono generati centinaia di interrupt, invece che solo

16 (8 per le salite e 8 per le discese dell'onda)! Questo accade anche se il trasmettitore è scollegato: cioè, stacco del tutto lo stadio emittente, mentre accendo lo stadio ricevente, e ottengo sempre centinaia di interrupt nel giro di un paio di secondi. Per misurare quanti interrupt ho ricevuto, ho aggiunto un contatore che viene incrementato ogni volta che la routine di interrupt è richiamata, e alla fine del mainloop, che dura appunto un paio di secondi, scrivo il valore del contatore sulla eeprom interna. Se stacco anche il ricevitore RX e creo gli intterupt "manualmente" con un filo il numero di int generati è corretto.

A cosa è dovuto e come posso risolvere? Forse ad un "bouncing" creato dal modulo rx?

Grazie, Nick

Reply to
Nick
Loading thread data ...

Che il ricevitore "riceva" della roba anche quando il tx è spento è normale. Almeno anche io ho riscontrato lo stesso comportamento quando ho utilizzato i moduli Aurel. Considera che in giro ci sono una marea di telecomandi che funzionano a 433Mhz. Io comunque non ho avuto problemi nella comunicazione (avevo utilizzato i moduli per comandare un robottino dal pc attraverso Visual Basic) e utilizzavo semplicemente il protocollo standard della RS-232. Il Pic che riceveva il segnale saltava alla routine di ricezione tramite un interrupt su Port B.0 e poi campionava "a metà del bit"... Trasmettevo priva il numero 170 (10101010) per la sincronizzazione e poi il comando da eseguire. Non ho provato il tutto su grandi distanze ma a 15-20 metri funzionava bene. Se ti interessa posso mandarti i file asm in email.

Ciao Fil

Nick ha scritto:

--

questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it
Reply to
Fil

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.