Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Wyswietlacz LCD na Atmega8 dziala, na Atmega2560 nie dziala

19 Jan 2016 21:51 1104 11
  • Level 10  
    Witam, mam dziwny problem.
    Wyswietlacz HD7780 na atmega8 dziala mi bez problemu a na Atmega2560(dokladnie arduino Mega2560), jest problem z wyświetlaniem większej ilości znaków.

    Mianowicie:

    char napis[4] = "TEST";

    wyswietl_napis(napis, 4);


    Wyswietli mi prawidlowo napis "TEST", ale gdy dodam jeden znak wiecej

    char napis[5] = "TESTE";

    wyswietl_napis(napis, 5);


    Dostane całe 5 kratek zamalowanych.

    Wygląda na to że nie mogę stworzyć tablicy większej jak 4 znaki, czemu ?

    Ten błąd występuje tylko na atmega2560, na atmega8 dziala bez problemu

    kod:
    Code: c
    Log in, to see the code
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • MCUs specialist
    Fakt, że napis wyświetla się prawidłowo, graniczy z cudem. Nie powinien wyświetlać się prawidłowo, bo procedura wyświetlania nie wie, gdzie jest jego koniec i wyświetla śmieci, które są dalej, o ile przypadkowo nie znajdzie się tam bajt o wartości 0.

    Nie podawaj jawnie rozmiaru tablicy przy definiowaniu napisów:

    char napis[] = "TEST";
  • User removed account  
  • Level 10  
    Masz racje co do ciągu znaków, że napis "TEST" składa się tak naprawdę z 5 znaków TEST/0

    Ale chyba nie o to tutaj chodzi.

    I tak podaje długość napisu jaki chce wyświetlić wyswietl_napis(char *napis, uint8_t dlugosc)

    A co ciekawe jak niejawnie zdefiniuje tablice:

    char napis[] = "TEST";

    wyswietl_napis(napis, 4);


    dostaje całe zamalowane pola.

    Jak zmienie na:

    char napis[4] = "TEST";

    wyswietl_napis(napis, 4);


    wtedy jest ok, dostaje napis.
  • MCUs specialist
    Zmieniasz stan RS przy E=1 - błąd.
  • Level 10  
    Code: c
    Log in, to see the code


    Mówisz o tej linijce ? Już poprawiłem ale dalej jest ten sam problem
  • User removed account  
  • Level 10  
    Kabelki dobrze sprawdzałem kilka razy, jakby były źle to by w ogóle nie działało. Tu jakby było coś z pamięcią, dziwne jakby nie można było załadować więcej jak 4 bajty do RAM :D Może jakoś do innej sekcji tą tablice włożyć ?

    Dodano po 9 [minuty]:

    O ciekawa sprawa, jak zrobię tak:

    char napis[7];
    napis[0] = 'A';
    napis[1] = 'B';
    napis[2] = 'C';
    napis[3] = 'D';
    napis[4] = 'E';
    napis[5] = 'F';

    wyswietl_napis(napis, 6);

    to już działa dobrze, ale czemu nie działa jak podam cały ciąg znaków
  • User removed account  
  • Level 10  
    A może Atmel Studio 7 jest zepsute i źle konwertuje c stringi ??

    Zapomniałem dodać, że jak wgrywałem ( i kompilowałem) program do Atmega8 to korzystałem z Eclipse

    A jak wgrywałem (i kompilowałem) program do Atmega2560 to korzystałem z Atmel Studio 7


    Link
  • User removed account  
  • Level 10  
    To nie wiem czemu to nie dziala