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

Zegar LED Bascom - Programowanie zegara LED w Bascomie

J0e 06 Sie 2016 23:40 1995 7
REKLAMA
  • #1 15853645
    J0e
    Poziom 8  
    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: VB.net
    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)
  • REKLAMA
  • #2 15853655
    BlueDraco
    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.
  • REKLAMA
  • Pomocny post
    #3 15853699
    piotrva
    VIP Zasłużony dla elektroda
    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.
  • #4 15854040
    J0e
    Poziom 8  
    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 ?
  • REKLAMA
  • Pomocny post
    #5 15854052
    Konto nie istnieje
    Konto nie istnieje  
  • #6 15854318
    J0e
    Poziom 8  
    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: VB.net
    Zaloguj się, aby zobaczyć kod
    ?
  • REKLAMA
  • Pomocny post
    #7 15854413
    Konto nie istnieje
    Konto nie istnieje  
  • #8 15866333
    J0e
    Poziom 8  
    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.
REKLAMA