Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2026, o 10:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 1 lut 2015, o 11:53 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 05 sty 2015
Posty: 10
Pomógł: 0

Witam!
Postanowiłem zrobić miernik temperatury na lm35.
Program napisany dla ATmega328P, i wszystko działa dobrze za wyjątkiem tego, że nie mogę ustawić dobrego napięcia odniesienia, czyli 1,1V, aby mieć większą rozdzielczość.
Obrazek
Jak widać na rysunku z noty katalogowej, aby uzyskać 1,1V na AREF trzeba ustawić oba te rejestry.
Robiąc to uzyskuję na AREF równe AVCC (sprawdzałem i jestem pewien na 100%, że na pcb nie ma połączenia między tym pinami)
Patrząc na wszystkie możliwości wychodzi na to, że rejestr nie reaguje na ustawianie REFS1, bo czy jest ustawiony czy nie, to mam tylko 2 możliwości :
1 i 3 linijka - wyłączyć napięcie odniesienia
2 i 4 linijka - włączyć avcc na aref

main:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


d_led.h :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


d_led.c :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Przy tym kodzie jak widać mam ustawione oba rejestry a mimi to na aref mam 5v czyli avcc.
Wie ktoś o co tu chodzi?

------------------------ [ Dodano po: 15 minutach ]

Na razie mam dokładność co 0,5*C.
A z tym, że wartość adc wzrasta co 0,48828125mV poradziłem sobie tak, że gdy adc większe od 50 to od adc zabieram 1 i dopiero mnożę przez 5.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jest dokładnie ale do 50*C bo potem znowu podskoczy adc o jeden za dużo, ale mniejsza z tym :)
I tak taka dokładność mnie nie zadowala, bo co 0,5*C przez to AREF...



Ostatnio edytowano 1 lut 2015, o 17:18 przez Piter3132, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2015, o 14:51 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 05 sty 2015
Posty: 10
Pomógł: 0

Spotkał się ktoś już z takim problemem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2015, o 14:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

Piter3132 napisał(a):
Jak widać na rysunku z noty katalogowej, aby uzyskać 1,1V na AREF trzeba ustawić oba te rejestry.


taka może mała literówka chodzi o oba bity w rejestrze, ale ... ok zapewniam cię że to zawsze dobrze działa, nie jeden raz korzystałem w tym procku z ADC.

Mówisz, że nie masz zwarcia pinu AREF z VCC .... rozumiem, że sprawdzałeś to brzęczykiem przy wyłączonym układzie ? tak na wszelki wypadek ?

w programie w main daj po inicjalizacji ADC pułapkę (żeby wyeliminować błąd że ci się np gdzieś procek nie wykrzacza w programie, że gdzieś nie zmieniasz wartości tych bitów)

Init_ADC(); // inicjalizacja przetwornika ADC
while(1);

i wtedy sprawdź miernikiem napięcie na AREF ... musi być 1,1V

jeśli w tym momencie nie ma - to nie ma co tam sprawdzać dalej programu .... szukaj błędu wtedy w sprzęcie nie ma wyjścia

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2015, o 15:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

LM35 ma dokładność 0.5°C. Zobacz w nocie katalogowej. http://www.ti.com/lit/ds/symlink/lm35.pdf
0.5°C Ensured Accuracy (at +25°C)

Więc to chyba nie wina ADC w Atmega328p tylko samego LM'a.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2015, o 17:09 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 05 sty 2015
Posty: 10
Pomógł: 0

Dziękuję panie Mirku ;)
Faktycznie mam teraz 1,1V i to nawet dokładny egzemplarz mi się udał, bo równo 1,100V :D
W związku z literówką, to taki niezauważony błąd w pisaniu :)
Lecz nie rozumiem dlaczego w kodzie z początku tematu dzieją się takie cuda.

------------------------ [ Dodano po: 17 minutach ]

Przy pomiarze te bity są maskowane, wiec to raczej nie tu jest błąd.

------------------------ [ Dodano po: 20 minutach ]

Mam! Znalazłem babola!
Nie zapisałem przy tym maskowaniu 0b i kompilator nie wiedział, że to binarny kod.
Zmieniało mi bity w rejestrze odpowiedzialne za ustawianie napięcia odniesienia.
Człowiek się uczy całe życie :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO