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 18 kwi 2025, o 16:02


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 13 lis 2017, o 21:43 
    Offline
    Użytkownik

    Dołączył(a): 25 maja 2014
    Posty: 92
    Lokalizacja: Krosno
    Pomógł: 0

    Witam, chciałbym się z wami podzielić moją malutką biblioteką do obsługi UART.

    Jest to pierwsze moje wystąpienie z kodem C na tym forum! :mrgreen:

    Założenia:
    1. Praca oparta o przerwania nadajnika i odbiornika.
    1. Ilość przesyłanych danych mała do kilkudziesięciu bajtów.
    2. Praca na dwóch buforach Tx i Rx.
    3. Transmisja oparta o znaki ASCII


    W moim przykładzie obsługa sprowadza się do wykorzystania:

    1. USART_UDRE_vect - przerwanie od pustego buforu nadajnika
    2. USART_RXC_vect - przerwanie od odebranej danej przez UART.
    3. Bufor Tx - bufor danych wysyłanych, wielkość buforu ustalana na stałe
    4. Bufor Rx - bufor danych odbieranych, wielkość buforu ustalana na stałe
    5. Flaga "Jest_dana_z_RX" - flaga ustawiana kiedy zostanie odebrana cała ramka, czyli jeśli zostanie odebrany znak "CR" (0x0D)

    Dane wysyłane do uC muszą być zakończone znakiem "CR" (0x0D)

    Dane wysyłane z uC muszą być zakończone zerem (0x00). - zero oznacza, że uC ma przestać wysyłać dane.

    Flaga "Jest_dana_z_RX" wykorzystywana do obsługi odebranych danych, patrz przykład kod poniżej.


    Napisałem 4 funkcje obsługujące UART:
    1. Inicjalizacja Uarta
    2. Wysłanie pojedynczego znaku
    3. Wysłanie danych z RAM
    4. Wysłanie danych z ROM

    Poniżej przedstawiam kod:

    UART_ATMega.h

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


    UART_ATMega.c

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


    main.c

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



    Poniżej obrazek z terminala dla tego testowego programu.

    Obrazek

    Proszę o opinie, może jakieś ciekawe podpowiedzi ? utrzymując założenie, że obsługa ma być stosunkowo prosta i na przerwaniach :) .

    Pozdrawiam

    _________________
    Artur



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2017, o 07:30 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

    A co to ma wspólnego z DIY?
    Może jednak warto się zastanowić gdzie się umieszcza
    swoje pytania?

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2017, o 07:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 mar 2015
    Posty: 202
    Pomógł: 15

    MirkoT napisał(a):
    A co to ma wspólnego z DIY?
    Może jednak warto się zastanowić gdzie się umieszcza
    swoje pytania?


    A to, kolego , że jest to projekt programistyczny. Nazwy działów czytamy że zrozumieniem.
    Pozdrawiam

    Wysłane z mojego HTC One_M8 przy użyciu Tapatalka



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2017, o 08:29 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

    A przepraszam!
    Chyba jeszcze spałem jak to pisałem.
    Jeszcze raz przepraszam :oops:

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2017, o 10:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 mar 2014
    Posty: 1475
    Pomógł: 167

    Tak na szybko:
    - Nie masz kontroli przepełnienia buforów w czasie ich wypełniania.
    - po co taka kombinacja z końcem - CR w jedną 0x00 w druga stronę?

    --
    Pozdrawiam,
    Robert



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2017, o 19:54 
    Offline
    Użytkownik

    Dołączył(a): 25 maja 2014
    Posty: 92
    Lokalizacja: Krosno
    Pomógł: 0

    Witam,
    rskup napisał(a):
    Nie masz kontroli przepełnienia buforów w czasie ich wypełniania.


    Nie zrobiłem, ale w sposób świadomy (trochę lenistwo... :oops: ). Choć w zasadzie powinny być więc dorobię.
    Tylko muszę się zastanowić jak sobie obsłużyć przekroczenie rozmiaru, tak aby było prosto i mało kodu:).

    rskup napisał(a):
    po co taka kombinacja z końcem - CR w jedną 0x00 w druga stronę?


    Przerobiłem w obu kierunkach na końcu wymagane znak "CR" (0x0D) :) he he dzieki temu dwie linie kodu mniej:)


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


    Dzięki za uwagi :)

    _________________
    Artur



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2017, o 17:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Witam,
    Artur_26 napisał(a):
    Tylko muszę się zastanowić jak sobie obsłużyć przekroczenie rozmiaru...

    Ja bym poszukal w rozdziale 10_ GB. widzę że masz :)
    Głownie przerwanie ISR( USART_RXC_vect){........:) ,
    oraz funkcję ....uart_getc(void){.....// (w jakim celu funkcja zwraca typ int ? )
    w funkcji uart_get_str(); jest to w jakimś celu sprawdzane. :)
    hmm.. no bo po co nam uszkodzona ramka danych ? pewnie tylko do śmietnika. :)
    a nadpisanie bufora odbiorczego poza jego rozmiarem (gdy np odbiór się chwilowo przerwie bez znaku końca i pojawią następne dane od któregoś tam znaku ),
    zmienna Licznik_Bufora_RX może przekroczyć dozwolony rozmiar Wielkosc_Bufora ,
    wiadomo czym skutkuje. :)
    pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2017, o 19:45 
    Offline
    Użytkownik

    Dołączył(a): 25 maja 2014
    Posty: 92
    Lokalizacja: Krosno
    Pomógł: 0

    Daro69 napisał(a):
    ...
    Daro69 napisał(a):
    zmienna Licznik_Bufora_RX może przekroczyć dozwolony rozmiar Wielkosc_Bufora , wiadomo czym skutkuje. :)


    heh przekonałem się na własnej skórze jak robiłem sobie bibliotekę do nRF24L01 tyle, że w obsłudze SPI. W czasie testów bufor SPI ustawiłem na 16 bajtów :), a jak już wypróbowałem komunikację pomiędzy dwoma nRF24L01 przesyłając sobie kilka bajtów, to zapomniałem, że bufor SPI ma tylko 16 bajtów. I jakie moje zdziwienie było, kiedy wysłałem więcej niż 15 bajtów a na terminalu (bo tak sobie testowałem) pojawiły się tzw. krzaki:)) i szczerze mówiąc to zanim do tego doszedłem to mi trochę zeszło więc.....
    Ale LENISTWO czasem bierze górę hihi.
    Więc dzięki za motywację.

    Pozdrawiam

    _________________
    Artur



    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: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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


    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