tag:blogger.com,1999:blog-6492043148642544250.post2821859581039537527..comments2024-03-02T11:21:42.692-03:00Comments on Microcontrolandos: PIC: I2C SlaveTiago Henriquehttp://www.blogger.com/profile/09385302997357057888noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-6492043148642544250.post-3427461088978631732014-07-02T17:20:30.051-03:002014-07-02T17:20:30.051-03:00Sendo que funciona perfeitamente com somente 1 mes...Sendo que funciona perfeitamente com somente 1 mestre e 1 escravo Anonymoushttps://www.blogger.com/profile/05226731695418233410noreply@blogger.comtag:blogger.com,1999:blog-6492043148642544250.post-10776819388664671062014-07-02T17:18:25.031-03:002014-07-02T17:18:25.031-03:00Estou utilizando o MIKROC PRO pra compilar o progr...Estou utilizando o MIKROC PRO pra compilar o programa , mas ainda tenho problemas ao simular no proteus este mesmo projeto só que com mais de 1 escravo PIC , sendo que alterei os respectivos endereços de escravos para 0xA1 , 0xA2 ,...assim por diante ...... mas tenho problemas ao simular , por exemplo eu peço para escrever uma mensagem diferente para cada micro, e passo seus endereços mas acabo recebendo só do primeiro. já tentou fazer a simulaçao com mais de um micro ?Anonymoushttps://www.blogger.com/profile/05226731695418233410noreply@blogger.comtag:blogger.com,1999:blog-6492043148642544250.post-13057964856392653142014-05-17T19:14:56.677-03:002014-05-17T19:14:56.677-03:00No código do slave você deve adicionar uma rotina ...No código do slave você deve adicionar uma rotina para realizar as leituras. O resultado dessa leitura será salvo numa variável, você deve saber o endereço desta variável. No código do master faça a leitura do endereço desta variável. Exemplo:<br /><br />//SLAVE<br /><b><br />...<br /><br />unsigned sensor absolute 0x30; //variável localizada no endereço 0x30 e 0x31<br /><br />void main()<br />{<br /> I2C_Slave_Init();<br /><br /> ...<br /><br /> while(1)<br /> {<br /> sensor = LeituraDeAlgumSensor();<br /> }<br />}<br /></b><br /><br /><b><br />//MASTER<br />#include <Built_in.h><br /><br />...<br /><br />unsigned valorRecebidoDoSlave;<br /><br />void main()<br />{<br /> I2C1_Init(100000); //Inicializa o modulo I2C Master<br /><br /> ...<br /><br /> while(1)<br /> {<br /> //variavel unsigned ocupa 2 bytes ( no SLAVE, 0x30 e 0x31 )<br /> Lo(valorRecebidoDoSlave) = I2C_Slave_Read( 0x30 ); //le o endereço 0x30<br /> Hi(valorRecebidoDoSlave) = I2C_Slave_Read( 0x31 ); //le o endereço 0x31<br /><br /> ...<br /> }<br /> <br />}<br /></b>Tiago Henriquehttps://www.blogger.com/profile/09385302997357057888noreply@blogger.comtag:blogger.com,1999:blog-6492043148642544250.post-49349628562917929762014-05-17T18:52:33.317-03:002014-05-17T18:52:33.317-03:00Como eu faria para ler um sensor de temperatura do...Como eu faria para ler um sensor de temperatura do SLAVE conectado a uma porta analógica? Obrigado.Anonymoushttps://www.blogger.com/profile/15831003570877861316noreply@blogger.comtag:blogger.com,1999:blog-6492043148642544250.post-29004955796714438322014-05-02T17:59:45.986-03:002014-05-02T17:59:45.986-03:00Entendi, obrigado!Entendi, obrigado!Plinio BAShttps://www.blogger.com/profile/15537564739268713559noreply@blogger.comtag:blogger.com,1999:blog-6492043148642544250.post-80167795041817259802014-04-30T22:37:11.095-03:002014-04-30T22:37:11.095-03:00como a variavel 'address' é do tipo inteir...como a variavel 'address' é do tipo inteiro(2 bytes) e a função I2C_Wr() envia apenas 1 byte<br /><br />I2C1_Wr( ((char*)&address)[1] ); //Envia o segundo byte( mais significativo )<br />I2C1_Wr( ((char*)&address)[0] ); //Envia o primeiro byte( menos significativo )<br /><br />como o endereçamento do slave(PIC12F2550) trabalha com 2 bytes, entao é necessario enviar os dois bytes.Tiago Henriquehttps://www.blogger.com/profile/09385302997357057888noreply@blogger.comtag:blogger.com,1999:blog-6492043148642544250.post-7177419106922248112014-04-30T21:45:19.778-03:002014-04-30T21:45:19.778-03:00Amigo, estive estudando esse código durante algum ...Amigo, estive estudando esse código durante algum tempo para molda-lo a minha necessidade. Não gosto de perturbar fazendo perguntas, mas embora tenha visto que é necessário, não consegui entender como funciona essa parte do código:<br /> <br />I2C1_Wr(((char*)&address)[1]);<br />I2C1_Wr(((char*)&address)[0]);<br /><br />Você pode comentar qual é a função dessas linhas ou porque o slave precisa recebe-las? <br />De qualquer maneira, já agradeço mais uma vez pela ajuda e pelo blog que é nota 10.<br />Abs!Plinio BAShttps://www.blogger.com/profile/15537564739268713559noreply@blogger.comtag:blogger.com,1999:blog-6492043148642544250.post-10080571758940868992014-01-06T16:41:17.372-02:002014-01-06T16:41:17.372-02:00estou precisando comunicar 4 pics com I2C sendo 3 ...estou precisando comunicar 4 pics com I2C sendo 3 no modo escravo, porem não sei C, vc conseguiria me passar esse codigo do slave e do master em MIKROPASCAL. Estou tentando converter mas está muito dificil. Obrigado qualquer ajuda. alexandre47@gmail.comAnonymoushttps://www.blogger.com/profile/15831003570877861316noreply@blogger.com