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

ATmega8535 i komunikacja po RS232 z telefonem BASCOM

robgold 02 Lis 2005 21:30 3700 10
REKLAMA
  • #1 1949990
    robgold
    Poziom 23  
    Posty: 698
    Pomógł: 10
    Ocena: 284
    Witam mam taki problem, przeszukalem troche archiwum po czym sklecilem sobie taki program:

    $crystal = 11059200
    $baud = 9600
    Config Serialin = Buffered , Size = 100
    Config Lcd = 16 * 2

    Dim Flaga As Byte
    Dim Napis As String * 20

    Dim I As Byte , X As Byte
    Set Ddrd.1 '= 1
    Enable Interrupts

    'Echo Off
    Do
    Cls
    Print "AT+CSQ"
    I = 0
    Flaga = 0
    'Flaga = Ischarwaiting()
    While I <> &H0D
    I = Inkey()
    If I > 32 Then
    'Lcd Chr(i);
    Napis = Napis + Chr(i)
    End If
    Wend

    Wait 1
    Cls
    Lcd Napis
    Wait 1
    Loop

    Chcialbym odczytac nim moc sygnalu z telefonu (Eryk T10) Odpowiedz telefonu powina brzmiec (a przynajmnije w terminalu to tak wyglada)
    +CSQ: 19,99 gdzie 19 bedzie po pewnych przeliczeniach w/w moca.


    Problem ze na LCD dostaje co ktoras petle odpowiedni wynik. Do tego program dosc dziwnie dziala tak jak by "zapychal" buffor mimo tego ze jeszcze czegos nie wyswietlil.

    Nie wiem gdzie suzkac bledu. Terminal po wypisaniu tego +CSQ: 19,99 robi linijke przerwy nie mam pojecia czy to telefon robi dwa razy "enter" czy zapycha bufor pustymi linijkami

    Kolejne pytanie jak moge zapisac buffor uart'a zerami (wyczyscic innymi slowy) ? Moze wystarczylo by tylko odczytac po czym wymazac buffor i znow odczytac ....

    Moze ktos cos doradzi jak taki programik wykonac
  • REKLAMA
  • #2 1952547
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    robgold napisał:

    ...
    Problem ze na LCD dostaje co ktoras petle odpowiedni wynik. Do tego program dosc dziwnie dziala tak jak by "zapychal" buffor mimo tego ze jeszcze czegos nie wyswietlil.

    Wyłącz echo w telefonie.
    robgold napisał:

    Kolejne pytanie jak moge zapisac buffor uart'a zerami (wyczyscic innymi slowy) ? Moze wystarczylo by tylko odczytac po czym wymazac buffor i znow odczytac ....
    Moze ktos cos doradzi jak taki programik wykonac

    Czyszczenie bufora nic Ci nie da.Aby "opróżnić" bufor , wystarczy wyrównać lub wyzerować indeksy _rs_head_ptr0 i _rs_tail_ptr0.

    Piotrek
  • REKLAMA
  • #3 1955997
    robgold
    Poziom 23  
    Posty: 698
    Pomógł: 10
    Ocena: 284
    Wyłącz echo w telefonie.

    ale jak mam to zrobic ?
    ATE0 nie dziala :|

    Czyszczenie bufora nic Ci nie da.Aby "opróżnić" bufor , wystarczy wyrównać lub wyzerować indeksy _rs_head_ptr0 i _rs_tail_ptr0.

    pytanie jak to zrobic pod Bascomem ?

    Obecnie jest tak jak by to co wysyla telefon ladowalo sie do bufora w roznych miejscach , raz na pcozatku, raz w srodku , raz na koncu a czasami wcale ...

    1 raz na 10 petli uda mi sie odczytac dobra informacje ...9 razy nie wynajde nic ...
  • REKLAMA
  • #4 1956918
    genetix
    Poziom 24  
    Posty: 669
    Pomógł: 42
    Może masz błąd w obsłudze bufora??
  • Pomocny post
    #5 1957019
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    robgold napisał:
    Wyłącz echo w telefonie.

    ale jak mam to zrobic ?
    ATE0 nie dziala :|

    Czyszczenie bufora nic Ci nie da.Aby "opróżnić" bufor , wystarczy wyrównać lub wyzerować indeksy _rs_head_ptr0 i _rs_tail_ptr0.

    pytanie jak to zrobic pod Bascomem ?

    Obecnie jest tak jak by to co wysyla telefon ladowalo sie do bufora w roznych miejscach , raz na pcozatku, raz w srodku , raz na koncu a czasami wcale ...

    1 raz na 10 petli uda mi sie odczytac dobra informacje ...9 razy nie wynajde nic ...

    No dobra , trochę teorii :D
    Znaki ASCII , które są kodami sterującymi , umieszczę w nawiasach klamrowych w postaci hexadecymalnej(szesnastkowo) np. 10 będzie zapisane jako {0A}.
    Wysyłasz do telefonu polecenie "AT+CSQ" -zakładam , że telefon wysyła echo - na ekranie terminala wygląda jak poniżej , ...
    AT+CSQ
    +CSQ: 19,99

    OK
    ... a w buforze mikroprocka tak:
    AT+CSQ{0A}{0D}+CSQ: 19,99{0A}{0D}{0A}{0D}OK{0A}{0D}
    Ty pobierasz z bufora tylko AT+CSQ{0A}{0D} i znów inicjujesz transmisję do telefonu , więc w kolejmej pętli bufor wygląda już tak:
    +CSQ:19,99{0A}{0D}{0A}{0D}OK{0A}{0D}AT+CSQ{0A}{0D}+CSQ: 19,99{0A}{0D}{0A}{0D}OK{0A}{0D}
    Pobierasz +CSQ:19,99{0A}{0D} , kolejna transmisja i w buforze:
    {0A}{0D}OK{0A}{0D}AT+CSQ{0A}{0D}+CSQ: 19,99{0A}{0D}{0A}{0D}OK{0A}{0D}AT+CSQ{0A}{0D}+CSQ: 19,99{0A}{0D}{0A}{0D}OK{0A}{0D}

    Po kilku obiegach pętli , bufor jest zapełniony po brzegi i ... kicha ;)
    Nim ponowisz transmisję , powinieneś opróżnić bufor.Można to zrobić na kilka sposobów , ale najszybciej to:
    
    _rs_head_ptr0=0 'to właśnie oznacza WYZEROWAĆ
    _rs_tail_ptr0 =0  'j/w
    

    Po powyższym zabiegu , tracisz pozostałe nieodczytane dane w buforze.
    Teraz chyba wszystko jasne :D

    Piotrek
  • #6 1957253
    robgold
    Poziom 23  
    Posty: 698
    Pomógł: 10
    Ocena: 284
    Teraz bedzie najciekawsze ....
    byc moze w buforze to tak wyglada ...(zapewen tak jest jak napisales)

    Obecnie wsyzsto dziala cacy nawet bez zerowania bufora .... zmienilem tylko bit CKOPT zeby generator dziala od "badny do bandy" bo uzywam kwarcu 11,0592 i wszystko zaczelo stabilnie dzialac ....

    Obecnie zmienilem tak ze odczytuje bufor:

    Print "AT+CSQ"
    Enable Interrupts
    While I <> &H4B
    I = Inkey()
    If I > 32 Then
    Napis = Napis + Chr(i)
    Watch = 0
    End If
    Watch = Watch + 1
    If Watch > 20000 Then I = &H4B
    Wend
    Return

    Wszystko smiga .... byc moze wlaczajac i wylanczajc przerwanie automatycznie kasuje bufor ?

    Bufor zmniejszylem ze 100 do 20 i tez dziala ....

    Kurde .. jzu sie cieszylem ze rozumiem czemu zadzialalo ..a teraz mimo ze dziala to glupi jestem bo teoretycznie nie powinno bo w buforze smietnik sie robi ....

    Co ciekawe po zmianie bitu CKOPT w fusach program zaczol stabilnie dzialac (wczensiej potrafil sie co jaksi czas wysypac tak ze robil sie reset procka)

    :|
  • #7 1957718
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    Fajnie , że wreszcie ruszyło :D
    A co dokładnie się wyświetla i czy za każdym razem to samo :?:

    Piotrek
  • #8 1957924
    robgold
    Poziom 23  
    Posty: 698
    Pomógł: 10
    Ocena: 284
    Od kad zmienilem bit CKOPT w fusach dziala bardzo stabilnie

    za kazdym razem dostaje informacje AT+CSQ+CSQ: 19,99OK

    Ja wycinam z tego tylko to 19 i przeliczam na dBm oraz robie z tego bargraph


    Zmienilem tez petle while, wend tak aby wychodzil po znaku OK a nie po {CR} bo w takim wypadku bym nic nie odczytal.

    Nie rozumiem do konca czemu bez zerowania bufora tez dziala ..ale wstawielm to co podeslales ;)

    Ciekawy jestem tylko czemu dostaje to AT+CSQ jako echo w buforze skoro :
    a) bufor jest ustaiwony jako bufferin czyli tylko dla dancyh przychodzacych
    b) na terminalu (TeraTerm , Hyperterminal) nie dostaje tego echa ...

    Zastanawia mnei jeszcze jak to zrobic aby to dzialalo na przerwanie po RS RX .
    Do zupelnie innego urzadzenia chce zaimplementowac ten sprawny dzialajacy kawalek kodu aby w momencie jak telefon wysle cos (a dokladniej wysle RING + CLIP" skoczyc do podprogramu przerwania i wyciagnac numer z CLIP na ktory pozniej wysle SMS'a

    No i na koniec dodam ze sprobuje ten odczyt poziomu sygnalu przeniesc na platforme 89c2051 bo aurat takiego mam i jest tanszy do ATmega ..ciekawe tylko czy wyrobi ? :|
  • #9 1958138
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    robgold napisał:
    Od kad zmienilem bit CKOPT w fusach dziala bardzo stabilnie

    A więc wniosek , że program to jedno , a sprzęt to ... drugie :D
    robgold napisał:

    za kazdym razem dostaje informacje AT+CSQ+CSQ: 19,99OK

    Czyli telefon wysyła echo.
    robgold napisał:

    ...
    Nie rozumiem do konca czemu bez zerowania bufora tez dziala ..ale wstawielm to co podeslales ;)

    Jeśli odczytasz wszystkie dane w buforze , to bufor się jakby zeruje i jest gotowy na przyjęcie kolejnych danych.
    Bufor ..in , czy ..out jest buforem tzw. kołowym.

    robgold napisał:

    Ciekawy jestem tylko czemu dostaje to AT+CSQ jako echo w buforze skoro :
    a) bufor jest ustaiwony jako bufferin czyli tylko dla dancyh przychodzacych
    b) na terminalu (TeraTerm , Hyperterminal) nie dostaje tego echa ...

    Używając terminala też otrzymujesz echo , tylko o tym nie wiesz :D
    A dlaczego :?: Już wyjaśniam.
    Kiedy na klawiaturze PC-a wciśniesz np. A , to znak wysyłany jest tylko na port szregowy .Odbiornik po drugiej stronie łącza , a w Twoim przypadku telefon , odsyła ten znak do terminala i dopiero wtedy pojawia się on w oknie terminala.Wystarczy odłączyć telefon i sprawdzić , że pomimo wciskania klawiszy na klawiaturze PC-ta , w oknie terminala nic sie nie pojawi i to właśnie świadczy o braku echa , lub komunikacji.Wyjątkiem jest , kiedy włączymy w terminalu opcję "echo lokalne".
    robgold napisał:

    Zastanawia mnei jeszcze jak to zrobic aby to dzialalo na przerwanie po RS RX.
    Do zupelnie innego urzadzenia chce zaimplementowac ten sprawny dzialajacy kawalek kodu aby w momencie jak telefon wysle cos (a dokladniej wysle RING + CLIP" skoczyc do podprogramu przerwania i wyciagnac numer z CLIP na ktory pozniej wysle SMS'a

    Można napisać własną obsługę przerwania, pytanie tylko PO CO :?:
    Wystarczy tylko , by program główny sprawdzał , czy w buforze pojawił się jakiś znak(i) i wtedy odczytać , sprawdzić czy mamy hasło RING i ... dlaej już z górki.
    robgold napisał:

    No i na koniec dodam ze sprobuje ten odczyt poziomu sygnalu przeniesc na platforme 89c2051 bo aurat takiego mam i jest tanszy do ATmega ..ciekawe tylko czy wyrobi ? :|

    Polecam , bo szkoda ATMega8 do tak prostego zadania , jak ... właściwie nie wiem do "jak prostego" ;)

    Piotrek
  • REKLAMA
  • #10 1958197
    robgold
    Poziom 23  
    Posty: 698
    Pomógł: 10
    Ocena: 284
    A więc wniosek , że program to jedno , a sprzęt to ... drugie :D

    Heh ..no niestety a ja jakos olalem stroen sprzetowa myslac ze na defaultowych ustawieniach powinno smigac ;)


    Czyli telefon wysyła echo.

    W takim raznie niestety wysyla ...i wylanczyc sie go nie da ..bo nie przyjmuje ATE=0

    .....
    Bufor ..in , czy ..out jest buforem tzw. kołowym.

    mam rozumiec ze nie ma znaczenia czy cos wysylam czy pobieram to to jest jeden buffor ?

    Ja rozumiem ze jest to cos w postaci tablicy ktora przelatuje w kolko po indexach ale chyba to jest osobne dla IN i dla OUT ?? Naprowadz mnie


    .....
    Można napisać własną obsługę przerwania, pytanie tylko PO CO :?:
    Wystarczy tylko , by program główny sprawdzał , czy w buforze pojawił się jakiś znak(i) i wtedy odczytać , sprawdzić czy mamy hasło RING i ... dlaej już z górki.

    Hm ...problem jest taki ze to bedzie duzy projekt (jak dla mnie ;) , obsluga telefonu, czujnikow DS (one wymaja dosc sporo czasu an konwersje) do tego wyswietlacz od noki.
    Nie wiem czy jest sens w petli ciagle sprawdzac czy telefon cos wysyla jesli moze byc to poprstu na rzadanie ?
    Sam nie wiem ... moze jakas wskazowka czmeu tak a nie inaczej ...

    Polecam , bo szkoda ATMega8 do tak prostego zadania , jak ... właściwie nie wiem do "jak prostego" ;)

    Jak by to byla ATMega8 to pikus ..ale to jest MEga8535 .."duzy zuczek" :) ... nie wyem tylko czy 2051 wyrobi czasowo , czy tak samo ma konfigurowalne pod bascomem uarty i czy starczy mu pamieci (RAM) od chocby na buffor ...:|
  • #11 1958288
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    robgold napisał:

    Heh ..no niestety a ja jakos olalem stroen sprzetowa myslac ze na defaultowych ustawieniach powinno smigac ;)

    To teraz żałuj :D
    robgold napisał:

    mam rozumiec ze nie ma znaczenia czy cos wysylam czy pobieram to to jest jeden buffor ?

    Nie :!:
    Bufory są oddzielne :idea:
    robgold napisał:

    Ja rozumiem ze jest to cos w postaci tablicy ktora przelatuje w kolko po indexach ale chyba to jest osobne dla IN i dla OUT ?? Naprowadz mnie

    Właśnie tak jest :D
    Zmienne reprezentujące te indeksy dla SERIALIN , to właśnie _rs_tail_ptr0 i _rs_head_ptr0.Używając ich , można z buforem robić "cuda", łącznie z zapisem do niego ;)
    robgold napisał:

    Hm ...problem jest taki ze to bedzie duzy projekt (jak dla mnie ;) , obsluga telefonu, czujnikow DS (one wymaja dosc sporo czasu an konwersje) do tego wyswietlacz od noki.
    Nie wiem czy jest sens w petli ciagle sprawdzac czy telefon cos wysyla jesli moze byc to poprstu na rzadanie ?
    Sam nie wiem ... moze jakas wskazowka czmeu tak a nie inaczej ...

    Ja się nie upieram , ale skoro będziesz odczytywał DS-y co jakiś ściśle określony czas, to co za problem "po drodze" , skontrolować bufor :?:
    robgold napisał:

    Jak by to byla ATMega8 to pikus ..ale to jest MEga8535 .."duzy zuczek" :) ... nie wiem tylko czy 2051 wyrobi czasowo , czy tak samo ma konfigurowalne pod bascomem uarty i czy starczy mu pamieci (RAM) od chocby na buffor ...:|

    Z RAM-em faktycznie może być problem, a skąd mi się wzięła ATMega8 ... nie wiem :| Jeśli chdzi o "wyrabianie się" proca , to spokojnie się wyrobi - tak myślę . Bascom , a szczególnie dla AVR-ów , naprawde wiele potrafi , tylko czytając pomoc , trzeba czytać "między wierszami" :D

    Piotrek

    PS
    Dlaczego nie formatujesz postów :?: Są mało czytelne :(
    Poczytaj o BBCode :D

Podsumowanie tematu

✨ Dyskusja dotyczy problemów z komunikacją mikrokontrolera ATmega8535 z telefonem komórkowym Eryk T10 przez interfejs RS232, realizowaną w Bascom AVR. Głównym zagadnieniem jest odczytanie mocy sygnału GSM za pomocą komendy AT+CSQ i wyświetlenie wyniku na LCD. Użytkownik napotyka na problem z buforem odbiorczym, który wydaje się być "zapychany" przez echo wysyłanych komend, co powoduje niestabilne działanie programu i niepełne odczyty danych. Wskazano, że telefon wysyła echo komend, które należy uwzględnić w obsłudze bufora. Bufor w Bascom jest buforem kołowym, a jego indeksy (_rs_head_ptr0 i _rs_tail_ptr0) można zerować, aby opróżnić bufor. Zmiana bitu CKOPT w fuse mikrokontrolera na odpowiednią wartość poprawiła stabilność działania komunikacji. Dyskutowano także o możliwości obsługi przerwań RX dla wykrywania sygnałów takich jak RING i CLIP, jednak zalecane jest monitorowanie bufora w pętli głównej ze względu na prostotę i ograniczenia zasobów. Podkreślono, że echo w terminalach PC jest niewidoczne, ponieważ terminal nie odbiera zwrotnie wysyłanych znaków, natomiast telefon faktycznie odsyła echo, co należy uwzględnić w oprogramowaniu. Bufory dla transmisji wejściowej i wyjściowej są oddzielne. Wskazano, że Bascom wymaga dokładnego czytania dokumentacji i testowania, a formatowanie postów ułatwia czytelność kodu i dyskusji.
Wygenerowane przez model językowy.
REKLAMA