Autor Tópico: programação Ladder Atmega16, comunicação Rs232??  (Lida 24825 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

verd

  • Visitante
programação Ladder Atmega16, comunicação Rs232??
« Online: 17 de Junho de 2009, 16:54 »
Boa tarde companheiros, sou novo aqui no forum e vou relatar para vocês o meu problema:

estou desenvolvendo uma mini clp microcontrolada utilizando o microcontrolador AVR Atmega16. Para seguir um padrão industrial de programação estou utilizando o programa gratuito da LDmicro, para fazer a progamação em ladder, e para fazer a gravação no atmega utilizo o ponyprog,

meu problema é o seguinte, estou querendo desenvolver em java um supervisório e um banco de dados para montar um sistema automatizado de controle de produção de baixo custo, sendo:

CLP,Supervisão e armazenamento de informações.

Estou com dificuldade em comunicar o microcontrolador com o Pc via RS-232, a parte de harware está completa, com max232 ligado ao Tx e tudo mais, o meu problema é como fazer o microcontrolador enviar dados, o programa Ldmicro até disponibiliza para você enviar dados atravez da programação em ladder, mas estou encontrando dificuldade no mesmo.

Alguem do forum que entenda bem de AVR tenha alguma outra alternativa pra resolver meu problema de comunicação??

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #1 Online: 17 de Junho de 2009, 17:29 »
Alguem do forum que entenda bem de AVR tenha alguma outra alternativa pra resolver meu problema de comunicação??

Verd, tô achando que seu prob ainda não tá bem definido ... se vc já estabeleceu que vai usar o LDmicro + AVR, quer me parecer que deve agora concentrar-se nas peculiaridades da utilização das funções de comunicação serial do LDmicro, não ?

Do manual:

I support the A/D converter, PWM unit, and UART on those microcontrollers that provide them. That means that you can write ladder logic that reads analog inputs, and that sends and receives characters over serial (for example to a PC, if you add a suitable level-shifter like a MAX232, or to a character LCD). It is possible to send arbitrary strings over serial, as well as the values of integer variables, as ASCII text.

Da ajuda:

> UART (SERIAL) RECEIVE          var
                           --{UART RECV}--

    LDmicro can generate code to use the UART built in to certain
    microcontrollers. On AVRs with multiple UARTs only UART1 (not
    UART0) is supported. Configure the baud rate using Settings -> MCU
    Parameters. Certain baud rates may not be achievable with certain
    crystal frequencies; LDmicro will warn you if this is the case.

    If the input condition to this instruction is false, then nothing
    happens. If the input condition is true then this instruction tries
    to receive a single character from the UART. If no character is read
    then the output condition is false. If a character is read then its
    ASCII value is stored in `var', and the output condition is true
    for a single PLC cycle.


> UART (SERIAL) SEND             var
                           --{UART SEND}--

    LDmicro can generate code to use the UARTs built in to certain
    microcontrollers. On AVRS with multiple UARTs only UART1 (not
    UART0) is supported. Configure the baud rate using Settings -> MCU
    Parameters. Certain baud rates may not be achievable with certain
    crystal frequencies; LDmicro will warn you if this is the case.

    If the input condition to this instruction is false, then nothing
    happens. If the input condition is true then this instruction writes
    a single character to the UART. The ASCII value of the character to
    send must previously have been stored in `var'. The output condition
    of the rung is true if the UART is busy (currently transmitting a
    character), and false otherwise.

    Remember that characters take some time to transmit. Check the output
    condition of this instruction to ensure that the first character has
    been transmitted before trying to send a second character, or use
    a timer to insert a delay between characters. You must only bring
    the input condition true (try to send a character) when the output
    condition is false (UART is not busy).

    Investigate the formatted string instruction (next) before using this
    instruction. The formatted string instruction is much easier to use,
    and it is almost certainly capable of doing what you want.


> FORMATTED STRING OVER UART                var
                                   -{"Pressure: \3\r\n"}-

    LDmicro can generate code to use the UARTs built in to certain
    microcontrollers. On AVRS with multiple UARTs only UART1 (not
    UART0) is supported. Configure the baud rate using Settings -> MCU
    Parameters. Certain baud rates may not be achievable with certain
    crystal frequencies; LDmicro will warn you if this is the case.

    When the rung-in condition for this instruction goes from false to
    true, it starts to send an entire string over the serial port. If
    the string contains the special sequence `\3', then that sequence
    will be replaced with the value of `var', which is automatically
    converted into a string. The variable will be formatted to take
    exactly 3 characters; for example, if `var' is equal to 35, then
    the exact string printed will be `Pressure:  35\r\n' (note the extra
    space). If instead `var' were equal to 1432, then the behaviour would
    be undefined, because 1432 has more than three digits. In that case
    it would be necessary to use `\4' instead.

    If the variable might be negative, then use `\-3d' (or `\-4d'
    etc.) instead. That will cause LDmicro to print a leading space for
    positive numbers, and a leading minus sign for negative numbers.

    If multiple formatted string instructions are energized at once
    (or if one is energized before another completes), or if these
    instructions are intermixed with the UART TX instructions, then the
    behaviour is undefined.

    It is also possible to use this instruction to output a fixed string,
    without interpolating an integer variable's value into the text that
    is sent over serial. In that case simply do not include the special
    escape sequence.

    Use `\\' for a literal backslash. In addition to the escape sequence
    for interpolating an integer variable, the following control
    characters are available:
        * \r   -- carriage return
        * \n   -- newline
        * \f   -- formfeed
        * \b   -- backspace
        * \xAB -- character with ASCII value 0xAB (hex)

    The rung-out condition of this instruction is true while it is
    transmitting data, else false. This instruction consumes a very
    large amount of program memory, so it should be used sparingly. The
    present implementation is not efficient, but a better one will
    require modifications to all the back-ends.



Nada muito sofisticado, mas suficiente para a tarefa, me parece ...

Minha sugestão é que faça um programinha mínimo que envie / receba algo, pra aprender a usar a função, a partir daí é ir aprimorando ...

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #2 Online: 17 de Junho de 2009, 21:56 »
Não é dificil fazer a comunicação serial com o ATMega16, mas voce deve ter uma metodologia para concluir o seu trabalho:

(1) Aprender como a comunicação serial funciona, enviando alguns bits para um PC. No PC voce pode usar o Hyperterminal para checar se chegou alguma coisa. Não esqueça de usar um CI para converter de TTL (saída do ATMega) para RS232 (porta serial do PC).

(2) Um vez funcionando a comunicação, voce deve criar ou adotar um protocolo de comunicação com o software supervisório. Um protocolo simples de fazer é o MODBUS-RTU. Voce acha na Net incluisve bibliotecas em Java para esse protocolo e vc poderia incluir em seu supervisório. Eu já usei isso há alguns anos comunicando com um AT89S8252 (compatível com 8051) e funciona bem.

P.S. - Também estou orientando (sou professor) um trabalho de um medidor de pressão diferencial usando o ATMega16 que já está "falando" Modbus-RTU.


Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #3 Online: 17 de Junho de 2009, 22:12 »
Verd,

Segue o link para a biblioteca Modbus em Java, chama-se JAMOD, eu mesmo já usei e funciona bem. Com essa biblioteca é possivel usar as seguintes versões do Modbus: sobre um link RS232/485 (Modbus-RTU) e com Ethernet - TCP/IP (Modbus/TCP).

http://sourceforge.net/projects/jamod

verd

  • Visitante
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #4 Online: 18 de Junho de 2009, 10:47 »
Olá Jorge, então eu estava com dificuldade em fazer o LDmicro enviar pela usart, mas agora eu consegui, não consegui enviar o que eu queria mas ele enviou um monte de caracteres assim: ÀǾ8Ǿ888xŸÀ8, estou usando o programinha da rogercom para testar Rcomserial V1.2. para enviar e receber.

Olá Gil, obrigado! vou estudadar este Modbus-RTU pois não tenho conhecimento algum nesta parte!

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #5 Online: 18 de Junho de 2009, 11:06 »
... não consegui enviar o que eu queria mas ele enviou um monte de caracteres assim: ÀǾ8Ǿ888xŸÀ8 ...

Que função vc utilizou para o teste ? É possível que a configuração não esteja correta ... vc deu uma espiada na tela abaixo ?

verd

  • Visitante
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #6 Online: 18 de Junho de 2009, 14:23 »
Jorge só consegui que ele enviasse depois de utilizar o  UART (SERIAL) SEND char--{UART SEND}-- em série com  FORMATTED STRING OVER UARTvar -{"Pressure: \3\r\n"}- , fiz um teste rapido hoje pela manhã, liguei uma entrada digital em serie com estes dois comandos, ai quando eu dava o pulso ele escrevia no programa da rogercom.

foi um teste bem na tentativa e erro e no lugar da var eu alterei para rodrigo, pensando que talvez ela pudesse escrever meu nome.

na tela de baixo do ldmicro ficava a descrição das entradas e das portas ficando (rodrigo        uart              pino14)

o que posso estar fazendo de errado??

verd

  • Visitante
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #7 Online: 20 de Junho de 2009, 14:03 »
Fiz a seguinte linha de comando no Ldmicro e quando simulo no LDmicro ele escreve  em uma janela do programa corretamente o q estou enviando! OK!!


 ||      XC5                 _                                 {ADD  dest  :=}          ||
 4 ||-------] [-----------[OSR_/ ]------------------{cnt+1    }
   ||                                                                                     ||
   ||                                                                                     ||
   ||                                                                                     ||
   ||                                                                                     ||
   ||      XC5                      dest                                                  ||
 5 ||-------] [-----------{"Hello, world:\-5\r\n"}-----     

mas  no microcontrolador ja gravado quando vou testar com o programa da roger com ele não envia!! so envia se eu utilizar o comando 

 ||      XC5                      dest                               char                  ||
 5 ||-------] [-----------{"Hello, world:\-5\r\n"}---{UART SEND}--   

 e mesmo assim envia um monte de letras que parece mapa de caracteres!

Alguem tem alguma opinião no que está errado??!!

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #8 Online: 20 de Junho de 2009, 16:36 »
Rodrigo, no momento não tenho como testar em condições reais, gravando um microcontrolador, mas fiz um teste usando o simulador do LDmicro, veja abaixo.

Pra simplicar as coisas e isolar o prob, não usei uma variável, apenas string, carriage return, new line e um contato que provoca a transmissão a cada vez que é acionado. Aparentemente funfa bem.

Eu utilizaria algo assim, o mais simples possível, até a recepção estar correta, toda a configuração em ordem ...
« Última modificação: 20 de Junho de 2009, 16:39 por C N C N o w ! »

verd

  • Visitante
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #9 Online: 22 de Junho de 2009, 14:04 »
Então Jorge no Ldmicro o meu programa simula certinho, mas quando gravo no atmega e vou testar no hiperterminal da rogercom ele não escreve, ele escreve apenas se eu colocar:


 ||      XC5                      var                               char                  ||
 5 ||-------] [-----------{"string: \3\r\n"}---{UART SEND}--   

mas mesmo assim ele escreve um monte de caracteres tipo mapa de caracteres!

será algum problema de configuração do hiperterminal?? alguem sabe de algum outro hiperterminal que eu possa enviar caracteres do microcontrolador??

verd

  • Visitante
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #10 Online: 22 de Junho de 2009, 14:14 »
Se não conseguir fazer esta comunicação vou ter que utilizar outro programa para fazer a programação do atmega, de preferência que eu possa utilizar o ponyprog pra realizar a gravação!!


o que vocês me indicariam para fazer a programação  do atmega16? visto que não entendo muito de codigos, precisaria pegar alguma estrutura ja pronta para fazer as alterações.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #11 Online: 22 de Junho de 2009, 21:40 »

Os alunos onde leciono, usam o programador que estou anexando, que é muito simples de montar. Também é usado o programa AVRStudio para desenvolver e testar os programas em assembler. Mas voce pode também usar a linguagem C, mas ai vais precisar de compilador. O programador foi obtido na Net, acho que é facil achar...

Programadores simples, pela porta paralela (Software):
http://www.nongnu.org/avrdude/
http://www.ic-prog.com/

Como terminal virtual, eu uso o Tera Term (free).

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #12 Online: 23 de Junho de 2009, 07:27 »
será algum problema de configuração do hiperterminal?? alguem sabe de algum outro hiperterminal que eu possa enviar caracteres do microcontrolador??

Acho que pode ser prob de configuração do LDmicro e/ou do microcontrolador e/ou do terminal ...

Eu uso frequentemente o Hyperterminal que vem com o Windows ... há um montão de outros por aí, como o Termite:

http://www.compuphase.com/software_termite.htm

verd

  • Visitante
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #13 Online: 24 de Junho de 2009, 08:25 »
Sinceramente não consigo fazer o LD micro enviar os caracteres que eu desejo enviar!

vou partir para outro programador vou utilizar o avrstudio! posso continuar a utilizar o ponyprog para gravar? tenho o brascom tbm o que vcs indicam??

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: programação Ladder Atmega16, comunicação Rs232??
« Resposta #14 Online: 24 de Junho de 2009, 10:30 »
Sinceramente não consigo fazer o LD micro enviar os caracteres ...

Rodrigo, dizer apenas que não consegue não ajuda muito ... ajuda mais se vc descrever as condições do teste, as configurações que já tentou, etc ...

Como vc está fazendo a interface do microcontrolador ao PC ? Tá usando um MAX232 ou coisa que o valha ?

Que tipo de cabo tá usando, um null modem ?

Citar
vou partir para outro programador ...

O que é que o leva a suspeitar do programador ? Vc já testou outras funções pra verificar se a programação tá OK ?

 

/** * */