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 6 maja 2025, o 23:28


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 43 ]  Przejdź na stronę 1, 2  Następna strona
    Autor Wiadomość
    PostNapisane: 7 lis 2012, o 13:50 

    Pomógł: 0

    Zainspirowany tym projektem http://www.elektroda.pl/rtvforum/viewto ... 1b06eaa0ef

    Zacząłem myśleć w jaki sposób zrobić "tendencje"...

    Czy przez określony czas zbierać próbki i zapisywać min-max, potem porównywać?, czy wymaga to bardziej skomplikowanego algorytmu.

    Po drugie, jest jakiś "prosty" sposób na działanie RFM12 w "sieci" czyli jeden obiera reszta nadaje?.

    Czy trzeba zastosować coś na kształt "rozgłaszania" czyli odbiornik wysyła "beacon" z ID nadajnika (czujnika), który dopiero wtedy odpowiada.
    Wychodziło by na to, że wtedy odbiornik cały czas musi być zasilany, albo w równych odstępach czasu, ale będzie problem z synchronizacją tej sieci.
    Co prawda są "gotowe" rozwiązania pomiarów rozproszonych na RFM12, ale tam jest to za bardzo skomplikowane, bo dochodzi niezależność poszczególnych węzłów sieci, oraz zaimplementowano routing itp.

    Moja zdolność programistycznego myślenia jest nadal na poziomie depresji ;), elektronicznie praktycznie mam cały układ zaprojektowany...., nawet bym sobie poradził z zwiększonym poborem prądu, rzędu kilkunastu mA, bo urządzenia pomiarowe nie muszą być małe.

    PS. Nie jest to projekt komercyjny! więc wszystkie źródła będą publikowane na forum.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 lis 2012, o 14:17 
    Offline
    Moderator
    Avatar użytkownika

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

    "tendencje" hmm "trendy" raczej są prosto robione na zasadzie uśredniania próbek z jakiegoś okresu czasu i porównywania ...

    po drugie - z tym działaniem RFM12 w sieci, to proponuję nie rzucaj się na przygotowaniu koncepcji sieci wielu czujników typu "multi Master" z rozgłaszaniem/broadcastingiem i bóg wie jeszcze czym - bo wyjdzie ci z tego kobyła programistyczna, która pochłonie 90% mocy projektu i prądu a nadal będzie działała o wiele mniej wydajniej niż dedykowane do takich celów chociażby ZigBee czy XBee i podobne , które sporo rzeczy załatwiają sprzętowo bez konieczności udziału programisty. No chyba że po prostu zależy ci sprawdzić się w czymś takim i lubisz się bawić, mając dużo wolnego czasu ;) to jak najbardziej.

    Jeśli już to proponuję ci zacząć jednak od prostszego podejścia i potraktowania sieci czujników z transciverami RFM12 jak sieci RS485 z jednym Masterem na dobry początek. A potem ew wchodź w wodę dalej i głębiej, bawiąc się w multimaster, arbitraż itp. Ale warto byłoby wtedy coś więcej poczytać o istniejących już rozwiązaniach w tym zakresie niż wyważać głową drzwi i tworzyć od nowa własny rozbudowany koncept....

    Bo zawsze trzeba się dobrze zastanowić, czy:

    1. zależy ci na opracowaniu np następcy ZigBee i opracowujesz nowy typ takiej komunikacji i to jest twoim celem
    2. czy robisz jakiś konkretny projekt którego celem jest praca wielu czujników i zbieranie danych

    zwykle udaje się to zrobić zawsze jakimś najprostszym sposobem, a najczęściej jeszcze jak dochodzą kłopoty z poborem prądu to nawet okazuje się na końcu że wystarczą zwykłe komplety nadajnik/odbiornik np Telecontrolli zamiast transcieverów.

    Piszę o tym, ponieważ piszesz o rzekomej "depresji swoich zdolności" ;) bez sensu zresztą ;) ... po prostu - tak mi się wydaje, że może cię dobrze rozumiem (jeśli nie to mnie popraw) .... bo gdy już się ma pod ręką "aż" transcievery zamiast zwykłych kompletów nad/odb - to zaczynają chodzić po głowie coraz bardziej dalekosiężne pomysły. I dobrze zresztą - ale myślę, że nie warto czasem wyważać głową drzwi. Bo jak mówię - spróbuj zapoznać się z tymi XBee jeśli RZECZYWIŚCIE i w 100% masz na tym etapie takie potrzeby komunikacji "bardzo sieciowej" że tak powiem.

    ... a tymczasem trzymając się jakby zasad RS485 z jednym Masterem na takich radiówkach też można bardzo dużo zrobić, a przy okazji nie tracić tyle prądu ....

    ale jak mówię wyżej - może kompletnie źle mówię - bo przecież nie przybliżyłeś założeń swojego projektu.

    _________________
    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: 7 lis 2012, o 14:31 

    Pomógł: 0

    Jak zwykle masz rację :), ale dosyć tego słodzenia ;). Zigbee i Xbee są niestety odrobinę za drogie ;), bo max na czujnik 50zł mogę przeznaczyć, nie będzie tego dużo. Raptem 5-8czujników maksymalnie, może mniej na początek.
    Można by to faktycznie zrobić na nadajnik-odbiornik, ale docelowo możliwe że trzeba będzie czymś zasterować zdalnie.

    Chodzi mi wyłącznie o prostą "sieć" zbierającą temperaturę bezprzewodowo. Niestety z racji niekomercyjności z założenia koszta muszą być jak najniższe ;).

    Nawet nie musi być 1czujnik-1 RFM12, bo one będą w pomieszczeniach gospodarczych, czyli będzie przypadać jeden, lub kilka czujników na jeden RFM12.

    Docelowo faktycznie wirtualna sieć 485 była by bardzo fajna. Musze oblookać z czym się to je ;).
    Danych będzie niewiele.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 lis 2012, o 14:50 
    Offline
    Moderator
    Avatar użytkownika

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

    No więc pomyśl ;) zasady z RS485 można wręcz wprost wprowadzić w życie.

    Jakiś centralny master będzie co jakiś czas odpytywał czujniki i w razie czego jeszcze czymś tam może przez nie - zdalnie - sterować. Tak mi się wydaje.

    _________________
    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: 7 lis 2012, o 14:57 

    Pomógł: 0

    Fakt, pomiar będzie od tyłu, czyli to master inicjuje "wykonaj pomiar" rozwiązuje to problem po pierwsze z ilością czujników, po drugie z ich wykrywaniem i wiele innych problemów.

    Dwa paluszkowe akumulatory AA eneloop powinny załatwić problem zasilania. Raz na jakiś czas będą po prostu wymagały naładowania i tyle.

    Zresztą w moim przypadku nie muszę sprawdzać non stop temperatury raz na 15minut wystarczy, mogę wybudzać raz na 10-15minut moduły... coś pomyślę jeszcze.
    Zamówię jeszcze kilka RFM12 i zobaczę jak się będą sprawdzać :).



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 lis 2012, o 15:23 
    Offline
    Użytkownik

    Dołączył(a): 14 maja 2012
    Posty: 518
    Pomógł: 6

    nie znam się na tym, ale...
    może zastanów się nad rfm22b, gdzie termometr jest chyba w nim gratis i moc większa,
    http://www.hoperf.com/rf/fsk/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 lis 2012, o 15:41 

    Pomógł: 0

    Też już o tym myślałem, ale DS18B20 jest wygodniejszy w użyciu, no i zakres ma do 125C, a potrzebuje mierzyć temperaturę na piecu CO.
    Mocy mi dużo nie trzeba, pomieszczenia gospodarcze nie są od siebie oddalone o więcej niż kilkanaście metrów.

    Chwilowo coś takiego wymodziłem tj. koncept z tablicą struktur i zapisywaniem do niech wyników pomiarów..... dobrze kombinuje, czy mam wrócić do czytania książki ;).
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Wyświetlanie na wyświetlaczu podobnie, tyle że lcd_int(Tsens(i).cel itd.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 lis 2012, o 15:57 
    Offline
    Moderator
    Avatar użytkownika

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

    No na razie lecisz po przypadkowo wykrytych czujnikach - ale dobrze do tablicy struktur temperatury zapisujesz ;) przecież

    _________________
    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: 7 lis 2012, o 16:42 

    Pomógł: 0

    Prośba, czy ktoś może mi podpowiedzieć, jak wyłuskać ID układu DS18B20? za pomocą bibliotek mirka

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


    I potrzebuję wrzucić do id_temp ID wykrytego czujnika. Tyle, że to jest iluś tam bajtowy "ID", po pierwsze nie bardzo wiem, jak go wyłuskać z bibliotek Mirka (próbowałem już za pomocą gSensorIDs[i] ale nie do końca to jest to.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2012, o 18:10 

    Pomógł: 0

    UP!



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2012, o 18:41 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    Słuchaj a co byś powiedział na to aby na dobry początek wyświetlić numer id czujnika?

    Poniżej kod funkcji która jest napisana prawie żywcem z pierwotnej wersji biblioteki od Mirka

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


    A tutaj jest sposób wykorzystania samej funkcji:

    Kod:
    show_id(&gSensorIDs[0][0],4);


    Jak widać powyżej przekazujesz adres tablicy z numerami id(tablica dwuwymiarowa) a następnie podajesz jak długi numer seryjny chcesz wyświetlić(ja mam wpisany 4 i dostaje 8 cyfrową wersję numeru id czyli wystarczającą do wyświetlenia np na lcd)

    Mam nadzieję że troszkę cię to naprowadzi(chodzi o sam mechanizm) na to co chcesz osiągnąć :) .

    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2012, o 19:07 

    Pomógł: 0

    Dziękuję pięknie, spróbuje to ogarnąć swym ciasnym rozumem ;)



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2012, o 19:55 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    To znowu ja :)

    Słuchaj być może to ultra szarlatański sposób ale w twojej strukturze sens zadeklaruj wskaźnik id1 który będzie przechowywać numer seryjny czujnika.

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


    a tutaj masz jak przez tą naszą funkcję show_id wyświetlasz numer seryjny

    Kod:
    show_id(sens1.id=&gSensorIDs[0][0],4);  // do zmiennej id wpisujesz adres tablicy z numerem seryjnym czujnika


    Jak zapewne wiesz że zmienna sens1 jest typu sens(instrukcja typedef tworzy nowy typ danych tak dla uściślenia zeznań :) ). Żeby nie było to przed chwilą sprawdzałem ten powyższy sposób i działa.

    I według mnie to jest rozwiązanie twojego problemu ;) .

    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2012, o 12:49 

    Pomógł: 0

    Działa, ale dziwnie ;).

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


    Wyświetla oczywiście pierwszą temperaturę, czyli np. 24.0C 284a1af4 (gdzie 4a1af jest częścią ID czujnika) po zmianie czujnika na inny zmienia się id między liczbami 28____f4, nie bardzo rozumiem skąd się wzieły te 28 i f4, skoro funkcja show_id wyświetla tylko teoretycznie znaki z 4miejsc, czyżby te 28 i f4 były jakimiś stałymi które definiują typ czujnika???. Sprawdzałem na 3sztukach 2 kupionych od kolegi z forum, jedna oryginalna z zestawu.


    OK, już wiem, 28 to FAMILY CODE i chyba muszę odwrotnie wyświetlać, bo 1 od lewej jest kod, a na wyświetlaczu mam pierwszy od prawej. Nadal tylko nie rozumiem, dlaczego wyświetla się więcej bajtów....te f4 mi nie daje spokoju, dziwnie bo jak jest jeden czujnik to się nie pojawia dopiero jak podepniemy dwa albo więcej to zaczyna się pojawiać.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2012, o 14:33 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    Cały numer układu 1-Wire to 8-bajtów wliczając family code i crc. Wyświetlasz tylko połowę. 4 to liczba bajtów a bajt hexadecymalnie to 2 znaki. Jak chcesz sam numer to wyświetl 6 bajtów pomijając zerowy( i od 1 do 6)

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2012, o 14:36 

    Pomógł: 0

    No wiem ;), zajrzałem do datasheeta, ale dlaczego za pierwszym razem wyświetla więcej znaków?

    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.


    Moje czujniki wyświetlają po 6bajtów, ten oryginalny w zestawie ATB po 4bajty, a wszystkie są 18B20, bądź tu mądry.
    Teraz znowu z jednego czujnika pokazuje 5 bajtów drugiego 6 bajtów, po wyciągnięciu jednego z moich czujników pokazują się pierwsze 4bajty czujnika ATB, ale 2bajty zostają na końcu z starego czujnika.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2012, o 15:53 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

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

    Dlatego masz różne ilości znaków, bo widać zero nieznaczące nie jest wyświetlane np. 0x01 -> na LCD 1.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lis 2012, o 11:50 

    Pomógł: 0

    Dzięki, o tym nie wiedziałem
    Wystarczyło dodać tą linijkę

    if(Tsens[nr_czujnika].id_room[i] < 0x10) lcd_str("0");

    To teraz mogę walczyć z wrzucaniem seriali do EEPROMA, bo docelowo, będzie można edytować reprezentacje ID czujnika i np. wpisać jakąś własną nazwę, nie wiem jeszcze czy zrobić to np. za pomocą dwuwymiarowej tablicy, czy da się jakoś inaczej, ale będę myślał ;).

    Chyba, że zrobić to prościej za pomocą trybu wyliczeniowego, na stałe przypisać do poszczególnych miejsc w tablicy nazwy (które można ewentualnie edytować), a zmieniać tylko przypisanie czujników do miejsc, czyli np. dostajemy pierwszy czujnik na szyne i przypisujemy go np. do miejsca nr3



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2012, o 13:58 

    Pomógł: 0

    Z racji iż istnieje już kilka podobnych tematów ;) tj. topic1725.html oraz topic1784.html no i post17932.html?hilit=zapis%20eeprom#p17932

    Po zapoznaniu się z w/w tematami doszedłem metodą wykluczeń (tj. wykluczania co wiem czego nie ;)) do tego iż najlepiej będzie stworzyć dwie struktury, a w zasadzie trzy.

    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 przypadku struktury czujników sens, bedzie stworzona tablica
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    gdzie będą lądować ID czujnika, aktualny pomiar temperatury itd. wszystko w RAM, do tego
    w eeprom będzie tablica eem_sens_id EEMEM;, czyli tablica samych ID, z paroma dodatkowymi zmiennymi, bo po co mi aktualny pomiar w eepromie.

    Czyli na początku robię funkcję (jeszcze przed main), która za pomocą bibliotek Mirka wykrywa czujniki na szynie 1wire, ich ID wrzuca do eeproma, następnie używając już tylko ID z eeprom wykonuję pomiary podobnie jak w temacie topic1725.html?hilit=zapis%20eeprom#p18348
    Dzięki wykorzystaniu struktury struktur mogę przypisać dowolną nazwę do danego ID czujnika, nie tracąc przy okazji ID czujnika :).
    Dodatkowo (jeszcze nie wiem jak, ale w topic1591.html#p15892 SunRiver opisał dosyć dobrze odwoływanie się do eeproma struktury itp), będę mógł pobierać i zmieniać poszczególne parametry tablicy struktur w eepromie (tak mi się przynajmniej wydaje).

    Docelowo będę miał 6 pomieszczeń do obczujnikowania, do tego jakieś alarmy max, min, temperatura na piecu z jakimś prostym sterowaniem, ale by było śmieszniej 2-3czujniki będą w bazie reszta po RFM12, albo nRF24L01, ale to później.

    Mirek tak fajnie opowiadał o swoim 4kanałowym sterowniku, czuję się jak "krasnoludki" z kingsize, cyt. "bo z was dupy nie prowokatorzy..." koniec cytatu.

    do tej pory miałem zrobione 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.

    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.


    Chyba będę musiał wywalić to wszystko i pisać od początku, bo już sam nie wiem jak do tego podejść :(...



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2012, o 14:07 

    Pomógł: 0

    Zgodnie z tym postem topic1591.html#p15892 stworzyłem takiego potworka ;)

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

    mając zadeklarowane struktury

    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.


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

    Zapisuje tylko strukturę do EEPROM, czy zamiast sens czujnik, dać sens *czujnik i przekazywać wskaźnik do tablicy, czy coś nie do końca zrozumiałem, bo chcę eeprom_update_block.... załatwić przepisywanie całej tablicy Tsense do eeprom, dzięki temu po pierwsze mam wszystkie dane potrzebne w eeprom, które niepotrzebnie nie są za każdym razem zapisywane na nowo, bo eeprom_update_block najpierw sprawdzi czy dane już istnieją w eeprom, ewentualnie zmieni tylko to co się zmieniło ;).

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

    by całą tablicę struktur Tsens[] wrzucić do Tablicy struktur w eeprom?, w zasadzie potrzebuję mieć tylko tablicę struktry sens_id by była zachowana nazwa i ID czujnika, ale zaczyna mi wychodzić masło maślane.....



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2012, o 16:36 
    Offline
    Moderator
    Avatar użytkownika

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

    to jest potworek :(

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


    już tłumaczę dlaczego,

    1. pozbądź się tego rzutowania - ono jest tu ZUPEŁNIE niepotrzebnie ponieważ argumenty funkcji są już void* i zresztą po to są void*, żebyś nie musiał rzutować nawet innych typów. To już jest wbudowana zaleta a ty próbujesz ją jeszcze dodatkowo niepotrzebnie obejść. Oczywiście to niczemu nie zaszkodzi w tym przypadku ale niestety robi się potworek i po tym rozpoznałem że tu jeszcze nie wiesz o co chodzi - dlatego tłumaczę

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


    2. jak już będziesz robił rzutowanie to UWAŻAJ! rzutowanie na typ wskaźnikowy (void*) może być dla ciebie dosyć niebezpieczne, dokąd ostatecznie i dobrze nie zrozumiesz zasad rzutowania a widać, że jeszcze troszkę kiepsko. Nawet jak się rozumie rzutowanie dobrze to - rzutowanie na typ void* robi się w ostateczności, gdy już INACZEJ (normalnie) się nie da

    3. patrz korzystasz ze struktury czujnik, korzystasz ze struktury eem_sens_id, tymczasem sizeof bierzesz z ??? sens ... a co to jest sens ... nawet dla oka ciężko później to analizować. nie lepiej dla oka jeśli byłoby tak?

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


    albo nawet jeśli struktury są równe i lecimy po całości to także

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


    teraz to ja od razu widzę o jaki rozmiar chodzi do skopiowania/updejtowania

    to tyle tak na gorąco

    _________________
    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: 22 lis 2012, o 08:46 

    Pomógł: 0

    OK, już wczoraj to czytałem, ale byłem zbyt zmęczony by cokolwiek przetrawić :). Dziękuję po pierwsze za pomoc.

    Po drugie mogłem faktycznie namieszać z tymi danymi przekazywanymi do sizeof, bo zmieniałem to tyle razy, że mogło mi umknąć, po za tym po napisaniu posta wprowadziłem kilka zmian, bo po co mi cała tablica struktur Tsens, jak w eepromie potrzebuje mieć tylko ID czujnika, nazwę pomieszczenia, ewentualnie max, min, i średnią temperaturę z całej doby.

    Po trzecie, sugerowałem się postem SurRivera (który chyba za bardzo jest skrzywiony C++, albo robi to z rozmysłem ;)), bo w książkach do C było właśnie opisane bez void* i już potem zgłupiałem kogo mam słuchać ;);).
    Zaraz będę walczył dalej :)....(luz w pracy czasem się przydaje ;))

    Tylko, nie wiem, jak to ugryźć (w tej chwili), bo tak, mając strukturę sens_id, która wchodzi w skład struktury sens z której to tworzona jest tablica Tsens[9], czyli dziesięć elementów typu struct sens.... i teraz wrzucając strukturę sens_id do eeprom, przecież będzie wrzucona tylko dla jednego czujnika, wrzucając zaś tablicę Tsens niepotrzebnie zajmuję w eeprom pamięć. Robić kolejną tablicę 10elementówą struktur sens_id która będzie wrzucona do EEPROM, czy jest na to jakiś inny sposób, bo nie bardzo wiem, jak zmusić eeprom by przyjmował 10 struktur sens_id, bez stworzenia tablicy by łatwo było na tym operować.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2012, o 09:20 
    Offline
    Moderator
    Avatar użytkownika

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

    A wiem wiem - ja już z SunRiverem kiedyś rozmawiałem o tym (void*) ;) ... rzeczywiście - on miał na to jakieś uzasadnienie chyba z kompilatorów dla PIC (nie wiem czy dobrze pamiętam) ... no ale to człowiek omnibus jak wiesz i pisze w dziesiątkach różnych kompilatorów

    dlatego tak jak ci mówiłem - stosowanie tego (void*) nie jest jakimś błędem okropnym bo jak widzisz działa poprawnie i nie ma warninga. Ale ja ze swojej strony to uzasadniłem podpowiadając o zagrożeniach szczególnie jak ktoś stawia pierwsze kroki - to pod tym kątem piszę. Sun to wiesz - sobie poradzi - jak on pisze (void*) przy tych argumentach to ja wiem że on sobie bardzo dobrze zdaje z tego sprawę.

    A z drugiej strony ja zawsze jestem zwolennikiem ułatwiania sobie życia podczas pisania kodu, zatem jeśli teraz już dokładnie rozumiesz o co chodzi z tym (void*) w tym konkretnym przykładzie to też sam sobie wybierzesz sposób ;)

    ale dodam że - moim zdaniem akurat w konstrukcji AVR GCC, która jest na prawdę fajnie przemyślana jeśli chodzi o kompilator - to stosowanie rzutowania na typ wskaźnikowy void* zostawiłbym na tzw czarną godzinę, jeśli można w innych przypadkach się tego pozbyć i poprawić nawet czytelność kodu. Tak chyba też zakończyła się nawet może w tamtym temacie czy w mailu nasza konkluzja z Sunem ;)

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

    co do pytania twojego o te struktury, eeprom itp - to tak jak widzisz trzeba dobrze przemyśleć. Ale widzę, że piszesz i obawiasz się jakby że niepotrzebnie coś tam będziesz trzymał w eeprom. Z drugiej strony - czy planujesz wykorzystać cały eeprom po brzegi ? jeśli nie to w czym może przeszkadzać te parę bajtów nadmiaru ?

    Innym rozwiązaniem problemu może być przygotowanie wskaźników na poszczególne miejsca w strukturze i to je zapakować do struktury w eepromie ... eeeh wiem że jak się tak o tym pisze z marszu to wygląda jak masło maślane z potrójnym saltem ... no ale postaraj się jeszcze pokombinować i ew pokazać efekty - w kodzie to może coś się uda podpowiedzieć dalej - naprowadzić

    _________________
    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: 22 lis 2012, o 09:31 

    Pomógł: 0

    Masz rację, zresztą sam fakt rzutowania na typ pusty, niby jest zrozumiały, ale nie do końca i potem człowiek coś stosuje, a sam nie wie po co ;).
    Chwilowo próbuję przetrawić te struktury bo to faktycznie fajna rzecz :). Ale przykładów z tym biednie, a nic tak nie uczy jak "życiowy" przykład, a nie opisy samego zagadnienia. Dlatego męczę te zapisywania do eeprom by w końcu zatrybić o co w tym chodzi.
    Tablice, wskaźniki fajna rzecz, ale struktury to jest to co tyrgryski lubią najbardziej, załatwiają wiele rzeczy, podobnie jak klasa vector, czyli kontenery itd.

    Faktycznie, może nie będzie aż takiej nadmiarowości, bo nie wiem, czy znam na tyle wskaźniki by to wrzucić tym sposobem do eeproma, szczerze mówiąc nawet nie bardzo wiem jak to od tej strony ugryźć.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2012, o 13:29 

    Pomógł: 0

    Hmmm co by tu dużo mówić, pierwszy krok za mną, działa, co prawda nie sprawdzałem jeszcze samego odczytu z eeprom, ale same "zarządzanie" czujnikami do struktur i z struktur działa bez zarzutu

    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.


    PS. Faktycznie 10elementowa tablica Tsens nie zajmuje aż tak wiele miejsca w eepromie, wrzucę ją całą do eeproma, uaktualniane będą ewentualnie tylko ID czujników w przypadku ich zmiany no i same id_room celem zadeklarowania własnych nazw pomieszczeń, na początku będą wrzucane standardowe napisy z flash, a potem można będzie ewentualnie edytować nazwy w eepromie.

    PS. Teraz czas na kolejny etap, czyli stworzenie jakiegoś menu pod to ;), potem dalsze przygody :).



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2012, o 13:35 

    Pomógł: 0

    Po kilku dniach walki, udało mi się w końcu stworzyć strukturę menu

    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.


    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.


    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.


    Teraz czeka mnie oprogramowanie poruszania się po menu, następnie wykonywanie działań właściwych w poszczególnych funkcjach menu :). Ależ te struktury dają popalić ;).



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2012, o 14:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 14 lis 2011
    Posty: 534
    Lokalizacja: Mierzyn
    Pomógł: 9

    Masz to juz wyswietlone na lcd ?

    _________________
    pozdrawiam
    Jachu



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2012, o 14:12 

    Pomógł: 0

    Jeszcze nie, bo została mi obsługa klawiszy do przerobienia pod to, ale obsługę menu już wrzuciłem. Po wrzuceniu debounce od Mirka, będę powoli uruchamiał to :).

    PS. Mam nadzieje, że ruszy bez większych problemów, menu może być trochę chaotyczne, ale mam nadzieje, że będzie działać zgodnie z założeniami..... Jeszcze muszę pomyśleć o spowolnieniu przeskakiwania między menu, by nie było na _delayach. Zapewne wykorzystam ten sam mechanizm co Mirek przy debouncigu z softwerowym timerem.

    PS2. Debouncig wrzucony, ale coś namieszałem w samych strukturach bo wyświetla się od razu menu RS232, można przejść do przodu do RFM12, odpalić program ale przypisany pod funkcję RS232, ale przy cofaniu menu idzie w maliny ;), program chyba też ;).
    Chwilowo nic nowego nie wrzucam, przeanalizuję jeszcze raz struktury menu i jak będzie działać do dopiero wrzucę źródełka.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 gru 2012, o 15:37 

    Pomógł: 0

    Jak obiecałem tak zrobiłem, chwilowo to tylko menu i pomiar, oraz wyświetlanie danych z trzech czujników, cała reszta dopiero w fazie pisania (czyt. wymyślania jak to napisać). Zresztą całe to menu to jak to ładnie Mirek określa Koci program :).
    Na razie to mam problem, że po wywołaniu funkcji start pomiaru wyświetla się na chwile jeszcze menu, potem kawałek zostaje ;), oj szkoda gadać, głupi z tego jestem......
    nie wiem, jak połączyć pseudo-wielowątkowość ;) z obsługa menu i głównego programu.....

    Zresztą oceńcie sami..... program w załączniku, oczywiście biblioteki 1wire i LCD w własnym zakresie należy sobie skopiować.


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 gru 2012, o 16:12 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 maja 2012
    Posty: 233
    Lokalizacja: Gdynia
    Pomógł: 15

    Ja bym umieścił pomiar w pętli głównej poza warunkiem menu_show:

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


    A z tego kawałka wywalił warunek z timerem, niech temperatura wyświetla się w każdym obiegu o ile nie jest wyświetlane menu

    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 43 ]  Przejdź na stronę 1, 2  Następna strona

    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO