Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Transmisja szeregowa RS232, komp - mikro, bascom

starter 14 Mar 2004 19:55 13513 29
  • #1 14 Mar 2004 19:55
    starter
    Poziom 10  

    Mam pytanie, bo juz tydzien mysle i nie moge dojsc do bledu. Otoz proboje zrealizowac tranimsje miedzy kompem a mikrokontrolerem AT90S8535, dokladnie tak jak bylo opisane w EDW komputer PECEL. Wszystkie transmisje sa ustawione tak samo np 2400, errorlevel sprwadzony <0.2% . Port Com sprawdzony innym urzadzeniem, i terminal pokazuje ze dziala, bity stopu, parzystosci itp. wszystko ustawione. Mikrokontroler nadaje np jeden znak albo jaksi tekst.
    wg ponizszego kodu

    $regfile = "8535def.dat"
    $crystal = 8000000
    $baud = 2400

    Do
    Print "Dlaczego nie chcesz dzialac :("
    waitms 100
    Loop

    Oscyloskop pokazuje (analog ) ze cos jest niby transmitowane, potem jest max 232, konwersaj napiec dziala bo oscyloskop znow pokazuje dobrze(-12V,12V). A na kompie CISZA :(, odwrotnie takze ine dziala np
    wykorzystanie komedy INPUT, powoduje zatrzymanie procesora (nie reauje an znak) , bo probowalem np z jednegomikrokonrolera nadawac, drugim odbierac z pominieciem MAX232, bezsposrednio od PD1 do PD0 i tez nie dziala :( Wszystkie przerwania wlaczam np

    $regfile = "8535def.dat"
    $crystal = 8000000
    $baud = 2400

    Enable Interrupts

    Enable Urxc ' Serial RX complete interrupt
    Enable Udre 'Serial data register empty interrupt
    Enable Utxc 'Serial TX complete interrupt
    Enable Serial
    Do
    Input A
    Lcd A
    Loop


    i tez nic. :( Gdzie kurcze robie blad? :( Kable zmienialem sto razy, coma tez , procesory tez :))

    0 29
  • #2 16 Mar 2004 09:17
    wasi
    Poziom 12  

    Wykożystam okazję i dołączę się do wątku gdyż mam podobny problem.

    Ja wykożystuje AT89C2051, MAX232 (schemat aplikacyjny, podstawowy z dokumentacji) i kabelkiem do COMa. Od tygodnia z tym walcze i nic. Transmisje dla odmiany mam ale jaką.

    Jak klikam '=' na terminalu PC to na wyświetlaczu LCD dowiaduje się że procek otrzymał 'a', dla wysłanego 'a' dostaje 'O' itp. transmisja jest stabilna znaczy za każdym razem dostaje to samo. I nie potrafie do tego celu wykożystać innej instrukcji niż waitkey lub inkey bo pozostałe wogóle nie reagują.

    To w jedną stronę a w drugą znaczy do PC, PRINT wogóle nie gada. Jak gdzieś w kodzie znajdzie się INPUT i nie podam NOECHO to echo działa dobrze - to co PC wyśle to i dostanie. Ale nic poza echo się nie dzieje. Procek nie sygnalizuje odebrania znaku.

    Sprawdzałem prędkości, liczby bitów,, stopu. Podłączałem do dwóch kompów, zamieniałem linie w kabelku RX z TX, wymieniłem MAX232, procka i nic. Nie wiem co dalej sprawdzić.

    Jak to zrobić żeby działało ?? Jak powinien wyglądać najprostrzy program. Jak właściwie podłączać MAXa.

    Zamierzeniem było wykożystanie wbudowanego UARTa nie softwarowego.

    0
  • #3 16 Mar 2004 09:41
    rzuber
    Poziom 20  

    MAXA 232 odłączamy następująco:


    A co do problemów z transmisją to upewnij się, że masz dobrze skonfigurowany Terminal [odpowiedni com, odpowiednia prędkość transmisji,ilość bitów ].

    0
  • #4 16 Mar 2004 16:18
    wasi
    Poziom 12  

    tak tak.
    No własnie chodzi o to że wszystkie parametry transmisji są ustawione w terminalu tak jak zawsze ustawiałem ale zawsze możesz przytoczyć jak się powinno ustawić terminal dla komunikacji z 89c2051 i podobnymi prockami bo coma juz ustawilem na com1 bo innego nie mam :)

    0
  • #5 16 Mar 2004 16:27
    rzuber
    Poziom 20  

    Sprawdź jeszcze jak wyglada stopa błędu dla tego kwarcu i tej szybkości.

    1
  • #6 16 Mar 2004 16:34
    wasi
    Poziom 12  

    Jeszcze nie wiem co oznacza obliczenie błędu generowania Baudrate.
    W moim przypadku sprawa jest prosta bo stosuje
    ...
    Baud Timer : 1
    Baudrate : 2400
    Frequency : 11059200
    ...

    a taka prędkość przy takiej częstotliwości jest chyba dokładnie wyliczana ale nie wiem.

    Tak patrząc na dołączony schemat nasuwa mi się pytanie czy konieczne są "te zworki na samym COMie"?? czy bez nich komunikacja ma prawo działać jeśli jest ustawione na terminalu "Brak kontroli przepływu" ??

    0
  • #7 16 Mar 2004 17:18
    starter
    Poziom 10  

    Witam , mam nadzieje ze twoj problem polega na tym ze dla kwarcu 11.059Mhz nie mozna ustawic transmisji 2400bps , dlatego ze do rejestru UBRR musialbys wpisac 287 a to nie jest mozliwe. Przejzyj dokladine w tym celu pdfa atmela. Sproboj na innej predkosci, a tak a propos jesli chodzi o blad dla twojego kwarcu wynosi on zawsze 0% dla wszytkich standardoych predkosci transmisji danych :) Mam nadzieje ze Ci zadzaiala, a jesli nie ,to coz meczymy sie razem dalej :(

    Jeszcze chcaielm zapytac odnosnie schematu wyzej , w EDW w MAX232 na schemacie sa uzyte wszedzie kondensatorki 4.7uF a nie 10uF , z kolei w Pdfie Max zalecane wartosci sa 1.0uF , hmmm , czy ma to znaczenie ? (pewnie jakies ma , ale czy znaczace?) Moze to byc powodem tego ze komputer jest gluchy i slepy? :( Raczej osobiscie watpie) . Po za tym na tym rysunku wyzej jest blad, kondensator ktory jest miedzy VCC i V+ jest narysowany odwrotnie (zamieniiony plus z minusem). :) No ale co ja sie bede wymadrzal , w koncu to mi nie chce to dzialac :(

    Pozdrawiam :)

    0
  • #8 16 Mar 2004 17:29
    fantom
    Poziom 31  

    Ja uzywam 1u i tez dziala :lol:

    0
  • #9 16 Mar 2004 17:35
    rzuber
    Poziom 20  

    Schemat, który zamieściłem wykorzystuje u siebie w pracy dyplomowej i jest jak najbardziej sprawdzony. Co do kondensatorów, to mogą być mniejsze oczywiście.
    Bardzo dziwna sprawa zatem ....
    Wygląda na to, że wszystko jest w porządku...
    Może błąd jest po stronie Hardare'u
    Posprawdzajcie dokładnie płytki. Czy polaryzacja kondensatorów jest ok i wogóle. Czy nie pomylone są wyprowadzenia. Najlepiej dać komuś do sprawdzenia. Zawsze swierze oko :) Nieraz można odwalić taką kiche... :) ze aż się głupio robi człowiekowi :)

    0
  • #10 16 Mar 2004 20:37
    wasi
    Poziom 12  

    Właśnie właśnie. Ten pomysł z kimś innym do sprawdzania mi się podoba :)
    Ja już wymieniłem w sumie wszystkie części (procek, max, kwarc, kabelek -dłuższy, krótszy, kompa, prędkości, program, INPUT, INKEY) i zawsze to samo. albo działa "inaczej" albo wcale.

    W moim układzie też zauważyłem że 2 kondensatorki miałem odwrotnie ale jak to poprawiłem to i tak się nic nie zmieniło więc chyba do samego działania nie ma to zasadniczego znaczenia może przy wyższych prędkościach transmisji.

    A jak to właściwie jest z obliczaniem wartości rejestru UBRR. Bo tak w ogóle to ciekawi mnie zakres możliwych prędkości transmisji dla tego procesora. Znaczy się... czy 19200 jakie oferuje BASCOM jest sztucznym ograniczeniem??

    0
  • #11 16 Mar 2004 20:42
    fantom
    Poziom 31  

    Tez miałem swojego czasu problem z RS-em w procu. W akcie desperacji myślałem, że już źle patrzę na końcówki z DB9, więc je zamieniłem. Nic. Dopiero wtedy sprawdziłem luty i się k.... zimny zrobił. Poprawiłem i znowu nic. Dobrze, że sobie przypomniałem o mojej "zamianie", no i zaczął działać :lol: Ale jeśli tobie działa z terminalem, a normalnie nie działa no to już jakieś czarodziejskie sztuczki. BTW: kondek C9 jest dobrze podłączony bo na V+ jest około +9V, może tu jest twój problem starter.

    0
  • #12 16 Mar 2004 22:04
    starter
    Poziom 10  

    Myslalem , ze jest odwrotnie na tym schemacie, bo odwotnie jest w nocie MAX232 i w schemacie z EDW i mysle ze i tym i tym na pewno dzialalo :) No ale nic , wezme zlutuje jeszcze raz wszystko od nowa i jak mi wtedy nie zadzialaaa, to stawiam browarexy, temu kto mi to uruchomi :)

    0
  • #13 16 Mar 2004 22:11
    fantom
    Poziom 31  

    Nie no jak.W nocie jest ok + idzie na V+ tak jak tutaj.Chyba kurde nie mam oczoplasu ? :lol:

    0
  • #14 16 Mar 2004 22:11
    rzuber
    Poziom 20  

    a sprawdzałes na większych szybkościach? 19200 albo 9600? dzieje się tak samo?

    0
  • #15 16 Mar 2004 23:27
    wasi
    Poziom 12  

    U mnie 19200 nic nie zmieniało :( a z pośrednimi nie próbowałem (to i może źle). Też jutro przelutuje wszystko :)

    0
  • #16 17 Mar 2004 10:12
    Piotrek1970
    Poziom 16  

    Podczas konfiguracji Bascom'a ustawia się prędkość transmisji i częstotlowiść rezonatora na jednej zakładce a kilka zakładek dalej ustawia się parametry terminala, jak to ustawisz nie powinieneś mieć problemu po prostu musi działać. Co do kondensatorów to działają one w układzie powilania napięcia i przy niektórych prędkościach zbyt duża pojemność kondensatora może być powodem zbyt niskiego napięcia na "końcówkach" w kierunku do PC. Ja od dłuższego czasu stosuje 1uF ceramiczny SMD w obudowach 1206 zajmuje to mało miejsca i zawsze działa.

    p.s.: TXD z uP do RXD w PC ma się rozumieć ;-) i analogicznie w drugą stronę.

    0
  • #17 17 Mar 2004 12:17
    szymtro
    Poziom 30  

    Proponuję wyciągnąć procesor z podstawki i w miejsce lini RXD i TXD wstawić zworę(zewrzeć ze sobą). W ten sposób jak naciśniemy coś w terminalu to będziemy mieli echo tego co wyszło. Jeżeli i to niezadziałao to wtedy można sprawdzić czy aby napewno na MAX'ie jest prawidłowe 5V i czy dobrze podłączone są przewody. Co do komunikacji w procku to wstaw sobie taką pętle:

    do
    if scon.0=1 then
    cls
    lcd sbuf
    scon.0=0
    end if
    loop

    jeżeli pojawi się jakiś znaczek w buforze(scon.0=1) to on go wyświetli (lcd sbuf) i to bez rzadnego echa

    0
  • #18 24 Mar 2004 10:34
    ralph_b
    Poziom 2  

    Ja proponuje wymienic kwarc na 7,3728 MHz wtedy RS dogada sie z kazdą predkościa

    0
  • #19 27 Mar 2004 12:29
    Przybyłek
    Poziom 12  

    A może błąd tkwi w czymś bardzo banalnym jak np. com może masz uszkodzony albo podłączasz do com2 a ustawiasz com1. czasami com 2 jest wyżej a czasami jest jeden com w kompie jest to com 2 (ja tak miałem) a może com jest wyłączony w biosie??

    0
  • #20 27 Mar 2004 17:35
    ganrot
    Poziom 11  

    gdzieś widziałem schemat oscyloskopu pod port LTP ale nie moge go znaleść ( było przy schemacie odrazu programik który to obsługuje ) może ktoś gdzieś ma takowy ??

    0
  • #22 03 Kwi 2004 22:22
    wasi
    Poziom 12  

    Powracam do tematu. Poprzedni układ zmęczyłem do bulu i nic nie wyszło. Nadal mam problemy z transmisją i nie mam dalszych pomysłów.
    Kwarc 11.0592MHz, prędkości wszędzie ustawione na np: 9600. Zmieniłem 3 kwarce, wszystkie 11... . Program pisałem tylko pod Bascom bo w niczym innym w zasadze nie potrafie. Z pozostałymi funkcjami programu nie było problemu np: z wyświetlaczem.

    Złożyłem nowy układ, nie wierze w te same zimne luty w nowo złożonym układzie.
    W załączniku przesyłam kompletny schemat mojego urządzenia w EAGLE i jpg schematu i płytki.
    Czy mógłby ktoś na to zerknąć i wytknąć mi błędy a jeśli to możliwe to przesłać mi HEXa z gotowym programem (najlepiej źródłowo napisanym w Asm), który mógłbym wprogramować i dowiedzieć się, że działa układ a problem leży w programie albo jak nie działa to że to wina układu. Coś bym przynajmniej wyeliminował.

    Pozatym każda sugestia do tego układu będzie mile widziana :)
    chyba że można kupić taki kit i coś sięz nigo nauczę :)

    0
  • #23 04 Kwi 2004 10:34
    McRancor
    VIP Zasłużony dla elektroda

    Przeglądałem twoje wypociny (jak na razie jedyny :) i czepiłbym się paru szczegółów:
    T1in łączymy z TXD w proceszorze, a R1ount z Rxd, na twoim schemaciku są odwrócone
    Piszesz że to ma być na 90S8535, tymczasem na schemacie jest 2051,
    a nawet jeśli, to dołącz opornik do resetu i masy (1K wystarczy)
    Zamień jeszcze piny 2 i 3 ze sobą w złączu, one też są obrócone.
    Nie wiem też po co podłączałeś R2in do masy(!) No i jeszcze rezystory na sda i scl, podciągające są dobrze, ale R1 iR2 bym wywalił Natomiast cała płytka jest bardzo ładnie rozłożona i za to należą się brawa! Kiedyś robiłem programik z obsługą RSa na 2051 i załączam go dla ciebie, u mnie chulał bez problemu, najpierw cośtam wyświetla, potem interpretuje polecenia, w zipie masz jeszcze PORZĄDNY program do obsługi terminala, ustawiasz ustawienia, wciskasz connect i widzisz obie strony transmisji!

    1
  • #24 04 Kwi 2004 12:26
    wasi
    Poziom 12  

    Ooo fajnie.
    1. Piny w złączu i połączenia procka już zamieniam. Naszczęście nie trzeba nowej płytki robić.
    2. Ja wykożystuje AT89C2051 to kolega z głównego wątku miał inny procesor.
    3. Rezystkorka nigdy nie dawałem do resetu, zawsze tylko 1uF i mi działało - bardzo rzadko - nie - a im mniej elementów tym lepiej :)
    4. R1in i T2in podłączyłem do masy, bo jak się ich nie podłączy to EAGLE marudzi że wiszą. Pewnie to się jakoś rozwiązuje ale nie wiem jak i wpadłem, że dobrze też będzie je do masy podłączyć i przynajmniej nie będą "pracować z powietrzem".
    5. Taki dzielnik podłączony do lini I2C jest narysowany w helpie do BASCOMa. Wiec go zastosowałem a przy okazji rezystorki pomogły ułozyć płytkę :)
    6. A płytkę układał EAGLE a ja mu tylko pomagałem ułożyć elementy. Więc można chwalić jago programistów :)

    A nie ma ktoś "gadającego z kompem" programu w Asm i skompilowanego do HEX, tak bym mógł zaprogramować procka i mieć jakość pewność co do działania - BASCOMa ?? bo nie wiem jak to jest z inicjalizacją i działaniami tego środowiska. To toak na wszelki wypadek dalszych problemów :)

    Zabieram się za dalsze sprawdzanie układu...

    0
  • #25 04 Kwi 2004 17:32
    wasi
    Poziom 12  

    no nareście działa. Dzięki McRancor. Podstawowym błędem było własnie odwrotne podłączenie procka z MAXem. Pozostałych opcji nie musiałem nawet sprawdzać. Zamiana pinów dla portu spowodowała raczej nie działanie więc nie wiem jak to jest - ale ważne że działa i teraz zacznie się moja zabawa z RSem :)

    W takim razie podany układ ma tylko jeden błąd: odwrotne połączenie z MAXem a tak to polecam taki układ jeśli jest komuś potrzebny taki :)

    0
  • #26 02 Paź 2004 12:47
    ShEvU_elektro
    Poziom 25  

    Mi też niedziała proc+max232 zamiast wyswietlac np. jestem to wychodza krzaki jakies :(

    0
  • #27 02 Paź 2004 22:12
    migod
    Poziom 21  

    Czesc,

    mam zblizony problem, tylko ze z ATmega8515

    uP jest w konfiguracji: 1MHz (wewnetrzny), reset przez 10k do Vcc, i przez 10uF do masy
    MAX232: 4x 10uF
    Wszystko zasilone z 7805
    Terminal: minicom

    napisalem prosty program w C (cos jak echo), lwia czesc kodu pochodzi z dokumentacji atmela do tej ATmegi, i.. dane odsylane do komputera sa w 100% przeklamane. Terminal (i procka) inicjowalem od 2400 do 19200, 8N1, 8N2, zawsze to samo.
    Fakt pozostaje faktem, procesorek odbiera znak z terminala i plynnie go odsyla, tylko ze niewazne co dostanie, odsyla jedna i ta sama sekwencje.

    MAX232 + kabelek jest raczej poprawny, (spiety na krotko i w komunikacji z at90s4433 dziala bez zarzutu).

    Cos przeoczylem, jesli nie w kodzie (w zalaczniku) to w hardware.
    Bede wdzieczny za pomoc, bo juz skonczyly mi sie pomysly :(


    Pozdrawiam,
    migod

    0
  • #28 07 Lis 2004 23:10
    Patyk
    Poziom 15  

    Napisalem takowy program i cosik nie dziala mi prawidlowo z przerwaniami,moze cos nie tak:/.Zamiast czekac na przerwanie to po uruchomieniu od razu wskakuje w program przerwania co moze byc nie tak??.Jak wstawie przerwanie INT0 to wszystko jest ok (podczas emulacji programowej) a w przypadku seriala odrazu wskakuje w przerwanie.Moze nie ma takiej mozliwosci zeby bylo wywolywane przerwaniem seriala...nie wiem juz sam....Oto kod

    Code:
    $large
    
    $regfile = "89C4051.dat"
    Dim A As Byte
    Config Lcd = 16 * 2
    Enable Serial

    Enable Interrupts
    On Serial Prog_przerwania:

    Do
    Cls
    Lcd "RS232 PC<=>uP :)"
    Lowerline
    Lcd "Oczekiwanie.."
    Wait 3
    Loop

    Prog_przerwania:
    Disable Interrupts
    Cls
    Lcd "Zalogowano!!!"
    Do
    Print "Wybierz zadanie:"
    Print "1.lcd1"
    Print "2.lcd2"
    Print "3.lcd3"
    Print "0.wyjscie"
      Input "Twoj wybor?" , A
      If A = 1 Then
      Cls
      Lcd "lcd1"
      Wait 3
      End If
      If A = 2 Then
      Cls
      Lcd "lcd2"
      Wait 3
      End If
      If A = 3 Then
      Cls
      Lcd "lcd3"
      Wait 3
      End If
      If A > 3 Then
      Print "Liczby z przedzialu 0-3!!!"
      End If
    Loop Until A = 0
    Enable interrupts
    Return

    0
  • #29 26 Lut 2008 16:10
    softlight
    Poziom 10  

    Witam

    Problemy z RS232 mogą wynikać ze źle ustawionych
    fuse bitow tzn. wydaje się Wam ze jeśli macie kwarc jakiś tam to procek pracuje z tą częstotliwością.
    Prawda może być taka, że procek pracuje na wewnętrznym generatorze rc. np wymiana AT90s2313 na Attiny 2313 ze
    względu na różnice domyślnie ustawionych fuse bitów. Spowoduje taki efekt.


    Pozdrawiam

    0
  • #30 26 Lut 2008 16:16
    mirekk36
    Poziom 42  

    kolego softlight - rozumiem, że jesteś nowy na forum, ale jak już udzielasz odpowiedzi to zwróć uwagę, kiedy ten temat "żył" kiedy ktoś się ostatni raz wypowiedział - widzisz datę 7 listopad 2004 ????? ten temat już praktycznie "nie zyje" i nikomu się nic nie wydaje ;) .... ludzie przez tych kilka lat już po stokroć zapewne przebrnęli swoje problemy albo o nich zapomnieli

    ... ot taka drobna uwaga, żebyś na przyszłość wiedział, gdzie i w jaką dyskusję się włączasz

    0
  Szukaj w 5mln produktów