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

[ATtiny44] Jak zaimplementować termostat do wytrawiarki z ATtiny44 i czujnikiem LM35?

12 Sie 2011 17:56 2997 17
REKLAMA
  • #1 9818680
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #2 9818732
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Tak na szybko:

    1. Brak deklaracji zmiennych cy1 i cy2.
    2. Co ma robić to:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    3. Dla porządku: Czemu włączasz przerwania skoro nie masz żadnej funkcji ich obsługi?
  • REKLAMA
  • #3 9818771
    snnaap
    Poziom 25  
    Posty: 677
    Pomógł: 83
    Ocena: 10
    Pokaż co masz w #include "d_led.h" // dołączenie pliku nagłówkowego (obsługa LED)

    To wtedy zobaczy się co jest nie tak.

    dondu napisał:
    Brak deklaracji zmiennych cy1 i cy2.
    zdaje mi się że deklaracje tych zmiennych są w pliku d_led.h
  • REKLAMA
  • #5 9819841
    Konto nie istnieje
    Poziom 1  
  • #7 9820442
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    1. Schemat by się przydał, aby zweryfikować działanie programu.
    2. Obsługa przerwania jest dość nieoptymalna tak na pierwszy rzut oka.
  • #8 9821301
    Konto nie istnieje
    Poziom 1  
  • #9 9821424
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    1. Bezpośrednie popędzanie wyświetlacza 7seg. LED z I/O µC nie jest dlań zdrowe... Zamienione kolektor z emiterem na wspólnych anodach są tylko na schemacie nieprawidłowo ?
    2. Daj 1k w szereg z wyjściem czujnika.
    3. Nie lepiej użyć przerwania od ADC ?
    4. Po czym wnosisz że stan PA0 jest wysoki ? Czujnik włóż do dobrej lodówki,... Dlaczego ? Hint - napięcie odniesienia to maksimum...
    5. Czujnik temperatury masz wbudowany (ADC8)... ;)
  • #10 9821478
    snnaap
    Poziom 25  
    Posty: 677
    Pomógł: 83
    Ocena: 10
    LordBlick napisał:
    5. Czujnik temperatury masz wbudowany (ADC8)... Wink
    - to jest termostat do wytrawiarki tak więc nie wiem czy ta propozycja przyda się autorowi tematu ;)

    Dodano po 15 [minuty]:

    Czy przypadkiem - PORTA = pgm_read_byte( &cyfry[cy2] ) - nie ustawia PORTA.0 na 1 - sprawdź to bo zdaje mi się, że tak właśnie jest - przy ustawianie jej jako wejście wpisanie na PORTA.0 1 powoduje podciągnięcie linii PA0 do plusa.
    Ale oczywiście mogę się mylić.
    Pozdrawiam
  • #11 9821682
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Moja propozycja kodu (algorytmu obliczania cyfr dla temperatury nie analizowałem):
    Kod: text
    Zaloguj się, aby zobaczyć kod
    Edit : Poprawiono kod i dołożono możliwość kompilacji na ATmega16/32
  • REKLAMA
  • #12 9822298
    Konto nie istnieje
    Poziom 1  
  • #13 9823592
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Kod wyżej poprawiłem, kompiluje się również na ATmega16/32, bo na takich w tej chwili mogę testować. W twoim przypadku spokojnie się zmieści na ATtiny24...
    BTW. Jeśli będziesz kiedykolwiek chciał kod przenieść na inny µC, to trzymaj się raczej oznaczeń typu LED_PORT niż PORTB...
  • #14 9823904
    Konto nie istnieje
    Poziom 1  
  • #15 9823929
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Właśnie kod osiągnął ostateczną, siódma wersję bez żadnych "warrningów", sprawdź ją... ;)
  • #16 9823961
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #17 9831343
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    OK, no to następne podejście z nadmiarowym kodem testowym odliczającym w kółko na ATmega8515 zamiast ADC - wyświetlanie bez zarzutu. Co do tego dziwnie wyświetlanego zera, to może masz zamienione a z g, b z f itp.
    W tej wersji łatwiej zapanować nad częstotliwością odświeżania segmentów - zbyt duża skutkuje podświetlaniem sąsiednich cyfr, zbyt mała - migotaniem.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Edit : Mały schemacik, na którym działam (zanegowane definicje cyfr) :
    [ATtiny44] Jak zaimplementować termostat do wytrawiarki z ATtiny44 i czujnikiem LM35?
  • #18 9831748
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

✨ W dyskusji poruszono implementację termostatu do wytrawiarki z wykorzystaniem mikrokontrolera ATtiny44 oraz czujnika temperatury LM35. Użytkownik zgłosił problemy z wyświetlaniem cyfr 0 i 7 na wyświetlaczu 7-segmentowym, gdzie nie świecił się segment A. W odpowiedziach zasugerowano sprawdzenie deklaracji zmiennych, poprawność schematu oraz optymalizację obsługi przerwań. Użytkownik poprawił kod, eliminując błędy związane z konwersją ADC, a także rozważał użycie przerwania od ADC. W końcu, po wielu poprawkach, użytkownik stwierdził, że napotkał problemy z działaniem mikrokontrolera, co skłoniło go do rozważenia użycia ATmega8 i czujnika Dallas.
REKLAMA