• Welcome to LusoRobótica - Robótica em Português.
 

Arduino + LCD 3310 - Osciloscopio

Started by metRo_, 24 de April de 2009, 20:54

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

metRo_

Olá,
Tenho andado a brincar com o lcd e então cá vai mais uma dessas brincadeiras :P
Desta vez estou a tentar fazer algo parecido com um osciloscópio. Ainda tem alguns erros e ainda está em desenvolvimento mas vou postando porque não sei quando voltarei a pegar nisto, tanto pode ser hoje como daqui a um mês :D

Explicação

Para começar tem que se explicar que o LCD esta dividido em 6 linhas e cada linha tem 48 colunas e os dados são enviados para cada coluna de uma linha.

Nesta imagem podem ver os pixeis do LCD ao pormenor.

Quando convertemos um valor analógico em digital usando 10bits este é convertido num valor de 0 a 1023.
Por isso vamos ter que mapear este valor para o tamanho do lcd. Este processo vai ter que ser divido em vários passos pois não basta mapear o valor de 0 a 1023 num de 0 a 48 (altura do lcd) por que por exemplo para 1023 teríamos 48, mas não nos é permitido dizer ao lcd simplesmente liga o pixel 48 no eixo dos x.

Então vamos começar por mapear o valor lido de 0 a 5, isto é, vamos ver em que linha se encontra o valor lido.
int limiteInf = 0;
int limiteSup = 1023;
pot=analogRead(0);
yValueLine=map(pot,limiteInf,limiteSup,0,5);


Agora já sabemos em que linha se encontra o valor que lemos, já sabemos onde vamos ter que escrever o valor.
Agora vem o segundo passo, pois dentro da linha onde vamos escrever temos uma coluna com 8 bits, temos que saber a que bit esse valor corresponde.

Para este passo temos que saber como é que a função map divide os valores. Neste caso podemos ver que esse valor é 204, fazendo 1022/5 = 204,4 em que o inteiro é 204.
1022/5 porque só se obtém 5 depois do mapeamento quanto tempos o valor 1023 por isso só há uma hipótese para se obter o máximo(enquanto que para outros valores, o valor da saída do mapeamento corresponde a um intervalo de 204 valores).

Então depois de sabermos este valor vamos então calcular o valor a que corresponde a entrada na colunca de 8 bits da linha em cima calculada.
Para isso vamos pegar no valor lido(em baixo o pot) e a este valor vamos subtrair os valores que correspondem a colunas abaixo deste.
Para um valor lido de 500 podemos verificar que corresponde a linha 2, agora vamos tirar a estes 500 os valores da linha 0 e 1, isto é: 204*2 = 408 e ficamos com 500-408= 92.
Este valor, 92, vai ser agora mapeado nos 8 bits da coluna. O valor lido na linha pode ir de 0 a 203.
O código que se segue executa o que acabei de explicar.

yValueLine=map(pot,limiteInf,limiteSup,0,5);
tempTeste = abs(pot-204*(yValueLine));
yValue=map(tempTeste,0,203,1,8


O código todo encontra-se em anexo, aviso que isto está em desenvolvimento e que tem muitos erros e o código não está organizado.

Vídeo
Liguei um gerador de sinais, com frequencia de 1Hz e fui alternando entre onda sinusoidal, triangular, quadrada, assim como aumentar e diminuir a amplitude do sinal.


Tópicos Importantes
Arduino + LCD Nokia 3310! - PCD8544 / OM6206

TigPT

Muitos parabéns, está a ficar bastante bom!

Quanto ao calculo das linhas, etc, será que não é mais aconselhado fazer com shifts e perder alguma qualidade na representação mas acelerar os cálculos permitindo fazer leituras de maiores frequências ?!

Continua o bom trabalho ;)


PS- Movido para novidades para sair na newsletter, depois volto a mover.

metRo_

Isto neste altura está lento porque tenho um delay de 1 ms, mas assim que tiver tudo direito vou começar a trabalhar na parte da frequência.

Não percebi a tua ideia. Estás a dizer em vez de usar a função map, fazer shifts?

ricardo-reis


ghostbuster

 ;D ta fixe, eu quero fazer algo parecido mas com um modulo rf ou seja, tenho um probe com arduino e transmissor, e tenho o lcd 3310 com arduino e receptor

microbyte

Muito fixe!
Gostei mesmo. Está aí muito trabalhinho :D

GnobarEl

Este anexo também está danificado,
podes alterar por favor?

Obrigado.

metRo_

Agora só quando voltar a casa(mesmo casa, agora estou onde estudo) e se calhar só daqui a duas semanas por causa dos exames. :S

GnobarEl

Sem problemas,
era mais pela curiosidade para ver algumas funções. Obrigado na mesma.

Ando a tentar adaptar estas funções:
http://blog.thiseldo.co.uk/?p=383
Mas está complicado, não estou a conseguir, possivelmente por causa dos pinouts.

Alguma ideia?

arduinopraxis

@metRo_
I see that the download osc.rar still is corrupt. Please can you provide an updated file as RAR or ZIP? Thanks

Translated:
Vejo que o osc.rar download ainda é corrupto. Por favor, você pode fornecer um arquivo atualizado como RAR e ZIP? Graças

metRo_

In a few hours i'm going upload that again!

arduinopraxis

Quote from: metRo_ on 18 de November de 2010, 15:20
In a few hours i'm going upload that again!

Thank you very much.

Regards from Switzerland