Wiem że zaraz mi się oberwie od innych ale na szybko to pokombinuj z wartością OCR0 - zwiększ ją np do 150 , po drugie możesz przełączyć na inny preskaler mniejszy niż 256. Lecz nie spodziewał bym się wielkiego efektu. Aby otrzymać pożądany efekt musisz zmienić plik ds18b20.c i zamiast wyłączać i włączać przerwania w funkcji temperatura musisz je włączać...
Witam. Może spróbuj tak po wywołaniu przerwania ( u Ciebie co sekunda) Odczytaj termometr DS. A następnie wydaj rozkaz pomiaru temperatury. W następnym przerwaniu odczytasz go o tak w kółko.
nie zagłebiajac sie w kod, wydaje mi sie ze to jest ten delay_ms. ma prawo wystepowac cos takiego ze siedzisz w delay'u to juz sie zmienil czas ale minie spory kawałek sekundy zanim odswiezysz wyswietlacz.. na test usun delay'a, jak pomoze to zrob to czekanie na timerze
Tu potrzebna jest zmiana koncepcji rozwiązania. Zacznij od skrócenia przerwania obsługi wyświetlacza do jakichś max. 10..12 linii. Co sekundę w obsłudze wyświetlacza inicjuj start pomiaru temperatury, a po np. 800 ms inicjuj odczyt temperatury z czujnika. Całą obsługę DS18B20 zrób w postaci automatu w przerwaniu drugiego timera. Wtedy obsługa DS nie...
Jak najbardziej tak.
Mimo to wydaje mi się że ID powinno dobrze czytać a tak nie jest. A może mam zastosować inną bibliotekę z przerwaniami albo dodać timer?
usuń delay(1000); z sensors.requestTemperatures(); i wykonaj opóźnienie na timerach
Jak np mam kilka innych procedur które zabierają dużo czasu. Np pomiar ds18b20 albo wyświetlanie na LCD a chciałbym je wykonywać co pewien ściśle określony czas.
Pokaż chociaż kawałek kodu to zobaczymy jak to zrobiłeś. Do przemyślenia podam kilka przybliżonych wartości. Odczyt 9 bajtów z DS18B20 (razem z CRC) trwa ~7ms Odczyt tylko dwóch bajtów ~3ms Multipleksowanie 4 LED7Segment to najcześciej 200Hz czyli co 5ms Obsługa wyświetlaczy w przerwaniu trwa ~ 5 us przy 8MHz Napisz przerwanie optymalniej a Dallas nawet...
Witam. Proponuję wszystkie operacje przeprowadzić na przerwaniach. Czyli na przykład Przerwanie od Timer 1 steruje wyświetlaniem znaków co określony czas wyświetlasz kolejny znak czas dobierasz na tyle krótki żeby nie widzieć migotania, Przerwaniem od Timer 0 odmierzasz czas dla odczytu temperatury. Pozdrawiam
Nie ma powodu do tego, żeby zasilać DS z napięcia innego niż procesor. Napięcie nie wpłyne znacząco na odporność na zakłócenia (troszkę tylko wpłynie...). Komunikację i wykrywanie da się oczywiście zrobić na UART lub przez odpowiednie oprogramowanie timera.
Tylko jeżeli będziesz wyłączał przerwania na czas obsługi 1Wire, to zliczanie czasu w przerwaniu będzie zaburzone jeżeli nie zastosowałeś trybu CTC Timera tylko zwykłe przeładowywanie Timera w przerwaniu (dokładnie to będzie się troszkę późniło).
Oba kody mają być identyczne? Jeśli tak, to dlaczego: - Raz piszesz [syntax=c]if(HAL_GetTick() - DS18B20_timer > 2000)[/syntax] a raz [syntax=c]if(HAL_GetTick() - DS18B20_timer > 500)[/syntax] - W tym warunku masz też reset IWDG, który raz ustawiasz [syntax=c]hiwdg.Init.Prescaler = IWDG_PRESCALER_64;[/syntax] a raz [syntax=c]hiwdg.Init.Prescaler = IWDG_PRESCALER_8;[/syntax]...
Jest Timer ktory odlicza czas do kolejnego spotkania?
tak, poprawilem to, ale pokazuje 0
Timera nie trzeba, w sumie program wygląda jakby był napisany bez przemyślenia, strzelam że się zawiesza przy oczekiwaniu na dane które nigdy nie przychodzą.
A masz jakiś timer, który możesz wykorzystać? Jeżeli tak to na przerwaniach zrób multipleksowanie, a w petli głównej pozostałe funkcjonalności.
To znaczy że litery i wynik temperatury znika na ułamek sekundy i znów ie pojawia Ustaw poprawnie timer. Miałem to samo. Link: http://www.elektroda.pl/rtvforum/topic20...
Nie bardzo mam teraz ochotę zgłębiać kod ponownie, ale pamiętam że w Twojej wersji Timer odmierzał czas 20s i kiedy nadszedł czas to w przerwaniu mierzył temperaturę Dallasem DS18B20 i w dodatku pisał od razu po wyświetlaczu :D Dlatego jedną ze zmian było to, że Timer tylko ustawia flagę by dokonać pomiaru i go wyświetlić. Tak więc dopóki nie jesteś...
Hmm zaskakujące że pytasz ale temat znany (bascom) - Jako koniki do Karocy zaprzęgnięte zostały timery.
Może to ci pomoże : [url=http://www.elektroda.pl/rtvforum/to... w timerze, problem albo to : [url=http://www.elektroda.pl/rtvforum/to... w bascom czujnika DS1820 na DS18B20 albo ...... Jakieś 780 innych postów pod tym linkiem : [url=http://poszukaj.elektroda.pl/search...
Przy odczycie DS18B20 jest zalecane wyłączenie wszystkich przerwań.Spełniasz ten warunek i to jest przyczyną "mrugnięcia" (Timer przestaje pracować). Pozdrawiam
Nie analizując kodu przeszkadzają zapewne wszystkie instrukcje Wait, Waitms itp. Ogólnie zasadą jest, ze w programie nie powinny występować tego typu opóźnienia - stąd obsługę DS'a zrób na przerwaniu timera.
Proste: Bylejaki kod obsługi DS18B20 bez użycia przerwania timera lub sprytnego użycia UART nie może działać poprawnie, jeżeli reszta oprogramowania korzysta z jakichkolwiek przerwań aktywnych podczas komunikacji z DS18B20.
Timer w przerwaniu obsługuje wyświetlacz LED i inkrementuje zmienną byte, która w pętli głównej w instrukcji Case wybiera konkretne funkcjonalne fragmenty programu do wykonania, których wykonanie czasowo mieści się pomiędzy przerwaniami od timera. W przerwaniu od timera ustawia się także flaga przerwania, która uruchamia za pomocą If Then instrukcję...
Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
idea dobra ale wykonanie do d... jak urzyje waitms do pomiaru sekundy to jest niestabilna trzeba urzyć timera
Z polaroida wydłubujesz płutkę z sonarem (google: polaroid 6500 - tak nazywa się płytka nie aparat). Są trzy rodzaje płytek. Dwie z nich podłączasz bezpośrednio do procka, natomiast trzecią musisz wstawiś jakiegoś scalaczka - bez problemu znajdziesz opis w sieci. płytkę łączysz z uC trzema liniami: zasilanie "+", send i echo. Inicjalizujesz - dajesz...
Witam. Kolega w powyższym poście odpowiedział już, magistrala 1wire nie ma nic wspólnego z Timerami w Bascomie. Posiada własne procedury, nie wiem dlaczego przenosisz procedurę do Timera. Podczas pomiaru temperatury za pomocą DS18b20 w czasie pomiaru występuje Waitms 750 ale to opóźnienie nie pochodzi od Timerów.
(...) odczytu temperatury. Jaki zaproponowałbyś kod (AVR GCC), aby nie trzeba było używać delay'a (może pooling lub maszynę stanu) ? Przy okazji przedstaw optymalną (bez zmiennoprzecinkowych liczb) konwersję danych ze scratpad'a na stopnie (może być złożeniem liczb całkowitych jako stopnie i części ułamkowe). Do obsługi termometrów DS18B20 bez blokowania...
Nie napisałeś, że chodzi o PIERWSZĄ konwersję ;). Robi się ją przy inicjalizacji urządzenia po czym włącza timer by dał flagę do kolejnych odczytów.
Wyłączyłeś przerwania za pomocą disable interrupts, a włączyłeś je jakoś później ? Zadeklarowałeś timer na początku programu i co dalej z nim ? Wykorzystujesz go jakoś ? Dajesz jakieś opóźnienie dla czujnika temperatury ? Samo przełączanie zmiennej chyba nie wystarczy. Domyślam się, ze chciałeś użyć timera do tego ?
Niestety nie pomaga, jeśli tylko fragment procedury przechodzi z włączonym przerwaniem już się dzieją cuda,a wszystko wraca do normy gdy wyłączę przerwanie na czas wykonania całej procedury.Ale co mi z takiego timera gdzie większość czasu będzie wyłączony
Jeśli zrobisz obsługę OW na przerwaniu timera baz głupotek typu delay, to nie będzie tam oczekiwań i nie będzie to zakłócało wyświetlania. Jeśli dobrze zrobisz wyświetlanie, to nie zakłóci to obsługi OW na przerwaniu timera. Więc pewne szanse powodzenia są.
Czas radzę odmierzać na timerze i zrezygnować z funkcji typu _delay_us.
z wersją klasyczną też nie będzie problemów jeśli nie będzie korzystać się z żadnych delay'ów. Co to znaczy? Przecież obsługa 1-wire wymaga w miarę dokładnych opóźnień. Miałem zamiar napisać funkcje delay oparte na timerach. To jak mam "rozmawiać" z DS18B20 bez delay-ów?
Nigdy w przerwaniu nie użyłem "wait" i nie użyje. Od tego są timery w AVR aby z nich korzystać ;)
Jeśli chcesz zrobić wait na liczniku to możesz uzyskać dwa efekty. W obu ustawiasz w przerwaniu flagę. Pierwszy do instrukcja czekaj aż flaga będzie ustawiona wykonuj dalszy ciąg programu loop Generalnie w takim rozwiązaniu nie ma sensku dawać timera. Druga opcja do instrukcja if(flaga ustawiona) reszta kodu loop Oczywiście drugie rozwiązanie...
Można oba odczyty dać do przerwania. Zliczać je i co któreś przerwanie robić odczyt. Czyli timer, np. przerwanie co 250 ms - co 3 przerwanie robisz odczyt temp. (w pierwszym dajesz polecenie konwersji, w 3 odczyt), co 8 przerwanie odczyt wilgotności.
Co do książki : to czy przeoczyłem czy nie ma w niej wzmianki o Watchdog-u ? Jest ale tylko bardzo króciutka i teoretyczna wzmianka, na stronie 53. Jest to dość prosty moduł mikrokontrolera - taki jakby timer, który jak wystartuje i doliczy do końca to BUM czyli reset procka. A jak nie chcemy resetu to wciąż musimy w programie resetować ten timer żeby...
Wydaje mi się że jednak trzeba wpisać "start timer0" w przerwaniu. Chyba że load uruchamia timer- ale chyba nie.
Ten plik o ile się nie mylę to jest sama biblioteka, w dodatku niekompletna ponieważ kompilator wywala całą masę błędów :/ Edit. I jeszcze jedno znalazłem kolejny przykład spróbowałem skompilować i tym razem dzieją się takie cuda: http://scr.hu/8e6i/jt5tp kody: DS18B20.h [syntax=c]#ifndef DS18B20_H #define DS18B20_H /* DS18B20 przyłączony do portu PA0...
Dobra, poradziłem sobie inaczej. Użyłem timera, ale nie korzystałem z przerwań, tylko ustawiłem częstotliwość inkrementacji timera na 1us i czekałem, aż wartość timera przekroczy zadany czas ;) Na potrzeby 1-wire wystarczyło :)
Ja tylko nie wiem, po co przerwanie ADC. Od początku piszę - odczytywać Wynik ADC i startować nową konwersję w przerwaniu timera. Jedno przerwanie może zawierać całą funkcjonalność (poza DS18B20, który kłóci się ze wszystkim - może by go tak UARTem potraktować?)
Problem z czasami - prawdopodobny. Nie wiem, jaki masz zegar, jak jest zdefiniowane __no_operation(). Jak masz oscyloskop to sprawdź ten czas, jak nie to przeanalizuj kod maszynowy wygenerowany przez DelayUs() Czasy wykonania instrukcji w MSP są dość dobrze opisane. A najlepiej stwórz własną procedurę Delay opartą na timerze sprzętowym. Albert
Może ja wyjaśnię jaśniej. Generujesz przerwanie od timera np. co 800ms, czy 1s. I w przerwaniu wykonujesz operacje: 1. Odczyt temperatury do zmiennej 2. Komenda Convert_T Odpowiadając na Twoje pytanie - 750ms to MINIMALNY czas między CONVERT_T a odczytem (dla 12-bit). Więc odczyt po 1, 2, 3600 sekundach po CONVERT_T nie jest błędem. Dzięki takiej metodzie...
"Od samego początku mam problem ze sterownikiem."...."A jeszcze jedno w kontrolerze jest włączony timer jako counter do zliczania impulsów ślimaka podajnika Przerywasz w programie procedurę wyświetlania na LCD przerwaniem od Timera.
Witam. Przecież dokładnie to samo napisałem, plus to jak wykonać te procedury co określony czas ustawiajac timer. Można oczywiście ustawić od razu timer na 1s, tyle że u mnie on jeszcze odpowiadał za multiplex wyświetlacza 7LED. Grzesiek.
Fajne ale strasznie to przekombinowane, w tym projekcie nie jest potrzebne nic poza kilkoma rezystorami i stabilizatorem z możliwie niskim "quiescent current". ESP32 jak się powyłącza większość peryferiów a zostawi tylko timer do wybudzania to schodzi to kilku µA. Używam tak zasilanych esp8266 i tam udaje się zejść do 80µA i czujnik ds18b20 wysyłający...
Witajcie, W oparciu o Atmegę8 zrobiłem sobie prosty sterownik. Odczytuję temp. z dwóch czujników ds18b20 i na jej podstawie steruje elektrozaworem. Chciałbym dodatkowo wprowadzić obsługę 3 przycisków. Problem w tym, że sam odczyt temp. z czujek powoduje pewne opóźnienia np. czas konwersji jest dosyć spory bo 750ms w związku z tym reakcja na przyciśnięcie...
Proszę bardzo, przykładzik jest lekką modyfikacją liczenia czasu w przerwaniu z książki Wiązani. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 On Timer0 Przerwanie Dim Licznik8ms As Word Dim Flaga As Bit '1 juz czas, 0 jeszcze nie Enable Interrupts Enable Timer0 Load Timer0 = 250 Do 'wyslanie komendy...
Nie da się dobrze zrobić obsługi wyświetlacza jeśli podczas wyświetlania blokujesz przerwania, a robisz to w związku z obsługą DS18B20 - stąd to pulsowanie. Jaką masz częstotliwość przerwań timera? Jeśli większą od 1200 Hz, to właśnie na tym tracisz jasność.
Witam, Dodałem do swojego programu funkcję sprintf i mam problem z skompilowaniem programu. 18:09:16 **** Incremental Build of configuration Release for project timer **** make all Building target: timer.elf Invoking: AVR C Linker avr-gcc -Wl,-Map,timer.map -mmcu=atmega8 -o "timer.elf" ./ds18b20.o ./lcd.o ./main.o /usr/local/CrossPack-AVR-20130212/lib/gc...
Mam problem jestem początkujący napisałem program który ma za zadanie regulować włączanie wiatraka i czas z jakim ma dmuchać , jednocześnie mierzy temperaturę i nie działa tak jak powinno : Temperatura pokazuję co jakiś czas błędny pomiar np 124 , 32 , 98 procek się resetuje chińskie znaki raz na jakiś czas w programie można było ręcznie zmieniać czas...
Dzięki wszystkim za pomoc. Oto mój program: [syntax=cpp] while(1) { dana = USART_Transmit_back(); // odczyt temperatury if (dana == 49) // 49 to tak naprawdę 1 wysyłana z kompa, zignorowałem dlaczego:) { PORTA = 0x01; // zapalenie diody, żebym wiedział która dana aktualnie jest czytana if(ds18b20_ConvertT()) /* Funkcja 'ds18b20_ConvertT' wysyła do układu...
Może trochę przesadziłem z tymi krótkimi przerwaniami. Oczywiście, że w przypadku przerwania z ADC zapisuje wynik w tablicy (ewentualnie go przeliczam), zmieniam kanał itp. Głównie chodzi mi o "problem" z bardziej czasochłonnymi operacjami typu fft, wykresy, ewentualne filtry. Timera używam np. do odświeżania wyświetlacza, obsługi DS18b20 który potrzebuje...
na wbudowanych timerach może być problem bo na czas odczytu temperatury z 1wire nie mogą się właczyć żadne przerwania
Na razie to tylko ćwiczenie mające na celu nauczenie się obsługi magistrali 1wire. Skoro mam w przyszłości z tego korzystać, na pewno użyję timera, ale tu powstaje pytanie: Mam włączyć przerwania i ewentualne opóźnienia w nich realizować?
Jak zwykle Kolega ma rację, wyrzucenie Waitms 750 załatwiło sprawę. Oczywiście wstawienie timera jest chyba najlepszym rozwiązaniem. Tylko coś nie tak mi wychodzi. Dołożyłem Timer co 800 milisekund [syntax=basic4gl] Sub Pomiar: Disable Interrupts If Flaga_delay_ds = 1 Then 1wreset 1wwrite &H55 1wverify Dsid1(1) 1wwrite &HBE I1 = 1wread(2) Flaga_delay_ds...
Nie. Użycie timerów w ten sposób niewiele zmienia w stosunku do zwykłej pętli. Albo OW robi się sprzętowo z wykorzystaniem UART i opóźnienia generuje moduł UART, albo wykorzystuje się timer i jego przerwanie do zmiany stanu IO. Ew. można wykorzystać możliwość bezpośredniego sterowania pinem IO przez timer. To mocno zależy od użytego procka.
Raczej tak. Opoznienia z delay.h sa w assemblerze (glownie) wiec wiadomo dokladnie ile taktow sie wywoluja, sa tez sprytnie optymalizowane, tak, zeby odmierzane czasy byly jak najdokladniejsze. Twoje procedury sa o tyle gorsze, ze sa czesciowo w C, wiec opoznienie bedzie zalezec od wersji kompilatora, ustawionej optymalizacji (-O) i humoru kompilatora....
Witam. A ja wiem, iż DS18B20 mają tolerancję +- 0,5 stopnia. Sprawdzałem z termometrem fabrycznym (elektronicznym) w zakresie 10 - 30 stopni. DS18B20 ma rozdzielczość 0.065C przy 12bitach rozdzielczości i czasie konwersji 750ms Hmm czas konwersji DS'a zależy od rozdzielczości z jaką odczytujemy temperaturę Ja odczytuje temp z 64 dsów w czasie 1s wszystko...
Poprawiłem obliczenia pojedynczej cyfry lecz w zaznaczonej linijce w pierwszym okienku z fragmentem kodu wykrzyknikami, pojawia się błąd i nie wiem dlaczego zmienna Znak jest zdeklarowana w ten sposób: Dim Znak as Bit a pojawia się komunikat: error:105 StoreBit error [0] A co z tymi przerwaniami bo do końca nie mogę tego złapać są tak jak powinny być...
Dziękuje za odpowiedzi. W wolnym czasie się dokształcę. Użyłem timera i wszystko działa:) Prawie Przerwania można wywoływać programowo a nie tylko podając sygnał fizycznie na nóżkę procesora? Dziękuje jeszcze raz
Zgadzam się z przedmówcą. Kiedyś nie mogłem wyjść z podziwu, że program przestawał działać po załączeniu optymalizacji. Dopiero po pewnym czasie zauważyłem, że optymalizacja pod względem prędkości działania dosięgnęła również... pętli opóźniających :) Dlatego odmierzanie czasu na timerze jest najbardziej precyzyjnym i uniwersalnym wyjściem. I optymalizacja...
Gdzie widzisz u mnie funkcje TIM2 init? Ja jej nie mogę u siebie znaleźć. Wyświetlacze multipleksuje w przerwaniu. Używam Timera 2 który zgłasza przerwania o przepełnieniu. W tym przerwaniu ustawiam odpowiednie stany na portach i włączam odpowiedni wyświetlacz.
Tylko nie wiem jak dopisać je na "sztywno" do tego: No, pomijając że masz źle napisany kod do odczytu temperatury bo twoje Wait 1 stoi nie w tym miejscu ;) .... to jeśli chodzi o pytanie powyżej a raczej odpowiedź na nie - to ja już ci podałem wyżej w tym linku. Poza tym - skoro pierwszy raz zaczynasz bawić się tymi czujnikami to niedługo zadasz kolejne...
Na pierwszy rzut oka w Twoim kodzie, jak i u autora, nie ma żadnej manipulacji trybem wyjścia portu - pinu. Po wrzuceniu tego na STM32F722RE okazuje się, że nie ma to znaczenia. Przy ustawieniu trybu pinu na wyjście z open drain, odczytanie rejestru IDR daje poprawne działanie, bez zmiany trybu na wejście. Sprawdziłem to na porcie A i pinie PA0. Nie...
licencja zabrania sprzedawać urządzenia będące slave'ami 1wire Zastanawia mnie ocena tego postu przez innych użytkowników - w chwili pisania mojego postu było to -5 :D Do autora: Do jakiego pinu procesora podłączyłeś emulowany pin 1W? W sensie czy wykorzystujesz jakieś sprzętowe peryferia typu przerwania zewnętrzne/ timer a może jeden z istniejących...
To fakt, chodzi o program w Bascomie. Konkretnie wykorzystuje Bascomowy zegar z kwarcem 32767 Hz, z tego co wiem, pracuje to na Timerz 2. Co jedną sekundę odczytuje temperaturę z 4 DS18B20 na jednej magistrali. Nie wiem czy to wykorzystuje timer i który. Do tego w przerwaniach wywoływanych przepełnieniem Timera 0 lub 1, które miały występować z częstotliwością...
Co do timerów - kiedy konfigurowałem tim1 do pracy w roli timera opóźniającego, również testowałem opóźnienia na diodzie. Używając stopera wydawało się, że jest ok. Jednak ds18b20 nie działał. SysTick uratował sytuację. Dlaczego? Nie wiem... Musiałbym mieć oscyloskop, żeby sprawdzić dokładnie te opóźnienia. Niemniej jednak ds18b20 działa, więc zamykam...
Witam, Właśnie robię sobie termostat na AtTiny2313 + DS18B20 i natknąłem się na problem, którego nie mogę przeskoczyć. Układ działa sprawnie (wyświetla się temperatura na 7-seg.) jeśli podepnę linię danych DS18B20 do np. PD0 czy PD1, ale nie działa po podłączeniu do PD2, PD3, PD4 - a płytkę mam zrobioną tak, że do obsługi 1wire jet przeznaczony pin...
Witam, przekopałem się przez wiele tutoriali, postów, wątków, i nie znalazłem rozwiązania, więc postanowiłem opisać własny problem. Mianowicie: mam podłączone do Atmegi8 dwa wyświetlacze 7seg multipleksowane, oraz termometr cyfrowy DS18B20. Chciałem aby zmierzona temperatura była wyświetlana na tych 7seg, oczywiście ze względu na dwa wyświetlacze jedynie...
Timery mają taki fajny tryb jak OPM one pulse mode.... Buforowanie ARR można wyłączyć, więc update nie będzie konieczny.... Podoba mi się ten mix SPL i nie SPL :D
Biblioteki do obsługi 1wire nie korzystają z żadnego timera. Dodano po 9 Niestety ten zabieg też nic nie dał.
[syntax=c]sensors.readTemperature[/synta... odczytuje temperaturę. Co wywołuje start konwersji? Robi to ta funkcja? A może inna? Podpowiedź. Konwersja dla DS18B20 to, zależnie od rozdzielczości, 100..700ms. Czas mozna zmierzyć na wiele sposób, oscyloskopem, rejestratorem logicznym, timerami.
Witam, Chciałbym zrobić sobie zegarek i nie wiem jaka metoda będzie dokładniejsza: 1. wykorzystując RTC atmegi z kwarcem 32,768kHz (Atmega na 8MHz z RC) 2. zewn kwarc 16 MHz i zrobić to na timerze np 2 Czy też inne wyjścia jak DS1307, PCF8583. Chodzi mi o dokładność Do układy będą też dopinane m.in. DS18B20 (2x) Pozdrawiam.
Oczywiście, że się da. Najładniej wygląda regulacja podświetlenia przez PWM, z płynną zmianą jasności. I tak musisz mieć jakiś timer - zaprogramuj timer na zgłaszania przerwań z częstotliwością np. 200 Hz (to będzie dobre i do PWM), a w przerwaniach odliczaj czas wykonywania różnych czynności, np. gaszenia podświetlenia.
Na początku tak konfiguruje rejestry MOV IE, #10001011B;PRZERWANIA: TIMER T0, INT0 SETB IT0 ;INT0 REAGUJE NA ZBOCZE SETB TR1 SETB PT0 Przerwania od T0 i INT0 zajmują kilka cykli. Krytyczne jest natomiast przerwanie od T1 gdzie multipleksuje wyświetlacz, sprawdzam klawiature i co jakiś czas odczytuje DS18b20. Timer ładowany jest wartoscią D8EFh....
Można i tak, chociaż dodatkowa zmienna x zapewne nie jest potrzebna - wystarczy czytać licznik timera. Ale może prościej byłoby to zrobić nieco inaczej. Precyzyjnie generowac musisz tylko impulsy ujemne (0 logiczne). Więc możesz wystawić 0 na magistralę, zaprogramować timer i w przerwaniu timera po określonym czasie zmieniać 0 na 1. A najlepszą możliwością...
http://obrazki.elektroda.net/60_12870844... Witam. Termometrów na elektrodzie było już dużo, w tym projekcie nie ma nic specjalnego, poza tym że wykorzystuje w miarę nowy procesor LPC1343. Projekt umieszczam w sumie tylko po to żeby podzielić się źródłami. Mam nadzieje że komuś się przydadzą. Jak wiadomo, kto stoi w miejscu, ten się cofa....
Kod jak dla mnie zupełnie nieczytelny, nieoptymalny - dokładasz jakąś funkcję krytyczną w czasie i jesteś w kropce. Konstrukcje typu : dec loop_odb_bajt cpi loop_odb_bajt,0 brne odb_dale swobodnie moga występować bez cpi . Masz najprawdopodobniej źle dobrane opóźnienia, może predkośc zegara się różni od przyjętej ? Nie lepiej zrobic obsługe na timerze,...
Przyjąłem że masz przycisk chwilowy a przekaźniki sterowane stanem wysokim. Tutaj poprawki : [syntax=c]#include <OneWire.h> #include <DallasTemperature.h> #define PIN_SENSOR 7 // pin do ktorego podloczono DS18B20 #define PIN_PK1 4 // pin sterujacy przekaznikiem 1 #define PIN_PK2 5 // pin sterujacy przekaznikiem 2 #define PIN_PK3 6 // pin...
Witam wszystkich, w temacie mikrokontrolerów nie jestem zbyt mocny, dlatego proszę o pomoc. Postanowiłem zbudować termometr dwupunktowy na ds18b20 i wysterować multipleksując IW-18. Poniższy program działa, jego mankamentem jest losowy zanik pomiaru w jednym (IN) albo drugim (OUT) czujniku, czasem przekłamuje na sekundę pomiar, podając 80 stopni, jednak...
Nie rozumiem czemu uparłeś się na ten kwarc zegarkowy ? Przecież zegar równie dobrze można zrealizować dzięki np. Timer1 taktowany rezonatorem kwarcowym 8Mhz. A drugi timer wykorzystać do multipleksowania wyświetlaczy. Z kolei na czas odczytu z DS'ów trzeba wyłączać przerwania, bo czasy 1 wire są ściśle określone.
Witam, Posiadam wyświetlacz S1D15705, który podłączyłem do atmegi32. Wszystko było by ok, gdyby nie to, że co chwile na wyświetlaczu bez jakiegokolwiek powodu zapalają się losowe piksele. Czy powodem może być wadliwy wyświetlacz ? Linie danych wyświetlacza mam podpięte do portu A, natomiast linie sterujące do portu D. Czy wykorzystanie portu D, może...
W bascomnie ciężko zrobić LED + Ds18b20 wszytko psuje Waitms 750. Zwiększ do 8 a jak możesz do 16MHz kwarc. A od kiedy to musimy czekać 750ms nie robiąc nic innego? Od czego mamy timery? Przepraszam najmocniej Kolegę, ale jeśli Kolega tego zrobić nie potrafi to: 1. Nie oznacza że się tego zrobić nie da - ja nie potrafię zbudować komputera klasy PC...
Czujnik zasilam +5V, linie danych podciągam 4.7k do plusa, DS podłączony do P1.20, nie zmieniam PINSEL. No tak, czy siak powyższy kod nie działa. Opóźnienia na timerze na pewno będą ładnie i dokładnie wyglądać, ale według symulacji w Keilu te moje toporne delayus i delayms odmierzają wystarczająco dokładnie.
[url=http://stm32f4-discovery.com/2014/0... masz pokazaną zasadę działania 1wire z N DS18B20. Co prawda kod jest oparty na F4, jednak dużo różnic nie będzie w porównaniu z F1. Zawsze zamiast tworzenia swojego timera do delaya możesz skorzystać z SysTicka.
Dziękuję za przykładowy kod. Mam kolejne pytanie, mianowicie _delay_ms(750); nie przeszkadza w żaden sposób w prawidłowym multipleksowaniu wyświetlaczy. Pamiętam z doświadczeń z DS18b20 + led to miałem problemy z tym. Rozwiązaniem było wbudowanie całego oczekiwania na konwersję w przerwania od timera - odpowiednia ilość przerwań dawała 750 ms....
Atmegi mają wewnętrzny układ taktujący 1MHz, do tego trzeba zmienić ustawienia programowania w stk200 (przełączyć fuse na zewnętrzny kwarc). co do zworki - jakaś bzdura, 1wire niewymaga żadnych zworek, 1-wire to kwestja programu, timer służy do odmierzania czasu i niemusi byc połączony z portem. co do i2c- niewiem...
Witam kiedyś dawno temu rozebrałem mikrofalę marki Daewoo niestety nie znam modelu i nie mam schematu elektroniki. Na przednim panelu jest timer bardzo praktyczny bo nie ma tam jak dzisiaj porysowanych kurczaków i innych symboli a zwykła klawiatura z której wpisuje się żądany czas oraz zegarek. Wtedy zapisałem sobie gdzie podłączyc zasilanie i włączniki...
timer zlicza czas w jakichś tam odstępach i dodaje do licznika +1. (wyeliminowano przepełnienia timera) . Jeśli jest impuls z halotronu (magnes kręci sie na łyżkach wiatromierza) to znaczy ze wykonano jeden obrót, i wtedy ten czas jaki zleciał do momentu przejechania magnesu, (np 1/50 sekundy) przeliczam na prędkość. Tylko do tego timera używam. Biblioteka...
..... wymagane jest precyzyjne odmierzanie czasu (transmisja, inicjalizacja, itd.) Jak precyzyjne to odmierzanie czasu ma być i jaka jego wielkość? Liczniki programowe z wykorzystaniem sprzętowego timera są bardzo dobrym rozwiązaniem i do obsługi 1WIRE w zupełności wystarczy. Jeżeli zależy Ci na bardzo dużej precyzji uwzględnij w obliczeniach czas...
Działa prawidłowo na tych opóźnieniach :) Napisałem także delay na timerze. Problem leżał w źle napisane funkcji Write_Bit, prawidłowa to; float DS18b20_Read_Temperature(uint8_t* code); wywołuje ją z main w ten sposób printf ("Zmierzono %3.2f\r\n", DS18b20_Read_Temperature( &ds18b20 wyświetla dziwne liczby, kiedy wrzucę ciało funkcji DS18b20_Read_Temperature...
Prawdopodobnie masz krzaki, dlatego że operacja uaktualniania zawartości zmiennych nie jest "atomowa". Chodzi o to, że procesor może rozpocząć obsługę przerwania w trakcie uaktualniania którejś z wartości. Zastanów się, co się stanie jeżeli przerwanie zostanie wykonane w zaznaczonych miejscach: Jednosci = Int(t1) [przerwanie] Jednosci...
Wiem o tym, mi chodzi to że muszę odczytać temperaturę z DS18B20 i wyświetlić ją na stronie, chce się tym odczytem zająć co kilka sekund w przerwaniu żeby nie tracić czasu podczas wysyłania strony. Skoro wiesz to dlaczego pytasz o co innego niż potrzebujesz? Pytałeś o miganie diodą w trybie CTC i taką odpowiedź dostałeś. Jeżeli chcesz cokolwiek zrobc...
Witam Piszę program (bascom) i nadziałem się na problem z którym nie mogę sobie poradzić. Timer 1 pracuje jako zegar i po spełnieniu warunku , ma załączyć przekaźnik który ma być załączony na czas_pracy i po odliczeniu czasu pracy ma wyłączyć się na czas przerwy i zablokować włączenia przekaźnika na ten czas. Tak w skrócie: kod : $regfile = "m8def.DAT"...
Wkrada mi się czasami odbiór samych jedynek z ds18b20; Na soscyloskopie wszystko ładnie wygląda tylko kiedy jest odbiór nic znaczącej ramki (same jedynki) widać że ds nie odebrał poprawnie komendy 0x44cc Przy wysyłaniu komend występuje obcinanie bitów pojedyńczych. Okazało się że po testach robi to sam czujnik. Wysyłanie komend robię na przerwaniu timera...
Ten kolega co pisze że mu procki chodzą po przetaktowaniu może niech napisze co w jego mniemaniu znaczy że chodzą? Czy np. że migają led-em albo reagują na wciśniecie jakiegoś podłączonego do niego przełącznika ? Próbowałem przetaktować Atmela użyłem zewnętrznego generatora i też istotnie chodziło. Ale np przerwań od Timerów już nie mogłem uzyskać,...
ds18b20 timer termostat ds18b20 rozdzielczosc ds18b20
radio honda civic radio technics glosniki volvo silnika
sterownik movera uszkodzony powerbank
Kody błędów przy uszkodzonej grzałce w pralce Miele Oleo-Mac 937: Lokalizacja i Diagnoza Odpowietrznika