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:
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:
Mam nadzieje ze nic głupiego nie pokręciłem ale walczę z tym pół dnia i nie mam już siły.
Pozdrawiam,
Adam
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