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

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

12 Sie 2011 17:56 2910 17
  • #1 9818680
    Konto nie istnieje
    Poziom 1  
  • #2 9818732
    dondu
    Moderator na urlopie...
    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?
  • #3 9818771
    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
  • #5 9819841
    Konto nie istnieje
    Poziom 1  
  • #7 9820442
    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.
  • #8 9821301
    Konto nie istnieje
    Poziom 1  
  • #9 9821424
    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)... ;)
  • #10 9821478
    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
  • #11 9821682
    LordBlick
    VIP Zasłużony dla elektroda
    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
  • #12 9822298
    Konto nie istnieje
    Poziom 1  
  • #13 9823592
    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...
  • #14 9823904
    Konto nie istnieje
    Poziom 1  
  • #16 9823961
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #17 9831343
    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 / C++
    Zaloguj się, aby zobaczyć kod
    Edit : Mały schemacik, na którym działam (zanegowane definicje cyfr) :
    [ATtiny44][C] LM35, 7-segment.
  • #18 9831748
    Konto nie istnieje
    Poziom 1  
REKLAMA