Obsługa graficznego wyświetlacza z telefonu Nokia 3310 za pomocą mikrokontrolerów STM32
List. 5. Sposób wyzerowania pamięci obrazu
for(i=0;i<504;i++) WriteData(0x00);//zerowanie pamięci obrazu
Takie postępowanie daje zawsze dobry skutek w przypadku sterowników PCD8544, niestety część modułów wyświetlaczy jest wyposażonych w sterowniki innego (niestety nieznanego) typu, w przypadku których tak przeprowadzone zerowanie nie zawsze dawało poprawny skutek (fot. 9).
Fot. 9. Moduły wyświetlaczy wyposażone w sterowniki inne niż PCD8544 nie dają się prawidłowo zainicjalizować – na zdjęciu widać niepoprawne wyzerowanie zawartości pamięci obrazu
Fot. 10. Moduły LCD wyposażone w sterowniki inne niż PCD8544 nieprawidłowo wyświetlają bitmapy wprowadzone do pamięci obrazu w sposób przewidziany dla PCD8544
Fot. 11. Przykład kłopotów z wyświetlaniem znaków alfanumerycznych na wyświetlaczu LCD z Nokii 3310 sterowanym przez sterownik innego typu niż PCD8544
Fot. 12. Po zastosowaniu procedury inicjalizacyjnej pokazanej na list. 6 sterownik wyświetlacza pracuje poprawnie
Lekarstwem na przedstawione kłopoty jest zmodyfikowanie sposobu inicjalizacji sterownika po włączeniu zasilania – konieczne okazało się użycie komendy o kodzie 0x05.Ten kod w PCD8544 ustawia korekcję temperaturową, a w opisywanym sterowniku pozwala na prawidłowe wyświetlanie informacji. Oprócz kodu 0x05 trzeba w tym przypadku wysłac dodatkowy kod 0x06 ustawiający korekcję temperaturową. Na list. 6 pokazano zalecany sposób inicjalizowania modułów wyświetlaczy z telefonów Nokia 3310, dający gwarancję prawidłowego działania zastosowanych w nich sterowników. Skutek zastosowania tej procedury pokazano na fot. 12.
List. 6. Zalecana procedura inicjalizacji sterowników stosowanych w wyświetlaczach z Nokii 3310
//inicjalizacja sterownika void InitDisNok(void) { int i; WriteCmd(0x21);//komendy rozszerzone WriteCmd(0x05);//komenda „przelaczajaca” sterownik w tryb pracy zgodny PCD8544 WriteCmd(0xc8);//ustawienie Vop WriteCmd(0x06);//korekcja temperatury dla PCD8544 WriteCmd(0x14);//wspólczynnik multipleksowania WriteCmd(0x20);//komendy standardowe - adresowanie poziome WriteCmd(0x01); WriteCmd(0x0c);//tryb wyświetlania Standard Mode WriteCmd(0x40);//zerowanie licznika wierszy WriteCmd(0x80);//zerowanie licznika kolumn ClrDisp();//zerowanie pamięci //for(i=0;i<612;i++)//612 //WriteData(0x00);//zerowanie pamieci RAM wyswietlacza }