Results after the “hammering” session today.
Testing setup as follows:
One PIC12F683 acting as Tx module. It output bursts of 15 mS 500Khz carrier on CCP1 pin (pin 5) followed by 5mS no carrier. Pin 2 of the PIC is high when carrier ON and low when carrier is OFF.
Second PIC12F683 acting as Rx is connected to the same 5V supply and has its TOCKI pin (pin 5) connected to CCP1 pin of the Tx PIC. Pin 2 of this PIC drives a LED.
After adding some configuration lines and fix some oldCount speling I ran few simple tests to make sure the connections and configs are OK I ran the sample code.
Unfortunately it did not work and the problem was on the Rx side. Monitoring the signals from Tx they were what they should be. Rx will output some very random signals or no signals at all.
So I started messing with the code and try few alterations of the Rx program. I realized that some different handling of TMR0 and oldCount needs to be implemented. I have to confess that some of the results did not make sense to me at the time but by pure luck (I left a code line behind in the first WHILE / WEND loop got some meaningful results).
I do not know enough about the insides of the WHILE / WEND loop but, after violating its condition. I also think I broke few other rules of programming and according to the well known rule if something works there must be at least two mistakes that compensate each other.
The Rx and Tx codes that follow are working and my old analog scope shows perfectly matched signals on the Tx and Rx PICs.
Tx code:
Rx code:Code:@ device pic12F683, intrc_osc_noclkout, wdt_on, mclr_off, protect_off DEFINE OSC 8 ' We're running at 8 Mhz OSCCON=%01110111 ' 8MHz internal osc ANSEL = 0 ' Digital only for all PortA pins TRISIO=%00100000 ' Make PORTA outputs out var GPIO.5 CCP1CON = %00001100 ' Normal PWM PR2 = 3 ' 1MHz output @8MHz system clock CCPR1L = 2 ' 50% Dutycycle CCP1CON.5 = 0 CCP1CON.4 =0 T2CON.2 = 1 Main: high out T2CON.2=1 ' Osc ON PAUSE 15 low out T2CON.2=0 ' Osc OFF PAUSE 5 Goto Main
Can somebody explain me why this code is working?Code:@ device pic12F683, intrc_osc_noclkout, wdt_on, mclr_off, protect_off DEFINE OSC 8 ' We're running at 8 Mhz OSCCON=%01110111 ' 8MHz internal osc ANSEL = 0 ' Digital only for all pins TRISIO=%00100100 ' Make PORTA outputs oldCount VAR byte LED VAR GPIO.5 oldCount = 0 'Clear count LED = 0 ' Turn off LED ' Set TMR0 up as a counter, signal fed into T0CKI pin OPTION_REG.5 = 1 Main: While TMR0 <> oldCount ' There has been pulses since last time we checked high led oldCount = TMR0 ' Store current count Wend low led oldCount =0 TMR0=0 While oldCount=TMR0 low led wend GOTO main
Regards,
Nick




Bookmarks