Problem z mrygającym LCD

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
tomson
-
Posty: 29
Rejestracja: 26 lut 2007, 18:02
Kontakt:

Problem z mrygającym LCD

Post autor: tomson » 07 maja 2009, 18:57

Witam
Napisałem program który mierzy obroty oraz czas pracy, narazie to wersja alfa ale juz coś działa. Napotkałem taki problem, wyświetlacz pulsuje mniej więcej 2 razy na sekundę przez co odczyt staje się mało czytelny i denerwujący

Jak to poprawić aby nie zakłócić odmierzania czasu ?
w tej chwili odmierzanie czasu rozpoczyna się od 0:0:0
Jak w prosty sposób zrobić aby było 00:00:00 ?

zamieszczam kod

Kod: Zaznacz cały

$regfile = "attiny2313.dat"
$crystal = 4000000
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2
Config Timer1 = Counter , Edge = Rising
Config Timer0 = Timer , Prescale = 1
Dim Timebase As Word , Sekunda As Byte , Minuta As Byte , Godzina As Word , Wynik As Word
Enable Interrupts : Enable Timer0
Timebase = 15620
On Timer0 Licz
Do                                                          
Cls
Lcd "obroty=" ; Wynik ; "obr/min"
 Lowerline
Lcd Godzina ; ":" ; Minuta ; ":" ; Sekunda
Cursor Off
Waitms 50
Loop

  Licz:                                                   
Decr Timebase                                              
if Timebase = 0 Then                                        
   Wynik = Timer1
   Wynik = Wynik * 60
   Timer1 = 0
   Incr Sekunda                                            
   Timebase = 15620
   If Sekunda = 60 Then
   Incr Minuta
   Sekunda = 0
   If Minuta = 60 Then
   Incr Godzina
   Minuta = 0
   End If
   End If                                                   
End If : Return

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 07 maja 2009, 20:29

Witam Wyświetlacz miga bo jest w pętli do loop i masz tam tylko 50 ms opóźnienia zrób jakiego select case lub sub rutynę żeby wyświetlacz nie był w pętli nie będzie go w tedy odświeżało tak często.

tomson
-
Posty: 29
Rejestracja: 26 lut 2007, 18:02
Kontakt:

Post autor: tomson » 07 maja 2009, 21:12

ok dzięki, czekam jeszcze na drugą cześć pytania odnośnie 00:00:00

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 10 maja 2009, 19:11

Należy sprawdzić, czy wartość zmiennej jest mniejsza od 10, i jeśli tak jest, to przed jej wpisaniem należy wpisać dodatkowe zero.

Zmień linike

Kod: Zaznacz cały

Lcd Godzina ; ":" ; Minuta ; ":" ; Sekunda 
na

Kod: Zaznacz cały

 If Godzina <10 then LCD "0"
LCD Godzina ; ":"
If Minuta <10 then LCD "0"
LCD Minuta ; ":"
If Sekunda <10 then LCD "0"
LCD Sekunda

tomson
-
Posty: 29
Rejestracja: 26 lut 2007, 18:02
Kontakt:

Post autor: tomson » 11 maja 2009, 5:37

Dzięki, przetestuje dzisiaj

Awatar użytkownika
Wesker
-
Posty: 27
Rejestracja: 01 lut 2006, 10:33
Lokalizacja: Leżajsk

Post autor: Wesker » 19 maja 2009, 18:05

Jeśli wyświetlamy coś na stałych pozycjach(a widzę, ze do tego dążysz) warto wyrzucić CLS ponad pętle do loop i migania nie będzie bez względu na opóźnienie.

ODPOWIEDZ