Witam
Pobawiłem się trochę pomiarem temperatury i napięcia zasilania przy pomocy wbudowanych możliwości procesorka ATtiny25 (oraz reszty tej serii 45, 85).
Dla prób napisałem małe programiki w Bascomie
których zadaniem jest odczyt i "wymrugiwanie" wartości.
Oto przykład pomiaru napięcia.
W związku z tym, że mamy do czynienia z 10-bitowym ADC wzór na napięcie zasilania przyjmuje postać:
Vcc = Vref * 1023/Vadc
Vadc - napięcie otrzymane z przetwornika.
W związku z tym, że Vref jest znane i stałe (no powiedzmy... w moim przypadku Vref = 1,12V) otrzymujemy stałą
1,1 * 1023
Aby pozbyć się przecinka..
11 * 1023 = 11253.
tak więc:
10*Vcc = 11253 / Vadc
Wtedy otrzymujemy wartość napięcia zasilania * 10, czyli 5,0V ma postać 50, co jest bardziej przyjazne do dalszych obliczeń i porównań.
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte
Dim U1 As Word
Dim U As Word
Config Portb.0 = Output 'setki
Config Portb.1 = Output 'dziesiątki
Config Portb.2 = Output 'jedności
Config Portb.3 = Input
Config Portb.4 = Input
Config Adc = Single , Prescaler = 8 , Reference = Avcc
Do
U1 = Getadc(12)
U1 = 11372 / U1
U = U1
U = U / 10
U = U * 10
A = U1 - U
U1 = U1 / 10
B = U1 Mod 10
U1 = U1 / 10
C = U1 Mod 10
E = 0
For D = 1 To C
Gosub Mryg
Next D
Waitms 200
E = 1
For D = 1 To B
Gosub Mryg
Next D
Waitms 200
E = 2
For D = 1 To A
Gosub Mryg
Next D
Waitms 500
Loop
Mryg:
Set Portb.e
Waitms 60
Reset Portb.e
Waitms 60
Return
End
Jeśli chodzi o pomiar temperatury, to tutaj według noty katalogowej wartość ADC 300 odpowiada temperaturze 25°C. Niestety odchyłka bywa spora, ale do użycia tego jako zabezpieczenie termiczne, jest aż nadto wystarczające.
Taki oto krótki programik, umożliwia prosty odczyt zmierzonej wartości odpowiadającej aktualnej temperaturze procesora.
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte
Dim U1 As Word
Dim U As Word
Config Portb.0 = Output 'setki
Config Portb.1 = Output 'dziesiątki
Config Portb.2 = Output 'jedności
Config Adc = Single , Prescaler = 8 , Reference = Internal_1.1
Do
U1 = Getadc(15)
U = U1
U = U / 10
U = U * 10
A = U1 - U
U1 = U1 / 10
B = U1 Mod 10
U1 = U1 / 10
C = U1 Mod 10
E = 0
For D = 1 To C
Gosub Mryg
Next D
Waitms 200
E = 1
For D = 1 To B
Gosub Mryg
Next D
Waitms 200
E = 2
For D = 1 To A
Gosub Mryg
Next D
Waitms 500
Loop
Mryg:
Set Portb.e
Waitms 60
Reset Portb.e
Waitms 60
Return
End
Zmieniając parametr "
e" na numer konkretnego portu we fragmencie:
Mryg:
Set Portb.
e
Waitms 60
Reset Portb.
e
Waitms 60
Return
Otrzymamy możliwość błyskania jednym LEDem w sekwencji setki, przerwa, dziesiątki, przerwa, jedności.
Pozdrawiam