Witam
Jestem studentem 2 roku informatyki i wiem co nieco o programowaniu. Jakiś czas temu zacząłem zabawę z mikrokontrolerami. Obecnie próbuję rozgryźć obsługę wyświetlacza LCD pod kontrolerem atmega8. Program piszę w C. Miałem wiele problemów ze zmuszeniem tego cholerstwa do wyświetlenia czegokolwiek. Porad szukałem między innymi tu na forum. W końcu dałem za wygraną, podejrzewałem już że wyświetlacz jest uszkodzony. Spróbowałem jeszcze Bascoma i pod nim o dziwo zadziałało za pierwszym razem. Wrzuciłem więc skompilowany programik wyświetlający "hello world" do AVR Simulator IDE i przyglądając się jakie wartości trafiają do wyświetlacza udało mi się zrozumieć co było nie tak w poprzednim programie. Wersję ostateczną zamieszczam w załączniku.
Nadal mam jednak problem. Wszystko wydaje się działać prawidłowo, potrafię wyświetlać pojedyncze znaki, jednak funkcja do wyświetlania łańcuchów nie działa prawidłowo. A konkretnie - zasypuje wyświetlacz krzakami. Zacząłem więc kombinować. Kiedy zmodyfikowałem ją w ten sposób:
Prawidłowo wyświetla pierwszy znak. Dopisałem więc inkrementację wskaźnika:
Nadal wszystko w porządku. Jednak kiedy próbuję wyświetlić kolejny znak:
Zaczyna dziać się magia - oba znaki - i pierwszy i drugi zamieniają się w czarne kwadraty (w symulatorze wiedzę że zamiast prawidłowych kodów ASCII do wyświetlacza trafiają dwie wartości FF).
Czy ktoś ma jakiś pomysł dlaczego się tak dzieje? Każda odpowiedź będzie mile widziana.
Jestem studentem 2 roku informatyki i wiem co nieco o programowaniu. Jakiś czas temu zacząłem zabawę z mikrokontrolerami. Obecnie próbuję rozgryźć obsługę wyświetlacza LCD pod kontrolerem atmega8. Program piszę w C. Miałem wiele problemów ze zmuszeniem tego cholerstwa do wyświetlenia czegokolwiek. Porad szukałem między innymi tu na forum. W końcu dałem za wygraną, podejrzewałem już że wyświetlacz jest uszkodzony. Spróbowałem jeszcze Bascoma i pod nim o dziwo zadziałało za pierwszym razem. Wrzuciłem więc skompilowany programik wyświetlający "hello world" do AVR Simulator IDE i przyglądając się jakie wartości trafiają do wyświetlacza udało mi się zrozumieć co było nie tak w poprzednim programie. Wersję ostateczną zamieszczam w załączniku.
Nadal mam jednak problem. Wszystko wydaje się działać prawidłowo, potrafię wyświetlać pojedyncze znaki, jednak funkcja do wyświetlania łańcuchów nie działa prawidłowo. A konkretnie - zasypuje wyświetlacz krzakami. Zacząłem więc kombinować. Kiedy zmodyfikowałem ją w ten sposób:
void write_text(char *s) { write_char(*s); }Prawidłowo wyświetla pierwszy znak. Dopisałem więc inkrementację wskaźnika:
void write_text(char *s) { write_char(*s); s++; }Nadal wszystko w porządku. Jednak kiedy próbuję wyświetlić kolejny znak:
void write_text(char *s) { write_char(*s); s++; write_char(*s); }Zaczyna dziać się magia - oba znaki - i pierwszy i drugi zamieniają się w czarne kwadraty (w symulatorze wiedzę że zamiast prawidłowych kodów ASCII do wyświetlacza trafiają dwie wartości FF).
Czy ktoś ma jakiś pomysł dlaczego się tak dzieje? Każda odpowiedź będzie mile widziana.