Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 8 kwi 2025, o 05:55


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
    Autor Wiadomość
    PostNapisane: 24 lut 2015, o 10:53 
    Offline
    Nowy

    Dołączył(a): 18 gru 2014
    Posty: 8
    Lokalizacja: Jastrzębie
    Pomógł: 0

    Witam.
    Mam mały zgryz panowie, otóż od jakiegoś czasu próbuje stworzyć komunikację dwukierunkową między dwoma mikrokontrolerami.
    Nie umie sobie z tym poradzić,zadanie pewnie proste ale ja nie potrafię i nie mam już sił :)
    Komunikacja ma wyglądać tak:
    wysyłam 6 danych 0-255 ---> odbiera 6 danych przetwarza i odpowiedź.
    Nie wiem nawet już skąd ściągnąłem ten kod ale niby to działa,ale jak napisałem wcześniej niby.
    Może któryś z kolegów podpowie jak by to można prościej zrobić.


    Nadajnik:

    Źle wstawiony listing - Różowo-zielony J.

    Odbiornik:

    Źle wstawiony listing - Różowo-zielony J.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 lut 2015, o 21:44 
    Offline
    Nowy

    Dołączył(a): 18 gru 2014
    Posty: 8
    Lokalizacja: Jastrzębie
    Pomógł: 0

    Nic nie rozumie z wątku który zapodałeś,chyba nawet rozmowa gdzieś poszła bokiem.

    Mikrokontrolery to Atmega8 połączone sprzętowymi RS, nie wiem od czego zacząć a widzę że to chyba mnie przerasta.
    nic kompletnie nie rozumie,na jakimś forum przeczytałem że niema co się zabierać za komunikację binarną bo to dopiero problem opanować.
    link do tego postu gdzie to przeczytałem :
    http://forum.atnel.pl/topic1021.html



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 lut 2015, o 23:48 
    Offline
    Nowy

    Dołączył(a): 18 gru 2014
    Posty: 8
    Lokalizacja: Jastrzębie
    Pomógł: 0

    Dziękuję Ci bardzo za okazaną pomoc ale ja jestem zbyt "" żeby nie używać wulgaryzmów.
    Przerobiłem to co napisałeś:


    Źle wstawiony listing - Różowo-zielony J.

    Odbiornik:


    Źle wstawiony listing - Różowo-zielony J.

    No i dostaję same śmieci które o dziwo mają swoją powtarzalność.
    Na domiar złego po zastosowaniu w nadajniku funkcji :"Config Serialout = Buffered , Size = 20" mamy piękny zawias.
    Programy testuję na innych procesorach bo wygrzebałem płytki z wyświetlaczami żeby widzieć co się dzieje docelowo będą to
    dwie Atmega8.
    Nadajnik to Atmega644 taktowana zewnętrznym 8Mhz / Baud=9600
    Odbiornik to Atmega32 taktowana zewnętrznym 8Mhz / Baud=9600

    Aż mam chęć nakręcić film o tym co się dzieje na LCD odbiornika :)
    Pozostaje na dziś już mi tylko odkręcić conieco i się ululać :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lut 2015, o 00:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Stefan zagadnienie jest w miarę proste i Bartek podał Ci linki do postów zobacz na to co napisałem i przeanalizuj, głwnie robimy to na dwa sposoby ASCII albo binarnie.
    Ja uważam że binarnie jest prościej i szybciej przesyła i mniej klepania na klawiaturze minus taki ze niedoświadczeni maja problemy.
    Tu przykład ASCII
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Tu jest krótki kod który odczytuje położenie anteny i wysyła przez uart do modułu LAn i do sterownika głownego.

    Zobacz na moje wpisy z linku który podał Bartek.
    Jeśli nie ogarniesz do weekendu to się odezwij, chętnie pomogę, dziś niestety jestem po 14 godzinnej dniówce mam dość idę spać.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lut 2015, o 11:05 
    Offline
    Nowy

    Dołączył(a): 18 gru 2014
    Posty: 8
    Lokalizacja: Jastrzębie
    Pomógł: 0

    Witam.
    Panowie jest mały sukces, mały dlatego że udało się wysłać jedną cyfrę
    Nadajnik:
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Odbiornik:
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Teraz Moje pytanie:
    W odpowiedzi dostaję taki oto ciąg "49 13 10"
    49 - ASCII "1"
    13 - ASCII "Enter"
    10 - ?? No własnie co to jest i poco to leci już za znakiem końca linii ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lut 2015, o 11:11 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 sty 2014
    Posty: 447
    Lokalizacja: DKL
    Pomógł: 53

    @stefan_25, 10 to w ASCII LF, czyli znak przejścia do nowej linii.
    Tu masz tabelkę z opisami http://pl.wikipedia.org/wiki/ASCII

    _________________
    Migracja z punktu B do punktu C
    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2015, o 10:39 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Witam Stefan jakieś postępy??



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 15:21 
    Offline
    Nowy

    Dołączył(a): 18 gru 2014
    Posty: 8
    Lokalizacja: Jastrzębie
    Pomógł: 0

    Witam.
    Wybaczcie panowie że nie odpisywałem z powodu braku czasu ale niestety nie umie tego opanować.
    Gdzieś robię błąd,aplikację miałem zamiar docelowo wykorzystać przy sterowaniu kilku urządzeń ale niestety.
    Po podłączeniu 3 po RS-485,czyli "1-Master" / "2-Slave" wszystko przestaje działać.
    Wykorzystałem kod znaleziony gdzieś tam w internecie i podany na samym początku ale gdzieś mi się to wiesza.
    Napisałem na początku że komunikacja miedzy 2 uP bo zwykle od czegoś trzeba zacząć i tu już małe problemy się pojawiły,
    jak to ogarnąłem mniej więcej (z akcentem oczywiście na mniej :)) to kolejne problemy.
    Przy odpytywaniu urządzeń czy są i o status jego pracy wszystko idzie w łeb.
    Jeśli mógłbym prosić o jakąś prostą komunikację to będę wdzięczny bo ja wysiadam,wysłać 6 danych wszystko to cyfry żadnych liter
    6 x Data x (0-255) o potem to odebrać.

    Na razie nie mam zbytnio czasu bo jeszcze mam budowę domu i trzeba pilnować fachowców a przy okazji jak to w Polsce trzeba
    być samemu fachowcem :) Bo przecież wezwałem fachowców :)

    Dziękuję za zainteresowanie tematem i wszelaką pomoc a i ja postaram się odpisywać jak do czegoś dojdę i będę miał czas,
    jest pogoda więc muszę ją wykorzystać.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 21:54 
    Offline
    Nowy

    Dołączył(a): 18 gru 2014
    Posty: 8
    Lokalizacja: Jastrzębie
    Pomógł: 0

    Nie mam "wait'ów" w sensie że jest malutki wygląda to tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Myślę że on temu nie szkodzi.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 22:09 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Stefan właśnie coś dla Ciebie piszę czekaj cierpliwie zaraz to wyślę

    ------------------------ [ Dodano po: 43 minutach ]

    Pomińmy na moment rs485 i sterowanie kontrolą przepływu skupmy się na przesyłaniu danych pomiędzy dwoma układami i tylko TTL żeby było łatwiej i bez sprzętowych błędów.
    Jak wiadomo transmisja przy użyciu ASCII jest łatwiejsza, ale jest dużooooo więcej pisania nie będę się tu powtarzał wiec pozwolę sobie przekleić parę przykładów.
    Na początek transmisją binarna przy użyciu co ważne tablicy.
    Parę lat temu robiłem testy z których wynikło że binarnie najlepiej jest wysyłać całe tzw paczki danych jako tablice. Bo prawdopodobieństwo wystąpienia błędu było najmniejsze.
    Buforowanie portu szeregowego to podstawa.
    dla zrozumienia zagadnienia przykład z bascomowego helpa:
    Zwróć uwagę na "'first compile and run this program with the line below remarked
    Config Serialin = Buffered , Size = 20
    "
    Możesz test przeprowadzić w symulatorze zmień wait 1 na waitms 100 nie dodaj $sim na początku programu.
    Uruchom program i wciskaj kolejno ale szybko klawisze 12345678.
    Co zobaczysz?
    Program zdąży odczytać tylko np klawisz 1,2 później w oknie terminala wyświetli się np tylko 6,7.

    Teraz skompiluj program z linią nie za remarkowaną
    Config Serialin = Buffered , Size = 20

    Wykonaj te same kroki jak powyżej wciskaj szybko cyfry od 1 do ....

    Obserwuj okno terminala, kiedy ty już skończyłeś wciskać klawisze cyfry nadal pokazują się w terminalu.

    Tak właśnie działa buforowanie. W przykładzie poniżej procesor był zajęty tylko bezczynnym czekaniem waitms 100 ale może to być coś innego czy w danym momencie będzie zajęty nasz układ.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Co potrzebujemy do wysyłania danych ?
    Potrzebujemy tablice w której te dane będą umieszczone, na pewno bufor, przydała by się jakaś flaga że są już nowe dane do wysłania, co ważne nie będziemy wysyłać bez sensu tych samych danych.

    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Obowiązkowo konfiguracja portów a w naszym przykładzie jeszcze przetwornik ADC i timer
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Jakieś tam zmienne w tym przypadku będzie to oś X oraz oś Y
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Na potrzeby naszego testu pominę uśrednianie wyników z ADC nie che mi się tego pisać i nie jest to tematem rozmowy.
    Standardowo zaczynamy od właczenia przerwań
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    I zaczynamy naszą część główną.
    Zanim nasz nadajnik zacznie nadawać dane pobrane z wejścia ADC musimy go jakoś zsynchronizować czyli czekamy na sygnał gotowości od odbiornika w tym wypadku może to być ASCII 13 czyli enter
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Teraz gdy wartość zmiennej przetwornik będzie różna od wartości zmiennej osy wtedy przypisujemy wartość zmiennej przetwornik do zmiennej osy
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Ustawiamy naszą flagę_TX rozbita na 8 bitów
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Korzystając z tablicy Serial_tx(1) , 1 = Osy przypisujemy wartość zmiennej osy do pierwszej komórki naszej tablicy.
    Składnia jest następująca serial_tx(komórka tablicy), ilość bajtów, my przypisujemy jeden bajt od pierwszej komórki tablicy.

    Podobnie dla zmiennej osx ale tym razem zaczynamy od drugiej komórki Serial_tx(2) , 1 = Osx i oczywiście zmieniamy bit flagi Flag_tx.1 = 1
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    W ten sposób możesz przypisywać wartości zmiennych do twoich komórek w tablicy

    Całość można zamknąć w select case
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Teraz jeśli jedn z naszych flag flag_tx jest ustawiona lub jak kto woli flag_TX <>0 jest różna od zera. Wysyłamy całą tablice:
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    I koniecznie resetujmy flagę aby nie wysyłać bez sensu tych samych danych.

    Składnia jest prosta: Printbin Serial_tx(od której komórki zaczynamy wysyłać) ; ile bajtów wysyłamy

    Kolejny raz muszę się powtórzyć, ponieważ nie uśredniam danych pobranych z ADC następują spore wahania wartości zmiennej przetwornik.
    Co powoduje przypisanie wartości zmiennej przetwornik do osy oraz osx

    To by było na tyle w części nadawczej w dużym uproszczeniu przy użyciu tablicy i printbin
    w kolejnym poście część odbiorcza przy użyciu inputbin
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Zapewne znajdę tu parę błędów postaram się je poprawić w miarę ponownego czytania.



    Ostatnio edytowano 7 mar 2015, o 17:57 przez pikczu, łącznie edytowano 2 razy

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 mar 2015, o 00:01 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Cześć odbiorcza przy użyciu inputbin i tablicy.
    Będziemy kręcić serwem modelarskim w zależności od wartości ADC
    Tak samo jak w części nadawczej mamy konfigurację poru szeregowe, dodatkowo konfiguracje serw i timera oraz zmienne.
    A także przerwania.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Zaraz przed wejściem w pętle główna wysyłamy naszą wiadomość o gotowości do odbioru czyli drukujemy enter Print Chr(13); co ważne z średnikiem na końcu.
    Średnik na końcu standardowego Print coś tam ; nie wysyła ASCII 13 czyli enter i LF ASCII 10 czyli line feed.

    przechodzimy do pętli głównej naszego odbiornika.
    Będziemy używać komendy ischarwaiting co dosłownie oznacza "że jakiś znak czeka w buforze"
    Jak już wspomniałem powyżej bardzo ważne jest buforowanie wejściowe jak i wyjściowe.
    Dlatego musimy użyć Config Serialin = Buffered , Size = 120 tym razem zwróć uwagę jest tam serialIN ale wróćmy do naszego odbioru.

    Wcześniej tworzymy zmienną serial_flag która będzie przyjmowała wartość jeden za każdym razem jak w buforze będzie jakiś znak gotowy do odczytu.
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Jak to dział za każdym razem kiedy w buforze odbiorczym są jakieś dane flaga Serial_flag przyjmuje wartość 1 po czym zapalamy led podpięty do portb.0 i przypisujemy zawartość bufora do tablicy serial_rx zaczynając od pierwszej komórki naszej tablicy.
    Składnia jest taka Inputbin Serial_rx(do której komórki zaczniemy zapisywać ) , ile bajtów czyli w naszym przykładzie Inputbin Serial_rx(1) , 6 od pierwszej komórki zapisujemy sześć kolejnych.

    To była najważniejsza część odbiór przy użyciu INPUTBIN i przypisanie do tablicy, co ważne robimy to "ciurkiem" a nie:
    Obrazek
    Później wykorzystujemy odebrane dane w dowolny sposób.
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Cały kod odbiorczy:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Teraz już idę spać jutro opiszę nadawanie i odbiór w ASCII.
    --------------------------------Edit ---10:05 07.03.2015

    Wrócę jeszcze na moment do wysyłania przez printbin, ponieważ powyższy przykład jest tylko dla dwóch urządzeń można go rozbudować o adres co pozwoli na komunikacie z wieloma urządzeniami przy użyciu rs485. jeśli korzystasz z układów bez automatycznej zmiany kierunku użyj wspomniane przez Bartka Config Print0
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Rozważ jeszcze jedną możliwość, a mianowicie użycie dwóch linii rs485 jedna do nadawania druga do odbioru sprawdza się to bardzo dobrze.


    Jak zapewne zauważyłeś tablica miała rozmiar 6 bajtów a dane były zawarte tylko w pierwszym i drugim, kolejne 4 były puste.
    Nic nie stoi na przeszkodzie aby dodać tam adres i sumę kontrolną dla naszych 5 komórek crc8 a wręcz jest to konieczne.
    wysyłanie ramki danych z adresem i suma kontrolna mogło by wyglądać tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Do testów polecam program ze strony Pololu Serial Transmitter utility for Windows
    https://www.pololu.com/docs/0J23



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 mar 2015, o 12:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Przejdźmy teraz do odbioru za pomocą ASCII
    Kluczowe fragmenty kodu są takie same mam na myśli ischarwaitg
    Na początek przykład z Bascomowego helpa który w prosty sposób rozwiązuje adresowanie naszych urządzeń na magistrali rs485 czyli BYTEMATCH
    Oczywiście buforowanie jest wymagane i niech to będzie swego rodzaju nawyk, zawsze buforujemy uart wejściowy jak i wyjściowy.

    Tak ja w poprzednich przykładzie z helpa najpierw uruchom w symulacji bez linii
    Config Serialin = Buffered , Size = 20 , Bytematch = 65
    Zachowanie jest identyczne jak w przykładzie powyżej bez bufora.

    Teraz dodaj linię z ustawieniami bufora i dopasowaniem bajtów czyli Bytematch = 65
    Bytematch = 65 rozpoznaje nam duża literę A jeśli teraz uruchomisz symulację wciskając klawisze jak poprzednio zauważysz że są one buforowane a dodatkowo po wysłaniu dużej litery A mamy proste i skuteczne rozpoznawanie np naszego adresu lub jakiegoś specjalnego znaku.
    Proste a zarazem bardzo skuteczne.
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    cdn.



    Ostatnio edytowano 7 mar 2015, o 15:51 przez pikczu, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 mar 2015, o 15:39 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Piszemy poprawne rozwiązanie przy użyciu ASCII
    Standardowo ustawienia konfiguracyjne, zmienne i przerwania:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Deklarujemy zmienne dla przykładu zmienne dla uart 0 i uart 1

    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Będziemy używać komendy split która rozbije przychodzące znaki po znaku spacji.

    Standardowo zaczynamy od sprawdzania czy znak jest w buforze
    przykład dla uart0:
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Sprawdzamy czy znak jest w buforze czyli If Ischarwaiting() > 0 Then pobieramy znak z bufora do zmiennej Znak_.
    Teraz jeśli nasza zmienna Znak_ zawiera 13 ASCII czyli enter lub Len(uart_komenda) > 20 Then ilość odebranych znaków jest większa niż 20 to Call Uartrx
    Ilość znaków musisz dobrać według swoich upodobań nie wiem jak długie będą twoje komendy.

    Teraz przechodzimy do uartrx wspomniane na początku split będzie znajdować się właśnie w tym miejscu.
    Tniemy nasze komendy żeby można było je rozróżnić
    Ile_elementow = Split(uart_komenda , Getcommands(1) , " ")
    Zmienna Ile_elementow zawiera jak sama nazwa mówi ilość pociętych elementów.
    Zmienna uart_komenda to nasza źródłowy string do którego dodawaliśmy znaki podczas odbioru i pobierania z bufora Uart_komenda = Uart_komenda + Chr(znak_) 'kluczowe budowanie bufora
    Zmienna Getcommands(1) to nasza tablica o rozmiarze 10 na 9 znaków, zapewne zauważyłeś po przecinku cudzysłów to właśnie znak spacji miedzy cudzysłowiem będzie naszym punktem w którym będzie następowało cięcie i umieszczanie kolejno w komórkach tablicy Getcommands(1).

    Po uzyskaniu już pociętych komend reszta jest już z górki. musimy tylko zdecydować jak reagować na nasze komendy.
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Przejrzystym narzędziem do tego będzie select case, wiec piszemy:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    W łatwy przejrzysty sposób możemy umieszczać komendy jedna pod druga, używanie stałych jeszcze ułatwi nam zadanie raz napisane select case będziemy mogli edytować w szybki sposób.
    Wracamy na początek naszego programu i dodajemy stałe:

    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Dla lepszej zabawy wybieramy w opcjach bascoma emulowanie terminala vt100 i teraz możemy korzystać z własnych kolorów oknie terminala.
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    teraz cały kod:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    To by było na tyle nie będe omawiał select case i zawartych komend zaprogramuj układ sparwdź sam jak to działa.
    Obsługa drugiego uarta jest zrobiona podobnie ale nie identycznie porównaj sam.
    dla testu wpisz w terminalu "kot" sprawdź tez co robi "kon paszcza"
    Pozdrawiam
    Pikczu

    Ps: błędy i literówki poprawie później.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2015, o 14:01 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Stefan jakieś postępy, jakieś pytania ??



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2015, o 18:14 
    Offline
    Nowy

    Dołączył(a): 18 gru 2014
    Posty: 8
    Lokalizacja: Jastrzębie
    Pomógł: 0

    Witam.

    Dziękuję wszystkim za podpowiedzi,można tak powiedzieć że Wspólnymi siłami się coś udało i nawet to działa :)

    Nie myślałem że tylu ludzi się udzieli do rozmowy i przyznam iż jestem w szoku że mogą być tak przychyli ludzie :)

    Naprawdę bardzo dobre forum i wspaniali użytkownicy :)

    Pozdrawiam wszystkich i jeszcze raz dziękuję za podpowiedzi a nawet gotowe programy.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2015, o 22:33 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Jesli tych pare linii kodu przydaly sie do czegos wystarczy ze klikniesz pomogl
    Pozdrawiam
    Pawel



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 31 mar 2015, o 07:52 
    Offline
    Nowy

    Dołączył(a): 18 gru 2014
    Posty: 8
    Lokalizacja: Jastrzębie
    Pomógł: 0

    Witam.
    Nie zauważyłem tegoż guziczka :) Odpowiednim osobom już poleciały Pochwały :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 cze 2015, o 19:06 
    Offline
    Użytkownik

    Dołączył(a): 19 lip 2013
    Posty: 771
    Pomógł: 40

    Witam!
    Wroce do tego wątku bo mam pytanie.
    Cytuj:
    Ile_elementow = Split(uart_komenda , Getcommands(1) , " ")

    jak zapisać jak znak rozdzielający to właśnie cudzysłów ( " )
    Kod:
    Getcommands(1) , "chr 34")
    ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 cze 2015, o 21:29 
    Offline
    Użytkownik

    Dołączył(a): 19 lip 2013
    Posty: 771
    Pomógł: 40

    a wielkie dzięki o takim nawiasie nie pomyślałem :)
    Proszę bacznie obserwować temat, bo pewnie jeszcze będę miał pytania:)
    Pisze obsługę GSM do włączania wabasto i może alarmu w samochodzie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 cze 2015, o 14:30 
    Offline
    Użytkownik

    Dołączył(a): 19 lip 2013
    Posty: 771
    Pomógł: 40

    Właśnie na SIM900 sie bawię.I tez chce zrobić żeby reagował ,tylko na moje dzwonki i sms ,a resztę ignorował.
    Trochę z problemami ,ale posuwam sie naprzód.Na razie nie będę Cie prosił o gotowca :).Chce trochę sam pomyśleć.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 cze 2015, o 19:29 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 27 gru 2011
    Posty: 186
    Lokalizacja: Dublin
    Pomógł: 8

    Proponuję założyć nowy wątek a ten trzymać możliwie jak najbardziej na temat komunikacji przez uart miedzy procesorami.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO