Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATtiny44][C] LM35, 7-segment.

Radzio M. 12 Sie 2011 17:56 2583 17
  • #1 12 Sie 2011 17:56
    Radzio M.
    Poziom 32  

    Witam. Projektuję termostat do wytrawiarki z termometrem na 2 wyś. 7-seg. Czujnik LM35, wykorzystuje ADC. Kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Problem w tym, że cały czas wyświetla zera na wyświetlaczach. Jeśli dam polecenie cy1=adc/100; to cy1 pokazuje dobrą wartość, czyli z ADC powinno być ok. Czekam na wskazówki.

    0 17
  • Arrow Multisolution Day
  • #3 12 Sie 2011 18:23
    snnaap
    Poziom 25  

    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

    0
  • Arrow Multisolution Day
  • #5 12 Sie 2011 22:52
    Radzio M.
    Poziom 32  

    Wszystko zamieściłem w 1 pliku żeby było pod ręką. Nie wiem dlaczego przy wyświetlaniu cyfr 0 i 7 nie zaświeca mi się SEG_A, przy pozostałych cyfrach nie ma z tym problemu. Co do wyświetlania temperatury to powinno być już chyba dobrze, tylko jutro muszę to sprawdzić na LM35 bo na potencjometrze to co chwila skacze mi napięcie.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #7 13 Sie 2011 09:48
    LordBlick
    VIP Zasłużony dla elektroda

    1. Schemat by się przydał, aby zweryfikować działanie programu.
    2. Obsługa przerwania jest dość nieoptymalna tak na pierwszy rzut oka.

    0
  • #8 13 Sie 2011 15:44
    Radzio M.
    Poziom 32  

    Poprawiłem kod, był błąd przy zamianie adc na Uwe.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nie wiem dlaczego teraz jest ciągle stan wysoki na PA0.
    [ATtiny44][C] LM35, 7-segment.

    0
  • #9 13 Sie 2011 16:26
    LordBlick
    VIP Zasłużony dla elektroda

    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)... ;)

    0
  • #10 13 Sie 2011 16:59
    snnaap
    Poziom 25  

    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

    0
  • #11 13 Sie 2011 17:51
    LordBlick
    VIP Zasłużony dla elektroda

    Moja propozycja kodu (algorytmu obliczania cyfr dla temperatury nie analizowałem):

    Kod: C
    Zaloguj się, aby zobaczyć kod
    Edit : Poprawiono kod i dołożono możliwość kompilacji na ATmega16/32

    0
  • #12 13 Sie 2011 21:43
    Radzio M.
    Poziom 32  

    Kompilator wyrzuca mi błąd undeclared true, false, to wpisałem tam 0 i 1. Efekt programu, wyświetlacze wygaszone. Kolektor z emiterem są pozamieniane, mój błąd ;/
    Spróbuje w tym moim programie dorobić przerwanie od ADC.

    0
  • #13 14 Sie 2011 12:56
    LordBlick
    VIP Zasłużony dla elektroda

    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...

    0
  • #14 14 Sie 2011 14:37
    Radzio M.
    Poziom 32  

    Kod: c
    Zaloguj się, aby zobaczyć kod

    To mi wyskakuje w błędach podczas kompilacji, korzystam z Eclipse i mam ustawiony ATtiny44.

    0
  • #15 14 Sie 2011 14:43
    LordBlick
    VIP Zasłużony dla elektroda

    Właśnie kod osiągnął ostateczną, siódma wersję bez żadnych "warrningów", sprawdź ją... ;)

    0
  • #16 14 Sie 2011 14:57
    Radzio M.
    Poziom 32  

    Na wyświetlaczu 2 wyświetla 0 bez segmentu A ;)
    Odwróce elektrody tranzystorów żeby emitery były na Vcc.

    0
  • Pomocny post
    #17 16 Sie 2011 19:19
    LordBlick
    VIP Zasłużony dla elektroda

    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
    Zaloguj się, aby zobaczyć kod
    Edit : Mały schemacik, na którym działam (zanegowane definicje cyfr) :
    [ATtiny44][C] LM35, 7-segment.

    0
  • #18 16 Sie 2011 20:59
    Radzio M.
    Poziom 32  

    Eh, nic z tego, coś nie tak z tym uC, wpisuje mu w kodzie żeby zaświecił wszystkie segmenty 1 wyświetlacza to świeci się coś na jednym i drugim. Lord oczywiście dam Ci pomógł bo zrobiłeś kawał kodu ;) . Została mi Atmega8 i lcd to dokupie czujnik Dallas i zrobię na tym.

    0