MrDEB
Well-Known Member
want to add more tones as well as mAYBE ultrasonic?
But also redesigning the PCboard.
Also taking the dip switches off and the ICSP jack to be removed.
Just wondering about int routine to initialize off RB2/int2
QUESTION am using a 18F1320 with my PIR connected to pin 9 (RB1/INT1)
am assuming that INT is interupt?
Is TMR1 always int1
Reason is I want to change the interupt to int2 (pin 17)
What do I need to know?
But also redesigning the PCboard.
Also taking the dip switches off and the ICSP jack to be removed.
Just wondering about int routine to initialize off RB2/int2
QUESTION am using a 18F1320 with my PIR connected to pin 9 (RB1/INT1)
am assuming that INT is interupt?
Is TMR1 always int1
Reason is I want to change the interupt to int2 (pin 17)
What do I need to know?
Code:
Device = 18F1320
Clock = 8 // 8MHz clock
Config OSC = INTIO2, WDT = OFF, LVP = OFF
Dim day As Byte
Dim nite As Byte
Dim light As Byte
Dim checkPIR As Byte
Dim PlaySound As Byte
While true
If day = light Then PlaySound
ElseIf day = nite Then checkPIR
EndIf
If checkPIR = true Then PlaySound
EndIf
//Wend
End
// then just make three functions One for day and night
// One for PlaySound
// One for checkPIR
// PLAY SOUND ROUTINE
// Device = 18F1320
//Clock = 8 // 8MHz clock
//Config OSC = INTIO2, WDT = OFF, LVP = OFF
While PlaySound Then
Dim NOT_RBPU As INTCON2.7
Dim TMR1IE As PIE1.0
Dim TMR1IF As PIR1.0
Dim TMR1 As TMR1L.AsWord
Dim Speaker As PORTB.3
Dim SpeakerTris As TRISB.3
Dim Amp As PORTB.1 // turns on amp power
Dim AmpTris As TRISB.1//turns on amp pin 9
Dim Speed As Word
Dim dip1 As PORTA.0 //TAKE OUT
Dim dip2 As PORTA.1
Dim dip3 As PORTA.2
Dim dip4 As PORTA.3
Dim dipRD As PORTB.0
//global variables
Dim Seed As LongWord, Tone As Byte
Dim i As Byte
//half period delays = clock speed divided by 2*frequency
Const Tones(18) As Word = (2000000/12000,2000000/10000,2000000/8000,2000000/6000,2000000/4000,1000,
2000000/12000,2000000/10000,2000000/8000,2000000/6000,2000000/4000,1000,2000000/12000,2000000/10000,2000000/8000,2000000/6000,2000000/4000,1000)
//interrupt routine
Interrupt MyInt()
T1CON.0=0 //stop timer
TMR1=-Tones(Tone) //reset period
T1CON.0=1 //restart timer
If Tone=5 Then //if silence
Speaker=0 //speaker off
Else //otherwise
Toggle(Speaker) //make sound
EndIf
TMR1IF=0 //clear interrupt flag
End Interrupt
Function Rand(Range As Byte) As Byte
Dim i As Byte, feed As Bit, temp As Word
For i = 0 To 7 //generate 8 bits
Feed = Seed.30 Xor Seed.27 //make new bit
Seed=Seed*2+Feed //shift seed left and add new bit
Next
Temp=(Seed And 255) * Range //change Rand from 0 to 255
Rand = Temp/256 //to 0 to (Range-1)
End Function
//main code starts here
OSCCON = $72 //select 8MHz internal clock
NOT_RBPU=0 //WPUs on port B
ADCON1=$7f //all digital
TRISB.0=0 //make output
PORTB.0=1 //makes pin 8 high for dip switches
T1CON = %10000001 //pre=1
T1CON = %10000001 //pre=1
Tone=5 //no sound please
TMR1IE=1 //enable timer 1 interrupt
TRISA=%10111110 //A0 & 6 output
PORTA.7=1
While (true)
Toggle(PORTA.0)
DelayMS(200)
Wend
End
Enable(MyInt) //set interrupt going
SpeakerTris=0 //Setup Port
Seed=$12345678 //seed random number
TRISA =%00001111 //sets your inputs on porta
While(TRUE) //repeat forever
If dip1=1 Then //dip1 pin 1
Speed=25
EndIf
If dip2=1 Then // dip 2 pin 2
Speed=50
EndIf
If dip3=1 Then //dip3 pin 6
Speed=75
EndIf
If dip4=1 Then //dip4 pin
Speed=Rand(10)*15+15 //Speed = 25 to 250 random select speed
EndIf
If PORTB.1=0 Then PlaySound //if night then PIR is enabled
For i = 1 To 200 //play 20 tones
Tone=Rand(5) //each tone is random frequency
DelayMS(Speed) //and for 1.00 seconds
Next //end for loop
Else //otherwise
Tone=5 //silence
i=Rand(255) //make rand more random
EndIf //end if condition
Wend //end of while loop
Wend
//CHECK FOR DAYLIGHT OR DARK
Device = 18f1320
Clock = 8
Config OSC = INTIO2, WDT = OFF, LVP = OFF
Include "Utils.bas"
Dim but As PORTB.0
Dim led As PORTA.0
SetAllDigital //set digital so you can read RB0 or it will always read low
TRISA =%00000000 // if your using the junebug This is fool proof to get a led to lite
PORTA =%00000000 // Set's it all low
TRISB =%00000001 // Set's inputs and outputs
PORTB =%00000000 // Set's it all low
INTCON2.7=0 // sets wpu on portb turns on pullups on PORTB
OSCCON = $72 // 8 MHz clock
While true // this loops it so it keeps checking
If day = nite Then checkPIR // enables PIR
DelayMS(10) // small debounce delay
ElseIf day = light Then Timer.Initialize // triggers on timer
led =1 // Turns on led
DelayMS(10) // small debounce delay
EndIf // closes your IF THEN statements
Wend
End
//new timer 6/25/09
Device = 18F1320
Clock = 8
Config OSC = INTIO2
Config MCLRE = Off
Include "INTOSC8.bas" // set OSO
Include "Utils.bas"
Include "delaytimer.bas"
SetAllDigital
TRISB =%00000000
PORTB =%00000000
Output (PORTB.1)
While true
//High (PORTB.1)
longmindelay
High(PORTB.1)
DelayMS(30)
Low (PORTB.1)
//Longdelay
Wend
Wend// your main code would look like this
Device = 18F1320
Clock = 8 // 8MHz clock
Config OSC = INTIO2, WDT = OFF, LVP = OFF
Dim day As Byte
Dim nite As Byte
Dim light As Byte
Dim checkPIR As Byte
Dim PlaySound As Byte
While true
If day = light Then PlaySound
ElseIf day = nite Then checkPIR
EndIf
If checkPIR = true Then PlaySound
EndIf
//Wend
End
// then just make three functions One for day and night
// One for PlaySound
// One for checkPIR
// PLAY SOUND ROUTINE
// Device = 18F1320
//Clock = 8 // 8MHz clock
//Config OSC = INTIO2, WDT = OFF, LVP = OFF
While PlaySound Then
Dim NOT_RBPU As INTCON2.7
Dim TMR1IE As PIE1.0
Dim TMR1IF As PIR1.0
Dim TMR1 As TMR1L.AsWord
Dim Speaker As PORTB.3
Dim SpeakerTris As TRISB.3
Dim Amp As PORTB.1 // turns on amp power
Dim AmpTris As TRISB.1//turns on amp pin 9
Dim Speed As Word
Dim dip1 As PORTA.0
Dim dip2 As PORTA.1
Dim dip3 As PORTA.2
Dim dip4 As PORTA.3
Dim dipRD As PORTB.0
//global variables
Dim Seed As LongWord, Tone As Byte
Dim i As Byte
//half period delays = clock speed divided by 2*frequency
Const Tones(18) As Word = (2000000/12000,2000000/10000,2000000/8000,2000000/6000,2000000/4000,1000,
2000000/12000,2000000/10000,2000000/8000,2000000/6000,2000000/4000,1000,2000000/12000,2000000/10000,2000000/8000,2000000/6000,2000000/4000,1000)
//interrupt routine
Interrupt MyInt()
T1CON.0=0 //stop timer
TMR1=-Tones(Tone) //reset period
T1CON.0=1 //restart timer
If Tone=5 Then //if silence
Speaker=0 //speaker off
Else //otherwise
Toggle(Speaker) //make sound
EndIf
TMR1IF=0 //clear interrupt flag
End Interrupt
Function Rand(Range As Byte) As Byte
Dim i As Byte, feed As Bit, temp As Word
For i = 0 To 7 //generate 8 bits
Feed = Seed.30 Xor Seed.27 //make new bit
Seed=Seed*2+Feed //shift seed left and add new bit
Next
Temp=(Seed And 255) * Range //change Rand from 0 to 255
Rand = Temp/256 //to 0 to (Range-1)
End Function
//main code starts here
OSCCON = $72 //select 8MHz internal clock
NOT_RBPU=0 //WPUs on port B
ADCON1=$7f //all digital
TRISB.0=0 //make output
PORTB.0=1 //makes pin 8 high for dip switches
T1CON = %10000001 //pre=1
T1CON = %10000001 //pre=1
Tone=5 //no sound please
TMR1IE=1 //enable timer 1 interrupt
TRISA=%10111110 //A0 & 6 output
PORTA.7=1
While (true)
Toggle(PORTA.0)
DelayMS(200)
Wend
End
Enable(MyInt) //set interrupt going
SpeakerTris=0 //Setup Port
Seed=$12345678 //seed random number
TRISA =%00001111 //sets your inputs on porta
While(TRUE) //repeat forever
If dip1=1 Then //dip1 pin 1
Speed=25
EndIf
If dip2=1 Then // dip 2 pin 2
Speed=50
EndIf
If dip3=1 Then //dip3 pin 6
Speed=75
EndIf
If dip4=1 Then //dip4 pin
Speed=Rand(10)*15+15 //Speed = 25 to 250 random select speed
EndIf
If PORTB.1=0 Then PlaySound //if night then PIR is enabled
For i = 1 To 200 //play 20 tones
Tone=Rand(5) //each tone is random frequency
DelayMS(Speed) //and for 1.00 seconds
Next //end for loop
Else //otherwise
Tone=5 //silence
i=Rand(255) //make rand more random
EndIf //end if condition
Wend //end of while loop
Wend
//CHECK FOR DAYLIGHT OR DARK
Device = 18f1320
Clock = 8
Config OSC = INTIO2, WDT = OFF, LVP = OFF
Include "Utils.bas"
Dim but As PORTB.0
Dim led As PORTA.0
SetAllDigital //set digital so you can read RB0 or it will always read low
TRISA =%00000000 // if your using the junebug This is fool proof to get a led to lite
PORTA =%00000000 // Set's it all low
TRISB =%00000001 // Set's inputs and outputs
PORTB =%00000000 // Set's it all low
INTCON2.7=0 // sets wpu on portb turns on pullups on PORTB
OSCCON = $72 // 8 MHz clock
While true // this loops it so it keeps checking
If day = nite Then checkPIR // enables PIR
DelayMS(10) // small debounce delay
ElseIf day = light Then Timer.Initialize // triggers on timer
led =1 // Turns on led
DelayMS(10) // small debounce delay
EndIf // closes your IF THEN statements
Wend
End
//TIMER ROUTINE
// 18F1320@ 8MHz - they are just used here for clarity...
//Device = 18F1320
//Clock = 8
Include "ISRTimer.bas"
// constant ID to 4 * 16 bit timers...
Const
Timer1 = 0,
Timer4 = 3
// OnTimer1 event...
Event OnTimer1()
Toggle(PORTB.2)//pin 8
End Event
// activate the timer module...
//Timer.Initialize
// initialise the timers - refresh every 1000Hz (1ms)...
Timer.Items(Timer1).Interval = 50 // 50ms
Timer.Items(Timer1).OnTimer = OnTimer1 // timer event handler
// timer event handler
Timer.Items(Timer4).Interval = 200 // 2000ms, no event handler
// enable the timers...
Timer.Items(Timer1).Enabled = true
Timer.Items(Timer4).Enabled = true
// start processing all timers...
Timer.Start
// main program loop...
While true
// this is a polled timer, not event driven - check to see
// if it has timeout...
If day = light Then Timer.Items(Timer4).Enabled
Toggle(PORTB.2)//pin 17 trigger playsound
DelayMS(10) //change state
Toggle(PORTB.2)//pin 17
Timer.Items(Timer4).Enabled = true
EndIf
Wend