Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Nie działa zapisywanie danych do EEPROM a następnie wyświetlanie ich

Bartoneczek 10 Paź 2011 17:27 893 5
  • #1 10 Paź 2011 17:27
    Bartoneczek
    Poziom 10  

    Witam,

    Mam problem. Próbuję wysyłać pojedyncze bajty (konkretnie 32) z komputera do mikrokontrolera, zapisać je w pamięci EEPROM i wyświetlić na wyświetlaczu. Próbuję to zrealizować w ten sposób:

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    (Wkleiłem najistotniejszą część programu.)

    Niestety coś jest nie tak. Po wysłaniu tablicy bajtów wyświetlacz jest pusty a po kilkunastokrotnym wysyłaniu pojawiają się jakieś krzaki. USART jest napewno dobrze skonfigurowany. Problemu szukałem w kodzie wywołanego przerwania i w samej funkcji wyświetlania ale wydaje mi się że wszystko jest ok. Czy dobrze obsługuję wysłaną tablicę bajtów? W sensie, czy każdy nadchodzący bajt to osobne przerwanie, czy może powinienem umieścić kod przerwania w pętli?

  • #2 11 Paź 2011 13:15
    Andrzej__S
    Poziom 28  

    Przerwanie "Receive Complete" jest generowane po odebraniu każdego pojedynczego bajtu danych, czyli nawet dla dosyć niskiego transferu 9600bps co ok. 1ms. Zapis do EEPROM trwa ok. 8,5ms, więc policz sobie, ile bajtów "zgubi" USART, zanim skończy się Twoja obsługa przerwania. Podstawowy błąd masz w założeniach. Dane z USART należy odbierać do bufora w pamięci RAM (wtedy obsługa przerwania jest wystarczająco krótka), a dopiero później wykonywać operacje na danych z bufora, czyli np. zapisywać je do pamięci EEPROM.
    Pomijam inne błędy, które być może wynikają z nieprawidłowego kopiowania i/lub złego wyboru fragmentów programu.

  • #3 11 Paź 2011 15:56
    Bartoneczek
    Poziom 10  

    Dzięki za odpowiedź. Czy dysponujesz jakimiś materiałami bądź przykładami odnośnie tego w jaki sposób mam wykorzystać pamięć RAM jako bufor? Czy pamięć RAM ma wydzielony obszar dla buforu czy mam korzystać z rejestrów roboczych, a może ze stosu? Trochę nie mam pomysłu jak miałoby to wyglądać. ;)

  • #4 11 Paź 2011 18:37
    Andrzej__S
    Poziom 28  

    Bartoneczek napisał:

    Czy dysponujesz jakimiś materiałami bądź przykładami odnośnie tego w jaki sposób mam wykorzystać pamięć RAM jako bufor?

    Każdy kto ma komputer z dostępem do internetu dysponuje materiałami. Wystarczy trochę inwencji i dobra wyszukiwarka.

    Mogę jedynie podpowiedzieć, o czym poczytać:
    1) Dyrektywy .DSEG i .BYTE do definiowania zmiennych w pamięci RAM.
    2) Instrukcje AVR ASM takie jak: STS ST LDS LD do zapisywania i odczytywania danych z pamięci RAM.
    3) Rejestry wskaźnikowe X Y Z (pary rejestrów, które mogą być użyte jako wskaźniki do pamięci RAM).

  • #5 11 Paź 2011 19:32
    Bartoneczek
    Poziom 10  

    Właśnie o takie wskazówki mi chodziło. Dzięki!

  • #6 12 Paź 2011 15:20
    Bartoneczek
    Poziom 10  

    Odświeżam temat bo wracam z nowym problemem. ;)

    Program 1:

    Kod: asm
    Zaloguj się, aby zobaczyć kod



    Program 2:
    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Co jest nie tak?
    Po zaprogramowaniu MCU programem 2, po podłączeniu zasilania widzę na ekranie krzaki i MCU nie reaguje na otrzymywane dane. Po zaprogramowaniu programem 1 (który różni się dwoma, trzema mało istotnymi linijkami) a następnie programem 2 wszystko jest ok. Niestety po odłączeniu zasilania znów pojawiają się krzaki i muszę powtarzać procedurę programowania programem 2, 1, 2. Skąd biorą się te krzaki, o co chodzi?

    EDIT: Problem rozwiązany, komórka RAMEND zwyczajnie nie była pusta po podłączeniu zasilania. Problem rozwiązało jej wyczyszczenie na początku programu.

 
Promocja -20%
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
tme