Primo, o bom é o seguinte.
Você ter um array de 3 bytes no seu caso.
Sendo que cada byte equivale ao Cent Dez Uni.
void interrupt(void){
IF(estouro timer 0){
**************************************
Aqui dentro você cria uma rotina que simplesmente pegue o byte equivalente a centena e jogue no dsplay1..
Proxima interrupt, pegue o byte equivalente a dezena, e jogue no display2
Proxima interrupt, pegue o byte equivalente a unidade, e jogue no display3
se display==3"ou dois se contar de 0..2"{display=0}.
*******************************************************
Observe que você criou uma máquina, que independente de estar executando uma rotina no main, ou um calculo ou seja o que for.
Você simultâneamente vai estar escrevendo nos displays.
OBS> quer trocar os valores dos displays, no main ou em uma sub rotina, você escreve diretamente no array global de 3 bytes, e a interrupção por timer0 vai se encarregar de jogar os valores nos displays.
Ou seja.:
Estude sobre interrupção, Sobre interrupção do TMR0, Sobre configurar o timer0 para controlar o tempo de estouros.
Mais como saber qual o tempo entre estouros ?
Bom os zói dos seres humanos, na sua maioria.
Se uma fonte de luz tiver piscadas com intermitência não menor que uns 25hz, o olho não consegue saber que a luz esta piscando por causa da persistencia de captura.
Sendo assim, você sabe que cada display, tem que ter uma amostragem na média de tempo de:
1Segundo/25piscadas.. = 40mS.
Ou seja dentro de 40mS, você deve amostrar display1, 2 , 3, e continuar o loop infinito.
Bom se eu tenho um tempo entre frames displays de 40mS, e tenho 3 displays, sendo assim o tempo de persistencia de cada display é de !!
0.040 / 3displays.
13mS +/-.....
- Código: Selecionar todos
OBS:erve!!
T= 13mS 13mS 13mS 13mS 13mS 13mS
| display1 |display2 |display3|display1|display2|display3|
|________ |_______|______ | | |
-------------|_______|______________| |
------------------------|______________________|
OLHE no T.
do display1, até o proximo display1, contando entre bordas de subida de amostragem qual é o tempo ?
3 * 13mS = 39mS certo ?
Ou seja, eu ja havia dito que frequencia menor que 25hz o zóio pode perceber as piscadas alem de ficar fei pra burro.
Se eu configurei o tempo do tmr0 de forma que o tempo entre estouros fique por volta de 13mS, eu to tranquilo.
Resumindo, os requisitos estão completos...
Proximo passo.
Veja que, de T display1,,,,,,,,display1 novamente eu tenho uma montante de 39mS, porem este led fica aceso apenas em 39/3, ou seja 13mS.
Ou seja, tu criou um PWM com Ton de 33.3% on state e 66.6%of state.
Para 3 displays, e tempo de 13mS você não precisa fazer compensação de corrente dos led´s.. Porêm quando você fala em frequencia alta aí a historia muda.
Se o led = 15mA por exemplo aceso direto.
Para um PWM com 33% TON, rapidamente tu leva a mente a considerar que a Corrente de pulso deve Ser 3* maior para ficar com mesma intensidade.
Porêm o buraco é mais embaixo, pois tem que levar em consideração alguns fatores.
No datasheet do display, diz que a suportabilidade de máxima corrente em 1mS é de 35mA, só que os seus calculos disseram que precisa de 80mA pico!> e aí como fica ? o Ton esta menor que 1mS ? mesmo estando menor os ditos 80mA estão de acordo com a corrente de curva do componente ? a frequencia de amostragem do led estão de acordo com o dito pelo datasheet ?
Ou seja.. use display LCD... só mandar os bytes ele se vira com o resto..rsrs
Abraços
Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!