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 21 maja 2025, o 23:31


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
    Autor Wiadomość
    PostNapisane: 9 mar 2018, o 18:07 
    Offline
    Nowy

    Dołączył(a): 20 lis 2017
    Posty: 6
    Pomógł: 0

    Witajcie, piszę ponieważ nie potrafię tego sam zrobić, znajdzie się jakaś życzliwa duszyczka która przerobiła by te dwie Mirkowe funkcje w ten sposób aby umożliwiały one odczyt i zapis pojedynczych bajtów? Kompletnie nie mam pojęcia jak to zrobić a moje próby tylko sprawiają że resztkę włosów na głowie zaraz sobie wyrwę :/


    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 mar 2018, o 18:22 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 181
    Lokalizacja: Kraków
    Pomógł: 30

    Przecież masz w BB funkcje wysyłającą/odbierającą jeden bajt:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 mar 2018, o 18:37 
    Offline
    Moderator
    Avatar użytkownika

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

    janusz17 napisał(a):
    Przecież masz w BB funkcje wysyłającą/odbierającą jeden bajt:


    Proszę wybacz mi określenie ale to nonsens ...

    te dwie funkcjie TWI_write_buf() oraz TWI_read_buf() - robią WSZYSTKO ! ;) zupełnie wszystko i nie ma potrzeby rozbijać tego super mechanizmu. Gdy widzę jak na forum pomimo posiadania takich extra funkcji niektórzy zamiast dopytać - to wchodzą do biblioteki, wyłuskują bebechy na wierzch i jak wysyłają w sposób liniowy całe dziesiątki bajtów - zamiast użyć Qurczę JEDEN funkcji to aż mi coś w kręgosłupie zgrzyta i włosy jeżą się pod łopatkami

    johny5 napisał(a):
    znajdzie się jakaś życzliwa duszyczka która przerobiła by te dwie Mirkowe funkcje

    dobrze, że chociaż zadajesz pytanie na forum .... zamiast to kroić na kawałki jak inni - zupełnie niepotrzebnie

    UWAŻAJ - teraz wyślę JEDEN bajt za pomocą tej funkcji, załóżmy że będzie to 8-bitowa zmienna o nazwie np my_reg:


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


    KONIEC! ... koniec ?

    przedostatni argument to ilość bajtów które chcesz wysłać - więc skoro chcesz tylko jeden bajt to dlatego jest tam jedynka

    ostatni argument to adres zmiennej (wskaźnik) do bufora jednobajtowego - co uzyskujesz operatorem &

    wcześniej oczywiście podajesz standardowy adres swojego scalaka na I2C - masz go w nocie PDF

    a drugi argument to adres w pamięci scalaka czy też adres rejestru scalaka - zależy co to za scalak

    i po jasny gwint coś przerabiać ? albo wyłuskiwać z biblioteki jakieś tam pojedyncze funkcje ? ;)

    ------------------------ [ Dodano po: 5 minutach ]

    jeśli to ma być np zapis godziny do RTC PCF8583 i się uprzesz robić to za pomocą pojedynczych bajtów to proszę

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

    (4 - to adres rejestru godzin w scalaku)

    i co? można? - można .... trudne ? coś trzeba było przerabiać ? nie trzeba bo po grzyba ? ;)

    ------------------------ [ Dodano po: 7 minutach ]

    ale jakbyś chciał zapisać od razu sekundy, minuty i godziny to po prostu:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    tyle że teraz zapisujemy 3 bajty a że sekundy w PCF są od adresu = 2 to stąd drugi argument = 2

    ------------------------ [ Dodano po: 10 minutach ]

    TO SAMO - DOKŁADNIE to samo dotyczy odczytu

    Wiem wiem - zaraz padnie pytanie albo sugestia typu

    ale ja mam całkiem inny scalak i nie jest to RTC tylko np przetwornik ADC na i2c ? ... co za Qurczę problem - robimy NADAL DOKŁADNIE TAK samo ... (no chyba że jest jakiś specyficzny scalak, który ma np adresy swoich rejestrów 16-bitowe, albo przesyła się dane 16-bitowe - albo ma jakieś nieco inne adresowanie na i2c to wtedy można sobie lekuchno przerobić te DWIE funkcje - zmieniając chociażby typy dla argumentów i nieco ich ciało i viola! ... nadal używamy tylko tych DWÓCH funkcji

    teraz jaśniej ?


    Autor postu otrzymał pochwałę

    _________________
    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: 9 mar 2018, o 18:59 
    Offline
    Nowy

    Dołączył(a): 20 lis 2017
    Posty: 6
    Pomógł: 0

    kurcze, Mirku, tak próbowałem tylko bez operatora & i chyba dlatego nie chciało działać, już sprawdzam i zaraz daję zna czy zadziałało :D


    Edit:
    tak, chodzi o inny układ niż rtc, BME280



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 mar 2018, o 20:54 
    Offline
    Moderator
    Avatar użytkownika

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

    Cytuj:
    kurcze, Mirku, tak próbowałem tylko bez operatora & i chyba dlatego nie chciało działać

    ale widzisz - bo ty piszesz - że coś tam próbowałeś ... a wiesz co robi operator & ... mówię ci warto to zrozumieć ... w BB to wyjaśniam, ale zdaję sobie sprawę że gdy ktoś zaczyna to może czasem mnie również nie zrozumieć - wtedy warto dopytywać do upadłego na forum .... jak działa ten eND & ;)


    Autor postu otrzymał pochwałę

    _________________
    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: 9 mar 2018, o 21:58 
    Offline
    Nowy

    Dołączył(a): 20 lis 2017
    Posty: 6
    Pomógł: 0

    Mirku, tylko nawet nie wiedziałem że tam ma być jakiś operator, działanie znam ;)


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

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

    Funkcja chyba jest poprawna, adresy sprawdzone paru krotnie, brak odpowiedzi. Analizator takie rzeczy pokazuje, ewidentnie brak ACK'ów. ręce opadają. Sprawdziłęm na tym samym sprzęcie inny program z BB bez problemu działa, prędkości zgodnie z ustawieniami w programie, adresy sprawdzone. Ten moduł chyba uwaliłem albo potrzebuje jakiegoś "boźdzca" :D

    Obrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 mar 2018, o 22:25 
    Offline
    Moderator
    Avatar użytkownika

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

    johny5 napisał(a):
    Funkcja chyba jest poprawna, adresy sprawdzone paru krotnie, brak odpowiedzi. Analizator takie rzeczy pokazuje, ewidentnie brak ACK'ów. ręce opadają.

    Widzisz - trzeba było od początku od tego zacząć ...

    nie znam akurat PDF'a twojego modułu i nie jestem w stanie ze względów czasowych się zapoznać - ale z tego co kojarzę, tam jest mocno inna komunikacja niż 8-bitowa choć może się mylę - więc .... panie kochany tak jak pisałem wyżej ... to nie jest uniwersalna funkcja "na wszystko" .... a książka jest po to aby starać się zrozumieć jak ona działa od podstaw - bo TYLKO TO pozwoli ci dostosować ją do innych układów ...

    To tak troszkę jak z tym operatorem AND "&" ... piszesz że wiesz do czego jest ale nie wiedziałeś że trzeba go zastosować

    zobacz - operator & to operator pozyskania adresu - czyli podaje on wskaźnik do komórki w pamięci RAM - innymi słowy - taki wskaźnik do zmiennej jedno-bajtowej to wskaźnik na pierwszy element tablicy posiadającej JEDEN element ....

    zatem skoro wiesz, że ta funkcja potrzebuje wskaźnika na bufor - to co za problem za pomocą operatora & przekazać tę zmienną jako tablicę jednoelementową ...

    .... a tymczasem polecam zajrzeć do noty PDF swojego modułu i ją dokładnie przestudiować

    ------------------------ [ Dodano po: 2 minutach ]

    aż z ciekawości zajrzałem do noty PDF ... i wydaje się być na pierwszy rzut oka banalna komunikacja i funkcja z BB powinna z marszu działać ;)

    Obrazek

    natomiast patrząc na twoje fragmenty kodu wydaje mi się, że kompletnie nie zaglądałeś do noty - jak chociażby odnośnie adresu SLAVE swojego modułu ... przyjrzyj się dokładnie temu co w nocie na tym obrazku i na swój zrzut ekranu z analizatora


    Autor postu otrzymał pochwałę

    _________________
    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: 10 mar 2018, o 07:59 
    Offline
    Nowy

    Dołączył(a): 20 lis 2017
    Posty: 6
    Pomógł: 0

    Hmmm, dalej nie wiem o co chodzi. jeśli chodzi o adresy to korzystam z tego:
    Obrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2018, o 08:45 
    Offline
    Użytkownik

    Dołączył(a): 02 gru 2015
    Posty: 550
    Pomógł: 28

    Bo pewnie podajesz zły adres na magistrali użyj Mirkowego i2c skanera i będziesz miał prawidłowy adres obejrzyj poradniki o i2c.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2018, o 09:02 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 cze 2014
    Posty: 855
    Lokalizacja: pod Warszawą
    Pomógł: 58

    cześć
    Adres BMP280 w zależności od podłączonego pinu SDO to 0xEC lub 0xEE i z funkcjami z BB musi działać.


    Autor postu otrzymał pochwałę

    _________________
    Pomóżcie mi stanąć na nogi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2018, o 09:13 
    Offline
    Nowy

    Dołączył(a): 20 lis 2017
    Posty: 6
    Pomógł: 0

    mczarny napisał(a):
    cześć
    Adres BMP280 w zależności od podłączonego pinu SDO to 0xEC lub 0xEE i z funkcjami z BB musi działać.


    Posiadam BME280



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2018, o 09:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 cze 2014
    Posty: 855
    Lokalizacja: pod Warszawą
    Pomógł: 58

    Akurat adresy na magistrali dla BMP280 i BME280 są takie same.
    P.Mirek pokazał Ci stronę w dokumentacji z adresem do odczytu i zapisu gdzie masz
    111011x0 czyli ? EC jeżeli za x podstawisz 0 lub EE jeżeli za x podstawisz 1. Co podstawisz w miejsce x zależy od Ciebie bo możesz za pomocą pinu podłączonego do masy lub Vcc zmienić adres układu.


    Autor postu otrzymał pochwałę

    _________________
    Pomóżcie mi stanąć na nogi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2018, o 13:05 
    Offline
    Nowy

    Dołączył(a): 20 lis 2017
    Posty: 6
    Pomógł: 0

    Panowie, już głupieję.

    mczarny napisał(a):
    Akurat adresy na magistrali dla BMP280 i BME280 są takie same.
    P.Mirek pokazał Ci stronę w dokumentacji z adresem do odczytu i zapisu gdzie masz
    111011x0 czyli ? EC jeżeli za x podstawisz 0 lub EE jeżeli za x podstawisz 1. Co podstawisz w miejsce x zależy od Ciebie bo możesz za pomocą pinu podłączonego do masy lub Vcc zmienić adres układu.


    mirekk36 napisał(a):
    natomiast patrząc na twoje fragmenty kodu wydaje mi się, że kompletnie nie zaglądałeś do noty - jak chociażby odnośnie adresu SLAVE swojego modułu ... przyjrzyj się dokładnie temu co w nocie na tym obrazku i na swój zrzut ekranu z analizatora


    Datasheet BMP280 Digital Pressure Sensor napisał(a):
    The last bit is changeable by SDO value and can be changed during operation. Connecting SDO to GND results in slave address 1110110(0x76); connection it to VDDIO results in slaveaddress 1110111(0x77),which is the same as BMP180’s I²C address.


    Będzie ktoś miał tyle cierpliwości i mi to wytłumaczy?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2018, o 13:55 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 02 mar 2014
    Posty: 150
    Lokalizacja: Staszów
    Pomógł: 12

    Datasheet BMP280 Digital Pressure Sensor napisał(a):
    The last bit is changeable by SDO value and can be changed during operation. Connecting SDO to GND results in slave address 1110110(0x76); connection it to VDDIO results in slaveaddress 1110111(0x77),which is the same as BMP180’s I²C address.

    To znaczy tyle co:
    Ostatni bit jest modyfikowany wartością SDO i wartość ta może być zmieniana w czasie działania (operacji). Połączenie SDO z GND skutkuje tym, że układ ma adres: 1110110 (dziesiętnie) czyli 0x76 (szesnastkowo). Połączenie SDO z VDDIO skutkuje tym, że układ ma adres: 1110111 (dziesiętnie) czyli 0x77 (szesnastkowo). To samo odnosi się do adresowania układu BMP180 na magistrali I²C.

    Wynika z tego (przynajmniej dla mnie), że jednocześnie na tej magistrali mogą być dwa takie czujniki. No i aby były rozróżnialne muszą mieć dwa różne adresy.

    VDDIO to napięcie na pinach IO, które może się różnić od napięcia, którym napędzany jest sam układ.
    Doczytałem to tutaj: https://electronics.stackexchange.com/questions/277648/a-difference-between-vdd-and-vddio-in-datasheet-of-a-sensor

    Ja generalnie wiem o tych sprawach bardzo mało i nawet jak ktoś mnie tu zaraz obśmieje, to mi to nie przeszkadza. Przynajmniej dowiem się czegoś.


    Autor postu otrzymał pochwałę

    _________________
    Ad augusta per angusta



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

    Dołączył(a): 04 cze 2014
    Posty: 855
    Lokalizacja: pod Warszawą
    Pomógł: 58

    Kolego johny5
    Zwykle, kiedy w dokumentacji podawany jest 7-bitowy adres układu I2C, należy przesunąć go o jeden bit w lewo i później najmniej znaczący bit ustawić zgodnie z kierunkiem transmisji R=1/W=0.
    Ponieważ funkcja zapisu z BB sama załatwia sprawę z ostatnim bitem więc w adresie będziesz miał "0"
    Więc 1110110 po dodaniu bitu "0" dla W przyjmuje postać 11101100 czyli 0xEC i to jest adres układu dla pinu SDO podłączonym do masy.


    Autor postu otrzymał pochwałę

    _________________
    Pomóżcie mi stanąć na nogi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 mar 2018, o 14:59 
    Offline
    Moderator
    Avatar użytkownika

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

    tonygryps napisał(a):
    Bo pewnie podajesz zły adres na magistrali użyj Mirkowego i2c skanera i będziesz miał prawidłowy adres obejrzyj poradniki o i2c.

    Również to polecam


    Autor postu otrzymał pochwałę

    _________________
    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 

    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