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

Problem z BASCOMem i rs232 (AVR)

jasques 01 Gru 2004 00:03 2487 16
  • #1 1026478
    jasques
    Poziom 11  
    Witam,

    proboje podlaczyc AVR'a z komputerem, wiem ze elektronika dziala, oscyloskopem sprawdzilem i transmisja idze, max232 tez sie wykazuje. Jednak w HyperTerminal'u nic sie nie wyswietla. predkosc to 9600 kwarc 4MHz a proc. AT90S2313-4SC. Do drukowania urzywam standardowego print'a ze zmienna typu string jako parametr (probowalem tez print "jakis napis" ale tez nie dziala) w BASCOMie.

    Z gory dziekuje za pomoc.
  • #2 1026945
    yarpen2
    Poziom 22  
    narysuj schemat, daj kawałek kodu - inaczej trudno coś doradzić...
  • #3 1027052
    ozman
    Poziom 21  
    Są 2 mozliwości złego działania:

    -Kabel - źle wykonany bo pamiętaj że trzeba scrossować sygnały 2-3 i odwrotnie a masa to 5.

    -Prędkość portu (baud) na terminalu musu być taka sama jaką wkompilowałeś w program a reszta standardowo bity stopu 1 bez parzystości bity odbioru 8 itd.
  • #4 1027098
    jasques
    Poziom 11  
    Schematu nie ma co rysowac, normalne podlaczenie avr'a max'a 232 i wtyczki com. Wszystko to juz sprawdzilem, na odpowiednich pinach jest przesyl. A to ze predkosc musi byc taka sama to jest juz chyba oczywiste dla kazdego...

    A program:
    $crystal = 4000000
    $baud = 9600

    Config Serialin = Buffered , Size = 8
    Declare Sub Co(byref Name As String , Byref Wynik_co As String)
    Declare Sub Ile(byref Name As String , Byref Wynik_ile As Byte)

    'dim a variable
    Dim Name As String * 8
    Dim X As Byte , Count As Byte , Wynik_ile As Byte
    Dim Temp As String * 3 , Wynik_co As String * 2
    Dim Tmp As String * 4

    Enable Interrupts


    Begin:
    Name = ""
    Count = 0

    Do
    If Count = 8 Then 'jezeli zapelnilismy bufor to idz do sprawdz
    Goto Sprawdz:
    End If

    X = Inkey()
    If X <> 0 Then 'czy cos wpadlo?
    Name = Name + Chr(x) ' dolacz do name
    Count = Count + 1 'inkrementuj licznik
    End If

    Loop

    Sprawdz:
    Count = 0
    Call Co(name , Wynik_co)
    Call Ile(name , Wynik_ile)

    Print Wynik_co
    Print Wynik_ile

    Name = "" 'reset bufora
    Count = 0 'reset licznika
    Goto Begin
    End 'end program


    Sub Co(byref Name As String * 8 , Wynik_co As String * 2)
    Tmp = Left(name , 1)
    If Tmp = "1" Then
    Print "OK"
    Tmp = Left(name , 3) 'co?
    Tmp = Right(tmp , 2)
    Wynik_co = Tmp
    Else
    Wynik_co = "er"
    End If
    End Sub

    Sub Ile(byref Name As String * 8 , Byref Wynik_ile As Byte)
    Tmp = Left(name , 4) 'na ile?
    Tmp = Right(tmp , 1)
    Wynik_ile = Asc(tmp)
    End Sub
  • #5 1027165
    ozman
    Poziom 21  
    A może sprawdzić poprawność komunikacji programem typu

    $crystal = 4000000
    $baud = 9600
    enable interrupts
    dim a as byte
    echo on
    begin
    print "Dziala"
    wait 1
    input a
    waitms 10
    print a
    wait 1
    loop
    end

    Banalny ale musi działać i sprawdzi koledze komunikację w obie strony.
  • #6 1027198
    jasques
    Poziom 11  
    no i niestety nic... Nie dziala :( juz naprawde zaczynam watpic ze to moze ruszyc... Najgorsze jest to ze widze na oscyloskopie ,ze sygnal idze z komputera ale teraz z tym programem nie dostajze zadnych odpowiedzi... (tzn. begin zmienilem na "do" ale to drobiazg...) To zdjecie przebiegu wyjsciowego z max'a...
    Chwyce sie troche jak "tonacy brzytwy" ale jezeli ktos mogl by mi podeslac opis podlaczenia wtyczki do komputera, patrzac na nia od tylu.
    Problem z BASCOMem i rs232 (AVR)
  • #7 1027514
    Xitami
    Poziom 29  
    Sprawdź ustawienia terminala, wyłącz "sprzętową kontrolę przepływu" czy jak to się tam nazywa
  • #9 1027882
    jasques
    Poziom 11  
    terminal jest ustawiony dobrze, 9600 bez parzystosci, jeden bit stopu i bez kontroli przeplywu. Czy ktos juz doswiadczyl takich problemow z polaczeniem czy to powinno dzialac odrazu?
  • #10 1027912
    yarpen2
    Poziom 22  
    czy ty jesteś jasques pewien działania twojego programu ?

    Jeśli wszystko połączyłeś jak radzą koledzy to powinno być o.k.

    Najprościej to sprawdzić pisząc na procku program który ciągle coś tam wysyła (np. ciągle ci będzie wysyłał literkę 'A' ) wtedy jeśli na kompie to odbierzesz to znaczy że jeden kierunek ci działa i pozostanie sprawdzić drugi kierunek. Procek może wtedy czekać na znak i go odsyłać z powrotem.

    Masz przecież oscyloskop więc zrób z niego użytek.
  • #11 1027914
    LordBlick
    VIP Zasłużony dla elektroda
    a moze po prostu zacząć od programiku, w kostce, wysyłającego dane bez sprawdzania, co przychodzi? Czy wtedy coś się pojawia na terminalu ? Można też próbować ustawiać rejestr UBBR na 25 ręcznie.
  • #12 1028269
    ozman
    Poziom 21  
    Skoro oscyloskop wskazuje ze procek coś wysyła to nie ma bata musi działać komunikacja.Nich się kolega niebawi w ustawianie rejestru bo po zwykłym poleceniu print powinno zadziałać.

    Ja dalej obstawiam że kolega ma kabel źle zrobiony. Naprawde można się pomylić robiąc kabelek z opisu bo zależy jak się spojrzy na COM czy od strony wtyczki czy gniazda.
    Dlatego proponuję zamienić RX z TX dla próby.
  • #13 1028321
    jasques
    Poziom 11  
    Oczywiscie ze juz dawno napisalem program ktory drukoje pojedynczy znak w petli. Program rozumiem, a i oscyloskop tez potrafie urzyc. W "symulatorze" wszystko dziala, jednak w rzeczywistosci dno... Juz lutowalem te kable na wszystkie mozliwe ( w granicach rozsadku oczywiscie ) sposoby i dalej nic... Juz nawet sprawdzalem COM'a w komputerze ale ten jednak dziala z innymi urzadzeniami... No chyba sie poddam wkoncu i zainwestuje w conwerter USB --> TTL .... :(
  • #15 1075255
    Tarf
    Poziom 11  
    Miałem taki sam problem i nie wiem dlaczego przy ustawieniu w Bascomie predkosci na 9600 dane w terminalu były poprawne dopiero przy zmniejszeniu (w temninalu ) prędkości na 1200.
  • #16 1089677
    Jaca
    Poziom 31  
    Spróbuj użyć kwarcu 3.6864 MHz lub 7.3728 MHz (lub innych, typowych do transmisji szeregowej).
  • #17 1097857
    PIOTOM0
    Poziom 20  
    Hej.
    Zmień kwarc na 11.0592 MHz.
    Nigdy nie miałem z nim problemów - działa pod wszystkimi AVR-ami choć nie jest polecany a wręcz nie występuje w nocie katalogowej:)
    U mnie działa bez problemu.

    Piotom0
REKLAMA