Panowie to jest mój pierwszy program w Bascomie, więc nie zabijajcie mnie od razu.
Wiem roi się tam od GOTO , wiem to zbrodnia ale tym zajmę się później. Teraz powiem o co chodzi.
To jest program :
$regfile = "attiny13.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 16
$framesize = 8
'$sim
'ustawienie PB2 i PB3 jako wejscie i PB1 jako wyjscie
Config Pinb.1 = Output
Config Pinb.2 = Input
Config Pinb.3 = Input
Dim W As Word 'zmienna W przechowuje wartosc napiecia
Dim B As Byte 'licznik klikow
Dim C As Byte 'zmienna pomocnicza
Dim L As Byte 'licznik trybu pracy
Dim P As Byte 'wartosc pwm
Config Adc = Single , Prescaler = Auto , Reference = Internal 'konfiguracja przetwoenika ADC Vref=1.1V
Config Timer0 = Pwm , Prescale = 1 , Compare B Pwm = Clear Down 'PWM
Waitms 500
Start Adc
W = Getadc(1)
Start Adc
W = Getadc(1) 'odczyt napiecia na kanale 1 porcie PB2 czyli ADC1
Stop Adc
If W < 614 Then
Pwm0b = 255
Waitms 500
Pwm0b = 100
Waitms 500
Pwm0b = 255
Waitms 500
Pwm0b = 100
Waitms 500
Pwm0b = 255
End If
P = 255 'początkowa wartosc PWM
L = 1 'tryb FULL
Do
Pwm: 'główna pętla
Pwm0b = P 'wypelnienie PWM
If Pinb.3 = 0 Then Goto Zmiana 'sprawdzenie klika
If L = 3 Then 'STROBO
Waitms 500
Pwm0b = 155
Waitms 500
End If
Loop
Zmiana: ' Sprawdzanie Klików
B = 0 'Licznik Klików
Goto Zegar
Zegar: ' Pomiar Czasu Klika
C = 0
Do
If Pinb.3 = 1 Then Goto Pomiar
Waitms 2
Incr C
Loop Until C = 150 'max czas klika
Goto Pwm
Pomiar: 'czas przerwy miedzy klikami
If C < 5 Then Goto Pwm 'pojedynczy klik wróć do głównego programu
B = B + 1
Waitms 4
C = 0
Do
If Pinb.3 = 0 Then Goto Zegar ' kolejny klik
Waitms 2
Incr C
Loop Until C = 25
If B = 2 Then
Goto Tryb 'wybor trybu jesli sa 2 kliki
End If
Goto Pwm 'powrot do pwm jesli kliki sa <>2
Tryb: 'tryb pracy FULL, LIGHT, STROB
L = L + 1 'licznik trybu pracy
If L > 3 Then L = 1
If L = 1 Then P = 255 ' Tryb Full
If L = 2 Then P = 125 'tryb LIGHT
Goto Pwm
End 'end program
Po uruchomieniu dioda mignie 3 razy i to wszystko co widać gołym okiem.
Jak puszczam program na symulatorze to reaguje na poziom napięcia na PB2 bo pomija MIGNIĘCIA przy odpowiednio wysokim napięciu na wejściu.
Reaguje na zmiany na PB3 bo zmienia tryb czyli zmienia się wartość L i wartość PWM0B.
Natomiast na wyjściu PB1 na symulatorze nic się nie dzieje , nie zapala się dioda.
W układzie rzeczywistym jak wspomniałem dioda mignie 3 razy i koniec. Na wyjściu PB1 jest 0V. Natomiast na wejściu PB3 czyli tam gdzie dokonywany ma być pomiar czy jest 1 czy 0 (kliknięcia wyłącznika) napięcie skacze pomiedzy 0V a 1.4V.
Proszę o pomoc.
A to schemat układu

Wiem roi się tam od GOTO , wiem to zbrodnia ale tym zajmę się później. Teraz powiem o co chodzi.
To jest program :
Code: basic4gl
$crystal = 8000000
$hwstack = 32
$swstack = 16
$framesize = 8
'$sim
'ustawienie PB2 i PB3 jako wejscie i PB1 jako wyjscie
Config Pinb.1 = Output
Config Pinb.2 = Input
Config Pinb.3 = Input
Dim W As Word 'zmienna W przechowuje wartosc napiecia
Dim B As Byte 'licznik klikow
Dim C As Byte 'zmienna pomocnicza
Dim L As Byte 'licznik trybu pracy
Dim P As Byte 'wartosc pwm
Config Adc = Single , Prescaler = Auto , Reference = Internal 'konfiguracja przetwoenika ADC Vref=1.1V
Config Timer0 = Pwm , Prescale = 1 , Compare B Pwm = Clear Down 'PWM
Waitms 500
Start Adc
W = Getadc(1)
Start Adc
W = Getadc(1) 'odczyt napiecia na kanale 1 porcie PB2 czyli ADC1
Stop Adc
If W < 614 Then
Pwm0b = 255
Waitms 500
Pwm0b = 100
Waitms 500
Pwm0b = 255
Waitms 500
Pwm0b = 100
Waitms 500
Pwm0b = 255
End If
P = 255 'początkowa wartosc PWM
L = 1 'tryb FULL
Do
Pwm: 'główna pętla
Pwm0b = P 'wypelnienie PWM
If Pinb.3 = 0 Then Goto Zmiana 'sprawdzenie klika
If L = 3 Then 'STROBO
Waitms 500
Pwm0b = 155
Waitms 500
End If
Loop
Zmiana: ' Sprawdzanie Klików
B = 0 'Licznik Klików
Goto Zegar
Zegar: ' Pomiar Czasu Klika
C = 0
Do
If Pinb.3 = 1 Then Goto Pomiar
Waitms 2
Incr C
Loop Until C = 150 'max czas klika
Goto Pwm
Pomiar: 'czas przerwy miedzy klikami
If C < 5 Then Goto Pwm 'pojedynczy klik wróć do głównego programu
B = B + 1
Waitms 4
C = 0
Do
If Pinb.3 = 0 Then Goto Zegar ' kolejny klik
Waitms 2
Incr C
Loop Until C = 25
If B = 2 Then
Goto Tryb 'wybor trybu jesli sa 2 kliki
End If
Goto Pwm 'powrot do pwm jesli kliki sa <>2
Tryb: 'tryb pracy FULL, LIGHT, STROB
L = L + 1 'licznik trybu pracy
If L > 3 Then L = 1
If L = 1 Then P = 255 ' Tryb Full
If L = 2 Then P = 125 'tryb LIGHT
Goto Pwm
End 'end program
Code: basic4gl
Po uruchomieniu dioda mignie 3 razy i to wszystko co widać gołym okiem.
Jak puszczam program na symulatorze to reaguje na poziom napięcia na PB2 bo pomija MIGNIĘCIA przy odpowiednio wysokim napięciu na wejściu.
Reaguje na zmiany na PB3 bo zmienia tryb czyli zmienia się wartość L i wartość PWM0B.
Natomiast na wyjściu PB1 na symulatorze nic się nie dzieje , nie zapala się dioda.
W układzie rzeczywistym jak wspomniałem dioda mignie 3 razy i koniec. Na wyjściu PB1 jest 0V. Natomiast na wejściu PB3 czyli tam gdzie dokonywany ma być pomiar czy jest 1 czy 0 (kliknięcia wyłącznika) napięcie skacze pomiedzy 0V a 1.4V.
Proszę o pomoc.
A to schemat układu
