Ajuda com pic 18f2550!!! .. URGENTE!!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Ajuda com pic 18f2550!!! .. URGENTE!!

Mensagempor fabioxav » 07 Out 2010 23:40

Pessoal, tudo bom???

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!!
fabioxav
 
Mensagens: 2
Registrado em: 01 Out 2010 10:05

Re: Ajuda com pic 18f2550!!! .. URGENTE!!

Mensagempor marcelo campos » 08 Out 2010 10:14

fabioxav escreveu:
.... 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 ..
...


Se eu fosse você iria pelo óbvio: Acha que é problema de clock e Rodou no MikroC então lá os fuses estão Ok, então é só ir lá (ou abrir o .HEX no seu programa gravador) e ver como estão os fuses aí, espelha eles Manualmente no software que usa pra programar os pics com o firmware atual.
Simples, se for problema só de fuse na hora funcionará.
marcelo campos
Word
 
Mensagens: 648
Registrado em: 08 Ago 2009 08:37

Mensagempor _blackmore_ » 08 Out 2010 13:01

veja se não ligou algo errado no LCD ... passei raiva a algum tempo com uma "pegadinha" dessas.
Ouça mais classic rock
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor fabioxav » 11 Out 2010 10:32

@Marcelo campos:

então, ou não estou conseguindo colocar as mesmas configs que coloquei no mikroc no ccs ou então existe outra coisa errada, pq já fiz toda a config e continua na mesma: LCD borrado.

@_blackmore_:

vou verificar!!
fabioxav
 
Mensagens: 2
Registrado em: 01 Out 2010 10:05


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x