View previous topic :: View next topic |
Author |
Message |
mtar
Joined: 21 Sep 2005 Posts: 4
|
Problems with RS232 and internal oscillator (PIC16F688) |
Posted: Wed Sep 21, 2005 9:04 am |
|
|
I've a problem with internal oscillator and the serial port of PIC16F688. When I use the external oscillator (8MHz), I can send from PIC normally with a velocity of 9600bps. When I don't connect the external quartz and relative condenser and I use the internal oscillator with this istructions:
#FUSES NOWDT, INTRC_IO, NOPROTECT, BROWNOUT, NOMCLR, NOCPD, NOPUT, IESO, FCMEN
#use delay(clock=8000000)
...
setup_oscillator( OSC_8MHZ );
I receive in Hyperterminal only byte 00.
I have tried to change the frequency to 4Mhz or to decrease the serial speed to 1200 and 2400, but the problem remains.
I use the PCWH 3.227 and MPLAB 7.21.
Thanks.
M. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Sep 21, 2005 1:15 pm |
|
|
Post a complete (but short) test program that demonstrates the problem. |
|
|
Guest
|
|
Posted: Wed Sep 21, 2005 5:07 pm |
|
|
Okay, this is the code for PIC16F688.
Thank you for your help!! M.
-------------------------------------------------------------------
Main firmware
-------------------------------------------------------------------
#include "C:\Programmi\PICC\acceleration.h"
#define INTS_PER_SECOND 30 // (8000000/(4*256*256))
BYTE int_count; // Number of interrupts left before a second has elapsed
// variable for the X Axis of accelerometer
float x;
// interrupt of 1 Hertz in order to send the X value of accelerometer
#int_rtcc
void clock_isr() {
// decrese and check the counter interrupt (for 1 Hertz)
if(--int_count==0) {
//reset counter
int_count=INTS_PER_SECOND;
// send accelleration data
printf("x,%0f\n\r",x);
}
}
void main() {
int value;
//----------------------------------------
setup_oscillator( OSC_8MHZ );
int_count=INTS_PER_SECOND;
set_timer0(0);
setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
setup_adc_ports(sAN4|sAN5|sAN6|sAN7|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_comparator(NC_NC);
setup_vref(FALSE);
setup_oscillator(False);
//----------------------------------------
// value Volts converter (3.3V / 255 sample)
reference = 0.012941176;
// wait mechanical stabilization of sensor
delay_ms(4000);
// loop A/D
do {
// sample the x axis
set_adc_channel( 4 );
delay_us(10);
value = Read_ADC();
// convert to volts
x = (float)reference * (float)value;
// here there are other Axis...
// .....
delay_ms(10);
} while (TRUE);
}
-------------------------------------------------------------------
accelleration.h
-------------------------------------------------------------------
#include <16F688.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOCPD //No EE protection
#FUSES PUT //Power Up Timer
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C4,rcv=PIN_C5,bits=8) |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Sep 21, 2005 5:24 pm |
|
|
The line in your program shown below in bold should be removed.
Quote: | //----------------------------------------
setup_oscillator( OSC_8MHZ );
int_count=INTS_PER_SECOND;
set_timer0(0);
setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
setup_adc_ports(sAN4|sAN5|sAN6|sAN7|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_comparator(NC_NC);
setup_vref(FALSE);
setup_oscillator(False); <-- Remove this line
//---------------------------------------- |
|
|
|
Guest
|
|
Posted: Thu Sep 22, 2005 2:35 am |
|
|
Incredible, I was not really realized to have written again that istruction. That's why it worked only with the external oscillator� Thank you very much and excuse me for the ingenuity of this error�
Best regards
M. |
|
|
|