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

[ATiny13][BASCOM] Przełącznik na trzech przyciskach

Marek Sp 22 Sty 2012 21:08 1969 17
REKLAMA
  • #1 10434693
    Marek Sp
    Poziom 20  
    chce sobie zbudować układ sterujący trzema wyjściami za pomocą w przycisków .
    - wyjście 1 typu on/off tu w przyszłości użyje jako wejscie reset teraz to jeszcze nie pracuje .
    - dwa pozostałe przyciski maja sterować nastepująco
    - naciskam S1 - wyjście Wo stan 1 (wysoki)
    - naciskam jeszcze raz S1 wyjście Wo stan 0 (niski)
    - naciskam S2 stan Sz =1
    - naciskam S2 stan Sz = 0
    - funkcje przycisków na przemian czyli jak wo=1 a nacisnę S2 a Wo=1 to zmienia stany na Wo=0 i Sz=1 i odwrotnie . Na początku wydawało mi się to proste ale wymiękam powoli . Na razie walczę z tymi dwoma przyciskami . Mam nadzieje ze to jasno napisałem .
    Na razie n-ta wersja moich wypocin ...
    
    $regfile = "attiny13.dat"
    $crystal = 128000
    $hwstack = 32
    $swstack = 12
    $framesize = 8
    $noramclear
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Input
    Config Pinb.4 = Input
    'Config Pinb.5 = Input                                       ' uwaga reset
    Sz Alias Pinb.0
    Wo Alias Pinb.1
    
    Awaria Alias Pinb.2
    S1 Alias Pinb.3                                             'wolny bieg
    S2 Alias Pinb.4                                             'szybki bieg
    's3 Alias Pinb.5                                          ' w resecie
    Set Pinb.3
    Set Pinb.4
    'Set Pinb.5
    Wo = 0
    Sz = 0
    
    'program glowny
    Do
    'Debounce s1 , 0 , Pr1 , Sub                              '
    Debounce S2 , 0 , Pr2 , Sub                                 ' wlaczanie wolnego
    Debounce S1 , 0 , Pr3 , Sub                               ' szybkie obroty 
    
    Loop
    
    'Pr1:
    'Toggle Awaria
    'Return
    Pr2:
    If S1 = 0 And Wo = 0 And Sz = 0 Then                        'włącz
    Toggle Wo
    Elseif S1 = 0 And Wo = 1 And Sz = 0 Then                    ' wylacz.wolno
    Toggle Wo
    Elseif S2 = 0 And S1 = 1 And Sz = 1 And Wo = 1 Then         'zmien na szybko
    Toggle Wo
    Waitms 100
    Toggle Sz
    End If
    Return
    
    Pr3:
    
    If S2 = 0 And Wo = 0 And Wo = 0 Then
    Toggle Wo
    Elseif S2 = 0 And Sz = 1 And Wo = 1 Then
    
    Toggle Sz
    Elseif S2 = 0 And S1 = 1 And Sz = 1 And Wo = 0 Then
    Toggle Sz
    Waitms 100
    Toggle Wo
    End If
    Return
    


    pytanie brzmi :
    - dlaczego to nie działa ?
  • REKLAMA
  • Pomocny post
    #2 10434831
    Kuniarz
    Moderator Projektowanie
    No ok, ale jakie masz konkretnie pytanie ? Wklej program jako kod i sprecyzuj problem, zanim temat wyląduje w koszu ;)
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #4 10464522
    Marek Sp
    Poziom 20  
    Mam taki niezrozumiały dla mnie problem . Nie działa mi konfiguracja output na PINB.1 . Mogę ustawić na pinie komendą set lub reset 1 lub 0 ale ale program testowy nie działa . Sprawdzone na dwóch procesorach.
    'attiny 13 test
    $regfile = "attiny13.dat"
    $crystal = 9600000
    $hwstack = 32
    $swstack = 12
    $framesize = 8
    Config Pinb.0 = Output
    Config Pinb.1 = Output                              ten nie działa tylko 
    Config Pinb.2 = Output
    Set Pinb.0
    Set Pinb.1
    Set Pinb.2
    Awaria Alias Pinb.0
    Wo Alias Pinb.1
    Szybko Alias Pinb.2
    Do
    'Set Pinb.1    to dziala
    Wait 1
    Toggle Wo                                                   'to nie działa
    'Reset Pinb.1'to działa
    Toggle Awaria
    Toggle Szybko
    'Wait 1
    Loop

    nie mam pomysłu jaka jest tego przyczyna
  • REKLAMA
  • #7 10467976
    xury
    Specjalista automatyka domowa
    Kolego poczytaj o ustawianiu końcówek. Ustawiasz w rejestrze PORTx, a odczytujesz stan w rejestrze PINx. To że Ci coś niecoś działa to czysty przypadek, bo nie powinno działać w ogóle. Dotyczy to też końcówek na które dałeś aliasy.
  • #8 10468748
    Marek Sp
    Poziom 20  
    Napisałem kolejny program testowy i nie działa czyli nie zmienia stanu na porcie Pinb.2 . Na dwóch procesorach identycznie nie rozumiem dlaczego . Może coś należy ustawić w fusebitach ?
    'attiny test
    $regfile = "attiny13.dat"
    $crystal = 9600000
    $hwstack = 32
    $swstack = 8
    $framesize = 8
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output                                      'ten nie działa
    Config Pinb.3 = Output
    Config Pinb.4 = Output
    
    Set Portb.1
    Set Portb.2
    Set Portb.3
    Set Portb.4
    A1 Alias Pinb.0
    A2 Alias Pinb.1
    A3 Alias Pinb.2
    A4 Alias Pinb.3
    A5 Alias Pinb.4
    Do
    Toggle A1
    Toggle A2
    Toggle A3
    Toggle A4
    Toggle A5
    Wait 1
    Loop
    
  • #10 10495928
    arktik1
    Poziom 27  
    Przede wszystkim zamiast tego:
    
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output                                      'ten nie działa
    Config Pinb.3 = Output
    Config Pinb.4 = Output
    

    zrób:
    
    Config PORTB = Output
              PORTB = &B00000000
    

    i zamiast tego:
    
    A1 Alias Pinb.0
    A2 Alias Pinb.1
    A3 Alias Pinb.2
    A4 Alias Pinb.3
    A5 Alias Pinb.4 
    

    tak:
    
    A1 Alias PORTB.0
    A2 Alias PORTB.1
    A3 Alias PORTB.2
    A4 Alias PORTB.3
    A5 Alias PORTB.4 
    

    Jeśli deklarujesz PORTX jako Wejścia to musisz używać później PINX, a jeśli jako wyjścia to PORTX.
    Tak się to przeważnie robi
    I wywal:
    
    Set Portb.1
    Set Portb.2
    Set Portb.3
    Set Portb.4 
    
  • REKLAMA
  • #11 10495929
    ZbeeGin
    Poziom 39  
    Bo dalej robisz ten sam błąd. Aliasy poustawiałeś na PIN, a piszemy Ci już od paru postów wstecz, że masz użyć PORT.
  • #12 10496075
    Marek Sp
    Poziom 20  
    nieee juz to działa tyle ze zle .
    1- napisałem ATtiny test
    'attiny tet
    $regfile = "attiny13.dat"
    $crystal = 9600000
    $hwstack = 32
    $swstack = 8
    $framesize = 8
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output
    
    A1 Alias Portb.0
    A2 Alias Portb.1
    A3 Alias Portb.2
    'A5 Alias Pinb.4
    Do
    Toggle A3
    Wait 1
    Toggle A3
    Wait 1
    Toggle A2
    Wait 1
    Toggle A2
    Wait 1
    Toggle A1
    Wait 1
    Toggle A1
    Wait 1
    Loop

    idealnie miga co sekundę po kolei
    i kolejny ostatni program , który tez nie działa
    'uklad sterowania wycieraczkami
    '$sim
    $regfile = "attiny13.dat"
    $crystal = 9600000
    $hwstack = 32
    $swstack = 12
    $framesize = 8
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Pinb.3 = Input
    Config Pinb.4 = Input
    'Config Pinb.5 = Input                                       ' uwaga reset
    Aw Alias Pinb.0
    Wo Alias Pinb.1
    Sz Alias Pinb.2
    
    S1 Alias Pinb.3                                             'wolny bieg
    S2 Alias Pinb.4                                             'szybki bieg
    's3 Alias Pinb.5                                          ' w resecie
    Set Pinb.3
    Set Pinb.4
    'Set Pinb.5
    Wo = 0
    Sz = 0
    Dim Key As Byte
    
    Do
    If Key = 1 Then : Gosub Pr2 : End If
    If Key = 2 Then : Gosub Pr3 : End If
    If Key = 3 Then : Gosub Pr4 : End If
    Gosub Button                                                'read buttons
    Loop
    
    '**********************************************************************
    '********* obsluga przyciskow *****************************************
    Button:
    Debounce Pinb.3 , 0 , Stan , Sub
    Debounce Pinb.4 , 0 , Stan , Sub
    'Debounce Pinb.5 , 0 , Stan , Sub
    Return
    Stan:
    If Pinb.3 = 0 Then : Key = 1 : End If
    If Pinb.4 = 0 Then : Key = 2 : End If
    'If Pinb.5 = 0 Then : Key = 3 : End If
    Return
    
    Pr2:
    Toggle Wo
    'Key = 0
    Toggle Aw
    Waitms 300
    Toggle Aw
    
    Return
    Pr3:
    Toggle Sz
    Toggle Aw
    Waitms 600
    Toggle Aw
    'Key = 0
    'Waitms 250
    Return
    Pr4:
    Toggle Wo
    Waitms 250
    Toggle Aw
    Waitms 250
    Return
    

    deklaracje wejść i wyjść są OK ale ciągle mi to miga jak przycisk przycisnę i działa przełączając wyjścia a nie jak powinien on/off
    Ale to kolejny akt rozpaczy ze pozornie prosty program tak mi daje w ....... no wiadomo w co
  • #13 10496153
    ZbeeGin
    Poziom 39  
    Marek Sp napisał:
    deklaracje wejść i wyjść są OK (...)
    Config Portb.0 = Output 
    Config Portb.1 = Output 
    Config Portb.2 = Output 
    Config Pinb.3 = Input 
    Config Pinb.4 = Input 
    'Config Pinb.5 = Input                                       ' uwaga reset 
    Aw Alias Pinb.0 
    Wo Alias Pinb.1 
    Sz Alias Pinb.2 
    
    S1 Alias Pinb.3                                             'wolny bieg 
    S2 Alias Pinb.4                                             'szybki bieg 
    's3 Alias Pinb.5                                          ' w resecie 
    Set Pinb.3 
    Set Pinb.4 
    'Set Pinb.5

    I dalej to samo.

    CONFIG PINx.nr- jak konfigurujesz tylko jeden pin nr z portu x
    CONFIG PORTx - jak konfigurujesz cały port x
    SET PORTx.nr - jak chcesz ustawić stan wysoki na pinie nr
    RESET PORTx.nr - jak chcesz ustawić stan niski na pinie nr
    TOGGLE PORTx.nr - jak chcesz zmienić stan na przeciwny na pinie nr
    IF PINx.nr - jak chcesz odczytać stan pinu nr z portu x

    Zapamiętaj raz na zawsze!
  • #14 10496235
    Marek Sp
    Poziom 20  
    użyłem aliasów chyba dobrze bo działają ?
    nie wiem jak w ATtiny zadeklarować za pomocą dyrektywy &B00001111 bo ma tylko 6 pinów .
    teraz program działa jako on/off wg deklarowanych przycisków ale nie działa naprzemiennie czyli jak stan wyjścia wysoki a przycisnę przeciwny przycisk to nie zmienia naprzemiennie wyjścia
    Kod: text
    Zaloguj się, aby zobaczyć kod

    stale się uczę .......
  • #15 10496477
    arktik1
    Poziom 27  
    "nie wiem jak w ATtiny zadeklarować za pomocą dyrektywy &B00001111 bo ma tylko 6 pinów . "
    Zacznij od podstaw, bo ich nie znasz, inaczej nic z tego nie będzie.
    Każdy pin to cyfra po znaku &B, jeśli deklarujesz 3 porty to piszesz &B111 a jeśli 10 to &B1111111111.
    Takie rzeczy są za banalne by rozpisywać się na forum.
  • #16 10496508
    Marek Sp
    Poziom 20  
    arktik1 napisał:
    "nie wiem jak w ATtiny zadeklarować za pomocą dyrektywy &B00001111 bo ma tylko 6 pinów . "
    Zacznij od podstaw, bo ich nie znasz, inaczej nic z tego nie będzie.
    Każdy pin to cyfra po znaku &B, jeśli deklarujesz 3 porty to piszesz &B111 a jeśli 10 to &B1111111111.
    Takie rzeczy są za banalne by rozpisywać się na forum.

    możliwe ale każdy kiedyś zaczyna .
    ostatnia wersja źle działająca tzn . działa na przemian nie działa on/off
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Będę wdzięczny za poprawkę i jeszcze jedno ważne piny wo i sz nigdy razem nie mogą mieć stanu wysokiego jednocześnie
  • #17 10496530
    arktik1
    Poziom 27  
    Moim zdaniem to nigdy nie będzie działać poprawnie, jest po prostu źle napisane.
    Trzeba by program napisać jeszcze raz od początku.
    Nie wiem kto to zrobi.

    Dodano po 4 [minuty]:

    Co to w ogóle ma robić?
REKLAMA