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 15 lip 2025, o 05:27


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
    Autor Wiadomość
    PostNapisane: 26 paź 2020, o 00:15 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 02 kwi 2014
    Posty: 150
    Pomógł: 1

    Cześć wszystkim:)

    Mam taki problem, bawię się czujnikem BMP280 i piszę do niego swoją własną bibliotekę.
    Czujnik ten może rozmawiać z uP przez dwa protokoły I2C oraz SPI. Bibliotekę chcę tak przygotować, aby wystarczyło zmienić dwa parametry i na ich podstawie automatycznie kompilował się kod z obsługą SPI lub I2C.
    Tyle wstępu teraz czas na opis problemu :)

    Mamy fragment funkcji, za pomcą któej konfiguruję parametry pracy czujnika. Po zapisaniu parametrów (wywołąnie funkcji BMP280_write_data) chcę je odczytać (wywołanie funkcji BMP280_read_data) z czujnika i sprawdzić czy poprawnie się zapisały:

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


    Funkcja BMP280_read_data jest sparametryzowana i w zalożności od stanu zmiennych BMP280_I2C oraz BMP280_SPI kompilowana jest odpowiednia funkcja do obsługi magistra

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


    A tak wygląda funkcja odczytująca odebrane dane po SPI

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


    I teraz tak, w funkcji BMP280_Conf (pierwsza u samej góry) w linijce trzynastej przekazuje adres pierwszego elementu tablicy buf do funkcji BMP280_read_data - i moim życzeniem jest, aby do tej tablicy trafiły odczytane wartości z magistrali SPI.
    Funkcja BMP280_read_data przekazuje ten nr rejestru (adres pierwszego elementu tablicy buf) do funkcji SPI_ReceiveData, a w niej dane otrzymane po SPI zapisuję do wskaźnika Dane - linijka 13.
    Niestety, w efekcie takiej incepscji wskaźnikó moja tablica buf ma wartości "0".
    Obrazek
    Co ciekawe, incepcja wskaźnikowa działa poprawnie w przypadku podania adresu uni (patrz linijka 14 w funkcji BMP280_Conf ). W uni poprawnie lądują wszystkie wartości odczytane z SPI.
    Obrazek

    Może mi ktoś podpowie gdzie robię błąd ? :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 paź 2020, o 01:22 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 02 kwi 2014
    Posty: 150
    Pomógł: 1

    Problem rozwiazany :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 paź 2020, o 07:52 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2596
    Pomógł: 129

    To napisz w jaki sposób to rozwiązałeś, wszyscy jesteśmy ciekawi.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 paź 2020, o 08:09 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2019
    Posty: 145
    Pomógł: 37

    Zdefiniuj słowo "incepcja".

    _________________
    Think for yourself and question authority.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 paź 2020, o 17:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 02 kwi 2014
    Posty: 150
    Pomógł: 1

    Rozwiązaniem problemu okazało się brak kodu odpowiedzialnego za pobranie pierwszego pakietu danych w funkcji

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


    A tak powinna wyglądać:

    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.


    czyli funkcja SPI_ReceiveData do pierwszego elementu tablicy były pobierane dane z chwili w której był wysyłany adres od którego chcemy czytać rejestry czujnika

    ObrazekObrazek

    a tak wyglądają dane po dodaniou brakującego kodu:
    ObrazekObrazek

    ------------------------ [ Dodano po: kilkunastu sekundach ]

    fofex napisał(a):
    Zdefiniuj słowo "incepcja".



    Polecam film o tym samym tytule, dokładnie wyjaśni na czym rzecz polega :)



    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 14 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