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? 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 25 lip 2025, o 21:02


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
    Autor Wiadomość
    PostNapisane: 27 mar 2013, o 14:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 08 mar 2013
    Posty: 236
    Lokalizacja: Warszawa
    Pomógł: 5

    Witam!

    Nie mogę ogólnie nic zapisac do bufora przy uart. Program:
    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.

    W terminalu wpisuje jakiis lanuch np. "co jest". Chciałbym go zapisac do bufora i chciałbym porównywać dwa stringi, ale nie wiem jak zrobić żeby działało. dzęki za pomoc.
    Dla zywklego char dziala dla tablicy char juz nie, jakby tam nic nie było.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2013, o 14:28 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    Ja polecam ci jednak PRZYNAJMNIEJ takie podejście do obsługi UART - jeśli chodzi o przerwania - jakie masz zaprezentowane w książce:

    http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

    bo niestety to - co tu próbujesz zrobić woła o pomstę do nieba chociażby z uwagi na jedną wręcz TRAGICZNĄ rzecz, podkreślam TRAGICZNĄ - czyli sam fakt że w przerwaniu używasz

    _delay_ms(1000);

    ale też samo podejście do prób porównywania stringów - wręcz przenoszenia programu do przerwania - jest chybionym pomysłem. W ten sposób zawsze będziesz miał problemy - szczególnie z odbiorem danych np z terminala....

    na naszym forum już było kilka prób walki i to w miarę udanych aby na podstawie chociaż tylko tej książki zrobić sobie odbiór stringów - i nawet jeden przykład kolegi zdaje się ukasz całkiem niedawno - wczoraj czy przedwczoraj - sprawdź proszę.

    ------------------------ [ Dodano po: 1 minucie ]

    o np tutaj - masz link:

    post32037.html#p32037

    i tą drogą idź korzystając normalnie z buforów cyklicznych i obsługi przerwań jak w książce - a całą resztę próbuj przynajmniej w taki sposób. Jak najszybciej uciekaj z takimi pomysłami jak wyżej z przerwań UART'a :(

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2013, o 14:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 08 mar 2013
    Posty: 236
    Lokalizacja: Warszawa
    Pomógł: 5

    Dobra, będę pamiętał!

    Dzięki, może będzie działało, musze przeanalizowac tylko.

    Niby działa ale mi dane uciekają i nie wiem czemu. Kod wyglada teraz tak:
    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.

    Może żle ziinicjalizowałem uarta. Skopiowałem cala inicjalizacje z noty atmegi i wstawilem zgodnie z nota wartosc UBRR.

    Dobra już działa całość jak zamierzałem od wczoraj, dzięki, teraz wiem jak korzytsac z przerwań, wielkie dzieki.

    _________________
    sig off ;(



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

    Dołączył(a): 26 mar 2013
    Posty: 5
    Pomógł: 1

    Jeśli chodzi o obsługę UART to musisz w pętli while pobierać ciągle jeden znak do zmiennej char. Potem musisz sprawdzić w if czy coś w tej zmiennej jest. Jak powszechnie wiadomo, bufor UART jest cykliczny, także jeśli odczytałeś z niego znak, automatycznie ten znak się z niego usunął i nastąpiło przesunięcie. Piszesz więc instrukcje do if dla prawdy która zapisuje zmienną ze znakiem do tablicy. Potem inkrementujesz zmienną indeksu tablicy. Teraz piszesz warunek który sprawdza czy nastąpił znak enter i jeśli tak się stało to zerujesz znak i zmienną indeksu tablicy.
    Powinno działać


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 mar 2013, o 14:25 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 08 mar 2013
    Posty: 236
    Lokalizacja: Warszawa
    Pomógł: 5

    Dzieki, zrobiłem jak napisałeś odnośnie sprawdzenia czy nastąpił znak enter i teraz jest gites.

    _________________
    sig off ;(



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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