I'd type over the DEFINES in capitals. If you copy & paste from your code and they come out in lower case here, then it seems like your IDE is just displaying to you in upper case. They are still lower as far as PBP is concerned.
Robert
I'd type over the DEFINES in capitals. If you copy & paste from your code and they come out in lower case here, then it seems like your IDE is just displaying to you in upper case. They are still lower as far as PBP is concerned.
Robert
Since PIC to PC is working then I have three thoughts on this.
1. one or both modules are not working. You may try here to change the modules between them.
2. Settings are not the defaults
3. The feeds to the modules are reversed (tx to rx etc).
The modules need true mode and not the inverse you just tested with the PC. But I suppose you will change your code for this test.
Wish you luck, cannot see anything else now...
Ioannis
Hi all,
Working at last...... the problem was reversed Tx and Rx, just as Ioannis suggested above. I was misled by incorrect markings on the prototype board I got from Ciseco. Also, I corrected the define caps, although this did not seem to be a problem because the leds were blinking at the right speeds.... thanks for the tip Robert. You guys are very patient to stick through this ... I salute you. Final code here:
Code:'************************************************************************** '*Program to test XRF radio communications via loopback method * '*Uses a pushbutton switch on porta pin 4 * '*Target processor is PIC 12f1822 * '*207 program words, revised 05/08/2013 * '*Program by Dick Ivers * '*All rights reserved * '************************************************************************** 'set 12f1822 configurat1on #CONFIG __config _CONFIG1, _FOSC_INTOSC & _MCLRE_OFF & _CLKOUTEN_OFF & _WDTE_ON __config _CONFIG2, _PLLEN_OFF & _LVP_OFF #endconfig 'set registers OSCCON = %01111000 '16 mhz osc OSCTUNE = 0 'factory calibration ANSELA = 0 'all digital inputs OPTION_REG.7 = 0 'global pullups enabled WPUA = %010010 'porta pin 1 and pin 4 weak pullups enabled CM1CON0.7 = 0 'comparator disabled TRISA = %011110 'porta.0 & porta.5 are outputs, all others input while OSCSTAT.0 = 0 'wait for stable freq. wend DEFINE OSC 16 '16 mhz oscillator 'Define debug parameters DEFINE DEBUG_REGG PORTA 'set debug port to porta DEFINE DEBUG_BIT 0 'use pin ra0 of porta for debug DEFINE DEBUG_BAUD 9600 'set baud rate to 9600 DEFINE DEBUG_MODE 0 'communicate in true mode DEFINE DEBUGIN_REGG PORTA 'set debug port to porta DEFINE DEBUGIN_BIT 1 'use pin ra1 of porta for debugin DEFINE DEBUGIN_BAUD 9600 'set baud rate to 9600 DEFINE DEBUGIN_MODE 0 'communicate in true mode i var byte char var byte For i = 1 to 3 porta.5 = 0 'led on pause 333 porta.5 = 1 'led off pause 333 next asleep: nap 2 'delay 4 ms if porta.4 = 1 then asleep DT: debug 55 debugin 100,blink,[char] if char = 55 then porta.5 = 0 'led on solid goto halt endif blink: porta.5 = 0 'led pause 500 porta.5 = 1 'led off pause 500 if porta.4 =1 then asleep goto DT halt: stop 'led stays on
Congratulations on sorting it Dick.
I'm having problems with my code which seems so simple but it won't work with serin/out2 qualifiers.
I have commented out the Serin2 ACK in the control code as it doesn't get one due to the field code not working. This way, at least the code works the relay ok if I remove the Serin2 qualifier and just send "BOB".
This points to the qualifiers as the culprit as without them the code works OK.
I've tried every combination and it doesn't respond. All I want in the Field unit is to receive a qualifier to branch to the desired gosub.
Please bear in mind code below is probably incorrect as it's what's left of trying.
Control code
Code:Include "modedefs.bas" DEFINE OSC 10 TRISA=%00000000 TRISB=%11110000 CMCON=7 ; comparators off redled VAR PortB.4 greenled VAR PortB.5 yellowled VAR PortB.6 switch VAR PortB.7 redstop VAR BYTE greengo VAR BYTE flip VAR BYTE ;relay var PortA.1 flip = 0 ; counter flipflop for single command send redstop = 1 greengo = 2 test: ; test led outputs high redled pause 500 low redled high greenled pause 500 low greenled high yellowled pause 500 low yellowled pause 2000 main: IF SWITCH = 1 and flip = 0 THEN GOSUB red pause 500 IF switch = 0 and flip = 1 then gosub green goto main red: pause 1 SEROUT2 PortA.3,T9600,["BOB",redstop] ; send command to field unit ;SERIN2 PortA.2,84,[WAIT("ACK")] ; wait for acknowledge signal low greenled high redled flip = 1 ; flip flop counter to ensure send only once gosub flash ; flash test led return green: pause 1 SEROUT2 PortA.3,T9600,["BOB",greengo] ;SERIN2 PortA.2,84,[WAIT("ACK")] low redled high greenled flip = 0 gosub flash return flash: high yellowled pause 50 low yellowled PAUSE 50 high yellowled pause 50 low yellowled PAUSE 50 high yellowled pause 50 low yellowled return END
Field code
Code:Include "modedefs.bas" DEFINE OSC 10 TRISA=%00000100 CMCON=7 relay VAR PortA.1 signal var BYTE low relay ' Program MAIN: SERin2 PortA.2,84,[wait("BOB"),dec SIGNAL] if signal = 1 then gosub redstop endif if signal = 2 then GOsub greengo endif goto main redstop: high relay pause 25 SEROUT2 PortA.3,T9600,["ACK"] return greengo: low relay pause 25 SEROUT2 PortA.3,T9600,["ACK"] return END
As an oddball I also discovered that FOR NEXT just doesn't seem to work in any of my codes?
Rob
Your Pause 25 may be is too short. Try a longer delay. Say 1 second.
Also please do the check list as Dick did in post #23.
Also test if direct connection of your two PIC works as expected.
Ioannis
Hi Loannis,
Thanks for the help.
I changed the pause to 1 second but it made no difference. It doesn't move on past the Serin unless I remove the 'DEC signal' part so it doesn't reach the Sub.
I removed the variable parts of the Serout/In and it will work as a one shot. Add a DEC anything and it won't receive it.
So Field receives "BOB" and will fire relay if I comment out the 'if then' and add a HIGH relay but will not work on a variable value.
Oh yes, I'm just testing direct connections at moment. When it works as expected I will add the modules.
I noticed the post of the code had odd formatting, some caps, some lower case. Strange as this was done with Microcode Studio. Just to be sure I copied it into Notepad and wrote the commands as necessary in capitals. No change when compiled, didn't work. I thought the odd 'SIGNAL' in caps was causing a problem. It wasn't written in caps.
Rob
Last edited by tasmod; - 9th May 2013 at 13:35.
WelL I missed that.
You DO NOT HAVE to place the DEC modifier since what you send is just a binary number.
So discard the DEC from your SERIN and you will be OK.
Ioannis
Bookmarks