TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Olaf en 06 de Septiembre de 2009, 15:29:23

Título: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 06 de Septiembre de 2009, 15:29:23
Hola muy buenas un saludo a todos!

Como reza en el titulo del post, no me funciona el SCK en CCS, sin embargo el pin esta bien, he comprobado los diodos que llevan todos los pines y ninguno esta roto, he probado con dos micros de PIC16F722 y uno PIC18F2550, y nada. Solo consigo 0.00 voltios. Porque debería medir algo en continua si tengo una señal de reloj. Lo he probado como pin I/O convencional y funcionan bien.
El caso es que las instrucciones las hace porque si que saca bits por el SDO, ya que en este pin, si que mido dependiendo de que valores envíe. Quiero que trabaje como maestro sobre un transceptor, pero claro si no le envía señal de reloj no hay nada que hacer.

Os pregunto porque ya de verdad no se que hacer. Este es el código que hago en CCS versión 4.084

Código: [Seleccionar]
#include <esclavo_SPI_v1_0.h>
#include <MRF24J40.h>
#include <MIspi.c>

BYTE dato;

void main()
{
#use spi // esto lo he puesto por probar pero tampoco da ningun resultado, se supone que lo hace ya el setup_SPI
   set_tris_a (0x00);          // Configurado como salida el puerto A
   set_tris_b (0xF1);          // Configurado forma   I/O el puerto B
   set_tris_c (0xD0);          // Configurado forma   I/O el puerto C
   setup_oscillator(OSC_500KHZ);
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64|SPI_SAMPLE_AT_END);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_vref(FALSE);
   enable_interrupts(INT_SSP);
   enable_interrupts(GLOBAL);
   
   spi_write(0xFF); //he leído que hay que escribir algo en el registro SSPBUFF de ahí esa instrucción.

   SPIconf(); // función de configuración del esclavo en cuestión.
   
   while(TRUE)
   {
   
   dato=spi_read(0); //el cero lo pongo porque ley que si era el máster debía llevarlo.
   
   dato=SPIgetcorto(TXMCR);
 
   dato=SPIget(0x024c);
   dato=SPIgetcorto(ORDER);
   
   }
   

}

Mis fuses son estos.

Código: [Seleccionar]
#include <16F722.h>
#device *=16
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV19               
#FUSES PLLEN                 
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOVCAP               
#use delay(clock=500000)
#define SPI_CLK   PIN_C3
#define SPI_DI   PIN_C4
#define SPI_DO   PIN_C5
#define CSn  PIN_B3
#define wake PIN_B2
#define RSn  PIN_B1


mis funciones para el SPI:

Código: [Seleccionar]
BYTE SPIgetcorto(BYTE direccion)
{
   BYTE data;
   BYTE parte;
   parte=(direccion<<1)&(0b01111110);
   //if (parte==0x20){print8bits1c(2,12,0x53);}
   
   output_low(CSn);
   spi_write(parte);
   //data=spi_read(0);
   if( spi_data_is_in() )
   {data = spi_read(0);}
   output_high(CSn);
   
   return data;
}

void SPIputcorto(BYTE direccion, BYTE dato)
{
   BYTE parte;
   parte=((direccion<<1)&(0b01111110)|0x01);
   
   output_low(CSn);
   spi_write(parte);
   spi_write(dato);
   output_high(CSn);
}


BYTE SPIget(unsigned int16 direccion)
{
   BYTE parteH;
   BYTE parteL;
   BYTE data;  // (direccion>>3)&(0b01111111)|0x80   (direccion<<5)&(0b01110000)
   
   parteL=direccion<<5;
   parteH=direccion>>3|0x80;
//if (parteH==0xc9){print8bits1c(2,12,0x53);}
//if (parteL==0x80){print8bits1c(2,0,0x55);}

   output_low(CSn);
   spi_write(parteH);
   spi_write(parteL);
   data=spi_read();
   output_high(CSn);
   
   //if (data==0x00){print8bits1c(2,3,0x52);}
   //else {print8bits1c(2,6,0x54);}
   return data;
}

void SPIput(unsigned int16 direccion, BYTE dato)
{
   
   BYTE parteH;
   BYTE parteL;
   parteL=direccion<<5|0x10;
   parteH=direccion>>3|0x80;
   
   output_low(CSn);
   spi_write(parteH);
   spi_write(parteL);
   spi_write(dato);
   output_high(CSn);
}

void SPIconf (void)
{
OUTPUT_LOW(RSn);
   LCDdelay(254);
   LCDdelay(254);
   OUTPUT_HIGH(RSn);
   LCDdelay(254);
   LCDdelay(254);

}

He podido ver en este mismo foro algunos otros ejemplos de uso del SPI, pero combinan el lenguaje C con lenguaje ensamblador, usado para memorias y otros aparatos. Pero no me logro aclarar con nada.

En fin todo consejo o ayuda lo agradecería mucho, un saludo a todos  :)
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 08 de Septiembre de 2009, 14:35:26
Señores no me digan que había hecho antes mal por que no lo se, el caso es que esto si que funciona.  :-/ :-/

Bueno si a alguien le es útil esta código funciona.  Compilado en la versión 4.084 de CCS.

Código: [Seleccionar]
#include <esclavo_SPI_v1_0.h>
#include <string.h>
#include <MRF24J40.h>

#include <MILCD.c>
#include <MIspi.c>
#include <MIMenu.c>
#include <MISinterrupciones.c>

 #locate SSPBUF = 0X13
 #locate SSPCON = 0X14
 #locate SSPSTAT = 0X94
 #locate ANSELA = 0X185
 #locate ANSELB = 0X186


BYTE dato;

void main()
{

   
   setup_oscillator(OSC_500KHZ);
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64|SPI_SAMPLE_AT_END);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_vref(FALSE);
   //enable_interrupts(INT_EXT);
   enable_interrupts(INT_TIMER0);
   //enable_interrupts(INT_SSP);
   enable_interrupts(GLOBAL);
   set_tris_a (0x00);          // Configurado como salida el puerto A
   set_tris_b (0xF1);          // Configurado forma   I/O el puerto B
   set_tris_c (0xD0);          // Configurado forma   I/O el puerto C

conf_display_8bits();
SET_TIMER0(0xE2);

   /*SSPCON=0b00100010;   // con esta configuración en vez de el setup_spi también funciona, pero no las dos cosas a la vez!!!
   SSPSTAT=0x10000000;
   SSPBUF=0XFF;
   LCDdelay (0x03);*/
         
   while(TRUE)
   {
   OUTPUT_LOW(PIN_C1);
   print8bits1c(1,0,0x54);
   LCDdelay(0x03);              //introduzco un retardo, esto es solo para comprobar que esta corriendo el programa para visualizarlo por el display.
   OUTPUT_HIGH(PIN_C1);
   print8bits1c(1,0,0x55);
   LCDdelay(0x03);              //introduzco un retardo, esto es solo para comprobar que esta corriendo el programa para visualizarlo por el display.
   dato=SPIgetcorto(TXMCR);
   dato=SPIget(0x024c);
   dato=SPIgetcorto(ORDER);   
   }
   
}

Código: [Seleccionar]
BYTE SPIgetcorto(BYTE direccion)
{
   BYTE data;
   BYTE parte;
   parte=(direccion<<1)&(0b01111110);
   //if (parte==0x20){print8bits1c(2,12,0x53);}
   
   output_low(CSn);
   spi_write(parte);
   //data=spi_read(0);
   if( spi_data_is_in() )
   {data = spi_read(0);}
   output_high(CSn);
   
   return data;
}

void SPIputcorto(BYTE direccion, BYTE dato)
{
   BYTE parte;
   parte=((direccion<<1)&(0b01111110)|0x01);
   
   output_low(CSn);
   spi_write(parte);
   spi_write(dato);
   output_high(CSn);
}


BYTE SPIget(unsigned int16 direccion)
{
   BYTE parteH;
   BYTE parteL;
   BYTE data;  // (direccion>>3)&(0b01111111)|0x80   (direccion<<5)&(0b01110000)
   
   parteL=direccion<<5;
   parteH=direccion>>3|0x80;
//if (parteH==0xc9){print8bits1c(2,12,0x53);}
//if (parteL==0x80){print8bits1c(2,0,0x55);}

   output_low(CSn);
   spi_write(parteH);
   spi_write(parteL);
   data=spi_read();
   output_high(CSn);
   
   //if (data==0x00){print8bits1c(2,3,0x52);}
   //else {print8bits1c(2,6,0x54);}
   return data;
}

void SPIput(unsigned int16 direccion, BYTE dato)
{
   
   BYTE parteH;
   BYTE parteL;
   parteL=direccion<<5|0x10;
   parteH=direccion>>3|0x80;
   
   output_low(CSn);
   spi_write(parteH);
   spi_write(parteL);
   spi_write(dato);
   output_high(CSn);
}

Estas son las funciones que yo utilizo para comunicarme con el MRF24J40MA mediante SPI.
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 16 de Octubre de 2009, 09:01:26
Si a alguien le es util este es el programa completo que comunica perfectamente con el MRF24J40MA, y que este periferico transmite y recibe perfectamente, eso si no he conseguido hacer funcionar el acuse de recibo, pero entre mis dos módulos con este mismo código, siempre transmite y siempre recibe.

Nota: transmite siempre que se pulse un pulsador y recibe cuando el otro modulo transmite, todo se visualiza en un display (si alguien lo necesita también puedo poner las rutinas del display)

Funcion principal
Código: [Seleccionar]
#include <esclavo_SPI_v1_3.h>
#include <string.h>
#include <MRF24J40.h>
#include <MILCD.c>
#include <MIspi.c>
#include <MIMenu.c>
#include <MISinterrupciones.c>
 
int8 into=0x30;

void main()
{   
   setup_oscillator(OSC_500KHZ);
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); //configuracion del SPI para que funcione el MRF24J40
   LCDdelay (0x03);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_vref(FALSE);
   enable_interrupts(INT_EXT);
   EXT_INT_EDGE(L_TO_H);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   set_tris_a (0x00);          // Configurado como salida el puerto A
   set_tris_b (0xF1);          // Configurado forma   I/O el puerto B
   set_tris_c (0xD0);          // Configurado forma   I/O el puerto C
   
   output_high(CSn);

conf_display_8bits();
SPIconf();

SET_TIMER0(0xE2);

   while(TRUE)
   {
   if (into==0x3A)
      {
      into=0x30;
      //SPIputcorto(TXNCON,0x05); //bit0 ordena el envio, vuelve a '0' por hard
      //bit2 se solicita acuse de recibo. Si lo deseamos asi debe estar siempre a '1'
      }
   
   if (into<0x3A)
      {
      print8bits1c(1,0,into);
      into++;
      }
   
     menu();
     
   }
   
}

menu

Código: [Seleccionar]
char mostrar=0x30;
int16 a;
void menu ()
{
switch (estado)
  {
   case 0:
   //codigo_8bits(0x01);         // Clear display
   //Recarga pulsa_flagX y cambia de estado segun pulsemos.
   if (pulsa_flag1){ pulsa_flag1=0; mostrar++; print8bits1c(1,8,mostrar); } //estado=1; }
   if (pulsa_flag2)
   { pulsa_flag2=0;
   print8bits1c(1,8,mostrar);
   for (a=0x003;a<=0x07F;a++) {SPIput(a,mostrar);}
   SPIputcorto(TXNCON,0x05);  //con esta instruccion enviamos la orden de transferir lo que hay en el regsitro TXnormal
   }
   if (pulsa_flag3){ pulsa_flag3=0; mostrar--; print8bits1c(1,8,mostrar); }//estado=1; }
   break;
}

interrupciónes
 
Código: [Seleccionar]
BYTE num4=0x31;
BYTE num5=0x31;
BYTE num6=0x31;

#int_TIMER0
void  TIMER0_isr(void)  //software antirrebotes para los pulsadores

    if ((INPUT(PIN_C6)==0)&&(pulsa_bit1==0)) {pulsa_flag1=1;}
    pulsa_bit1=~INPUT(PIN_C6);
 
    if ((INPUT(PIN_C7)==0)&&(pulsa_bit2==0)) {pulsa_flag2=1;}
    pulsa_bit2=~INPUT(PIN_C7);
 
    if ((INPUT(PIN_B4)==0)&&(pulsa_bit3==0)) {pulsa_flag3=1;}
    pulsa_bit3=~INPUT(PIN_B4);
}

#int_EXT
void  EXT_isr(void)
{
BYTE leido;
BYTE interrupcion;

interrupcion=SPIgetcorto(INTSTAT);
interrupcion=(interrupcion&0x09);

TXstatus=SPIgetcorto(TXSTAT);
TXstatus=(TXstatus&0x21);

//se comprueba que la interrupcion es producida por transmision
If (interrupcion==0x01)
{
print8bits1c(1,1,0x54);       // muestra la 'T' de transferencia

   if (num4==0x3A) {num4=0x30;}
   if (num4<0x3A)  {
   print8bits1c(2,1,num4); //muestra el numero de veces que ha transmitido
   num4++;}


SPIstatus(); // con esto estamos seguros de que solo entra si hemos hecho una transferencia.
SPIconf();
}

funciones del SPI

Código: [Seleccionar]
BYTE num1=0x30;
BYTE num2=0x30;
BYTE num3=0x30;

BYTE TXstatus;

BYTE SPIgetcorto(BYTE direccion)
{
   BYTE data;
   BYTE parte;
   parte=(direccion<<1)&(0b01111110);
 
   output_low(CSn);
   spi_write(parte);
   
   data = spi_read(0);
   output_high(CSn);
   
   return data;
}

void SPIputcorto(BYTE direccion, BYTE dato)
{
   BYTE parte;
 
   parte=((direccion<<1)&(0b01111110)|0x01);
   
   output_low(CSn);
   spi_write(parte);
   spi_write(dato);
   output_high(CSn);
}


BYTE SPIget(unsigned int16 direccion)
{
   BYTE parteH;
   BYTE parteL;
   BYTE data; 
   parteL=direccion<<5;
   parteH=direccion>>3|0x80;
   output_low(CSn);
   spi_write(parteH);
   spi_write(parteL);
   //if( spi_data_is_in() )
   //{
   data = spi_read(0);
   //}
   output_high(CSn);
   return data;
}

void SPIput(unsigned int16 direccion, BYTE dato)
{
   
   BYTE parteH;
   BYTE parteL;
   parteL=direccion<<5|0x10;
   parteH=direccion>>3|0x80;
   
   output_low(CSn);
   spi_write(parteH);
   spi_write(parteL);
   spi_write(dato);
   output_high(CSn);
}

void SPIconf (void)
{
   BYTE i;

   SPIputcorto(SOFTRST,0x07); //reset por software, borrara todo, los bits pasaran a '0' por hardware.
   do
    {
        i = SPIgetcorto(SOFTRST);
    }
   while((i&0x07)!=0x00);

   SPIputcorto(PACON2,0x98); //habilitamos la FIFO y ponemos un tiempo de 96us a los GPIOx
   SPIputcorto(TXSTBL,0x95); //tiempo de estabilizacion de los bits y tiempo de espaciado entre ellos.
   SPIputcorto(ORDER,0xFF);//Debe tener el valor FF para que se trate de una comunicacion NORMAL y se use el TXFIFO NORMAL. Posicion 0x000.

   SPIput(RFCON0,0x02);     //se habilita el canal 11
   SPIput(RFCON1,0x01);     //Bits de control de optimizacion del VCO (oscilador controlado por tension)
   SPIput(RFCON2,0x80);     //activacion del bit PLLEN para habilitar la transmision recepcion. PLL debe estar habilitado para RF recepción o transmisión
   SPIput(RFCON6,0x90);     //activacion del filtro de TX, 1ms de tiempo de recuperacion desde el modo sleep
   SPIput(RFCON7,0x80);     //se configura el modo sleep con un reloj interno de 100kHz
   SPIput(RFCON8,0x10);     //se activa el VCO
   SPIput(SLPCON1,0x21);     //se deshabilita el pin de CLKOUT y se configura el preescaler del reloj sleep
   
   SPIputcorto(BBREG2,0x80); //configura modo ED deteccion de energia
   SPIputcorto(RSSITHCCA,0x60); //habilita el modo anterior
   SPIputcorto(BBREG6,0x40); //habilita la recepcion y su almacenaje en RXFIFO
   
   SPIput(RFCON3,0x00);     //se configura para la maxima potencia de transmision.
     
   SPIput(SLPCON0,0x02);     //Se configura la interrupcion como flanco de subida.
   SPIputcorto(INTCON,0xF6); //Se habilitan las interrupciones de RX y TX. Se dejan deshabilitadas las demas.
   
   // Configuracion Non-beacon (sin balizas, no faro) Pero siendo coordinador PAN
   
   
   SPIputcorto(TXMCR,0x1C);//Se configura el numero de reintentos y el no uso de los slots
   SPIputcorto(TXPEND,0x7D); //se le pone el valor recomentado de espaciado entre bits y se activa el reconocimiento.
   //SPIputcorto(ACKTMOUT,0xB9);
   SPIputcorto(RXFLUSH,0x01); //se resetea el puntero de RXFIFO y se aceptan todas las tramas (datos comandos etc). 0x05, valor para solo aceptar datos.
   SPIputcorto(BBREG1,0x00);     //se halitita la recepcion de paquetes.
   
   SPIputcorto(RFCTL,0x04); //Se resetea el estado del transceptor, pero no los valores introducidos.
   SPIputcorto(RFCTL,0x00);
   LCDdelay(254);

    do
    {
        i = SPIget(RFSTATE);
    }
    while((i&0xA0)!=0xA0);
   
    /* Program the short MAC Address, 0xffff */
    SPIputcorto(SADRL,0xFF);
    SPIputcorto(SADRH,0xFF);
         //load the short address of the device with 0xffff which means that it will be ignored upon receipt
    SPIputcorto(PANIDL,0xFF);
    SPIputcorto(PANIDH,0xFF);
         //load the pan address also with 0xffff;
   
    /* Program Long MAC Address*/
    for(i=0;i<8;i++)
    {
        SPIputcorto(EADR0+i,0x55);
    }
         //load the long address as 07,06,..   

   
   SPIputcorto(RXMCR,0x21);//Configura el dispoditivo como coordinador PAN y modo (promiscuo) que acepta todas las tramas con un buen CRC. 01 dispositivo 09 coordinador

   SPIput(0x000,0x01);  //carga los valores adecuados en el RXFIFO
   SPIput(0x001,0x7D);
   SPIput(0x002,0x00);
}



void SPIstatus (void)
{


 
 // se usa para comprobar que ha ocurrido si la ultima transmisión se ha realizado correctamente, problemas en el canal o falta de acuse de recibo.   
   if (TXstatus==0x00)
   {
   print8bits1c(1,13,0x4F); //muestra una 'O' de ok
   if (num1==0x3A) {num1=0x30;}
   if (num1<0x3A) 
      {
      print8bits1c(2,13,num1);
      num1++;
      }
   }
   
   if (TXstatus==0x01)
   {
   print8bits1c(1,14,0x43); //muestra una 'C' de canal bien envio mal
   if (num2==0x3A) {num2=0x30;}
   if (num2<0x3A) 
      {
      print8bits1c(2,14,num2);
      num2++;
      }
   }
     
   if (TXstatus==0x21)
   {
   print8bits1c(1,15,0x45); //muestra una 'E' de canal mal envio mal
   if (num3==0x3A) {num3=0x30;}
   if (num3<0x3A) 
      {
      print8bits1c(2,15,num3);
      num3++;
      }
   }
 
}

bueno espero que a alguien le sea util ;)
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: inovaspirit en 04 de Diciembre de 2009, 12:04:01
Por favor, alguien me podria explicar como funciona o donde consigo la libreria <MRF24J40.h>, porque por mas que la he buscado no la encuentro, o si me dan algunos tips de como poder desarrollarla se los agradeceria. Gracias
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 04 de Diciembre de 2009, 16:00:13
Existe tal libreria??

Porque no pruebas modificar el ejemplo Ex_ZMD.c de la carpeta de ejemplos de CCS ??
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 04 de Diciembre de 2009, 16:03:35
Si a alguien le es util este es el programa completo que comunica perfectamente con el MRF24J40MA, y que este periferico transmite y recibe perfectamente, eso si no he conseguido hacer funcionar el acuse de recibo, pero entre mis dos módulos con este mismo código, siempre transmite y siempre recibe.

bueno espero que a alguien le sea util ;)

Podrias ponerlo todo en un zip y adjuntarlo??
Para los que vamos a empezar pronto con esto nos serviria de mucho, no vi que no estan incluidas las librerias.
Eso si no te complica la vida... :lol: :lol:
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 12 de Marzo de 2010, 10:45:07
Si a alguien le es util este es el programa completo que comunica perfectamente con el MRF24J40MA, y que este periferico transmite y recibe perfectamente, eso si no he conseguido hacer funcionar el acuse de recibo, pero entre mis dos módulos con este mismo código, siempre transmite y siempre recibe.

bueno espero que a alguien le sea util ;)

Podrias ponerlo todo en un zip y adjuntarlo??
Para los que vamos a empezar pronto con esto nos serviria de mucho, no vi que no estan incluidas las librerias.
Eso si no te complica la vida... :lol: :lol:

Yo encantado  :g) , pero creo que el archivo tengo que ponerlo en un hipervinculo o un FTP, y actualmente no dispongo de espacio FTP, si quieres dame una direccion de correo y te lo mando, la mía es olafwolf2@gmail.com  :) si eso ya te mandaria el que funciona con acuse de recibo y todo.  :mrgreen:

Comento, la librería MRF24J40.h no es mas que todas las direcciones de ese dispositivo asociadas con sus nombres. La hice antes de darme cuenta de que Microchip también proporciona algo muy parecido. El resto de librerías si que están incluidas en los programas que he puesto.  ;-)
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Pchuqui_1 en 20 de Marzo de 2010, 11:52:17
Hola Ingeniero_Olaf. Queria preguntarte, que protocolo estas usando? Se que se pueden programar 3 protocolos. Yo estaba intentando utilizar el programa ZENA para hacerlo. Por otro lado los micros (PIC16F887, 16F877A, 16F917, 16F777, 16F727, 16f77) tienen el stack cargado no es asi? Gracias
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 22 de Marzo de 2010, 19:44:25
Hola Ingeniero_Olaf. Queria preguntarte, que protocolo estas usando? Se que se pueden programar 3 protocolos. Yo estaba intentando utilizar el programa ZENA para hacerlo. Por otro lado los micros (PIC16F887, 16F877A, 16F917, 16F777, 16F727, 16f77) tienen el stack cargado no es asi? Gracias

Mu buenas te comento: El protocolo que yo uso es el que viene reflejado en la norma oficial http://standards.ieee.org/getieee802/download/802.15.4-2006.pdf, no conozco con exactitud la diferencia con los otros dos. Lo del programa ZENA lo intente, pero no saque nada de nada en claro. Así que no tengo ni idea de como va. Y siento decirte que creo que no están incluidos en el stack los chips inferiores a la serie 18F. Lo que yo he hecho es configurar lo a capón y hacerme mis propias librerías, que creo que MGLSOFT colgará próximamente. Espero que te sean útiles Suerte!  ;-)
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 22 de Marzo de 2010, 20:21:32
Gracias Ing Olaf.
Apenas pueda las subo a 4shared y las dejo compartidas, si??
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 23 de Marzo de 2010, 09:33:54
Gracias Ing Olaf.
Apenas pueda las subo a 4shared y las dejo compartidas, si??

Perfecto :)
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 23 de Marzo de 2010, 09:47:43
Prueben de bajar los archivos, creo haber compartido la carpeta de modo que puedan subir otras cosas alli.
Saludos!!

http://www.4shared.com/dir/34625164/31047a86/RF_modules.html (http://www.4shared.com/dir/34625164/31047a86/RF_modules.html)
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Pchuqui_1 en 23 de Marzo de 2010, 15:51:18
Hola. _Ya descarge los archivos. Lo unico que queria preguntar es cual de ellos va ha funcionar como receptor y cual como emisor? 
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 23 de Marzo de 2010, 16:07:39
Buena pregunta, aunque no es exactamente ese el nombre de la funcion de los nodos, es importante saberlo...
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 24 de Marzo de 2010, 05:46:15
Hola. _Ya descarge los archivos. Lo unico que queria preguntar es cual de ellos va ha funcionar como receptor y cual como emisor? 

Con estos modulos los dos pueden funcionar como emisor y receptor, por ello son transceptores. La única diferencia es que al menos uno debe ser coordinador o coordinar PAN o las dos cosas y el otro o bien igual que el primero o un simple dispositivo, para que se puedan comunicar, este se configura con la constante "modos". Dos dispositivos no se comunicaran entre si. Espero haber resuelto la cuestión.  :)
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: stk500 en 24 de Marzo de 2010, 16:19:45
Hola Olaf!
 podia poner el esquema, si es tan amanle :mrgreen:, es que estoy aprendiendo C y quiero simularlo :P
Saludos
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 24 de Marzo de 2010, 16:24:42
No existe en proteus, y no se como podria simularse un elemento que emite por RF. :shock:
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: stk500 en 24 de Marzo de 2010, 17:05:33
No existe en proteus, y no se como podria simularse un elemento que emite por RF. :shock:
:shock: :shock: que :shock:  :D :D sorry :mrgreen:
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 24 de Marzo de 2010, 19:16:05
Hola. _Ya descarge los archivos. Lo unico que queria preguntar es cual de ellos va ha funcionar como receptor y cual como emisor? 

Con estos modulos los dos pueden funcionar como emisor y receptor, por ello son transceptores. La única diferencia es que al menos uno debe ser coordinador o coordinar PAN o las dos cosas y el otro o bien igual que el primero o un simple dispositivo, para que se puedan comunicar, este se configura con la constante "modos". Dos dispositivos no se comunicaran entre si. Espero haber resuelto la cuestión.  :)

Creo que me falta aclarar una cosa... la función de configuracion es SPIconf(), (modificar "modos" y direcciones para que sea coordinador o dispositivo ) la función de envió es EnvioDatos(); (configurar dicha función al gusto, cada uno querrá almacenar los datos en sus variables) y la recepción se hace por interrupción, también modificar al gusto.

Evidentemente solo es necesario modificar las variables donde se almacenan los datos que recibimos. El resto creo que esta bien explicado en el propio código.
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 25 de Marzo de 2010, 00:25:48
Olaf:
Podras pasarnos o subir al mismo lugar donde yo puse tus librerias el resto de los archivos para el programa??
Esto es porque al copiarlos de la pagina donde estan pegados, viene caracteres extraños que complican el trabajo o sino hay que ponerse y escribirlo todo de nuevo, no es vagancia, pero si has sido tan amable de compartir el resto con nosotros, pense que esto que pido no molestaria.

En caso que accedas y te lleva menos tiempo, me los pasas y los subo yo.

Desde ya gracias!! :mrgreen:
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 25 de Marzo de 2010, 08:27:39
Olaf:
Podras pasarnos o subir al mismo lugar donde yo puse tus librerias el resto de los archivos para el programa??
Esto es porque al copiarlos de la pagina donde estan pegados, viene caracteres extraños que complican el trabajo o sino hay que ponerse y escribirlo todo de nuevo, no es vagancia, pero si has sido tan amable de compartir el resto con nosotros, pense que esto que pido no molestaria.

En caso que accedas y te lleva menos tiempo, me los pasas y los subo yo.

Desde ya gracias!! :mrgreen:

Hecho, ya esta todo el proyecto ahí, pero vamos lo que falta es lo que ya te comente, el menú en un display.
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 25 de Marzo de 2010, 08:33:20
Es muy embromado ese menu lcd, que no puedes subirlo??
No te ofendas, es curiosidad, nomas...
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 25 de Marzo de 2010, 10:40:34
Es muy embromado ese menu lcd, que no puedes subirlo??
No te ofendas, es curiosidad, nomas...

No no hay ningún problema, lo que pienso es que es mucho codigo poco util, pero bueno ya esta subido espero que sea de mucha ayuda a mucha gente :D  :mrgreen:
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 25 de Marzo de 2010, 11:25:10
Ahi compilo bien.
Veo que cambiaste a un PIC16F726, te quedaste corto con la ROM??
Por otro lado, asumo que tu display trabaja a 8 bits, o sea que utilizas todo un puerto para atenderlo, mas tres pines de otro puerto, es asi??
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 26 de Marzo de 2010, 13:30:27
Ahi compilo bien.
Veo que cambiaste a un PIC16F726, te quedaste corto con la ROM??
Por otro lado, asumo que tu display trabaja a 8 bits, o sea que utilizas todo un puerto para atenderlo, mas tres pines de otro puerto, es asi??

Todo es cierto, me quede corto con la RAM y la ROM, el 722 era demasiado pequeño para albergar el menú, y la diferencia de precio es irrisoria.

Y si, ya que tenia pines de sobra use el puerto entero para el display.

Aviso que el menú es poco útil y muy especifico para mi aplicación, tiene que funcionar en perfecta sincronía con el centro de la estrella, por si a alguien le da por montarlo :P  que no se lleve a engaño :mrgreen:
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 26 de Marzo de 2010, 13:43:36
Ahi compilo bien.
Veo que cambiaste a un PIC16F726, te quedaste corto con la ROM??
Por otro lado, asumo que tu display trabaja a 8 bits, o sea que utilizas todo un puerto para atenderlo, mas tres pines de otro puerto, es asi??

Todo es cierto, me quede corto con la RAM y la ROM, el 722 era demasiado pequeño para albergar el menú, y la diferencia de precio es irrisoria.

Y si, ya que tenia pines de sobra use el puerto entero para el display.

Aviso que el menú es poco útil y muy especifico para mi aplicación, tiene que funcionar en perfecta sincronía con el centro de la estrella, por si a alguien le da por montarlo :P  que no se lleve a engaño :mrgreen:
Entiendo que es una aplicacion de juegos, pero de que tipo??
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 26 de Marzo de 2010, 14:47:59
lo siento eliminado.
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: MGLSOFT en 26 de Marzo de 2010, 15:02:11
Esta muy bueno!!
Felicitaciones!!
Vas a impactar a tu profe con esto, si ya no lo has hecho!! :mrgreen:
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: Olaf en 26 de Marzo de 2010, 22:42:33
Esta muy bueno!!
Felicitaciones!!
Vas a impactar a tu profe con esto, si ya no lo has hecho!! :mrgreen:

Muchas gracias  :mrgreen: y si, ya queda poquito  :)
Título: Re: Comunicacion SPI con el PIC16F722, no me funciona el SCK en CCS
Publicado por: RuL18berto en 26 de Agosto de 2016, 00:44:55
Prueben de bajar los archivos, creo haber compartido la carpeta de modo que puedan subir otras cosas alli.
Saludos!!

http://www.4shared.com/dir/34625164/31047a86/RF_modules.html (http://www.4shared.com/dir/34625164/31047a86/RF_modules.html)



Buenas!!!! Estan ahi? !?!?!?! Soy estudiante y estoy empezando a trabajar con estos modulos pero estoy medio trabado y queria ver ejemplos que me guien...  De casualidad todavia siguen existiendo los archivos de este link?  Gracias!!!