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



Teraz jest 28 mar 2024, o 15:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 19 wrz 2017, o 20:45 
Offline
Użytkownik

Dołączył(a): 05 sty 2014
Posty: 46
Pomógł: 0

Witam,
wykonałem projekcik z wykorzystaniem czujnika temp. DS18B20 po 1-wire.
Użyta biblioteka to biblioteka z bluebooka.
Problem zaczyna się, gdy wywołuję funkcję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wtedy procesor zatrzymuje się(może oczekuje na odebranie danych) na chwilę co objawia się migotaniem wyświetlacza, bo prędkość przełączania pomiędzy cyframi jest za mała.
Czy jest może jakiś sposób na pominięcie tego, albo zrobienie w inny sposób?

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


Czujnik jest podłaczony telko jeden, pod PC6.
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2017, o 21:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

Przerwania Panie szanowny. Przerwania

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2017, o 06:20 
Offline
Użytkownik

Dołączył(a): 05 sty 2014
Posty: 46
Pomógł: 0

Ale co przerwania?
Miałem przerwania, ale stwierdziłem, że nie są mi potrzebne tylko jak się da to zrobię to bez. Przełączanie cyfr robię bez przerwania, to chyba powinno szybciej przełączać niż w przerwaniu.
Przecież będzie działało z pełną prędkością procesora, a nie co przerwanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2017, o 06:34 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1079
Pomógł: 73

Co to znaczy że się na chwile zatrzymuje? na sekundę? dwie?:) odczytuje poprawnie temperaturę? Jak odczytuje poprawnie to wszystko jest ok, tak jak kolega wyżej podpowiada, zrób obsługę wyświetlacza na przerwaniach



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2017, o 07:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

malarz87 napisał(a):
Przecież będzie działało z pełną prędkością procesora,


Niestety masz rację tylko po części. Przełączanie będzie się wykonywało z pełną prędkością ale tylko wtedy, gdy będzie wykonywane w głównej pętli, a procesor nic poza tym nie będzie miał do roboty. Wystarczy głupie odczytanie czujnika temperatury i zaczynają się schody, których nie potrafisz obejść. A pomyśl teraz jakbyś miał obsłużyć ze 20 czujników, wyświetlacz TFT i jeszcze np kartę SD. i co? i klapa!!!

Przerwanie zapewnia, że przełączanie się wykona poza kolejnością i zawsze! Nawet jak procek wysyła jakiś długi tekst czy obrazek na lcd, to na chwilkę wyskoczy poza funkcję i szybko załatwi przełączenie w przerwaniu aby wrócić do obsługi lcd.

Fakt, że jeżeli sobie w pętli głównej tylko przełączasz cyfry i nic poza tym to program będzie szybszy o parę taktów zegara niż z przerwaniami ale....
.... po pierwsze nie potrzebujesz tak szybko przełączających się cyfr - oko dostrzega migotanie tylko do około 60Hz, Ty chcesz przełączać w MHz - po co?
.... po drugie jak procek ma coś jeszcze do roboty - cokolwiek - to Twój soposób bardzo szybko stanie się wolniejszy bo pętla wykonuje wszystko po kolei nie zważając co jest ważne czasowo a co zajmuje wieki. Robi swoją robotę linijka po linijce, bajt po bajcie.
i jeszcze jedno: zapis
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czyli przełączanie wyświetlaczy po takim warunku wcale nie jest szybsze niż obsługsa w przerwaniu. Wierz mi.

p.s. Przepraszam za tak skrótową podpowiedź w pierwszym poście. Sądziłem, że wystarczy aby naprowadzić na właściwe tory.

Rozumiem, że zatrzymywanie przemiatania to jedyny problem a sam odczyt temperatury działa?


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2017, o 12:08 
Offline
Użytkownik

Dołączył(a): 05 sty 2014
Posty: 46
Pomógł: 0

Tak , odczyt działa. Dzięki za pomoc. Wieczorem po pracy zmienię to i dam znać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2017, o 14:48 
Offline
Użytkownik

Dołączył(a): 05 sty 2014
Posty: 46
Pomógł: 0

Po przeniesieniu zmiany cyfry do przerwania, wyświetlacz przestał migotać, czyli działa poprawnie.
Wielkie dzięki! ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2017, o 15:45 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

No widzisz? Cały myk polega na tym, że w przerwaniu tylko zapalasz odpowiednie segmenty i wychodzisz z niego. Do czasu następnego przerwania te segmenty cały czas świecą. W kolejnym przerwaniu zapalane są następne i tak w kółko.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2018, o 08:43 
Offline
Użytkownik

Dołączył(a): 13 mar 2018
Posty: 25
Pomógł: 0

Witam,

używam bibliotek z BB i mam problem z odczytem temperatury z DS18B20 w trybie PARASITE.
W trybie NORMAL odczyt jest.
Zmieniam tylko DS18X20_start_meas (DS18X20_POWER_EXTERN, NULL); na
DS18X20_start_meas (DS18X20_POWER_PARASITE, NULL);
Czy jeszcze coś więcej trzeba zmienić? Oczywiście fizyczne podłączenie jest przez opornik 2.2k.
Drugie pytanie jeśli użyje tylko jednego czujnika i funkcji:
DS18X20_read_meas_single(familycode, &subzero, &cel, &cel_frac_bits);
Co wstawić pod zmienną "familycode"?


Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2018, o 09:18 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

fenix2 napisał(a):
Witam,

używam bibliotek z BB i mam problem z odczytem temperatury z DS18B20 w trybie PARASITE.
W trybie NORMAL odczyt jest.
Zmieniam tylko DS18X20_start_meas (DS18X20_POWER_EXTERN, NULL); na
DS18X20_start_meas (DS18X20_POWER_PARASITE, NULL);
Czy jeszcze coś więcej trzeba zmienić? Oczywiście fizyczne podłączenie jest przez opornik 2.2k.
Drugie pytanie jeśli użyje tylko jednego czujnika i funkcji:
DS18X20_read_meas_single(familycode, &subzero, &cel, &cel_frac_bits);
Co wstawić pod zmienną "familycode"?


Pozdrawiam.


chcesz uzyskać pomoc to załóż osobny wątek i nie odkopuj jakiś staroci sprzed tysięcy lat :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2018, o 09:37 
Offline
Użytkownik

Dołączył(a): 13 mar 2018
Posty: 25
Pomógł: 0

Wątek jest z 20 września 2017.
OK, założyłem nowy.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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