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

[attiny2313][bascom]problem z działaniem programu.

komar54 19 Kwi 2010 22:29 1590 4
REKLAMA
  • #1 7981287
    komar54
    Poziom 11  
    Witam.
    Mam pewien problem z działaniem jednego programu. Programowania uczyłem się z książki Góreckiego "Mikrokontrolery dla początkujących" i na tym się opierałem tworząc ten program. Chciałem sobie zmontować rozładowarkę do pakietu i napisałem tak:
    
    
    $crystal = 8000000
    Declare Sub Ustaw(x As Byte)
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down
    
    Config Portd = &B1111100
    Portd.0 = 1
    Portd.1 = 1
    Portd.6 = 1
    
    Ddrb.1 = 0
    
    Dim Pomoc As Single
    Dim Wynik As String * 3
    Dim Nastawa As Byte
    Nastawa = &B00000100
    
    
    Do
    
    Incr Pwm1a
    Waitms 5
    If Pind.0 = 0 Then                                          'właczenie przekaźnika
       Portd.6 = 0
       Waitms 500
       End If
    
    If Pind.1 = 0 Then
    Waitms 500
    Call Ustaw(nastawa)
    End If
    
    
    If Acsr.5 = 0 Then
       Pomoc = Pwm1a
       Pomoc = Pomoc * 0.040625
       Wynik = Fusing(pomoc , "#.##")
       Cls
       Lcd Pwm1a ; " " ; Wynik ; " " ; Nastawa
       If Pwm1a < 76 Then Portd.6 = 1 Else Portd.6 = 0
       Wait 1
       Pwm1a = 0
       End If
    Loop
    
    
    Sub Ustaw(x As Byte)
    
    Cls
    Lcd "Aktualny= " ; X
    Wait 2
    Cls
    Lcd "Nastaw= " ; X
    Do
    
    If Pind.1 = 0 Then
    Waitms 200
    Cls
    Incr X
    Lcd "Nastaw= " ; X
    End If
    
    If Pind.0 = 0 Then
    Cls
    Lcd "Powrot"
    Wait 1
    End Sub
    End If
    Loop
    
    
    
    End
    


    Gdy program jest w tej postaci mierzone napięcie jest poprawnie. Gdy próbuje zmienić nastawienie zmiennej "nastawa" wszystko działa dobrze ale jak wracam do programu głównego program się zacina. Pojawia się na wyświetlaczu "powrót" i tyle.

    edit: teraz zaobserwowałem ze wraca do programu głównego ale nie przenosi
    ustawionej wartości "X" na "Nastawa"

    Dodając na początku $regfile = "attiny2313.dat" program nie dokonuje pomiaru napięcia za to daje się przenieść wartość nastawy z podprogramu do programu głównego. Nie mam już żadnego pomysłu co to może być. Można program zrealizować inaczej ale natknąłem sie na taki błąd i Jestem ciekaw czego to może być wina? pomoże ktoś?
    dodam jeszcze ze w takim zestawieniu wszystko działa prawidłowo z tym ze nic wtedy nie mierze:
    
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    Declare Sub Ustaw(x As Byte)
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down
    
    Config Portd = &B1111100
    Portd.0 = 1
    Portd.1 = 1
    Portd.6 = 1
    
    Ddrb.1 = 0
    
    Dim Pomoc As Single
    Dim Wynik As String * 3
    Dim Nastawa As Byte
    Nastawa = &B00000100
    
    
    Do
    
    Incr Pwm1a
    Waitms 5
    If Pind.0 = 0 Then                                          'właczenie przekaźnika
       Portd.6 = 0
       Waitms 500
       End If
    
    If Pind.1 = 0 Then
    Waitms 500
    Call Ustaw(nastawa)
    End If
    
    
    Lcd Nastawa ; "glowny"
    Waitms 250
    Cls
    
    Loop
    
    
    Sub Ustaw(x As Byte)
    
    Cls
    Lcd "Aktualny= " ; X
    Wait 2
    Cls
    Lcd "Nastaw= " ; X
    Do
    
    If Pind.1 = 0 Then
    Waitms 200
    Cls
    Incr X
    Lcd "Nastaw= " ; X
    End If
    
    If Pind.0 = 0 Then
    Cls
    Lcd "Powrot"
    Wait 1
    End Sub
    End If
    Loop
    
    
    
    End
    

    Mam nadzieje ze nic głupiego nie pokręciłem ale walczę z tym pół dnia i nie mam już siły.
    Pozdrawiam,
    Adam
  • REKLAMA
  • #2 7981351
    Wojtec
    Poziom 12  
    Kolego wrzuć schemat jak to popodłączałeś.
  • REKLAMA
  • #3 7981392
    komar54
    Poziom 11  
    Aż tak jest niezbędny? Musze narysować bo nie zrobiłem tego na płytce. To chwile potrwa.
  • REKLAMA
  • #4 7981499
    grysek
    Poziom 19  
    Sub Ustaw(x As Byte) 
    
    Cls 
    Lcd "Aktualny= " ; X 
    Wait 2 
    Cls 
    Lcd "Nastaw= " ; X 
    Do 
    
    If Pind.1 = 0 Then 
    Waitms 200 
    Cls 
    Incr X 
    Lcd "Nastaw= " ; X 
    End If 
    
    If Pind.0 = 0 Then 
    Cls 
    Lcd "Powrot" 
    Wait 1 
    End Sub 
    End If 
    Loop


    Coś tu pokręciłeś. End Sub powinno być zawsze na koncu podprogramu.
    Zmiast dawać End Sub w IF'ie, użyj tam instrukcji exit do. Co spowoduje opuszczenie pętli do loop i wyjście z procedury.

    Mozna by też użyć pętli while wend. :P

    To tak na pierwszy rzut oka.

    Pozdrawiam :P
  • #5 7981605
    komar54
    Poziom 11  
    Schemat wygląda mniej więcej tak:
    [attiny2313][bascom]problem z działaniem programu.

    Nie rysowałem dokładnego sterowania przekaźnikiem ani podłączenia wyświetlacza.
    Zmieniłem program za radami ale nic to nie zmieniło.

    edit: Zastanawia mnie jeszcze jedno. Wstępnie mam nastawioną wartość Nastawa=&B00000100 a i tak na wyświetlaczu pojawia mi się 0. Przekaźnik też powinienem włączać przyciskiem a załącza się sam jak w zależności którą wersje programu uruchomię. A przecież tu się nic nie zmienia.
REKLAMA