eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaBrak komunikacji między Atmegą a modułem GSM po rs232 › Re: Brak komunikacji między Atmegą a modułem GSM po rs232
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED!not-for-mail
    From: Atlantis <m...@w...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Brak komunikacji między Atmegą a modułem GSM po rs232
    Date: Sat, 15 Dec 2012 18:07:13 +0100
    Organization: http://www.wit.edu.pl
    Lines: 73
    Message-ID: <kaiaok$1d6$1@portraits.wsisiz.edu.pl>
    References: <ka5cm1$mhd$1@portraits.wsisiz.edu.pl> <ka5e2c$lj0$1@node1.news.atman.pl>
    <ka5hcc$o9i$1@portraits.wsisiz.edu.pl>
    <ka5l1v$pp2$1@portraits.wsisiz.edu.pl> <ka5mfv$u2g$1@node1.news.atman.pl>
    <ka5o4e$qus$1@portraits.wsisiz.edu.pl> <ka5rqv$u5p$1@mx1.internetia.pl>
    <ka7vc3$1qf$1@portraits.wsisiz.edu.pl>
    <g...@n...chmurka.net>
    <kaansn$cp6$1@portraits.wsisiz.edu.pl>
    <kadac0$ptr$1@portraits.wsisiz.edu.pl>
    <50ca37de$0$26695$65785112@news.neostrada.pl>
    <kade5t$rht$1@portraits.wsisiz.edu.pl>
    <50ca5c8a$0$26694$65785112@news.neostrada.pl>
    <kag17a$80e$1@portraits.wsisiz.edu.pl>
    <a...@n...neostrada.pl>
    <kag9ro$bbq$1@portraits.wsisiz.edu.pl>
    <a...@n...neostrada.pl>
    NNTP-Posting-Host: aaqx22.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: portraits.wsisiz.edu.pl 1355591253 1446 83.5.183.22 (15 Dec 2012 17:07:33
    GMT)
    X-Complaints-To: a...@w...edu.pl
    NNTP-Posting-Date: Sat, 15 Dec 2012 17:07:33 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Thunderbird/17.0
    In-Reply-To: <a...@n...neostrada.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:639205
    [ ukryj nagłówki ]

    W dniu 2012-12-15 09:12, Marek pisze:

    > Rozumiem ze to moduł 5V? Możesz mi podać jego model?

    Wydawało mi się, że już wcześniej wspominałem. Moduł to Motorola D15.
    Może pracować z napięciem zasilania od 3V do 6V.
    Niezależnie od tego stan wysoki na liniach rs232 wynosi 5V. W tej chwili
    się tym szczególnie nie martwię, bo Atmega zasilana jest ze
    stabilizatora 5V, ale faktycznie ta kwestia chodzi mi po głowie, bo
    docelowo układ ma być zasilany z akumulatorka 3,6V.

    Będę wtedy chyba potrzebował jakiegoś level shiftera?

    Manual podaje następującą informację.

    The signal thresholds are:
    Vih 2.0V min.
    Vil 0.8V max.
    Voh 4.4V min. @ 50uA or 3.8V min. @ 8mA.
    Vol 0.1 max. @ 50uA or 0.44V @ 8mA.


    > W dalszej części przez ze nie ma problemu przy komunikacji z komputerem
    > a później masz wątpliwisci co do działania hyperterminala.

    Po prostu starałem się doszukiwać przyczyn tam, gdzie tylko się dało.
    Program pisałem w oparciu o wskazania HT, więc zacząłem nawet
    podejrzewać, że to on coś ukrywał i mogłem tego nie uwzględnić w kodzie.
    Wychodzi jednak na to, że przyczyna była zgoła inna...


    > odpowiedzi może transmitowac kolejne polecenie. Kiedyś miałem podobny
    > problem ze moduł dziwnie się zachowywał z mcu a w terminalu było
    > prawidłowo. Był błąd w kodzie programu, mcu wysyłał kolejne polecenie w
    > trakcie transmisji ostatniego \n z odpowiedzi poprzedniego polecenia i
    > moduł albo się "przytykal" albo wysylal krzaczek.

    No i to chyba będzie to... Dopiero wróciłem z pracy i nie miałem czasu
    na eksperymenty, ale to najbardziej prawdopodobne wytłumaczenie. Po
    prostu nie wiedziałem o tej własności modułu - sądziłem, że komunikaty
    się kolejkują i wymiana informacji w obydwie strony odbywa się
    niezależenie. Faktycznie dotychczasowy kod ma opisaną przez Ciebie cechę.

    Krótko rzecz ujmując używam dwóch tablic: rx_buffer[] i last_line[]. Do
    pierwszej napływają wszystkie znaki z modułu GSM, za wyjątkiem \n, które
    są pomijane. Wystąpienie \r powoduje przepisanie wszystkich
    poprzedzających go znaków z bufora do last_line[]. Pierwszy element
    tablicy last_line[] pełni też funkcję flagi informującej o przyjęciu
    odpowiedzi (kopiowanie odbywa się w przerwaniu, więc z punktu widzenia
    reszty programu całość przybywa za jednym razem).

    Jednak zgodnie z tym co piszesz po wystąpieniu \r moduł odbierał jeszcze
    \n (tyle tylko, że go nigdzie nie zapisywał). Co więcej - w niektórych
    przypadkach potem leciała jeszcze pusta linie (\r\n). A tymczasem flaga
    była już postawiona i zaczynało się nadawanie kolejnej komendy...

    Teraz zrobię to inaczej. Wystąpienie \n będzie inicjowało kopiowanie
    danych z bufora do last_line[], aż do wystąpienia znaku \r. Wyjątkiem
    będzie sytuacja, kiedy \r znajdzie się w pierwszym polu bufora - wtedy
    zostanie on po prostu wyczyszczony (ignorowanie pustych linii).
    Dodatkowo, przed nadaniem każdej komendy zastosuję opóźnienie.

    BTW jeszcze pytanie natury formalnej. Jak inteligentny jest kompilator w
    zakresie makrodefinicji zastępujących wartości liczbowe? Jeśli np. dam:

    #define WARTOSC 31

    a potem w programie dam:

    if (zmienna < (WARTOSC-1))

    To w którym momencie zostanie obliczona wartość? Podczas kompilacji, czy
    też za każdym razem uC będzie sobie musiał odejmować jedynkę? ;)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: