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

[ATmega8]Pierwszy program w BASCOM`ie

tomusiek1992 27 Maj 2013 16:16 2907 14
  • #1 27 Maj 2013 16:16
    tomusiek1992
    Poziom 10  

    Witam ;) nie mam jeszcze programatora i procka (spodziewam sie go w tym tyg) jednak zacząłem czytać poradniki programowania w BASCOM`ie i napisałem swój pierwszy w zyciu program i chciałbym prosić o jego sprawdzenie czy to wgl ma jakiś sens xD

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    założenie jest takie - na początku ma świecić czerwona dioda, po naciśnięciu przycisku ma zaświecić się zielona a zgasić czerwona, po kolejnym naciśnięciu przycisku ma świecić czerwona a zielona zgasnąć ;)
    z góry dziekuję za pomoc ;)

    0 14
  • Pomocny post
    #2 27 Maj 2013 20:40
    Mol
    Poziom 30  

    Po portb.1 = 1 daj portb.2 = 0 , a po portb.2 = 1 daj portb.1 =0 , bo chcesz gasić tą drugą diodę.

    0
  • #3 28 Maj 2013 10:28
    SylwekK
    Poziom 28  
  • #4 28 Maj 2013 10:57
    tmf
    Moderator Mikrokontrolery Projektowanie

    tomusiek1992 napisał:
    Witam ;) nie mam jeszcze programatora i procka (spodziewam sie go w tym tyg) jednak zacząłem czytać poradniki programowania w BASCOM`ie i napisałem swój pierwszy w zyciu program i chciałbym prosić o jego sprawdzenie czy to wgl ma jakiś sens xD


    Skoro zaczynasz to nie zaczynaj od złych nawyków. Zainstaluj Atmel Studio, skorzystaj z zawartego w nim symulatora i przejdź na C, które jest sensowniejszym wyborem. Zobacz jakie to proste, ten sam kod w c:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    1
  • #5 02 Cze 2013 15:44
    yokoon
    Poziom 28  

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #6 02 Cze 2013 21:37
    SylwekK
    Poziom 28  

    Struktura powyższego programu jest co najmniej dziwna... W najprostszej postaci najpierw badaj stan przycisku, jeśli wciśnięty to zmień stan portów (dwie instrukcje toggle - po jednej dla każdego pinu) i znowu sprawdzaj stan - jeśli puszczony to przejdź do dalszej części programu czyli... do początku w tym wypadku :)

    0
  • #7 02 Cze 2013 22:10
    Mol
    Poziom 30  

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Chyba tak będzie dobrze , jak pisze kolega SylwekK.

    0
  • #8 02 Cze 2013 22:42
    SylwekK
    Poziom 28  

    ...po toggle (albo end if - zależy od konstrukcji) jeszcze warunek na puszczenie przycisku, bo nie nadążysz patrzeć jak migają te diody ;)

    0
  • #9 02 Cze 2013 22:52
    Mol
    Poziom 30  

    Tak zapomniałem , myślę że wystarczy jakiś waitms .

    0
  • #10 03 Cze 2013 06:03
    yokoon
    Poziom 28  

    SylwekK napisał:
    Struktura powyższego programu jest co najmniej dziwna... W najprostszej postaci najpierw badaj stan przycisku, jeśli wciśnięty to zmień stan portów (dwie instrukcje toggle - po jednej dla każdego pinu) i znowu sprawdzaj stan - jeśli puszczony to przejdź do dalszej części programu czyli... do początku w tym wypadku :)


    Poprawiłem tylko config portów, nie zmieniałem programu.

    0
  • #11 03 Cze 2013 07:34
    SylwekK
    Poziom 28  
  • #12 05 Cze 2013 11:09
    Paros
    Poziom 11  

    @TMF

    " ... DIRD=0b01111110;
    DIRB=0b00000110;
    ..."

    kolega zainstaluje Atmel Studio (trochę mu to zajmie), wklei coś takiego i jako wynik otrzyma komunikat:
    "...Error 1 'DIRD' undeclared (first use in this function)..".

    Jeśli to jego początki, być może nie spojrzy już więcej na C...

    @początkujący

    Powyżej była tzw "literówka" - powinno być DDRD oraz DDRB.

    TMF prawdopodobnie ma rację - jeśli zaczynasz przygodę z programowaniem, warto przyjrzeć się językowi C.



    pozdrawiam

    0
  • #13 11 Cze 2013 15:04
    tomusiek1992
    Poziom 10  

    SylwekK napisał:
    Struktura powyższego programu jest co najmniej dziwna... W najprostszej postaci najpierw badaj stan przycisku, jeśli wciśnięty to zmień stan portów (dwie instrukcje toggle - po jednej dla każdego pinu) i znowu sprawdzaj stan - jeśli puszczony to przejdź do dalszej części programu czyli... do początku w tym wypadku :)

    po prostu się ucze i na razie bawie się w migające diody xD

    Paros napisał:
    TMF prawdopodobnie ma rację - jeśli zaczynasz przygodę z programowaniem, warto przyjrzeć się językowi C.

    wszyscy mówią że C jest lepszy tylko że próbowałem go ogarnąć korzystając z paru wyguglowanych kursów ale mi nie wchodzi xD

    SylwekK napisał:
    Najlepiej zastosuj Toggle portx.y tylko wcześniej ustal stany początkowe.

    wiem że można to zrobić za pomocą toggle ale czy w takiej postaci ten kod jest poprawny i będzie działał zgodnie z założeniem?
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    na początku ma świecić czerwona dioda, po naciśnięciu przycisku ma zaświecić się zielona a zgasić czerwona, po kolejnym naciśnięciu przycisku ma świecić czerwona a zielona zgasnąć

    0
  • #14 11 Cze 2013 17:01
    emarcus
    Poziom 34  

    tomusiek1992 napisał:

    wiem że można to zrobić za pomocą toggle ale czy w takiej postaci ten kod jest poprawny i będzie działał zgodnie z założeniem?
    ..................



    Nie. Ten code nie jest porawny(!)
    Począwszy od configuracji i ustalenia stanów spoczynkowych portów wejściowych masz w konsekwencji cały program wymagający korrecty, albo tworzenia go od nowa...
    Wejście nie podciągane do Vcc lub do GND jest w stanie wysokiej impedancji. Znaczy to że nie jest tam jednoznacznie logiczny stan wysoki ani też niski. Fizyczny brak napięcia na pinie nie świadczy jeszcze że jest to stan niski, dopiero podłączenie do GND wywoła stan logiczny niski. W tym własnie celu stosuje się "Podciąganie" portów wejściowych. Ponieważ budowa uControllerów pozwala ma automatyczne wewnętrzne podciąganie do Vcc tylko, zatem wygodniej jest stosowac tą opcję i odwróci logikę na stan spoczynkowy portu wysoki (1) a stan wymuszony np. przyciskiem zwieranym do GND jako stan niski (0).
    Mógłbyś to pozostawic tylko w przypadku gdyby porty wejściowe były podciągane zewnętrznymi rezystorami do GND. Jestem pewny że tak nie jest.

    Cytat:

    na początku ma świecić czerwona dioda, po naciśnięciu przycisku ma zaświecić się zielona a zgasić czerwona, po kolejnym naciśnięciu przycisku ma świecić czerwona a zielona zgasnąć


    Dalej, stany początkowe nie umieszcza się w programie głównym 'Do...Loop', ani też nie dajesz dla nich instrukcji warunkowych.
    Jeżeli chcesz wykorzystac ten sam przycisk (switch) do kolejnych, innych jego funkcji wtedy wygodnie jest posłużyc sie instrukcjami warunkowymi z operatorem 'AND' i wykorzystac istniejące stany niektórych zmiennych lub portów albo też jeżeli nie ma takiej możliwości, wprowadzic dodatkową zmienna (flagę) użytą do tego celu.

    e marcus

    0
  • #15 05 Wrz 2015 13:25
    tomusiek1992
    Poziom 10  

    rozwiązane:) temat do zamknięcia

    0