Robię mini komputerek
idea działania jest prosta:
- człowiek wpisuje polecenie w terminalu i wciska enter
- program rozpoznaje wpisany tekst i wywołuje odpowiednią funkcję
coś na kształt starego dobrego DOSa
Cały kod programu jest długi i znajduje się na tej stronie
http://leon-instruments.blogspot.com/2009/01/test.html
Problem pojawił się, kiedy przeszedłem z ATmegi8 na 16, bowiem funkcja ps2_type czasami działa, a czasami wariuje z niewiadomego powodu. Funkcja ma odczytywać znaki wpisane z klawiatury PS/2 podłączonej pod piny B1 i B2 (podciągnięte do zasilania przez 4,7k). Wszystko działa, aż tu nagle na terminalu pojawiają się jakieś bzdury i program skacze do przerwania BADISR, po czym żąda wpisania liczby i się resetuje, bez podania kodu resetu w MCUCSR (=0).
Czasami zdarza się też, że program pokazuje na ekranie jakiś znaczek krzaczek, inny niż znak alfanumeryczny. Z kodu ps2_read wynika, że ta funkcja zwraca wyłącznie znaku alfanumeryczne, enter, escape albo 0 jeżeli człowiek wciśnie klawisz nieposiadający odpowiednika ASCII. Skąd więc biorą się znaczki-krzaczki?
Od czasu porzucenia ATmegi8 nic nie grzebałem w funkcjach od PS2, a działały poprawnie. Funkcja ps2_hex (odczytuje scankody i wyświetla na terminau) działa całkowicie poprawnie. Podczas prób zmieniłem kwarc 16MHz na wewnętrzny oscylator RC 8MHz i problem z ps2_type całkowicie zniknął. Ale ze wszystkimi moimi kwarcami 16MHz ciągle jest ten problem i tylko w tej jednej funkcji. Dziwne zachowanie występuje mniej więcej raz na 30 znaków.
W ps2_read jest dość długi switch(), który przerabia scankody z klawiatury na ASCII, ale nawet po zmniejszeniu go do kilku liter problem ciągle jest.
I o co tu chodzi?
EDIT:
Zauważyłem, że program na ATmegę16 zajmuje 7072 bajty, a dokładnie to samo na ATmege8 zajmuje 6452 bajty. Czemu?
- człowiek wpisuje polecenie w terminalu i wciska enter
- program rozpoznaje wpisany tekst i wywołuje odpowiednią funkcję
coś na kształt starego dobrego DOSa
Cały kod programu jest długi i znajduje się na tej stronie
http://leon-instruments.blogspot.com/2009/01/test.html
Problem pojawił się, kiedy przeszedłem z ATmegi8 na 16, bowiem funkcja ps2_type czasami działa, a czasami wariuje z niewiadomego powodu. Funkcja ma odczytywać znaki wpisane z klawiatury PS/2 podłączonej pod piny B1 i B2 (podciągnięte do zasilania przez 4,7k). Wszystko działa, aż tu nagle na terminalu pojawiają się jakieś bzdury i program skacze do przerwania BADISR, po czym żąda wpisania liczby i się resetuje, bez podania kodu resetu w MCUCSR (=0).
Czasami zdarza się też, że program pokazuje na ekranie jakiś znaczek krzaczek, inny niż znak alfanumeryczny. Z kodu ps2_read wynika, że ta funkcja zwraca wyłącznie znaku alfanumeryczne, enter, escape albo 0 jeżeli człowiek wciśnie klawisz nieposiadający odpowiednika ASCII. Skąd więc biorą się znaczki-krzaczki?
Od czasu porzucenia ATmegi8 nic nie grzebałem w funkcjach od PS2, a działały poprawnie. Funkcja ps2_hex (odczytuje scankody i wyświetla na terminau) działa całkowicie poprawnie. Podczas prób zmieniłem kwarc 16MHz na wewnętrzny oscylator RC 8MHz i problem z ps2_type całkowicie zniknął. Ale ze wszystkimi moimi kwarcami 16MHz ciągle jest ten problem i tylko w tej jednej funkcji. Dziwne zachowanie występuje mniej więcej raz na 30 znaków.
W ps2_read jest dość długi switch(), który przerabia scankody z klawiatury na ASCII, ale nawet po zmniejszeniu go do kilku liter problem ciągle jest.
I o co tu chodzi?
EDIT:
Zauważyłem, że program na ATmegę16 zajmuje 7072 bajty, a dokładnie to samo na ATmege8 zajmuje 6452 bajty. Czemu?