Witam,
przeszukałem parę wątków, ale nie trafiłem na nic podobnego, jedynie gdzieniegdzie zauważyłem, że ktoś ma problem przy zwiększeniu się programu > 2kB, ale nie łączono tego z użyciem polecenia $large, który zamienia skoki ACALL w LCALL, ale - co dziwne - rowniez zmienia dzialanie programu,
u mnie objawia sie to tym, ze nie zawsze wlasciwie jest inicjalizowany wyswietlacz i czasem zamiast normalnego tekstu wyswietla 'krzaczki' albo czarne kwadraciki i dopiero po resecie dziala normalnie,
zdarza sie to co kilka-, kilkanascie wlaczen..
nie wiem jak to obejsc, mam 89s8253 i szkoda, zeby teraz stosowac programy do 2kB, chociaz moge do 12kB...
jakies pomysly?
ps. i powiedzmy, ze na razie chodzi o rozwiazanie problemu, a nie obejscie go przez np. zastosowanie innego jezyka programowania
dodam: ze na pewno chodzi o $large, bo przy programie <2kB i zaprogramowaniu uK bez $large zawsze jest ok, z $large - nie
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ę$large powoduje błąd
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Co jak co, ale na tym etapie program powinien działać deterministycznie a nie przekłamywać w kilku % uruchomień.
Póżniej - w czasie pracy - gdy na jego działanie nałożą się interakcje z otoczeniem (np. oczekiwanie przez losowy czas na zdarzenie zewnętrzne) można próbować tłumaczyć nimi niepowtarzalne zachowanie. Ale IMHO nie na samym początku, podczas inicjalizacji.
Prawdopodobnie program działa Ok, ale coś dzieje się w nim zbyt szybko - na granicy możliwości sprzętu. Zmiana trybu na $large zmienia zależności czasowe i zwiększa prawdopodobieństwo wystapienia błędu do zauważalnej wartości.
1) Zakładam, że nie przetaktowałeś procesora i pracujesz w katalogowym przedziale napięcie zasilania /częstotliwość zegara?
2) Wyświetlacze LCD potrzebują na wewnętrzną inicjalizację kilkudziesięciu ms po włączeniu zasilania. Kontroler LCD może zgłupieć jeżeli program zbyt wcześnie zacznie wysyłać do niego sekwencję inicjującą. Nie znam Bascoma ale podejrzewam, że nie wstawia odgórnie tych kilkudziesięciu ms opóźnienia po starcie i należy to zrobić ręcznie.
3) Nie wiem jak Bascom inicjalizuje kontroler wyświetlacza, ale poprawna inicjalizacja HD44780 powinna się zaczynać od 3-krotnego wysłania komendy przełączającej w tryb 4-bitowy (a dopiero potem ew. przełączenia w tryb 8-bitowy jeżeli istnieje taka potrzeba). Rzecz w tym, że nigdy nie masz pewności w jakim trybie wyświetlacz się obudzi. Jeżeli przeżył całkowity zanik napięcia Vcc to prawdopodobnie w trybie 8-bit. Ale jeżeli napięcie zanikło tylko częściowo to kontroler LCD mógł nie ulec poprawnemu wyzerowaniu. Jeżeli program na wstępie zacznie do niego gadać w złym trybie to oczywiście się nie dogada.
Nigdy nie słyszałem, żeby kod generowany przez bascoma sprawiał takie kłopoty, ale dla świetego spokoju należałoby do niego zajrzeć. Albo przypilnować, żeby napięcie zasilania po wyłączeniu spadało do pomijalnie małej wartości.
--
MDz
Póżniej - w czasie pracy - gdy na jego działanie nałożą się interakcje z otoczeniem (np. oczekiwanie przez losowy czas na zdarzenie zewnętrzne) można próbować tłumaczyć nimi niepowtarzalne zachowanie. Ale IMHO nie na samym początku, podczas inicjalizacji.
Prawdopodobnie program działa Ok, ale coś dzieje się w nim zbyt szybko - na granicy możliwości sprzętu. Zmiana trybu na $large zmienia zależności czasowe i zwiększa prawdopodobieństwo wystapienia błędu do zauważalnej wartości.
1) Zakładam, że nie przetaktowałeś procesora i pracujesz w katalogowym przedziale napięcie zasilania /częstotliwość zegara?
2) Wyświetlacze LCD potrzebują na wewnętrzną inicjalizację kilkudziesięciu ms po włączeniu zasilania. Kontroler LCD może zgłupieć jeżeli program zbyt wcześnie zacznie wysyłać do niego sekwencję inicjującą. Nie znam Bascoma ale podejrzewam, że nie wstawia odgórnie tych kilkudziesięciu ms opóźnienia po starcie i należy to zrobić ręcznie.
3) Nie wiem jak Bascom inicjalizuje kontroler wyświetlacza, ale poprawna inicjalizacja HD44780 powinna się zaczynać od 3-krotnego wysłania komendy przełączającej w tryb 4-bitowy (a dopiero potem ew. przełączenia w tryb 8-bitowy jeżeli istnieje taka potrzeba). Rzecz w tym, że nigdy nie masz pewności w jakim trybie wyświetlacz się obudzi. Jeżeli przeżył całkowity zanik napięcia Vcc to prawdopodobnie w trybie 8-bit. Ale jeżeli napięcie zanikło tylko częściowo to kontroler LCD mógł nie ulec poprawnemu wyzerowaniu. Jeżeli program na wstępie zacznie do niego gadać w złym trybie to oczywiście się nie dogada.
Nigdy nie słyszałem, żeby kod generowany przez bascoma sprawiał takie kłopoty, ale dla świetego spokoju należałoby do niego zajrzeć. Albo przypilnować, żeby napięcie zasilania po wyłączeniu spadało do pomijalnie małej wartości.
--
MDz
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 36 gości