'$sim
$regfile = "m328pdef.dat"
'$regfile = "m328def.dat"
$crystal = 16000000
$hwstack = 50
$swstack = 32
$framesize = 40
'
'
'
' MAX_R 11 21 Load MAX_R
' ./ ==== +-----+
' 144v ------------ -------- -----| |--------/
' +-----+ |
' |
' 31 41 Load MAX_N |
' ./ ==== +-----+ |
' 144v ------------ -------- -----| |--------
' MAX_N +-----+ |
' |
' -----
'
' COIL_N
' ./ +-----+
' /------ -------------------| N |--------/
' | +-----+ |
' 24v ----- |
' | ./ +-----+ |
' \------ -------------------| R |--------
' COIL_R +-----+ |
' |
' -----
'
' 19 29 10 kO
' ==== +-----+
' + 5V -------- ----| |--------
' | +-----+ |
' | |
' Ok_N ------------/ -----
' 39 49 10 kO
' ==== +-----+
' + 5V -------- ----| |--------
' | +-----+ |
' | |
' Ok_R ------------/ -----
Ddrb = &B00110111 'definizione direzione pins porta B: 0=IN, 1=OUT
Ddrc = &B11110000 'definizione direzione pins porta C: 0=IN, 1=OUT
Portc = &B00001111 'attiva pullup PORTC
Ddrd = &B11110011 'Definizione Direzione Pins Porta D: 0=IN, 1=OUT
Portd = &B11111111 'attiva pullup PORTD
Config Lcd = 16 * 2 'configure lcd screen
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , Rs = Portb.0
Displ_on Alias Portb.2 'DEFINISCE IL PIN CONTR. il led display 0=Off, 1=On
Set Displ_on ' accende il display
'definizione tastiera
Star_t Alias Pinc.0
Paus_e Alias Pinc.1
Sto_p Alias Pinc.2
Bypass Alias Pinc.3
'definizione pins I/O !!!
Max_r Alias Portc.4 'relè abil.carico 5A x 1121 0=Aperto, 1=Chiuso
Max_n Alias Portc.5 'relè abil.carico 5A x 3141 0=Aperto, 1=Chiuso
Coil_r Alias Portd.0 'eccitazione bobina R; 0-1-0 tempo di accitazione 500 ms
Coil_n Alias Portd.1 'eccitazione bobina N; 0-1-0 tempo di accitazione 500 ms
' definizione pins test x verifica avvenuto scambio
Ok_r Alias Pind.2 'check stato rele' R
Ok_n Alias Pind.3 'check stato relè' N
'pins riservati contatore esterno
Cnt Alias Portb.4 'conta impulsi esterno
Res_cnt Alias Portb.5 'reset conta impulsi
Set Cnt
Set Res_cnt
Reset Coil_r
Reset Coil_n
Dim Count As Long 'definizioni variabili
Dim Key As Byte
Cursor Off
Set Displ_on ' accende il display
Cls ' SPLASH SCREEN
Lcd "* RELAIS FS-58 *"
Locate 2 , 1
Lcd "*FUNCTION TEST *"
Wait 2
Locate 2 , 1
Lcd "* INITIALIZING *"
Wait 2
Cls
Lcd "*INSERT RELAIS *"
Locate 2 , 1
Lcd " & PRESS START "
Comincia: 'inizializzazione
Reset Res_cnt 'azzero il contatore esterno
Waitms 100
Set Res_cnt 'relè in posizione di inizio test
Set Coil_r 'eccita la bobina "R"
Waitms 500 'alimenta la bobina per 500 ms
'If Ok_r = 0 Then Goto Fine_loop 'test se scambio avvenuto: 0=non avvenuto ->ALARM!!
'If Ok_n = 1 Then Goto Fine_loop 'test se scambio avvenuto: 1=non avvenuto ->ALARM!!
Reset Coil_r 'spegne la bobina "R"
Count = 0 'azzero il contatore interno
Key = 0 'azzero la variabile tastiera
Reset Max_r 'apre i rele della 144v x R
Reset Max_n 'apre i rele della 144v x N
Inizio: 'inizio programma
'routine di controllo tastiera
If Star_t = 0 Then Waitms 20 'debounce
If Star_t = 0 Then Key = 1 'key=1 inizio/continua test
If Star_t = 0 Then Goto Ciclo
If Paus_e = 0 Then Waitms 20 'debounce
If Paus_e = 0 Then Key = 2
If Paus_e = 0 Then Goto Pausa 'key=2 pausa test
If Sto_p = 0 Then Waitms 20 'debounce
If Sto_p = 0 Then Key = 3 'key=3 fine test test
If Sto_p = 0 Then Goto Fine_test
'If Bypass = 0 Then Waitms 20 'debounce
'If Bypass = 0 Then Key = 4 'key=4 al galoppo e poi torna qui
'If Bypass = 0 Then Cls
'If Bypass = 0 Then Gosub Galoppo
If Key = 1 Then Goto Ciclo 'loop dopo il primo start
Goto Inizio 'nessun tasto premuto: aspetta ancora
Ciclo: 'inizio ciclo di test
'Cls
'Lcd "ciclo n." ; Count;
'step 1
Locate 2 , 1
Lcd " Test #1 "
Gosub Apertura3141 'apre3141 a vuoto
'step 2
Locate 2 , 1
Lcd " Test #2 "
'Waitms 3000 'aspetta 3 sec.
Set Max_n 'attiva il carico x 3141
Gosub Chiusura3141 'chiude3141 sotto carico
'step 3
Locate 2 , 1
Lcd " Test #3 "
'Waitms 1500 'aspetta 1,5 sec.
Gosub Apertura3141 'apre3141 sotto carico
Reset Max_n 'disattiva il carico x 3141
'step 4
Locate 2 , 1
Lcd " Test #4 "
'Waitms 10500 'aspetta 10,5 sec.
Gosub Chiusura3141 'apertura1121
'step 5
Locate 2 , 1
Lcd " Test #5 "
'Waitms 3000
Set Max_r 'attiva il carico x 1121
Gosub Apertura3141 'chiude 1121
'step 6
Locate 2 , 1
Lcd " Test #6 "
'Waitms 1500 'aspetta 1,5 sec
Gosub Chiusura3141 'apre 1121
Reset Max_r 'disattiva il carico x 1121
' step 7
Locate 2 , 1
Lcd " Test #7 "
'Waitms 10500 'aspetta 10,5 sec
Gosub Apertura3141 'apre3141 a vuoto
Count = Count + 1 'incrementa contatore
Reset Cnt 'incremento il contatore esterno
Waitms 10
Set Cnt
'Lcd "conteggio" ; Count
If Count > 150000 Then Goto Fine_test
Goto Inizio
End 'end program
Apertura3141: 'con conseguente CHIUSURA 1121
Locate 1 , 1
Lcd " TEST lato R "
Set Coil_r 'eccita la bobina "R"
Wait 1 'alimenta la bobina PER 1s
'If Ok_r = 0 Then Goto Fine_loop 'test se scambio avvenuto: 0=non avvenuto ->ALARM!!
'If Ok_n = 1 Then Goto Fine_loop 'test se scambio avvenuto: 1=non avvenuto ->ALARM!!
Reset Coil_r 'spegne la bobina "R"
Return
Chiusura3141: 'con conseguente APERTURA 1121
Locate 1 , 1
Lcd " TEST lato N "
Set Coil_n 'eccita la bobina n
Wait 1 'alimenta la bobina "N" per 1s
'If Ok_r = 1 Then Goto Fine_loop 'test se scambio avvenuto: 1=non avvenuto ->ALARM!!
'If Ok_n = 0 Then Goto Fine_loop 'test se scambio avvenuto: 0=non avvenuto ->ALARM!!
Reset Coil_n 'spegne la bobina "N"
Return
Fine_loop:
Cls:
Lcd "*** ALLARME! ***"
Lcd "CONTATTO APERTO!"
Wait 10
Goto Fine_loop
Fine_test:
Locate 1 , 1
Lcd "Fine Test:>>OK<<"
Locate 2 , 1
Lcd "START:RICOMINCIA"
If Star_t = 0 Then Waitms 20 'debounce
If Star_t = 0 Then Key = 1 'key=1 inizio/continua test
If Star_t = 0 Then Goto Comincia
Goto Fine_test
Pausa:
Locate 1 , 1
Lcd "START: per Cont."
Locate 2 , 1
Lcd "STOP: Fine Ciclo"
If Star_t = 0 Then Waitms 20 'debounce
If Star_t = 0 Then Key = 1 'key=1 continua test
If Star_t = 0 Then Goto Inizio
If Sto_p = 0 Then Waitms 20 'debounce
If Sto_p = 0 Then Key = 3 'key=3 fine test test
If Sto_p = 0 Then Goto Fine_test
If Bypass = 0 Then Waitms 20 'debounce
If Bypass = 0 Then Key = 4 'key=4 al galoppo e poi torna qui
If Bypass = 0 Then Gosub Galoppo
Goto Pausa
Galoppo: 'routine per incrementare velocemente in contatore esterno
Cls
Lcd " "
Freerun:
Count = Count + 1
Reset Cnt 'incremento il contatore esterno
Waitms 10
Set Cnt
Locate 2 , 1
If Bypass = 0 Then Goto Freerun
Return
End
Users browsing this forum: No registered users and 16 guests