Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega + RS232 - Sygnalizacja transmisji RS232

jaros85 26 Jun 2013 18:40 5424 10
IGE-XAO
  • #1
    jaros85
    Level 20  
    Witam.
    Projektuję płytkę pod uC Atmega328 i chciałbym zbudować sygnalizację transmisji przez RS232.

    Oto schemat:
    Atmega + RS232 - Sygnalizacja transmisji RS232

    Zasada działania:
    Gdy podłączę kabel i na komputerze uruchomię Hyper Terminal na PINie 4 w gnieździe pojawi się stan wysoki (+10V). Co da mi na wyjściu MAX232 (PIN 9) stan niski.
    Będę sprawdzał stan portu PB5 gdy będzie na nim stan niski ustawię ten sam stan na porcie PB4 spowoduje to zapalenie się diody LED.
    Dioda ma się świecić światłem ciągłym gdy uruchomiony jest HT i podłączony kabel.
    Gdy trwa transmisja nadawanie/odbiór odpowiednie porty PD0 i PD1 przechodzą w san niski co powoduje gaśnięcie diody.

    Ponadto dioda ma się NIE świecić gdy na porcie PB4 jest stan wysoki i a mimo wszystko trwa nadawanie danych np w skutek odłączenia kabla.

    Czy mój układ będzie działać prawidłowo. Pominąłem kondensatory przy MAX232 dla czytelności schematu.
  • IGE-XAO
  • #2
    al777
    Level 26  
    Moim zdaniem rozumowanie jest prawidłowe, ale działać nie będzie.
    Problem polega na tym, że RS232 po stronie TTL (a więc po stronie mikrokontrolera) ma tzw. logikę ujemną - stanem nieaktywnym jest stan wysoki.
    To znaczy, że przy nadawaniu pin RxD ma stan wysoki, a na końcówce TxD mikrokontrolera jest fala prostokątna (i vice versa przy odbieraniu).
    W zaprezentowanym układzie dioda led będzie świecić w sposób ciągły lub wcale.

    Moim zdaniem tranzystory trzeba podłączyć szeregowo - i wtedy będzie taki efekt jak koledze potrzeba.
  • IGE-XAO
  • #3
    jaros85
    Level 20  
    znalazłem takie rysunki:

    Atmega + RS232 - Sygnalizacja transmisji RS232

    Atmega + RS232 - Sygnalizacja transmisji RS232

    Na drugim widać w jakim stanie są linie sygnalizujące po stronie TTL w transmisji RS232. Wnioskuję z tego że stan prawidłowy czyli ten kiedy uruchomiony jest HyperTerminal i nawiązana jest połączenie to stan niski po stronie TTL. Czyli dioda się zapali a gdy będą przesyłane dane dioda zacznie mrugać.

    Zanim zbuduję całą płytkę zastanawiam się czy ktoś był by w stanie to moje rozwiązanie przetestować.

    Czy wartości oporników są prawidłowe czy dioda się zapali :?:
  • #4
    BlueDraco
    MCUs specialist
    Ciekawe, w jaki sposób zauważysz, że dioda zgasła na tysięczną część sekundy...

    Trochę bez sensu taka sygnalizacja...
  • #5
    KrisH
    Level 14  
    Pozostaje rozwiązanie albo czysto sprzętowe tj. zastosowanie układu przedłużającego świecenie diody ( np. 74xx121 lub podobnego)-możliwe do zastosowania przy projektowaniu płytki od podstaw,
    lub rozwiązanie programowe ( podpięcie diody pod któryś port procesora i odpowiednio długie jej zaświecenie. Oba mają swoje zalety i wady.
  • #6
    jaros85
    Level 20  
    BlueDraco wrote:
    Ciekawe, w jaki sposób zauważysz, że dioda zgasła na tysięczną część sekundy...

    Trochę bez sensu taka sygnalizacja...


    A zrób tak podłącz opornik 470 ohmów do 5V diodę i podłącz to do linii Rx albo Tx i sprawdź czy nie zamruga jak będzie transmisja.
    A później pisz takie rzeczy.

    Niczego przedłużać nie trzeba ani sterować,

    Chodzi mi o to że zamiast dwóch diod zastosować jedną i dorzucić jeszcze kontrolę podłączenia kabla i nawiązania połączenia.

    Przeprowadziłem następujące pomiary.
    Oto widok gniazda RS232 na płycie głównej
    Atmega + RS232 - Sygnalizacja transmisji RS232

    Wszystkie pomiary wykonywałem względem PIN-u 5 - GND
    W stanie spoczynku. Uruchomiony jedynie system operacyjny.
    PIN 1 -> 0V
    PIN 2 -> 0V
    PIN 3 -> -11V
    PIN 4 -> -11V
    PIN 6 -> 0V
    PIN 7 -> -11V
    PIN 8 -> 0V
    PIN 9 -> 0V

    Po uruchomieniu Hyper Terminala i nawiązaniu połączenia.
    PIN 1 -> 0V
    PIN 2 -> 0V
    PIN 3 -> -11V
    PIN 4 -> +11V
    PIN 6 -> 0V
    PIN 7 -> +11V
    PIN 8 -> 0V
    PIN 9 -> 0V

    Są to stany napięcia po stronie RS232 czyli po przejściu przez MAX232 wartości napięć zostaną odwrócone czyli tam gdzie jest + będzie 0V i na odwrót tam gdzie - będzie +5V.
    Czyli wydaje mi się że zasada działania jest dobra mojego schematu.
    Zastanawiam się teraz czy wartości oporników są prawidłowe i czy dioda się zapali.
  • #7
    BlueDraco
    MCUs specialist
    Jaros: o ile zaświecenie na 1/1000 sekundy można zauważyć (ale niezbyt łatwo i mało to "informacyjne" w praktyce), to zgaszenia już nie, a o to Ci podobno chodziło.

    Takie rzeczy robi się zwykle tak, że przy zapisie danych do rejestru nadawania zaświecasz lub gasisz programowo diodę i nastawiasz timer programowy. W przerwaniu timera dekrementujesz ten timer programowy i przy dojściu do 0 gasisz/zaświecasz diodę. Jeszcze ładniej robi się to z PWM i płynnym gaszeniem.
  • #8
    jaros85
    Level 20  
    Wiem że takie bajery są bardziej widowiskowe i ładnie sygnalizujące coś jak diody przy gnieździe LAN RJ45.

    Niestety ja mam ten problem że wszystkie wyjścia z uC mam już zajęte i nie mogę tego wykonać.

    Po drugie przez RS232 nie będę przesyłał jednego tylko znaku ale ciągi bajtów.

    Przypominam że jeden znak w kodzie ASCII to 16bitów + znaczniki rozpoczęcia i zakończenia transmisji. Więc dioda nie będzie gasnąć na 1/1000 tylko przynajmniej 1/11 sekundy. A dlaczego 1/11 bo średnia długość wyrazu w polskim alfabecie wynosi 5,5 znaku * 16bitów na znak wychodzi około 88 bitów na jeden wyraz. Posługiwał się będę właśnie zwykłymi komendami tekstowymi w HyperTerminalu. Więc można powiedzieć że dioda będzie sterowana pseudo modulacją PWM. Sama dioda też ma pewną bezwładność to że prąd będzie przez nią płynął prze 1/1000 sekundy to nie znaczy że ona tyle będzie się świecić tylko dłużej. Dlatego ostatecznie mogę uzyskać połowę mocy świetlnej z jasnej diody LED a to bardzo dużo.

    Z doświadczenia wiem że najlepiej do takiej sygnalizacji nadaje się niebieska dioda ma ostre światło i nawet w ciągu dnia światło słoneczne jej nie przytłumi. Najgorzej sprawują się diody zielone.

    Jeżeli ktoś nie wieży niech sam sprawdzi i podłączy diodę do nóżki Tx i zacznie nadawać. Widać to świecenie i to bardzo wyraźnie.
  • #9
    BlueDraco
    MCUs specialist
    No to coś się zmieniło, bo do niedawna ASCII był kodem 7-bitowym, a przez UART przesyła się najczęściej dane 8-bitowe plus jeden bit startu (0) i bit stopu (jedynka, czyli dioda nie przygaśnie). Dioda będzie przygasać tylko przy transmisji zer. Przyjmując, że połowa przesyłanych bitów jest zerami, podczas przesyłania danych nastąpi lekkie przyciemnienie (tu wchodzą jeszcze efekty takie, jak bezwładność oka oraz logarytmiczna charakterystyka czułości wzroku). O szybkości transmisji nie napisałeś nic. Przy 9600 b/s i 10 transmitowanych znakach dioda nieco zmniejszy jasność na 1/100 sekundy. NIKT tego nie zauważy gołym okiem.

    Coś się tu chyba kupy nie trzyma.
  • #10
    jaros85
    Level 20  
    Poniżej tabela znaków ASCII
    ASCII

    Jak widać jedna litera jest zapisana na 16bitach. Więc dioda ma poco mrugać.
    Jak uda mi się skonstruować na pająka taki układ to napiszę jak w realu będzie przygasać ta dioda.
  • #11
    BlueDraco
    MCUs specialist
    No jasne. A gdzie widzisz te 16 bitów? Cytuję z podlinkowanej przez Ciebie strony:
    "7-bitowy kod przyporządkowujący liczby z zakresu 0-127"

    "W realu" człowiek nie poruszając się może dostrzec przygaśnięcie nie krótsze niż na 1/20 sekundy. U Ciebie przygaśnięcie będzie na czas od 1 do 5 bitów. Przy 110 bitach na sekundę może coś się da zauważyć, przy większej szybkości już nie.