what I want to do is have 3 variables (red, green, blue)
then in the prg the variables are inc or dec
this code is a PWM with all three LES on at same time but increase/decrease at different times but they all are on at same time.
trying to simulate a flickering candle other than turning the led off and on
Code: Select all
Device = 18F1320
Clock = 8
Include "IntOSC8.bas"
Include "RandGen.bas"
Include "Utils.bas"
Dim TMR2IE As PIE1.1, // TMR2 interrupt enable
TMR2IF As PIR1.1, // TMR2 overflow flag
TMR2ON As T2CON.2, // Enables TMR2 to begin incrementing
Signal_Pin As PORTA.0 // Signal output to frequency meter
Dim red As byte,
dim green As byte
dim blue as byte
//dim mSb As Word
//dim mSg As Word
dim Cred as boolean
dim Cgreen as boolean
dim Cblue as boolean
Dim Red_Pin As PORTB.0,
Green_Pin As PORTB.1,
Blue_Pin As PORTB.2,
Red_Duty As Byte,
Green_Duty As Byte,
Blue_Duty As Byte,
Red_DutyVal As Byte,
Green_DutyVal As Byte,
Blue_DutyVal As Byte,
RandomVal As Byte
//Dim red As Word,
//dim green As word
//dim blue as word
//dim mSb As Word
//dim mSg As Word
Interrupt TMR2_Interrupt()
High(Signal_Pin)
Save(0) // Back up system variables
If TMR2IF = 1 Then // Check if the interrupt was from TMR2
TMR2IF = 0 // Clear the TMR2 interrupt flag
red = red + 50
green = green + 50
blue = blue + 50
If rd >= 1000 Then
rd = rd - 1000
Inc red
endif
If grn >= 1000 Then
grn = grn - 1000
Inc grn
EndIf
Inc(Red_DutyVal)
Inc(Green_DutyVal)
Inc(Blue_DutyVal)
If Red_DutyVal > Red_Duty Or Red_Duty = 0 Then
Red_Pin = 0
Else
Red_Pin = 1
EndIf
If Green_DutyVal > Green_Duty Or Green_Duty = 0 Then
Green_Pin = 0
Else
Green_Pin = 1
EndIf
If Blue_DutyVal > Blue_Duty Or Blue_Duty = 0 Then
Blue_Pin = 0
Else
Blue_Pin = 1
EndIf
EndIf //
Restore // Restore system variables
Low(Signal_Pin)
End Interrupt
Private Sub TMR2_Initialize()
TMR2ON = 0 // Disable TMR2
TMR2IE = 0 // Turn off TMR2 interrupts
PR2 = 149 // TMR2 Period register PR2
T2CON = %00000001 // T2CON 0:1 = Prescale
// 00 = Prescale is 1:1
// 01 = Prescale is 1:4
// 1x = Prescale is 1:16
// 3:6 = Postscale
// 0000 = 1:1 postscale
// 0001 = 1:2 postscale
// 0010 = 1:3 postscale...
// 1111 = 1:16 postscale
TMR2 = 0 // Reset TMR2 Value
TMR2IE = 1 // Enable TMR2 interrupts
TMR2ON = 1 // Enable TMR2 to increment
Enable(TMR2_Interrupt)
End Sub
// Start Of Program...
Low(Red_Pin)
Low(Green_Pin)
Low(Blue_Pin)
Red_Duty = 0
Green_Duty = 2
Blue_Duty = 0
Red_DutyVal = 0
Green_DutyVal = 4
Blue_DutyVal = 0
uS = 0
mS = 0
RandGen.Initialize(128) // Initialize the Random Number generator
TMR2_Initialize // Setup and enable TMR2
While (True) // Create an infinite loop
//RandomVal = RandGen.Rand // Grab a random number from 0 to 255
// Select RandomVal // Find out what colour to increase/decrease
//Case 0 To 42
While Red_Duty < 255
And Green_Duty < 255
And Blue_Duty < 255
mS(0) = 0
mS(1) = 0
mS(2) = 0
Repeat
Until mS(0) = 19
And mS(1) = 19
And mS(2) = 19
Inc(Red_Duty)
Inc(Green_Duty)
Inc(Blue_Duty)
Wend
// Case 43 To 84
While Red_Duty > 0
And Green_Duty > 0
And Blue_Duty > 0
mS(0) = 0
mS(1) = 0
mS(2) = 0
Repeat
Until mS(0) = 19
And mS(1) = 19
And mS(2) = 19
Dec(Red_Duty)
Dec(Green_Duty)
Dec(Blue_Duty)
Wend
Wend