Odbiór danych rs232 Bascom
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: Odbiór danych rs232 Bascom
Bartek pomyślał zapewne że to radio - a to wzmacniacz KF hi
pozdrawiam Jacek.
pozdrawiam Jacek.
- Stefan_25
- Posty: 22
- Rejestracja: 04 sty 2021, 18:36
Re: Odbiór danych rs232 Bascom
Witam forumowiczów.
Po krótkiej przerwie doszłem co było powodem tego że tylko jeden znak był odczytywany a potem śmieci ,
wyjątek stanowił kod Pana Niveasoft ten kompletnie nic nie odbierał ale to też wyjaśniłem.
Żeby nie przeciągać winą za całe zamieszanie była źle dobrana prędkość komunikacji,
czyli przy rezonatorze 8mHz i prędkości 115200 baud błąd komunikacji wynosi 7.84% dlatego była całkowita klapa.
Obniżenie prędkości do 38400 bo tyle ma domoticz w konfiguracji problem znikł i zaczęło wszystko działać.
No i niestety reasumując komputery klasy PC po prawdzie i teoretycznie odbiorą wszystko a najważniejsze można to podpatrzeć.
Patrząc w bascomie na zakładkę komunikacja wszystko się robi jasne jeśli chodzi o częstotliwość taktowania i prędkość komuikacji.
Jedyny słuszny wybór chcąc korzystać z RS'a to kwarc 11.059200 , brak błędów w komunikacji.
Dziękuję za okazaną pomoc i kod który też działał tylko błąd był nie dopasowania częstotliwości i prędkości.
Pozdrawiam.
Po krótkiej przerwie doszłem co było powodem tego że tylko jeden znak był odczytywany a potem śmieci ,
wyjątek stanowił kod Pana Niveasoft ten kompletnie nic nie odbierał ale to też wyjaśniłem.
Żeby nie przeciągać winą za całe zamieszanie była źle dobrana prędkość komunikacji,
czyli przy rezonatorze 8mHz i prędkości 115200 baud błąd komunikacji wynosi 7.84% dlatego była całkowita klapa.
Obniżenie prędkości do 38400 bo tyle ma domoticz w konfiguracji problem znikł i zaczęło wszystko działać.
No i niestety reasumując komputery klasy PC po prawdzie i teoretycznie odbiorą wszystko a najważniejsze można to podpatrzeć.
Patrząc w bascomie na zakładkę komunikacja wszystko się robi jasne jeśli chodzi o częstotliwość taktowania i prędkość komuikacji.
Jedyny słuszny wybór chcąc korzystać z RS'a to kwarc 11.059200 , brak błędów w komunikacji.
Dziękuję za okazaną pomoc i kod który też działał tylko błąd był nie dopasowania częstotliwości i prędkości.
Pozdrawiam.
- Pikczu
- Posty: 392
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: Odbiór danych rs232 Bascom
No i widzisz jakie to proste.
Wystarczyło przysiąść zagadnienie jest banalne.
Wystarczyło przysiąść zagadnienie jest banalne.
- Stefan_25
- Posty: 22
- Rejestracja: 04 sty 2021, 18:36
Re: Odbiór danych rs232 Bascom
Witam Ponownie.
Jak zwykle mam problem z tym nieszczęsnym RS 'em żeby nie zakładać nowego wątku bo szkoda zaśmiecać forum tym razem potrzebuje odebrać 10 bitów danych
i jak zwykle nie umie. Myślałem że uda mi się dostosować kod który dostałem od Was poprzednio ale niestety.
Tym razem problem jest taki że sterownik wysyła takie dziwne dane.
W RealTerm wygląda to tak "ŞŔ{Á™¬„«" po przekonwertowaniu na ASCII "AA C0 71 01 88 02 99 AC 41 AB" nie ma na końcu żadnego znaku.
Pierwsze dwa bity AA i CO są zawsze takie same podobnie jest z ostatnią "AB" i to chyba jest informacja o końcu transmisji.
Potrzebuje je pobrać i wpisać do 10 zmiennych, niestety ale nie potrafię tego zrobić.
Czy może ktoś pomóc ?
Pozdrawiam
Jak zwykle mam problem z tym nieszczęsnym RS 'em żeby nie zakładać nowego wątku bo szkoda zaśmiecać forum tym razem potrzebuje odebrać 10 bitów danych
i jak zwykle nie umie. Myślałem że uda mi się dostosować kod który dostałem od Was poprzednio ale niestety.
Tym razem problem jest taki że sterownik wysyła takie dziwne dane.
W RealTerm wygląda to tak "ŞŔ{Á™¬„«" po przekonwertowaniu na ASCII "AA C0 71 01 88 02 99 AC 41 AB" nie ma na końcu żadnego znaku.
Pierwsze dwa bity AA i CO są zawsze takie same podobnie jest z ostatnią "AB" i to chyba jest informacja o końcu transmisji.
Potrzebuje je pobrać i wpisać do 10 zmiennych, niestety ale nie potrafię tego zrobić.
Czy może ktoś pomóc ?
Pozdrawiam
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Odbiór danych rs232 Bascom
Przeniosę to bo trzeba tylko wysil się na temat bo to zakrawa trochę na przesadę. Możesz pisać swoje posty to po co to tutaj w tym wątku?
- Stefan_25
- Posty: 22
- Rejestracja: 04 sty 2021, 18:36
Re: Odbiór danych rs232 Bascom
Nie rozumie. Co mam zrobić ?
- Pikczu
- Posty: 392
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: Odbiór danych rs232 Bascom
Boże drogi przecież to jest banalne Stefan ty nie czytasz a jak nie będziesz czytał my tego za ciebie nie zrozumiemy.
Napisze to dla ciebie żebyś to zrozumiał tylko daj mi parę minut.
Dane zawsze są przesyłane zero-jedynkowo.
W ASCII jeden znak to jeden bajt w UTF-8 lub UTF-32 to nawet 4 bajty.
Tabela znaków ASCII została stworzona w 1960 roku i reprezentowała znaki używane w języku angielskim.
W miarę rozwoju i komputeryzacji świata, zaszła potrzebna reprezentacji znaków specjalnych używanych w innych językach.
Typowa table ASCII stała się zbyt mała i powstało ASCII extended które tez było za małe a później powstało UTF-8 oraz UTF-32 z wariantami.
Ale to temat na osobną lekturę nie będę wchodził w szczegóły bo nie wszytko pamiętam a temat jest bardzo obszerny, i może od tego rozboleć głowa.
Jako ciekawostka dodam że po standaryzacji kodowanie pokrywa ponad 100.000 znaków używanych przez ludzi.
Skup my się na tym co jest używane przez nas.
Porównując tablice znaków ASCII z UTF-8 (unicode) znaki pisane od numeru dziesiętnego 32 do 127 są identyczne.
Patrząc na dane odebrane przez twój terminal (zapis hex ) widzimy AA C0 71 01 88 02 99 AC 41 AB oraz jako krzaczki ŞŔ{Á™¬„«
To co widzisz terminalu to tylko forma wizualna.
Te znaczki:ŞŔ{Á™¬„« to nic innego jak tylko ASCII (a dokładnie UTF-8 unicode) reprezentacja danych przesłanych binarne to tak w dużym skrócie.
We wcześniejszym twoim poście pokazałeś z rzut ekranu z terminala: Twój system wysyłał dane jako ASCII. Zaletą tego jest możliwość czytania danych bezpośrednio w terminalu.
Bo zamiast krzaków widziałeś reprezentację danych gotową do odczytu przez ludzkie oko.
Przykładowo wysyłając liczbę 123 program lub urządzenie wysyła najpierw:
Cyfrę 1 (co zero-jedynkowo będzie wysłane jako 0011 0001)
Cyfrę 2 (zero-jedynkowo 0011 0010)
Cyfrę 3 (zero-jedynkowo 00110011)
Natomiast na ekranie terminala dane te wyświetlą się jako 123.
Gdybyś zmienił sposób wyświetlania danych z ASCII na HEX dane te stały by się nie czytelne i wyświetlił by się jako hex reprezentacji 123 czyli 31 32 33.
Krzaki zaczynają się gdy podglądasz znaki z poza zakresu 32 do 127, znaki tak zwane nie drukowane nie dedykowane do czytania.
Gdybyś popatrzył na te dwie strzałeczki "«" ich odpowiednich w hexie to AB.
W tabeli ASCII ich nie znajdziesz, znajdziesz je natomiast w tabeli UTF-8 (unicode) na pozycji 171 z tym ze dodatkowo jest tam jeszcze drugi bajt z przodu ale tego tłumaczył nie mam zamiaru.
Ramka danych która tu pokazałeś "AA C0 71 01 88 02 99 AC 41 AB" nie jest dedykowana do czytania przez człowieka, przynajmniej takie wrażenie robi reprezentacja ASCII.
Jak sam zauważyłeś jest tam nagłówek który zawsze jest identyczny AA C0 oraz AB do terminacji ramki.
A dane to 71 01 88 02 99 AC 41.
Obieranie danych trzeba rozbić na kroki, można to zrobić na wiele sposobów, każdy z nas ma swój ulubiony zapis a raczej nawyk z tym samym efektem końcowym.
Bartek Podał Ci rozwiązanie jak to ogarnąć jeśli dane to typowe ASCII z zakresu znaków drukowanych.
Natomiast żeby odebrać dane w formie jak powyżej musisz znać ich przeznaczenie.
Musisz wiedzieć jakie jest przeznaczenie każdego bajtu i bez tego niestety ani rusz.
Podstawowy kod jest banalny, będzie się składał z konfiguracji UART, koniecznie z buforem.
Oczekiwania na dane czyli wszystkim znane i lubiane Ischarwaiting oraz inputbin.
Może wyglądać w ten sposób:
Każde okienko tablicy będzie zawierało konkretny bajt danych.
Jedną z zalet wysłanie danych w ten sposób jest szybkość przesyłania i łatwość obróbki.
Wadą jest to iż trzeba znać przeznaczenie każdego bajtu.
Jeśli podasz więcej info na temat przeznaczenia każdego z tych bajtów rozpisze to lepiej na ten moment jest to czyste minimum.
Napisze to dla ciebie żebyś to zrozumiał tylko daj mi parę minut.
Od początku bo widzę że bardzo nie rozumiesz.Tym razem problem jest taki że sterownik wysyła takie dziwne dane.
W RealTerm wygląda to tak "ŞŔ{Á™¬„«" po przekonwertowaniu na ASCII "AA C0 71 01 88 02 99 AC 41 AB" nie ma na końcu żadnego znaku.
Pierwsze dwa bity AA i CO są zawsze takie same podobnie jest z ostatnią "AB" i to chyba jest informacja o końcu transmisji.
Dane zawsze są przesyłane zero-jedynkowo.
W ASCII jeden znak to jeden bajt w UTF-8 lub UTF-32 to nawet 4 bajty.
Tabela znaków ASCII została stworzona w 1960 roku i reprezentowała znaki używane w języku angielskim.
W miarę rozwoju i komputeryzacji świata, zaszła potrzebna reprezentacji znaków specjalnych używanych w innych językach.
Typowa table ASCII stała się zbyt mała i powstało ASCII extended które tez było za małe a później powstało UTF-8 oraz UTF-32 z wariantami.
Ale to temat na osobną lekturę nie będę wchodził w szczegóły bo nie wszytko pamiętam a temat jest bardzo obszerny, i może od tego rozboleć głowa.
Jako ciekawostka dodam że po standaryzacji kodowanie pokrywa ponad 100.000 znaków używanych przez ludzi.
Skup my się na tym co jest używane przez nas.
Porównując tablice znaków ASCII z UTF-8 (unicode) znaki pisane od numeru dziesiętnego 32 do 127 są identyczne.
Patrząc na dane odebrane przez twój terminal (zapis hex ) widzimy AA C0 71 01 88 02 99 AC 41 AB oraz jako krzaczki ŞŔ{Á™¬„«
To co widzisz terminalu to tylko forma wizualna.
Te znaczki:ŞŔ{Á™¬„« to nic innego jak tylko ASCII (a dokładnie UTF-8 unicode) reprezentacja danych przesłanych binarne to tak w dużym skrócie.
We wcześniejszym twoim poście pokazałeś z rzut ekranu z terminala: Twój system wysyłał dane jako ASCII. Zaletą tego jest możliwość czytania danych bezpośrednio w terminalu.
Bo zamiast krzaków widziałeś reprezentację danych gotową do odczytu przez ludzkie oko.
Przykładowo wysyłając liczbę 123 program lub urządzenie wysyła najpierw:
Cyfrę 1 (co zero-jedynkowo będzie wysłane jako 0011 0001)
Cyfrę 2 (zero-jedynkowo 0011 0010)
Cyfrę 3 (zero-jedynkowo 00110011)
Natomiast na ekranie terminala dane te wyświetlą się jako 123.
Gdybyś zmienił sposób wyświetlania danych z ASCII na HEX dane te stały by się nie czytelne i wyświetlił by się jako hex reprezentacji 123 czyli 31 32 33.
Krzaki zaczynają się gdy podglądasz znaki z poza zakresu 32 do 127, znaki tak zwane nie drukowane nie dedykowane do czytania.
Gdybyś popatrzył na te dwie strzałeczki "«" ich odpowiednich w hexie to AB.
W tabeli ASCII ich nie znajdziesz, znajdziesz je natomiast w tabeli UTF-8 (unicode) na pozycji 171 z tym ze dodatkowo jest tam jeszcze drugi bajt z przodu ale tego tłumaczył nie mam zamiaru.
Ramka danych która tu pokazałeś "AA C0 71 01 88 02 99 AC 41 AB" nie jest dedykowana do czytania przez człowieka, przynajmniej takie wrażenie robi reprezentacja ASCII.
Jak sam zauważyłeś jest tam nagłówek który zawsze jest identyczny AA C0 oraz AB do terminacji ramki.
A dane to 71 01 88 02 99 AC 41.
Obieranie danych trzeba rozbić na kroki, można to zrobić na wiele sposobów, każdy z nas ma swój ulubiony zapis a raczej nawyk z tym samym efektem końcowym.
Bartek Podał Ci rozwiązanie jak to ogarnąć jeśli dane to typowe ASCII z zakresu znaków drukowanych.
Natomiast żeby odebrać dane w formie jak powyżej musisz znać ich przeznaczenie.
Musisz wiedzieć jakie jest przeznaczenie każdego bajtu i bez tego niestety ani rusz.
Podstawowy kod jest banalny, będzie się składał z konfiguracji UART, koniecznie z buforem.
Oczekiwania na dane czyli wszystkim znane i lubiane Ischarwaiting oraz inputbin.
Może wyglądać w ten sposób:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Regfile = "m32def.dat"
- $crystal = 8000000
- $hwstack = 128
- $swstack = 64
- $framesize = 128
- $baud = 115200
- Const _valcheck = 1 'sprawdzanie poprawnosci konwersji Val()
- Config Serialin = Buffered , Size = 100
- Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
- Config Lcd = 20 * 4
- 'Dim Znak As Byte , Dane As String * 60 , Helpb As Byte , N As Byte
- 'Dim My_strings(10) As String * 25 , My_bytes(5) As Byte , Testb As Byte
- Dim Tablica(10) As Byte
- Enable Interrupts
- cursor off
- cls
- wait 1
- Do
- While Ischarwaiting() <> 0 'gdy znak czeka w buforze
- Inputbin , Tablica(1) , 10 'obierz 10 bajtów zapisz zaczynajac od komórki 1
- Wend
- Locate 1 , 1 : Lcd "D1 " ; Tablica(1)
- Locate 2 , 1 : Lcd "D2 " ; Tablica(2)
- Locate 3 , 1 : Lcd "D3 " ; Tablica(3)
- Locate 4 , 1 : Lcd "D4 " ; Tablica(4)
- Waitms 500
- Locate 1 , 1 : Lcd "D5 " ; Tablica(5)
- Locate 2 , 1 : Lcd "D6 " ; Tablica(6)
- Locate 3 , 1 : Lcd "D7 " ; Tablica(7)
- Locate 4 , 1 : Lcd "D8 " ; Tablica(8)
- Waitms 500
- Cls
- Locate 1 , 1 : Lcd "D9 " ; Tablica(9)
- Locate 2 , 1 : Lcd "D10 " ; Tablica(10)
- Loop
- End
- End Sub
Jedną z zalet wysłanie danych w ten sposób jest szybkość przesyłania i łatwość obróbki.
Wadą jest to iż trzeba znać przeznaczenie każdego bajtu.
Jeśli podasz więcej info na temat przeznaczenia każdego z tych bajtów rozpisze to lepiej na ten moment jest to czyste minimum.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- Stefan_25
- Posty: 22
- Rejestracja: 04 sty 2021, 18:36
Re: Odbiór danych rs232 Bascom
Dziękuje za cierpliwość i wyrozumiałość.
Teraz rozumie trochę więcej o co chodzi z tymi odczytami.
To co odczytuje to czujnik smogu SDS-011.
Potrzebuje odczytać całe 10 bitów i zamienić miejscami 4 bity , tj. bit 3 i 4 z bitami 5 i 6 i wysłać to z powrotem.
Dzięki temu zabiegowi dostanę informacje najpierw o stężeniu PM-10 a potem PM-2.5.
Dziękuje i Pozdrawiam.
Teraz rozumie trochę więcej o co chodzi z tymi odczytami.
To co odczytuje to czujnik smogu SDS-011.
Potrzebuje odczytać całe 10 bitów i zamienić miejscami 4 bity , tj. bit 3 i 4 z bitami 5 i 6 i wysłać to z powrotem.
Dzięki temu zabiegowi dostanę informacje najpierw o stężeniu PM-10 a potem PM-2.5.
Dziękuje i Pozdrawiam.
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Odbiór danych rs232 Bascom
I teraz Stefan proszę Cię załóż osobny temat/wątek i sprawę posuniemy szybciej do przodu
- Stefan_25
- Posty: 22
- Rejestracja: 04 sty 2021, 18:36
Re: Odbiór danych rs232 Bascom
Tak jest Panie kierowniku, już się robi.