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

[Bascom] (RX) programowy. Co jest nie tak w kodzie?

PiotrEtenM500 14 Kwi 2009 15:26 3568 31
  • #1 6413325
    PiotrEtenM500
    Poziom 19  
    Co tu jest nie tak?
    ta sama skladnia na sprzetowym UARTcie dziala dobrze
    dane idą z GPS odczytuje je na LCD
    zamiast kodów własciwych ASCII, otrzymuje krzaki

    
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Cursor Off
    Cursor Off Noblink
    
    
       Dim Odebraneznakiascii As String * 20
       Dim Rs As Byte
    
    
    Open "comc.3:4800,8,n,1," For Input As #1
    
    Do
    
               Rs = Inkey(#1)
               Odebraneznakiascii = Chr(rs)
               Lcd Odebraneznakiascii
    
    Loop
    Close #1
    
    
  • #2 6413701
    dawid512
    Poziom 32  
    Zmieniałeś fuse bity na 8MHz?
  • #3 6413710
    PiotrEtenM500
    Poziom 19  
    oczywiście
    problem w tym ze na sprzetowym działa normalnie programowy otwieram i sa krzaki

    Dodano po 4 [minuty]:

    Z terminala wysyłam dane i otrzymuje wynik:
    wysyłam znaki Dom na LCD mam D[)
    wysyłam znaki Juz na LCD mam J`j
    itd....
  • #5 6414614
    PiotrEtenM500
    Poziom 19  
    Kwarc 8MHz i kondensatory 33p
  • #6 6415595
    dawid512
    Poziom 32  
    Masa uc i PC wspolna? Dodaj lekkie opóźnienie do pętli oraz zainicjalizuj LCD przed pętlą.
  • #7 6416605
    PiotrEtenM500
    Poziom 19  
    Tak masy są wspólne

    Zrobiłem prosty zegarek GPS
    i....

    Tak nie działa

    
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    '$baud = 4800
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Cursor Off
    Cursor Off Noblink
    'Enable Serial
    
    
        Dim A1 As String * 12
        Dim K3 As String * 82
        Dim K4 As String * 80
        Dim K5 As String * 82
        Dim K6 As Byte
        Dim Z As Byte
    
    
    Open "comc.3:4800,8,n,1" For Input As #1
    
    
    Cls
    A1 = "$GPGGA"
    
         Do
    
    ' ****************************** Składa zmienną ********************************
             Do
    
                K6 = Inkey(#1)
                If K6 = 13 Then Exit Do
                K3 = K3 + Chr(k6)
    
             Loop
    ' ************************** Szuka ramki "$GPGGA" ******************************
    
             Z = Instr(k3 , A1)
             K4 = Mid(k3 , Z , 6)
    
    ' ********************* Odczytuje z ramki czas *********************************
    
                If K4 = "$GPGGA" Then
                 K5 = Mid(k3 , 9 , 6)
                End If
    
             K3 = ""
    ' ************************* Wyświetla wynik ************************************
             Locate 1 , 1
             Lcd K5
    
         Loop
    
    Close #1
    
    End
    



    a tak działa prawidłowo:

    
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 4800
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Cursor Off
    Cursor Off Noblink
    Enable Serial
    
    
        Dim A1 As String * 12
        Dim K3 As String * 82
        Dim K4 As String * 80
        Dim K5 As String * 82
        Dim K6 As Byte
        Dim Z As Byte
    
    
    'Open "comc.3:4800,8,n,1" For Input As #1
    
    
    Cls
    A1 = "$GPGGA"
    
         Do
    
    ' ****************************** Składa zmienną ********************************
             Do
    
                K6 = Inkey()
                If K6 = 13 Then Exit Do
                K3 = K3 + Chr(k6)
    
             Loop
    ' ************************** Szuka ramki "$GPGGA" ******************************
    
             Z = Instr(k3 , A1)
             K4 = Mid(k3 , Z , 6)
    
    ' ********************* Odczytuje z ramki czas *********************************
    
                If K4 = "$GPGGA" Then
                 K5 = Mid(k3 , 9 , 6)
                End If
    
             K3 = ""
    ' ************************* Wyświetla wynik ************************************
             Locate 1 , 1
             Lcd K5
    
         Loop
    
    'Close #1
    
    End
    
    



    nie ma znaczenia czy podłacze GPS czy terminal przy programowym UART'cie krzaczy, osylator ustawiłem na 8MHz "100100" przewody maja nie wiecej niz 10cm, podmieniałem ATMegi, probowałem roznych predkości, co ciekawe odczytuje tylko poprawnie pierwy znak reszta jest zamieniona, zanki zasze sa takie same nie ma tu przypadkowości, INWERT tez probowałem nic nie poprawia tylko krzaki inne.
  • #8 6416634
    Konto nie istnieje
    Poziom 1  
  • #9 6416677
    PiotrEtenM500
    Poziom 19  
    Juz to sprawdzałem efekt ten sam pierwszy bajt poprawny pozostałe to krzaki przy 2 STOP zmienia sie tylko krzak

    Dodano po 6 [minuty]:

    Co masz na myśli z konfiguracją programowego
    czy to jest mało?

    
    Open "comc.3:4800,8,n,1" For Input As #1
    
    
    


    z terminala wysyłam tą samą konfiguracje

    GPS domyślnie ma tez 4800,8,n,1
  • #10 6416715
    Konto nie istnieje
    Poziom 1  
  • #11 6416727
    PiotrEtenM500
    Poziom 19  
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1, Databits = 8 , Clockpol = 0
    sprzetowy tez konfigurowałem, jest zgodny z GPS wiec nie wpisuje
  • #12 6416746
    Konto nie istnieje
    Poziom 1  
  • #13 6416751
    PiotrEtenM500
    Poziom 19  
    zwróć uwagę ze w napisamym testowym programmie nie ma LCD

    
             Do 
    
                K6 = Inkey(#1) 
                If K6 = 13 Then Exit Do 
                K3 = K3 + Chr(k6) 
    
             Loop 0
    


    jest za pentlą

    sprawdzam czy nadaje
    za chwile powiem co wychodzi z atmegi
    łatwiej terminalem ustalic parametry wchodzace moze tu jest fakrycznie problem
    To co piszesz jest logiczne
    zwrociłem uwage na to ze zanki sa w odpowiedniej ilosci tylko zamienione podpisane pod inne zawsze takie same

    Dodano po 9 [minuty]:

    odbieram dane z GPS i kolprtuje do GSM
    potrzeba mi w takim zestawieniu 2*RX i 1*TX
    probuje zrobic to na ATM8, choc poczatkowo chcialem na 162V
    mam bardzo malo miejsca na plytce i 162'ojka nie miesci sie dlatego walcze ze sprzetowym
    na czas pobierania danych z programowego moge wyłaczyć sprzetowy i odwrotnie zmienna tylko bedzie wędrować do wysłania

    Dodano po 4 [minuty]:

    Hymmmm

    teraz to juz całkiem zbaraniałem

    nadaje z Atmegi do terminala na 4800,8,n,1 i ok terminal odbiera dane prawidłowo!!!

    co jest grane z odbiorem!!!



    
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Cursor Off
    Cursor Off Noblink
    
    
    Open "comc.3:4800,8,n,1" For Output As #1
    
             Do
                 Print #1 , "DOM"
                 Wait 1
             Loop
    
  • #14 6416817
    Konto nie istnieje
    Poziom 1  
  • #15 6416869
    PiotrEtenM500
    Poziom 19  
    Niechce ale mogę wyłaczyć sprzetowy
    myślałem nad współdzieleniem portu ale nie mam miejsca na płytce całe urzadzenie mieszcze na laminacie 36mmx36mmx11mm wyknanym w SMD miesci sie tam moduł GSM, GPS, układy wykonawczy, elementy pasywne, akumulator, 2 anteny, wiec ciasno, chce upchac ATM8(SMD) bo brakuje mniejsca na kwarc stosujac ATM162V(SMD), malo tego na plytce jest konwerter napiec dla GSM 3,7V dla GPS 2,7V, sciezki maja po 0,2 mm, trudne wyzwanie ale walcze, idealnym wydaje mi sie RX programowy dla odbioru danych z GPS.
    Próbowałem fizycznie podłączyć TXy modułów do RX atmegi, ale nie działa bo i nie moze.
  • #16 6416922
    Konto nie istnieje
    Poziom 1  
  • #17 6416979
    PiotrEtenM500
    Poziom 19  
    Ten sam zestaw krzaków, nie mam to wpływu
    do PC idzie przez MAX2322 moze tu jest cos nie tak
    ale z GPS idzie bezposrednio
  • #18 6417015
    Konto nie istnieje
    Poziom 1  
  • #19 6417026
    PiotrEtenM500
    Poziom 19  
    Jest tak:
    działa na 300 bodów - terminal 300 i atmega 300
    działa tylko wtedy gdy niema <CR>
    pojawiene sie <CR> powoduje zatrzymanie transmisji do czasu otrzymania 2 innych bajtów powyzej zanku 32 tablicy ASCII
    Wiec wyglada na to ze port sie nie wyrabia
  • #20 6417036
    Konto nie istnieje
    Poziom 1  
  • #21 6417043
    PiotrEtenM500
    Poziom 19  
    Tak sprawdziłem cały PortC, zmienia sie zestw krzaczków
  • #22 6417063
    Konto nie istnieje
    Poziom 1  
  • #23 6417091
    PiotrEtenM500
    Poziom 19  
    Masz rację trzeba

    zapisałem do tablicy to co przychodzi do Atmegi.
    znaki ponieważ są stałe dla konkretnej prędkości, przypisałem do danych.
    czyli prosty konwerter. Wygląda to tak:
    z wyjątkiem pierwszego bajtu resztę trzeba konwertować
    i tak
    wysyłam z terminala 'Juz"
    znak z portu J pozostawiam
    znak z portu "]" zamieniam na "u"
    znak z portu "^" zamieniam na "z"
    i na lcd jest jak należy :)

    tyle ze nie mam miejsca w atmedze na konwersje wszystkich znaków

    wniosek z tego taki ze kazda prędkość ma wlasna tablice znaków
    błąd Bascoma?
    czy jest coś co niezawiera manual?

    przy kodzie w asemblerze brak transmisji
  • #24 6417123
    Konto nie istnieje
    Poziom 1  
  • #25 6417125
    PiotrEtenM500
    Poziom 19  
    tj pętla w asemblerze nie oddaje znaku.
  • #26 6417136
    Konto nie istnieje
    Poziom 1  
  • #27 6417147
    PiotrEtenM500
    Poziom 19  
    żle napisałem :) nieodbiera, a moze odbiera ale nie wychodzi z pętli
  • #28 6417152
    Konto nie istnieje
    Poziom 1  
  • #29 6417170
    PiotrEtenM500
    Poziom 19  
    tkwi w pętli i nie idzie dalej

    Dodano po 1 [minuty]:

    lds R16, {K6}
    cpi R16, 13 ' tu ma znak konca ale go nie widzi:) i nie wychodzi
    breq Loop_end
  • #30 6417223
    Konto nie istnieje
    Poziom 1  
REKLAMA