Skocz do zawartości

Popularny LCD HD44780 na ARM LPC1114


Tomy89

Pomocna odpowiedź

Witam,

Niedawno przesiadłem się z mikrokontrolerów AVR na ARM. Kupiłem popularną płytkę od Kamami z programatorem i LPC1114. Nauczyłem się sterować diodami i joystick-iem, jednak nie mogę obsłużyć zwykłego wyświetlacza LCD. Problem jest w dobraniu odpowiedniej biblioteki. Znalazłem inne, do innych procesorów, (nawet z serii LPC - ale innych), ale do mojego nie. Ponadto, znalazłem gotowe programy na LPC1114 sterujące wyświetlaczem od nokii 3310. Jednak mi zależy bardzo na tym, wyżej wspomnianym. Jeżeli ktoś wskazałby mi miejsce, gdzie taką bibliotekę do znajdę, byłbym bardzo wdzięczny. Ewentualnie, może ktoś poradzi jak zmodyfikować posiadaną przeze mnie bibliotekę pod mój procesor?

Pozdrawiam

Link do komentarza
Share on other sites

Witam ponownie,

Dzięki wielkie simoon87 za wstawkę.

Jednak męczyłem się cały dzień nad zaimplementowaniem tych bibliotek do projektu (nie mam konkretnego - robię pierwszy w celach rozpoznawczych), ale nie mogę. Pracuję w Keil uVision i podczas dołączenia tych bibliotek do projektu pojawiają się błędy. Próbowałem również w LPCXpresso jednak z podobnym skutkiem. Nie twierdzę że biblioteki są złe, jednak jeżeli można prosiłbym o przykładowy projekt zawierający te biblioteki pod LPC1114. Może używam złego kompilatora?

Pozdrawiam

Link do komentarza
Share on other sites

Jakie to są błędy? Dołączyłeś wszytki pliki czy tylko lcd.c i lcd.h? Jeśli tylko te dwa to nie ma prawa działać gdyż w plikach sysfun.c , sysyfun.h znajdują się funkcje z których korzysta biblioteka wyświetlacza.

W załączniku projekt z LPCXpresso wystarczy zaimportować.

Hitachi_LCD_2x16.zip

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Po zaimportowaniu pliku "CMSISv1p30_LPC11xx.zip" do LPCXpresso i Twojego projektu przeszedłem do kompilacji. Bez żadnych modyfikacji. To wyświetla się w konsoli:

**** Build of configuration Debug for project Hitachi_LCD_2x16 ****

make all 
Building file: ../src/lcd.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"src/lcd.d" -MT"src/lcd.d" -o"src/lcd.o" "../src/lcd.c"
../src/lcd.c:7:21: fatal error: LPC11xx.h: No such file or directory
compilation terminated.
make: *** [src/lcd.o] Error 1

Z PLCXpresso korzystam od wczoraj i może nie umiem czegoś dodać? Zaimportowałem bibliotekę CMSIS oraz projekt. coś potrzeba jeszcze?

Zamieszczę jeszcze screena z programu uVision wraz z dręczącym mnie błędem:

Link do komentarza
Share on other sites

Witam,

W dalszym ciągu nie rozwiązałem problemu. Pojawił się również kolejny, ale myślę że osobnego tematu nie warto zakładać. Podczas gdy zaprogramuję LPC1114 w zestawie ZL32ARM, przykładowy program z diodami działa, jednak po odłączeniu zasialania, układ nie reaguje. Żeby program ponownie ruszył muszę od nowa programować mikrokontroler. Znalazłem w internecie, że jest to wina ustawień procesora. Powinienem gdzieś wpisać "STARTUP_FROM_RESET". Ale nie mam pojęcia gdzie i czy to dobra definicja.

Proszę o pomoc.

Link do komentarza
Share on other sites

../src/lcd.c:7:21: fatal error: LPC11xx.h: No such file or directory

Ewidentnie widać ze twoje LPC Xpresso nie widzi pliku LPC11xx.h. Sprawdź jak zacząć z LPC Xpresso w jednym z artykułów na Forbocie, może coś Ci się źle zaimportowało. Jedyne co na szybko zauważyłem to to że używasz CMSISv1p30_LPC11xx a ja używam CMSISv2p00_LPC11xx

Link do komentarza
Share on other sites

Wszystko robiłem dokładnie według tego poradnika. Okazało się że miałem zbyt nową wersję LPC Xpresso (?). Zainstalowałem wersję 3.6 i wszystko działa. Sugestia odnośnie biblioteki CMSIS również pomogła. Dzięki wielkie simoon87.

Pozostaje teraz pytanie jak wgrać program, aby można było z niego korzystać również po restarcie procesora. Czytałem dużo na ten temat. Dowiedziałem się że procesor wchodzi w nieskończoną pętlę i trzeba coś zmienić w programie żeby wracał do głównego programu, po ponownym podłączeniu zasilania. Tylko gdzie i co zmienić?

Link do komentarza
Share on other sites

Dziwne, bo ja akurat używam LPC Xpresso 4.2.6 [build 292], ale ważne ze już Działa 😉 . Odnośnie programowania, nigdy nic nie musiałem zmieniać do ładowania wsadu używam programu FlashMagic 5.90.2438 i nawet po odłączeniu zasilania i ponownym podłączeniu. Opisywana przez Ciebie sytuacja z tego co wiem występuje w środowisku Rowley CrossWorks.

Link do komentarza
Share on other sites

Po przyjrzeniu się "temu dziwnemu zjawisku" stwierdzam, że program działa przez chwilę. Czyli tak:

-wgrywam program, który od razu się uruchamia i bez zakłóceń

-odłączam zasilanie (zasilanie przez orginalnie dołączony programator USB->UART)

-podłączam z powrotem

-program uruchamia się i działa przez 6 sekund, po czym gaśnie (sprawdzone na programie z diodami i przerwaniami, które można pobrać ze strony BTC)

Co to może być?

Ponadto, nie wiem jak wyświetlić wartość int na wyświetlaczu, zapisaną np.

int a=150;

Przepraszam za głupie pytania, ale dopiero uczę się programować w C pod jakikolwiek sprzęt. Wcześniej był Bascom i AVR. Trochę ciężko mi zmienić zarówno język jak i platformę. Może mi ktoś doradzić której funkcji muszę użyć z powyższej biblioteki?

Pozdrawiam

Link do komentarza
Share on other sites

Aby wyświetlić liczbę całkowita użyj funkcji LCDPutDecByte(a);. Jakbyś chciał wyświetlacz zmienna typy float w mojej bibliotece jest funkcja LCDPutFloat(...);

lub jeśli wolisz użyj funkcji itoa konwertującej int to ascii a następnie użyj LCDPutString(...) 😉

Link do komentarza
Share on other sites

Ok, dzięki za pomoc. Nie zauważyłem że muszę zmodyfikować bibliotekę dla liczb większych od 1000 🙂 Dlatego wyskakiwały błędy.

void LCDPutDecByte(uint8_t value)
{
if (value >= 10000) LCDPutChar((value / 100000) + '0');

if (value >= 1000) LCDPutChar((value % 10000) /1000 + '0');

if (value >= 100) LCDPutChar((value % 1000) / 100 + '0');

if (value >= 10)  LCDPutChar(((value % 100) / 10) + '0');


LCDPutChar(value % 10 + '0');

Co do działania programu po restarcie procesora, nie znalazłem jeszcze metody na to 🙁

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.