Autor Tema: Puerto Serial Problema con la velocidad PIC16F883  (Leído 3159 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dpulgar

  • PIC10
  • *
  • Mensajes: 2
Puerto Serial Problema con la velocidad PIC16F883
« en: 05 de Abril de 2008, 11:19:59 »
Tengo un caso extraño con el puerto serial del PIC16F883 resulta que ajusto la velocidad a 4800, pero el transmite
a 4400 baud. un error de un 8.33% he probado con varias velocidades:

Baud         
Real   Obtenido   Diferencia   %
1200   1100   -100   8.33%
2400   2200   -200   8.33%
4800   4400   -400   8.33%
9600   8800   -800   8.33%

#use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors)

he probado tambien con:
#use rs232(baud=4800,parity=N,BRGH1OK,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors)

BRGH1OK:  Allow bad baud rates on chips that have baud rate problems.

Nota: este proyecto esta armado y de 10 equipos 2 presentan este problema de transmision y recepcion
En principio este problema se lo atribuia a las etapa de transmision intermedias MAX232, etc. y ruido del circuito
y fui cambiando varias etapas del cicuito. Hasta que llegue al Micro.
El Micro realiza todas sus funciones bien, menos la tx y rx. Cuando logro ajustar con SIOW un baud rate no convencional
esto lo hago por prueba y error hasta ver el mensaje correctamente. Luego de ajustar la tx & rx no tiene
problema.

La version de CCS que utilizo es 4.068

Programa de prueba:

// Device: PIC16F883 4096 WORD, 368 Byte SRAM, 256 Byte EEProm
//                          _____
//   MCLR   --->  1  |º       | 28 <---> RB.7
//   RA.0  <--->  2  |        | 27 <---> RB.6
//   RA.1  <--->  3  |        | 26 <---> RB.5
//   RA.2  <--->  4  |        | 25 <---> RB.4
//   RA.3  <--->  5  |        | 24 <---> RB.3
//   RA.4  <--->  6  |        | 23 <---> RB.2
//   RA.5  <--->  7  |        | 22 <---> RB.1
//   Vss      --->  8  |        | 21 <---> RB.0
//   RA.7  <--->  9  |        | 20 <---  Vdd
//   RA.6  <---> 10 |        | 19 <---  Vss
//   RC.0  <---> 11 |        | 18 <---> RC.7
//   RC.1  <---> 12 |        |  17 <---> RC.6
//   RC.2  <---> 13 |        | 16 <---> RC.5
//   RC.3  <---> 14 |____ | 15 <---> RC.4
//

#include <16F883.h>
#device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES PUT                      //Power Up Timer
#FUSES NOMCLR                   //Master Clear pin enabled
#FUSES NOPROTECT                //Code not protected from reading*
#FUSES NOCPD                    //No EE protection
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOWRT                    //Program memory not write protected
#FUSES BORV40                   //Brownout reset at 4.0V

#use delay(clock=8000000,RESTART_WDT)
#use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors)

#define OFF         0
#define ON          1

#define led_1       PIN_B3
#define led_2       PIN_B6
#define led_3       PIN_B7

#define tx          PIN_C6
#define rx          PIN_C7

#ZERO_RAM

void main() {

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_8);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1 (T1_INTERNAL|T1_DIV_BY_8);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_oscillator(OSC_8MHZ|OSC_INTRC);

   output_drive(led_1);
   output_drive(led_2);
   output_drive(led_3);

   output_bit(led_1, OFF);
   output_bit(led_2, OFF);
   output_bit(led_3, OFF);

   while (true) {

      output_bit(led_1, ON);
      delay_ms(250);
      puts("Hello Word");
      output_bit(led_1, OFF);
      delay_ms(250);

   }
}

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Puerto Serial Problema con la velocidad PIC16F883
« Respuesta #1 en: 05 de Abril de 2008, 15:08:33 »
deberias de comprobar si tu pic oscila realmente al la frecuencia que crees, claro al ser oscilador interno es un problema, no se si lo podras ver en la patilla osc con el osciloscopio y si no mediante un programa haciendo toggle en un pin, si puedes lo mejor seria cambiar el oscilador por un cristal que fuese medianamente bueno y comprobar si tienes esos desfases tambien.
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Puerto Serial Problema con la velocidad PIC16F883
« Respuesta #2 en: 05 de Abril de 2008, 15:34:47 »
Creo que lo que apunta QUIQUE es lo correctos. me parece que hay programas que permiten recalibrar el oscilador interno del pic, ya que es posible que este mal calibrado.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado dpulgar

  • PIC10
  • *
  • Mensajes: 2
Re: Puerto Serial Problema con la velocidad PIC16F883
« Respuesta #3 en: 06 de Abril de 2008, 14:42:33 »
Gracias a todos por la mano. Efectivamente es la calibracion del oscilador interno he recurrido a la instru.:

setup_oscillator(OSC_8MHZ|,val_osc);

he variado "val_osc" desde -15 a 15 OSC_TUNE, hasta que transmite y recibe bien, luego he creado un programa
en VB6 para compartirlo con todos. Consiste en una calibracion por el puerto serial.
El programa del PIC varia de -15 a 15, en 31 transmiciones con un intervalo de tiempo de 500 ms, envia el dato conocido
en este caso "+"  por el RS232, el VB6 captura el dato y localiza
los datos que estan correcto luego busca el valor intermedio.

Saludos,


Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 305
Re: Puerto Serial Problema con la velocidad PIC16F883
« Respuesta #4 en: 07 de Abril de 2008, 23:00:19 »
lo voy a probar para ver como funciona ya que me pasa algo igual cuando uso el oscilador interno
gracias a todos