Ajuda I2C

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Ajuda I2C

Mensagempor vtrx » 15 Jan 2010 18:30

Pessoal do C e MORAL,tenho um colega que não esta conseguindo no 16F628 se comunicar com uma memo 24C64 com uma rotina,que segundo ele,funciona na empresa com um PIC de 40 pinos.
Como sabem não programa µc em linguagem C mas sei que muitos aqui podem ajudar.
A rotina é essa:
Código: Selecionar todos
#include <16f628a.h>
#device ADC=10
#use delay (clock=8000000)
#define use_portb_lcd true
//#include <cuscostdio.h>

#use i2c(MASTER, SDA=PIN_B4, SCL=PIN_B3)//habilita comunicação i2c
#use RS232(baud=9600, parity=E, bits=8, xmit=PIN_B2,rcv=PIN_B1)//habilita comunicação serial RS-232

#define EEPROM_WRITE_ADDRESS 0xA4
#define EEPROM_READ_ADDRESS 0xA5

void main()
{
   int num, hora, mim, seg, dia, mes, ano;
   long j = 0;
   int16 add = 0;
   printf ("\n\rMECTRON AUTOMACAO INDUSTRIAL\n\rwww.mectron.ind.br");
   while (1)
   {
      i2c_start();
      i2c_write(EEPROM_WRITE_ADDRESS);
      i2c_write(add >> 8);
      i2c_write(add);
      i2c_start();
      i2c_write(EEPROM_READ_ADDRESS);
      num = i2c_read();
      hora = i2c_read();
      mim = i2c_read();
      seg = i2c_read();
      dia = i2c_read();
      mes = i2c_read();
      ano = i2c_read(0);
      i2c_stop();
     
      j++;
      if (((j % 4) == 0) && (j != 0))
      {
         add = 32 * (j / 4);
      }
      else
      {
         add += 7;
      }
     
      if ((num == 0xFF) && (hora == 0xFF))
      {
         add = 0;
         j = 0;
      }
      if ((add != 0) && (j != 0))
      {
         printf ("\n\r%d - hora: %02d: %02d: %02d - data: %02d/ %02d/ %02d", num, hora, mim, seg, dia, mes, ano);
      }
      else
      {
         printf ("\n\rMECTRON AUTOMACAO INDUSTRIAL\n\rwww.mectron.ind.br");         
      } 
   }
}

Segundo ele não funcionou,veja se estou errado mas o endereçamento não seria:
Código: Selecionar todos
#define EEPROM_WRITE_ADDRESS 0xA0

e
Código: Selecionar todos
#define EEPROM_READ_ADDRESS 0xA1

Segundo ele estou errado e a rotina funciona em um PIC 40.
quem puder ajudar agradeço pois posso estar enganado tambem.
Aqui esta a biblioteca que ele fez:
Código: Selecionar todos
#define SCL PIN_B3
#define SDA PIN_B4

void i2cWrite(int8 cmd)
{
   int8 i;
   int8 send;
   short ack;
   send = cmd;
   do
   {
      for(i=0;i<=7;++i)
      {
         output_bit(SDA, shift_right(&send,1,0) );
         output_high(SCL);
         output_low(SCL);
      }
      output_high(SCL);
      ack = input(SDA);
      output_low(SCL);
   }while (ack == 0);
}

int8 i2cRead(short cmd)
{
   int8 i,data;

   for(i=0;i<=7;++i) {
      shift_right(&data,1,input(SDA));
      output_high(SCL);
      delay_us(2);
      output_low(SCL);
      delay_us(2);
   }
   i2cWrite(cmd);
   return(data);
}

void i2cStart()
{
   output_high(SCL);
   output_low(SDA);
   output_low(SCL);
}

void i2cStop()
{
   output_low(SDA);
   output_high(SCL);
   output_high(SDA);
   output_float(SCL);
   output_float(SDA);
}
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor _blackmore_ » 15 Jan 2010 19:15

e o 16F628 tem I²C ??
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor vtrx » 15 Jan 2010 20:14

Black more,voce pode implementar qualquer protocolo a qualquer micro,dependendo apenas de velocidade.
O 16F6278 não tem via hardware,como tambem não tem os dual core da vida,isso não importa.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor Sergio38br » 15 Jan 2010 21:08

Por que ele esta fazendo um shift_right, no I2C geralmente vc envia pela esquerda, MSB primeiro..

[ ]`s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Djalma Toledo Rodrigues » 16 Jan 2010 09:11

Código: Selecionar todos
#use i2c(MASTER, SDA=PIN_B4, SCL=PIN_B3)//habilita comunicação i2c
#use RS232(baud=9600, parity=E, bits=8, xmit=PIN_B2,rcv=PIN_B1)//habilita comunicação serial RS-232


Mas, se esse µC não possui ... <----> 8)

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor MOR_AL » 16 Jan 2010 16:22

Eu de C não posso opinar, mas acho que o pessoal matou a charada. As instruções I2C DEVEM precisar do hardware no uC.
Eu fiz a comunicação I2C em assembler e com cristal de 4MHz.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor vtrx » 16 Jan 2010 16:27

Moral,eu sei que em ASM é fácil implementar,aliás aquele seu material realmente está com nível de um Engenherio,como voce é,muito profissional mesmo.
Creio que em C tambem seja possível montar uma rotina qualquer.
Ja enviei mensagem para ele dizendo que se esse código funciona em um PIC de 40 pinos é porque esse pic tem hardware I2C dedicado.
Por que ele esta fazendo um shift_right, no I2C geralmente vc envia pela esquerda, MSB primeiro..

Agora entendí o porque de:
#define EEPROM_WRITE_ADDRESS 0xA4
#define EEPROM_READ_ADDRESS 0xA5
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor tcpipchip » 18 Jan 2010 09:49

O que voce considera material em nível de "Engenheiro" ?
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor vtrx » 18 Jan 2010 11:49

O Moral é engenheiro,sobre o material se quiser passo um link ou ele mesmo pode fazer para voce 'avaliar'.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor fabim » 18 Jan 2010 12:44

tcpipchip escreveu:O que voce considera material em nível de "Engenheiro" ?

Mais se é lerdo eim?

Engenheiro = Engenho = Cachaça + torrêmu.. = Material de engenheiro = Cana de açucar + moenda..
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor vtrx » 18 Jan 2010 17:37

Engenheiro = Engenho = Cachaça + torrêmu.. = Material de engenheiro = Cana de açucar + moenda..

Isso...isso heheh.
Citei 'nível de engenheiro' porque o moral é engenheiro eletrônico,inclusive me parece que aposentado,e o material é muito bom mesmo,inclusive com cálculos explicativos...a nível de engenharia,não poderia dizer ' a nível técnico'.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01


Voltar para PIC

Quem está online

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

cron

x