Ir ao conteúdo
  • Cadastre-se
ejss

RS232 com Visual C# comunic. CDC com PIC18f4550

Recommended Posts

     Bom dia a todos do fórum, por favor me ajudem, a algum tempo venho tentando fazer uma comunicação entre o Pic 18f4550, Visual Basic 2010 e o circuito e quando achei que tinha conseguido, mais uma vez o objetivo não foi alcançado 100%.

     Montei o circuito com o intuito de fazer se comunicar através da comunicação cdc, Tentei fazer a interface no Visual Basic c# e express. Segui umas vídeo aulas, ensinando a fazer um supervisório utilizando o visual express, peguei também o exemplo de código em c para ccs, Compilei fiz tudo com muita dedicação, na hora de testar, para minha felicidade o circuito foi reconhecido pela interface feita no VB, os círculos que representam os leds mudavam de estado conforme clicava na tecla criada no VB, para minha tristeza, quando fui medir com o multímetro as saídas do Pic elas não mudavam de estado, abaixo estarei postando o código em c, e a imagem do circuito e da interface em vb, conto com a colaboração dos interessados em ajudar.

 Código:

//****************************************************************************//**************** ASCENDER LEDS PC( PC A PIC.....)*********************//****************************************************************************#include <18f4550.h>#fuses hspll,nowdt,nomclr,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv1,vregen#use delay(clock=48M)                                // clock  a 48Mhz#define USB_CON_SENSE_PIN PIN_B2#include <usb_cdc.h>                                 // declaro librerias USB#include <usb_desc_cdc.h>                             // Descriptores del dispositivo USB.//*********************** configuracion y declaraciones ****************#define ledv  PIN_B6                                 // asignando etiquetas a el pinb6#define ledr  PIN_B7#define ledon output_high                            // asignando etiquetas a la funcion output  #define ledoff output_lowint8 data;void main(){                                         // inicio del codigo   set_tris_d(0);   set_tris_b(0);    output_d(0);//********* CONFIGURAR EL HOST Y VISUALIZAR MEDIANTE LEDS************//      ledoff(ledv);                                      // enciendo el led rojo yq aun no detecta el host   ledon(ledr);      usb_cdc_init();   usb_init();                                        // inicializamos el USB   usb_task();                                        //habilita periferico usb e interrupciones   usb_wait_for_enumeration();                        //esperamos hasta que el PicUSB sea configurado por el host   ledoff(ledr);                                       // encendemos el led verde   ledon(ledv);//************ TERMINA DE VISUALIZAR LOS LEDS ****************************/////////////////////////////////////////////////////////////////////////////// ************** INICIO DEL PROGRAMA ************************************* while(!usb_cdc_connected()){}                      // espera a detectar una transmisión de la PC (Set_Line_Coding).{}                         while(true){      usb_task();   if(usb_enumerated()){                               //retorna verdadero si el dispositivo esta enumerado                                                          if(usb_cdc_kbhit()){                               // en espera de un nuevo caracter en el buffer de recepcion                                                 data=usb_cdc_getc();                if(data=='1')           {               output_toggle(PIN_D0);           }                                                          if(data=='2')           {               output_toggle(PIN_D1);           }                                             if(data=='3')           {               output_toggle(PIN_D2);            }                                                   if(data=='4')          {               output_d(0);           }                              if(data=='5')          {              output_d(255);           }                                                     usb_cdc_putc(data);                                                                            }                             }   }}
 

Bom o circuito feito no proteus:

 

Foto da interface feita no vb:

 

Bom fico no aguardo de ajuda para fazer isso funcionar, desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está usando o Visual Basic ou o Visual C#? São duas coisas diferentes.

 

Se você estiver utilizando o Visual C#, tem um exemplo que postei funcional aqui: http://forum.clubedohardware.com.br/topic/983159-cabo-usb-rs232/#entry5459764

 

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, MatheusLPS! Eu ate já peguei o exemplo para simular e tentar fazer, o exemplo conecta direitinho, a informação "Pic conectedo!" aparece direitinho, porém os leds não ligam de jeito nenhum! tentei varias vezes mas no circuito os leds sempre apagados. O que eu poderia fazer? E em relação a esse código em c que postei ele esta correto!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comprei o livro "Criação de Sistemas Supervisórios em Visual C# 2010 Express" do autor Carlos Eduardo Sandrini Luz, da editora Érica.

O livro vai mostrando a criação passo-a-passo desde o início.

Mostra e explica como fazer a comunicação via serial, depois via USB, depois como mostrar os dados recebidos na tela do PC (valores numéricos, gráficos e do tipo ponteiros), além de como salvá-los.

Foi um bom investimento.

MOR_AL

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comprei o livro "Criação de Sistemas Supervisórios em Visual C# 2010 Express" do autor Carlos Eduardo Sandrini Luz, da editora Érica.

O livro vai mostrando a criação passo-a-passo desde o início.

Mostra e explica como fazer a comunicação via serial, depois via USB, depois como mostrar os dados recebidos na tela do PC (valores numéricos, gráficos e do tipo ponteiros), além de como salvá-los.

Foi um bom investimento.

MOR_AL

Boa noite MOR! Obrigado pela informação com certeza irei comprar o livro, valeu, obrigado!

Você está usando o Visual Basic ou o Visual C#? São duas coisas diferentes.

Se você estiver utilizando o Visual C#, tem um exemplo que postei funcional aqui: http://forum.clubedohardware.com.br/topic/983159-cabo-usb-rs232/#entry5459764

Falou

Boa noite MahteusLPS, analisei o arquivo do tópico http://forum.clubedohardware.com.br/topic/983159-cabo-usb-rs232/#entry5459764

Entendi o funcionamento, resolvi montar um código desde o inicio compilei, conectou com a porta “com4”, porém a informação “Pic Conectado” não apareceu, se você puder pelo menos da uma olhada e me informar o que tenho que mudar para que a informação “Pic Conectado”, seja exibida, segue o link:

http://www.4shared.com/rar/m-wxHPhyba/Serial_USB_CDC_Tecla_Led.html

Comparei o que você fez e o que eu fiz e notei diferenças:

No seu aparece a pasta _UpgradeReport_Files e o arquivo app, no meu não gerou esses arquivos, algumas partes do programa não abilíta como fazer para abilítar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ejss, Não se preocupe com o _UpgradeReport_Files e o config..... Eu utilizava a versão 2008 do Visual Studio. Quando passei a utilizar a 2010, ele converteu os arquivos e criou essa pasta. Nada demais.

Te falar que deu trabalho de encontrar o problema. Nãos sei o motivo pelo qual isso ocorreu. Mas siga os passos abaixo:

th_passo_1.png

th_passo_2.png

Código para o passo abaixo:

 

// serialPort1// this.serialPort1.ReadBufferSize = 2;this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);//
th_passo_3.png

Resultado final:

th_Final_OK.png

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

@MatheusLPS, valeu pela ajuda agora esta funcionando, foi um passo bom para o entendimento, beleza! Agora outra pergunta você simulou a interface feita no c#, no proteus ou no hardware, cara é impressionante pelo código gravado no 18f4550, ao apertar a tecla referente ao led vermelho era para acender o led vermelho, ao apertar a tecla referente ao led verde era para acender o led verde e ao apertar tecla button1 seria para ascende os dois leds é isso mesmo não é, foi o que eu entendi porém no hardware os leds não mudam de estado, será problema no meu 18f4550 ou o que pode ser, porque olhando pelo código feito no ccs não a dúvida que era para funcionar, você tem alguma ideia em relação a esse fato? E valeu mesmo pelas informações! 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ejss, Esse exemplo é meio antigo. Nem me lembro direito.

 

Mas tenho um 18F4550 montado que estou brincando esses dias. Vou apenas adicionar o conector UB e testo pra você na protoboard.

 

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ejss, Esse exemplo é meio antigo. Nem me lembro direito.

 

Mas tenho um 18F4550 montado que estou brincando esses dias. Vou apenas adicionar o conector UB e testo pra você na protoboard.

 

Falou

Bom dia camarada! Você consegui fazer o teste na protoboard! Alguma novidade!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com o mesmo problema... Fiz um curso de RS232 na microgenios e tento executar os exemplos na propria placa deles e nada... Achei também que o problema era o PIC... Então fiz um programa teste para piscar um led e não piscava... Quando resolvi tirar o cabo serial da placa, pra minha surpresa, funcionou perfeitamente... Percebi que ao conectar o cabo... O circuito para de funcionar... Tiro o cabo, volta ao normal...

Não sei o que fazer e eles não me retornaram ainda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@JuniorLima_SJC, meu camarada se eu conseguir, solução para o meu problema com certeza, eu postarei, espero o mesmo de você, de repente o problema seja o mesmo, não é!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ejss, olá amigo... Por incrível que pareça acabei de descobrir o problema....

Eu tenho aqui, um cabo Serial conversor Usb/RS232 da TRENDnet que uso para comunicação com o Pic... Mas como eu cito acima, toda vez que conectava o cabo no circuito, dava pau e não rodava nada...

O problema está justamente aí... Não pode conectar o cabo conversor diretamente no circuito... É preciso usar um cabo serial para fazer a conexão do circuito e do cabo... Não me pergunte o porque... Mas aqui funcionou... Foi só eu fazer a ponte entre o circuito e o cabo conversor com um cabo serial comum (macho - femea) que funcionou perfeitamente.

Espero que com você também de certo... Assim que você conseguir dar um jeito aí... Da um retorno aqui pra gente ficar a par da situação...

Boa sorte... Abrass

Compartilhar este post


Link para o post
Compartilhar em outros sites

@JuniorLima_SJC, a bom, no seu caso você esta usando um cabo conversor usb/rs232, no meu caso eu uso diretamente a entrada usb, más de qualquer forma fico feliz por você ter resolvido seu problema, vou continuar tentando ate resolver o meu, ok!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ejss, Não se preocupe com o _UpgradeReport_Files e o config..... Eu utilizava a versão 2008 do Visual Studio. Quando passei a utilizar a 2010, ele converteu os arquivos e criou essa pasta. Nada demais.

Te falar que deu trabalho de encontrar o problema. Nãos sei o motivo pelo qual isso ocorreu. Mas siga os passos abaixo:

th_passo_1.png

th_passo_2.png

Código para o passo abaixo:

 

// serialPort1// this.serialPort1.ReadBufferSize = 2;this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);//
th_passo_3.png

Resultado final:

th_Final_OK.png

Falou

 

Bom dia meu caro! Depois de um tempinho consegui fazer funcionar essa comunicação :aplausos: ! Será que daria para ajudar a implementar uma entrada analógica o objetivo é, quando variar um potenciômetro mostrar essa variação através de um Progress_bar por exemplo    :confused:

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ejss

 

Boa tarde,

 

É simples. Apenas pegue o valor do AD com o PIC em 8bits envie pela USB. No Visual C#, leia esse valor e associe a uma progress bar.

 

Falou

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

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

×