Witam!
Jak wspomniałem, mam drobny problem z odbiorem sygnału lasera. Mianowicie mam w sumie wgrany taki oto kod:
Kod trochę długi jest, ale wkleiłem wszystko, bo nie wiem co powoduje błąd. A mianowicie błąd ten polega na tym, że laser nie reaguje "od razu". W sensie że trzeba poświecić mu 2-4 sekundy żeby alarm się włączył.
Wszystko raczej dobrze zlutowane bo ogólnie rzecz biorąc działa, teraz myślę, że to kwestia poprawki w programie.
Z bascomem i elektroniką nie miałem zbyt wiele do czynienia więc prosiłbym o wsparcie
Jak wspomniałem, mam drobny problem z odbiorem sygnału lasera. Mianowicie mam w sumie wgrany taki oto kod:
Code:
'---------------------------------------------- REJESTRY I CZESTOTLIWOSC ZEGARA
$regfile = "m8def.dat"
$crystal = 8000000
'---------------------------------------------- KONFIGURACJA LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
'---------------------------------------------- KONFIGURACJA MAGISTRALI 1WIRE
Config 1wire = Portb.0
'---------------------------------------------- KONFIGURACJA ODBIORNIKA LASERA
Config Int0 = Low Level
Config Int1 = Low Level
On Int0 Laser
On Int1 Czujnik_swiatla
'---------------------------------------------- KONFIGURACJA DIOD
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.4 = Output
'---------------------------------------------- KONFIGURACJA PRZYCISKU
Config Pind.7 = Input
'---------------------------------------------- ZMIENNUŻYTE W PROGRAMIE
Dim Odczyt As Integer 'ODCZYT DS'A
Dim Tc As Single 'ZMIENNE TEMPERATURY
Dim Tc2 As Single 'ZMIENNE TEMPERATURY
Dim Roznica As Single 'ZMIENNE TEMPERATURY
Dim Czas As Integer
Dim Temp As Integer
Dim Tmp As Bit
Dim Flaga As Bit
Dim Flaga1 As Bit
Declare Sub Alarm(byval A As Byte)
Declare Sub Odczyt
Set Flaga
Set Flaga1
Enable Interrupts
Enable Int0
Enable Int1
'---------------------------------------------- ZNAK STOPNI
Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32
Deflcdchar 1 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26
Set Portd.7
Tmp = 0
'---------------------------------------------- PROGRAM GŁÓWNY
Cls
Cursor Off
Locate 1 , 1
Lcd " TEMPERATURA "
Locate 2 , 1
Lcd " "
Czas = 0
Roznica = 0
Call Odczyt
Tc2 = Tc
Portd.0 = 1
Portd.1 = 1
Portd.4 = 1
Do
If Flaga = 1 Then
Reset Flaga
Enable Int0
Elseif Flaga = 0 Then
Locate 1 , 1
Call Alarm(2)
Enable Int0
End If
If Flaga1 = 1 Then
Reset Flaga1
Enable Int1
Elseif Flaga1 = 0 Then
Locate 1 , 1
Call Alarm(3)
Enable Int1
End If
Call Odczyt
If Czas > 10000 Then
Roznica = Tc2 - Tc
Tc2 = Tc
Czas = 0
End If
Locate 2 , 1
Lcd " " ; Fusing(tc , "#.#") ; Chr(0) ; "C "
If Roznica > 0.5 Then
Call Alarm(1)
Elseif Roznica < -0.5 Then
Call Alarm(1)
End If
Czas = Czas + 1250
Loop
End
Sub Odczyt
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 500
1wreset
1wwrite &HCC
1wwrite &HBE
Temp = 1wread(2)
Tc = Temp
Tc = Tc * 10
Tc = Tc \ 16
Tc = Tc \ 10
End Sub
Sub Alarm(byval A As Byte)
Select Case A
Case 1:
Cls
Locate 1 , 1
Lcd "UWAGA TEMP"
Locate 2 , 1
Lcd " " ; Fusing(tc , "#.#") ; Chr(0) ; "C "
Case 2:
Cls
Locate 1 , 1
Lcd "UWAGA LASER"
Locate 2 , 1
Lcd " " ; Fusing(tc , "#.#") ; Chr(0) ; "C "
Case 3:
Cls
Locate 1 , 1
Lcd "UWAGA SWIATLO"
Locate 2 , 1
Lcd " " ; Fusing(tc , "#.#") ; Chr(0) ; "C "
End Select
Do
Sound , Portb.1 , 100 , 200
Portd.0 = 0
Waitms 100
Portd.0 = 1
Sound , Portb.1 , 100 , 200
Portd.1 = 0
Waitms 100
Portd.1 = 1
Sound , Portb.1 , 100 , 200
Portd.4 = 0
Waitms 100
Portd.4 = 1
If Pind.7 = 0 Then
Waitms 25
If Pind.7 = 0 Then
Locate 1 , 1
Lcd "ALARM WYLACZONY"
Waitms 250
Tmp = 1
End If
End If
If Tmp = 1 Then
Tmp = 0
Exit Do
End If
Loop
Waitms 450
Sound , Portb.1 , 100 , 200
Locate 1 , 1
Lcd " TEMPERATURA "
Roznica = 0
Portd.0 = 1
Portd.1 = 1
Portd.4 = 1
End Sub
Laser:
Disable Int0
Enable Interrupts
Set Flaga
Return
Czujnik_swiatla:
Disable Int1
Enable Interrupts
Set Flaga1
Return
Kod trochę długi jest, ale wkleiłem wszystko, bo nie wiem co powoduje błąd. A mianowicie błąd ten polega na tym, że laser nie reaguje "od razu". W sensie że trzeba poświecić mu 2-4 sekundy żeby alarm się włączył.
Wszystko raczej dobrze zlutowane bo ogólnie rzecz biorąc działa, teraz myślę, że to kwestia poprawki w programie.
Z bascomem i elektroniką nie miałem zbyt wiele do czynienia więc prosiłbym o wsparcie
