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

Attiny26 - dlaczego nie działa program

hanibal0 13 Lis 2010 02:55 1208 5
REKLAMA
  • #1 8736915
    hanibal0
    Poziom 11  
    w symulatorze bascoma program działa jak należy, jednak po wgraniu do procka nie zmienia stanu na wyjściu, porty są na 100% dobre, ponieważ jeśli na sztywno ustawię 1 to jest napięcie 5V na porcie natomiast instrukcja toggle nie działa. Może mi ktoś wyjaśnić dlaczego tak jest, co jest źle w kodzie?

    $regfile = "attiny26.dat"
    
    Config Portb = Input
    Config Porta = Output
    
    Set Portb.6
    Porta.1 = 0
    
    Do
    Debounce Portb.6 , 0 , Pr_1 , Sub
    Loop
    
    Pr_1:
       Set Portb.6
       Toggle Porta.1
       Return
    
    
  • REKLAMA
  • #2 8737015
    alien_audio
    Poziom 21  
    Witam.
    Zamiast Config Portb = Input
    Wstaw Config Pinb.6=Input

    dodatkowo podłącz rezystor 10K od Pinb.6 do +5V.
  • REKLAMA
  • #3 8737109
    hanibal0
    Poziom 11  
    muszę kupić ten rezystor ale zastanawia mnie jaką on rolę ma pełnić, ogólnie pinb.6 sterowany ma być stanem niskim, tzn po zwarciu do masy pinb.6 procesor ma zmienić stan wejścia na porta.1. Niestety tak się nie dzieje, tzn pinb.6 jest zwierany do masy, stan na nim zmienia się z 4,7V na 0V ale na porta.1 nie reaguje. Procesor jest sprawny bo jeśli sztywno ustawię porta.1 aby zmieniał stan powiedzmy co 2s to tak się dzieje.

    no i dlaczego:
    config pinb a nie portb
  • REKLAMA
  • Pomocny post
    #4 8737156
    Wojtek75
    Poziom 24  
    alien_audio napisał:
    Witam.
    Zamiast Config Portb = Input
    Wstaw Config Pinb.6=Input

    To w zasadzie jest bez znaczenia wystarczy otworzyć skompilowanego hex'a np: w AvrStudio i zobaczysz coś takiego:
    +00000011:   E080        LDI       R24,0x00       Load immediate
    +00000012:   BB87        OUT       0x17,R24       Out to I/O location
    +00000013:   EF8F        SER       R24            Set Register
    +00000014:   BB8A        OUT       0x1A,R24       Out to I/O location

    jak widać rejestry odpowiedzialne za kierunki działania portów są ustawiane prawidłowo.
    alien_audio napisał:
    dodatkowo podłącz rezystor 10K od Pinb.6 do +5V.


    Ta linia:

    podciąga wewnętrzny pull-up, więc rezystor, o którym piszesz również w zasadzie jest nie potrzebny.


    hanibal0 tak powinien wyglądać twój program żeby działał:
    $regfile = "attiny26.dat"
    $crystal = 1000000
    
    Config Portb = Input
    Config Porta = Output
    
    Set Portb.6
    Porta.1 = 0
    
    Do
    Debounce Pinb.6 , 0 , Pr_1 , Sub
    Loop
    
    Pr_1:
       Toggle Porta.1
    Return

    popatrz przez chwilę i zobaczysz gdzie popełniłeś błąd.
  • REKLAMA
  • #5 8737851
    hanibal0
    Poziom 11  
    wojtek75 bardzo dziękuję, co prawda jestem początkujący w dziedzinie mikrokontrolerów ale traktuję to jak hobby i nie zawsze mam czas wszystko doczytać, walczyłem z tym programem do 5 rano i musiałem się poddać, zmyliło mnie trochę moje myślenie, w podprogramie ustawiałem stan wysoki na pinb.6 a przecież to jest równoznaczne z puszczeniem przycisku, moim błędem bylo dodanie linii set portb.6 ale zmylił mnie symulator bascoma.

    Bardzo dziękuję, program działa!

    mam jeszcze jedno pytanie, czy muszę definiować kwarc? program działa prawidłowo bez zdefiniowanego, z tego co kiedyś czytałem to nie jest konieczne jeśli używa się wbudowanego kwarcu, a ja jak na razie nie zamierzam korzystać z zewnętrznego kwarcu, ponieważ wewnętrzny mi wystarcza do takich prostych programów a zegarka nie zamierzam robić.
    Pytam o konieczność definiowania kwarcu ponieważ kiedyś zdarzyło mi się zaprogramować atmega8 z innym kwarcem i teraz procek leży sobie w półce bo jak na razie nie umiem i nie mam czasu go odblokować :/
  • Pomocny post
    #6 8738678
    Wojtek75
    Poziom 24  
    No jednak nie do końca dostrzegłeś swój błąd, owszem Set Portb.6 jest zbędne w podprogramie Pr_1: i dlatego je usunąłem, ale to nie to powodowało nieprawidłowe działanie tego programiku.
    Błąd miałeś w linii z Debounce porównaj jak ona wygląda w twoim pierwszym poście a jak w moim. Poczytaj o rejestrach określających kierunki portów, rejestrach wejściowych i wyjściowych sporo ci się rozjaśni.
    Co do dyrektywy $crystal to ja definiuję ją zawsze, za jakiś czas prawdopodobnie się przekonasz, że w Bascomie lepiej to robić. Oczywiście cyfra wpisywana po tej dyrektywie powinna być zgodna z tym jak fizycznie tyka uC.
REKLAMA