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 Co do przeliczania wartości na temperaturę nie będę się wypowiadał bo w wielu publikacjach było to prezentowane. Natomiast zajmę stanowisko w sprawie wyświetlacza LED. Proponowałbym z obsługi przerwania usunąć procedurę pobrania znaku do wyświetlenia. O wiele lepiej zrobić to w programie głównym. Zbyt długie przebywanie w obsłudze przerwania może...
A czy zdajesz sobie sprawę z tego, że przerwania "rozwalają" Ci transmisję 1wire :?: Poza tym, co z niżej wymienionymi dyrektywami Bascom-a :?: A jak powinno być poprawnie ??
http://obrazki.elektroda.pl/8267947700_1... Ponad 20 lat temu jako amator hobbysta budowałem proste układy elektroniczne. Studia i styczność z informatyką spowodowały, że porzuciłem hobby pod nazwą "składanie elektroniki" na rzecz "składanie programów komputerowych". W bieżącym roku (2011) dzięki uprzejmości kolegi Jacka.M, który okazał...
Albo zrób przerwanie od timera np: co 2,5ms i np 1 przerwanie 1wreset; 2 przerwanie następny rozkaz do ds-a po start konwersji kolejne przerwania czekasz na zakończenie konwersji i dalej tak samo kolejne przerwania odczytują temperaturę; jedno przerwanie jeden rozkaz, nie zapomnij o crc. Sam niedawno tak robiłem ( w ramach walki z nuda 6 ds-ów ) i bardzo...
Dzięki wielkie !! Pomogło , aczkolwiek nie rozumiem dlaczego bez tego też czasem działało zależnie od kolejności wpisów ? Teraz działa OK bez względu na kolejność wpisów, i reszty (czyli początku programu w którym pewnie jest mnóstwo innych błędów :-) ) [syntax=vbnet] $regfile = "m2560def.dat" ' specify the used micro $crystal = 16000000 ' used crystal...
http://obrazki.elektroda.pl/3089511800_1... Witam, dziś prezentuje swój bezprzewodowy termometr pracujący na częstotliwości 433 MHz. Urządzenie składa się z nadajnika i odbiornika. Nadajnik odczytuje temperaturę pieca C.O. i wysyła ją do odbiornika. W odbiorniku mamy możliwość ustalenia górnego i dolnego progu załączenia alarmu, który...
No to skoro się uczysz to ucz się od razu porządnie. W przerwaniach ustawiaj jedynie flagi, a działania przeprowadzaj w pętli głównej. Poczytaj też o stosach $hwstack, itp.
Wyłącz przerwania na czas transmisji 1wire
Obsługa 1wire w przerwaniu to porażka do tego jeszcze waitms. W przerwaniu ustawiaj tylko jakąś flage i na jej podstawie czytaj 1wire w pętli głównej. W trakcie odczytu blokuj przerwania - i tak nie są wtedy potrzebne.
Z tym próbkowaniem to jest dobry pomysł, wtedy odczyt temperatury spokojnie można robić na przerwaniach licznika sterowanego impulsami z zegara, a µC może robić coś ciekawszego w czasie konwersji w DS18B20... Pzdr, LightI
Tak przerwania mogą zakłócać komunikację 1wire. Na czas komunikacji z DSem blokuj przerwania.
W chwili gdy obsługuje 1-Wire, Bascom ZAWSZE nawet na czas generowania resetu, co trawa ok 500us, później presence, co daje razem ok 800us, zawiesza przerwania. To samo w czasie transmisji danych, transmisja bajtu to ponad 500us zawieszone przerwania. W tym czasie nie wykona się przerwanie od timera, od i cała tajemnica. Ale zabobony. Każdy może otworzyć...
Po pierwsze problemem jest 255, więc zapewne przepełnienie typu itp. - niestety w Bascom rzutowanie typów jest niejawne i pewnie całe operacje trzeba zrobić na intigerze a potem dopiero wrzucić do Byte. Co do przygasania - nie pokazujesz pełnego kodu programu, ale rzeczywiście na dosyć długi wyłączasz przerwania
Przerwanie żeczywiście wtedy nie zakłuci pracy 1wire ale sam odczyt 1wire zakłuci czestość występowania przerwania - it o jest powazym ograniczeniem w stosowaniu tego. ... A w jaki sposób 1wire , zakłóci częstotliwość występowania przerwań :?: Nie rozumiem :| Ostatecznie , można zastosować automat i obsługę 1wire upchać do procedury przerwania.Jeśli...
Hmm- nie rozumiem. Przerwanie jest sprzętowe- co 2ms. Oczywiście nie wiem jak długo Bascom wykonuje operacje na single- pewnie długo. I operacje na LCD- też długo- chociaż wielokrotnie szybciej niz bez odczytu RW. Sugerujesz że inkrementację należy robić w przerwaniu? Dobrze- ale z drugiej strony obsługa przerwania ma być krótka. Jak zrobić żeby ten...
Podałem wyraźnie, że oprogramowanie napisałem w WinAVR ;) Nie uznaję czegoś takiego jak bascom (wystarczyło mi raz w życiu się na nim przejechać...). Przedstawię "odchudzone" kody źródłowe - aby były całkowicie funkcjonalne należy troszkę dopisać. Ogólna idea jest przedstawiona. Sam main w programie jest niewielki. Dla przykładu pokażę jak zrealizowałem...
Po całym dniu walki słabo opisałem mój problem bo już po prostu nie miałem siły :D Wyjaśniam... Zrobiłem sobie mikro serwerek LANowy na Atmedze32 i układzie ENC28J60. Z doświadczenia z tym układem i Atmegą wiem że znacznie stabilniej wszystko pracuje gdy mikroporocesor (Atmega) jest taktowana zegarem 25MHz z gotowego modułu ENC a nie własnym kwarcem....
Zabralem sie za termometr ds18b20. Wczesniej korzystalem z niego, wartosc temperatury wyswietlalem na LCD'ku i wszystko dzialalo. Teraz powrocilem do ukladu z ta roznica ze wart. temperatury wyrzucam szeregowo na kompa. Problem polega na tym ze w hyper terminalu wyswietla mi caly czas jedna wartosc (88). Kiedy wyciagam, w czasie pracy, procka uklad,...
Jest to pomysł, aby nadać pewne priorytety czynnościom. Np. dla mnie ważny jest zapis, więc może dam dodatkowy warunek - sprawdzanie stanu pinu, który steruje zapisem ( CS_SD ) i gdy jego stan niski to blokować działanie innych podprogramów. Samo wykonywanie po kolei może się do końca nie sprawdzić, bo np : - DTH11 co 2 minuty - zapis SD co minutę -...
Witam Z racji wolnego dnia postanowiłem jeszcze dokładniej poznać budowę DS18B20 (czasem trzeba sobie co nieco przypomnieć). Odpalam program który zawsze działał i tu niespodzianka... DS działa prawnie do 32 stopni a jeśli temperatura przekroczy ten próg bez względu na to co jest wyświetla 85 stopni aż temperatura nie zjedzie poniżej tego progu. Problem...
Witam Kupiłem sobie DS18B20 wodoodporny z metrowym przewodem. Podłączyłem go do '51, Vcc, Masa i dane przez rezystor 4,7koma do plusa. Termometr zaczyna działać dopiero jak się go podgrzeje powyżej 30 stopni Celcjusza. Po ostygnięciu poniżej tej temperatury znów nie działa. Testowałem z drugim identycznym termometrem, ale ten drugi zaczyna działać powyżej...
WITAM! MAM SZYBKIE PYTANIA: CZY PRZY ODCZYCIE TEMP. Z DS18B20 TEZ CO KTORYS POMIAR MACIE 85 ST. (CZYLI BRAK POMIARU)?? DA SIE TO JAKOS WYELIMINOWAC (WYDLUZANIE CZASU KONWERSJI NIE POMAGA) - NIE CHODZI MI O ROZWIAZANIE TYPU "IF(TEMP!=85)......"?? Z GORY DZIEKUJE I POZDRAWIAM!
Jak sprawdzić czujniki ds18b20 czy prawidłowo wskazują temperaturę bo słyszałem że są niektóre fabryczne ,,felerne,, .Umnie wszystkie 5 zawyżają o 2stC , a może jest błąd w kodzie. dziękuje $regfile = "M16def.dat" $crystal = 8000000 '****** KONFIGURACJA PORTÓW ********* Config Porta = Output 'wysw ABCDEFG Config Portc = Output 'zasilanie W4,W3, W2,...
Mam następujący problem: Napisałem w Bascom'ie program do odczytu 2 temperatur (na 2 różnych pinach) drugim zadaniem programu było przetwarzanie sygnałów odebranych z komputera i otwieranie odpowiednich wyjść jednak zauważyłem ze gdy brakuje jednego termometru następują błędy transmisji lub jest ona mocno opóźniona. Config 1wire = Portd.5 1wreset 1wwrite...
Witam, mam następujący problem z poniższym programem. Prosiłbym bardziej obeznanych kolegów o sprawdzenie, układ powinien działać tak: ustawiam temperaturę plus regulacja histerezy, gdy temperatura jest niższa układ załącza przekaźnik do czasu wyrównania temperatury, problem polega na tym że program załącza przekaźnik (grzanie) tylko na moment po czym...
Witam. Napisałem obsługę 2 termometrów DS18B20 w Bascomie. Wszystko ładnie działa, ale... W procedurze trzeba chwile poczekać po odczytaniu danych z termometrów. Wygląda to tak: 1wreset 1wwrite &H55 1wverify Dsid1(1) 1wwrite &HBE I1 = 1wread(2) 1wreset 1wwrite &H55 1wverify Dsid2(1) 1wwrite &HBE I2 = 1wread(2) 1wreset...
Witam. Jakiś czas temu zrobiłem koledze sterownik w zasadzie wentylatora do pieca. Sterownik w sumie działa według założeń ale czasami dostaje szajby. Do tej pory nie znalazłem przyczyny. Skłaniam się bardziej ku temu że jest to jakiś problem z programem. Problem jest taki że czasami po jakimś czasie wartości temperatur odczytywanych z czujników DS18B20...
Jak w temacie - czytalem gdzies, ze trzeba zminic stan portu podczas pomiaru, ale ja jestem w tym temacie zielony, dlatego prosze o pomoc. PS. Potrzebuje jeszcze dodac funkcje z przecinkiem i znakiem - wydaje mi sie, ze wynik wyswietlany jest bez nich. $regfile = "m8def.dat" $crystal = 4000000 Declare Sub Init Declare Sub Convallt ' Convert...
Zbudowalem sterownik do nagrzewnicy powietrza i od dluzszego czasu chodzi prawidlowo. Ostatnio z ciekawosci chcialem do niego dorzucic mozliwosc zliczania wlaczen wentylatora. Licznik wlaczen automatycznie zerowany co 24h. I tu pojawil sie problem, wlaczenie przerwania powoduje zaklocenia w odzczycie ds18b12 skutkiem czego dostaje dziwne odczyty. Przeniesienie...
Witam, Napisałem program termostatu i mam niekiedy problem z odczytem temperatury. Wartość temperatury wyświetlana jest dobrze ale co pewien czasz wskakuje mi wartość 85. Jak można tą sytuacje wyeliminować ?. Drugie pytanie- jak zwiększyć precyzje wskazywania (liczba po przecinku). W chwili obecnej wskazywana jest tylko liczba całkowita. Układ DS18B20...
Witam ! Zrobilem sterownik do pieca CO. Jako czujniki temperatury wykorzystalem DS18B20. Wszystko dziala, tylko, ze po pewnym czysie odczyt z czujnikow jest rony 0 C. Po wyjeciu wtyczki czujnika sterownik wyswitla 255 C i to jest normalne. Po jej ponownym wlozeniu pokazuje jakas temperature, ale nie rzeczywista i spada on po jednym stopniu co odczyt....
Witam, moze ktos przesledzic ten kawaleczke kodu (BASCOM) i powiedziec co jest nie tak ? Problem tkwi w tym ze odczytywane temperatury sa ok (wystarcz mi dokladnosc do 1 st C) jednak jak odlacze ktoregokolwiek DS'a to Tin = Tout zamiast wpisac wartosc 99 (w taki sposob wykrywam ze uszkodznieu ulegla ktorys czujnik) Program to kawalek kodu ktory ktos...
Witam, wykorzystuję układ ds18b20 do pomiaru temperatury. Układ działa prawidłowo przez około 30s od załączenie zasilania. Następnie odczyty pokazują temperaturę 9 lub 10stopni. Podczas normalnej pracy temperatura jest przetwarzana prawidłowo. Do pull-up'a wykorzystuję wewnętrzny rezystor podciągający uC. Czy ktoś spotkał się z podobnym problemem? Co...
Hej! I jest tak jak mówisz - Skubik. :P Kwarc jest przy samym układzie, przylutowany bezpośrednio. Takich strategicznych rzeczy staram się nie łączyć kabelkami...:) Myślałem że coś nie tak może być z ATmega8, że może się zawiesza, może resetuje, może jakieś zakłócenia pracy kwarcu mikrokontrolera ( pracuje na 16MHz)? Ale włączyłem w fuse bits CKOPT...
Poruszę tylko 2 sprawy: 1)Jeżeli do odmierzania 1 s użyłeś Timer2 "napędzany" kwarcem 32768Hz , to po kiego grzyba procedurę odliczania sekund podkładasz pod przerwanie INT0 :?: On Int0 1s Zamiast włączać przerwania INT0 , włącz przerwania Timer2. On Timer2 1s Config Timer2 = Timer , Async = On , Prescale = 128 Enable Time2 '... 2)Myślałem, że już widziałem...
Tylko nie wywołuj w przerwaniach tak długich bloków instrukcji - lepiej ustaw flagę, która wskaże pętli głównej programu wykonać te instrukcje. Ale co tu możemy mówić, jak widać tylko wycinek programu. Zgadza się, dlatego wklejam nieco więcej Flaga_wybor jest co 10 sekund, Blokada zatrzymuje odczytywanie czujników na czas odbioru DCF77, zwłaszcza DS18B20...
Odczytywać temperature po ustawieniu określonej flagi w przerwaniu. Kawałek kodu z mojego programu kiedy robiłem to jeszcze w Bascom Dim Flaga As Byte : Flaga = 0 On Timer0 Int_timer0 ' wskazanie do obsługi przerwania Timer 0 Const Factor = &H6A 'częstość wywołania przerwania timera Config Timer0 = Timer , Prescale = 64 'ustawiona na ok. 1,6ms Timer0...
Witam Oto przykładowy program w BASCOM AVR obsługujący dwa czujniki o znanych numerach seryjnych: '***************************************... 'Konfiguracja AVR '***************************************... $regfile = "m162def.dat" $crystal = 16000000 $baud = 2400 Config Porta = 255 Porta = 255 Config Portb = 255 Portb = 255 Config...
Witam. Piszę sobie sterownik temperatury w Bascom '51 i mam problem z przerwaniem. Otóż serce układu to AT89C52 do niego jest podłączony RTC DS1678. Ustawiłem RTC, aby na wyjściu INT generował co sekundę impuls. Podaję ten impuls na wejście INT0 procesora. W obsłudze przerwań dałem ustawienie zmiennej Bit na 1, na podstawie jego inicjuję w pętli głównej...
Dołożyłem obsługę przerwań wewnętrznego timera , i tutaj pojawił się problem. Czujniki zaczęły się "dławić" czasami (przez sekundę ) wskazywały mi temperaturę nierealną ( 400 st C) a czasami układ nie wykrywał czujnika Wszystkie te złe rzeczy dzieją się raz na kilkanaście sekund, jednak wystarczy to, żeby zafałszować inne zmienne (np temperaturę maksymalną)...
Witam panowie od razu podkreślę że jeszcze uczę się bascoma więc proszę nie krzyczeć i nie usuwać tego postu do kosza Siedzę już nad tym 3 dzień i efekt mojej pracy nie najgorszy ale mam parę pytań po pewnych rzeczy nie rozumiem i nie mogę rozwiązać. Więc tak założeniem był pomiar temperatury przez ds18b20 wyświetlenie je na LCD i 4 wyświetlaczach 7...
Przerobiłem program na Atmega328. Teraz ma tylko odbierać dane z master na Atega1284p i wysyłać do Domoticz. [syntax=vbnet] $regfile = "m328pdef.dat" $crystal = 8000000 $hwstack = 100 ' rozmiar stosu sprzętowego $swstack = 100 ' rozmiar stosu programowego $framesize = 128 $baud = 19200 '************ Uart 0 Config Serialin0 = Buffered , Size = 150 ,...
Dzięki kolego za kod, widzę że jest to kod obsługi jakiegoś zegarka, bardzo podobny kod znajduje się u M.Wiązania. 'Program multipleksowego sterowania czterema wyświetlaczami '7-segmentowymi LED poprzez dekoder 4543 'cyfra załadowana do A będzie wyświetlana na wyświetlaczu 1 'cyfra załadowana do B będzie wyświetlana na wyświetlaczu 2 'cyfra załadowana...
Witam Mam Atmega32A + PCF8563 + PCF8574 + RFM12 + DS18B20 +DHT11. Port danych LCD to Port.A, ControlPort to Port.C. I2C standardowo na Portc.0 Portc.1. Niestety jest problem z obsługą I2C, tzn. zegar PCF8563 nie działa w ogóle ( na LCD puste pole ) , a klawiatura na PCF8574 - tylko jeden klawisz i to nie ten, który jest przypisany w kodzie ( działa...
Bascom - wersja 1.11.95 Kod, no jest tego sporo: - zegar PCF8563 - Zapis na SD - dwa czujniki DHT11 - odczyt z PCF8574AP ( klawiatura ) - RC5 - ma być DS18B20 - ma być DCF77, ale nie doszedłem do tego momentu ( tzn testowałem na innym procesorze i działało ) Działa - zegar PCF8563 - dwa czujniki DHT11 - odczyt z PCF8574AP w przerwaniu ( klawiatura )...
Witam Mam program budzika, który jako dodatkową atrakcję miał mieć możliwość mówienie czasu na żądanie i odtwarzanie oprócz buzzera utworu jako alarmu. Atmega steruje przez jedno SPI programowe układem MAX7219, a przez konwerter poziomów i drugie SPI programowe odtwarzaczem WTV020SD. O ile sam WVT020SD + PCF8563 ( wyjście CLK do INT1 ) działają dobrze,...
Tak przerwania mogą zakłócać. Na czas wysyłania komend 1w wyłączaj przerwania jeśli możesz.
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.
Oliczenia są ok, pamietaj tylko o ustawieniu przecinka w odpowiednim miejscu. Grzesiek. Ps. w Twoim programie procek czeka bezczynnnie przez 1s, można to zrobić na przerwaniach - jak? poszukaj na elektrodzie, było już kilka razy.
Dodaj flagę , zwiększaj ją w przerwaniu, a w pętli głównej sprawdzaj czy osiągnęła już równowartość 750ms.
Przeciez ci radzimy (no moze nie ja) zebys nie robił tego w przerwaniach a szczegolnie w ten sposób. Przerwania stosuje sie dla zaoszczedzenia czasu procesora, a czy to ma sens w BASIC-u to nie sądze.
Z tego fragmentu nie wiadomo czy używasz przerwań. Może wywołujesz jakieś przerwanie i jego obsługa zajmuje tyle czasu , że przychodzi następne przerwanie i program się pętli ( jedyne co robi to obsługuje przerwanie )
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...
pier- w tym programie który Ci podałem masz wykorzystać zmienną "flaga_dodatkowa" do sterowania wyświetlaczem w sub- a nie w przerwaniu Timer2. Timer2 wyłącz. I daj program po przeróbkach. Żaden kwarc na to nie pomoże- trzeba korzystać z przerwań.
wyświetlanie wyniku zrób na przerwaniach , niezależnie co będzie robił procek wynik będzie musiał wyświetlic co określony czas
Jeśli termometr będzie w przerwaniu np co 1 sec, to możesz usunąć : " Waitms 750 'przeczekaj czas konwersji" To opóźnienie będzie tylko spowalniało powrót do pętli głównej. Konwersja i tak się dokona bo przecież program będzie tam skakał co sekunda. Różnica jest tylko taka, że przy pierwszym włączeniu zasilania do układu termometr pokaże 85 stopni....
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ć?
Zawsze mozesz rowniez wykorzystac moduly laserowe ale za prostote w wykonaniu zaplacisz niezawodnoscia a raczej zawodnoscia w transmisji podczas przerwania wiazki :D
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.
bo za pomocą przerwań odsługuję wyświetlacz 8 seg.
A czy przy takim zapisie: [syntax=vb] Case 2: Locate 1 , 1 Lcd " " ; Chr(5) ; " Nap" Locate 2 , 1 Lcd Wart_nap2 ; "V " End Select Return[/syntax] Będzie mi się odświeżała zmienna Wart_nap2 ? Tak aby wynik z napięcie był odświeżany co 100ms (zmienna obliczana w przerwaniach) Jeśli nie to jak to najlepiej rozwiązać ?
Z takim kwarcem da się zrobić programowe 20kHz. Ze sprzętowym nie ma problemu z jakimikolwiek przerwaniami. Zapewne chodziło o przerwania występujące podczas multipleksu wyświetlaczy, ale wtedy przy odpowiednim zarządzaniu przerwań także nie ma problemu z odczytem z 1Wire.Także piszę w bascomie i mam program z 4xDS18B20 na przewodzie 20m i z 15 multipleksowanymi...
Zgodnie z obietnicą wstawię kod programu w języku Bascom. Wiem że jest w nim wiele błędów i moich złych nawyków choćby brak przerwań, funkcji, itp.
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.
bascom przerwania ds18b20 ds18b20 przerwania bascom przerwania
zegarek prosty schemat czyścić zbiornik paliwo adapter joystick
stacja klimatyzacji attiny13 przekaźnik
Whirlpool pralka – pompa odpływowa nie pracuje ciągle, nie wypompowuje wody mimo drożności Hitachi 24HE2000 TV firmware download, Vestel mainboard, official update methods, USB recovery