Monitoramento de guindaste - I/O com tensão 48v DC, log em SD

Olá pessoal...

Sou iniciante no mundo os Arduinos (já programei PIC a uns 7 anos atras) e estou com uma dúvida.

Quero fazer um sistema de monitoramento de guindaste e tenho uma dúvida: 1) Qual conversor DC/DC de 48v / 5v acho com facilidade no mercado brasileiro? Inicialmente vou precisar de 12 sinais 48v. 2) Vou ficar sem portas livres na minha Nano, pensei em usar aquele CI com comunicação I2C, como chama mesmo? É um que me diz o estado das portas digitais via I2C...

Vou precisar fazer um log dessas entradas digitais ao longo do tempo. Já peguei um RTC e um shield SD. Vocês acham que fica bom usar uma porta lógica e jogar essas 12 entradas na interrupção? Aí quando houvesse a interrupção, eu fazia um pool via I2C nesse CI que esqueci o nome, olhava a data no RTC e guardava no SD com data e hora...

Para o I2C, tem este: http://www.taydaelectronics.com/mcp23017-16-bit-i-o-expander-with-i2c-interface-ic.html https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library

É isso mesmo a idea esta certa Frossi No chip que o Mortis te indicou existem 2 pinos que geram interrupçao sempre que os GPIO mudao de estado.Com isso configuras uma interrupçao no micro e quando elas mudam setas uma flag para fazer a leitura via I2C dos portos e eventualmente gravas no cartao.Faz este trabalho fora da ISR pois ler o port-expander pode demorar tempo precioso. Com que frequencia esses valores podem mudar? Sabes que um cartao SD tambem tem limites de escrita certo? Outra coisa que tens de prever é o sinal a entrada portexpander é "limpo"? Ou seja necessitas de debounce por hardware neles?

Hugo,

Desta vez a culpa não é minha, foi o Lago! LOL

Tem me sobrado muito pouco tempo para o arduino, passo aqui só para uma vista rapida (apendo muito com vocês) e não ficar muito por fora do que esta a acontecer ;)

Todos,

Shift registers são verdadeiros salvadores de pinos!

Duas opções da casa: http://www.arduino.cc/en/Tutorial/ShiftIn http://arduino.cc/en/Tutorial/ShiftOut

Por enquanto só tive necessidade de mais outputs, usei os 74h, mas nada como testar e determinar o melhor (o o que mais gosta) ;)

Desta vez a culpa não é minha, foi o Lago! LOL

Opsss
Nao sei onde é que fui buscar o teu nome no post anterior.Ja devia estar queimado de sono.
Desculpem colegas pelos nomes trocados

HugoPT,

Não deves desculpa, acontece nas melhores famílias :wink:

O problema é se o Lago se sente ofendido por ser chamado de Mortis kkk

(desculpem o off topic, mas não consigo perder a piada)

Mortis: O problema é se o Lago se sente ofendido por ser chamado de Mortis kkk

É... já solicitei ao moderador que tome as devidas providências! :D :D :D :D

XD

HugoPT: É isso mesmo a idea esta certa Frossi No chip que o Mortis te indicou existem 2 pinos que geram interrupçao sempre que os GPIO mudao de estado.Com isso configuras uma interrupçao no micro e quando elas mudam setas uma flag para fazer a leitura via I2C dos portos e eventualmente gravas no cartao.Faz este trabalho fora da ISR pois ler o port-expander pode demorar tempo precioso. Com que frequencia esses valores podem mudar? Sabes que um cartao SD tambem tem limites de escrita certo? Outra coisa que tens de prever é o sinal a entrada portexpander é "limpo"? Ou seja necessitas de debounce por hardware neles?

Obrigado pessoal. Bom saber que estou no caminho certo.

Hugo, a ideia era essa, fazer a leitura fora da interrupção com um flag na main. Quando você diz limite de escrita no cartão, você diz ciclos de escrita ou espaço mesmo? Em ambos os casos, acho que isso não será problema... A frequência de mudança é baixa. Cada sinal ficará cerca de 2 a 5 segundos pressionado continuamente. O que você quis dizer com sinal do port expander limpo? Você fala do sinal que irá chegar no 74H? O que é debouce de hardware?

Aí pensei em salvar só as interrupções de mudança, depois faço algo em Excel no PC para contabilizar quanto tempo cada pino ficou em UP... Por exemplo, estrutura do log ficaria em: RTC (hh mm ss) / IO (2 bytes) 10:30:02 - 0001 //interrupção 1 10:30:04 - 0000 // interrupção 2

Ai faço o tratamento que o pino 1 ficou 2 segundos em UP...

Bom… se pretendes ter um monitor apenas quando alguns eventos acontecem, então a ISR é a melhor opcão.
Senão, creio que leres o estado dos portos (se for o MCP23017 ou algo assim não demora muito) no início da lógica será aconselhável. Se esses pinos ficam activos por 2 segundos o teu tempo de ciclo deve ser extremamente menor que isso.
Ao deixares as ISR de lado estás a evitar alguns problemas que tendem a acontecer com elas. Se o teu sinal é assim tão “lento” e pouco frequente, leres os portos no inicio… veres se houve alteracão nos bits que pretendes e guardar o estado dos bits se realmente houve diferenca não é mais simples que ter ISRs… Nota também que as ISRs e o cartão SD podem não se dar muito bem uma com a outra.

Quanto ao SD… pelo que tenho visto em fóruns da Raspberry Pi, realmente é de evitar usá-lo para guardar coisas de forma dinâmica. Existe quem tenha feito aplicacões semelhantes ao que pretendes com a raspberry pi e queixam-se que passado pouco tempo o cartão fica “danificado”, ou seja, os dados ficam corrompidos. Sinceramente não sei se acontecerá com o Arduino, uma vez que os acessos são diferentes e não existe um sistema operativo por trás a fazer, sabe-se lá o quê.
Podes tentar guardar o máximo de dados em memória e depois fazer dump para o cartão de memória, por exemplo… Isso diminuiria os acessos ao cartão, mas por outro lado a memória é preciosa no Arduino.

Bounce é provocado por switchs baratuchos que ao serem libertados, como uma mola, alteram de estado por vários milisegundos até fixarem num valor.
Se pesquisares na net, encontras imensa informacão sobre isso.

Se o guindaste que pretendes monitorizar for minimamente profissional, duvido que tenhas problemas de bounce… mas posso estar enganado.