Ir ao conteúdo

Comunicação entre pic18f452 e f4550 usando soft I2C


Paulonjapan

Posts recomendados

Postado

Senhores, bom dia!

Sou marinheiro de primerissima viagem em microprocessadores, mas estou tentando criar um projeto para fazer testes em aparelhos de telefones(ip), tipo um robo ligado fisicamente ao aparelho, fiz um prototipo via serial que funcionou bem, mas gostaria de usar a usb e dividir o sistema em modulos.

O que consegui ate agora foi usar 18F4550 recebendo e enviando todas as informações pela usb é a minha intencao filtrar estas informações e enviar a outros modulos(pics), um segundo modulo seria varios MCP23S17 ligados via Expander SPI em um 18F425, o problema é fazer a comunicacao entre o 4550 e o 452, nao sei como fazer, estou usando o MikroC pro 3.2, e se alguem puder me dar uma luz ficaria muito grato, tentei usar o soft I2C mas nao sei fazer o codigo e nao achei nenhum exemplo que se encaixe no que preciso.

Como sou leigo acho que nao posso ajudar muito aos problemas que aparecem nesse forum, mas me proponho a procurar se alguem precisar de alguma coisa aqui no Japao.

Obrigado.

Postado

Ambos tem I²C via hardware. Por que voce quer usar via software? Ou voce vai usar a porta MSSP o 18F452 pro SPI? Se for isso, para fazer i²C via software no mikroC basta usar as bibliotecas prontas. leia ESSE pdf referente ao manual do MikroC. Na pagina 313 tem explicado como utilizar tais funçoes ja feitas.

Abs

Postado

Oi Sink,

Ja tentei usar o Soft_i2c mas quando aciono a interrupcao(INTCON.PEIE = 1) a comunicacao spi Port Expander do 452 para, ta faltando conhecimento eu sei, to tentando estudar, mais to sem tempo pois tenho que concluir este projeto ou partir para outra opcao, agora to tentando usar a serial mas tambem nao recebo nada vindo do 4550 e vice-versa. Por estar fazendo testes meus codigos estão uma bagunca so, vou limpar-los e postar aqui.

Agradeco muito pela atencao.

//este é o codigo do 4550

sbit LCD_RS at LATB2_bit;

sbit LCD_EN at LATB3_bit;

sbit LCD_D7 at LATB7_bit;

sbit LCD_D6 at LATB6_bit;

sbit LCD_D5 at LATB5_bit;

sbit LCD_D4 at LATB4_bit;

sbit LCD_RS_Direction at TRISB2_bit;

sbit LCD_EN_Direction at TRISB3_bit;

sbit LCD_D7_Direction at TRISB7_bit;

sbit LCD_D6_Direction at TRISB6_bit;

sbit LCD_D5_Direction at TRISB5_bit;

sbit LCD_D4_Direction at TRISB4_bit;

unsigned short u=0;

int uart_up[8];

int temp;

int temp2;

void le_serial(){

int i;

for (i = 1 ; i > 8 ; i ++){

while(pir1.rcif == 0); //Nao recebo nada aqui

uart_up = rcreg ;

}

temp = uart_up[2];

temp2 = uart_up[3];

}

void main() {

char uart_rd;

char cou[5];

ADCON1 |= 0x0F;

CMCON |= 7;

TRISA = 0x0f;

PORTB = 0;

TRISB = 0;

TRISD = 0;

TRISC = 0;

//TRISC = 0b10101111;

SPBRG = 0b00011001;

TXSTA = 0b00100100;

UART1_Init(9600);

Delay_ms(100);

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out_Cp("Test");

while(1) {

le_serial();

portd = u;

UART1_Write(portd);

ByteToStr(portd,cou);

Lcd_Out_Cp(cou);

u++;

Delay_ms(500);

}

}

//---------------------codigo do 452

sbit SPExpanderRST at RC0_bit;

sbit SPExpanderCS at RC1_bit;

sbit SPExpanderRST_Direction at TRISC0_bit;

sbit SPExpanderCS_Direction at TRISC1_bit;

unsigned short u=0;

int uart_up[8];

int temp;

int temp2;

void le_serial(){

int i;

//portd=u;

for (i = 1 ; i > 8 ; i ++){

while(pir1.rcif == 0);

//portd=u;

uart_up = rcreg ; //Nao recebo nada aqui

}

temp = uart_up[2];

temp2 = uart_up[3];

}

//------------------------------------------------------------------------------

void Init1(){

ADCON1 = 0;

//TRISC = 0x0f;

//TRISB = 0xFF;

// TRISA = 0x00;

TRISD = 0x00;

// TRISE = 0xFF;

//portd=255;

//RCSTA.SPEN=1; //CONFIGURE SER PORT rx/tx pins

//PIE1.RCIE = 1; // bit 5 USART Receive Interrupt Enable

//TXSTA.SYNC=0;

//RCSTA.CREN=1; //Enable ser coms

//TXSTA.TXEN=1; //Enable usart transmission

}

void main() {

char uart_rd;

char cou[5];

Init1();

UART1_Init(9600);

Delay_ms(500);

SPI1_Init();

Expander_Init(0);

Expander_Init(1);

Expander_Init(7);

Expander_Set_DirectionPortB(0, 0x00); // Set Expander's PORTA to be output

Expander_Set_DirectionPortA(0, 0x00);

Expander_Set_DirectionPortB(1, 0x00); // Set Expander's PORTA to be output

Expander_Set_DirectionPortA(1, 0x00);

Expander_Set_DirectionPortB(7, 0x00); // Set Expander's PORTA to be output

Expander_Set_DirectionPortA(7, 0x00);

// Expander_Set_DirectionPortA(0,0xFF); // Set Expander's PORTB to be input

//Expander_Set_PullUpsPortA(0,0xFF); // Set pull-ups to all of the Expander's PORTB pins

while(1) {

le_serial();

Expander_Write_PortB(0, temp);

Expander_Write_PortA(0, temp);

Expander_Write_PortB(1, u);

Expander_Write_PortA(1, u);

Expander_Write_PortB(7, u);

Expander_Write_PortA(7, u);

ShortToStr(u,cou);

portd=temp;

//UART1_Write(portd);

//UART1_Write(u);

u++;

Delay_ms(500);

}

}

post-730858-1388495587771_thumb.jpg

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!