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

Bascom/ATTiny2313 - Sprawdznie programu - pętla po naciśnięciu switcha

DJ_Dexinter 14 Sie 2013 22:51 1548 7
REKLAMA
  • #1 12629120
    DJ_Dexinter
    Poziom 27  
    Witam,


    Napisałem program, który po wciśnięciu switcha (podaniu napięcia na PinB. 1 i PinB. 2 przez kilka sekund) ma migać diodami w kolejności 123 lub 321 w zależności od wciśniętego switcha.

    Po naciśnięciu switcha 1. diody przez cały czas zaświecają się po kole 123 i tak przez cały czas. Przerwać może tylko wciśnięcie switcha numer 2 i włączenie funkcji migania diodami w kolejności 321. Czy program jest napisany poprawnie?

    Spoiler:

    $regfile = "attiny2313.dat"
    $crystal = 1000000


    Config Portb = Input
    Portb = &B0000000
    Config Portd = Output
    Portd = &B0000000

    Do


    If Pinb.0 = 1 Then Gosub 123
    If Pinb.1 = 1 Then Gosub 321



    Loop
    End


    123:
    Do

    Toggle Portd.1
    Waitms 1000
    Toggle Portd.1

    Toggle Portd.2
    Waitms 1000
    Toggle Portd.2

    Toggle Portd.3
    Waitms 1000
    Toggle Portd.3

    Loop

    321:
    Do

    Toggle Portd.3
    Waitms 1000
    Toggle Portd.3

    Toggle Portd.2
    Waitms 1000
    Toggle Portd.2

    Toggle Portd.1
    Waitms 1000
    Toggle Portd.1

    Loop
  • REKLAMA
  • REKLAMA
  • #3 12629401
    DJ_Dexinter
    Poziom 27  
    Mógłbyś napisać w jaki sposób trzeba napisać tenże program, żeby dało się zmieniać poszczególne tryby pracy? Jakbyś umiał zmodyfikować mój program w celu pokazania mi jak to zrobić to byłoby wspaniale.

    W tej chwili nie ważne o piny. Chodzi mi o to w jaki sposób mógłbym to wykonać.
    Dodam że dopiero niedawno zainteresowałem się mikrokontrolerami, ale w elektronice "siedzę" już kilka lat.
  • Pomocny post
    #4 12629467
    xury
    Specjalista automatyka domowa
    No na modyfikację nie mam czasu. Zwłaszcza, że już dawno nic nie pisałem. W dodatku ja nie używam wait (i Tobie też odradzam) co wymaga trochę innego podejścia do pisania programu.
    Mogę jedynie podpowiedzieć, że najlepiej było by skorzystać z przerwań INT0 i INT1 podłączonych pod przyciski. Wtedy przerwanie aktualnego zadania było by możliwe natychmiast. Do zarządzania zdarzeniami najlepiej używać tzw flag. (coś ala markery w automatyce). Flagi to nic innego jak zmienne bitowe. Odpowiednio ustawiając i zerując flagę można przełączać się pomiędzy zadaniami nie używając do tego poleceń typu wait, które blokują procesor na czas swojego odliczania.
  • Pomocny post
    #5 12629855
    Kuniarz
    Moderator Projektowanie
    Możesz zamienić waity na pętle, w których będziesz sprawdzał stan przycisków i odpowiednio reagował.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #6 12630199
    DJ_Dexinter
    Poziom 27  
    Oj, raczej za wysokie progi na moje nogi. Muszę jeszcze poczytać o Bascomie, bo nic z waszych wypowiedzi nie jestem stanie zrozumieć, a co dopiero poprawić wg. nich mój program. Jeżeli ktoś móglby mi to wytłumaczyć w prostszy sposób to byłoby wspaniale.

    A co jeśli użyłbym tego polecenia:
    if portb.1 = 1  then exit do


    A czy w tym wypadku program byłby poprawny:
    $regfile = "attiny2313.dat" 
     $crystal = 1000000 
    
    
     Config Portb = Input 
     Portb = &B0000000 
     Config Portd = Output 
     Portd = &B0000000 
    
    Do 
    
    
     If Pinb.0 = 1 Then Gosub 123 
     If Pinb.1 = 1 Then Gosub 321 
    
    
    
    Loop 
    End 
    
    
     123: 
     Do 
    
     Toggle Portd.1 
     Waitms 1000 
     Toggle Portd.1 
    
     Toggle Portd.2 
     Waitms 1000 
     Toggle Portd.2 
    
     Toggle Portd.3 
     Waitms 1000 
     Toggle Portd.3 
     If Pinb.1 = 1 Then Gosub 321 
     Loop 
    
     321: 
     Do 
    
     Toggle Portd.3 
     Waitms 1000 
     Toggle Portd.3 
    
     Toggle Portd.2 
     Waitms 1000 
     Toggle Portd.2 
    
     Toggle Portd.1 
     Waitms 1000 
     Toggle Portd.1 
     If Pinb.1 = 1 Then Gosub 123


    Loop
  • #7 12630636
    Kuniarz
    Moderator Projektowanie
    Program nie będzie poprawny, bo w czasie działania "Wait" procek nie robi nic, a już na pewno nie sprawdza stanu portu.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #8 12631002
    DJ_Dexinter
    Poziom 27  
    Temat zamykam z powodu uszkodzenia mikrokontrolera - nie mam na czym pracować. Dziękuję za wszystkie odpowiedzi i pozdrawiam.
REKLAMA