Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
rafa.dss

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

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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....

    Compartilhar este post


    Link para o post
    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.

    • Amei 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • #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...

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×