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.

Atemga8 zle działajace multiplexowanie

neo_84 10 Gru 2011 17:50 1155 4
  • #1 10 Gru 2011 17:50
    neo_84
    Poziom 14  

    Witam postanowiłem zrobić sobie cyfrowy termostat na atmega8 i niestety napotkałem niemiły problem który nie wiem gdzie tkwi ... co jakiś czas przy cyklicznym przyciskaniu przycisku zmiany temperatury wyświetlacz na moment wyświetla jakieś "krzaki" a co ciekawe przy cały czas naciśniętym przycisku ten problem nie występuje wyświetlacz to standardowy multiplex z rejestrem przesuwnym (MM74HCT164M) bez zatrzasku czyli wysyłam odpowiadnia cyfrę a później zalanczam tranzystor wyświetlacza...
    i nie wiem gdzie tkwi problem :cry: myślałem ze w zmiennej ze podczas skoku do przerwania zostaje gdzies nadpisana czy coś takiego. Wpisałem w podprogramie przerwania coś takiego

    Kod: c
    Zaloguj się, aby zobaczyć kod
    i tak samo dla cy2 miało to na celu sprawdzanie zmiennej czy to do niej nie trafiają jakieś krzaki ale niestety program się nie zatrzymał wiec z tego wynika ze do zmiennych jest wszystko ładnie zapisane wiec gdzie tkwi problem :cry: ?
    niech ktoś luknie bardziej doświadczony zaznaczam ze to mój 1 program w C wiec może być trochę błędów ;)

    Funkcja ustawiania temperatury:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Funkcja rozbicia wyniku temperatury na dziesietne i jednosci czyli cy1 ,cy2
    Kod: c
    Zaloguj się, aby zobaczyć kod


    i wektor przerwania :
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodaje ze zmienna cy1 ,cy2 jest typu VOLATILE.
    Dolanczam zdiecia i film


    skąd ta kropka ?
    Atemga8 zle działajace multiplexowanie
    Tu też jakiś "krzak"
    Atemga8 zle działajace multiplexowanie

    0 4
  • Arrow Multisolution Day
  • #2 11 Gru 2011 10:26
    Krauser
    Poziom 26  

    Nie używaj eeeprom_write_byte i zobacz co będzie.

    0
  • Arrow Multisolution Day
  • #3 11 Gru 2011 12:05
    neo_84
    Poziom 14  

    Krauser EPROM nie jest używany podczas ustawiania temperatury tylko przy wychodzeniu z funkcji tzn przyciśnięciu 2 przycisków na raz ale żeby mi nikt nie zarzucił uruchomiłem i bez EPROM ta sama sytuacja. Przeniosłem funkcje sendLED do funkcji przerwania teraz to wygląda tak :

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Dodałem zmienna globalna volatile wyswietl czyli to co chce wyświetlić na wyświetlaczu ląduje do tej zmiennej . Niestety ten sam efekt. Najbardziej mnie zastanawia fakt ze przy cały czas naciśniętym przycisku nie występuje to zjawisko, tylko i wyłącznie! przy cyklicznym naciskaniu wiec "ki ... wodę mąci " :cry:

    i wszystko jasne problem tkwi nie w programie tylko w zadrganiach styków dotykając metalowym drucikiem pinów przycisków tez wyświetlacz od czasu do czasu mrugnie przepatrze jeszcze raz połaczenia moze jakis zimny lut... dodaje ze kondensatory 100nF umiesicilem blisko przyciskow i układu mm74hct164m

    0
  • #5 11 Gru 2011 15:28
    neo_84
    Poziom 14  

    Drgania styków wyeliminowałem programowo (_delay_ms 100)i kondensatorek 100nF tak jak pisałem. Wszystko już działa przeczyściłem goldpiny spirytusem niema już problemu wiec temat zamykam i dziękuje wszystkim którzy chcieli mi pomóc ;)

    0