LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: manuel_apr em 07 de Julho de 2013, 18:32

Título: multi-processamento
Enviado por: manuel_apr em 07 de Julho de 2013, 18:32
boa tarde.

é possível fazer multi-processamento com o arduino?

é que eu tenho no arduino um relógio e de vez em quando é necessário fazer outras operações. sempre que entro nas outras operações o relógio para e continua depois onde tinha ficado mas isso causa atrasos de alguns minutos.

cumps
Título: Re: multi-processamento
Enviado por: senso em 07 de Julho de 2013, 18:37
Relógio?
Se queres tempo estavel, ou usas um timer e interrupções, ou tens de garantir que não tens código bloqueante e usas algo do género do blinky without delay para que tenhas cada parte do teu programa a ser executada de x em x ms(ou segundos, ou dias, ou o intervalo de tempo que quiseres).
Título: Re: multi-processamento
Enviado por: manuel_apr em 07 de Julho de 2013, 18:57
obrigado pela resposta.

cumps
Título: Re: multi-processamento
Enviado por: vicardosof em 07 de Julho de 2013, 19:50
Por que não usas um relógio externo?
Título: Re: multi-processamento
Enviado por: Njay em 07 de Julho de 2013, 19:58
Para teres as horas mesmo precisas, precisas de um relógio externo ou um cristal de 32768Hz no mega.

Caso contrário, podes usar multiprocessamento cooperativo:

http://embeddeddreams.com/site/2011/07/10/how-to-do-several-things-at-the-same-time/ (http://embeddeddreams.com/site/2011/07/10/how-to-do-several-things-at-the-same-time/)
http://embeddeddreams.com/site/2011/07/23/more-on-doing-several-things-at-the-same-time/ (http://embeddeddreams.com/site/2011/07/23/more-on-doing-several-things-at-the-same-time/)

Tenho uma versão portuguesa do 1º artigo:

http://troniquices.wordpress.com/2010/05/24/arduino-a-fazer-varias-coisas-ao-mesmo-tempo/ (http://troniquices.wordpress.com/2010/05/24/arduino-a-fazer-varias-coisas-ao-mesmo-tempo/)
Título: Re: multi-processamento
Enviado por: senso em 07 de Julho de 2013, 20:00
Podes ter uma interrupção de 1ms, e contar segundos, minutos e horas a partir dai, com um cristal de 16Mhz, o cristal de 32Khz não é de todo necessário, só se for para ligar ao timer 1, mas não existe necessidade disso.
Título: Re: multi-processamento
Enviado por: dropes em 07 de Julho de 2013, 20:01
Relógio externo (RTC) só se justifica quando se quer manter o horário certo depois de se desligar a alimentação.

Se for usado um timer e interrupção, como o Senso referiu, funciona perfeitamente, isto só é possível se o micro tiver um oscilador a cristal, como acontece no arduino, caso contrário a precisão é mentira e não faz 1 minuto sem falhar pelo menos 1 segundo.
Título: Re: multi-processamento
Enviado por: Njay em 07 de Julho de 2013, 20:16
Um cristal de 32.768 KHz tem um erro inicial tipico de 20ppm. Um cristal de 16.000 MHz (que é o que têm nos vossos arduinos, e é o que em geral estão a comprar quando compram um cristal de 16MHz) tem os mesmos 20ppm de erro, ou mais. 20ppm no cristal de 32.768KHz é um erro de ~+/-0.6 Hz que dá um erro de quase 52s por mês. 20ppm de erro no cristal de 16.000 MHz é um erro de até ~+/-320Hz, 533 vezes maior que o erro do cristal de 32.768 KHz ;). Por isso tudo o que é "relógio" tem um cristal de 32.768 KHz. Se é só para contar umas horas o cristal de 16.000MHz serve.
Título: Re: multi-processamento
Enviado por: senso em 07 de Julho de 2013, 21:07
E porque é um numero bonito e uma potência de 2 que é facilmente dividido num sinal de 1s usando apenas 15 Flips Flops tipo D, por exemplo.
Título: Re: multi-processamento
Enviado por: manuel_apr em 14 de Julho de 2013, 13:27
agradeço todas as respostas. mas como queria manter as horas depois de desligar tudo optei por um relógio externo. agora estou à espera que ele chegue.

cumps