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

[ATMEGA8][Bascom][uart] jak wyświetlić na LCD datę i godzinę

kkrisss 16 Lis 2009 22:36 2760 7
REKLAMA
  • #1 7270655
    kkrisss
    Poziom 11  
    Mam następujący problem. Chcę odczytać z telefonu Siemens C35 (oraz S35) datę i godzinę a następnie wyświetlić je na LCD. Najpierw próbuję odczytać "surowe" dane za pomocą kodu:

    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Config Lcd = 16 * 1a
    Config Lcdpin = Pin , Rs = Portc.3 , E = Portc.1 , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2
    Config Spi = Hard
    Config Serialin = Buffered , Size = 32
    
    Dim Todczyt As String * 16
    Dim Ttemp As String * 16
    Dim Kod As String * 16
    Dim Bufor As Byte
    
    Declare Sub Oproznij_bufor
    
    Enable Interrupts
    
    Cls
    Lcd "Odczyt czasu v.2"
    Cursor Off
    Wait 1
    
    'Print "ATE0" ; Chr(13)
    
    Do
    
    Print "AT+CCLK?" ; Chr(13) ;
    Gosub Oproznij_bufor
    Input Todczyt Noecho
    Ttemp = Mid(todczyt , 1 , 16 )
    Cls
    Lcd Ttemp
    Wait 2
    Cls
    Wait 1
    
    Loop
    
    Oproznij_bufor:
    Do
    Kod = Inkey()
    Bufor = Ischarwaiting()
    Loop Until Bufor = 0
    Return
    
    


    w odpowiedzi na lcd dostaję:



    robię jednocześnie podgląd na Hyper Terminalu i otrzymuję:

    AT+CCLK?        
    +CCLK: "08/12/15,18:40:57"                       
    
    OK  


    Do tego momentu wszystko zgodne z logiką.
    Następnie usuwam średnik z linii:
    
    'Print "ATE0" ; Chr(13)


    i zaczynają się jaja.

    Oczywiście echo z telefonu wyłączone, więc nie wraca "AT+CCLK?", tylko odpowiedź na Hyper Terminalu w postaci:
    
    
    +CCLK: "08/12/15,18:50:26"
    
    OK


    a na LCD najpierw ATE0 i dalej nic. Wynika to z tego, że przed odpowiedzią czyli ciągiem znaków +CCLK: "08/12/15,18:50:26" jest pusta linia, czyli coś jakby wstawia enter przed wysłaniem odpowiedzi. Kombinowałem już z usuwaniem średników i Chr(13) i nic.

    Podpowiedzcie mi gdzie popełniam błąd. Zaznaczam, że od dwóch tygodni próbuję coś znaleźć na forum ,ale nic mi nie pomogło, nawet kombinacje z Inkey.

    Telefon z uC mam podłączony na jednej linii poprzez rezystor i diodę 3V3 (6 ->3) a na drugiej (5->2) bezpośrednio

    P.S. Zumek proszę Cię, zanim usuniesz temat daj mi najpierw ostrzeżenie :-) Pozdrawiam.
  • REKLAMA
  • #2 7270742
    AVRowiec
    Poziom 18  
    W czym jest problem bo nie rozumiem?
    W tym że masz pustą linijkę przed odpowiedzią? Telefon zawsze tak odpowiada. Przed każdą komendą jest znak nowej lini a w innych przypadkach i <CR>.
    Nie znam bascoma (piszę w C bo bascom się nie sprawdzał właśnie w takich sprawach) ale nie wierzę że nie można sobie napisać prostej funkcji parsującej odebrane znaki, z tych gotowców lepiej czasem nie korzystać..
  • REKLAMA
  • #3 7270841
    kkrisss
    Poziom 11  
    Problem polega na tym, że jak wyłączę echo w telefonie (ATE0) to jako odpowiedź na uart dostaję w pierwszej kolejności pusty wiersz i dopiero w drugim wierszu interesującą mnie odpowiedź czyli +CCLK: "08/12/15,18:50:26" i właśnie to bym chciał wyświetlić na LCD (oczywiście na razie do 16 znaku bo taki mam wyświetlacz).

    Jak mam echo w telefonie włączone to w pierwszej kolejności dostaję tekst który został wysłany czyli AT+CCLK? a w drugiej (czyli w drugim wierszu) +CCLK: "08/12/15,18:50:26"

    Jednym słowem chciałbym otrzymać odpowiedź +CCLK: "08/12/15,18:50:26" w pierwszej linii lub odczytać drugą linię i wyświetlić ją na LCD podłączonym do ATMEGi.
  • REKLAMA
  • Pomocny post
    #4 7271139
    mirekk36
    Poziom 42  
    nie dostajesz z telefonu żadnego pustego wiersza tylko po prostu pojedyńczy znak ENTER. Innymi słowy mówiąc to, że telefon na polecenie:



    obojętnie czy jest wyłączone echo w telefonie za pomocą ATE0 czy nie

    odpowiada np tak:

    <CR>
    +CCLK: "08/12/15,18:50:26"
    <CR>


    to to jest całkowicie normalne. Tak samo na polecenie AT może odpowiedzieć telefon np tak:



    Przy czym nie ma tu reguły czy zawsze jest w odpowiedzi najpierw znak <CR> czy go nie ma - zależy od telefonu/modemu

    ale dla kogoś kto to obsługuje nie stanowi to najmniejszej różnicy tak samo jak nie stanowi to różnicy dla terminala w windows - on ci wszystko ładnie pokazuje ( a to, że tobie się wydaje, że nadleciała pusta linia jak piszesz to się tylko tobie wydaje - nadleciał <cr> czyli ENTER)

    Obsłuż to jakoś, zignoruj ten pierwszy ENTER i masz problem z głowy
  • #5 7271154
    xury
    Specjalista automatyka domowa
    I to jest problem ??
    Czyż pusty wiersz to nie jest CRLF ?
    Poczytaj angielski help o Config input i ustaw CRLF
    Po drugie aby odebrać drugą linie możesz zastosować tak
    Input Todczyt noecho      'ta pierwsza nie potrzebna pusta
    Input Todczyt noecho       'ta druga z danymi co Ci są potrzebne do parsowania
    

    I już masz swoje dane :)

    Po drugie po co Ci podprogram "czysc_bufor" ? jak masz coś takiego jak Clear serialin.

    Sorry nie wiedziałem że kolega mirek napisał post, ale w jednym się myli. Pusta linia to CRLF, co nie zmienia faktu o prostocie odczytu.
  • REKLAMA
  • #6 7271156
    kkrisss
    Poziom 11  
    Dzięki za wyjaśnienie. Jednak właśnie problem polega na tym, że nie znam rozwiązania na:

    Cytat:
    Obsłuż to jakoś, zignoruj ten pierwszy ENTER i masz problem z głowy


    Próbowałem zczytywać dalsze znaki (np. za pomocą mid kolejne "szesnastki") i nic. Za Chiny Ludowe nie mogę (nie umiem) przejść do drugiej linii.
  • #8 7271172
    kkrisss
    Poziom 11  
    xury napisał:
    Już masz powyżej to co chciałeś :)


    Zrobiłem wstępny test z powtórzeniem Input i już są pierwsze pozytywne efekty. Niestety dzisiaj już nic więcej nie zrobię, ale jutro postaram się Was poinformować o postępach.

    Dzięki za dotychczasową pomoc

    Dodano po 22 [minuty]:

    Nie wytrzymałem do jutra i dzisiaj sprawdziłem czy wszystko działa po mojej myśli. Dusza moja się raduje, bo o to właśnie mi chodziło.

    Jeszcze raz dziękuję za pomoc w rozwiązaniu mojego problemu.
REKLAMA