PDA

View Full Version : HSEROUT at Quarter Rate!



Gitchie
- 10th April 2012, 17:29
Hi All,

Currently using a PIC18LF26K80, and have found the HSEROUT command to outputing data at quarter of the specified rate.

Here is the header to my code:

#config
CONFIG RETEN = OFF
CONFIG INTOSCSEL = LOW
CONFIG SOSCSEL = LOW
CONFIG XINST = OFF
CONFIG FOSC = INTIO1
CONFIG PLLCFG = ON
CONFIG FCMEN = OFF
CONFIG IESO = OFF
CONFIG PWRTEN = OFF
CONFIG BOREN = OFF
CONFIG BORV = 0
CONFIG BORPWR = LOW
CONFIG WDTEN = OFF
CONFIG WDTPS = 1
CONFIG CANMX = PORTC
CONFIG MSSPMSK = MSK7
CONFIG MCLRE = OFF
CONFIG STVREN = OFF
CONFIG BBSIZ = BB1K
CONFIG CP0 = OFF
CONFIG CP1 = OFF
CONFIG CP2 = OFF
CONFIG CP3 = OFF
CONFIG CPB = OFF
CONFIG CPD = OFF
CONFIG WRT0 = OFF
CONFIG WRT1 = OFF
CONFIG WRT2 = OFF
CONFIG WRT3 = OFF
CONFIG WRTC = OFF
CONFIG WRTB = OFF
CONFIG EBTR0 = OFF
CONFIG EBTR1 = OFF
CONFIG EBTR2 = OFF
CONFIG EBTR3 = OFF
CONFIG EBTRB = OFF
#endconfig
'*****
'* Defines and Device Configurations
'*****
define OSC 8 ' Internal OSC runs at 8MHz
define HSER_RCSTA1 90h ' Enable USART1 Receiver
define HSER_TXSTA1 20h ' Enable USART1 Transmitter
define HSER_RCSTA2 90h ' Enable USART2 Receiver
define HSER_TXSTA2 24h ' Enable USART2 Transmitter
define HSER_BAUD1 9600
define HSER_BAUD2 9600
TRISA=%00000001 ' Make PORTA.0 an input
ADCON0=%00000001 ' Turn on ADC AN0
ADCON1=%00000000 ' Turn off PORTB ADC's
ADCON2=%00000000 ' Turn off PORTC ADC's
INTCON=%11000000 ' Enable Interrupts
PIE1=%00100000 ' Enable USART1 Interrupt
OSCCON=%01100000
REFOCON=%10100111
OSCTUNE=%10000000


By connecting at 2400 baud, the comms works fine, but I am hoping to find the real reason behind my errors...

Cheers :)
Mark

Dave
- 11th April 2012, 00:32
what crystal are you driving the PIC with? I notice you have the PLL enabled which will multiply the crystal freq. by 4 times. You have declared the operating frequency as 8 Mhz. If you have set the internal frequency as 8 Mhz then you are generating 24 Mhz. I would check your settings....

Gitchie
- 11th April 2012, 02:55
Thanks Dave,

I am currenty using the internal osc, as set by CONFIG FOSC = INTIO1 and it should be running at 8MHz by the OSCCON=%01100000 configs. In regards to the PLL, by switching it on - by either the PLLCFG or OSCTUNE, it enables the HSEROUT command to operate at the correct baud, but this results in the rest of the pic running at 4 times...

Dave
- 11th April 2012, 11:54
Gitchie, That is because you have declared to PBP that you are running the code @ 8 Mhz. by the statement:
define OSC 8 ' Internal OSC runs at 8MHz

This statement tells PBP to scale all timing statements like PAUSE and the like to use an 8 Mhz. oscillator. You should be setting the DEFINE statement to 32 Mhz. which is the frequency that the processor is actually being clocked at.

Gitchie
- 11th April 2012, 13:44
That's correct, but then the hserout runs at quarter speed... For the moment, I've set the baud to 9600 and will run it at 2400...

Dave
- 11th April 2012, 18:19
Don't you understand? Just set the baudrate to the desired rate and set the DEFINE OSC 32. Everything will work correctly.....

Gitchie
- 11th April 2012, 20:48
Thanks for your replays Dave,

But it was a typographical error with the HSER2 defines... I had HSER_BAUD2 1200 when it should have been HSER2_BAUD 1200

I was hunting for an OSC problem also

Cheers and thanks again for your suggestions