Przygotowałem i opublikowałem bibliotekę do LCD ITM-400160.
Jest ona udostępniona na portalu elektroda i tam też będzie prowadzona dyskusja na jej temat.
AVE.
Techniczne wpisy i notatki z projektowania urządzeń elektronicznych oraz programowania mikrokontrolerów.
Pokazywanie postów oznaczonych etykietą avr. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą avr. Pokaż wszystkie posty
sobota, 10 sierpnia 2013
wtorek, 10 stycznia 2012
LCD cz.3 - Nokia 3510i LPC1768 i AVR
I przyszedł czas na opisanie wyświetlacza do Nokii 3510i. Na wstępie warto wspomnieć że jest on obsługiwane przez SPI przy czym ramka danych jest 9-bitowa, więc niestety wykorzystując do tego celu mikrokontrolery 8-bitowe należy obsługiwać go programowo. W porównaniu do lcd od 3310, jest on podpięty do układu sterującego tylko za pomocą czterech linii: RES, CS, DATA i CLK, więc odpadła linia D/C od wyboru Danych/Komendy. Funkcja ta jest realizowana natomiast jest za pomocą pierwszego bitu wysyłanej ramki w taki sam sposób jak dotychczas. Czyli 0 oznacza komendę a 1 dane.
Tworząc bibliotekę do tego lcd stworzyłem dokumentację w doxygen, pdf oraz html. Zachowane są wszystkie podobieństwa jak w przypadku biblioteki do 3310. Mianowicie jest plik konfiguracyjny. Dodatkowo zamieszczone i opisane zostały wszystkie dostępne komendy dla tego wyświetlacza.
Lcd jest obsługiwany przy użyciu SSP (Synchronous Serial Port), posiada on możliwość pracy jako SPI. Przy jego uruchamianiu należy pamiętać o wywołaniu funkcji
SSP_Cmd(SSPx, ENABLE)Z biblioteki od SSP.Otrzymane efekty są następujące:
sobota, 31 grudnia 2011
LCD cz.2 - Nokia 3310 LPC1768 i AVR
Przyszedł czas na opisanie moich dokonań z lcd od nokii 3310. Biblioteka dla AVR na której się wzorowałem umożliwia obsługę programowego jak i sprzętowego SPI. Na stronie autor również umieścił program MicroLCD, który umożliwia tworzenie własnych bitmap do wyświetlenia. Na bazie tej biblioteki można w łatwy sposób przepisać ją na inne platformy.
Moja biblioteka jest przeznaczona dla LPC1768, ale również można ją przekształcić, ta jak wspomnianą wyżej na każdą inną architekturę.Znalazł się w niej plik 3310cfg.h, który służy do konfiguracji całej biblioteki. Wybiera się między innymi czy ma być sprzętowe, czy programowe SPI, oraz które funkcje są nam potrzebne.
LCD 3310 korzysta z interfejsu SPI. W przypadku sprzętowego, wystarczą tak naprawdę dwie linie MOSI oraz SCK, pozostałymi najlepiej sterować programowo. Przy inicjalizacji portów, należy włączyć bezwzględnie wszystkie jako wyjście, nawet też od SPI.
W pliku main.c znajduje się przykład jak należy korzystać z biblioteki.
WriteImageFunkcja służy do wyświetlania grafik z programu MicroLCD.
WriteBmpWyświetla xbm z programu Gimp.
DispLcd(const char *napis, char x, char y)Funkcja wyświetla string w podanej lokalizacji. Czcionka jest ustawiona na rozmiar 5x7 pikseli, znajduje się ona w tablicy rom_gen. A x i y symbolizują współrzędne znaku w postaci komórki o rozmiarach 5x7 piksela, coś na zasadzie LCD 2x16. Znaki są kodowane zgodnie z kodem ASCII.
WriteCharNatomiast wyświetla dowolny znak.
AVE
sobota, 24 grudnia 2011
LCD cz. 1 - Wstęp
Przez pewien czas będzie się pojawiał na blogu cykl wpisów na temat wyświetlaczy, w głównym stopniu o graficznych.
W poszukiwaniu informacji na ten temat wypożyczyłem książki "Wyświetlacze graficzne i alfanumeryczne w systemach mikroprocesorowych" oraz "Graficzne wyświetlacze LCD w przykładach". Niestety nie znalazłem tam tylko garść przydatnych informacji. Autorzy robią przegląd powszechnie stosowanych wyświetlaczy graficznych oraz ich komendy, co jest plusem.
Wszystkie wyświetlacze posiadają protokół komunikacji zgodny z SPI. Jednak wszyscy autorzy nie widzieć czemu piszą programy z programową obsługą SPI, skoro mikrokontrolery posiadają przynajmniej zaimplementowany przynajmniej jeden taki protokół.
Kolejne wpisy na temat wyświetlaczy graficznych będą dotyczyły LCD od telefonów NK 3310 i 3510i, gdyż posiadam kilka sztuk do zabawy, oraz matrycy LCD ITM-400160, posiadam cztery sztuki i trzeba kiedyś je odpalić. Postaram się przedstawić porównanie programu ze sprzętową obsługą SPI oraz programową.
Przed zabawą z wyświetlaczami warto zajrzeć na stronę, gdzie są zamieszczone tzw pinout do dużej ilości LCD od telefonów komórkowych. Polecam również muliplatformową bibliotekę libd, obsługuje ona sporą ilość wyświetlaczy i stworzona jest dla AVR oraz ARM, oraz przykładami do książki.
AVE
W poszukiwaniu informacji na ten temat wypożyczyłem książki "Wyświetlacze graficzne i alfanumeryczne w systemach mikroprocesorowych" oraz "Graficzne wyświetlacze LCD w przykładach". Niestety nie znalazłem tam tylko garść przydatnych informacji. Autorzy robią przegląd powszechnie stosowanych wyświetlaczy graficznych oraz ich komendy, co jest plusem.
Wszystkie wyświetlacze posiadają protokół komunikacji zgodny z SPI. Jednak wszyscy autorzy nie widzieć czemu piszą programy z programową obsługą SPI, skoro mikrokontrolery posiadają przynajmniej zaimplementowany przynajmniej jeden taki protokół.
Kolejne wpisy na temat wyświetlaczy graficznych będą dotyczyły LCD od telefonów NK 3310 i 3510i, gdyż posiadam kilka sztuk do zabawy, oraz matrycy LCD ITM-400160, posiadam cztery sztuki i trzeba kiedyś je odpalić. Postaram się przedstawić porównanie programu ze sprzętową obsługą SPI oraz programową.
Przed zabawą z wyświetlaczami warto zajrzeć na stronę, gdzie są zamieszczone tzw pinout do dużej ilości LCD od telefonów komórkowych. Polecam również muliplatformową bibliotekę libd, obsługuje ona sporą ilość wyświetlaczy i stworzona jest dla AVR oraz ARM, oraz przykładami do książki.
AVE
środa, 21 grudnia 2011
LCD 2x16 i LPC1768
Próbowałem przeportować swoją wspaniałą bibliotekę z AVRów na LPC1768, jednak mi się to nie udało. Napisałem własną od podstaw, posiada ona jednak pewne braki w porównaniu do tej z AVrów. Sterowanie LCD jest za pomocą na sztywno ustawionych czasów a nie przez odpytywanie wyświetlacza jak to miało miejsce. Jednak jak się zbiorę w sobie to poprawię ten błąd. Biblioteka składa się z dwóch plików lcd2x16.c oraz lcd2x16.h. Jedynie funkcja delay znajduje się w pliku głównym programu i w zasadzie też wymaga poprawy. Odmierza czas w ms a oparta jest o timer SysTick. Jej definicja wygląda tak:
void delay(uint32_t interval)
{
uint32_t start = SysTickCnt;
while (SysTickCnt - start < interval)
;
}Ustawienie timera wygląda tak:SysTick_Config(SystemCoreClock / 1000);Natomiast przerwanie do SysTick:void SysTick_Handler(void)
{
SysTickCnt++;
}LCD jest podpięty do LPC1768 w następujący sposób:P1.24 - D4
P1.25 - D5
P1.26 - D6
P1.27 - D7
P1.28 - RS
P1.29 - RW
P1.31 - EN
Na chwilę obecną biblioteka posiada następujące funkcje:
void LcdPinValue(uint32_t pin, uint8_t value)Przy użyciu tej funkcji ustawia się wybraną wartość na konkretny jeden pin wyświetlacza a następnie wartość ta jest zabezpieczana za pomocą maski, więc nie można zmienić wartości tego pinu bez zdjęcia maski. Powstała ona z myślą o ustawianiu wartości dla pinów RS, RW oraz EN. void LcdWriteCmd(uint8_t command)Fynkcja odpowiadająca za wysyłanie komend na wyświetlacz, dodatkowo w bibliotece znajdują się makra z dostępnymi komendami dla wyświetlacza. void LcdInit(void)Standardowa funkcja inicjująca wyświetlacz. Na jej końcu znajdują się funkcje wysyłające komendy takie jak wyłączenie kursora, przesuwanie tekstu itp. void LcdPrint(const char *s)Funkcja odpowiadająca za wyświetlenie stringu na LCD. void LcdPrintChar(char ch)Ta wyświetla tylko pojedynczy znak. void LcdGoToXY(uint8_t x, uint8_t y)Funkcja która przesuwa kursor do dowolnego miejsca na wyświetlaczu. Wiersz pierwszy to y=0; void LcdPrintXY(uint8_t x, uint8_t y, char *s)Funkcja wyświetla string w wybranych współrzędnych. Zasady obowiązują tak jak wyżej.Gdyby ktoś miał problem ze znalezieniem poprawnych plików startowych to je zamieszczam: LPC17xx.ld, Makefile, startup_LPC17xx.c, startup_LPC17xx.d.
Na koniec załączam jeszcze bibliotekę dla AVRów lcd2x16.c i lcd2x16.h.
Subskrybuj:
Posty (Atom)




