Autor Tema: Usando dos puertos RS232 con el Pic18F25K80 (CCS)  (Leído 9086 veces)

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

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #15 en: 15 de Julio de 2014, 14:40:13 »
Ok amigo estare pendiente de tus progresos!   :mrgreen:

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #16 en: 15 de Julio de 2014, 20:02:45 »
Ahora funciona de todas las maneras posibles, no hay manera de que falle. Definiendo pin y sin definirlos, del derecho y del revés, funciona perfecto.

Pana, tu programa funciona perfecto en la realidad.
Saludos desde Granada, España.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #17 en: 15 de Julio de 2014, 23:37:43 »
Ahora funciona de todas las maneras posibles, no hay manera de que falle. Definiendo pin y sin definirlos, del derecho y del revés, funciona perfecto.

Pana, tu programa funciona perfecto en la realidad.


Oh Me alegro que te alla servido de ayuda el programita amigo!  :D
Y con tu prueba en fisico veo que el proteus no me dejo mal   :mrgreen:

Ahora a seguir jugando   :D

Saludos

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #18 en: 16 de Julio de 2014, 20:04:41 »
He implementado un buffer distinto para cada puerto y funciona correctamente. La velocidad máxima fiable es de 38400 trabajando a 40Mhz con un cristal de 10Mhz.
Mañana, que ya es hoy, voy a ver si puedo pasar a retirar unos cristales de 16Mhz, para realizar las pruebas a 64Mhz a ver que pasa.
« Última modificación: 16 de Julio de 2014, 20:08:28 por dogflu66 »
Saludos desde Granada, España.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #19 en: 16 de Julio de 2014, 21:19:01 »
No se el 25K80, pero el 26K80 tiene un oscilador interno que a 64 Mhz funciona de maravilla, yo lo uso sin cristal y logro comunicaciones a 115200 bps sin problemas!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #20 en: 17 de Julio de 2014, 11:51:05 »
Se supone que la única diferencia está en la cantidad de memoria flash, si tienes la configuración de los fuses a mano me ahorras tiempo.
Saludos desde Granada, España.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #21 en: 17 de Julio de 2014, 14:37:52 »
Esta configuracion me la paso el amigo MGLSOFT  :mrgreen:
Citar
//Configuracion del pic18F26K80 para oscilador interno

#include <18F26K80.h>
#device adc=12
//#device icd=3 // segun el foro de CCS es para ICD3

#FUSES NOWDT                    //No Watch Dog Timer
#fuses DEBUG                    //Permite debug con ICD
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES PLLEN                    //PLL habilitado
#FUSES SOSC_DIG                 //Digital mode, I/O port functionality of RC0 and RC1
#FUSES PUT                      //Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES WDT_NOSLEEP              //Watch Dog Timer, disabled during SLEEP
#FUSES CANB                     //CANTX and CANRX pins are located on RB2 and RB3
#fuses PROTECT                  //Code protected from reads

#use delay(clock=64000000, int=64000000, RESTART_WDT)

Y como diria el funciona perfectamente   :D


Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #22 en: 17 de Julio de 2014, 20:23:15 »
Pues si que está bien calibrado el reloj interno; los dos buffer trabajando de forma independiente a 230400Bd con un reloj de 64Mhz.
Hay que tener en cuenta que el micro solo esta atendiendo a los dos puertos, no esta haciendo otra cosa.

Bueno..., eso de que no esta haciendo otra cosa es relativo, ya que esta moviendo los puertos mediante dos buffer independientes en anillo.
« Última modificación: 17 de Julio de 2014, 20:26:44 por dogflu66 »
Saludos desde Granada, España.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #23 en: 17 de Julio de 2014, 22:12:06 »
Citar
Bueno..., eso de que no esta haciendo otra cosa es relativo, ya que esta moviendo los puertos mediante dos buffer independientes en anillo.

buffer de anillo? a que te refieres con eso  :?



Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #24 en: 18 de Julio de 2014, 06:17:30 »
Mira aqui.:

http://es.m.wikipedia.org/wiki/Buffer_circular

Uso el método de los dos índices y, cuando el buffer está lleno los nuevos datos los destruyo para que no corrompan los antiguos, además también uso un contador que indica cuantos bytes hay en el buffer en todo momento.

No habia leido nunca la descricción de la wikipedia, pero es que es exacta.

Parece que el ccs también tiene funciones para asociar buffer en anillo, pero no me he preocupado de ver su funcionamiento.
« Última modificación: 18 de Julio de 2014, 14:29:27 por dogflu66 »
Saludos desde Granada, España.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Usando dos puertos RS232 con el Pic18F25K80 (CCS)
« Respuesta #25 en: 18 de Julio de 2014, 18:56:42 »
Segun veo cuando el puntero de la cola alcanza el final del array, este vuelve al comienso del array y siempre  que el size(el cual indica si el array esta full) se copiaran datos al inicio del array, pero si el size a alcanzado su limite maximo y el puntero de la cola vuelve al inicio del array y se copian nuevos datos estos destruiran los que habian previamente, por eso es que asegurarse que el size no alcance su valor maximo, porque al copiarse nuevos datos estos sobreescribiran los existentes con la consecuente perdida de estos  :?
El otro puntero el de la cabeza se incrementa cada vez que se lea un dato del array decrementando de esta forma el size.
Bueno este trabalenguas es mas o menos lo que entendi del buffer de anillo (Ring buffer), el cual nunca habia utilizado pero ahora lo probare  :D

El ccs trae un ejemplo EX_SISR.C, sino mal recuerdo  :mrgreen:

Saludos


 

anything