Autor Tema: One wire pic a pic  (Leído 2247 veces)

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

Desconectado juanez

  • PIC12
  • **
  • Mensajes: 90
One wire pic a pic
« en: 24 de Febrero de 2008, 11:46:16 »
Hola, acabo de migrar del PBP al CCS y estoy intentando hacer una comunicacion one wire entre 2 pics,

El primer pic es un 18f1320 es el pic emisor y quiero que se conecte mediante un cable solamente al pic receptor 18f2550, quiero hacerlo mediante un cable solamente por que cuando funcione quiero sustituir ese cable por unos modulos RF.

En el emisor quiero usar el oscilador interno a ser posible, ya que quiero reducir el tamaño del pcb del emisor lo maximo posible.

El codigo del emisor:
-----------------------------------------------------------------------------------------------------------------------
#include <18f1320.h>
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(CLOCK=8000000)
#use rs232(baud=2400, xmit=PIN_B1, rcv=PIN_B4)

void main()
{
 delay_ms(300);
   do{
      putc(5);
     }
   while(true);
}   
-----------------------------------------------------------------------------------------------------------------------------------------------

No se que es lo que falla, hago la simulacion en Proteus 7.2 SP2 y el emisor no envia nada de nada.

Saludos

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: One wire pic a pic
« Respuesta #1 en: 25 de Febrero de 2008, 06:44:49 »
Prueba así: putc('5');

Desconectado juanez

  • PIC12
  • **
  • Mensajes: 90
Re: One wire pic a pic
« Respuesta #2 en: 25 de Febrero de 2008, 14:26:01 »
Ya esta resuelto, ya me transmite.

Lo que quiero hacer ahora es mandar la lectura del canal analogico A0, si configuro el ADC a 8 bits no hay problema, pero a 10bits no se como mandarla, supongo que tendre que mandar primero el byte alto y luego el byte bajo que es lo que hacia en el PBP, pero en CCS no se como se hace.

Saludos

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: One wire pic a pic
« Respuesta #3 en: 26 de Febrero de 2008, 10:00:09 »
Solo tienes que añadir #device adc=10

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: One wire pic a pic
« Respuesta #4 en: 27 de Febrero de 2008, 14:30:06 »
Además de incluir el #device adc=10 debes hacer la lectura del adc así:

int16 valor_adc;
int msb;
int lsb;

valor_adc=read_adc();
msb=valor_adc >> 8;                //leer MSB
lsb=valor_adc & 0xFF;                //leer LSB

Desconectado IOIO

  • PIC10
  • *
  • Mensajes: 46
Re: One wire pic a pic
« Respuesta #5 en: 28 de Febrero de 2008, 00:09:23 »
Hola a todos.
Juanez, siguiendo con el ejemplo de DarkVect, tambien puedes hacerlo un poco mas eficiente de la siguiente manera:

//****************************************
int16 valor_adc;
int msb;
int lsb;

valor_adc=read_adc();
msb=make8(valor_adc,1);              //leer MSB
lsb=make8(valor_adc,0);                //leer LSB
//****************************************
 
la sintaxis de make8 es:
i8 = MAKE8(var, offset)

La instrucción make8 extrae los bytes de manera mas eficiente, dado que no realiza ninguna operación aritmética ni lógica, simplemente toma el byte que le indiques de " valor_adc " y lo copia a la variable destino (msb o lsb en estos casos). por otro lado la forma de guardar las variables en CCS es el byte LSB primero y luego el MSB, por eso como offset se le pasa 1 y 0.



El código completo que envía el valor del ADC cada 300ms quedaría:

#include <18f1320.h>
#device adc=10
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(CLOCK=8000000)
#use rs232(baud=2400, xmit=PIN_B1, rcv=PIN_B4)

int16 valor_adc;
int msb;
int lsb;

void main()
{
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports( ALL_ANALOG );
   set_adc_channel(0);
   do{
        delay_ms(300);
        valor_adc=read_adc();
        msb=make8(valor_adc,1);              //leer MSB
        putc(msb);
        lsb=make8(valor_adc,0);                //leer LSB
        putc(lsb);
     }
   while(true);
}   

Saludo y cualquier duda a tus ordenes
Desde Avellaneda, Buenos Aires. Argentina

Saludos,
Sergio

Desconectado juanez

  • PIC12
  • **
  • Mensajes: 90
Re: One wire pic a pic
« Respuesta #6 en: 29 de Febrero de 2008, 17:00:05 »
Gracias a todos por sus repuestas, ahora ya lo tengo controlado.

Saludos