Decodifica Codici Telecomandi (Radiocomandi) Rolling Code Microchip Keeloq, Motorola e National
Ricevitore RX per Radiocomandi Rolling Code Microchip, National e Motorola
IperCODE è un progetto realizzato per uso didattico, con il quale è possibile realizzare un sistema di acquisizione di codici di telecomandi (radiocomandi) basati sulle codifiche Keeloq Rolling Code Microchip, MM53200 National, UM86409 UM3750 UMC e MC145026 MC145027 Motorola ed avere la possibilità di trasmettere il codice ricevuto sulla seriale RS232, visualizzarlo sul display 16X2 oppure riprodurlo, trasmettendolo via radio. Si potranno quindi sperimentare le periferiche del PIC16F876 quali la UART, il Capture Compare, Il PWM e la gestione della EEPROM interna per il salvataggio del codice telecomando ricevuto. Il progetto è da considerarsi una base per sviluppare, e può facilmente adattarsi alle Vs. esigenze, ad esempio, se la memoria interna non basta per memorizzare tutti i codici del telecomando, si può collegare una memoria I2C o SPI sui pin del micro appositamente tenuti liberi. L'acquisizione del codice avviene tramite il tasto LEARN premuto per più di 5 secondi oppure tenendolo premuto all'accensione, mentre per la trasmissione del codice basta premerlo normalmente (se volete potete aggiungere un tasto supplementare).
Schema elettrico ricevitore codici telecomando

Lo schema considera una VCC stabilizzata a 5V il cui assorbimento dipende maggiormente dalla retroilluminazione del display, se la usate, altrimenti la corrente richiesta non dovrebbe superare i 100mA. La ricezione radio avviene tramite il modulo CCP1 del PIC, mentre la trasmissione del codice allo stadio RF è gestita dalla periferica CCP2 che in questo caso sarà settata come PWM. Per la trasmissione radio consiglio, per i principianti, l'utilizzo di un modulo trasmettitore radio già fatto, tipo Aurel o Mipot. Inoltre potete notare il collegamento con un driver RS232 per l'interfacciamento con un PC (Hyperterminal sotto Windows oppure Minicom sotto Linux - cliccate sui link se volete approfondire-) e le connessioni al display 16x2 per vedere subito il codice ricevuto dal telecomando. La scelta del display la lascio a Voi, ne esistono molti tipi e sicuramente ne avete qualcuno in laboratorio, quindi datasheet alla mano, verificate se il pinout corrisponde.
Lista parti
Item Qty Reference Part 1 2 ANT1,ANT2 ANTENNA 433.92 (cavo lunghezza 16.5cm) 2 10 C1,C2,C3,C4,C6,C9,C10,C11,C12,C13 100nF 3 1 C5 2.2pF 4 1 C7 100pF 5 1 C8 10pF 6 2 DL1,DL2 LED 7 1 J1 CON5 In Circuit Serial Programming 8 1 P1 CONNECTOR DB9 RS232 9 1 Q1 BFR92 10 1 RX1 RICEVITORE-433.92MHz Aurel-Mipot 11 1 R1 1K TRIMMER 12 2 R2,R4 10K 13 1 R3 100R* Verificare specifiche display 14 1 R5 47 15 1 R6 47K 16 2 R7,R8 680 17 1 R9 220 18 1 R10 10R 19 1 SAW1 R2632 saw filter 20 1 S1 SWITCH 21 1 U1 LCD 2X16 **verificare pinout in base al modello scelto 22 1 U2 PIC16F876 23 1 U3 HIN202CBN 24 1 Y1 4MHz Crystal Resonator (built in capacitor)
Decodifiche RADIOCOMANDI
Le decodifiche radio piu comuni usate dai telecomandi (auto,apricancello etc.) sono la cosiddetta NATIONAL con integrato MM53200 o UM3750, poi la MOTOROLA con integrato MC145026-7-8 ed infine il Microchip Rolling Code generato in genere dagli integrati HCS200 o meglio HCSxxx.
Codice National (MM53200 - UM3750)
Codifica a 12 BIT (on-off) per un totale di 4096 combinazioni anche se gli ultimi 2 BIT in genere sono di segnalazione canale. Il segnale ricevuto presenta 0X1 per ogni BIT trasmesso, dove X è il BIT che ci interessa. I tempi di trasmissione sono 11.52mS per la durata di tutto il pacchetto di 12BIT (WORD) e 0.32 mS per ogni singolo BIT inteso come 0 X 1 ) quindi abbiamo un totale di 0.96 mS a BIT decodificato. Tenete presente che la costante di tempo RC può essere modificata. Essendo una codifica ormai "vecchiotta", non è facile trovare in rete i datasheet, che allego.
Motorola (MC145026 - MC145027 -MC145028)
Codifica a 9 BIT (on-off-open) ogni bit ha 3 stati per un totale di 19683 possibili codici. Il segnale ricevuto può essere semplificato come 11 per ogni BIT '1' ricevuto 00 per ogni BIT '0' e 10 se 'Open', ogni DATA PERIOD avviene in 8 clock (tempo per decodificare un singolo BIT). Il timing potete vederlo dal datasheet a pag.10. Anche in questo integrato, la scelta dei componenti RC è fondamentale per il timing del circuito. Ovviamente RC del trasmettitore = RC del ricevitore!
Rolling Code Microchip
PREMESSA
Per chi non conoscesse il significato del Rolling Code, faccio un esempio semplice semplice. Ipotizziamo di trasmettere un codice fisso da un trasmettitore ad una ricevente, chiunque sia nei paraggi, può ricevere anche lui il codice, salvarlo e poi riprodurlo! Per ovviare a questo, si trasmette un codice variabile, che varia in base ad un algoritmo noto ovviamente anche al ricevitore. Quindi, per semplificare, se trasmetto il codice 25 e l'algoritmo rolling è +10 , quando ri-premo il telecomando, trasmetterà il nuovo codice 35 e poi 45 e cosi via. Il ricevitore, dopo aver riconosciuto 25 come codice valido, lo elimina dalla memoria e salva 25+10=35 quindi si aspetterà in futuro 35 e cosi via.... A questo punto la domanda nasce spontanea: E se per qualsiasi motivo ho premuto il telecomando lontano dalla ricevente (che non se ne è accorta) quando ri-premo il codice sarà 45 invece del 35 aspettato! La soluzione sta nel creare una finestra entro la quale TX e RX si sincronizzano, nel nostro caso la ricevente si aspetterà 35 ma anche 45,55,65.... (possiamo farlo, abbiamo milioni di combinazioni). Nella codifica Keeloq tutto questo è un tantino (si fa per dire) più complicato!!
La decodifica Rolling Code della Microchip è molto più complessa delle altre, è composta da 66 BIT con la trasmissione 1/3 2/3 (ricevo 110 per il BIT '0' e 100 per il BIT '1').
Di seguito il valore dei BIT:
1 BIT di Batteria scarica trasmettitore
1 BIT Codice ripetuto
4 BIT TASTI
28 BIT Serial Number (in pratica la parte fissa del rolling code)
32 BIT di Codice Rolling (Comprendente discriminante e sincronismo)
Per ulteriori informazioni Vi consiglio il Design Center della Microchip con relativi DataSheet e routine.
Firmware decodifica codici
Routine di ricezione codice Rolling (Manchester decoder), gestita sotto Interrupt sfrutta la periferica CCP1 (Captrure Compare). Ottimo esempio anche di primitivo Real Time con esecuzione a stati. In pratica durante la ricezione del codice il PIC può eseguire anche altri comandi/routines. La routine deve essere chiamata dall'ISR e può essere facilmente modificata ed adattata alle esigenze del sistema che state progettando. Nel MAIN controllate in polling la flag Flag_RX per sapere se è stato ricevuto un codice valido.
Routine di ricezione UM86409 compatibile con MM53200 e UM3750.
Questa routine è stata realizzata per PIC16C54, a 4MHz (quindi 1uS a ciclo) senza periferica Capture,
il segnale radio è monitorato in polling su PB,0 (RB0) quindi durante la ricezione il PIC è fermo!
Inoltre viene gestito anche il Watchdog.
Sono graditi tutti i commenti che volete, ma tenete conto che:
E'STATO UNO DEI MIEI PRIMI PROGETTI CON IL PIC, 13 ANNI FA'.......ANNO 1995!!
Routine di gestione UART. Trasmette e riceve sotto interrupt sfruttando la periferica. (ricordatevi si settare i PIN TX e RX della UART come INGRESSI!)
Routine di gestione LCD standard 16x2
Tutta la documentazione gratis in PDF la trovate nella sezione DOWNLOAD (per accedere bisogna essere registrati)
NOTA: Le routine, benché funzionanti, sono solo a scopo di esempio e DEVONO essere adattate al vostro circuito o allo schema proposto, verificando anche i PIN del PICMICRO usato!
E' disponibile anche un progetto completo:
IPERCODE_FULL
Ricevitore Rolling Code con visualizzazione del codice su display LCD e trasmissione seriale RS232.
Il progetto software viene fornito in ambiente MLAB completo di sorgente.

Potete editare il firmware secondo le Vs. esigenze e "debuggare" tramite MPLAB ICD2 oppure programmare direttamente il Vs. microcontroller. Per la realizzazione hardware potete prendere come esempio lo schema precedentemente presentato. Eventuali modifiche allo schema devono essere riportate nel firmware.
Potete utilizzare i microcontroller Microchip PIC che hanno a bordo la periferica seriale UART ed il modulo Capture Compare CCP1.
Il progetto riceve il segnale Rolling Code dal telecomando, lo DECRIPTA tramite algoritmo di decrypt (dovete necessariamente prima, inserire nell'header del programma la MANUFACTURE KEY, fornita dal produttore del telecomando) e ne permette la visualizzazione su display LCD. Allo stesso tempo il codice completo, e poi la parte decodificata, vengono inviati alla seriale UART per poter essere visualizzati anche su PC, tramite il programma Hyperterminal o Minicom sotto Linux.
In quest'ultimo caso potrete avere (ad esempio) un Controllo Accessi ad alta sicurezza, gestito dal Vs. PC!

Il progetto in formato MPLAB completamente testato e funzionante, completo di sorgente comprensivo delle routines di ricezione Rolling Code, decrypt e trasmissione UART/LCD, facilmente adattabile alle Vs. esigenze, è in vendita qui --->> IPERCODE_FULL.ZIP
- blog di Emanuele
- 12758 letture







Salve
Salve
mi piacerebbe approfondire la cosa dal punto di vista software, pero' mi trovo impacciato con l'hardware, non e' possibile trovare il tutto anche in kit di montaggio?
Grazie
La soluzione più rapida e'
La soluzione più rapida e' quella di acquistare una demoboard Microchip
Ne può acquistare una su Farnell
http://it.farnell.com/jsp/Semiconductors/Development+Tools+&+Programming...
Con o senza ICD2 (necessario per la programmazione)
Poi dovete aggiungere la parte radio,
potete ad esempio acquistare un modulo radio Aurel con relativo telecomando
operante a 433Mhz (ovviamente Rolling Code)
Un distributore dell'Aurel e' Futura Elettronica
Saluti
Emanuele
ciao non riesco piu' a
ciao non riesco piu' a trovare la demoboard su farnell ..dove posso trovarne una ..? grazie
S
Demo baord Microchip per PICmicro
Ciao, puoi utilizzare qualsiasi demoboard per picmicro, adattando, se necessario, il firmware.
Comunque quella usata nell'esempio è la demo board microchip PICDEM2
http://it.farnell.com/microchip/dm163022/scheda-dimostrativa-picdem2-plus/dp/3992925
Vorrei realizzare questo
Vorrei realizzare questo progetto per ricevere comandi da un telecomando... e vorrei emulare poi un telecomando, tuttavia ho scoperto che quasi tutti i moduli aurel sono a 9600bps (e non ne esistono da 2400, come lo stadio ricevente). Come posso fare per comunicare dal modulo a 9600 con quello a 2400?
Grazie mille,
Alessio Periloso
Ciao, cosa significa che i
Ciao, cosa significa che i moduli Aurel sono da 9600 e non ne esistono da 2400 come lo stadio ricevente?
Comunque la velocità di ricezione dei moduli e' quella massima, quindi possono ricevere anche a velocità inferiori.
Emanuele
ciao volevo utilizzare il
ciao volevo utilizzare il progetto come "ponte" per aprire e chiudere un cancello di servizio dall'abitazione. allo scopo vorrei sapere se il dispositivo oltre a ricevere e decodificare il comando "rolling-code" di Microchip lo ritrasmette rielaborato ( ovvero il codice successivo ) o se trasmette sempre lo stesso codice.
ti ringrazio e ti chiedo scusa per il disturbo.
Ciao,
Ciao,
il dispositivo IPERCODE non trasmette, riceve solamente.
Per trasmettere ha bisogno di un modulo TX e per tramettere il codice Rolling successivo, si deve implementare l'algoritmo di encoder Keeloq con relativa manifacture key
Emanuele
Poiché non sono molto
Poiché non sono molto esperto nel settore dei moduli radio rx mi viene un dubbio...sul sito di Futura Elettronica alla voce moduli radio -> rx supereattivi am 433mhz , ci sono molti modelli di ricevitori descritti con la voce "ottimizzati per la famiglia hcsxxx della microchip".Ma l'uscita del ricevitore radio può essere direttamente connessa anche ad un pic come nel progetto ipercode oppure sto sbagliando modello?Se sono fuori strada per favore qualcuno può consigliarmi quale prendere per connettere l'uscita del modulo direttamente al pic dove (come da progetto) viene implementata la decodifica del keeloq.
grazie a tutti.
Decodifica codice MC145026
Salve,
mi interesserebbe implementare in un PIC la decodifica del codice generato da un MC145026. Ho guardato i sorgenti .ASM che hai scritto, ma non trovo dove è la parte che mi serve... la trasmissione è fatta sulla stessa linea di comunicazione sia a 38400 Hz che a 76800 Hz (una parte dei codici è inviata a una velocità, una parte a un'altra). Per il momento mi servono solo i dati che vengono inviati a 76800 Hz. In effetti, se si vuole guardare la cosa sotto un altro punto di vista, si potrebbe quasi pensare che sia una trasmissione a 76800 baud, dove si hanno 1 start bit, 6 bit di dati e 1 stop bit e in totale 18 bytes (da 6 bit l'uno, che possono valere '111111' oppure '000000'). Quello che dovrei arrivare a fare è "tirar fuori" la sequenza completa di questi 19 bytes (o degli 8 trit).
Puoi aiutarmi pf?
Grazie mille,
Stefano
Invia nuovo commento