Premetto che non ho mai programmato prima d'ora, ma ho scoperto l'esistenza di una famiglia di PIC, chiamati PICAXE http://www.picaxe.com/ che sono pic forniti preprogrammati con un'interprete basic a bordo, non hanno bisogno di un programmatore, li potete infilare nella bredboard e collegarli direttamente alla porta seriale del PC con 3 fili e buttarci dentro il vostro listato basic che inizieranno ad eseguire non appena finita la programmazione, la semplicita' nellp scrivere programmi funzionanti e' davvero disarmante anche per chi non ha mai programmato.
Quindi mostro la mia prima realizzazione: a natale ho comprato un DAC AB12 che da solo pero' risulta debole per pilotare un finale duro e puro, voglio quindi preamplificarlo con uno stadio valvolare e volevo che l'apparecchio non avesse l'interrutore ma si accendesse da solo assieme al PC, che avesse un sistema antipumb che evitasse crack e rumori vari in cassa quando lo accendi e lo spegni, fare delle logiche cablate diventare una palla, quindi ho realizzato questo circuito:
Questo e' il listato del programma:
Codice: Seleziona tutto
#no_data
symbol rete230rele = C.0 ;pin7 pilota rele' mainpower
symbol mutorele = C.1 ;pin6 pilota rele' del muto
symbol powerled = C.2 ;pin5 pilota il led della spia
symbol usbmon = PIN3 ;pin4 sensore sulla porta usb
symbol anodicamon = PIN4 ;pin3 sensore della presenza di corrente anodica
spento: ;stato iniziale, attende che si accenda la USB (ascolta il pin 4)
low rete230rele
low mutorele
pwmout powerled, 99, 0
if usbmon = 0 then : goto spento
endif
wait 10 ;tempo che la usb deve rimanere accesa per validare l'accensione del DAC
if usbmon = 0 then : goto spento
endif
inizio: ;inizia la pulsazione del led collegato al pin 5
high rete230rele ;accende il rele' principale sulla 230
for b1 = 1 to 25 ;numero cicli pulsazioni, 1 pulsazione = 1 secondo di ritardo
pwmout powerled, 99, 20
pause 50
pwmout powerled, 99, 40
pause 50
pwmout powerled, 99, 80
pause 50
pwmout powerled, 99, 120
pause 50
pwmout powerled, 99, 160
pause 50
pwmout powerled, 99, 200
pause 50
pwmout powerled, 99, 240
pause 50
pwmout powerled, 99, 280
pause 50
pwmout powerled, 99, 320
pause 50
pwmout powerled, 99, 360
pause 50
pwmout powerled, 99, 400
pause 50
pwmout powerled, 99, 360
pause 50
pwmout powerled, 99, 320
pause 50
pwmout powerled, 99, 280
pause 50
pwmout powerled, 99, 240
pause 50
pwmout powerled, 99, 200
pause 50
pwmout powerled, 99, 160
pause 50
pwmout powerled, 99, 120
pause 50
pwmout powerled, 99, 80
pause 50
pwmout powerled, 99, 40
pause 50
pwmout powerled, 99, 20
inc b2
next b1
high mutorele ;accende il pin 6 dell'IC rele' antipumb
if anodicamon = 0 then : pause 500 ;controlla che passi corrente sulle valvole con un ritardo di mezzo secondo (ascolta pin 3)
endif
if anodicamon = 0 then : goto errore
endif
pwmout powerled, 99, 40
pause 50
pwmout powerled, 99, 80
pause 50
pwmout powerled, 99, 120
pause 50
pwmout powerled, 99, 160
pause 50
pwmout powerled, 99, 200
pause 50
pwmout powerled, 99, 240
pause 50
pwmout powerled, 99, 280
pause 50
pwmout powerled, 99, 320
pause 50
pwmout powerled, 99, 360
pause 50
pwmout powerled, 99, 400
sorveglia:
if usbmon = 0 then : goto verifica_usb ;controlla lo stato della porta USB (ascolta pin 4)
endif
if anodicamon = 0 then : pause 500
endif
if anodicamon = 1 then : goto sorveglia
endif
pause 500
if anodicamon = 0 then : pause 500
endif
if anodicamon = 1 then : goto sorveglia
endif
pause 500
if anodicamon = 0 then : goto errore
goto sorveglia
endif
errore: ;procedura in caso di mancada corrente anodica
low mutorele
low rete230rele
errore2:
pwmout powerled, 99, 0
pause 250
pwmout powerled, 99, 400
pause 250
if usbmon = 0 then : goto spento
endif
goto errore2
verifica_usb:
wait 5
if usbmon = 0 then : goto spento
endif
goto sorveglia