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

[Bascom] Brak połączenia pomiędzy Siemens c35 a atmega16

peter507 03 Lip 2009 12:01 2673 20
REKLAMA
  • #1 6733963
    peter507
    Poziom 16  
    Tak jak w temacie. Od kilku dni próbuje połączyć się przez RS'a z modemem w telefonie siemens c35 próbowałem już róznych prędkości transmisji nic nie dawało tyle że na najniższych prędkościach działało jakby echo czyli taką komendę jaką wysyłaliśmy taka wracała przez polecenie input. Na wyższych prędkościach program stoi na poleceniu input. Juz nie wiem co próbować, jeszcze dodam że próbowałem na TX'ie przez diode 3,3v i rezystor. Poniżej kod programu [tylko do testów]:

    $regfile = "m16def.dat"
    Baud = 19200
    $crystal = 16000000
    Enable Interrupts
    Dim Odbior As String * 3
    Odbior = ""
    Config Serialin = Buffered , Size = 2
    Open "com1:19200,8 , N , 1, inverted"
    Lcd "napis"
    Wait 1
    Cls
    Do
    If Pina.0 = 0 Then
    Print "at+csq"
    Lcd "poszlo"
    Wait 1
    Input Odbior
    Lcd Odbior
    Waitms 700
    Cls
    End If
    Loop
    End
  • REKLAMA
  • #2 6734237
    wicy
    Poziom 22  
    Ja na linii TX(uP)->RX(komórka) mam dzielnik na dwóch rezystorach i taki kod działa w obie strony


    
    $regfile = "m16def.dat" 
    Baud = 19200 
    $crystal = 16000000 
    
    On Urxc odbierz
    Enable URXC
    Enable Interrupts 
    
    Dim Odbior(3) As Byte
    Dim Index As byte
    Dim odebrano_dane as bit
    Dim I as byte
    
    index=1
    odebrano_dane=0
    
    Lcd "napis" 
    Wait 1 
    Cls 
    Do 
    If Pina.0 = 0 Then 
    Print "at+csq" ; chr(13)
    Lcd "poszlo" 
    Wait 1 
    End If
    
    id odebrano_dane=1 then
    odebrano_dane=0
    cls
    lcd "odebrano ";
    for i=1 to 3
       lcd chr(odbior(i));
    next i
    Loop 
    End
    
    odbierz:
    odbior(index)=Udr
    if index>3 then
    index=1
    odebrano_dane=1
    end if
    return
    
  • REKLAMA
  • #3 6734593
    peter507
    Poziom 16  
    a jaki ten dzielnik ??
  • #4 6734623
    wicy
    Poziom 22  
    Dwa rezystory dobrane eksperymentalnie :) dzilące 5V na circa 3,3V i 1,7V -nie pamiętam nawet wartości i nie wiem, czy uda mi się zajrzeć, bo są w pająku zalane klejem w miejscu baterii a c35 przykręcony do urządzenia :(
    Jeśli muszę to może uda mi się podejrzeć wieczorem.
  • #5 6734642
    peter507
    Poziom 16  
    id odebrano_dane=1 then
    odebrano_dane=0
    cls
    lcd "odebrano ";
    for i=1 to 3
       lcd chr(odbior(i));
    next i 


    Domniemam że end if ma być na końcu po next i tak ? jeśli tak to nie działa ale nie mam dzielnika
  • #6 6734692
    wicy
    Poziom 22  
    Sorry, ale piszę z pamięci w pracy. Oczywiście end if po next.
    Pod wieczór sprawdzę dzielnik.
    Zwiększ jeszcze znacznie bufor odbioru, bo c35 odpowiada długimi łancuchami np. CR/LF CR/LF OK CR/LF CR/LF. Najkrósza odpowiedź na AT+xxx=? ma więc z 10 bajtów.
  • REKLAMA
  • #7 6734753
    peter507
    Poziom 16  
    zaraz zwiększe i sprawdze. dzielinik już dobrałem na 1k i 2k i daje ok 3,3v

    dałem zmienną odbiór 20 bajtów niestety nic nie dało. Wyświetla napis poszło ale nie widze na lcd żandej innej treści
  • #8 6734770
    wicy
    Poziom 22  
    Jak zasilasz komórkę? Ja dałem VCC i GND układu bezpośrednio na wąsy baterii (bez baterii). Nie dawałem wtedy GND na wyjście wtyczki.
  • REKLAMA
  • #9 6734773
    peter507
    Poziom 16  
    komórka z baterii teraz lata

    niestety dalej nie śmiga :/
  • #10 6735260
    wicy
    Poziom 22  
    Rozebrałem układ i wygląda on tak:
    [Bascom] Brak połączenia pomiędzy Siemens c35 a atmega16

    Kod programu (w części dot. USART):
    
    $regfile = "m16def.dat"
    $crystal = 8000000
    $hwstack = 128                                          
    $swstack = 128                            
    $baud = 19200
    
    '- zmienne uart ----------------------------------------------------------------
    Dim Buf(200) As Byte
    'Bufor odbioru danych z rejestru UART
    Dim Tekst As String * 16
    Dim Maxchar As Byte
    Dim Index As Byte
    'numer kolejnego bajtu odebranego przez uart
    Dim Odebrano As Boolean
    'flaga ustawiana gdy odebrano przez uart 5 bajtów i zapisano do bufora Bufor()
    
    '- konfiguracja USART ----------------------------------------------------------
    On Urxc Odbierz
    'Ubrr = 207                                                  '4800 bps przy U2X=0
    'Ubrr = 51                                                   '19200 bps przy U2X=0
    'Ucsra = &B00100000                                          'rejestr UCSRA
    'Ucsrb = &B10011000
    'Ucsrc = &B10000110
    Enable Urxc
    Enable Interrupts
    Maxchar = 200
    Index = 1
    Odebrano = 0
    
    do
    'przykladowa obsluga guzika
       If Sw3 = 0 Then
          Led_b = 1
          Print "AT+CMGR=1" ; Chr(13)
          Waitms 500
          Led_b = 0
       End If
    
       If Odebrano = 1 Then
          Odebrano = 0
          Cls
          For I = 18 To 34
            Lcd Chr(buf(i)) ;
          Next I
          Lcd Index
          Index = 1
       End If
    loop
    end
    
    Odbierz:
       If Index <= Maxchar Then
          Incr Index                                            'zwiększamy licznik o jeden
          Buf(index) = Udr
    'tu rozpoznaje ostatnie bajty odpowiedzi <CR>OK do wycięcia w dalszej obrobce tekstu bufora
          If Buf(index) = 13 Then
             If Buf(index -1) = 75 Then
                If Buf(index -2) = 79 Then
                   Odebrano = 1
                End If
             End If
          End If
       Else
          Odebrano = 1
          Index = 1
       End If
    Return
    


    Spróbuj tego schematu z wyjętą baterią.
  • #11 6735510
    peter507
    Poziom 16  
    dzielnik mam tak podłączony a ten program nie działa. Masz może dokładnie tą wersję która działa w twoim urządzeniu ?
  • #12 6736080
    wicy
    Poziom 22  
    Wysłałem ci cały kod, choć reszta jest nieistotna a najważniejsze procedury to te tu podane.
    Nie każ mi kręcić filmu żeby udowadniać że działa bo nie mam za specjalnie czym :D

    Ot, cały interfejs i urządzonko
    [Bascom] Brak połączenia pomiędzy Siemens c35 a atmega16[Bascom] Brak połączenia pomiędzy Siemens c35 a atmega16

    Na wyjętej baterii też nie działa?
  • #13 6736339
    peter507
    Poziom 16  
    baterii nie wyciągałem jeszcze, ale to nie powinno mieć znaczenia, wszsytkie masy połączone są. Wierze że działa bo wszystkim działa tylko nie mi ;/
  • #14 6736371
    wicy
    Poziom 22  
    Nie wiem czemu, ale może mieć znaczenie. Ja przy wsadzonej baterii i 3 liniami wpiętymi we wtyczkę na tym samym dzielniku miałem notoryczne "szukam sieci".
  • #15 6736407
    peter507
    Poziom 16  
    zmieniło się to wtedy gdy we wtczyce odpiąłeś mase, a dałeś zamiast baterii zasilanie tak ? i w urządzeniu wykorzystujesz ten drugi program co podałeś tak ?

    a cóz to jest?
    'Ubrr = 207                                                  '4800 bps przy U2X=0
    'Ubrr = 51                                                   '19200 bps przy U2X=0
    'Ucsra = &B00100000                                          'rejestr UCSRA
    'Ucsrb = &B10011000
    'Ucsrc = &B10000110


    Czy ten drugi program korzysta ze sprzętowego UART'a ?
  • #16 6736465
    wicy
    Poziom 22  
    Tak, na wtyczce mam tylko 2 linie (bez masy). Dokładnie jak na schemacie.
    Program działający to ten z PW. Linie "wyremowane" możesz pominąć. I bez nich program działa.
    Kawałek kodu, o który pytasz to konfiguracja UARTa. Możesz ją pominąć. Po szczegóły sięgnij do noty. Program leci na sprzętowym UART. Chyba nie pomyliłeś pinów??
  • #17 6736482
    peter507
    Poziom 16  
    nie no piny ok ;p

    Dodano po 8 [minuty]:

    Ten pierwszy program powinien działać ale wydaje mi się że przerwanie nie działa, bo jak zwarłem rx z tx'em to nie przyszło nic nic nie odebrało przerwanie
  • #18 6736590
    wicy
    Poziom 22  
    Spróbuj jeszcze raz po odremowaniu
    Ucsrb = &B10011000 - włacza RX i TX
  • #19 6736633
    peter507
    Poziom 16  
    dodałem to do tego pierwszego programu i nic
  • #20 6736669
    wicy
    Poziom 22  
    No to pomysły mi się skończyły. Sprawdź wszystko dokładnie od zera. Kwarc, fusebity, połączenia. Może sprawdź najpierw program z PC, a potem podepnij c35.
  • #21 6736734
    peter507
    Poziom 16  
    tak zrobie ale to jutro, ogólnie wielkie dzięki za pomoc !
REKLAMA