venho aqui como umas das últimas tentativas de fazer esse projeto dar certo. Se trata de um medidor de temperatura remoto via RF em que dois pics, um 16f877a e um 18f2550, se comunicam.
Agora meu "problema":
Estou em um dilema entre os dois compiladores C. Fiz toda a programação para a rede RF, inicialmente, no Mikroc. A rede RF finalmente (depois de alguns meses) funcionou (consegui setar corretamente os configuration bits do 18 para trabalhar com 4 MHz e fiz redundancia na transmissao RF) e os pics estavam conversando alegremente e exibindo a temperatura de um LM35 em um lcd (tudo testado no "mundo real").
Porem preciso fazer uma interface com o PC e vi que o CCS possui uma bilbioteca que possui modo bulk de transmissao. Comecei a estudar o CCS e consegui passar toda a minha programação no Mikroc para o CCS. Nas simulações do proteus tudo ocorre perfeitamente:
-os dois pics conversam e o programa que desenvolvi em C# reconhece os valores perfeitamente.
Fiquei muito feliz que finalmente tinha conseguido fechar todas as pontas do trabalho e fui testar nos protoboards em que estão montados os pics, sensor, modulos RF e ......
Não funcionou!!!
O lcd que mantive no trabalho só para debugar o código fica todo borrado, evidenciando problema com clock.
Acredito que eu não esteja conseguindo setar corretamente os Fuses para o funcionamento do 18, e por isso peço uma ajuda a voces do forum, para eu descobrir se é este mesmo o problema, ou outra coisa ..
OBS.: estou usando cristais de 4mhz nos dois pics e preciso que as CPU deles trabalhem nessa velocidade para que o RF funcione a 300 de Baud.
Código do pic 18: (favor não levar em consideração alguns comentarios e algumas partes do código comentadas, ainda não tive tempo de padronizar).
- Código: Selecionar todos
#include <18f2550.h>
#fuses PLL1,CPUDIV1,USBDIV,XT,NOBROWNOUT,VREGEN,NOWDT,MCLR,NOPUT,NOLVP,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=300, xmit=PIN_C6, rcv=PIN_C7)//Configura serial
#include <stdlib.h>
#include <string.h>
/////////////////////////////////////////////////////////////////////////////
//
// CCS Library dynamic defines. For dynamic configuration of the CCS Library
// for your application several defines need to be made. See the comments
// at usb.h for more information
//
/////////////////////////////////////////////////////////////////////////////
//#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
//#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
//#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
//#define USB_EP1_TX_SIZE 8 //size to allocate for the tx endpoint 1 buffer
//#define USB_EP1_RX_SIZE 1 //size to allocate for the rx endpoint 1 buffer
/////////////////////////////////////////////////////////////////////////////
//
// Include the CCS USB Libraries. See the comments at the top of these
// files for more information
//
/////////////////////////////////////////////////////////////////////////////
//#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
//#include <PicUSB.h> //Configuración del USB y los descriptores para este dispositivo
//#include <usb.c> //handles usb setup tokens and get descriptor reports
/////////////////////////////////////////////////////////////////////////////
//
// Include the CCS USB Libraries. See the comments at the top of these
// files for more information
//
/////////////////////////////////////////////////////////////////////////////
#define LCD_ENABLE_PIN PIN_B6 ////
#define LCD_RS_PIN PIN_B5 ////
//#define LCD_RW_PIN PIN_B ////
#define LCD_DATA4 PIN_B0 ////
#define LCD_DATA5 PIN_B1 ////
#define LCD_DATA6 PIN_B2 ////
#define LCD_DATA7 PIN_B3
#define LCD_DATA_PORT getenv("SFR:PORTB")
#include <lcd.c>
//*********************************************************
//*********************************************************
void main(void)
{
char txt[18],saida[10],saida2[10],temp;
unsigned char m,k;
int x=0,j=0,i=0,test=0,u=0,sai=0;
// usb_init(); //inicializamos el USB
// usb_task(); //habilita periferico usb e interrupciones
// usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host
Lcd_Init(); // Inicialização do LCD
Lcd_putc("Temp.:"); //Escrita da palavra Temperatura na linha 1 e coluna 1
// uart1_init(300); //Inicialização do módulo transmissão/recepção USART com baud rate de 300
//delay_ms(90); //Atraso para estabilização do módulo
// delay_ms(50);
while(1){
//Leitura dos valores recebidos pela comunicação serial
//if (kbhit()) {
//while(m!= 'F' && k!='F' && sai!=1){
// k=getc();
// delay_ms(20);
// m= getc();
// delay_ms(20);
// }
//}
sai=1;
// delay_ms(20);
//////////////////////inicio da recepcao dos dados do pic Slave////////////////
//
//
//
///////////////////////////////////////////////////////////////////////////////
if (kbhit()) { //se está chegando dados
k=getc(); //lê o dado até o caracter
txt[i]=k;
i++;
////////////////////////teste de redundancia///////////////////////////
//
//descricao
//
///////////////////////////////////////////////////////////////////////
if(i==5){//inicio do teste de redundancia
for(j=0;j<5;j++){
temp=txt[j];
for(x=0;x<4;x++){ //verifica se entre as cinco
//char que chegaram pelo menos
if(x!=j){ //duas tem que ser iguais
if(temp==txt[x]){test++;}
if (test==2){
saida[u]=temp;
//quando acha a igualdade salva na var saida
i=0;test=0;
}
//nao encontrando a igualdade repete-se o processo
if(x==4 && test<2){test=0;}
}
}
}
u++;
}
/////////////////////////Fim do teste de redundancia//////////////////
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//////////////////////////impressao lcd///////////////////////////////
//
//
//////////////////////////////////////////////////////////////////////
if(u==8){ //Se a palavra inteira foi lida
u=0;
lcd_gotoxy(8,1);
printf(lcd_putc,saida);//Apresenta temperatura no display LCD
//lcd_gotoxy(1,14);
//Lcd_putc(0xDF); //escreve º
//Lcd_putc('C');// e escreve a palavra 'graus'
}
////////////////////////////////Fim da impressão lcd//////////////////
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//lembrar de testar a velocidade no modulo real
//pra saber quais as temporizações corretas para funcionar direito
}//fim de recepção
////////////////////////////////Fim da recepção dos dados//////////////////////
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//////////////////////Início do envio dos dados para o PC//////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////////////
// if(usb_enumerated()) //si el PicUSB está configurado
// {
// usb_put_packet(1, saida, 8, USB_DTS_TOGGLE);
// }
////////////////////////////////Fim do envio dos dados/////////////////////////
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
}
POR FAVOR ME AJUDEM!! não sei mais o que fazer!!!!
Qualquer outra informação ou arquivo é só pedir que passarei com prazer!!