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

[M8][C]Dziwne zachowanie atmegi(LCD) oraz komunikacja po IR

Dragas 21 Lis 2010 19:05 1370 6
  • #1 8772588
    Dragas
    Poziom 26  
    Witam
    Mam 2 pytania tak jak w temacie.
    (Na razie układ jest na atmaga8, ale mam zamiar go przenieść na atmega16.)

    1. Napisałem softa do atmegi8 w C. Program zawiera około 40 tablic z tekstem o długości 20 znaków każda. Niestety, ale program się wiesza lub pokazuje część znaków z tablic, mimo, że nie było żadnej komendy, aby to zrobił. Ale jeśli usunę parę tablic, to program działa już dobrze, i nie wariuje.
    Gdzie może być problem?

    2. Wiem, że na forum jest dużo tematów dotyczących komunikacji po IR, ale najczęściej na pilocie są tylko 2 przyciski (wysyłane 2 kody), a mi potrzebny jest sposób na nadanie i co najważniejsze na odebranie 4 różnych kodów.
    Pilot mam zamiar zrobić na attiny13.
    Jeśli ktoś posiada kod programu napisanego w C, który wysyła i odbiera 4 kody, to proszę o umieszczenie.

    Pozdrawiam Dragas
  • #3 8772656
    Dragas
    Poziom 26  
    Błędne znaki wyświetlane są na LCD. Zamiast wyświetlić "Klucz: 0000", wyświetla "xxxxxxxxxxx0000", gdzie zamiast x jest wyświetlany tekst z tablic lub jakieś znaczki, nigdzie nie zapisane przeze mnie.

    Jeśli chodzi o kod, to zamieszczam w załączniku. LCD 2x20.

    [DODANO]

    Jeśli ktoś chciałby sprawdzić program, załączam kod, składający się z 89 tablic.
    
      char dane0[] = "Mikrokontroler (skro";
      char dane1[] = "t ang. MCU lub µC) -";
      char dane2[] = " system mikroproceso";
      char dane3[] = "rowy zrealizowany w ";
      char dane4[] = "postaci pojedynczego";
      char dane5[] = " ukladu scalonego, z";
      char dane6[] = "awierajacego jednost";
      char dane7[] = "ke centralna (CPU), ";
      char dane8[] = "pamiec RAM oraz na o";
      char dane9[] = "gol pamiec programu ";
      char dane10[] = "i rozbudowane uklady";
      char dane11[] = " wejścia-wyjścia. Ok";
      char dane12[] = "reślenie mikrokontro";
      char dane13[] = "ler pochodzi od glow";
      char dane14[] = "nego obszaru zastoso";
      char dane15[] = "wan, jakim jest ster";
      char dane16[] = "owanie urzadzeniami ";
      char dane17[] = "elektronicznymi.  Mi";
      char dane18[] = "krokontroler stanowi";
      char dane19[] = " uzyteczny i calkowi";
      char dane20[] = "cie autonomiczny sys";
      char dane21[] = "tem mikroprocesorowy";
      char dane22[] = ", nie wymagajacy uzy";
      char dane23[] = "cia dodatkowych elem";
      char dane24[] = "entow, ktorych wymag";
      char dane25[] = "alby do pracy tradyc";
      char dane26[] = "yjny mikroprocesor. ";
      char dane27[] = "Skadinad, mikrokontr";
      char dane28[] = "olery przystosowane ";
      char dane29[] = "sa do bezpośredniej ";
      char dane30[] = "wspolpracy z rozmait";
      char dane31[] = "ymi urzadzeniami zew";
      char dane32[] = "netrznymi, w tym row";
      char dane33[] = "niez takimi, do ktor";
      char dane34[] = "ych obslugi tradycyj";
      char dane35[] = "ny mikroprocesor wym";
      char dane36[] = "agalby uzycia dodatk";
      char dane37[] = "owych ukladow peryfe";
      char dane38[] = "ryjnych.  Mikrokontr";
      char dane39[] = "olery wykorzystuje s";
      char dane40[] = "ie powszechnie w spr";
      char dane41[] = "zecie AGD, ukladach ";
      char dane42[] = "kontrolno-pomiarowyc";
      char dane43[] = "h, w przemyslowych u";
      char dane44[] = "kladach automatyki, ";
      char dane45[] = "w telekomunikacji it";
      char dane46[] = "p.  Pamiec: Ze wzgle";
      char dane47[] = "du na rodzaj uzytej ";
      char dane48[] = "pamieci programu, mo";
      char dane49[] = "zemy wyroznic mikrok";
      char dane50[] = "ontrolery:      * z ";
      char dane51[] = "pamiecia stala (ROM)";
      char dane52[] = " programowana fabryc";
      char dane53[] = "znie - jest to najta";
      char dane54[] = "nsze rozwiazanie w p";
      char dane55[] = "rodukcji masowej    ";
      char dane56[] = " * wielokrotnie prog";
      char dane57[] = "ramowalne - wyposazo";
      char dane58[] = "ne w pamiec EPROM, E";
      char dane59[] = "EPROM lub Flash, wym";
      char dane60[] = "agajace uzycia zewne";
      char dane61[] = "trznych programatoro";
      char dane62[] = "w - tego rodzaju mik";
      char dane63[] = "rokontrolery nadaja ";
      char dane64[] = "sie szczegolnie dobr";
      char dane65[] = "ze do zastosowan pro";
      char dane66[] = "totypowych i niewiel";
      char dane67[] = "kich serii produkcyj";
      char dane68[] = "nych * programowalne";
      char dane69[] = " w zmontowanym urzad";
      char dane70[] = "zeniu docelowym (In-";
      char dane71[] = "System Programmable ";
      char dane72[] = "- ISP), przez interf";
      char dane73[] = "ejs szeregowy, * bez";
      char dane74[] = " wlasnej pamieci pro";
      char dane75[] = "gramu - niektore mik";
      char dane76[] = "rokontrolery moga wy";
      char dane77[] = "konywac jedynie prog";
      char dane78[] = "ramy zapisane w pami";
      char dane79[] = "eci zewnetrznej - ro";
      char dane80[] = "zwiazanie to bywa st";
      char dane81[] = "osowane w przypadku,";
      char dane82[] = " gdy pamiec programu";
      char dane83[] = " musi miec szczegoln";
      char dane84[] = "ie duzy rozmiar, np.";
      char dane85[] = " z uwagi na przechow";
      char dane86[] = "ywane w niej stale t";
      char dane87[] = "ablice (Look-Up Tabl";
      char dane88[] = "es, LUT) ";
    	  char dane89[] = "";
     char *tab[] = { dane0,
     dane1, dane2, dane3, dane4, dane5, dane6, dane7, dane8, dane9,
     dane10, dane11, dane12, dane13, dane14, dane15, dane16, dane17, dane18,
     dane19, dane20, dane21, dane22, dane23, dane24, dane25, dane26, dane27,
     dane28, dane29, dane30, dane31, dane32, dane33, dane34, dane35, dane36,
     dane37, dane38, dane39, dane40, dane41, dane42, dane43, dane44, dane45,
     dane46, dane47, dane48, dane49, dane50, dane51, dane52, dane53, dane54,
     dane55, dane56, dane57, dane58, dane59, dane60, dane61, dane62, dane63,
     dane64, dane65, dane66, dane67, dane68, dane69, dane70, dane71, dane72,
     dane73, dane74, dane75, dane76, dane77, dane78, dane79, dane80, dane81,
     dane82, dane83, dane84, dane85, dane86, dane87, dane88, dane89};
    	int min = 0;
    	int max = 89;
    


    (Tekst z wikipedii)
  • Pomocny post
    #4 8772886
    Andrzej__S
    Poziom 28  
    No jak masz tyle danych w SRAM to nie dziw, że nie działa. ATmega8 ma tylko 1k pamięci SRAM. Proponuję przenieść je do FLASH.
    Poza tym w kodzie masz wewnątrz funkcji 'main' kod innych funkcji (IntToString, its). Kod tych funkcji musisz przenieść poza funkcję 'main'.

    To tak na początek :)
  • #5 8773312
    Dragas
    Poziom 26  
    Czyli jeśli przeniosę się na M16, powinno być lepiej.

    A teraz jak rozwiązać sprawę komunikacji po IR. Chodzi mi o to, aby z nadajnika wysłać kod od 0 do 3, w zależności o naciśnięcia przycisku. Chciałbym maksymalnie zminimalizować wielkość układu, i użyć attiny13, nawet w wersji smd. Czy ktoś posiada lub miał kiedyś styczność z takim czymś. Odbiornik będzie podłączony pod ten układ, którego kod zamieszczony jest powyżej. CO do nadajnika, to może być w C lub Bascom, ale kod musi zajmować max 1k.
  • #6 8773561
    mirekk36
    Poziom 42  
    Ja bardzo przepraszam, ale może najpierw jednak zanim przeniesiesz się na M16 to może poczytaj jeszcze troszkę n/t programowania w języku C. Zacznij mniejszymi kroczkami od migania zwykłą diodą LED czy reakcją na wciskanie zwykłego klawisza - tak jak każdy.

    Bo to co tu wyprawiasz w tym "kodzie" jak go nazwałeś to istne szaleństwo .... w związku z czym i procesor zachowuje się zgodnie z tym co napisałem, szaleje ;) ... ciężko nawet zacząć od czegoś ci tłumaczyć bo mieszasz że aż strach.

    Myślę, że jakbyś zaczynał po kolei to wyszło by ci to lepiej.
  • #7 8775207
    Dragas
    Poziom 26  
    Wiem, że kod nie jest dobrej jakości, ale bardzo chciałem zrobić to co zrobiłem. Myślałem, że jest jakiś nie bardzo skomplikowany sposób, aby obsłużyć nadawanie i odbiór przez IR.

    Co do migania LED'a, to już to przerabiałem, ale jakoś mnie to nie satysfakcjonuje, za mało skomplikowane.

    W najbliższym czasie postaram się zmodyfikować kod, tak aby wyglądał lepiej.
REKLAMA