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.
Jak najbardziej tak.
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]...
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...
A to to co? Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Porta.1 , Db7 = Porta.0 , E = Portd.2 , Rs = Portd.3 Config 1wire = Portd.0
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.
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
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
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).
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...
usuń delay(1000); z sensors.requestTemperatures(); i wykonaj opóźnienie na timerach
Jest Timer ktory odlicza czas do kolejnego spotkania?
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ą.
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.
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.
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?
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ś...
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...
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
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...
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.
Hmm zaskakujące że pytasz ale temat znany (bascom) - Jako koniki do Karocy zaprzęgnięte zostały timery.
(...) 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...
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....
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...
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.
idea dobra ale wykonanie do d... jak urzyje waitms do pomiaru sekundy to jest niestabilna trzeba urzyć timera
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ę...
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.
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...
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
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.
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ą.
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.
Czas radzę odmierzać na timerze i zrezygnować z funkcji typu _delay_us.
Nigdy w przerwaniu nie użyłem "wait" i nie użyje. Od tego są timery w AVR aby z nich korzystać ;)
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 ?
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...
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?
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...
Wydaje mi się że jednak trzeba wpisać "start timer0" w przerwaniu. Chyba że load uruchamia timer- ale chyba nie.
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...
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 :)
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ść.
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ć?)
"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.
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
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...
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...
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...
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.
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...
na wbudowanych timerach może być problem bo na czas odczytu temperatury z 1wire nie mogą się właczyć żadne przerwania
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 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ć?
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.
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ą...
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
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...
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...
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.
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...
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...
[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, 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...
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ć...
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....
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...
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...
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...
Biblioteki do obsługi 1wire nie korzystają z żadnego timera. Dodano po 9 Niestety ten zabieg też nic nie dał.
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...
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...
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...
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.
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....
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ą...
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...
[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.
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,...
Tak z ciekawości zapytam ile trwa transmisja z ds18b20? Jeżeli mieści się w czasie EDIT:okolo2ms to można ją wstawic w czas impulsu odchylania pionowego, odnośnie kodu który załączyłem trzeba by wyrzucić delay i impulsy odchylania robić na timerze(ach)
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....
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.
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"...
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...
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...
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...
..... 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...
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...
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, od jakiegoś czasu próbuję stworzyć sobie zegarek z termometrem + napięcie akumulatora do auta. Wszystkie programy osobno działają bez zarzutu. Problem zaczął się z chęcią wprowadzenia przełączalnych ekranów i wprowadzeniu przerwań. Doczytałem że przerwania skutecznie psują komunikację z DS'ami przez co temperatura się nie odczytuje. Ogólnie to...
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...
Witam. Natrafiłem dziś na problem z przerwaniem. Mianowicie mam DS18B20, LCD, UART i timery. Program wygląda tak, że temperatura z DSa jest wyświetlana na LCD, wszystko gra. Mam też przerwanie, w którym co sekundę wysyłane jest 6 bajtów do kompa (przez UART). Przerwanie jest od Timera co 1 sekundę. Wszystko gra do czasu. W pewnym momencie program sie...
Czy mógłbyś nieco przybliżyć zastosowanie tego sterownika? Spróbuj. Postaram się, ale tak naprawdę poza zdefiniowaniem pinu i uruchomieniem sterownika nie ma wiele do roboty. Tutaj nie powinno być różnicy między DS1820 a DS18B20. Najtrudniejszą częścią było, i oczywiście nadal jest, uzyskanie działającego timera / opóźnienia dla protokołu OW. "Czynniki"...
termostat ds18b20 rozdzielczosc ds18b20 ds18b20 mirekk36
komunikaty avast kaseta adapter transmiter iphone blokada ekran
Jak sprawdzić sprawność miernika IMI Robin? Drgania w Mercedes W211 - przyczyny i diagnostyka