logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Wyswietlacz LCD na Atmega8 dziala, na Atmega2560 nie dziala

bigos1995-95 19 Sty 2016 21:51 1233 11
  • #1 15351140
    bigos1995-95
    Poziom 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:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 15351265
    BlueDraco
    Specjalista - Mikrokontrolery
    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";
  • #3 15351329
    Konto nie istnieje
    Konto nie istnieje  
  • #4 15351337
    bigos1995-95
    Poziom 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.
  • #5 15351435
    BlueDraco
    Specjalista - Mikrokontrolery
    Zmieniasz stan RS przy E=1 - błąd.
  • #6 15351473
    bigos1995-95
    Poziom 10  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Mówisz o tej linijce ? Już poprawiłem ale dalej jest ten sam problem
  • #7 15351519
    Konto nie istnieje
    Konto nie istnieje  
  • #8 15351541
    bigos1995-95
    Poziom 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
  • #9 15351588
    Konto nie istnieje
    Konto nie istnieje  
  • #10 15351599
    bigos1995-95
    Poziom 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



  • #11 15351675
    Konto nie istnieje
    Konto nie istnieje  
  • #12 15352753
    bigos1995-95
    Poziom 10  
    To nie wiem czemu to nie dziala
REKLAMA