If might help if you showed your code. Even if the code is not the problem![]()
If might help if you showed your code. Even if the code is not the problem![]()
Dave
Always wear safety glasses while programming.
Ok, Ive made a really basic version to save you looking through hundreds of lines of code. It uses the power LED to show the output (inverted) and the status LED to show the value sent by serial. My laptop sends 1 and 0 alternately.
In this example grounding the input pin makes the power LED light up as expected. When i send the alternating serial values then the status LED toggles as it should. When ground the input _and_ send serial data then the status light never comes on. Something i didnt notice before is that if the status light is already on then grounding the input turns it off. That would suggest that the grounding causes a blank byte to appear in the UART buffer.Code:'^Define_Chip: PIC16F87 'Define the oscillator (20MHz) DEFINE OSC 20 'Set the tris registers TRISA=%00001000 TRISB=%11000101 CMCON=7 CVRCON=0 CCP1CON=0 'Serial port settings RCSTA.7=1 'Enable the serial port RCSTA.4=1 'Enable synchronous mode TXSTA.5=1 'Enable transmit TXSTA.2=1 'Enable high baud rate 'SPBRG=10 'Baud: 115200, Error: -1.36% SPBRG=64 'Baud: 19200, Error: 0.16% bTemp VAR BYTE 'Define output pins pSmoke1 VAR PORTA.2 pSmoke2 VAR PORTA.4 pSmoke3 VAR PORTB.1 pSmoke4 VAR PORTB.3 pPower VAR PORTA.0 pStatus VAR PORTA.1 pData VAR PORTB.4 'Switches between Master and Slave 'Define input pins iSmoke1 VAR PORTA.3 iSmoke2 VAR PORTB.0 iSmoke3 VAR PORTB.7 iSmoke4 VAR PORTB.6 'Check that input pins are set to inputs INPUT iSmoke1 INPUT iSmoke2 INPUT iSmoke3 INPUT iSmoke4 'Make sure all of the outputs are off LOW pSmoke1 LOW pSmoke2 LOW pSmoke3 LOW pSmoke4 LOW pPower LOW pStatus LOW pData 'BEGIN: Main loop loop: 'Check if serial data has arrived IF PIR1.5=1 THEN bTemp=RCREG pStatus=bTemp.0 ENDIF pPower=~iSmoke4 GOTO loop
PortB.6 has analog functions. You need to properly set your ADCON0, ADCON1, and ANSEL to turn those off for digital operation.
If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
.
Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
.
There simply is no "Happy Spam" If you do it you will disappear from this forum.
I tried that but i keep getting compile errors on all 3 lines saying "Symbol not previously defined"
Edit: Ive had a look in the datasheet and it seems they should exist. Im not sure why im getting an error. The correct chip is selected
Last edited by The Master; - 27th September 2009 at 12:24.
Just quickly tried to compile your example with v2.46 without error.
It would suggest that if these three lines...
CMCON=7
CVRCON=0
CCP1CON=0
...are causing you problems, then you have NOT got the correct chip selected somewhere...
And it goes to say that you have default Analog functions still enabled on your PIC.
It's always a good idea to EXPLICITY define the start of your program with the chips CONFIG parameters along with the chip you are using... example...
...because if, further down the line, you inadvertantly start to compile for the wrong chip, you end up with a whole heap of errors pointing you to the fact that you've done something wrong (or have the wrong chip selected somewhere).Code:@ DEVICE pic10F206, WDT_OFF ' Watchdog Timer Disabled @ DEVICE pic10F206, MCLR_OFF ' Master Clear Options Internal @ DEVICE pic10F206, PROTECT_OFF ' Code Protection Disabled
I never got the fuses to work from within the code. It seems like theres a few ways of doing it and i never found the right one. I did read an example somewhere that said to change an include file. Heres the line in that file
__config _CONFIG1, _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF
CMCON, CVRCON and CCP1CON are working fine. The 3 that dont work are ADCON0, ADCON1, and ANSEL. The datasheet says they should exist and i found them defined in PIC14EXT.BAS which aparently gets included for the PIC16F87. As you can see from my code the chip is defined correctly. That line gets picked up by an app i wrote that handles the compiling. Just to be on the safe side i went back to MCS and tried to compile as ive done in the past (16F87 is selected) and it still wont compile.
The Datasheet is shared between the F87 and F88. Those Registers don't exist in the F87 (first paragraph of section 12).
Bookmarks