Pokazywanie postów oznaczonych etykietą lcd. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą lcd. Pokaż wszystkie posty

niedziela, 24 czerwca 2012

Itm-400160 i LPC1768 - drugie starcie

I nadejszło ostatnie, już finałowe starcie z matrycą Itm-400160 i LPC1768, i w końcu się udało, na reszczcie wszystko bangla i to lepiej niż się spodziewałem, zwracam honor LPC. Ale ostrzegam przed zbytnim zaufaniu bibliotekom do obsługi Standard Peripherals od NXP zawiera ona bardzo dużo bugów. W moim przypadku procesor zawieszał się przy wchodzeniu w przerwanie i nie działał poprawnie. A na koniec parę dowodów na to iż działa ;)



Już niedługo relacja z budowy stacji pogodowej.

Mały smaczek na temat wyświetlacza.



AVE.

wtorek, 20 marca 2012

Itm-400160 i LPC1768 - raport

Po długiej walce z uruchomieniem matrycy itm-400160 na mikrokontrolerze LPC1768 odniosłem porażkę. Mimo iż procesor teoretycznie powinien wyciągać taktowanie rdzenia na poziomie 100MHz to jedyne co mi się udało uzyskać to tylko i wyłącznie "płynąca" w dół linia pikseli.

Doszedłem również do wniosków iż LPC1768 jest bardzo zabugowanym mikrokontrolerem albo w bibliotekach od NXP jest masa błędów. Jednak po własnych doświadczeniach skłaniam się do drugiej wersji, czyli błędów w bibliotekach.


AVE

piątek, 17 lutego 2012

Itm-400160 wprowadzenie

Prace nad uruchomieniem w pełni trwają. Na chwilę obecną udało mi się ją uruchomić bezpośrednio przy użyciu mikrokontrolerów stm32 pracujących z częstotliwością od 72MHz w górę oraz posiadających przynajmniej 20kB RAMu.

Ciekawostką o której należy pamiętać to kontrast działa na napięciu ujemnym, przynajmniej trzeba podać -18V . Mimo iż w dokumentacjach jest inaczej, to podanie innego napięcia może spowodować uszkodzenie mikrokontrolera. Wiem o tym na własnym przykładzie.

W obecnej chwili walczę aby uruchomić tą matrycę na lpc1768.


AVE

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.
WriteImage
Funkcja służy do wyświetlania grafik z programu MicroLCD.
WriteBmp
Wyś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.
WriteChar
Natomiast wyświetla dowolny znak.

Cała biblioteka składa się z 3310.c, 3310.h, 3310cfg.h, cg_rom.h, graph.c, graph.h, main.c, main.h.


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

ś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.