pcleats
08-31-2007, 09:32 PM
Hello all,
I just got my NEW propeller kit http://forums.parallax.com/images/smilies/smilewinkgrin.gif·and now I am going to try and convert the code I have for a project to the propeller chip. I figured I would start with·this forum, and get some help.
I have 2 questions I hope someone can help me with
The chip I am using is a ZX-24
Question #1:
On my project I have a single button that has to do 4 different things.
1st press: Turn on the power to the system
2nd press: Turn on wireless receiver
3rd press: Turn on second receiver
4th press: Turn off system after holding for 3 seconds I have not gotten this to work in current code
The main reason for not just turning everything on is that the system is battery operated. The wireless video receivers draw a bit of current, and I only want to turn them on if they are needed.
The forth press which turns off the whole system is what I have been struggling with.
Below is the code for the power button in my current chip:
Private PowerButtonTaskStack(1 to 75) as Byte
CallTask PowerButtonTask, PowerButtonTaskStack
'Check to see if the start button has been pressed
'
'
Sub PowerButtonTask()
·· Do
' Wait for a button press
····· Call WaitForInterrupt(zxPinFallingEdge, 0)
'
' Toggle the device state
'
·Call PutPin(RelayPin, IIf(deviceIsOn, Power_off, Power_On))
·Call PutPin(RedLED, LEDon)
·Call Putpin(PowerLED, LEDon)
·deviceIsOn = not deviceIsOn
·Button_Status = Button_Status + 1
·'Call Delay(0.500) '500mS time delay
'
'If the power is on then go check if button has been pressed a second time
'Turn on the wireless receiver
If deviceIsOn = True and LowBatt = False then
··Call WaitForInterrupt(zxPinrisingEdge, 0)
··Call PutPin(GreenLED, LEDon)
··Call PutPin(Wirelesspin, Power_On)
··Call LCD_DisplayStrAt("W", 1, 15)
··Button_Status = Button_Status + 1
end if
'
'If the button has been pressed a 3rd time turn everything off
LongPressTime = 5.0 'time in seconds
If Button_Status = 2 and deviceIsOn = False then
·If GetPin(SwitchPin) = 1 Then 'uh oh, someone pressed the button
··········· 'Check if 5 seconds have passed
·············· Call PutTime(0, 0, 0.0) 'Reset the RTC
·············· Do While GetPin(SwitchPin) = 1
················· Sleep(0.0) 'just wait
·············· Loop
·············· Call GetTime(ButtonHour, ButtonMinute, ButtonSecond)
'Check the time If ButtonSecond > LongPressTime Then 'Check if the button was pressed for more than the Long press time
····LongButton = True
····Call PutPin(GreenLED, LEDoff)·
····Call PutPin(RedLED, LEDoff)
····Call PutPin(PowerLED, LEDoff)
····Call Putpin(Wirelesspin, Power_off)
····Call LCD_Clear()
···Else
····ShortButton = True 'Short button press
···End If
··Else
·············· ShortButton = False
·End If
End If
'
' Time delay for switch debounce
'
Call Delay(0.250) '500mS time delay
·· Loop
End Sub
Question #2
What is the best way to measure voltage and current with the Propeller chip?
I am using a simple voltage divider and using the internal A/D converter to do the work. It seems to work ok, bit is there a better way to do it with the Propeller chip.
I would like to do some kind of running average, and I would like to get rid of the multiplier.
' Get the voltage measurement
'
Private Sub Read_Voltage()
·Voltage_Multiplier = 14.98
·Call Getadc(VoltagePin, Voltage)
·OutputVoltage = Voltage * Voltage_Multiplier
·Call Battery_Status
·If ((Status_Flag = 1) and (OutputVoltage > 11.70) _
··and (OutputVoltage < 13.77)) then
·Call Wireless_Power
·Lowbatt = False
·End If
·call Delay(0.25)
End sub
Thanks for the help
Patrick
I just got my NEW propeller kit http://forums.parallax.com/images/smilies/smilewinkgrin.gif·and now I am going to try and convert the code I have for a project to the propeller chip. I figured I would start with·this forum, and get some help.
I have 2 questions I hope someone can help me with
The chip I am using is a ZX-24
Question #1:
On my project I have a single button that has to do 4 different things.
1st press: Turn on the power to the system
2nd press: Turn on wireless receiver
3rd press: Turn on second receiver
4th press: Turn off system after holding for 3 seconds I have not gotten this to work in current code
The main reason for not just turning everything on is that the system is battery operated. The wireless video receivers draw a bit of current, and I only want to turn them on if they are needed.
The forth press which turns off the whole system is what I have been struggling with.
Below is the code for the power button in my current chip:
Private PowerButtonTaskStack(1 to 75) as Byte
CallTask PowerButtonTask, PowerButtonTaskStack
'Check to see if the start button has been pressed
'
'
Sub PowerButtonTask()
·· Do
' Wait for a button press
····· Call WaitForInterrupt(zxPinFallingEdge, 0)
'
' Toggle the device state
'
·Call PutPin(RelayPin, IIf(deviceIsOn, Power_off, Power_On))
·Call PutPin(RedLED, LEDon)
·Call Putpin(PowerLED, LEDon)
·deviceIsOn = not deviceIsOn
·Button_Status = Button_Status + 1
·'Call Delay(0.500) '500mS time delay
'
'If the power is on then go check if button has been pressed a second time
'Turn on the wireless receiver
If deviceIsOn = True and LowBatt = False then
··Call WaitForInterrupt(zxPinrisingEdge, 0)
··Call PutPin(GreenLED, LEDon)
··Call PutPin(Wirelesspin, Power_On)
··Call LCD_DisplayStrAt("W", 1, 15)
··Button_Status = Button_Status + 1
end if
'
'If the button has been pressed a 3rd time turn everything off
LongPressTime = 5.0 'time in seconds
If Button_Status = 2 and deviceIsOn = False then
·If GetPin(SwitchPin) = 1 Then 'uh oh, someone pressed the button
··········· 'Check if 5 seconds have passed
·············· Call PutTime(0, 0, 0.0) 'Reset the RTC
·············· Do While GetPin(SwitchPin) = 1
················· Sleep(0.0) 'just wait
·············· Loop
·············· Call GetTime(ButtonHour, ButtonMinute, ButtonSecond)
'Check the time If ButtonSecond > LongPressTime Then 'Check if the button was pressed for more than the Long press time
····LongButton = True
····Call PutPin(GreenLED, LEDoff)·
····Call PutPin(RedLED, LEDoff)
····Call PutPin(PowerLED, LEDoff)
····Call Putpin(Wirelesspin, Power_off)
····Call LCD_Clear()
···Else
····ShortButton = True 'Short button press
···End If
··Else
·············· ShortButton = False
·End If
End If
'
' Time delay for switch debounce
'
Call Delay(0.250) '500mS time delay
·· Loop
End Sub
Question #2
What is the best way to measure voltage and current with the Propeller chip?
I am using a simple voltage divider and using the internal A/D converter to do the work. It seems to work ok, bit is there a better way to do it with the Propeller chip.
I would like to do some kind of running average, and I would like to get rid of the multiplier.
' Get the voltage measurement
'
Private Sub Read_Voltage()
·Voltage_Multiplier = 14.98
·Call Getadc(VoltagePin, Voltage)
·OutputVoltage = Voltage * Voltage_Multiplier
·Call Battery_Status
·If ((Status_Flag = 1) and (OutputVoltage > 11.70) _
··and (OutputVoltage < 13.77)) then
·Call Wireless_Power
·Lowbatt = False
·End If
·call Delay(0.25)
End sub
Thanks for the help
Patrick