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 11 kwi 2025, o 16:27


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
    Autor Wiadomość
    PostNapisane: 9 sie 2012, o 13:34 
    Offline
    Użytkownik

    Dołączył(a): 15 lip 2012
    Posty: 64
    Pomógł: 0

    Witam.

    Dostałem zadanie napisania termometru(termostatu) na LEDowych wyświetlaczach.
    Ot po prostu rodzinie się nie odmawia. Ale mniejsza z tym...

    Zadanie raczej banalne, odczyt temperatury z Dallasa i wyświetlenie jej na LEDach. Wprawdzie dochodzi tam jeszcze opcja termostatu i ustawień alarmu i itd. Ale to nie problem działa dobrze.
    Utknąłem na jednej sprawie, a raczej nie wiem dlaczego tak się dzieje. I nie wiem czy ja coś robię nie tak, czy po prostu Bascom tak ma...

    W chwili odczytu z 1wire multipleksowanie wyświetlaczy ma czkawkę - objawia się to mignięciem wyświetlaczy.
    Nie jest to duże utrudnienie, po prostu mignięcie wyświetlaczy, ale jak by się dało wyeliminować ten efekt to było by fajnie.

    Procedury przerwań nie są jakieś wyrafinowane, albo super rozbudowane. Timer0 generuje przerwanie dla multipleksowania LEDÓW, a Timer1 generuje przerwanie do odczytu temperatury.

    Gdy z procedury odczytu temperatury wywalę wszystkie polecenia odczytu 1wire i do zmiennych przypiszę na sztywno wartości, migotania nie ma. Więc mniemam iż problemem jest tu sam odczyt z 1wire.

    Główne bloki programu wyglądają tak:

    - konfiguracja 1wire i zegarów:
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


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


    Pętla główna to oczekiwanie na przyciski i cykliczny skoki do podprocedur podziału temperatury i komunikatów na poszczególne składowe znaków, porównanie temperatury, alarm itd. Nic ingerującego w Timery, czy przerwania.

    Próbowałem obsługę Dallasa przenieść do pętli głównej, zmieniać Timery. Nic to nie daje. Gdy tylko pojawiają się instrukcje 1wire wyświetlacz zaczyna migać w chwili odczytu. Nawet jak wywalę praktyczne wszystko inne z programu.

    Wiem, że pierwsze stwierdzenie to przesiąść się na "C". Ale z tym dopiero zaczynam, a sprawa jest raczej na wczoraj.
    Gdy się tego nie da wyeliminować, to trudno, da się z tym żyć. Ale jest tu tyle mądrych głów że może ktoś coś będzie potrafił powiedzieć co partolę...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 sie 2012, o 22:37 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    marciu11 napisał(a):
    Wiem, że pierwsze stwierdzenie to przesiąść się na "C".

    I słuszne stwierdzenie, ale w Bascomie jak najbardziej da się pogodzić multipleksowanie wyświetlaczy LED i 1wire.

    Ja zrobiłem to w ten sposób, że rozkazy do DS-a wysyłałem w czasie między przerwaniami obsługi wyświetlacza. Timer0 zgłaszał przerwanie co 4ms. Czyli co 4ms wysyłałem kolejny rozkaz do czujnika.

    Poniżej mały przykład jak to wyglądało w kodzie programu.
    Przerwanie obsługi wyświetlacza:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


    Tego sposobu używałem nie raz. Wszystko pięknie działało bez żadnych mignięć.
    Więc może spróbuj pójść w tym kierunku.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 sie 2012, o 22:49 
    Offline
    Moderator
    Avatar użytkownika

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

    jacekk232 napisał(a):
    Więc może spróbuj pójść w tym kierunku.


    Dokładnie! ... zamiast odpalać 1wire w przerwaniu timera :( bo tego nie zdzierży program napisany w dowolnym języku.

    _________________
    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 sie 2012, o 10:36 
    Offline
    Użytkownik

    Dołączył(a): 15 lip 2012
    Posty: 64
    Pomógł: 0

    Dzięki wielkie. Jak tylko wrócę do domu przetestuję tę metodę! Wydaje się bardzo logiczna. Niekiedy nie zawsze na tę logikę łatwo wpaść.

    Odnośnie odczytu w przerwaniu. Wydawało mi się że okres około 1sek jest na tyle wolny - jak na procesor, że nie będzie to stanowiło problemu. Widać bardzo się myliłem.

    Dzięki :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 12:18 
    Offline
    Moderator
    Avatar użytkownika

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

    marciu11 napisał(a):
    Odnośnie odczytu w przerwaniu. Wydawało mi się że okres około 1sek jest na tyle wolny - jak na procesor, że nie będzie to stanowiło problemu. Widać bardzo się myliłem.


    Tak ale nie rozumiesz na razie do końca jak działają przerwania. Otóż, faktem jest że 1 sek to jest bardzo jak mówisz - wolny odcinek - nie ważne co to oznacza, ale pomyśl sobie co sekundę zaczynasz robić w tym przerwaniu strasznie długą operację i na ten czas BLOKUJESZ działanie nie tylko pętli głównej programu ale też innych przerwań w tym tego od multipleksowania LED - więc nie dziwota że co sekundę masz migotanie na takim wyświetlaczu....

    teraz jaśniej ? ;)


    dlatego trza zastosować mechanizm flag - czyli mniej więcej to o czym pisał wyżej kolega.

    _________________
    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 sie 2012, o 12:54 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    mirekk36 napisał(a):
    dlatego trza zastosować mechanizm flag

    No właśnie, bo dzięki temu nie trzeba używać np. tych nieszczęsnych wait w oczekiwaniu na konwersję temperatury. W prawie wszystkich programach w sieci, oczekiwanie na konwersję zrobione jest za pomocą polecenia Waitms 750. Niestety w tym czasie pętla główna ma zawiechę.
    W przykładzie, który podałem wyżej, oczekiwanie jest zrealizowane dzięki flagom i zmiennej licznikowej. Ten sposób pozwalał mi pozbyć się wszystkich Wait z pętli głównej i z powodzeniem stosowałem go w mojej przygodzie z Bascomem.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 12:58 

    Pomógł: 0

    Polecam opanowanie zdarzeń. W książce Mirka, oraz tu na forum jest to świetnie opisane.
    Niestety sam mam bardzo złą opinię o bascomie, chodzi o to, że uczy bardzo złych nawyków programowania.
    delay, wait to już archaizmy których nie powinno się nadużywać, a już broń was jaśnie panie ;) (boże, allahu, shivo, buddo, czy w co tam wierzycie) od wkładania ich w obsługę przerywań, czy pętlę główną programu.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 13:53 
    Offline
    Użytkownik

    Dołączył(a): 15 lip 2012
    Posty: 64
    Pomógł: 0

    A nie Waity w przerwaniach to fakt pomyłka globalna jakich mało.
    Może stwierdzeniem przerwanie co sekundę do długo może źle się wyraziłem. Bardziej chudziło mi że rzadko. Ale fakt faktem niech to będzie i raz na rok to i tak oba przerwania "nałożą" się na siebie.

    Ideę z flagami, a ogólniej mówiąc minimalizację "zatrzymania programu w przerwaniu" zrozumiałem. Jakoś po prostu o tym nie pomyślałem.

    Wielkie dzięki za naprowadzenie.

    No i udawać też nie będę ;) Guuruu programistycznym to ja nie jestem :) No ale na czymś uczyć się trzeba :D
    Dzięki



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 14:29 

    Pomógł: 0

    Sam jestem neptyk, jeżeli chodzi o programowanie, ale unikam takich tworów jak bascom, właśnie po to by nie uczyć się złego myślenia od samego początku. Fakt C bywa upierdliwy na początek, ale z czasem wraca to z nawiązką i dużo łatwiej wiele rzeczy ogarnąć.

    PS. Prostsza jest platforma arduinio, dla początkujących może być nawet bardziej strawna.



    Góra
      
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 16:22 
    Offline
    Użytkownik

    Dołączył(a): 16 lut 2012
    Posty: 166
    Pomógł: 0

    Mówienie złych rzeczy o BASCOM-ie w dziale BASCOM jest co najmniej nietaktem.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 16:41 
    Offline
    Moderator
    Avatar użytkownika

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

    zenowi napisał(a):
    Mówienie złych rzeczy o BASCOM-ie w dziale BASCOM jest co najmniej nietaktem.


    Co racja to racja :(

    Ja zawsze mam takie podejście, że Bascoma również uznaję w tym sensie, że jeśli ktoś ma coś prostego zrobić i ze 2-3 razy na rok - to pewnie że Bascom wystarczy - czemu nie ....

    Jednak to też nie jest do końca zgodne z prawdą ponieważ ludzie w Bascomie robią z powodzeniem bardzo zaawansowane projekty - a ja sam na własne oczy miałem okazję widzieć kiedyś wsad napisany do procka AVR sterującego radiem samochodowym firmy Blaupunkt ;)

    dlatego język to jak język

    pewnie że ma swoje wady i ograniczenia - no trudno temu nikt chyba nie zaprzeczy, nawet twórca Mark Alberts ..... Wiele z tych wad i ograniczeń można obejść stosując wstawki asemblerowe , które sam kiedyś namiętnie pisałem programując w Bascomie jeszcze przed nauczeniem się C. Wtedy można z niego na prawdę dużo wycisnąć....

    ale też racją jest to i to bez dwóch zdań - że jeśli jednak zamierzamy w przyszłości rozwinąć swoje zdolności także do innych języków wyższego rzędu - np C, to Bascom spowoduje zdecydowanie nabranie wielu złych nawyków programowania, które utrudnią wdrożenie się w nowy język. Dlatego tak ciężko nieraz przejść na coś innego z Bascoma

    Mam nadzieję, że po tej mojej opinii nikt nie zarzuci mi że jestem tu stronniczy.

    _________________
    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 sie 2012, o 18:22 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    i co jam z wami zrobić panowie ??
    Lochy pełne , trunki wypite, piguły się kończą ....., a wy tu sadzicie plotki o bascomie

    każdy język ma swoje wady i ograniczenia głównie gdy idzie o ubogą składnie i nadmiarowość nieczytelnych bibliotek
    to nie jest tak że ten zły a ten dobry , bo wszystko w rękach programisty przecież , a złych nawyków można nałapać wszędzie
    nawet w C jak choćby FCPU :)

    Faktem jest natomiast to że z bascoma jest ciężko przejść na inny język -- bascom skutecznie to utrudnia

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 18:32 
    Offline
    Moderator
    Avatar użytkownika

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

    Moim ulubionym powiedzieniem jest:

    "Każdy procesor jest tylko tak dobry jak programista, który się nim posługuje"

    ale równie dobrze można je nieco zmienić:

    "Każdy język programowania jest tylko tak dobry jak programista, który się nim posługuje"

    I to mam nadzieję, że w zupełności wyczerpuje temat, wcale bez żartów czy ironii ....

    przyznacie chyba Panie i Panowie ? ;)

    _________________
    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 sie 2012, o 18: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

    SunRiver napisał(a):
    Faktem jest natomiast to że z bascoma jest ciężko przejść na inny język -- bascom skutecznie to utrudnia

    Podobnie winda utrudnia wejście na schody, a samochód korzystanie z roweru ;)
    Znam parę przypadków, że Bascom został porzucony, bo wbudowane i rozbudowane funkcje do których nie ma dostępu są jednak ograniczeniem w dalszym rozwoju.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sie 2012, o 18:40 
    Offline
    Moderator
    Avatar użytkownika

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

    Ok ale nie przekształcajmy tego tematu w dyskusję o wyższości języka nad językiem - przecież z tego co widzę ostatecznie nikt tu nie dyskfalifukuje Bascoma bo nie o to chodzi przecież ... Gdyby tak miało być to pewnie by tego działu nie było na forum. Dajmy więc pokój dyskusji o wyższości jednego nad drugim a skupmy się rzeczywiście na poradach dla osób tu zaglądających i wszyscy będą szczęśliwi..... ;)

    _________________
    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: 12 sie 2012, o 20:37 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    No widzisz kolego ja też tak traktowałem BAscoma , ale teraz wyparło go Arduino :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 sie 2012, o 22:58 
    Offline
    Użytkownik

    Dołączył(a): 15 lip 2012
    Posty: 64
    Pomógł: 0

    Dzięki za pomoc Ale jak by nie patrzeć, wątek przekształcił się w dyskusję o wyższości świąt Wielkiej Nocy nad świętami Bożego Narodzenia. Odpowiedzi z pomocą padły 2-3 a reszta postów jest o wyższości jednego języka nad drugim.
    A nie o to tu chyba chodzi. Prawda?
    Jak jest wydzielony wątek forum o Bascomie to szanujmy to.

    Dzięki jacekk232 za konkretny przykład i naprowadzenie i Mirkowi za utwierdzenie.
    Temat uważam za wyjaśniony i wyczerpany. Reszta postów jest po prostu nic nie wnosząca, przepychanką o wyższości jednego języka nad drugim.

    Nie róbmy z tego zacnego forum drugiej elektrody.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 sty 2013, o 21:27 
    Offline
    Nowy

    Dołączył(a): 11 sty 2013
    Posty: 2
    Pomógł: 0

    Witam. Jestem nowy na tym forum, zainteresował mnie ten wątek gdyż od dłuższego czasu zmagam się z problemem pogodzenia multipleksowania i 1wire. Mam taką prośbę czy może mi ktoś wytłumaczyć działanie tych fragmentów kodu podanego przez : jacekk232 bo próbowałem to wykorzystać i za nic nie chce działać i jeszcze trochę to sobie wszystkie włosy wyrwę z głowy bo albo ja czegoś nie rozumiem, ale według mnie to nie będzie działać poprawnie....

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


    ja to rozumiem w ten sposób że w momencie wystąpienia przerwania (co4ms) zostaje ustawiona flaga wysil rozkaz = 1. I jak to ma działać skoro zostaje ona ustawiona w momencie wystąpienia przerwania, a nie w trakcie kiedy licznik lizy i jeszcze przerwanie nie wystąpiło ?

    nie kumam tego...
    pomoże ktoś ?

    pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 sty 2013, o 09:32 
    Offline
    Nowy

    Dołączył(a): 11 sty 2013
    Posty: 2
    Pomógł: 0

    No właśnie według mnie też. Tym bardziej że cała procedura 1wire jest w pętli "case" z multipleksowania jest wysyłany rozkaż co 4ms właśnie w momencie przerywania, to jak ma to działać skoro kiedy występuje przerwanie blokowana jest 1wire ? rozkaz musiał by być wysyłany zanim jeszcze wystąpi przerwanie.



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

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