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

[Bascom][ATmega32] - Odliczanie czasu - prośba o modyfikację kodu

Daniel_GSM 14 Gru 2013 11:43 1998 6
REKLAMA
  • #1 13058987
    Daniel_GSM
    Poziom 25  
    Witam,

    Poniżej zamieszczam kod - przedstawia on sterowanie multipleksowe 7-seg wyświetlaczem LED - jest to lekko przerobiony kod z popularnej i znanej każdemu książki.
    To nie jest tak, że to ma być stoper - po prostu chciałem fragment tego kodu wykorzystać do innych celów, ale jest pewien problem.

    Otóż poniższy kod sprawia, że po uruchomieniu na wyświetlaczu LED 7-seg wyświetlają się cyfry od 0 do 10 w odstępach 1 sekundowych.
    Wiem, że to banalne odliczanie, że można zastosować INCR ale nie o to chodzi... :)

    Moje pytanie brzmi dlaczego po odliczeniu i wyświetleniu tych 10 cyfr następuje powrót do początku i kolejne odliczanie 10 sekund i tak w kółko.
    Skasowałem pętle DO-LOOP i nadal to samo. Czy to ma jakiś związek z przerwaniem od timera? ale zatrzymać nie mogę bo mi multipleksowanie przestanie funkcjonować.
    Chciałem aby po odliczeniu od 0 do 10 licznik zatrzymał się na 10 i cały czas wyświetlał 10 aż do resetu procesora.

    Kod: text
    Zaloguj się, aby zobaczyć kod
    [/code]
  • REKLAMA
  • #2 13059567
    BlueDraco
    Specjalista - Mikrokontrolery
    Daniel_GSM napisał:

    Chciałem aby po odliczeniu od 0 do 10 licznik zatrzymał się na 10 i cały czas wyświetlał 10 aż do resetu procesora.


    I prawdopodobnie tak właśnie ten kod działa. Odlicza, resetuje, odlicza, resetuje itd.
    Swoją drogą kod fatalny - strach pomyśleć, ile linii miałby tak napisany kod, który miałby odliczać do tysiąca...
  • REKLAMA
  • #3 13059619
    piotrva
    VIP Zasłużony dla elektroda
    Dodaj dyrektywę End po ostatnim D=0;
    A ja bym spytał o ile sekund/minut kod by się mylił po doliczeniu do 1000 ;)
  • REKLAMA
  • REKLAMA
  • #5 13059992
    Konto nie istnieje
    Poziom 1  
  • #6 13064686
    Daniel_GSM
    Poziom 25  
    BlueDraco napisał:
    Swoją drogą kod fatalny - strach pomyśleć, ile linii miałby tak napisany kod, który miałby odliczać do tysiąca...


    To jest tylko fragment, który ma liczyć do 10 a nie do 1000 :) gdybym robił stoper do 1000 to pewnie inaczej by to wyglądało - masz racje - wygląda jak pierwszy program nowicjusza służący do zapalania diody :)

    piotrva napisał:
    A ja bym spytał o ile sekund/minut kod by się mylił po doliczeniu do 1000


    Ale liczy do 10 i na tym koniec - odchyłka może być nawet na poziomie 30% :)

    elektron1956 napisał:
    Masz tu gotowe, musi dzialac nie sprawdzalem.


    Dziękuję - problem rozwiązany, ale tylko częściowo. Owszem liczy do 10 i się zatrzymuje, ale na wyświetlaczu pojawia się losowa cyfra - a mnie chodzi o to by program policzył do 10 a po odliczeniu pozostawił na wyświetlaczu liczbę 10 dopóki nie nastąpi restart układu.

    emarcus napisał:
    Większośc tego co masz w przerwaniu timera0 winno byc w programie głównym


    Większość zaczerpnięta z książki "Programowanie mikrokontrolerów w języku Bascom"
    Trzeba autora książki zapytać dlaczego tak napisał kod :)

    Dziękuję wszystkim za pomoc, ale mam prośbę by mi jeszcze pomóc zachować liczbę do której odlicza program na wyświetlaczu tak jak napisałem wyżej.
    Np jeśli odliczy do 10 to niech ta cyfra 10 pozostanie na wyświetlaczu aż do wyłączenia zasilania urządzenia.

    Temat nadal aktualny...
  • #7 13170869
    Aldoro Draxy
    Poziom 19  
    Ja mam inny problem, ale również z tym kodem. Otóż mam podłączone dwa wyświetlacze zamiast czterech. Jak robię pętlę to dzieje się coś dziwnego.

    Układ działa dobrze tylko wtedy jak dam w pętli Wait 1.
    Jak dam nawet waitms 1000, to już na ekranie jest 00

    Co to może być?
REKLAMA