Ir ao conteúdo
  • Cadastre-se

Comunicação i2c com pic 18f4550 e eeprom serial


josec123wy

Posts recomendados

Boa Tarde!

 

Fiz este programa para gravação i2c, com eeprom e pic 18f4550 , simulei no proteus ,porém não consegui gravar , como resultado aparece na leitura os valores 255 ou FF.

Favor enviar soluções.

 

include<18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=20000000)
#use RS232 (Baud=4800, xmit = PIN_C6, rcv = PIN_C7)
#use i2c(master, sda=PIN_B0, scl=PIN_B1)
#include <4bits.h>

//********************definiçÃO de bits*************
 #ORG 0x08, 0x0FFF {}               // espaço reservado ao bootloader
 #build (reset=0x1000, interrupt =0x1018)

int leitura;
void esc_ext_eeprom(long int end, int dado)
{
I2C_start();         //Envia uma condição de 'start' ao barramento I2C  
I2C_Write(0xA0);     //Identifica dispositivo para escrita
I2C_Write(end);      //Identifica endereço na memória
I2C_Write(dado);     //Envia o dado a ser gravado
I2C_Stop();          //Envia uma condição de 'stop' ao barramento I2C
delay_ms(5);         //Atraso de 5ms
}

int le_ext_eeprom(long int end)
{
int leitura;
I2C_Start();                 //Condição de Start
I2C_Write(0xA0);             //Envia byte ao I2C (Dispositivo + escrita)
I2C_Write(end);              //Envia byte ao I2C (endereço)
I2C_Start();                 //Condição de Restary
I2C_Write(0xA1);             //Envia byte ao I2C (Dispositivo + leitura)
leitura = I2C_Read(0);        //Faz a leitura do dado (NO acknowledge)
I2C_Stop();                   //Condição de Stop
delay_ms(5);
return leitura;
}


void main()
{
   config ();
   inicializa_lcd ();                   // inicialização do pic
   pos_lc(0,0);             
   printf (escreve_lcd,"eeprom serial\r\n");
   Delay_ms(500);
   limpa_lcd();

while(true)
   {
   if (!input(PIN_A2))  //Se o botão B0 for pressionado
     {
      pos_lc(0,0);             
      printf (escreve_lcd,"Gravando eeprom serial\r\n");
      Delay_ms(500);
      limpa_lcd();
      esc_ext_eeprom(0,'A');  //Escreve no endereço 0 da memória o caractere 'A'
      esc_ext_eeprom(1,'C');  //Escreve no endereço 1 da memória o caractere 'C'
      esc_ext_eeprom(2,'E');  //Escreve no endereço 2 da memória o caractere 'E'
      esc_ext_eeprom(3,'P');  //Escreve no endereço 3 da memória o caractere 'P'
      esc_ext_eeprom(4,'I');  //Escreve no endereço 4 da memória o caractere 'I'
      esc_ext_eeprom(5,'C');  //Escreve no endereço 5 da memória o caractere 'C'

      delay_ms(500);    //Atraso de 500ms

      }
   
     if (!input(PIN_A3))   //Se o botão B1 for pressionado
      {
      /*Envia as strings pela serial formatadas com os valores lido dos enderecos
        0 até 5 da memória EEPROM externa*/
      pos_lc(0,0);
      printf (escreve_lcd,"End %u\n:",le_ext_eeprom(0));
      pos_lc(1,0);
      printf(escreve_lcd,"End :%u\r\n",le_ext_eeprom(1));
      
                   
    
      }
   }

}
 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

A rotina config() ajusta direitinho o hw i2c? O sinal não está preso? O endereço físico nos pinos do ci está correto? você vê os sinais com osciloscópio ou terminal i2c? Os dados estão coerentes?

Talvez você tenha que dar um repstarti2c() ou starti2c() 2x ou +

Link para o comentário
Compartilhar em outros sites

Oi!

 Galera

 

Tentei compilar como char no ccs tanto a função como o printf. Estou simulando no proteus ,vou fazer os testes em

bancada , vou conferir os pinos obrigado a todos

adicionado 0 minutos depois
agora, josec123wy disse:

Oi!

 Galera

 

Tentei compilar como char no ccs tanto a função como o printf. Estou simulando no proteus ,vou fazer os testes em

bancada , vou conferir os pinos obrigado a todos Depois retorno

 

  • Triste 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...