Srccodetst

(Difference between revisions)
Jump to: navigation, search
Line 1: Line 1:
 
<source lang="bascomavr">
 
<source lang="bascomavr">
 
'--------------------------------------------------------------
 
'--------------------------------------------------------------
' Thomas Jensen | uCtrl.net
+
'                   Thomas Jensen | uCtrl.net
 
'--------------------------------------------------------------
 
'--------------------------------------------------------------
' file: AVR_FTU_v_2.0
+
' file: KEYPAD_v.1.0
' date: 15/03/2007
+
' date: 17/11/2007
 
'--------------------------------------------------------------
 
'--------------------------------------------------------------
$regfile = "M8def.dat"
+
$regfile = "attiny2313.dat"
$crystal = 1000000
+
$crystal = 8000000
 +
Config Portd = Input
 +
Config Portb = Output
 
Config Watchdog = 1024
 
Config Watchdog = 1024
Config Portb.0 = Output
 
Config Portb.1 = Output
 
Config Portb.2 = Output
 
Config Portb.3 = Input
 
Config Portb.4 = Input
 
Config Portb.5 = Input
 
Config Portb.6 = Input
 
Config Portb.7 = Input
 
Dim Lifesignal As Integer
 
Dim W As Word , Volt As Word , Temp As Word
 
Dim C_vifte1 As Byte , C_vifte2 As Byte , Set_fan As Byte
 
Dim C_alarm1 As Byte , C_alarm2 As Byte , Set_alarm As Byte
 
Dim Alarmled As Integer , Cls_timer As Integer , Alarm_timer As Integer
 
Dim Eeprom_save As Integer , Eeprom_fan As Eram Byte , Eeprom_alarm As Eram Byte
 
Dim Alarm_timer2 As Integer , Fan_speed As Byte , Temp_timer As Byte
 
Dim Fan_delay As Integer , Fan_delay2 As Integer
 
Dim Fan_timer As Integer , Fan_timer2 As Integer
 
  
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
+
Dim Lifesignal As Byte , Number As Byte , Row As Byte , Button As Byte
Ddrb.1 = 1
+
Dim Code1 As Integer , Code2 As Integer , Code3 As Byte , Code4 As Byte , Nr As Byte
Ddrb.2 = 1
+
Dim Redled As Byte , Greenled As Byte , Amberled As Byte , Code As Integer
Pwm1a = 255
+
Dim Code_p As Integer , Kanal1 As Byte , Kanal2 As Byte , Timeout As Byte , Feil As Integer
Pwm1b = 255
+
Dim Eeprom As Eram Integer , Program As Byte , Feil_a As Byte
  
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.6 , Rs = Portd.7
+
'Inputs
Config Lcd = 16 * 2
+
'PD2 Keypad R1
 +
'PD3 Keypad R2
 +
'PD4 Keypad R3
 +
'PD5 Keypad R4
  
Config Adc = Single , Prescaler = Auto , Reference = Avcc
+
'Outputs
Start Adc
+
'PB0 Keypad K1
 +
'PB1 Keypad K2
 +
'PB2 Keypad K3
 +
'PB3 Mode 1 signal
 +
'PB4 Mode 2 signal
 +
'PB5 Green LED indicator
 +
'PB6 Red LED indicator
 +
'PB7 Lifesignal
  
Lifesignal = 21
+
Code_p = Eeprom                                            'Get stored code
Alarmled = 0
+
If Code_p < 0 Then Code_p = 1234                            'If no code use default
Eeprom_save = 0
+
Number = 255
C_vifte1 = 0
+
C_vifte2 = 0
+
C_alarm1 = 0
+
C_alarm2 = 0
+
Cls_timer = 50
+
Alarm_timer = 0
+
Fan_speed = 0
+
Fan_delay = 0
+
Fan_timer = 0
+
Temp_timer = 10
+
  
'get eeprom values
+
'Boot
Set_fan = Eeprom_fan
+
Portb = 0
If Set_fan > 50 Or Set_fan < 10 Then Set_fan = 30
+
Set_alarm = Eeprom_alarm
+
If Set_alarm > 50 Or Set_alarm < 10 Then Set_alarm = 32
+
 
+
Cls
+
Cursor Off
+
Deflcdchar 1 , 32 , 32 , 32 , 7 , 4 , 6 , 4 , 7 'e-sign
+
Deflcdchar 2 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 'blank
+
 
+
'turn off alarm
+
Pwm1b = 0
+
 
+
Locate 1 , 1
+
Lcd "Fan & Temp Unit!"
+
Locate 2 , 5
+
Lcd "SW v.2.0"
+
Waitms 2000
+
Cls
+
Locate 1 , 1
+
Lcd "uCtrl.net"
+
Locate 2 , 1
+
Lcd "System start =)"
+
Waitms 2000
+
Cls
+
Locate 1 , 5
+
Lcd "F:"
+
Locate 1 , 11
+
Lcd "A:"
+
Locate 2 , 1
+
Lcd "Fan:"
+
Locate 1 , 1
+
Lcd "?C"
+
 
+
'turn off alarm
+
Pwm1b = 255
+
  
 
Start Watchdog
 
Start Watchdog
  
 
Main:
 
Main:
'cls timer
+
'Read keypad
If Cls_timer > 0 Then Decr Cls_timer
+
If Button = 0 And Feil = 0 And Number = 255 Then
If Cls_timer = 0 Then
+
Cls
+
Locate 1 , 1
+
Lcd Temp ; "C"
+
Locate 1 , 5
+
Lcd "F:"
+
Locate 1 , 11
+
Lcd "A:"
+
Locate 2 , 1
+
Lcd "Fan:"
+
Cls_timer = 50
+
End If
+
  
'check temp
+
If Row = 0 Then                                             'Keyboard row 1
If Temp_timer > 0 Then Decr Temp_timer
+
  Portb.0 = 1
If Temp_timer = 0 Then
+
  If Pind.5 = 1 Then Number = 10
W = Getadc(0)
+
  If Pind.4 = 1 Then Number = 7
Volt = W * 5
+
  If Pind.3 = 1 Then Number = 4
Temp = Volt / 10
+
  If Pind.2 = 1 Then Number = 1
Temp_timer = 100
+
  Portb.0 = 0
End If
+
  End If
  
'show set points
+
If Row = 1 Then                                            'Keyboard row 2
Locate 1 , 7
+
  Portb.1 = 1
Lcd Set_fan ; "C"
+
  If Pind.5 = 1 Then Number = 0
Locate 1 , 13
+
  If Pind.4 = 1 Then Number = 8
Lcd Set_alarm ; "C"
+
  If Pind.3 = 1 Then Number = 5
 +
  If Pind.2 = 1 Then Number = 2
 +
  Portb.1 = 0
 +
  End If
  
'set fan
+
If Row = 2 Then                                            'Keyboard row 3
If Fan_delay = 0 Then Fan_speed = 0
+
  Portb.2 = 1
 +
  If Pind.5 = 1 Then Number = 11
 +
  If Pind.4 = 1 Then Number = 9
 +
  If Pind.3 = 1 Then Number = 6
 +
  If Pind.2 = 1 Then Number = 3
 +
  Portb.2 = 0
 +
  End If
  
If Temp < Set_fan Then
+
Row = Row + 1                                              'Next row
If Fan_delay = 0 Then Fan_speed = 0
+
If Row > 2 Then Row = 0
Fan_timer = 0
+
End If
End If
+
  
If Temp = Set_fan And Fan_speed <> 3 Then
+
'Reset button status
Fan_speed = 1
+
Portb.0 = 1
Fan_delay = 600
+
Portb.1 = 1
If Fan_timer < 300 Then Incr Fan_timer
+
Portb.2 = 1
If Fan_timer = 300 Then
+
If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 0 Then Button = 0
Fan_speed = 2
+
Portb.0 = 0
Fan_delay = 600
+
Portb.1 = 0
End If
+
Portb.2 = 0
End If
+
  
If Temp > Set_fan Then
+
'Get code
Fan_speed = 3
+
If Number <> 255 Then
Fan_delay = 600
+
Button = 1
Fan_timer = 300
+
Select Case Nr
End If
+
  Case 0                                                  'Digit 1
 +
  Code1 = Number
 +
  Code1 = Code1 * 1000
 +
  Code = Code1 + Code
 +
  Amberled = 4
 +
  Case 1                                                  'Digit 2
 +
  Code2 = Number
 +
  Code2 = Code2 * 100
 +
  Code = Code2 + Code
 +
  Amberled = 4
 +
  Case 2                                                  'Digit 3
 +
  Code3 = Number
 +
  Code3 = Code3 * 10
 +
  Code = Code3 + Code
 +
  Amberled = 4
 +
  Case 3                                                  'Digit 4
 +
  Code4 = Number
 +
  Code = Code4 + Code
 +
  Amberled = 4
  
'fan timers
+
  Case 4
If Fan_delay > 0 Then Decr Fan_delay
+
  If Program = 1 Then                                      'Program new code
 +
      Select Case Number
 +
        Case 11                                            'Accept
 +
        Code_p = Code
 +
        Eeprom = Code_p
 +
        Greenled = 60
 +
        Case Else                                          'Reject
 +
        Redled = 30
 +
        End Select
 +
      Number = 255
 +
      Program = 0
 +
      Gosub Reset_code_read
 +
      Goto Main
 +
      End If
 +
  If Code = Code_p Then                                   'Code correct
 +
  Feil_a = 0
 +
      Select Case Number
 +
        Case 0                                            'New code
 +
        Program = 1
 +
        Amberled = 40
 +
        Case 10                                            'Channel 1
 +
        Kanal1 = 20
 +
        Greenled = 20
 +
        Case 11                                            'Channel 2
 +
        Kanal2 = 20
 +
        Greenled = 40
 +
        Case Else                                          'Reject
 +
        Redled = 30
 +
        End Select
 +
  Else                                                    'Code failed
 +
      Redled = 30
 +
      Feil_a = Feil_a + 1
 +
  End If
 +
  Timeout = 0
 +
  Number = 255
 +
  Gosub Reset_code_read
 +
  Goto Main
 +
End Select
 +
Nr = Nr + 1
 +
Number = 255
 +
End If
  
'set fan speed
+
'Timeout when entering code
If Pinb.5 = 0 Then Fan_speed = Fan_speed + 2
+
If Nr > 0 And Timeout = 0 Then Timeout = 201
If Fan_speed > 3 Then Fan_speed = 3
+
If Timeout > 0 Then Timeout = Timeout - 1
If Fan_speed = 0 Then Pwm1a = 255
+
If Timeout = 1 And Nr <> 0 Then
If Fan_speed = 1 Then Pwm1a = 170
+
  Gosub Reset_code_read
If Fan_speed = 2 Then Pwm1a = 105
+
  Number = 255
If Fan_speed = 3 Then Pwm1a = 0
+
  Redled = 30
Locate 2 , 5
+
  End If
Lcd Fan_speed
+
If Pinb.5 = 0 Then
+
Locate 2 , 7
+
Lcd "F"
+
End If
+
  
'set fan temp
+
'Error handling, 3 wrong codes
If Pinb.3 = 1 Then C_vifte1 = 0
+
If Feil_a > 3 And Feil = 0 Then
If Pinb.3 = 0 And C_vifte1 = 0 Then
+
  Feil = 1200
C_vifte1 = 1
+
  Feil_a = 0
Set_fan = Set_fan + 1
+
  End If
Eeprom_save = 3000
+
If Feil > 0 And Redled = 0 Then Redled = 4
End If
+
If Feil > 0 Then Feil = Feil - 1
If Pinb.4 = 1 Then C_vifte2 = 0
+
If Pinb.4 = 0 And C_vifte2 = 0 Then
+
C_vifte2 = 1
+
Set_fan = Set_fan - 1
+
Eeprom_save = 3000
+
End If
+
  
'set alarm temp
+
'AmberLED
If Pinb.6 = 1 Then C_alarm1 = 0
+
If Amberled > 0 Then
If Pinb.6 = 0 And C_alarm1 = 0 Then
+
  Greenled = Amberled
C_alarm1 = 1
+
  Redled = Amberled
Set_alarm = Set_alarm + 1
+
  Amberled = 0
Eeprom_save = 3000
+
  End If
End If
+
If Pinb.7 = 1 Then C_alarm2 = 0
+
If Pinb.7 = 0 And C_alarm2 = 0 Then
+
C_alarm2 = 1
+
Set_alarm = Set_alarm - 1
+
Eeprom_save = 3000
+
End If
+
  
'set main temp_alarm
+
'GreenLED
If Temp >= Set_alarm And Alarm_timer < 300 Then Alarm_timer = Alarm_timer + 1
+
If Greenled > 2 Then Portb.5 = 1
If Alarm_timer = 300 And Alarmled = 0 Then Alarmled = 6
+
If Greenled = 2 Then Portb.5 = 0
If Temp < Set_alarm Then Alarm_timer = 0
+
If Greenled > 0 Then Greenled = Greenled - 1
  
'alarmled
+
'RedLED
If Alarmled > 0 Then Alarmled = Alarmled - 1
+
If Redled > 2 Then Portb.6 = 1
If Alarmled = 4 Then Pwm1b = 0
+
If Redled = 2 Then Portb.6 = 0
If Alarmled = 1 Then Pwm1b = 255
+
If Redled > 0 Then Redled = Redled - 1
  
'eeprom save
+
'Channel1
If Eeprom_save > 0 Then
+
If Kanal1 = 20 Then Portb.3 = 1
Eeprom_save = Eeprom_save - 1
+
If Kanal1 = 1 Then Portb.3 = 0
Locate 1 , 16
+
If Kanal1 > 0 Then Kanal1 = Kanal1 - 1
Lcd Chr(1)
+
End If
+
If Eeprom_save = 1 Then
+
Eeprom_fan = Set_fan
+
Eeprom_alarm = Set_alarm
+
Locate 1 , 16
+
Lcd Chr(2)
+
End If
+
  
'show timers
+
'Channel2
Locate 2 , 15
+
If Kanal2 = 20 Then Portb.4 = 1
Alarm_timer2 = Alarm_timer / 10
+
If Kanal2 = 1 Then Portb.4 = 0
Lcd Alarm_timer2
+
If Kanal2 > 0 Then Kanal2 = Kanal2 - 1
Locate 2 , 9
+
Fan_delay2 = Fan_delay / 10
+
Lcd Fan_delay2
+
Locate 2 , 12
+
Fan_timer2 = Fan_timer / 10
+
Lcd Fan_timer2
+
  
'lifesignal
+
'Lifesignal
 
If Lifesignal > 0 Then Lifesignal = Lifesignal - 1
 
If Lifesignal > 0 Then Lifesignal = Lifesignal - 1
If Lifesignal = 6 Then Portb.0 = 1
+
If Lifesignal = 12 Then Portb.7 = 1
If Lifesignal = 1 Then Portb.0 = 0
+
If Lifesignal = 1 Then Portb.7 = 0
If Lifesignal = 0 Then Lifesignal = 21
+
If Lifesignal = 0 Then Lifesignal = 41
  
 
Reset Watchdog
 
Reset Watchdog
Waitms 100
+
Waitms 50
Goto Main
+
Goto Main                                                   'Loop cycle
 +
End
 +
 
 +
Reset_code_read:                                            'Reset code param.
 +
  Nr = 0
 +
  Code = 0
 +
  Code1 = 0
 +
  Code2 = 0
 +
  Code3 = 0
 +
  Code4 = 0
 +
Return
 
End
 
End
  
  
 
</source>
 
</source>

Revision as of 18:05, 17 September 2015

'--------------------------------------------------------------
'                   Thomas Jensen | uCtrl.net
'--------------------------------------------------------------
'  file: KEYPAD_v.1.0
'  date: 17/11/2007
'--------------------------------------------------------------
$regfile = "attiny2313.dat"
$crystal = 8000000
Config Portd = Input
Config Portb = Output
Config Watchdog = 1024
 
Dim Lifesignal As Byte , Number As Byte , Row As Byte , Button As Byte
Dim Code1 As Integer , Code2 As Integer , Code3 As Byte , Code4 As Byte , Nr As Byte
Dim Redled As Byte , Greenled As Byte , Amberled As Byte , Code As Integer
Dim Code_p As Integer , Kanal1 As Byte , Kanal2 As Byte , Timeout As Byte , Feil As Integer
Dim Eeprom As Eram Integer , Program As Byte , Feil_a As Byte
 
'Inputs
'PD2 Keypad R1
'PD3 Keypad R2
'PD4 Keypad R3
'PD5 Keypad R4
 
'Outputs
'PB0 Keypad K1
'PB1 Keypad K2
'PB2 Keypad K3
'PB3 Mode 1 signal
'PB4 Mode 2 signal
'PB5 Green LED indicator
'PB6 Red LED indicator
'PB7 Lifesignal
 
Code_p = Eeprom                                             'Get stored code
If Code_p < 0 Then Code_p = 1234                            'If no code use default
Number = 255
 
'Boot
Portb = 0
 
Start Watchdog
 
Main:
'Read keypad
If Button = 0 And Feil = 0 And Number = 255 Then
 
If Row = 0 Then                                             'Keyboard row 1
   Portb.0 = 1
   If Pind.5 = 1 Then Number = 10
   If Pind.4 = 1 Then Number = 7
   If Pind.3 = 1 Then Number = 4
   If Pind.2 = 1 Then Number = 1
   Portb.0 = 0
   End If
 
If Row = 1 Then                                             'Keyboard row 2
   Portb.1 = 1
   If Pind.5 = 1 Then Number = 0
   If Pind.4 = 1 Then Number = 8
   If Pind.3 = 1 Then Number = 5
   If Pind.2 = 1 Then Number = 2
   Portb.1 = 0
   End If
 
If Row = 2 Then                                             'Keyboard row 3
   Portb.2 = 1
   If Pind.5 = 1 Then Number = 11
   If Pind.4 = 1 Then Number = 9
   If Pind.3 = 1 Then Number = 6
   If Pind.2 = 1 Then Number = 3
   Portb.2 = 0
   End If
 
Row = Row + 1                                               'Next row
If Row > 2 Then Row = 0
End If
 
'Reset button status
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 0 Then Button = 0
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
 
'Get code
If Number <> 255 Then
Button = 1
Select Case Nr
   Case 0                                                   'Digit 1
   Code1 = Number
   Code1 = Code1 * 1000
   Code = Code1 + Code
   Amberled = 4
   Case 1                                                   'Digit 2
   Code2 = Number
   Code2 = Code2 * 100
   Code = Code2 + Code
   Amberled = 4
   Case 2                                                   'Digit 3
   Code3 = Number
   Code3 = Code3 * 10
   Code = Code3 + Code
   Amberled = 4
   Case 3                                                   'Digit 4
   Code4 = Number
   Code = Code4 + Code
   Amberled = 4
 
   Case 4
   If Program = 1 Then                                      'Program new code
      Select Case Number
         Case 11                                            'Accept
         Code_p = Code
         Eeprom = Code_p
         Greenled = 60
         Case Else                                          'Reject
         Redled = 30
         End Select
      Number = 255
      Program = 0
      Gosub Reset_code_read
      Goto Main
      End If
   If Code = Code_p Then                                    'Code correct
   Feil_a = 0
      Select Case Number
         Case 0                                             'New code
         Program = 1
         Amberled = 40
         Case 10                                            'Channel 1
         Kanal1 = 20
         Greenled = 20
         Case 11                                            'Channel 2
         Kanal2 = 20
         Greenled = 40
         Case Else                                          'Reject
         Redled = 30
         End Select
   Else                                                     'Code failed
      Redled = 30
      Feil_a = Feil_a + 1
   End If
   Timeout = 0
   Number = 255
   Gosub Reset_code_read
   Goto Main
End Select
Nr = Nr + 1
Number = 255
End If
 
'Timeout when entering code
If Nr > 0 And Timeout = 0 Then Timeout = 201
If Timeout > 0 Then Timeout = Timeout - 1
If Timeout = 1 And Nr <> 0 Then
   Gosub Reset_code_read
   Number = 255
   Redled = 30
   End If
 
'Error handling, 3 wrong codes
If Feil_a > 3 And Feil = 0 Then
   Feil = 1200
   Feil_a = 0
   End If
If Feil > 0 And Redled = 0 Then Redled = 4
If Feil > 0 Then Feil = Feil - 1
 
'AmberLED
If Amberled > 0 Then
   Greenled = Amberled
   Redled = Amberled
   Amberled = 0
   End If
 
'GreenLED
If Greenled > 2 Then Portb.5 = 1
If Greenled = 2 Then Portb.5 = 0
If Greenled > 0 Then Greenled = Greenled - 1
 
'RedLED
If Redled > 2 Then Portb.6 = 1
If Redled = 2 Then Portb.6 = 0
If Redled > 0 Then Redled = Redled - 1
 
'Channel1
If Kanal1 = 20 Then Portb.3 = 1
If Kanal1 = 1 Then Portb.3 = 0
If Kanal1 > 0 Then Kanal1 = Kanal1 - 1
 
'Channel2
If Kanal2 = 20 Then Portb.4 = 1
If Kanal2 = 1 Then Portb.4 = 0
If Kanal2 > 0 Then Kanal2 = Kanal2 - 1
 
'Lifesignal
If Lifesignal > 0 Then Lifesignal = Lifesignal - 1
If Lifesignal = 12 Then Portb.7 = 1
If Lifesignal = 1 Then Portb.7 = 0
If Lifesignal = 0 Then Lifesignal = 41
 
Reset Watchdog
Waitms 50
Goto Main                                                   'Loop cycle
End
 
Reset_code_read:                                            'Reset code param.
   Nr = 0
   Code = 0
   Code1 = 0
   Code2 = 0
   Code3 = 0
   Code4 = 0
Return
End
Personal tools
Namespaces
Variants
Actions
Navigation
Language