TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
#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.
#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:
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 :)
-
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.
#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);
}
}
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.
-
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
#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
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
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
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 ;)
-
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
-
Existe tal libreria??
Porque no pruebas modificar el ejemplo Ex_ZMD.c de la carpeta de ejemplos de CCS ??
-
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:
-
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. ;-)
-
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
-
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! ;-)
-
Gracias Ing Olaf.
Apenas pueda las subo a 4shared y las dejo compartidas, si??
-
Gracias Ing Olaf.
Apenas pueda las subo a 4shared y las dejo compartidas, si??
Perfecto :)
-
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)
-
Hola. _Ya descarge los archivos. Lo unico que queria preguntar es cual de ellos va ha funcionar como receptor y cual como emisor?
-
Buena pregunta, aunque no es exactamente ese el nombre de la funcion de los nodos, es importante saberlo...
-
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. :)
-
Hola Olaf!
podia poner el esquema, si es tan amanle :mrgreen:, es que estoy aprendiendo C y quiero simularlo :P
Saludos
-
No existe en proteus, y no se como podria simularse un elemento que emite por RF. :shock:
-
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:
-
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.
-
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:
-
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.
-
Es muy embromado ese menu lcd, que no puedes subirlo??
No te ofendas, es curiosidad, nomas...
-
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:
-
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??
-
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:
-
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??
-
lo siento eliminado.
-
Esta muy bueno!!
Felicitaciones!!
Vas a impactar a tu profe con esto, si ya no lo has hecho!! :mrgreen:
-
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 :)
-
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!!!