Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print
ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Microcontroladores => Tópico iniciado por: verd em 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??
-
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 ...
-
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.
-
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
-
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!
-
... 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 ?
-
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??
-
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??!!
-
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 ...
-
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??
-
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.
-
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).
-
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
-
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??
-
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 ?
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 ?
-
Olá Jorge então vamos analisar a novela! hehe
a inteface controlador Pc estou utilizando um max 232, o cabo estou utilizando um serial DB9, sim um Null modem esquema igual da rogercom!!
eu consegui enviar dados, mas os dados que vão não são o que eu gostaria de escrever, vão apenas caracteres como como y com tremas, zeros cortados por uma barra, `A's crazeados, escreve apenas isso!! no simulador do LDmicro funciona que é uma beleza, mas quando gravo e vou enviar sai somente caracteres!
a e mais um coisa so envia dados se eu utilizar os dois comando do programa para enviar, a string formatada pela uart em serie com enviar uart como já postei anteriormente, se colocar apenas uma destas duas, no LDmicro simula corretamente mas o microcontrolador não envia nada!!
por iss penso que o problema tá no LDmicro!! já tentei outros hyperterminais e sai a mesma coisa!! será que pode ser algum ruido na placa? pois enviar ela envia só não sai o que eu gostaria de enviar! pensei que poderia ser até hexadecimal mas não é utilizei hyperterminais com hexadecimal e ele só traduz os caracteres que ela está enviando!!!
Seria interessante para mim utilizar o LDmicro pois estou fazendo uma CLP e um supervisório em java para meu TCC, e a linguagem Ladder seria mais uma defesa para meu trabalho! que é a linguagem dos Clp's comerciais!!!
-
Como esta gerando o clock?
se estiver usando o oscilador interno, talvez precise ser calibrado.
e veja também se os FUSES estão setados corretamente na hora da gravação.
-
para eliminar possibilidades, coloque em curto o RX_TTL e TX_TTL do MAX232, abra o hyperterminal e veja se esta ecoando (apertando a tecla 'a, terá d aparecer 'a' na janela do hyperterminal).
-
Olá Claudio! vou fazer os teste do Max como você falou!!
o clock o proprio programa que gera eu acredito! Frequência do cristal 4Mhz; Tempo de cilco 10ms; Baund rate uart 2400bbs está com esta configuração!
Desculpe a ignorância mas não sei o que são fuses? aonde posso encontra-lo?? no LDmicro ou ponyprog??
-
verd,
altera no LDmicro a freq para 8mhz e caso nao funcione para 1mhz.
o atmega16 vem de fabrica com os fuses setados para usar o oscilado interno na freq de 8mhz.
mas existe um fuse q setado divide a freq por 8 e nao tenho certeza como vem de fabrica.
eu utilizo o atmega168 q é uma versao melhorada do m16.
vou procurar nos seus posts o nome do prog q vc esta utilizando para fazer a gravacao e ver como configura os fuses.
-
verd,
Pesquisando no site do ponyprog, cheguei a isso:
http://www.lancos.com/e2p/ponyprog2000.html#s2.2.2 (http://www.lancos.com/e2p/ponyprog2000.html#s2.2.2)
Sobre fuse bits:
http://electrons.psychogenic.com/modules/arms/art/14/AVRFusesHOWTOGuide.php (http://electrons.psychogenic.com/modules/arms/art/14/AVRFusesHOWTOGuide.php)
Para calcular os fuses de maneira facil:
http://www.engbedded.com/fusecalc/ (http://www.engbedded.com/fusecalc/)
-
Olá Claudio! fiz os testes como você falou:
deixei em curto o RX e Tx que vem do microcontrolador: não escreveu nada!!
alterei o LDmicro para 1Mhz e nada
continua escrevendo um monte de caracteres no hiperterminal!
segue a foto de como estão configurados os fuses no ponyprog
-
verd,
de acordo com o seu print screen, o uc esta trabalhando com o oscilador interno na freq de 8MHz. configure o LD essa frequencia.
no teste do max232, é obrigado a escrever na tela o q vc digitar, se isso não aconteceu vc esta com problema ai.
teria como postar o esquema de como vc ligou o max232? incluindo os pinos da porta serial q vc utilizou.
-
verd,
esqueci de comentar
se vc colocou em curto o RX e TX sem tirar o m16, refaça o teste sem ele.
-
Claudio segue o squema do max 232 que estou utilizando!
os pinos testei sem o m16 e não escreveu!
-
verd,
no esquema o GND do MAX232 nao esta ligado, o pino 2 esta ligado diretamente ao negativo e os pinos do m16 nao batem.
nesse site aqui http://www.captain.at/electronic-atmega16-serial-port.php (http://www.captain.at/electronic-atmega16-serial-port.php) tem um exemplo completo incluindo esquema e código-fonte. caso precise do hex desse código-fonte para teste, eu compilo para vc.
abraço.
-
os pinos testei sem o m16 e não escreveu!
Experimente inverter os fios dos pinos 2 e 3 do conector DB9 ...
-
É necessário vc usar uma metodologia correta... os ajustes no hypeterminal e o arranjo de seu cabo serial também são importantes:
-Por isso, não habilitar o controle de fluxo, por hardware (RTS / CTS) ou por software (XON / XOFF)
-No cabo serial, ligar apenas os pinos 2, 3 e 5 no conector DB-9. -Voce pode jumpear os fios ligados aos pinos 2 ao 3 e ver se no hypeterminal os caracteres digitados são "ecoados" na tela. Isso permite vc testar seu cabo e as suas ligações.
-Despois dos testes anteriores, conforme já foi sugerido anteriormente nesse tópico, faça um teste similar (interligando TX e RX no nível TTL), com o sinal passando pelo MAX232, devidamente alimentado (+ e -), os CIs não funcionam de graça .... :).
-Teste também com velocidades diferentes (4800, 9600, 19200 bps) para ser certificar se está tudo OK (sem ruídos, sem erros...).
- Se tudo funcionar, com os dados digitados ecoando na tela sem erros... só depois disso, vc pode se concentrar no LDmicro.
-
Pessoal desculpe a demora para postar os resultados, estou em prova na faculdade, prometo em brevew postar os resultados do projeto
-
Boa tarde amigos, retomando o projeto, montei outro circuito max232, e deu a mesma coisa, meu programa manda uma palavra de 12 letras, mas no hiperterminal aparecem 12 caracteres, o que pode ser agora? o max232 está ok! acredito que seja o ld micro, qual outro programa posso utilizar, Bascom?WinAvr?Avrcodeware? vou esquecer esta programação por ladder!
-
... montei outro circuito max232, e deu a mesma coisa ...
Rodrigo, vc fez aquele teste de loop back já sugerido ?
Lembra-se ? Conectar TxD e RxD antes do microcontrolador e verificar se funfa ? É algo bem simples, mas mais importante do que parece ...
-
hum não testei hehe, vou colocar em curto o RX e TX nos pinos que saem do micro(ttl) antes do max232?
-
jorge fiz os testes colocando em curto o rx e tx do max que vão para o microcontrolador pinos 11 e 12 do max232n da texas, e não escoa nada no hiperterminal, aperto o a e escreve na parte TX do hiperterminal ai quando envio não vai nada! será que não está escoando??
-
programo o ld micro para escrever "1" na uart atravéz de pulso em entrada digital do microcontrolador, o mais próximo de uma palavra que ele escreve é na velocidade 14400 escrevendo ààà, nas outras velocidades escreve um monte de caracteres!
-
será que não está escoando??
Não Rodrigo, não está ecoando ... até que obtenha o eco corretamente nem adianta tentar outras coisas ...
-
O que eu faço agora?
-
coloca o pino 2 e 3 do db9 em curto e refaz o teste.
-
colocando em curto o RX com o TX, o computador irá receber exatamente o q ele manda independente de algum circuito externo. (desconecte o max232 antes de fazer o teste. pois pode acontecer de a porta não conseguir mudar de nivel e assim nao funcionará o teste)
caso funcione, tente refazer o teste em outro ponto do circuito, por ex. dpois do cabo. (sempre sem carga nenhuma na linha, se tu montou o max232 em soquete, basta retira-lo.)
agora se não funcionar o curto direto no db9 do pc, confirme se vc selecionou a porta corretamente no hyperterminal (com1, com2, com3, ...).
se tu não tiver sucesso colocando em curto o TX e RX direto no PC, ai o buraco ta mais embaixo.
-
colocando em curto o RX com o TX, o computador irá receber exatamente o q ele manda independente de algum circuito externo.
Eu não tenho tanta certeza ... Talvez seja necessário configurar o programa de comunicação para não utilizar controle de fluxo.
Habitualmente uso cabos null modem e nenhum controle de fluxo, por isto não tô lembrado se ocorreria eco ou não, sem a configuração adequada.
-
o que é estranho é que o microcontrolador está enviando e o hiperterminal está recebendo, poderia ser algum problema no max232??
-
o que é estranho é que o microcontrolador está enviando e o hiperterminal está recebendo, poderia ser algum problema no max232??
Rodrigo, o prob pode estar em qualquer lugar, inclusive na configuração. Os testes sugeridos servem justamente para isolar o prob ...
Vc pode começar por verificar se a porta serial está OK e se o programa de comunicação está corretamente configurado simplesmente interconectando os pinos 2 e 3 do conector DB9. Se isto funcionar, instale o cabo e teste da mesma maneira. Se isto funcionar, conecte o cabo e verifique o MAX232, se funcionar, verifique o PIC e o programa ... Percebe ?
-
o que é estranho é que o microcontrolador está enviando e o hiperterminal está recebendo, poderia ser algum problema no max232??
Se voce ligou os pinos 2 e 3 e o eco dio que voce digitou apareceu na tela do Hyperterminal o cabo, conectores e a porta serial do PC estão ok.
Para testar o MAX232, voce deve interligar os 2 pinos do MAX232, no nível TTL, que vão para o microcontrolador (com o microcontrolador desconectado do MAX232!!!) e repetir o teste anterior. Se o Hyperterminal ecoar com os sinais TTL, o MAX 232 está bom.
-
Olá minilathe, eu ligo o pino 2 do max232 com qual pino? estava ligando o rx e o tx que vem do microcontrolador!
-
verd, esquece o circuito q vc montou.
coloca em curto o pino 2 e 3 do db9 q vem do computador e faz o teste do eco.
-
Olá minilathe, eu ligo o pino 2 do max232 com qual pino? estava ligando o rx e o tx que vem do microcontrolador!
Ôpa...,
Dá uma olhada no circuito anexo, eu simulei no ISIS e montei há um tempo atrás, para um trabalho. Nesse caso, para testar o loop-back, há tres possibilidades:
(1) Direto na porta RS-232 do PC: é só interligar os pinos 2 e 3 (DB-9 ou DB-25) na traseira do PC;
(2) Na ponta do cabo, é só interligar os pinos 2 e 3 do conector;
(3) No MAX-232, é só interligar os pinos 11 e 12, que fique claro(!!!) do meu circuito anexado..., com o PIC desligado. Em seu caso, não sei quais "drivers" do MAX-232 está usando (há 4 no MAX-232), portanto, os pinos do MAX-232 que deve "curtar" depende do seu circuito!! Mas envie um esqueminha de teu circuito...
Nos casos (1) e (2) o loop-back é no nível RS-232 e no caso (3) em TTL.
-
Esqueci o meu circuito com PIC16F628, mas é apenas um exemplo. A ligação do MAX232 em seu circuito pode ser diferente!!
-
Olá minilathe meu circuito é igual ao seu esquemático, não consigo fazer o eco que vc estava explicando ele não retorna, mas meu circuito com este mesmo esquema de ligação do max envia para o hiperterminal, só não envia o que eu desejo que ele envie!!
estou querendo implementar uma comunicação modbus nesta clp microcontrolada, você até citou no inicio deste tópico, estou lendo sobre o protocolo modbus, se puder me envie algumas discas de como iniciar esta comunicação, vou ter que fazer um gateway para realizar esta conversão rs232-mudbus/rtu?
-
Olá minilathe meu circuito é igual ao seu esquemático, não consigo fazer o eco que vc estava explicando ele não retorna, mas meu circuito com este mesmo esquema de ligação do max envia para o hiperterminal, só não envia o que eu desejo que ele envie!!
Seu circuito é igual ao meu né?
E se ligar os pinos 2 e 3 do MX232 não há eco? Então vale a pena dar uma conferida na sua montagem, senão MAX232 deve estar bichado ...
Voce poderia enviar um diagrama esquemático do teu circuito?
estou querendo implementar uma comunicação modbus nesta clp microcontrolada, você até citou no inicio deste tópico, estou lendo sobre o protocolo modbus, se puder me envie algumas discas de como iniciar esta comunicação, vou ter que fazer um gateway para realizar esta conversão rs232-mudbus/rtu?
Não precisa de um gateway, a camada física do protocolo Modbus-RTU é RS-232 ou RS-485, que voce já possui em seu circuito, "voce já tem quase a metade do caminho andado". A camada de enlace do protocolo Modbus-RTU (que inclui: a montagem das mensagens, verificação de erro de CRC, verificação de endereço, ...) voce deverá codificar no programa do teu CLP.
-
(http://www.rogercom.com.br/PortaSerial/DB9-MAX232.gif)
peguei este esquema da rogercom é igual ao seu!!
sim vou ter que criar o protocolo, para isto vou ter que descartar a programação com o ldmicro! eu entendi o protocolo so não sei como começar com o código, vc saberia aonde eu posso encontrar um esqueleto de código fonte para eu montar meu protocolo em cima??
-
(http://www.rogercom.com.br/PortaSerial/DB9-MAX232.gif)
peguei este esquema da rogercom é igual ao seu!!
Ok, se voce interligar os pinos 11 e 12 do MAX232 deveria estar ecoando no Hyperterminal.....
Mas se não ecoar, definitivamente "não rola"....
sim vou ter que criar o protocolo, para isto vou ter que descartar a programação com o ldmicro! eu entendi o protocolo so não sei como começar com o código, vc saberia aonde eu posso encontrar um esqueleto de código fonte para eu montar meu protocolo em cima??
Não sei se terá de descartar a programação do LDmicro...
Já fiz um Slave Modbus-RTU em assembly, usando um microcontrolador AT89S8252. E estou portando o código para um PIC.
Segue um link de Slave usando C, que pode ser portado para qq microcontrolador.
http://modbusc.sourceforge.net/
Voce pretende usar o Modbus-RTU ou ASCII? Apesar de meio ineficiente, acho que o ASCII é mais fácil para iniciantes, pois usa ASCII e voce poderia até usar o Hyperterminal, ao invés de um simulador de Modbus, para gerar as mensagens.
-
Matei a charada!! não é problema de hardware é problema de software!!
simulei o circuito no proteus e coloquei pra rodar, coloquei em uma porta virtual o proteus com2 em loop com o hiperterminal com3 e batata escreveu os mesmo caracteres!! o problema é esta porcaria de LDmicro!! LDmicro = lixo!! vou aprender C na unha para fazer alguma coisa descente!!!!
-
Matei a charada!! não é problema de hardware é problema de software!!
simulei o circuito no proteus e coloquei pra rodar, coloquei em uma porta virtual o proteus com2 em loop com o hiperterminal com3 e batata escreveu os mesmo caracteres!! o problema é esta porcaria de LDmicro!! LDmicro = lixo!! vou aprender C na unha para fazer alguma coisa descente!!!!
É isso aí..., há muita coisa pronta em C (comunicação serial, rotinas Modbus-RTU Slave e Master, ....), Mas será necessário "juntar os pedaços" e montar o que voce pretende.
-
Matei a charada!! não é problema de hardware é problema de software!!
simulei o circuito no proteus ...
Dá pra mandar o arquivo do Proteus ? Gostaria de dar uma espiada ...
-
sim CNC tem como anexar no forum?? email??
-
n eh querendo jogar agua na tua cerveja, mas...
se o teste de eco n funcionou, bem provável q vc programando em asm tb n funcionará.
se os msm caracteres estao aparecendo, pode ser erro de configuração.
certifique de que configurou corretamente a velocidade, tamanho de palavra, bits de parada, paridade e controle de fluxo.
Sugiro vc testar um outro programa como terminal, o 232Analyser. Um pouco mais versátil.
E se mesmo assim n fazer funcionar o eco curto-circuitando o pino 2 e 3 do db9 no computador e pós max232, nem adianta esquentar a cabeça com o microcontrolador.