logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 i LCD - Błędny odczyt temperatury 4095°C, jak naprawić?

Chester11-86 31 Mar 2013 19:38 3063 25
  • #1 12137015
    Chester11-86
    Poziom 16  
    Witam wszystkich forumowiczów.

    Mam problem ponieważ napisałem sobie program do pomiaru temperatury na Atmega8 z wyświetlaniem na LCD. Taktowanie procka to 8MHz wewnętrznym oscylatorem.
    Proszę o pomoc bo nie mam pojęcia już jak to ugryźć - wyświetla temperaturę 4095 C.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #2 12137560
    paluch_gda
    Poziom 16  
    a nie mnożysz tego za mocno?

    T = Msb * 256 (ja mam *10)
    T = T + Lsb
    T = T / 16

    czy jak dotykasz DS to temp. się zmienia?
  • #3 12137602
    Chester11-86
    Poziom 16  
    Jak dotykam nic się nie zmienia.
    W symulatorze bascom jest wszystko ok :)
    Jak przemnożę to przez 10 to wyświetla mi temperaturę 143 stopni.
  • #4 12137671
    paluch_gda
    Poziom 16  
    Tutaj masz działający kod do termometru. Na 2 DSy ale sobie przerobisz :) Wytnij tylko deklaracje zmiennych od napięcia i ADC bo oryginalnie mierzył jeszcze napięcie.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 12137927
    Chester11-86
    Poziom 16  
    I tak się stało :) Dzięki Kaktus :)
  • #8 12141596
    Konto nie istnieje
    Poziom 1  
  • #10 12142555
    Konto nie istnieje
    Poziom 1  
  • #11 12144899
    Chester11-86
    Poziom 16  
    Niestety ten program nie działa :( :( :( Wymieniłem na innego ds'a i te same zachowanie temperatura wynosi 4095 C. Proszę o pomoc.
    Programuję Atmegę8A-PU i nie działa mi ten prosty program.
  • #13 12145364
    Chester11-86
    Poziom 16  
    Pull-up to 4,7 kohm
  • #14 12145671
    _kaktus_
    Poziom 13  
    Wiesz co, tak się zastanawiam, czy czasem głowy nie stracisz, bo wczoraj głową ręczyłeś za jeden fakt.
    Spróbuj środowiskiem BascomAVR skompilować i zaprogramować uC tym listingiem który podesłałem. Wyróżniają go dyrektywy dla programującego oprogramowania.

    kaktus
  • #15 12152301
    Chester11-86
    Poziom 16  
    Witam

    Mam mały problem ponieważ nie mogę dogadać się z histerezą. Według mnie jeżeli temperatura T jest powyżej ustawionej "liczba" to powinien się zmienić port uC ale zmienia się od razu po włączeniu programu :( gdzie popełniłem błąd? Histereza wynosi 5 stopni.
    Kod poniżej:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #16 12155299
    Konto nie istnieje
    Poziom 1  
  • #18 12157063
    Chester11-86
    Poziom 16  
    Kolego emarcus bardzo dziękuję za tak obszerne wytłumaczenie problemu ale szczerze mówiąc nic z tego nie rozumiem :( jak bym mógł prosić o wytłumaczenie troszkę łopatologicznie lub na jakimś przykładzie?
    Jeszcze raz powiem o co mi chodzi: problem mam taki że gdy ustawię temperaturę według nastawy "liczba" program nie porównuję się do mojego ustawienia. Jeżeli natomiast gdy na początku wprowadzę jakąś wartość to wtedy wszystko działa.
    Na jakie komendy mam zwrócić uwagę i poszerzyć swoje wiadomości aby rozwiązać swój problem?

    Co do temperatury to jest dobrze mierzona i już nie mam z tym problemów z pomocą kolegi kaktusa.
  • #19 12157273
    Konto nie istnieje
    Poziom 1  
  • #20 12157341
    Chester11-86
    Poziom 16  
    Witam

    Z temperaturą jest kolejny problem, poniewaz teraz program który mam wgrany do procka dobrze wskazuję temperaturę ale w symulacji przy "0,5C" pozkazuje na wyświetlaczu 128C.
    Natomiast jeżeli program dobrze wskazuje temperaturę na symulacji to nie działa w rzeczywistości :(

    Dodatkowo chciałem zapytać czy mierzona temperatura w ten sposób jest w stanie pokozać temperatury powyżej 100C??

    Z góry dziękuję za odpowiedź.

    Pozdrawiam
  • #21 12165535
    Milek79
    Poziom 15  
    emarcus napisał:
    Dlatego że ktoś inny zechce wykorzystac fragment tego programu i napotka problemy, które trudno mu będzie zlokalizowac. Sam fakt że tu stosuje się tylko pomiar temperatur dodatnich nie usprawiedliwia 'ułomności' tego rozwiązania.
    Poniższa symulacja jest odpowiedzią:
    Dla przykładowo wprowadzonych wartości Lsb i Msb odpowiadających temperaturze -10.125 w wyniku obliczeń programu spodziewana temperatura winna byc "-10.1 °C" a otrzymano jak na obrazku.!!!
    Tak, ale dotyczy to juz dalszych obliczen, a my rozmawiamy nad poprawnością dwóch linijek odczytujących wartości LSB i MSB
  • #22 12166222
    Konto nie istnieje
    Poziom 1  
  • #23 12182958
    MarcinK.
    Poziom 11  
    Witam.
    Mam prośbę dotyczącą fragmentu kodu:

    T = Msb * 256
    T = T + Lsb
    T = T / 16

    Czy ktoś mógłby mi dokładnie wyjaśnić skąd wzięły się wartości: Msb *256 oraz T/16 ?
    W obliczeniach wszystko fajnie wychodzi jednak nie rozumiem skąd się to wzięło.
  • #24 12183734
    _kaktus_
    Poziom 13  
    Już odpowiadam

    ano
    T = Msb * 256
    T = T + Lsb 

    to jest tylko zapisanie dwóch słów ośmiobitowych w jednym szesnastobitowym
    czyli precyzyjnie zawartość MSB ląduje w pozycjach bitów bardziej znaczących (bity od 8 do15), a LSM w pozycjach mniej znaczących (bity od 0 do7)
    mnożenie przez 256 jest równoznaczne z przesunięciem bitów w lewo o osiem pozycji.
    Natomiast
    T = T / 16 

    wynika z noty katalogowej - wartość skonwertowanej temperatury pomnożona jest przez 16 w DS, i dlatego sobie to dzielimy teraz,
    odpowiednikiem dzielenia przez 16 jest przesunięcie w prawo o cztery bity.

    W określonych warunkach przesunięcia bitów są bardziej "owocne" dla programisty, ze względu na szybkość wykonania przez µC, i ilość generowanego kodu przez kompilator Bascom.

    Ten krótki kawałek kodu można zmienić przy odczycie DS-a do jednej zmiennej szesnastobitowej.
  • #25 12186047
    MarcinK.
    Poziom 11  
    Dziękuję bardzo za odpowiedź chodź przyznam, że nadal nie jest to dla mnie do końca jasne.
    Nie pasuje mi to matematycznie. Skoro dzielenie przez 16 to przesunięcie w prawo o 4 pozycje więc wypada jakby 4 na jedną pozycję. Więc dlaczego przy przesunięciu w lewo wartość jest aż tak znacząco różna ?
  • #26 12187636
    Konto nie istnieje
    Poziom 1  
REKLAMA