sabato 25 agosto 2012

Invio dati bluetooth da PIC 16F628A @ 20MHZ

Questa applicazione presuppone l'utilizzo di un microprocessore dotato di porta seriale USART hardware. In particolare è stato scelto il PIC16F628A con quarzo esterno a 20MHz; i pin interessati sono il pin 7 (RX) e 8 (TX).
Il pin RX del pic andrà collegato al pin TX del modulo bluetooth e viceversa.

Lista componenti:
1 PIC 16F628A
2 condensatori da 22pF
1 Quarzo 20MHZ
1 Res. 1/4W 220Ohm
1 Led
1 Modulo bluetooth seriale (tipo linvor, RN, ecc. ecc. configurato a 2400 baud)


Il firmware è stato sviluppato in PICBASIC con l'ambiente MICROCODE STUDIO.
Lato PC è stato utilizzato il Serial Communicator dell'ambiente di sviluppo.
Il pic è configurato per lavorare con oscillatore esterno a 20MHZ con MCLR disattivato.

Per utilizzare il quarzo esterno da 20mhz occorre comunicarlo al compilatore (DEFINE OSC 20); successivamente è necessario modificare il file 16F628A.INC nella cartella PBP commentando la riga seguente __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF con il punto e virgola ';' altrimenti in fase di linking viene segnalato l'errore "Overwriting previous address contents (2007)".

@ __config _HS_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _BODEN_ON & _LVP_OFF
DEFINE OSC 20
DEFINE HSER_RCSTA 90H
DEFINE HSER_TXSTA 20H     
DEFINE HSER_BAUD 2400 


A VAR BYTE
A=0

LED     VAR     PORTA.1
output Led

Main
    high Led
    pause 500
    LOW Led
    pause 500
   
    HSEROUT ["Value ", DEC A, 13, 10]
    A = A + 1
     
    GOTO Main




Di seguito il circuito sperimentale funzionante e alimentato direttamente dal programmatore PICKIT3 via ICSP.


Il programma Serial Communicator connesso alla porta COM3 virtuale creata dall'accoppiamento bluetooth tra PC e scheda (LINVOR) in ricezione dei dati inviati dal PIC.
Il collegamento nel Serial Communicator è effettuato a 2400baud, 8 bit di dati, no parity, 1 stop bit.
Questa deve essere la stessa configurazione della porta COM3 (lato PC).


Per la trasmissione a 115200baud occorre impostare il modulo BT con il comando AT+BAUD8
e nel programma PICBASIC indicare:

...
DEFINE HSER_SPBRG 10              ; 115200 @ 20 Mhz
DEFINE HSER_RCSTA 90h             ; Hser receive status init
DEFINE HSER_TXSTA 24h             ; Hser transmit status init
DEFINE HSER_CLROERR 1             ; Hser clear overflow automatically
...


Per altre velocità di connessione in modalità asincrona (vedi valore indicato in HSER_SPBRG) fare riferimento alle tabelle del datasheet 16F628A a pagina 76.
Firmware: 16f628_hserout2400.hex , 16f628_hserout115200.hex

venerdì 24 agosto 2012

Telecomando infrarossi per DSLR canon, nikon e pentax

L'obiettivo di oggi è costruire un telecomando RC-1 per il controllo delle fotocamere canon DSLR.
A fondo pagina il firmware per la versione completa con controllo canon, nikon e pentax.
 
Dopo una rapida occhiata al lavoro di 'reverse engineering' per un telecomando commerciale trovato su internet: http://www.doc-diy.net/photo/rc-1_hacked/  il segnale da inviare alla fotocamera deve avere (onda quadra) la frequenza di circa 32.700Hz e può essere di due tipi:

1) Scatto immediato: Treno di 16 impulsi, pausa di 7.330us e poi altro treno di 16 impulsi
2) Scatto rit. di 2 sec: Treno di 16 impulsi, pausa di 5.360us e poi altro treno di 16 impulsi

per avere lo scatto immediato o scatto dopo un ritardo di 2 sec.

Di seguito i parametri del telecomando originale e la tolleranza ammessa negli stessi:

Parameter Original RC-1   Tolerance
Num. of pulses 16      9 - 22
Burst frequency 32.700 Hz            29.800 - 35.500 Hz
Delay for immediate trigger 7.33 ms7.0 - 7.7 ms
Delay for 2 s delayed trigger 5.36 ms 5.1 - 5.7 ms

Per la realizzazione ho impiegato il microprocessore 12F683; impostato con l'oscillatore interno a 4MHz e resistenza di pull-up attiva sul pin 6 - GPO.1 (dove va collegato il pulsante).

L'uscita al pin 7 - GPO.0 controlla il gate del mosfet n-channel 2N7000 e quindi il led infrarosso TSAL6200 a 940nm con la resistenza da 180Ohm in serie sul drain collegata ai 5V.



Come alternativa l'uscita al pin 7 - GPO.0 può essere collegata direttamente al diodo infrarosso mediante la resistenza da 180 Ohm.



Di seguito la lista componenti con a fianco il prezzo del singolo componente preso da RS http://it.rs-online.com/web/ . Con meno di 5 euro costruisci il telecomando.



Saldatore, filo di rame e stagno ed ecco la realizzazione su un piccolo pcb millefori:


Il firmware è scritto in PICBASIC; la routine del singolo impulso in assembler sfruttando il ritardo di 2us (8 colpi di clock) introdotto dall'istruzione 'goto $+1'.
Portare l'uscita GPIO.0 alta o bassa ('bsf GPIO, 0' o 'bcf GPIO, 0') introduce invece un ritardo di 1us (4 colpi di clock).
Per creare il ritardo centrale tra i due treni da 16 impulsi  ho utilizzato il comando PAUSEUS(7330)
o PAUSEUS(5360).
Con clock a 4MHZ non è possibile realizzare con PAUSEUS ritardi inferiori ai 24us; questo spiega l'utilizzo di istruzioni assembler per la creazione dei burst a 32700Hz.
 
Nota bene: le considerazioni sui ritardi istruzioni assembler sono valide con il clock impostato a 4MHz.
Ogni istruzione viene eseguita in un ciclo macchina (4 colpi di clock) eccetto per le istruzioni di salto (ma solo quando il salto e' effettuato) e per le istruzioni che modificano il program counter; in questi due casi l'istruzione richiede 2 cicli macchina (8 colpi di clock).
 
Il programma nel loop principale attende la pressione del tasto; alla pressione dopo 500ms verifica se ancora premuto e quindi discrimina se inviare il segnale di tipo 1 o 2.
La pressione del tasto provoca lo scatto immediato (impulso di tipo 1); la pressione per più di 1/2 sec provoca quindi lo scatto ritardato di 2sec (impulso di tipo 2).
Di seguito il link del firmware (.hex) : canon_firmware.hex
Di seguito l'elenco delle fotocamere supportate dal telecomando RC-1:
Digital Rebel T3i / 600D
Digital Rebel T2i / 550D
Digital Rebel T1i / 500D
Digital Rebel XSi / 450D
Canon EOS Digital Rebel XTi / 400D
Canon EOS Digital Rebel XT / 350D
Canon EOS Digital Rebel / 300D
Canon EOS 60D
Canon EOS 7D
Canon EOS 5D Mark II
 
Allego anche la versione del firmware che supporta nikon e pentax : dslr_firmware.hex
 
Nikon e Pentax vengono comandate da burst a 38Khz; per i segnali si rimanda al progetto sbprojects.
Di seguito le forme d'onda per nikon e pentax.
 

 
Per il momento il telecomando è stato testato solo sul modello canon 450d.