Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

12 Aug 2011 17:56 2742 17

  • Level 34  
    Witam. Projektuję termostat do wytrawiarki z termometrem na 2 wyś. 7-seg. Czujnik LM35, wykorzystuje ADC. Kod:
    Code: c
    Log in, to see the code


    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.
  • Moderator on vacation ...
    Tak na szybko:

    1. Brak deklaracji zmiennych cy1 i cy2.
    2. Co ma robić to:
    Code: c
    Log in, to see the code

    3. Dla porządku: Czemu włączasz przerwania skoro nie masz żadnej funkcji ich obsługi?
  • Level 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 wrote:
    Brak deklaracji zmiennych cy1 i cy2.
    zdaje mi się że deklaracje tych zmiennych są w pliku d_led.h
  • Moderator on vacation ...
    snnaap wrote:
    zdaje mi się że deklaracje tych zmiennych są w pliku d_led.h

    Przeoczyłem - na pewno tam są :)

  • Level 34  
    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.
    Code: c
    Log in, to see the code
  • VIP Meritorious for electroda.pl
    1. Schemat by się przydał, aby zweryfikować działanie programu.
    2. Obsługa przerwania jest dość nieoptymalna tak na pierwszy rzut oka.

  • Level 34  
    Poprawiłem kod, był błąd przy zamianie adc na Uwe.
    Code: c
    Log in, to see the code


    Nie wiem dlaczego teraz jest ciągle stan wysoki na PA0.
    [ATtiny44][C] LM35, 7-segment.
  • VIP Meritorious for electroda.pl
    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)... ;)
  • Level 25  
    LordBlick wrote:
    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
  • VIP Meritorious for electroda.pl
    Moja propozycja kodu (algorytmu obliczania cyfr dla temperatury nie analizowałem):
    Code: C
    Log in, to see the code
    Edit : Poprawiono kod i dołożono możliwość kompilacji na ATmega16/32

  • Level 34  
    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.
  • VIP Meritorious for electroda.pl
    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...
  • VIP Meritorious for electroda.pl
    Właśnie kod osiągnął ostateczną, siódma wersję bez żadnych "warrningów", sprawdź ją... ;)
  • Helpful post
    VIP Meritorious for electroda.pl
    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.
    Code: c
    Log in, to see the code
    Edit : Mały schemacik, na którym działam (zanegowane definicje cyfr) :
    [ATtiny44][C] LM35, 7-segment.

  • Level 34  
    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.