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

Attiny 2313 - problem z guzikami

ugh123 07 Gru 2009 18:42 2028 14
REKLAMA
  • #1 7357908
    ugh123
    Poziom 13  
    Witam wszystkich :D
    Z gory przepraszam za wszystkie glupie pytania poniewaz dopiero zaczynam przygode z uK . Zlozylem programator STK 200 dziala poprawnie . Jako pierwszy mikroprocesor postanowilem kupic attiny 2313 . Program pisalem w BASCOM AVR . Do attiny podlaczylem wyswietlacz lcd 2x16 dziala poprawnie . Chcialem napisac program powiedzmy takie "demo" tego ukladu kod mojego programu zamieszczam ponizej , jezeli zle wklejilem prosze o moderatora o poprawienie . Problem polega na tym ze attiny nie reaguje na zaden z "guzikow" , w symulatorze bascom avr jest ok . Prosze kolegow o pomoc w rozwiazaniu tego problemu . Pozdrawiam Bartek

    Kod programu :
    
    $regfile = "attiny2313.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Cursor Off
    Config Portd.6 = Input : Set Portd.6                        ' Guzik 1
    Config Porta.0 = Input : Set Porta.0                        ' Guzik 2
    Config Portd.1 = Input : Set Portd.1                        ' Guzik 3
    Config Portd.4 = Input : Set Portd.4                        ' Guzik 4
    Config Portd.0 = Output                                     ' Dioda Czerwona
    Guzik1 Alias Portd.4
    Guzik2 Alias Portd.5
    Guzik3 Alias Portd.6
    Guzik4 Alias Portd.2
    Dioda Alias Portd.0
    Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31        ' replace ? with number (0-7)
    Deflcdchar 2 , 17 , 21 , 21 , 14 , 4 , 4 , 10 , 17          ' replace ? with number (0-7)
    Cls
    Boot:
    Lcd "Wczytywanie"
    Waitms 200
    Dioda = 1
    Waitms 400
    Dioda = 0
    Waitms 400
    Dioda = 1
    Waitms 400
    Dioda = 0
    Lowerline
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 500
    Cls
    Gosub Menu
    Cls
    Informacje:
    Cls
    Lcd "Attiny 2313"
    Lowerline
    Waitms 1
    Lcd "prog by Bartek" ; Chr(2)
    Wait 5
    Cls
    Gosub Menu
    Cls
    Led:
    Cls
    Lcd "Migaj LED"
    Lowerline
    Waitms 1
    Lcd "Czerwona dioda"
    Waitms 200
    Dioda = 1
    Waitms 400
    Dioda = 0
    Waitms 400
    Dioda = 1
    Waitms 400
    Dioda = 0
    Waitms 200
    Dioda = 1
    Waitms 400
    Dioda = 0
    Waitms 400
    Dioda = 1
    Waitms 400
    Dioda = 0
    Waitms 200
    Dioda = 1
    Waitms 400
    Dioda = 0
    Waitms 400
    Dioda = 1
    Waitms 400
    Dioda = 0
    Cls
    Waitms 250
    Gosub Menu
    Cls
    Reboot:
    Cls
    Lcd "Reboot"
    Lowerline
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Waitms 150
    Lcd Chr(1)
    Wait 1
    Cls
    Gosub Boot
    
    Wizytowka:
    Cls
    Lcd "Bartek Morawski"
    Lowerline
    Waitms 1
    Lcd "Klasa 2 TA nr.10"
    Wait 5
    Cls
    Gosub Menu
    Cls
    Menu:
    Lcd "1.Info  2.Wizyt"
    Lowerline
    Waitms 1
    Lcd "3.Dioda 4.Reboot"
    Do
    If Guzik1 = 1 Then Gosub Informacje
    If Guzik2 = 1 Then Gosub Wizytowka
    If Guzik3 = 1 Then Gosub Led
    If Guzik4 = 1 Then Gosub Reboot
    Loop
  • REKLAMA
  • #2 7358068
    sylwunia35
    Poziom 18  
    Jak ma działać

    Wewnętrzny kwarc to 8
    $crystal = 1000000
    Config Porta.0 = Input : Set Porta.0

    f Guzik1 = 1 Then Gosub Informacje
    If Guzik2 = 1 Then Gosub Wizytowka
    If Guzik3 = 1 Then Gosub Led
    If Guzik4 = 1 Then Gosub Reboot
    daj
    Guzikx = 0 then i zwieraj do masy
    Jest jeszcze parę błędów
    A te waitmsy zgroza
  • REKLAMA
  • #4 7358226
    sylwunia35
    Poziom 18  
    np tak:
    For i to .... ilość razy
    Waitms 150
    Lcd Chr(1)
    Next i
    Masz Help do Bascom musisz poznawać i ćwiczyć różne polecenia bo wszystko można zrobić na kilka sposobów
    Pozdrawiam serdecznie i powodzenia.
  • #5 7358265
    ugh123
    Poziom 13  
    Mam polski plik pomocy przerobilem ten moj kod wedlug wskazowek i nadal w symulatorze jak uruchomie to jest ok i dziala wszysko a jak wysle program do attiny to dziala ale tylko czesciowo tzn wyswietla wszystko dioda tez mruga podczas startu ale pozniej nie reaguje na zaden z guzikow :( nie wiem dlaczego tak, prosze o pomoc wszelkie sugestie mile widziane z gory dziekuje
  • #6 7358311
    sylwunia35
    Poziom 18  
    Jeśli masz HELP to poczytaj o GOSUB i RETURN.Czy program wpada w pętle DO..LOOP.
  • #8 7358389
    xury
    Specjalista automatyka domowa
    Po pierwsze - dlaczego pętla główna jest na końcu ? I gdzie jest end ?
    Nie tak się używa podprogramów
    Po drugie - przydałby się schemat połączeń.
    Po trzecie - przyciski zwieraj do masy, a wejścia podciągaj wewnętrznie.
    No.... i po czwarte ....
    Cls 
    Gosub Menu 
    Cls 
    Menu:


    Uwielbiam tego typu kod :) Ciekawe gdzie by program poszedł gdyby nie ten Gosub :P
    Nadużywanie gosub jest gorsze od faszyzmu.

    Każdy podprogram do którego przechodzimy przez Gosub powinien kończyć się poleceniem Return. Powinien być napisany za programem głównym (czyli za instrukcją End) i powinien mieć możliwość zakończenia.
    Niech kolega w symulatorze zobaczy co mu się dzieje z RAMem :)
    Program nie ma prawa działać. Ja bym na miejscu autora szybko zapomniał o tym kodzie i zaczął pisać nowy wg zasad.
  • REKLAMA
  • #9 7358718
    sylwunia35
    Poziom 18  
    Właśnie miałem tak napisać ale chciałem zmusić młodego adepta do samodzielnego myślenia a nie że ktoś mu wszystko wyjaśni a on tylko bezmyślnie przepisze i to często jeszcze z błędami.
  • #10 7361860
    ugh123
    Poziom 13  
    Witam wszystkich .
    Dziekuje za zainteresowanie tematem oraz za wszelkie sugestie. prosze o jakis prosty przyklad w jaki sposob mozna zkonfigurowac porty wejsciowe tak zeby np. jak podam 5v na np pind.0 to sie zaswieci dioda podlaczona do pind.1. Sory ze tak marudze i pytam o rzeczy dla was oczywiste ale jestem poczatkujacym i dopiero sie ucze programowac w bascom. Serdecznie pozdrawiam Bartek
  • REKLAMA
  • #11 7362618
    Konto nie istnieje
    Poziom 1  
  • #12 7369972
    ugh123
    Poziom 13  
    Dziekuje za wytlumaczenie . Uporalem sie z ustawieniem tych portow wejsciowych i dziala :D Ponizej zamieszczam dzialajacy kod programu
    $regfile = "attiny2313.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Cursor Off
    Cls
    Config Portd = Output
            Portd.0 = 0
            Portd.6 = 0
            Portd.4 = 0
    
            Config Portd = Input                                ' Wejscie Guzik 1
            Portd.1 = 1
    
            Config Porta = Input                                ' Wejscie Guzik 2
            Porta.1 = 1
    
            Config Porta = Input                                ' Wejscie Guzik 3
            Porta.0 = 1
    
            Config Portd = Input                                ' Wejscie Guzik 4
            Portd.2 = 1
    
           Config Pind.0 = Output
    Config Pina.0 = Input
    Config Pina.1 = Input
    Config Portd.2 = Input
    Dioda1 Alias Portd.0
    Dioda2 Alias Portd.4
    Glosnik Alias Portd.6
    Guzik1 Alias Pind.1
    Guzik2 Alias Pina.1
    Guzik3 Alias Pina.0
    Guzik4 Alias Pind.3
    Deflcdchar 0 , 32 , 10 , 10 , 32 , 4 , 17 , 14 , 32         ' replace ? with number (0-7)
    Deflcdchar 1 , 32 , 24 , 20 , 19 , 19 , 19 , 20 , 24        ' replace ? with number (0-7)
    Deflcdchar 2 , 31 , 1 , 2 , 4 , 8 , 16 , 31 , 32            ' replace ? with number (0-7)
    Deflcdchar 3 , 32 , 32 , 14 , 2 , 4 , 8 , 14 , 32           ' replace ? with number (0-7)
    Cls
    Boot:
    Display On
    Cls
    Waitms 150
    Sound Glosnik , 300 , 100
    Waitms 100
    Sound Glosnik , 300 , 100
    Waitms 100
    Sound Glosnik , 300 , 100
    Lcd "Startuje ...  " : Lcd Chr(1) : Dioda1 = 1
    Waitms 1
    Lowerline
    Waitms 1
    Lcd " Please Wait " : Lcd Chr(0) : Dioda1 = 0
    Wait 2
    Cls
    Menu:
    Cls
    Waitms 100
    Lcd "Guzik 1 Info" : Dioda1 = 0
    Lowerline
    Waitms 1
    Lcd "Guzik 2 Wizytowka" : Dioda1 = 0
    Do
    If Guzik1 = 0 Then Gosub Informacje
    If Guzik2 = 0 Then Gosub Wizytowka
    If Guzik3 = 0 Then Sound Glosnik , 250 , 75
    Loop
    
    Informacje:
    Cls
    Lcd "Attiny 2313 AVR programator STK 200"
    Lowerline
    Waitms 1
    Lcd "Programowany by Bartek"
    Do
    If Guzik1 = 0 Then Shiftlcd Left
    If Guzik2 = 0 Then Shiftlcd Right
    If Guzik3 = 0 Then Gosub Menu
    Loop
    
    
    Wizytowka:
    Cls
    Lcd "Bartek" : Dioda1 = 1
    Lowerline
    Waitms 1
    Lcd "Klasa 2 TA nr.10" : Dioda1 = 1
    Do
    If Guzik1 = 0 Then Gosub Suspend
    If Guzik2 = 0 Then Sound Glosnik , 100 , 75
    If Guzik3 = 0 Then Gosub Menu : Dioda1 = 0
    Loop
    
    
    Suspend:
    Cls
    Waitms 100
    Lcd "Przejscie w"
    Lowerline
    Waitms 10
    Lcd "tryb uspienia " : Lcd Chr(2) : Lcd Chr(3)
    Waitms 750
    Sound Glosnik , 250 , 75
    Display Off
    Do
    Dioda1 = 1
    Waitms 750
    Dioda1 = 0
    Waitms 750
    If Guzik2 = 0 Then Gosub Boot
    Loop
    End                                                         'end program
  • #13 7372965
    xury
    Specjalista automatyka domowa
    Myślę, że nadal jest błąd w konfiguracji portów:
    Najpierw masz tak:
    Config Portd = Output 
            Portd.0 = 0 
            Portd.6 = 0 
            Portd.4 = 0


    a potem:
    Config Portd = Input                                ' Wejscie Guzik 1 
            Portd.1 = 1

    Myślę, że sam dojdziesz gdzie jest błąd.
    ps. to już trzeci post o konfiguracji portów dzisiaj.
  • #14 7377320
    Konto nie istnieje
    Poziom 1  
REKLAMA