Problem z pomiarem napięcia przy zasilaniu +3,3V

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Problem z pomiarem napięcia przy zasilaniu +3,3V

Post autor: Michał6201 » 02 maja 2020, 22:29

Witam Wszystkich

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.
adc.png
A tutaj kod:
  1. $regfile = "m88pdef.dat"
  2. $crystal = 8000000
  3.  
  4. ' Konfiguracja LCD 2X16
  5.     Config Lcdpin = Pin , E = PortB.0 , Rs = PortB.1 , Db7 = PortB.2 , Db6 = PortB.3 , Db5 = PortB.4 , Db4 = Port B.5
  6.     Config Lcd = 16x2
  7.       Cursor Off
  8.     Cls
  9.  
  10. ' ZMIENNE POMIARU NAPIĘCIA VCC
  11. Config Adc = Single , Prescaler = Auto , Reference = avcc       'konfiguracja wewnetrznego przetwornika ADC
  12. Start Adc           'uruchomienie przetwornika ADC
  13.  
  14. ' Zminne pomiaru napięcia
  15. Dim Wa As Word
  16. Dim Vv As Single
  17. Dim Wr As String * 4
  18. Dim Pa As Single
  19. Dim Ra As Single
  20.  
  21.  
  22.  Do
  23.  
  24. Wa = Getadc(0)
  25. Vv = Wa * 0.025
  26. Ra = Vv
  27. Wr = Fusing(ra , "##.&")
  28.  
  29. ' POMIAR NAPIECIA VCC
  30. Pa = 1.4 ' Korekta wskazania
  31. Wa = Getadc(0)
  32. Vv = Wa * 0.025
  33. Ra = Vv + Pa
  34. Wr = Fusing(ra , "##.&")
  35.  
  36. Locate 2 , 1
  37. Lcd "U=" ; Wr ; " Volt "
  38.  
  39. Loop
  40. End
Już naprawiłem problem :)
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ł:
  1. $regfile = "m8adef.dat"
  2. $crystal = 8000000
  3.  
  4. ' Konfiguracja LCD 2X16
  5.     Config Lcdpin = Pin , E = PortD.0 , Rs = PortD.1 , Db7 = PortD.2 , Db6 = PortD.3 , Db5 = PortD.4 , Db4 = PortD.5
  6.     Config Lcd = 16x2
  7.       Cursor Off
  8.     Cls
  9.  
  10. ' Konfiguracja ADC
  11. Config Adc = Single , Prescaler = Auto , Reference = internal       'konfiguracja wewnętrznego przetwornika ADC
  12. Start Adc           'uruchomienie przetwornika ADC
  13.  
  14. ' Zminne pomiaru napięcia
  15. Dim Wa As Word
  16. Dim Vcc As Single
  17. Dim V As Single
  18. Dim Wart As String * 4
  19.  
  20.  Do
  21.  
  22. Wa = Getadc(0)    ' Pobranie wartość ADC0
  23. V = Wa * 0.002441 ' Wartość ADC0 * (Vref/1024)
  24. 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.
  25. Wart = Fusing(vcc , "##.&&") ' Zaokrąglenie wyniku mierzonego napięcia
  26.  
  27. Locate 2 , 1
  28. Lcd "U=" ; Wart ; " Volt " ' Wyświetlenie wartości napięcia na LCD
  29.  
  30. Loop
  31. End
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Problem z pomiarem napięcia przy zasilaniu +3,3V

Post autor: niveasoft » 03 maja 2020, 9:57

No innej rady nie ma. Trzeba użyć wewnętrznego napięcia odniesienia.
  1. Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
Przy Twoich rezystorach to przy 5V na wyjściu będzie coś około 0.88V a przy 3V3 na wyjściu będzie 0.58V
Czyli Atmega powinna "widzieć" coś w granicach 818 dla 5V a 539 dla 3V3 i przeliczanie na Volty niepotrzebne jeśli chcesz tylko info czy to 5V czy 3V3.
ODPOWIEDZ