Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C] - Atmega8 i wyświetlacz z siemensa C75 (ALPS)

sk1977 14 Wrz 2014 15:10 1389 7
  • #1 14 Wrz 2014 15:10
    sk1977
    Spec od komputerów

    Witam,
    od kilku dni walczę próbując skompilować pobrane pliki źródłowe (w załączeniu) niestety bez pozytywnych rezultatów...

    Z Atmel studio oraz C nie miałem wcześniej do czynienia poza prostymi programikami które kompilowały się bez problemu i działały - typu miganie diodą itp.

    Wcześniej programowałem w Bascomie, ale wpadły mi w ręce wyświetlacze od siemensa C75 i postanowiłem spróbować sił w C.

    Chciałbym skompilować źródła ze stron:
    http://www.juras-projects.org/eng/lcd.php?id=c75
    i
    http://cxem.net/mc/mc221.php

    W Atmel Studio tworzę nowy projekt, wybieram GCC C Executable Project, atmegę 8 i mam "pusty" projekt.

    W pierwszym przypadku - wyświetlacz ALPS - wyrzucam zawartość pliku i kopiuję zawartość pliku main.c - wywala błąd: brak intrinsics.h.
    Znalazłem tylko zawierające znowu X11...
    Skąd tą bibliotekę wziąć?

    W drugim przypadku tworzę podobnie nowy projekt i próbuję załączyć bibliotekę LPH91572.h przez #include.
    Oba pliki dołączam też przez Solution Explorer, jednak znów masa błędów...


    Jak można "wsadzić" te źródła do Atmel Studio?

    0 7
  • #2 14 Wrz 2014 15:49
    tmf
    Moderator Mikrokontrolery Projektowanie

    Powiedzmy sobie, że ten kod nie jest najlepszej jakości. Ale po prostu dołącz plik do projektu, wywal tego includa #include <intrinsics.h>, popraw #include <iom16.h> na #include <avr/io.h> i na bieżąco rozwiąż problemy z kompilacją. Krótki kurs Atmel Studio:
    http://mikrokontrolery.blogspot.com/2011/04/atmel-studio-spis-tresci.html

    0
  • #3 14 Wrz 2014 17:18
    sk1977
    Spec od komputerów

    Dzięki za wskazówki - trochę to ruszyło, ale nie do końca...

    Pierwsza sprawa to problem z delay_cycles(16+4) - zamieniłem na komentarze, ale nie wiem co wstawić - podejrzewam, że _delay_ms(100) czyli 0,1 sekundy (w oryginalnym pliku było 16+4 przy 16.000.000 Hz) - dobrze kombinuję?

    Druga sprawa to __flash - po usunięciu kompilacja przeszła, ale zakomentowałem funkcję:

    Kod: C
    Zaloguj się, aby zobaczyć kod


    Moje doświadczenia w C są na razie znikome, proszę więc o wskazówkę jak poprawić tą funkcje aby działała?

    Poniżej obecna wersja przechodząca kompilację:

    Kod: C
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #4 14 Wrz 2014 18:51
    tmf
    Moderator Mikrokontrolery Projektowanie

    Tak, to dziwne delay po prostu zastąp przez _delay_ms, __flash nie możesz usunąć, ale jeśli istotnie masz AS 6.0 to go uaktualnij do najnowszej wersji 6.2, a tam siedzi avr-gcc 4.8.1, który __flash rozpoznaje.

    0
  • #5 14 Wrz 2014 21:59
    sk1977
    Spec od komputerów

    Zaktualizowałem do 6.2, teraz mam błędy (przy wszystkich __flash):
    Error 2 variable 'font6x8' must be const in order to be put into read-only section by means of '__flash'

    Co jeszcze można z tym zrobić?

    P.S. Po aktualizacji drugi przykład skompilował się bez problemu i bez zmian.

    0
  • Pomocny post
    #6 14 Wrz 2014 22:04
    tmf
    Moderator Mikrokontrolery Projektowanie

    Trzeba zrobić to co sugeruje kompilator - tam gdzie jest __flash dać const, czyli np. napisać const uint8_t __flash font6x8. const jest w nowym kompilatorze wymagane dla stałych umieszczonych w pamięci FLASH mikrokontrolera.

    0
  • #7 14 Wrz 2014 23:43
    sk1977
    Spec od komputerów

    Dopisałem samo const i zmieniłem _delay i poszło :)
    Ciekawe czy jeszcze wyświetlacz na tym odpali... ale to już inna historia.

    Jakby ktoś potrzebował to zamieszczam kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jeszcze raz dzięki!

    0
  • #8 18 Wrz 2014 14:15
    sk1977
    Spec od komputerów

    Znalazłem tutorial: http://www.atmel.com/webdoc/AVRLibcReferenceManual/porting_1iar_porting_flash.html

    I wg niego zmieniłem :
    __flash int colorbars[8]={white,yellow,cyan,green,purple,red,blue,black}; na const int colorbars[8] __attribute__((progmem)) = {white,yellow,cyan,green,purple,red,blue,black};

    oraz __flash char font6x8[576]= na const char font6x8[576] __attribute__((progmem)) =

    Program był dla Atmegi16, a mam Atmegę8, więc zmieniłem też

    #define RST PB3
    #define RS PB2
    #define CS PB4

    na:
    #define RST PB0 (sprawdzałem też na PB4, bez zmian)
    #define RS PB1
    #define CS PB2

    Podłączenie jak wyżej plus:
    CS - PB2 (SS)
    CLK - PB5 (SCK)
    DATA - PB3 (MOSI)

    Wyświetlacz na po uruchomieniu po chwili zmienia kolor na ciemniejszy i jeszcze ciemniejszy, po odłączeniu którejkolwiek nóżki nie zmienia koloru.

    Poza zmianą koloru nic nie wyświetla.

    Gdzie jeszcze może być problem?
    Atmegę programuję zewnętrznym programatorem - TL866CS w podstawce - tylko flash wsadem .hex.

    Czy udało się komuś zmusić ten wyświetlacz do pracy (mam wersję bursztynową - ALPS)

    Poniżej kod - funkcja zakomentowana powodowała "warningi", więc do testów została wyłączona.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0