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

sobota, 10 sierpnia 2013

Wyświetlacz LCD ITM-400160 biblioteka C (ARM)

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.

czwartek, 29 listopada 2012

EmbSysRegView - czyli pomoc w debugowaniu pod eclipse

Ostatnio w poszukiwaniu ułatwienia w procesie debugowania programów na mikroklocki pod eclipse natknąłem się na bardzo ciekawy projekt a mianowicie EmbSysRegView. 

EmbSysRegView jest wtyczką pod eclipse przestawiającą mapę pamięci procesora w postaci bardziej przejrzystej dla zwykłego użytkownika. Jest ona bardzo prosta w obsłudze i użytkowaniu. Więcej informacji o niej można znaleźć na stronie domowej projektu bądź na sourceforge.net. 

Dane na temat rejestrów przetrzymywane są w odpowiednio przygotowanym pliku xml którego edycja jest bardzo prosta.

Obecnie pracuję nad zrobieniem pełnego opisu do tej wtyczki dla LPC1768. Obecnie nie jest jeszcze ukończony ale najnowszą wersję znajdziecie zawsze pod tym linkiem. Informację o ukończeniu opisu zamieszczę na pewno na blogu.

Już niebawem powinien pojawić się kolejny opis postępu prac z budowy stacji pogodowej ;) 


AVE.

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.

poniedziałek, 18 czerwca 2012

LPC1768 - DS1820, SD i FatFS

Teraz kolejna przydatna garść informacji.

Łatwa w użyciu biblioteka do obsługi popularnego DS18S20. Bazuje ona na znalezionym w sieci przykładzie, jednak została dość mocno zmodyfikowana, w zasadzie została sam szkielet i algorytmy. Została dołożona funkcja inicjująca DS wraz z jego wykryciem, oraz funkcja zwracająca odczytaną wartość w postaci bitowej. ds18b20.c i ds18b20.h.

Długo też szukałem jak odpalić odczyt SD na mikroklocku, z pomocą przyszła biblioteka FatFs, oraz niezbędne plik z konfiguracją i obsługą SD. Obsługa działa na SSP0. SD.c, SD.h, SDHal.c, SDHal.h

Kilka istotnych uwag:
- w przerwaniach RTC warto ustawiać same flagi a nie wywoływać funkcje (jak się może okazać w praktyce, warto ustawić ręcznie rejestry, a wywołanie funkcji też się uda ;))
- przy użytkowani FatFs warto zwracać uwagę na typy bo przez to lubi się wysypywać funkcja.

LPC1768 mimo iż jest nie do końca "juzerfrendli" to po dobrze przygotowanej konfiguracji śmiga jak marzenie ;)


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

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