Zasilam Atmegę 88 z taktowaniem wewnętrznym 8MHz napięciem +5V lub +3,3V
Dokonuję pomiaru napięcia zasilania przetwornikiem ADC. Konfiguracja ADC, to Config ADC = Single, Prescaler = Auto, Reference = AVCC. Próbowałem też z wewnętrznym źródłem napięcia odniesienia Intenal, ale nic to nie zmieniało.
A chciałem tylko zmierzyć czy jest 5V, a czy 3,3V.
Póki układ zasilany jest +5V,to pomiar jest prawidłowy, natomiast jeśli zasilanie to +3,3V, to wynik na wyświetlaczu jest 5V. Ale skąd? Skoro nie ma tam innego napięcia niż +3,3V?
Dzielnik napięcia zrobiłem z rezystorów 10K i 47,5K. Gdzie 10K podciągnięte do masy, a 47,5K podciągnięte do napięcia mierzonego.
Proszę Was o pomoc. Gdzie jest problem?
W załączeniu poglądowy schemat podłączenia dzielnika do ADC. A tutaj kod:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m88pdef.dat"
- $crystal = 8000000
- ' Konfiguracja LCD 2X16
- Config Lcdpin = Pin , E = PortB.0 , Rs = PortB.1 , Db7 = PortB.2 , Db6 = PortB.3 , Db5 = PortB.4 , Db4 = Port B.5
- Config Lcd = 16x2
- Cursor Off
- Cls
- ' ZMIENNE POMIARU NAPIĘCIA VCC
- Config Adc = Single , Prescaler = Auto , Reference = avcc 'konfiguracja wewnetrznego przetwornika ADC
- Start Adc 'uruchomienie przetwornika ADC
- ' Zminne pomiaru napięcia
- Dim Wa As Word
- Dim Vv As Single
- Dim Wr As String * 4
- Dim Pa As Single
- Dim Ra As Single
- Do
- Wa = Getadc(0)
- Vv = Wa * 0.025
- Ra = Vv
- Wr = Fusing(ra , "##.&")
- ' POMIAR NAPIECIA VCC
- Pa = 1.4 ' Korekta wskazania
- Wa = Getadc(0)
- Vv = Wa * 0.025
- Ra = Vv + Pa
- Wr = Fusing(ra , "##.&")
- Locate 2 , 1
- Lcd "U=" ; Wr ; " Volt "
- Loop
- End
1. Koniecznie napięcie odniesienia musi być ustawione na wewnętrzne.
2. Błędnie napisany kod, a dokładnie część odpowiedzialna za pomiar napięcia.
Poniżej podaję działający kod do pomiaru napięcia, gdyby ktoś potrzebował:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m8adef.dat"
- $crystal = 8000000
- ' Konfiguracja LCD 2X16
- Config Lcdpin = Pin , E = PortD.0 , Rs = PortD.1 , Db7 = PortD.2 , Db6 = PortD.3 , Db5 = PortD.4 , Db4 = PortD.5
- Config Lcd = 16x2
- Cursor Off
- Cls
- ' Konfiguracja ADC
- Config Adc = Single , Prescaler = Auto , Reference = internal 'konfiguracja wewnętrznego przetwornika ADC
- Start Adc 'uruchomienie przetwornika ADC
- ' Zminne pomiaru napięcia
- Dim Wa As Word
- Dim Vcc As Single
- Dim V As Single
- Dim Wart As String * 4
- Do
- Wa = Getadc(0) ' Pobranie wartość ADC0
- V = Wa * 0.002441 ' Wartość ADC0 * (Vref/1024)
- Vcc = V * 5.75 ' Zmierzone napięcie = V * współczynnik K; Gdzie współczynnik K = (R1+R2)/R2; R1,R2 to wartości rezystorów w dzielniku.
- Wart = Fusing(vcc , "##.&&") ' Zaokrąglenie wyniku mierzonego napięcia
- Locate 2 , 1
- Lcd "U=" ; Wart ; " Volt " ' Wyświetlenie wartości napięcia na LCD
- Loop
- End