• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z programowaniem mikrokontrolera Atmega1284
#1
Witam! Spotkałem się z dziwnym zachowaniem mikrokontrolera Atmega1284 (lub kompilatora). mianowicie uruchomiłem pewny wyświetlacz LCD (24bit kolor, 160x240) tego typu obrazek zajmuje 115200 bajtów. W ramach testu chciałem zapisać w pamięci mikrokontrolera obrazek i wyświetlić na tym ekranie. Kompilator nie pozwolił mi stworzyć jednej tak dużej tablicy. Zmieściłem w czterech. Efekt -  jak widać zdj, w pewnym momencie grafika się psuje. Zauważyłem że moment kiedy pojawia się problem to dokładnie 65536 (czyli gdy bit 16 adresu pamięci zmienia się na 1).
   
I może ktoś pomyśleć po co mi system wyświetlania jednej grafiki. Oczywiście nie o to chodzi - posiadam parę projektów z tym mikrokontrolerem, a ten który teraz tworze niebezpiecznie zbliża się do tej granicy 65KB. Poza tym czysta ciekawość, nie podoba mi się, że to nie działa tak jak chce Tongue 

Kod: (jest tu tylko część odpowiadająca za wysyłanie faktycznego obrazu bo kod jest długi i ciężko się od razu połapać)
Kod:
  for (byte j = 0; j < 60; j++) // linie od 1 do 60
  {
    // 1 HORIZONTAL LINE --------------
    PORTB = 0b000001; // thsw
    PORTB = 0b000101;
    for (byte i = 0; i < 99; i++) // thbp-thsw
    {
      PORTB = 0b000011;
      PORTB = 0b000111;
    }
    for (int i = 0; i < 480; i++) // thd
    {
      PORTB = 0b000011;
      PORTC = pgm_read_byte(&img0[i + (j * 480)]);
      PORTB = 0b000111;
    }

    for (byte i = 0; i < 37; i++) // thfp
    {
      PORTB = 0b000011;
      PORTB = 0b000111;
    }
    // 1 HORIZONTAL LINE END ----------
  }
  for (byte j = 0; j < 60; j++) // linie od 61 do 120
  {
    // 1 HORIZONTAL LINE --------------
    PORTB = 0b000001; // thsw
    PORTB = 0b000101;
    for (byte i = 0; i < 99; i++) // thbp-thsw
    {
      PORTB = 0b000011;
      PORTB = 0b000111;
    }
    for (int i = 0; i < 480; i++) // thd
    {
      PORTB = 0b000011;
      PORTC = pgm_read_byte(&img1[i + (j * 480)]);
      PORTB = 0b000111;
    }

    for (byte i = 0; i < 37; i++) // thfp
    {
      PORTB = 0b000011;
      PORTB = 0b000111;
    }
    // 1 HORIZONTAL LINE END ----------
  }
  for (byte j = 0; j < 60; j++) // linie od 121 do 180
  {
    // 1 HORIZONTAL LINE --------------
    PORTB = 0b000001; // thsw
    PORTB = 0b000101;
    for (byte i = 0; i < 99; i++) // thbp-thsw
    {
      PORTB = 0b000011;
      PORTB = 0b000111;
    }
    for (int i = 0; i < 480; i++) // thd
    {
      PORTB = 0b000011;
      PORTC = pgm_read_byte(&img2[i + (j * 480)]);
      PORTB = 0b000111;
    }

    for (byte i = 0; i < 37; i++) // thfp
    {
      PORTB = 0b000011;
      PORTB = 0b000111;
    }
    // 1 HORIZONTAL LINE END ----------
  }
  for (byte j = 0; j < 60; j++) // linie od 181 do 240
  {
    // 1 HORIZONTAL LINE --------------
    PORTB = 0b000001; // thsw
    PORTB = 0b000101;
    for (byte i = 0; i < 99; i++) // thbp-thsw
    {
      PORTB = 0b000011;
      PORTB = 0b000111;
    }
    for (int i = 0; i < 480; i++) // thd
    {
      PORTB = 0b000011;
      PORTC = pgm_read_byte(&img3[i + (j * 480)]);
      PORTB = 0b000111;
    }

    for (byte i = 0; i < 37; i++) // thfp
    {
      PORTB = 0b000011;
      PORTB = 0b000111;
    }
    // 1 HORIZONTAL LINE END ----------
  }

PS: Na pewno nie chodzi o komunikację z wyświetlaczem bo gdy wyświetlam np. czarno-białą grafikę, aby zająć mniej niż 65KB pamięci to wszystko jest OK.

Z góry dziękuję za pomoc i pozdrawiam!
 
Odpowiedź
  


Wiadomości w tym wątku
Problem z programowaniem mikrokontrolera Atmega1284 - przez ElektronPL - 25-04-2020, 18:40

Skocz do:


Przeglądający: 1 gości