Komunikacja RS 232

Pytania, kody i porady dotyczące nie tylko Bascom.
Awatar użytkownika
Stefan_25
Posty: 22
Rejestracja: 04 sty 2021, 18:36

Komunikacja RS 232

Post autor: Stefan_25 » 09 maja 2021, 11:29

Witam szanowne grono.

Panowie mam pytanie odnośnie komunikacji RS-232 w Bascom AVR.

Sprawa jest taka, dlaczego do poprawnej komunikacji jest potrzebny "specjalny rezonator kwarcowy" najlepiej o częstotliwości 11059200 Mhz
podczas kiedy Arduino nie wymaga takich zabiegów i goni swoje płytki zazwyczaj kwarcem 16 MHz.

Zadałem pytanie ponieważ kupiłem Arduino Nano z 16 MHz kwarcem wgrałem program i działa, jest komunikacja.
Zaprogramowanie tejże płytki Bascom AVR płytka nie odbiera danych a co dziwne wysyła prawidłowo.

Do tego dochodzi kolejny mały problem z samym rezonatorem, na płytce umieszczony jest 16 MHz rezonator ceramiczny wraz z wbudowanymi kondensatorami natomiast gdzie kupić taki o częstotliwości 11059200 Mhz ?

Pozdrawiam

Stefan.
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Komunikacja RS 232

Post autor: Pikczu » 09 maja 2021, 12:59

Cześć Stefan,
Proponuje kupić i przeczytać książkę:
"Mikrokontrolery dla początkujących" Pana Piotr Góreckiego na pisana na podstawie Bascomowej Oślej łączki z miesięcznika "Elektronika dla wszystkich"
https://kamami.pl/avr/207359-mikrokontr ... acych.html cena 52 pln.

Zalecam też zapoznanie się z PDF-em dla mikrokontrolera.
https://www.microchip.com/wwwproducts/en/ATmega328
pdf: https://ww1.microchip.com/downloads/en/ ... 02061B.pdf

Zagadnienie jest przedstawione na stronie 196 tegoż to PDF-a w tabeli 20-4 do 20-7.

Dlaczego arduinowscy wybrali 16Mhz bo taki mieli kaprys.
I wcale nie trzeba zmieniać kwarcu.
tabela_20-7.png
Transmisja danych przez uart jest transmisją asynchroniczną w przeciwieństwie do np SPI.
zwyczajnie chodzi oto żeby error był jak najmniejszy.
Więc możesz sobie poganiać swoją męgę 16 milionów razy na sekundę ale będziesz zmuszony do używania baudrejtów które maja najniższy error i tyle.
np 9600 ma błąd tylko 0.2%
Ale już 115200 ma błąd 3.5% co jest już problematyczne bo dane będą odbierane z błędami.
itd.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Komunikacja RS 232

Post autor: niveasoft » 09 maja 2021, 15:15

Nie przy U2X @pikczu -> doczytaj i sie dowiesz dlaczego 115200 to możliwe i realiable (2,1%)
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Komunikacja RS 232

Post autor: Pikczu » 09 maja 2021, 22:17

Oj Bartek taka drobnostka.
Oczywiście że czytałem :) błąd i tak będzie. A dla Stefana to żadna różnica.
Awatar użytkownika
Stefan_25
Posty: 22
Rejestracja: 04 sty 2021, 18:36

Re: Komunikacja RS 232

Post autor: Stefan_25 » 12 maja 2021, 17:40

Witam.

Dziękuję za odpowiedz , kupię książkę i postaram się nie zadawać głupich pytań.

Stefan.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Komunikacja RS 232

Post autor: niveasoft » 12 maja 2021, 21:18

Szanowny Panie Stefanie. Wysyłać dane 115200 co jest najszybszym patentem Arduino to nie problem.
Odbieranie danych przez uC to nie jest coś takiego co Pan widzi w terminalu dlatego trochę nie dziwię się koledze @pikczu.
Proszę uwierzyć, że te pytania o to jak odbierać te dane po RS`ie się powtarzają co chwilę i może dlatego kolega @pikczu już polecił książkę ahahahaha
Naprawdę jest tego mnóstwo.
Proszę napisać co nie działa dokładnie a może wtedy znajdzie się coś ciekawego :P i nowego w zagadnieniu :P

Do poprawnej komunikacji nie jest potrzebny kwarc "Usart friendly".
Awatar użytkownika
Stefan_25
Posty: 22
Rejestracja: 04 sty 2021, 18:36

Re: Komunikacja RS 232

Post autor: Stefan_25 » 12 maja 2021, 21:44

Panie NiveaSoft.

Rozumie że są konstruktorzy,programiści i ktokolwiek jeszcze "nie wiem" mają problem z RS ja go również posiadam.
Pytanie było dlaczego zaprogramowanie płytki Arduino Nano z kwarcem 16MHz przez środowisko Arduino komunikacja działa w obie strony przy prędkości 115200 , tu mój błąd ponieważ nie podałem prędkości RS'a
Natomiast programowanie tej samej płytki w Bascom AVR już robi problem z odbieraniem danych , czyli wyśle poprawnie ale odebrać nie potrafi. Chcąc uzyskać komunikacje trzeba korzystać z dedykowanego rezonatora.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Komunikacja RS 232

Post autor: niveasoft » 12 maja 2021, 21:48

To nieprawda. Wszystko można odebrać.
Proszę zwrócić uwagę, że drugi raz proszę o to żeby napisać czego się Panu nie udaje odebrać :p
Postaram się pomóc.

Naprawdę na co dzień nie schodzę poniżej 115200 jak debuguję i wiedzą to wszyscy dla których coś robiłem :P
grzeniu 73
Posty: 26
Rejestracja: 07 lip 2019, 0:32

Re: Komunikacja RS 232

Post autor: grzeniu 73 » 14 maja 2021, 13:32

Mimo, ze 16mhz nie jest przyjaznym kwarcem to mam komunikacje miedzy avr a androidem i pc zrobiona na 115200 i przesyłam naprawdę megabajty z karty sd i nie ma żadnych błędów. Cos musi byc nie tak z programem
Awatar użytkownika
Stefan_25
Posty: 22
Rejestracja: 04 sty 2021, 18:36

Re: Komunikacja RS 232

Post autor: Stefan_25 » 18 maja 2021, 11:47

Witam i przepraszam że późno odpisuję.

Chodzi dokładnie o już wcześniej zaczętą komunikację między dwoma urządzeniami gdzie odbieranie danych napisał "Niveasovt" w poście "Odbiór danych rs232 Bascom".
No i wszystko działa tylko odbieranie musi być właśnie z tym a nie innym kwarcem. I jak wspomniałem wcześniej dziwne jest to że wysyła dobrze dane to odebrać nic nie potrafi.
Problem jest tylko taki że trzeba wymienić kwarc w płytce arduino nano a tam jest ceramiczny i zamontować zwykły bo nie mogę nigdzie dostać 11.059 ceramicznego.
Dlatego pytam co jest spowodowane tym że wysyła dobrze a nie może odebrać a cokolwiek napisane w środowisku arduino działa.
Może faktycznie problem leży w programie.
  1. If Ischarwaiting() > 0 Then
  2.                        Znak = Inkey()
  3.  Select Case Znak
  4.   Case 10                                                   'otrzymano LF
  5.    Helpb = Split(dane , Nazwa(1) , ";")                     'dziel string szukajac średników
  6.    For N = 1 To 5
  7.     Test = Val(nazwa(n))
  8.     If Err = 0 Then dane1(n) = Test
  9.    Next
  10.    gosub Odbior_rs
  11.    Dane = ""                                                'dane przetworzone, mozna czyścić i czekamy na nowe
  12.   Case Else                                                 'kazdy inny od LF znak dodawaj do stringa
  13.    Dane = Dane + Chr(znak)
  14.  End Select
  15. End If
Oprócz tego kawałka programu jest reszta która jest potrzebna po poprawnej pracy odbioru danych.
Reasumując program działa dobrze przy częstotliwości 11.059200 montujemy kwarc 8Mhz czy 16Mhz koniec, wysyła nie odbiera.
ODPOWIEDZ