Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 1 paź 2024, o 11:20


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 ]
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 ]
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 ]
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: 27297
Lokalizacja: Szczecin
Pomógł: 1041

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: 27297
Lokalizacja: Szczecin
Pomógł: 1041

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: 27297
Lokalizacja: Szczecin
Pomógł: 1041

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
Avatar użytkownika

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

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

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



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: 27297
Lokalizacja: Szczecin
Pomógł: 1041

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: 27297
Lokalizacja: Szczecin
Pomógł: 1041

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
Avatar użytkownika

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

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

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



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