Hi,
I am having a couple of problems with the above code. I changed it so that I could run it on two 16f628 chips, this works with out any problems.
Happy that I could tx and rx I wanted to tx using a 12f675 chip and rx on a 16f628.
Changing the tx code for a 12f675 and compiling it gave no errors. The leds flash ok and when I put an led on the serout pin I see the data. When I tx the code to the rx 16f628 via a tx the rx wont respond. I then hardwired the 12f675 to the 16f628 removing the tx/rx, it still wont work.
Can someone please check my code or suggest why it wont work.
Here is the code;
@ DEVICE PIC12F675, INTRC_OSC_NOCLKOUT
' System Clock Options (Internal)
@ DEVICE PIC12F675, WDT_ON
' Watchdog Timer
@ DEVICE PIC12F675, PWRT_ON
' Power-On Timer
@ DEVICE PIC12F675, MCLR_OFF
' Master Clear Options (Internal)
@ DEVICE PIC12F675, BOD_OFF
' Brown-Out Detect
@ DEVICE PIC12F675, CPD_OFF
' Data Memory Code Protect
@ DEVICE PIC12F675, PROTECT_ON
'PICBASIC PROGRAM
ANSEL = 0
CMCON = 7
TRISIO =%001000
INCLUDE "modedefs.bas"
txout VAR GPIO.4 : Output txout : dataout VAR BYTE
ledcount VAR BYTE
led1 VAR GPIO.0 : Output led1 : led2 VAR GPIO.1 : Output led2
led3 VAR GPIO.2 : Output led3 : led4 VAR GPIO.5 : Output led4
key VAR GPIO.3 : Input key 'push button on gpio.3
'1K-10K resistor from portb.0 to ground (pulldown)
'push button is wired between portb.0 and +5v
'initial LED check
led1 = 1 : Pause 500 : led1 = 0 : led2 = 1 : Pause 500 : led2 = 0
led3 = 1 : Pause 500 : led3 = 0 : led4 = 1 : Pause 500 : led4 = 0
mainloop:
IF key = 0 Then 'button not pressed
GoTo mainloop
EndIF
IF key = 1 Then
Pause 50 'wait 50ms for switch to debounce then check again
IF key = 1 Then 'if it's still pressed, then increment the count
ledcount = ledcount + 1
dataout = $55 '($55 = manchester encoded $0)
'train the receiver by sending 5 each of the $55's, may need more
'just copy the line below to make it send out more characters
SerOut txout, n2400, [ dataout, dataout, dataout, dataout, dataout ]
EndIF
EndIF
IF ledcount = 0 Then 'all leds off
dataout = $66 'manchester encoded $5, use because $0 is reserved
SerOut txout, n2400, [ dataout ]
'may have to send data more than once depending on how well the receiver
'can capture the data. Shouldn't have a problem sending it once
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 0
EndIF
IF ledcount = 1 Then '1st led on
dataout = $56 'manchester encoded $1
SerOut txout, n2400, [ dataout ]
led1 = 1 : led2 = 0 : led3 = 0 : led4 = 0
EndIF
IF ledcount = 2 Then '2nd led on and so on and so on down the line....
dataout = $59 'manchester encoded $2
SerOut txout, n2400, [ dataout ]
led1 = 0 : led2 = 1 : led3 = 0 : led4 = 0
EndIF
IF ledcount = 3 Then
dataout = $5a 'manchester encoded $3
SerOut txout, n2400, [ dataout ]
led1 = 0 : led2 = 0 : led3 = 1 : led4 = 0
EndIF
IF ledcount = 4 Then
dataout = $65 'manchester encoded $4
SerOut txout, n2400, [ dataout ]
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 1
EndIF
IF ledcount = 5 Then 'reset led count, roll it back to 0
ledcount = 0 'and turn leds off since count is back to 0
dataout = $66 'manchester encoded $5 (same thing as ledcount = 0 above)
SerOut txout, n2400, [ dataout ]
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 0
EndIF
GoTo mainloop
End
I am using the two 16f628's with internal clock selected with no problem
thanks Nick
Bookmarks