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

ATmega 128 animacja tekstu na lcd nie działa.

cosmaty1986 13 Sty 2010 17:06 2365 11
REKLAMA
  • #1 7529926
    cosmaty1986
    Poziom 11  
    Witam wszystkich
    Mam problem z zaprogramowaniem mikro kontrolera ATmega128 chciałbym napisać coś takiego:
    Animacja tekstu w lewo wciśniecie klawisza i trzymanie PG2 zmienia kierunek animacji, po puszczeniu PG2 kierunek się przywraca.

    Napisałem już co nieco:

    #include <avr\io.h>              // Most basic include files
    #include <avr\interrupt.h>       // Add the necessary ones
    #include <avr\signal.h>
    #include <avr\delay.h>
    #define F_CPU 11059200
    
    char znak[16]={0x3F,0x06,0x5B,0x4F,
                   0x66,0x6D,0x7D,0x07,
                   0x7F,0x6F,0x77,0x7C,
                   0x58,0x5B,0x79,0x71};
    
    void hw_init(void) {  // Put the open brace '{' here
    
       DDRA=0xff;
       DDRE=0xff;
       PORTE=(1<<PE6);
       PORTA=0x77;
    }
    
    //**************************************
    
    int main(void) {
       char seg[4]={0x3f,0x70,0x79,0x3d}; //,0x07,0x07};
    
       while(1) {
          hw_init();
    
    for(int p=0;p<6;p++)
    {
         for(int s=0;s<4;s++)
          {
         PORTA=0x00;
         PORTE=(1<<(7-s));
         PORTA=znak[s+p];
          _delay_ms(50000);
     }
         _delay_ms(50000);
         }
       }
    
    }


    Nie mam pojęcia co dalej utknąłem w martwym punkcie. Bardzo proszę o pomoc... Z góry dziękuję i pozdrawiam....


    inventco.eu - tytuł poprawiłem, regulamin p.11.1
  • REKLAMA
  • #2 7556218
    cosmaty1986
    Poziom 11  
    Fajnie że można na Was liczyć... Dzięki za pomoc.
  • REKLAMA
  • #3 7556449
    mirekk36
    Poziom 42  
    Żebyś ty chociaż sam wiedział co piszesz albo o co pytasz - a tu proszę, jeszcze trzeba w 5 sekund odpowiedzieć.

    Jaka animacja? jaki klawisz PG2? co to ma w ogóle wspólnego z tym kodem który tu wkleiłeś, który rzekomo sam napisałeś - człowieku - przeczytaj to sam na spokojnie i zastanów się czy ty sam byś się domyślił o co tobie chodziło w tym pseudo - pytaniu. Masakra.
  • REKLAMA
  • #4 7558040
    cosmaty1986
    Poziom 11  
    Przepraszam mój błąd ale to dlatego że jestem początkujący(bardzo początkujący)

    -znalazłem schemat mikro kontrolera (w załączniku)
    -animacja tekstu(lub liczb) na wyświetlaczu 7-segmentowym inaczej przewijanie(od od prawej do lewej po naciśnięciu i przytrzymaniu przycisku PG2 przewija odwrotnie czyli od lewej do prawej)

    Myślę że teraz wiadomo o co chodzi.

    Jeszcze raz przepraszam...
    Załączniki:
  • REKLAMA
  • #5 7591020
    cosmaty1986
    Poziom 11  
    Nikt nie jest w stanie mi pomóc ????
  • #7 7607780
    cosmaty1986
    Poziom 11  
    Kod w w takiej postaci jak teraz przewija tekst na wyświetlaczu siedmio segmentowym ale nie wiem jak zrobić żeby po wciśnięciu przycisku przewijało w drugą stronę... Mam nadzieję że zrozumiale wyjaśniłem...
  • #8 7608411
    Dr.Vee
    VIP Zasłużony dla elektroda
    Tak to jest, jak się pisze programy oparte o _delay_ms - ciężko cokolwiek później zmienić. #define F_CPU powinno być przed #include <avr/delay.h>

    Na dodatek Twój program nie realizuje żadnego przewijanie tekstu, tylko pojedyńczy "latający znaczek", bo aktywny będzie tylko jeden znak na raz.

    Poszukaj na forum kodu multipleksującego wyświetlacze LED w oparciu o przerwanie od timera. W pętli głównej zrobisz sobie opóźnienie, test stanu przycisku i zmianę zawartości wyświetlanych znaków.
  • #9 7608603
    cosmaty1986
    Poziom 11  
    Niestety ale nie mogę zrezygnować z delay_ms ponieważ jest to ,,obowiązkowy punkt programu,,

    Cytat:
    Poszukaj na forum kodu multipleksującego wyświetlacze LED w oparciu o przerwanie od timera. W pętli głównej zrobisz sobie opóźnienie, test stanu przycisku i zmianę zawartości wyświetlanych znaków.


    Niestety ale nic nie znalazłem...
  • #10 7622683
    cosmaty1986
    Poziom 11  
    Witam
    Trochę pozmieniałem swój kod ale dalej nie wiem jak zrobić przewijanie w drugą stronę. Czy ktoś mógł by mi pomóc...

    #include <avr\io.h>
    #include <avr\interrupt.h>   // funkcje sei(), cli()
    #include <avr\signal.h>    // definicje SIGNAL, INTERRUPT
    #include <avr\delay.h>
    #define F_CPU 11059200     // 1 MHz
    
    
    char znak[16]={0x3F,0x06,0x5B,0x4F,
                  0x66,0x6D,0x7D,0x07,
                  0x7F,0x6F,0x77,0x7C,
                  0x58,0x5B,0x79,0x71};
    
    void hw_init(void) {
      DDRA=0xff;
      DDRE=0xff;
      PORTE=(1<<PE6);
      PORTA=0x77;
    }
    
    
    
    int main(void)  {
      char seg[4]={0x3f,0x70,0x79,0x3d,0x07,0x07};
    
      DDRG=0xFB;
    PORTG=0x04;
    
      while(1) {
         hw_init();
    for(int p=0;p<6;p++)
    {
       if(PING&(1<<2))
       {
           p--;
           if (p<0)
               p=5;
       }
       else
      {
          p++;
          if (p>5)
              p=0;
      }
      for(int s=0;s<4;s++)
           {
          PORTA=0x00;
         PORTE=(1<<(7-s));
          PORTA=znak[s+p];
        for(int z=0;z<1000;z++)
         { int k;
      k=1 ;
         k=k-1;    }
    }
        _delay_ms(40);
        }
      }
    
    }
    
  • #11 7622777
    Balu
    Poziom 38  
    cosmaty1986 napisał:
    Niestety ale nie mogę zrezygnować z delay_ms ponieważ jest to ,,obowiązkowy punkt programu,,

    Cytat:
    Poszukaj na forum kodu multipleksującego wyświetlacze LED w oparciu o przerwanie od timera. W pętli głównej zrobisz sobie opóźnienie, test stanu przycisku i zmianę zawartości wyświetlanych znaków.


    Niestety ale nic nie znalazłem...


    Źle szukałeś.
REKLAMA