Witam,
Zaprojektowałem sterownik, który docelowo ma służyć do włączania różnych urządzeń elektrycznych.
Włączanie ma odbywać się za pomocą klawiatury matrycowej 4x4 oraz/lub pilota (RC5).
- Zasilanie układu to +5V z zasilacza stabilizowanego (dlatego w projekcie nie ma stabilizacji napięcia zasilającego).
- Dioda podłączona do mikrokontrolera ma spełniać rolę "diody diagnostycznej" np. zamigać kilka razy po zmianie stanu któregoś z wyjść uC.
- Odbiornik podczerwieni do TSOP1736.
- Wyjścia ULN'a będę podłączone do przekaźników z cewką 5V
Zwracam się z prośbą o zweryfikowanie mojego projektu (czy nie ma jakiś "wad konstrukcyjnych") oraz o pomysły na jego usprawnienie (głównie chodzi o kod programu).
Proszę o wyrozumiałość, gdyż dopiero zaczynam swoją przygodę z mikrokontrolerami
Zaprojektowałem sterownik, który docelowo ma służyć do włączania różnych urządzeń elektrycznych.
Włączanie ma odbywać się za pomocą klawiatury matrycowej 4x4 oraz/lub pilota (RC5).
- Zasilanie układu to +5V z zasilacza stabilizowanego (dlatego w projekcie nie ma stabilizacji napięcia zasilającego).
- Dioda podłączona do mikrokontrolera ma spełniać rolę "diody diagnostycznej" np. zamigać kilka razy po zmianie stanu któregoś z wyjść uC.
- Odbiornik podczerwieni do TSOP1736.
- Wyjścia ULN'a będę podłączone do przekaźników z cewką 5V
Zwracam się z prośbą o zweryfikowanie mojego projektu (czy nie ma jakiś "wad konstrukcyjnych") oraz o pomysły na jego usprawnienie (głównie chodzi o kod programu).
Proszę o wyrozumiałość, gdyż dopiero zaczynam swoją przygodę z mikrokontrolerami
' --- Schemat polaczen ---
' TSOP1736 ( input ) -> D.2 (INT0)
' Dioda diagnostyczna ( output ) -> D.7
' Klawiatura 4x4 ( input ) -> B.0 - B.7
' ULN2803 ( output ) -> C.0 , C.1 , C.2 , C.3 , C.4 , C.5 , D.5 , D.6
$regfile "m8def.dat"
$crystal = 1000000
Config Rc5 = Pind.2
' klawiatura matrycowa
Config Kbd = Portb , Debounce = 500 , Delay = 100
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.4 = Output
Config Portc.5 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Out1 Alias Portc.0
Out2 Alias Portc.1
Out3 Alias Portc.2
Out4 Alias Portc.3
Out5 Alias Portc.4
Out6 Alias Portc.5
Out7 Alias Portd.5
Out8 Alias Portd.6
Config Portd.7 = Output
Diagled Alias Portd.7
Enable Interrupts
' Zmienne
Dim Address As Byte
Dim Command As Byte
Dim Key As Byte
Dim Dled As Bit
Dim Dledcount As Integer
Dim Temp As Integer
' Deklaracje procedur
Declare Sub Allon
Declare Sub Alloff
Declare Sub Diag
' Glowny program
Gosub Alloff
Do
Key = Getkbd()
If Key <> 16 Then
Gosub Diag
Select Case Key
Case 1 : Out1 = Not Out1
Case 2 : Out2 = Not Out2
Case 3 : Out3 = Not Out3
Case 4 : Out4 = Not Out4
Case 5 : Out5 = Not Out5
Case 6 : Out6 = Not Out6
Case 7 : Out7 = Not Out7
Case 8 : Out8 = Not Out8
Case 10 : Gosub Allon
Case 12 : Gosub Alloff
End Select
End If
Getrc5(address , Command)
If Address = 1 Then
Command = Command And &B01111111
Gosub Diag
Select Case Command
Case 1 : Out1 = Not Out1
Case 2 : Out2 = Not Out2
Case 3 : Out3 = Not Out3
Case 4 : Out4 = Not Out4
Case 5 : Out5 = Not Out5
Case 6 : Out6 = Not Out6
Case 7 : Out7 = Not Out7
Case 8 : Out8 = Not Out8
Case 9 : Gosub Allon
Case 10 : Gosub Alloff
End Select
End If
Loop
End
'KONIEC GLOWNEGO PROGRAMU
'dioda diagnostyczna
' zmiana stanu diody w co 25 wywolaniu procedury
Sub Diag
If Dledcount = 0 Then
If Dled = 0 Then
Dledcount = 1000
End If
Dled = Not Dled
End If
If Dled = 1 Then
Temp = Dledcount Mod 25
If Temp = 0 Then
Diagled = Not Diagled
End If
End If
Decr Dledcount
End Sub
'wszystkie wlaczone
Sub Allon
Reset Out1 : Reset Out2 : Reset Out3 : Reset Out4 : Reset Out5 : Reset Out6 : Reset Out7 : Reset Out8
End Sub
'wszystkie wylaczone
Sub Alloff
Set Out1 : Set Out2 : Set Out3 : Set Out4 : Set Out5 : Set Out6 : Set Out7 : Set Out8
End Sub