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

Atmega8 - Błąd w kodzie, lub podłączeniu, potrzebna rada.

Lesiomariu 10 Paź 2014 20:13 954 6
REKLAMA
  • #1 14031321
    Lesiomariu
    Poziom 9  
    Posty: 37
    Ocena: 3
    Witam, w ramach nauki programowania uC, znalazłem kod pozwalający na wyświetlanie temperatury z DS18B20, na wyświetlaczu 1602A. Jako że na samym przeklejeniu kodu pewnie zbyt wiele bym się nie nauczył, użyłem nieco innego termometru(dokładność nie 0,1, a 0,5*C), zmieniłem układ w jakim ma się wszystko wyświetlać, zastąpiłem float przez int zmieniane na str, oraz dodałem instrukcję warunkową if mającą w zamiarze w zależności od temperatury wyświetlać "HOT" lub "LOW" , a także gasić/zapalać diodę.

    Próbowałem podłączać leda na wszystkie możliwe sposoby...
    -Anoda do masy, katoda do PB0.
    -Anoda do +5, katoda do PB0 - jedyna sytuacja gdy się zapaliła.
    -Katoda do masy, anoda do PB0.
    -Katoda do +5, anoda do PB0.

    Problem tkwi w tym że dioda świeci się niezależnie od wskazań temperatury. Równie dobrze mogą ją wetknąć np. do nieużywanej PD7...

    Poniżej podaję kod, pliki ds18b20.c, hd44780.c, ds18b20.h, hd44780.h,

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/code]
  • REKLAMA
  • Pomocny post
    #2 14031349
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Czemu masz ifa w ifie.
  • REKLAMA
  • #3 14031371
    Lesiomariu
    Poziom 9  
    Posty: 37
    Ocena: 3
    W moim wyobrażeniu ma to działać następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wcześniej wartoś pierwszego IF była 240, a drugie 270, lecz do czasu wyjaśnienia dlaczego LED się nie świeci jakbym tego oczekiwał, ustawiłem i tu i tu 265.
  • REKLAMA
  • Pomocny post
    #4 14031406
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    { PORTB |= _BV(1); } Nigdy sie nie wykona. sformatuj kod( wciecia,klamry) to bedziesz widział dlaczego( pierwszy if juz jest >256).
  • REKLAMA
  • #5 14031443
    Lesiomariu
    Poziom 9  
    Posty: 37
    Ocena: 3
    Zmieniłem kod tak by nie było if, w if.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    LOW i HOT bez problemu się zmienia. Dioda się świeci ciągle, lub wcale w zależności od tego jak ją podłącze. Nie reaguje na PB0.
  • Pomocny post
    #6 14031488
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Niewiem co to BV ale czemu raz jest (0) a raz (1)?
  • #7 14031549
    Lesiomariu
    Poziom 9  
    Posty: 37
    Ocena: 3
    To był właśnie problem... Gdy dałem dwa razy (0), wszystko zaczeło działać. Nie wiem czemu popełniłem tak oczywisty błąd, może dlatego że napisałem kod 2 tyg temu i czekałem na programator, tak czy siak bardzo dziękuję witoldwitoldowicz.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik pracuje nad projektem z wykorzystaniem mikrokontrolera Atmega8, w którym implementuje odczyt temperatury z czujnika DS18B20 i wyświetlanie danych na wyświetlaczu LCD 1602A. Napotkał problem z działaniem diody LED, która świeci się niezależnie od wskazań temperatury. Po kilku próbach podłączenia diody i modyfikacji kodu, w tym usunięciu zagnieżdżonych instrukcji warunkowych, udało się poprawić wyświetlanie komunikatów "HOT" i "LOW". Ostatecznie problem z diodą został rozwiązany poprzez poprawienie błędu w kodzie, gdzie użycie niewłaściwych numerów portów powodowało, że dioda nie reagowała zgodnie z oczekiwaniami.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA