Ir ao conteúdo

Posts recomendados

Postado

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

Postado

Só por curiosidade... qual método você está usando para fazer essas comunicação? A parte física ^^ Posta o circuito ou desenho ^^

  • 2 semanas depois...
Postado

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

Postado

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.

Postado

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

Postado

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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!