Página 1 de 1

glcd+rtc

MensagemEnviado: 25 Mar 2009 22:23
por fernandor
galera...fiz o seguinte codigo ccs. A ideia é mostrar as horas no glcd. O que esta acontecendo é que a variavel secs fica piscando. Alguem tem alguma ideia de como fazer ela parar de piscar..?

#include <16F877.h>
#use delay(clock=4000000)
#include <glcd.c>
#include <ds1307.c>


void main()
{
byte hora,min,sec;
int status = 1;
char secs[8];

init_ds1307();
sec=write_ds1307(0,0x00);


delay_ms(100);
glcd_init(ON);
glcd_fillScreen(OFF);

while(TRUE){
sec=read_ds1307(0);
sprintf(secs, "%X", (byte)sec); // Converts sec to text
glcd_text57(15, 15, secs, 1, ON);
glcd_text57(15, 15, secs, 1, OFF);
}

}

Re: glcd+rtc

MensagemEnviado: 25 Mar 2009 23:37
por Renie
Olá Fernando,

Você está ligando e desligando em seguida, se fosse um interruptor
normal, iria piscar por mais rápido que fosse o atuador!

Como é um código "traduzido" do C para asm, várias instruções
podem estar entre liga e desliga!

E, a princípio , se não houver um "tempo ON para ser visto", se usasse
lâmpadas, teria um efeito parecido com PWM!

LCD, tem tempo de resposta bem definidos, não muito fácil de converter
para percistência ótica, mas, se não forem respeitados os limites de
ambas, não conseguirá o que precisa.

[]'s
Renie

MensagemEnviado: 25 Mar 2009 23:58
por fabim
meu querido, tudo bom !!
glcd_text57(15, 15, secs, 1, ON);
glcd_text57(15, 15, secs, 1, OFF);

Eu infelizmente não utilizo o CCS, e nem sei ao certo quais as entradas que são colocadas nesta função mais.

glcd_text57(doth X 15 ?, doth y 15 ?, array de dados ?,o que quer dizer este 1 ?,porque on ?);


respondendo aí, acho que ja da pra entender o erro.

fabim

glcd+rtc

MensagemEnviado: 26 Mar 2009 06:52
por fernandor
obrigado renie e fabim...

fabim...a funcao tem os seguintes parametros

glcd_text57(x, y, texto,tamanho da fonte,cor);

valeu

Fernando

MensagemEnviado: 26 Mar 2009 08:42
por fabim
Slave meu querido !!

glcd_text57(15, 15, secs, 1, ON);
glcd_text57(15, 15, secs, 1, OFF);

Seu erro é.!! Manda texto, liga digitos, logo apos manda texto desliga digito.

Exatamente por isso que ele esta piscando.

Expeguimente, acer solamiente..
Código: Selecionar todos
 #include <16F877.h>
#use delay(clock=4000000)
#include <glcd.c>
#include <ds1307.c>


void main()
{
byte hora,min,sec;
int status = 1;
char secs[8];

init_ds1307();
sec=write_ds1307(0,0x00);


delay_ms(100);
glcd_init(ON);
glcd_fillScreen(OFF);

while(TRUE){
sec=read_ds1307(0);
sprintf(secs, "%X", (byte)sec); // Converts sec to text
glcd_text57(15, 15, secs, 1, ON);


 // se colocar a outra linha de comando
//como os caracteres dentro da array"secs" são o mesmos,
// você vai sobre escrever no display os mesmos valores, mais desta vez
//com os digitos apagados. O tempo que ele fica apagado,
//proporcional ao tempo que ele leva para ler o DS1307, executar
//sprintf, e escrever novamente os digitos, mais desta vez em on

}

}

glcd

MensagemEnviado: 26 Mar 2009 10:02
por fernandor
meu amigo...

tentei simular aqui e esta sobrescrevendo um numero sobre o outro.
Tem alguma outra ideia?

abraço

fernando

MensagemEnviado: 26 Mar 2009 10:24
por fabim
tenho.
IF novo valor diferente do anterior{
escreve tudo 0000 para apagar os char´s
escreve novo valor para aparecer o valor no LCD
}

só isso

glcd

MensagemEnviado: 26 Mar 2009 15:35
por fernandor
beleza pura...funcionou...
valeu mesmo fabim pela sua ajuda..

abraço

fernando