Timer, Codevision i AT90S2313



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "muniek" <muniek241_at_nospam_wp.pl>
Subject: Timer, Codevision i AT90S2313
Date: Mon, 9 May 2005 15:10:09 +0200


Witam,
napisałem sobie taki programi jak poniżej. Jest to prosty timerek, jednym
przyciskiem startuję, drugim zatrzymuję. Ale mam problem z wyświetlaniem.
Wynik na LCD mi migocze. Tzn. Migoczą częsci setne sekundy oraz sekundy. Nie
wiem jak to zrobić. Wygląda to strasznie nieelegancko (niedość że miga, to i
wyświetla się słabiej, niż np. zwykły napis lub wynik po zatrzymaniu
stoperka).
Czekam na Wasze porady :-)
Pozdrawiam
Piotrek

A o to kod.
Chip type : AT90S2313
Clock frequency : 4,000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
#include <90s2313.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
int a; //sekundy
int b=0;
int min=0;
int ms=0;
int pom=0;
int pom1=0;
int p1,p2,p3;
char display_buffer[5];
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x06;
// Place your code here
b=b+1;
if (b==250)
{
ms=0;
b=0;
a=a+1;
if (a==60)
{
a=0;
min=min+1;
}

}
}

void main(void)
{
PORTB=0x00;
DDRB=0x00;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x03;
TCNT0=0x06;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x00;

GIMSK=0x00;
MCUCR=0x00;

TIMSK=0x02;

ACSR=0x80;

lcd_init(16);

#asm("sei")

while (1)
{
DDRD.0=0;
PORTD.0=1;

DDRD.1=0;
PORTD.1=1;
if (PIND.1==0)
{
pom=0;
pom1=1;

}

if (PIND.0==0)
{
a=0;
b=0;
ms=0;
min=0;
pom=1;
}
else
{
if (pom==1)
{
lcd_clear();
sprintf(display_buffer,"%i %i %i",min, a, b*4);
lcd_clear();
lcd_puts(display_buffer);

}
else
{
if (pom1==0)
{
lcd_clear();
lcd_putsf("Czekam...");
}
if (pom1==1)
{
p1=min;
p2=a;
p3=ms;
lcd_clear();
sprintf(display_buffer,"%i %i %i",p1, p2, b*4);
lcd_clear();
lcd_puts(display_buffer);
while (PIND.0==1)
{}
}

}
};
}
}



Poprzedni Następny
Wiadomość
Spis treści
From: "uC PC" <pinarczuk_at_nospam_poczta.onet.pl>
Subject: Re: Timer, Codevision i AT90S2313
Date: 9 May 2005 15:49:04 +0200


Witam,
napisałem sobie taki programi jak poniżej. Jest to prosty timerek, jednym
przyciskiem startuję, drugim zatrzymuję. Ale mam problem z wyświetlaniem.
Wynik na LCD mi migocze. Tzn. Migoczą częsci setne sekundy oraz sekundy. Nie
wiem jak to zrobić. Wygląda to strasznie nieelegancko (niedość że miga, to i
wyświetla się słabiej, niż np. zwykły napis lub wynik po zatrzymaniu
stoperka).
Czekam na Wasze porady :-)
Pozdrawiam
Piotrek


Wystarczy że będziesz obliczał w paięci, a wyświetlał wynik tylko co 50-60ms,
szybciej i tak oko nie zauważy.

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "muniek" <muniek241_at_nospam_wp.pl>
Subject: Re: Timer, Codevision i AT90S2313
Date: Mon, 9 May 2005 18:13:30 +0200



Użytkownik "uC PC" <pinarczuk_at_nospam_poczta.onet.pl> napisał w wiadomości
news:531f.00000b85.427f6a4f_at_nospam_newsgate.onet.pl...
Witam,
napisałem sobie taki programi jak poniżej. Jest to prosty timerek,
jednym
przyciskiem startuję, drugim zatrzymuję. Ale mam problem z
wyświetlaniem.
Wynik na LCD mi migocze. Tzn. Migoczą częsci setne sekundy oraz sekundy.
Nie
wiem jak to zrobić. Wygląda to strasznie nieelegancko (niedość że miga,
to i
wyświetla się słabiej, niż np. zwykły napis lub wynik po zatrzymaniu
stoperka).
Czekam na Wasze porady :-)
Pozdrawiam
Piotrek


Wystarczy że będziesz obliczał w paięci, a wyświetlał wynik tylko co
50-60ms,
szybciej i tak oko nie zauważy.

OK. Dzięki. Faktycznie, chyba ciut za szybko wysyłałem dane do wyświetlacza.
A jeszcze takie jedno pytanko odnośnie Codevision.
Używając LCD2*16 jak przejść do drugiej linii ???
Bo coś takiego nie działa :(
...
lcd_clear();
sprintf(display_buffer,"%i %i %i",p1, p2, b*4);
lcd_gotoxy(0,1);
putsf("Napis");
...

Pozdrawiam
Piotrek



Poprzedni Następny
Wiadomość
Spis treści
From: =?utf-8?B?UmFmYcWCIFN6dWxj?= <rafszul_at_nospam_acd_o2.pl>
Subject: Re: Timer, Codevision i AT90S2313
Date: Tue, 10 May 2005 11:02:17 +0200



A jeszcze takie jedno pytanko odnoÂśnie Codevision.
U¿ywaj¹c LCD2*16 jak przejœÌ do drugiej linii ???
Bo coÂś takiego nie dziaÂła :(
...
lcd_clear();
sprintf(display_buffer,"%i %i %i",p1, p2, b*4);
lcd_gotoxy(0,1);
putsf("Napis");
...


Powinno być lcd_putsf("Napis");

--
Pozdrawiam
Rafał Szulc

Odpowiając usuń z adresu "acd_"

Poprzedni Następny
Wiadomość
Spis treści
From: "muniek" <muniek241_at_nospam_wp.pl>
Subject: Re: Timer, Codevision i AT90S2313
Date: Tue, 10 May 2005 20:44:48 +0200



Użytkownik "Rafał Szulc" <rafszul_at_nospam_acd_o2.pl> napisał w wiadomości
news:op.sqjx13hetvglj1_at_nospam_dial-1684.elblag.dialog.net.pl...

A jeszcze takie jedno pytanko odno?nie Codevision.
U?ywaj?c LCD2*16 jak przej?a do drugiej linii ???
Bo co? takiego nie dzia3a :(
...
lcd_clear();
sprintf(display_buffer,"%i %i %i",p1, p2, b*4);
lcd_gotoxy(0,1);
putsf("Napis");
...


Powinno być lcd_putsf("Napis");


No tak, źle napisałem tutaj. W programie miałem lcd_putsf("Napis"); no i
właśnie nie działało. Z reguły zaczerniało cały ekranik (czyli aż dwie linie
-), czasmi tylko jedną (pierwszą) a druga zostawała czysta ).
Pozdrawiam
Piotrek



Poprzedni Następny
Wiadomość
Spis treści
From: =?utf-8?B?UmFmYcWCIFN6dWxj?= <rafszul_at_nospam_acd_o2.pl>
Subject: Re: Timer, Codevision i AT90S2313
Date: Tue, 10 May 2005 11:03:46 +0200



A jeszcze takie jedno pytanko odnoÂśnie Codevision.
U¿ywaj¹c LCD2*16 jak przejœÌ do drugiej linii ???
Bo coÂś takiego nie dziaÂła :(
...
lcd_clear();
sprintf(display_buffer,"%i %i %i",p1, p2, b*4);
lcd_gotoxy(0,1);
putsf("Napis");
...


Powinno być lcd_putsf("Napis");

--
Pozdrawiam
Rafał Szulc

Odpowiając usuń z adresu "acd_"