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

Zegar LED Bascom - Programowanie zegara LED w Bascomie

06 Sie 2016 23:40 1611 7
  • Poziom 6  
    Witam,

    zbudowałem duży zegar z pasków Ledowych, sterowany przez Atmega16. Napisałem do niego program sterujący, który niby działa ale ma 2 mankamenty.

    1. Zegar wydaje się działać niedokładnie pomimo dodanego zewnętrznego kwarcu 16MHz.
    2. Segmenty które w danej chwili powinny być wyłączone (np środkowy przy wyświetlaniu 0) nie wyłączają się do końca, lecz delikatnie się świecą.

    Czy to świecenie segmentów może być spowodowane złym multipleksowaniem (segment nie zdąża się wyłączyć do końca) ?

    Kod Bascom:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Bardzo byłbym wdzięczny za wytłumaczenie mi gdzie leży błąd w tym programie :D

    PS. Po użyciu pętli zamiast waitms segmenty nie pulsują tylko ładnie świecą (dalej jednak nie wyłączają się do końca)
  • Specjalista - Mikrokontrolery
    Wywietlacz świeci tak, jak mu każesz - na chwilę zapalasz każdą cyfrę na niewłaściwej, sąsiedniej pozycji.
    Wyświetlaczem multipleksowanym steruje się ZAWSZE w przerwaniu timera, a nie w pętli.
  • Pomocny post
    Moderator na urlopie...
    Ten oscylator jest niedokładny - zwykle stosuje się do tego celu oscylatory o niższej częstotliwości a najlepiej dedykowane układy z kompensacją temperatury, np. DS3231.
  • Poziom 6  
    BlueDraco napisał:
    Wywietlacz świeci tak, jak mu każesz - na chwilę zapalasz każdą cyfrę na niewłaściwej, sąsiedniej pozycji.


    Nie rozumiem. Zapalam na niewłaściwej pozycji ? Mógłbyś wskazać kawałek kodu który to robi ?
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 6  
    niveasoft napisał:
    Zobacz sobie krótki opis Link

    Zacznij krok po kroku i w 20 minut opanujesz temat.
    Co prawda tam akurat nie multipleksuję w przerwaniu chociaż tak to właśnie robię najczęściej.
    Spowodowane to było tym że akurat musiałem pogodzić multipleksowanie sześciu wyświetlaczy z odczytem 1Wire i czasem "naciągałem" ramy czasu :P
    Przełożyło się to na to że w opisie użyłem podobnej metody. Zmienię w wolnym czasie :D


    Przeczytałem artykuł, rozumiem wszystko poza 2 sprawami. Mianowicie
    Cytat:
    To dzielimy przez 100 i otrzymujemy wynik 78,125 .
    Od takiego wyniku odejmujemy jeszcze jeden i mamy gotową wartość jaką Timer musi odliczyć żeby zgłosić się 100 razy na sekundę.

    Dlaczego dzielimy przez 100 i dlaczego odejmujemy 1 ?
    Co robią polecenia
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    ?
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 6  
    Zaprogramowałem zegar tak aby wykorzystywał przerwania do obsługi multipleksowania i działa tak jak chciałem :)

    Bardzo dziękuję kolegom za pomoc.

    Temat uważam za zamknięty.