Ir ao conteúdo
  • Cadastre-se

PIC Como utilizar comunicação serial em C18 com PIC 18F4550?


Posts recomendados

Olá, gostaria de saber se alguém entende a respeito de comunicação serial utilizando o microcontrolador PIC18f4550 e o compilador C18, precisava realizar o envio de strings para uma interface em um PC elaborada em C#, no entanto não estou tendo muito sucesso em aprender a realizar o envio através do microcontrolador, se alguém puder me ajudar agradeço muito desde já.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

bom, no momento não tenho como postar um desenho do circuito pois se encontra em uma placa didatica de um curso que faço, porém ele é constituido basicamente pelo microcontrolador PIC18F4550, no qual em seu PORTE se encontra um LED, o qual eu  gostaria de pelo menos ser capaz de acionar atraves da serial, mesmo que meu objetivo seja o envio e recebimento de strings.

Para a comunicação há um CI MAX232 ligado ao PIC e ao conector DB9, no qual utilizarei um cabo conversor serial - USB para conectar ao PC.

 

Quanto ao programa, ainda não tenho muita noção de como estabelecer a comunicação....

Link para o comentário
Compartilhar em outros sites

Para AVR:

http://maxembedded.com/2013/09/serial-communication-rs232-basics/

http://maxembedded.com/2013/09/the-usart-of-the-avr/

 

Para PIC:

https://sites.google.com/site/coolembeddedlaboratory/home/pic18f4550/tutorial-list/serial-communication

 

A maioria dos tutoriais são da gringa. Tem outras formas de você fazer... só ter um programa que monitore e envie mensagem na porta COM.

Também vários tipo de conexão... via USB via Ttl e também pelas portas paralelas de pcs antigos de impressora ou de saída de vídeo.

 

Enfim... bons estudos... se não entender muito bem inglês google tradutor... quiser ajuda fala que o povo vê o que pode fazer.

Link para o comentário
Compartilhar em outros sites

#include <p18f4550.h>
#include <usart.h>
#include "biblioteca_lcd_2x16.h"

#include <delays.h>
#include <adc.h>

#pragma config FOSC = HS
#pragma config CPUDIV = OSC1_PLL2
#pragma config PLLDIV = 5//Para cristal de 20MHz divide por 5, sempre tem que dar 4MHz
#pragma config WDT = OFF     //Desabilita o Watchdog Timer (WDT).
#pragma config PWRT = OFF    //Habilita o Power-up Timer (PWRT).
#pragma config BOR = OFF        //Brown-out Reset (BOR) habilitado somente no hardware.
#pragma config BORV = 3     //tensão do BOR é 2,0V.
#pragma config PBADEN = OFF    //RB0,1,2,3 e 4 configurado como I/O digital.
#pragma config LVP = OFF    //Desabilita o Low Voltage Program.
#pragma config MCLRE = OFF//Desabilita o RESET

void ISR_alta_prioridade(void);

unsigned char status_rele = 0,status_led=0;


#define Rele PORTEbits.RE2
#define led PORTEbits.RE0

#pragma code int_alta=0x08

void int_alta (void)
{
  _asm GOTO ISR_alta_prioridade _endasm
}

#pragma code

#pragma interrupt ISR_alta_prioridade
void ISR_alta_prioridade (void)
{
    switch(getcUSART())
    {
        case 'a': status_led = 1; break;
        case 'b': status_led = 0; break;
        case 'c': status_rele = 1; break;
        case 'd': status_rele = 0; break;
    }
    Rele = status_rele;
    led = status_led;
}


void main (void)
{
    TRISA = 0b00011111;
    TRISB = 0b11100111;
    TRISC = 0b10111111;
    TRISD = 0b00000000;
    TRISE = 0b00000000;

    OpenADC(0x00,0x00,ADC_0ANA);
    CloseADC();

    PORTD = 0x00;
    PORTE = 0x00;

    OpenUSART(USART_TX_INT_OFF     //desabilita interrupção de transmissão
              &USART_RX_INT_ON    //habilita interrupção de recepção
              &USART_ASYNCH_MODE   //modo assincrono
              &USART_EIGHT_BIT    //transmissão e recepção de 8 bits
              &USART_BRGH_HIGH   //Baud de rede em alta velocidade
            ,129);


  /*  BAUDCONbits.BRG16 = 0;
    BAUDCONbits.ABDEN = 0;
    BAUDCONbits.WUE = 0;*/


  baudUSART(BAUD_8_BIT_RATE
              &BAUD_AUTO_OFF
              &BAUD_WAKEUP_OFF);

     lcd_inicia(0x28,0x0F,0x06);
     lcd_LD_cursor(0);

IPR1bits.RCIP = 1;
PIE1bits.RCIE = 1;
RCONbits.IPEN =1;
INTCONbits.GIEH =0;
INTCONbits.GIEL =1;

while(1)
{


    lcd_posicao(1,1);
    if(status_led == 0)
    { imprime_string_lcd("led Desligado");}

    else
    { imprime_string_lcd("led Ligado");}

     lcd_posicao(2,1);
    if(status_rele == 0)
    { imprime_string_lcd("rele Desligado");}

    else
    { imprime_string_lcd("rele Ligado");}

    Delay10TCYx(100);
}

}

 

 

 

 

 

 

 

 

 

estou tentando seguir esse programa como exemplo, ele se encontra no livro Microcontroladores PIC18 aprenda e programe em linguagem c, o objetivo deste pelo que entendi seria acionar ou desligar um led e um rele atraves de alguma interface utilizando o PC, no entando não estou tendo muito sucesso, sei que a principio é algo básico até, mas como sou iniciante está me dando muito trabalho :/ , caso alguém possa me dar alguma orientação de apenas como estabelecer a comunicação eu ficaria muito grato kk...

Link para o comentário
Compartilhar em outros sites

Primeiro de tudo... antes de usar um código grande de não sei da onde você já testou o código do link do PIC que coloquei  ai em cima, tem um código básico para exibir num lcd o que é recebido... você está conseguindo estabelecer a conexão?

Depois de você ter certeza que está tudo funcionando você pode usar o código do Link como base para aumentar e desenvolver teu projeto... ou usar outro código. Mas primeiro você tem que testar teu "Hello Word" de num lcd para ver como são lidas as mensagens que você manda.

adicionado 1 minuto depois

Você pode também usar um simples led, mas não da para ver como a mensagem chega.

adicionado 8 minutos depois

Além disso não tem só essa forma de fazer. Você tem que procurar alguma tutorial UART para esse tipo de comunicação e que tenha circuito feito. Você tem que escolher algum que você possa fazer e tentar utilizar.

 

Desculpe, mas nesse caso as coisas não vão cair no colo e vai de boa... você tem que testar os circuitos e começar do básico. Código do teu livro nem deram circuito para você fazer a comunicação? Ai tá fods...

adicionado 46 minutos depois

Adicionando um última coisa... se quiser algo já pronto, vai para o arduino uno , pois a própria IDE do arduino oferece serial monitor e a conexão é direta usando chip deles de conversão serial para USB... inicia o serial ... serialWrite e serialRead pronto... tem exemplos de sobra. Com pic ou outros microcontroladores o buraco é mais em baixo. Boa sorte e estou abandonando o tópico ^^ fuizzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

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