Se le righe risultassero ancora spezzate, converrebbe ridurre la percentuale di zoom (CTRL-)
- Codice: Seleziona tutto
'pin1=-reset pin2=PortB3,led infrarosso
'pin3=ADC2 segnale fototransistor Pin4=Gnd
'pin5=PortB0,Mosi,LedRosso pin6=PortB1,MISO,ledVerde
'pin7=clock programmatore pin8=5Volt
$crystal = 16000000 '16mhz Attiny45,Fusebit:Sut_cksel=Pll,Ckdiv8 Off
'Clkpr = &B10000000 'sblocco prescaler clock
'Clkpr = &B00000000 'no prescaler clock
Ddrb = &B00001011 'out B0pin5 rosso,B1pin6 verde,B3pin2 infrarosso
Admux = &B00000010 'Vref=Vdd, ADC2 pin3
Adcsra = &B11101111 'enable start auto interrupt prescale128
Didr0 = &B00111111 'ADC0,1,2,3 AIN0,1 disabled as digital input
On Adc Leggi 'interrupt ogni 113 microsec
Rosso Alias Portb.0 : Verde Alias Portb.1 'uscite digitali led
Emit Alias Portb.3 'e led infrarosso
Dim Lmis As Word At $60 : Dim Hmis As Byte At $61 Overlay 'byte L,H ADC
Dim Aux As Integer : Dim Sig As Word : Dim Stato As Word
Dim Lp As Integer : Dim Lett As Integer
Enable Interrupts
Inizio: 'il main program
If Sig < 1 Then 'utilizza i led per segnalare l'entità
Verde = 0 : Rosso = 0 'degli infrarossi riflessi dall'ostacolo
End If
If Sig >= 1 And Sig < 10 Then
Verde = 1 : Rosso = 0
End If
If Sig >= 10 And Sig < 60 Then
Verde = 0 : Rosso = 1
End If
If Sig >= 60 Then
Verde = 1 : Rosso = 1
End If
Goto Inizio
Stop
Leggi: 'ISR dello ADC ogni 113 microsec
Lmis = Adcl : Hmis = Adch 'byte Low,High da registri conversione
Shift Lmis , Left , 4 'amplifica e consente successivi troncamenti
Lett = Lett + Lmis 'prefiltraggio cioè
Shift Lett , Right , 1 'semplice media con lettura precedente
If Stato = 3 Then 'al quarto interrupt cioè dopo 452 microsec
Emit = 1 'mette ON il led infrarosso
Aux = Lett - Lp 'segnale analogico attuale meno precedente
Lp = Lett 'salva segnale attuale per successiva sottrazione
End If
If Stato = 7 Then 'ottavo interrupt cioè dopo altri 452 microsec
Emit = 0 'mette OFF il led infrarosso
Aux = Lp - Lett 'segnale analogico precedente meno attuale
Lp = Lett 'salva segnale attuale per successiva sottrazione
End If
Stato = Stato + 1 'conta gli interrupt
If Stato = 8 Then Stato = 0 'ogni 8 ripete il ciclo cioè circa 1100 hertz
If Aux < 0 Then 'se il segnale è strano
Aux = 0 'lo azzeriamo
Sig = 0 'e azzeriamo anche il filtro
End If
Sig = Sig * 15 'filtraggio: 15 volte il valore già filtrato
Sig = Sig + Aux 'più il valore attuale da filtrare
Shift Sig , Right , 4 'quindi dividiamo per 16
Return

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



