Ebbene si, l'elettronica del "vecchio" semaforo ormai ci stava lasciando, ed allora gli ingegneri del NinaTeam si sono messi all'opera, questa volta pensando anche a documentare il tutto, viste le tantissime richieste ricevute per quanto riguarda gli schemi elettrici. La realizzazione doveva essere estremamente semplice da realizzare, insomma a prova di "tuberi".

Ripresi i vecchi schemi ... un rapido consulto: "la struttura del semaforo è OK, ma l'elettronica di controllo ... buttiamola, la luce con lo specchietto ... anche. Mettiamoci un PIC ed un laser!"

Caspita, gli ingegneri si attrezzano con programmatori di pic, si costruiscono delle test board, si documentano sui pic, riprendono i vecchi manuali Assembler, rumble rumble ed alla fine rilasciano questa dichiarazione:

"Cuore del sistema diventa così il PIC12F629 ed un laser di quelli che si trovano sulle bancarelle.

Partiamo dal laser, eliminate le tre batterie e cortocircuitato il pulsante di attivazione, ci si collega il positivo ed il negativo (a 4.5v)

Per il "cuore" del semaforo lo schema è veramente semplice, le uscite per i LED1 , LED2, LED3, Buzzer ed AUX sono identiche, attraverso la resistenza da 4.7Kohm comanda il transistor 2n2222 che a sua volta eccita il relè. Solito diodo ai capi del relè 1n4148 e dallo scambio preleverete quello che vorrete.

Per la sezione del sensore ho usato una semplicissima fotoresistenza opportunamente schermata alla luce, tre resistenze, un condensatore, ed un transistor per aumentare la tensione in uscita della fotorestistenza.

Tutto qui!"

Si ma nel pic cosa ci va?

"I sistemisti hanno voluto dotare il sistema di un check  all'accensione con una serie di lampeggi e suoni. In seguito ogni volta che si interrompe il sensore si attiva l'uscita aux che rimane attivo fino a quando non si ripristina il sensore. Questo viene utilizzato al momento, per chiudere sulla tastiera del PC la barra spaziatrice per le funzionalità di cronometro, ma qualsiasi altro utilizzo può essere implementato (ANZI RIMANETE IN ATTESA: in cantiere un display contagiri e cronometro...).

Rimando fermi sulla linea di partenza, dopo circa un secondo parte la funzionalità del semaforo ... semplice e funzionale!

Il sorgente lo potete distribuire e pubblicare sul Vs sito, è documentato e funzionante. Non è ottimizzato nelle istruzioni, ma così è molto leggibile"

Mille ringraziamenti al NinaTeam i cui ingegneri hanno dato la disponibilità del sorgente. Alla prossima!

;
;
; Processore utilizzato: PIC 12F675
; Data realizzazione : 11/02/2006
; Autore : NinaTeam
; contatti: : ninateam@minizclub.com
;
; Utilizzo porte
; 3 led: GP0 GP1 GP2
; 1 buzzer: GP5
; 1 input: GP3
; 1 Aux : GP4


PROCESSOR 12F675
RADIX DEC
INCLUDE "P12F675.INC"
__CONFIG 00000110000100B ; ablitato il watchdog



#DEFINE Light1 00010001B              ; primo led acceso
#DEFINE Light2 00010011B              ; anche il secondo
#DEFINE Light3 00010111B              ; anche il terzo
#DEFINE Light4 00110000B              ; stato di spegnimeto LED ed attiva buzzer
#DEFINE LightOFF 00000000B         ; tutti spenti
#DEFINE LightON 00110111B          ; tutti accesi o per: assegno porte input (abilitate 4 porte)
#DEFINE Bank0 bcf STATUS,RP0    ; solo per leggibilità: attiva banco 0
#DEFINE Bank1 bsf STATUS,RP0    ; solo per leggibilità: attiva banco 1
#DEFINE psctrl 3                               ; ingresso fotocellula
#DEFINE OutPC 4                              ; uscita 0/5v PC
#DEFINE AuxON 00010000B            ; Attiva solo Aux

CL EQU 32 ; assegna a CL la locazione di memoria 32
CH EQU 33 ; assegna a CH la locazione di memoria 33
MaskLight EQU 34 ; assegna a MaskLight (attive/disattive) locazione 34

ORG 0 ;indica l'indirizzo a cui va caricato fisicamente il programma nella memoria flash
key RES 1 ; registro che memorizza lo stato dei tasti

MOVLW LightON ;carico la configurazione delle porte (equivalente a tutto acceso)
MOVWF CMCON ;Porte digitali
CLRF GPIO ;Azzera latch uscita
Bank1
CLRF TRISIO ;Tutte uscite
Bank0
CLRWDT ;azzera il Watchdog Timer
CALL RIT ; routine di ritardo lunga
; ------------------ routine test led
CLRF GPIO ;Azzera uscita
CALL RIT
CLRF GPIO ;Spengo tutto
MOVLW 00000000b
MOVWF MaskLight
MovLW Light1 ; routine per l'attivazione delle porte memorizzate in MaskLight
MOVWF MaskLight ;assegno maschera "LED1 on"
CALL Light
CALL RIT1 ; routine di ritardo corta
MovLW Light2
MOVWF MaskLight ;assegno maschera "LED2 on"
CALL Light
CALL RIT1
MovLW Light3
MOVWF MaskLight ;assegno maschera "LED3 on"
CALL Light
CALL RIT1
MovLW Light4
MOVWF MaskLight ;assegno maschera "LED1,2,3 off; LED4 on"
CALL Light
CALL RIT
MOVLW LightON
MOVWF GPIO ; accendo tutti i led
CALL RIT1
MOVLW LightOFF
MOVWF GPIO ; spengo tutti i led
CALL RIT1
MOVLW LightON
MOVWF GPIO ; accendo tutti i led per test
CALL RIT1
CLRF GPIO ;Spengo tutto
MOVLW 00000000b
MOVWF MaskLight


; ---------------- Main program; loop :
MAINLOOP
CALL Light ; attiva porte richieste
CLRWDT ;azzera il Watchdog timer
CALL TSIGN ; verifica porta di ingresso; ritorna quando si disattiva
GOTO MAINLOOP

; --------------------- routine di ritardo "lungo" in pratica 3 volte il "corto"
RIT
CALL RIT1
CALL RIT1
CALL RIT1
RETURN

; --------------------- routine di ritardo "corto": tre cicli di decremento utilizando CL e CH

RIT1
CLRF CL
MOVLW 254
MOVWF CH
DECFSZ CL,F
GOTO $-1
DECFSZ CH,F
GOTO $-3
CLRF CL
MOVLW 254
MOVWF CH
DECFSZ CL,F
GOTO $-1
DECFSZ CH,F
GOTO $-3
CLRF CL
MOVLW 254
MOVWF CH
DECFSZ CL,F
GOTO $-1
DECFSZ CH,F
GOTO $-3
RETURN

;-------------------------------------------------------------------------;
TSIGN
;verifico chiusura sensore
; chiudo contatto PC / lancio scheda cronometraggio
; se la chiusura > 1 s
; avvia procedura start
;esce se si ripristina il fotosensore
;-------------------------------------------------------------------------;
clrf key
check5V
btfss GPIO ,psctrl ; C'è la tensione 5V ?
goto no5V ; no esci all'etichetta no5V
goto ok5V ; sì, continua all'etichetta ok5V
no5V
MovLW LightOFF
MOVWF MaskLight ;assegno maschera "luci spente"
goto restout ; quindi ripristina e ritorna
ok5V
; attivo relè AUX per RIT time
MovLW AuxON
MOVWF MaskLight ;assegno maschera "Attiva Aux"
CALL Light
CALL RIT1
btfss GPIO,psctrl ; C'è ancora la tensione 5V ?
goto no5V ; no esci su no5V
MovLW Light1
MOVWF MaskLight ;assegno maschera "stato luci 1"
CALL Light
CALL RIT
btfss GPIO,psctrl ; C'è la tensione 5V ?
goto no5V
MovLW Light2
MOVWF MaskLight ;assegno maschera "stato luci 2"
CALL Light
CALL RIT
btfss GPIO,psctrl ; C'è la tensione 5V ?
goto no5V
MovLW Light3
MOVWF MaskLight ;assegno maschera "stato luci 3"
CALL Light
CALL RIT
btfss GPIO,psctrl ; C'è la tensione 5V ?
goto no5V
MovLW Light4
MOVWF MaskLight ;assegno maschera "stato luci 4 (spente 1,2,3 e BZ ON)"
CALL Light
CALL RIT1
btfss GPIO,psctrl ; C'è la tensione 5V ?
goto no5V
CALL RIT
restout
return


; ------------- funzione per migliore leggibilità
Light
MOVF MaskLight,W
MOVWF GPIO
return

END