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:
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