Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięmoj pierwszy projekt
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Mam problem. skladam wlasnie moj pierwszy projekt oparty na mikroprocesoze AT89S8252 i natrafiam na coraz nowsze problemy. Skladam zegar i na wyswietlaczu LCD pojawia mi sie godzina 165:165 i data 165-16 i mimo usilnych porb nie potrafie tego zmienic. Czy moglby mi ktos pomoc? dodaje zalacznik schemat pracy i program w bascomie.
niemoge wyslac w zalacznikach schematu i programu wiec podaje do nich adres:
www.3000.pl/wlosy/projekt/
Bardzo prosze o jakas pomoc.
www.3000.pl/wlosy/projekt/
Bardzo prosze o jakas pomoc.
Nie działją mi te twoje linki ([404] File Not Found : Plik nie istnieje
--------------------------------------------------------------------------------
The requested URL /wlosy/projekt/program.bas was not found on this server.
--------------------------------------------------------------------------------
Podany w zapytaniu URL /wlosy/projekt/program.bas nie został odnaleziony na tym serwerze).
--------------------------------------------------------------------------------
The requested URL /wlosy/projekt/program.bas was not found on this server.
--------------------------------------------------------------------------------
Podany w zapytaniu URL /wlosy/projekt/program.bas nie został odnaleziony na tym serwerze).
Zmienilem w programie wartosc tego kwarcu tak jak mi poradziles i ruszylo troche dalej. Mam problem chyba z migotaniem stykow na przyciskach (tak mi sie zdaje) bo gdy wciskam przycisk np do przejscia do timera to albo widze ze przechodzi do timera i spowrotem do wyswietlania czasu i daty albo odrazu timer rusza i odlicza czs.
Jak mam to poprawic? Probowalem poprawiac program wstawiajac opoznienie 10ms po kazdej lini kodu gdzie jest wciskanie jakiegokolwiek przycisku i nic to nie pomoglo. Moze mam to zrobic w jakiejs petli? Niemam pojecia.Prosze o pomoc!
Wstawilem tak mala pentelke na puszczenie przycisku ale nic to nie pomoglo:
If Prz3 = 0 Then
Waitms 10
If Prz3 = 0 Then
(tu co ma robic)
end if
end if
Taka petla zdaje egzamin czy nie? A moze to nie drgania stykow tylko cos innego?
Jak mam to poprawic? Probowalem poprawiac program wstawiajac opoznienie 10ms po kazdej lini kodu gdzie jest wciskanie jakiegokolwiek przycisku i nic to nie pomoglo. Moze mam to zrobic w jakiejs petli? Niemam pojecia.Prosze o pomoc!
Wstawilem tak mala pentelke na puszczenie przycisku ale nic to nie pomoglo:
If Prz3 = 0 Then
Waitms 10
If Prz3 = 0 Then
(tu co ma robic)
end if
end if
Taka petla zdaje egzamin czy nie? A moze to nie drgania stykow tylko cos innego?
Zauważam, że czesto stosujesz polecenia z grupy Wait. Nie jest to najlepsze rozwiazanie, staraj się tak układać program by takich poleceń było jak najmniej. Np. Wait 1 - zwłoka na puszczenie przycisku, a jak ktos będzie trzymał przycisk dłużej, a nawet jak nie to strasznie zwalnie Ci to program.
Odczyt stanu przycisku można zrealizować:
if Prz3 = 0 then
incr x 'zmienna byte
if x = jakaś wartość then (musi być taka by następowało to po ok 30 - 60ms)
coś tam wykonaj
end if
else
x = 0
end if
teraz jeśli ktoś będzie trzymał przycisk cały czas wciśnięty to "cos tam wykonaj" zostanie powtórzone wielokrotnie. Aby temu zapobiec można wprowadzić dodatkowa zmienną bitową, albo(gorzej) użyć instrukcji bitwait, ale wtedy należy pamietać żeby była ona wstawiona dopiero po wszystkich instrukcjach jakie ma wykonać procek po wciśnięciu przycisku(czyli po "cos tam wykonaj")
Problem drgań styków można też wyeliminować przez zewnętrzny filtr RC.
Także moja rada to pozbyć się Wait. Wati używaj tylko dam gdzie to konieczne, a do normalnego odmierzania czasu lepiej użyć jakiegoś licznika (jak ten wyżej z X)
Zauważyłem też w twoim programie następne błędy. Mianowicie błędne użycie instrukcji Exit Do. Instrukcji tej używa się w pętli po spełnieniu jakiegoś warunku, u Ciebie instrukcja ta jest wykonywana pod koniec pętli. W taki wypadku pętla zawsze jest wykonywana tylko raz, a przecież nie po to jest pętla.
Odczyt stanu przycisku można zrealizować:
if Prz3 = 0 then
incr x 'zmienna byte
if x = jakaś wartość then (musi być taka by następowało to po ok 30 - 60ms)
coś tam wykonaj
end if
else
x = 0
end if
teraz jeśli ktoś będzie trzymał przycisk cały czas wciśnięty to "cos tam wykonaj" zostanie powtórzone wielokrotnie. Aby temu zapobiec można wprowadzić dodatkowa zmienną bitową, albo(gorzej) użyć instrukcji bitwait, ale wtedy należy pamietać żeby była ona wstawiona dopiero po wszystkich instrukcjach jakie ma wykonać procek po wciśnięciu przycisku(czyli po "cos tam wykonaj")
Problem drgań styków można też wyeliminować przez zewnętrzny filtr RC.
Także moja rada to pozbyć się Wait. Wati używaj tylko dam gdzie to konieczne, a do normalnego odmierzania czasu lepiej użyć jakiegoś licznika (jak ten wyżej z X)
Zauważyłem też w twoim programie następne błędy. Mianowicie błędne użycie instrukcji Exit Do. Instrukcji tej używa się w pętli po spełnieniu jakiegoś warunku, u Ciebie instrukcja ta jest wykonywana pod koniec pętli. W taki wypadku pętla zawsze jest wykonywana tylko raz, a przecież nie po to jest pętla.
-
- -
- Posty:1
- Rejestracja:2 kwie 2004, o 12:20
LCD
gdzieś przeczytałem , że miałeś problem z wyświetlaczem LCD, ale go przepiąłęś ibyło wszystko OK. możesz coś bliżej napisać na ten temat? mój też wyświetla tylko prostokąciki...
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości