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

[BASCOM] [Atmega8]Sterownik przekaźników

DJ Danielus 26 Paź 2012 22:07 1392 4
  • #1 26 Paź 2012 22:07
    DJ Danielus
    Poziom 11  

    Witam!

    Na podstawie informacji zawartych w książce "Programowanie mikrokontrolerów w języku Bascom" napisałem program:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Wykorzystałem do tego instrukcje z książki:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    oraz
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    dodatkowo instrukcję select.

    Problem:
    Problem polega na tym, że program nie działa poprawnie. Po pierwsze procesor zamiast 1 sekundy odmierza ok. 8s. Jest to dla mnie nie zrozumiałe, ponieważ kodu zawierającego instrukcje tyczące się timer0 nie zmieniałem. To samo polecenie dotyczy polecenia wait 1 - tu również zamiast 1 sekundy czekam około 8-miu.
    Druga sprawa to polecenie select case, diody migają przez pewien czas, później milkną i już nie wracają do stanu początkowego. W symulatorze program działa w pętli nieskończonej (cały czas).

    Założenia:
    Procesor ma sterować dwoma przekaźnikami. Przez 24h na dobę (86400 impulsów dlatego zadeklarowałem Licznik jako Long). O odpowiedniej porze (odpowiednia ilość impulsów) załączać się ma odpowiedni przekaźnik. Chcę to zrobić za pomocą zliczania impulsów i polecenia select case ze względu na prostotę.

    Informacje:
    system: Windows 7
    program: Bascom AVR 2.0.7.5
    mikrokontroler: Atmega 8L
    programator: USBasp

    Bascom deklaruje uC jako Atmega 8A
    Jeżeli chodzi o schemat to nie wrzucam, układ zmontowałem na płytce stykowej - zawiera połączenia Atmegi do zasilania, a zamiast układu przekaźników użyłem diod Led informujących o stanie wyjść. Układ nie zawiera kwarcu.

    W celu sprawdzenia czy program działa, zamiast zliczenia impulsów dla 24 godzin, zliczam tylko 10.

    Prosiłbym o rzuceniem oka na program i jeżeli znajdzie się ktoś chętny, to proszę wyjaśnić dlaczego nie wszystko działa poprawnie i jakieś sugestie dotyczące zmiany.

    Z góry dziękuję
    Daniel

    0 4
  • Relpol
  • #2 27 Paź 2012 10:00
    edekk
    Poziom 26  

    Czy zmieniałeś fabryczne ustawienia fusebits?Jeżeli nie to masz odpowiedż.Link

    0
  • Relpol
  • #3 27 Paź 2012 22:34
    DJ Danielus
    Poziom 11  

    Zmieniłem FuseBity i faktycznie odmierza tak jak powinien. Napisany przeze mnie program niestety nie działa. Co ciekawe napisałem inny w celu sprawdzenia działania instrukcji warunkowych i pętli:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    W symulatorze wszystko hula, a po zaprogramowaniu włącza się dioda (Przekaznik2) świeci przez jakiś czas i koniec.

    Połączeń nie zmieniałem.
    7 - VCC
    8, 22 - GND
    2, 3 - rezystor 470ohm + dioda LED

    0
  • #4 28 Paź 2012 00:35
    fotonn
    Poziom 28  

    LED-y zapewne łączysz do plusa?
    Dajesz "Set" i co dalej?
    Wyjścia same się z"Reset"-ują?
    Patrz drugi przykład z książki.

    0
  • #5 30 Paź 2012 19:15
    DJ Danielus
    Poziom 11  

    Zmieniłem połączenia LEDów do "-", dopisałem "resety" i zaczęło działać. Napisałem to samo dla różnych funkcji warunkowych - każdy program wykonywał to samo.

    Mam jednak pytanie do polecenia Select case:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Czy to jest jedyna opcja zapisania instrukcji select case? Chodzi mi tu o wyłączenie przekaźników (tu LEDów) za pomocą polecenia reset - czy musi być w instrukcji if (czy można to inaczej zapisać za pomocą case'ów)?

    0
  Szukaj w 5mln produktów