LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: filipe89 em 25 de Abril de 2013, 01:03
-
Boa noite.
Estou para fazer um upgrade a um projecto meu já antigo e o objectivo é adicionar um arduino, porque no antigo já não tenho mais espaço de memória nem espaço físico.
No segundo arduino terei sensores e motores, disponível com porta série mas sem SPI (queimou porque a ponte H lá ligada entrou em cc), no outro vai ter a porta série ocupada com o PC poderá não levar sensores mas vai comunicar com o segundo arduino.
A minha questão agora era saber qual a melhor forma de comunicação. consigo interligar através de I2C? enviar dados para um porto de modo a que saiam em série? em ultimo caso pulsos, mas nunca mais saia dali :/
PS: a comunicação entre o primeiro arduino e o PC é constante, por isso não dá jeito haver interrupção.
-
O modo de comunicação em I2C é mais para endereçamentos, não sendo o mais indicado; rs232 também não é muito adequado porque não se pode interromper a comunicação a meio e o sincronismo tem de ser preciso, por isso resta o spi, se não tens disponível fisicamente sempre podes fazer por software.
-
Talvez o mais simples é fazer comunicação serie por software (http://arduino.cc/en/Tutorial/SoftwareSerial) entre os dois arduinos.
-
O modo de comunicação em I2C é mais para endereçamentos, não sendo o mais indicado; rs232 também não é muito adequado porque não se pode interromper a comunicação a meio e o sincronismo tem de ser preciso, por isso resta o spi, se não tens disponível fisicamente sempre podes fazer por software.
A informação que quero receber também é "curta" 4 inteiros de 4 dígitos de cada vez, repete-se é muitas vezes
Talvez o mais simples é fazer comunicação serie por software (http://arduino.cc/en/Tutorial/SoftwareSerial) entre os dois arduinos.
era +- isso que estava a pensar, mas não de forma tão simples, embora no I2C só preciso de 2 fios, função genérica, e consigo por ex partilhar um RTC pelos 2.
-
Não sei se é muito boa ideia partilhar periféricos, pode ser feito, mas á que ter em atenção ao código, não seria uma solução melhor, usar só um micro maior/com mais pinos?
-
Não sei se é muito boa ideia partilhar periféricos, pode ser feito, mas á que ter em atenção ao código, não seria uma solução melhor, usar só um micro maior/com mais pinos?
não por causa do processamento, enquanto fica a fazer contas passa o tempo para a resposta do PC
-
Por falta de processamento?
-
Por falta de processamento?
O PC pede comunicação x em x milissegundos, caso não haja resposta ele reinicia a comunicação, quando o arduino vai a responder, já vai tarde depois de fazer as contas e actuar os motores.
-
Isso deve é ser código mal pensado, até porque serial é algo lento, o que é que o micro está mesmo a fazer com o que envia/recebe para o pc?
-
Boas,
Eu tenho uma solução para o teu dilema ... mas possivelmente não a vais querer ouvir ;)
Abraços,
PA
-
É mandar o IDE do arduino pela janela fora, porque para que está a fazer o atmega deve servir perfeitamente..
-
o arduino está a comunicar com o PC com um programa chamado setellarium. Então o arduino tem que receber a informação converter os dados, ler posição e corrigir/mudar de posição actuando motores.
Esta ultima parte é a mais lenta e que faz desligar a comunicação, podia meter por interrupção mas acho que complica :/
-
O serial implementado no Arduino funciona por interrupções, como é que "desliga" a comunicação?
O teu código está mal feito e é bloqueante na parte do movimento, só pode..
-
Se ficar a actuar motores, estando dentro dum ciclo for, não vai poder responder ao PC
-
Não precisa de bloquear para rodar um stepper ou dois, tens de alterar a estrutura do código, olha para o exemplo blinky without delay e entende como ele funciona, podes implementar milhentas coisas diferentes para que funcionem de x em x tempo sem serem bloqueantes, foi precisamente isso que o Njay te disse para fazeres e te deu links(noutro tópico penso eu).
-
pois, o problema é que não de passo, e tenho uma bussula e um acelarometro a serem verificados para saber se está na posição certa ou não.
Já tenho o arduino sem saídas/entradas, e quero passar para motores de passo. por isso também é uma das razoes para mudar, também podia usar o arduino mega, mas ai sim, teria que melhorar a programação.
-
Muda para um micro com mais pinos, porque usar mais micro-controladores só te vai dar é mais problemas..