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...
Tak przerwania mogą zakłócać. Na czas wysyłania komend 1w wyłączaj przerwania jeśli możesz.
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.
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 )
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 używasz jakiejś bardzo starej wersji spolszczonej to możliwe, ale Demo2075 już nawet to potrafi. Możesz użyć Twojej poprzedniej konfiguracji z Load Timer, ale dodaj ustawianie tej flagi 5ms w przerwaniu.
Dodaj flagę , zwiększaj ją w przerwaniu, a w pętli głównej sprawdzaj czy osiągnęła już równowartość 750ms.
Nigdy w przerwaniu nie użyłem "wait" i nie użyje.
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.
Wyłącz przerwania na czas transmisji 1wire
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ń.
Wsadź odczyt pod jakiś label np: odczyt: "wyłącz przerwania" "dokonaj odczytu z ds" "włącz przerwania" return w programie zamiast całej formułki : 1wreset 1wwrite &H55 1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika If Err <> 1 Then 1wwrite &HBE Tp = 1wread(2) Wywołuj tylko label...
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ę...
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.
Zobacz tutaj If Flaga_przygotowanie_odczytu = 1 Then Incr Liczniczek_przygotowanie_odczytu [...] -----Breakpoint;)------- Flaga_przygotowanie_odczytu = 0 End If No i tak, powiedzmy że w miejscu które pokazałem program siedzi 2 sekundy. Przerwań było od groma, a Tobie zmienna tylko raz się podniosła. Dlatego takie rozwiązanie jest złe. Musisz...
Obsługa 1Wire w BASCOMie nie jest obsługiwana w przerwaniach. Możesz spróbować czegoś takiego: cli 1wreset 1wwrite &H55 sei cli 1wwrite B2 sei cli 1wwrite &H44 sei Chodzi oczywiście o porozdzielanie wszystkich instrukcji 1Wire sekwencjami sei,cli.
Tak przerwania mogą zakłócać komunikację 1wire. Na czas komunikacji z DSem blokuj przerwania.
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 co robi to przerwanie od zegara?
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.
wyświetlanie wyniku zrób na przerwaniach , niezależnie co będzie robił procek wynik będzie musiał wyświetlic co określony czas
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
bo za pomocą przerwań odsługuję wyświetlacz 8 seg.
No nie mogę nie wiem jak sobie poradzić z tymi przerwaniami macie może jakiś pomysł?? Próbowałem już różnie to konfigurować i nic :(
Tak, ale to czy każdy czujnik chcesz odczytywać osobno, czy wszystkie na raz zależy od reszty programu. Poza tym namawiam do porzucenia Waitms 750 na korzyść Timerów i przerwań.
a czy da rade w bascomie stworzyć procedurę obsługi 1Wire tak by nie kolidowała z przerwaniami np.coś w rodzaju wstawki ASEMBLERA
Wydaje mi się że jednak trzeba wpisać "start timer0" w przerwaniu. Chyba że load uruchamia timer- ale chyba nie.
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.
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
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....
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...
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.
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...
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 Czy ktoś może mi pomóc w jaki sposób mam rozwiązać taki układ ; chcę zrobić dwupunktowy termostat ustawiany oddzielnie dla dwóch temperatur,czujniki ds18b20,klawiaturka trzy przyciskowa i do tego ustawianie dodatkowo za pomocą pilota .Niewiem za bardzo jak się za to zabrać .Czy trzeba do tego zaprzągnąć przerwania czy uda się w jakiś inny sposób....
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...
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ś...
No właśnie podczas wieczornych (nocnych) testów, w kilku momentach uzyskałem odczyt z DS-a -132* czyli źle coś odmierzył w momencie wystąpienia przerwania. Poczytałem trochę Ds od DS18b20 i tematy na elektrodzie i wstawiłem pętelkę z CRC. Teraz chyba będzie działać tak jak się należy.
Problem rozwiązany. Wystarczyło zrobić nowy przewód LCD - układ i już działa. W starym było prawdopodobnie jakieś przerwanie. Natomiast za problem z DS18B20 odpowiedzialny był brak rezystora podciągającego linię Data do plusa zasilania.
Ja bym wyszukiwanie zrobił tak Dim Ids(64) as Byte 'Maksymalna liczba czujników * 8 Dim I as Byte Dim J as Byte Dim L as Byte Dim Count as Byte Dim TempCount as Byte ' Wyszukiwanie Count = 0 TempCount = 1wirecount() If TempCount > 0 Then I = 1 J = I + 7 Ids(1) = 1wsearchfirst() Do If Ids(J) = Crc8(Ids(i),...
Widzicie. Ja walczyłem z timerami, przerwaniami,DS'ami i wyświetlaczami, chyba wewszelkich możliwych kombinacjach. I stwierdzam, że bardzo trudno jest w Bascomie ustalić wybraną częstotliwość przemiatania z jednoczesnym odczytem czujnika. Nawet jeśli pozornie wszystko działa to przy ujemnych temperaturach czas konwersji jest na tyle długi, że nie da...
http://obrazki.elektroda.net/22_12752238... Witam. Dzisiaj chciałbym zaprezentować mój projekt zegara VFD na lampie IW-18. Jest to kontynuacja wątku kolegi Pier -> http://obrazki.elektroda.net/95_12752233... Wszystko tak szybko się odbywa że wyświetlacz w ogóle nie miga :D Program został napisany w BASCOMie - zajmuje ~64% pamięci Flash....
Tak trzeba czekać, ale to nie jest absolutnie żaden problem. Można to zrobić na kilka sposobów, jednym z nich jest właśnie wystawienie flagi, ale są sytuacje gdzie cały odczyt można tam wcisnąć. Nie pamiętam już co było powodem, ale właśnie w jednym ze swoich sterowników odczyt umieszczony był w przerwaniach razem z multipleksem i czymś tam jeszcze....
Witam. Napisałem program w bascomie, zwykły termostat z wyjściem na przekaźnik. Mikroprocesor to Atmega8 + lcd + DS18b20 + 2 przyciski. Przerwania działają, lcd tak samo, jednak program nie chce odczytywać danych z czujnika. Sądzę że jest dobry gdyż tą cześć kodu która ma służyć do obsługi czujnika zaczerpnąłem z tego forum. Kod zamieszczam poniżej...
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 ?
No to przed diodą, dlatego podłącza się to nie tam gdzie masz cap, a tam, gdzie masz napięcie które "zaniknie" po odłączeniu zasilania... Innnymi słowy: mostek-> | -> dioda-> cap-> układ [tutaj pomiar] I podłączasz to nie na ADC tylko na int... masz w tym momencie sprzętowe przerwanie po zaniku zasilania;)
Witam, moim zdaniem z tego co opisujesz to po pierwsze widać chyba jak na dłoni, że nie wyrabia się prądowo ten 78L05. Przecież on chyba może maksymalnie 100mA !!! więc nie dziwne, że na jednym wszystko wysiada. Zamiast więc 2 78L05 daj jeden zwykły 7805 po drugie przynajmniej na schemacie nie widać (a może dałeś) żadnych kondensatorów odsprzęgająych...
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ą...
Tak na szybko, to powinieneś dorzucić do przerwania jakąś zmienną którą możnaby inkrementować i obliczyć ile takich inkrementacji jest potrzebne dla konwersji danych dla ds18b20. Potrzebujesz 750ms o ile się nie mylę, więc lepiej to dorzucić do przerwania niż stosować WAIT 1. Zlicz ilość przerwań aby Ci wyszło >750ms i daj IF'a dla odczytu DS'a. Z Wait...
Zależnie od czasu pomiaru tych wartości próbowałbym podpiąć pomiary pod funkcję obsługi przerwania z jakiegoś timera w uC. Ale jeśli realizujesz programowo obsługę np. DS18B20, to nie radziłbym jego odczytywać w funkcji obsługi przerwania. Lecz wydaje mi się, że będąc w menu nie ma potrzeby odczytywania temperatury. Jeśli dobrze rozumiem to tylko spalanie...
$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 '-- Wejscia przycisków Config Portd.2 = Input Config Portd.3 = Input ' -- podciągnięcie Set Portd.2 Set Portd.3 ' -- porty sterowania segmentami LED Config Portd = Output Config Portc.5 = Output Config Portc.4 = Output Config Portc.3 = Output Config Portc.2 = Output ' -- tranzystory Config...
Układ działa tak jak napisany kod, to znaczy (bez urazy) - bez sensu! Co niby miałoby być wyświetlone w tych 2-ch liniach na LCD ? Przestudiuj tą strone (jest to strona polska lecz w j. angielskim). Link do wersji polskiej tej strony nie jest aktywny.... Ponadto w tym tutorialu zastosowano wyświetlenie wyniku na wyświetlaczu 7-segm LED, oraz do obliczeń...
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...
Timer0 jest 8-mio bitowy a preskaler ustawiłeś na 1. Czyli 1Wire ma tylko 256 cykli. A potrzebuje kilkaset tysięcy żeby coś zdziałać z czujnikiem DS18B20. To ma działać w tle? Ładne mi tło: 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE Ja bym preskaler ustawił na 1024 i kod napisał tak*: Dim Pobierz_temp_counter As Byte...
co jaki czas chcesz odczytywać temperaturę obecnie ustawiłeś program w pętle która tylko odczytuje ds-a my potrzebujemy pętlę która ciągle będzie odświeżała wyświetlacze czyli do ... tu odświeżanie wyświetlaczy loop a odczyt co pewien czas do odczytu trzeba 1. zainicjować ds-a 2. odczekać ok 750ms 3. odczytać ds-a można to zrobić poprzez taimery lub...
Co to znaczy zachować umiar? Zrobić za pinć złotych? :) Wiesz, jak byłem nastolatkiem to także się bawiłem w ciemni fotograficznej. Co prawda wywoływało się w większości filmy czarno-białe, ale także od czasu do czasu i kolorowe. Różnie bywało z jakością, ale ogólnie używało się prostych termometrów i było dość dobrze. Myślę, że zastosowanie skalibrowanego...
Mirku jak już dajesz link reklamujący twoją stronę to chociaż podaj taki, który coś wnosi. Bo tam widzę tylko teksty typu "Bzdura", podczas gdy nie ma tam nic wartościowego dla kogoś kto twojej książki nie kupił. Nikt nie pisze, że OW nie da się zrobić bez UARTa, UART po prostu jest najprostszym rozwiązaniem w sytuacji w której intensywnie są wykorzystywane...
mirekk36 . Na razie nie wiemy jakie kolega ma długieee te transmisje danych. RAM nie jest z gumy, a powinno jeszcze starczyć na całą masę zmiennych i trzy stosy, a zwłaszcza na HWStack, który by tu mocno puchnął. Jeśli to jest ATtiny2313 to pewnie, że nie ma o czym w ogóle mówić ale jeśli już coś co ma na pokładzie z 16kB Flash'a (nawet 8kB) i 1k RAM...
Witam mam problem z chyba skonfigurowaniem przerwań w "C" do tej pory takie "zabawy" robiłem w bascomie ale tam to każdy potrafi ;) mam przerwanie int0 z pcf8583 w międzyczasie odczytuje temperaturę z ds18b20 no i .. właśnie jak uruchomiłem PWM zaczęły się problemy, układ czasami się resetuje lub zawiesza zacytuje fragmenty: dodam ze pdf czytałem wielokrotnie...
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 Bardzo prosze o pomoc w dopisaniu procedury sterujacej ds18b20. w programowaniu stawiam pierwsze kroki. Ponizej dolaczam listing programu. abo jezeli ktos by chociaz przyblizyl mi jak to wykonac? przy okazji mam tez pytanie, czy przy komunikaci 1wire musze blokowac przerwania? wiem ze na poczatku trzeba skonfigurowac magistralem 1-wire nastepnie...
Przerwań nie mogę wyłączyć, flaga jest bajtowa, albowiem inkrementując ją, aktywuję inne warunki w programie. Może coś takiego ze sprawdzaniem crc? Wtedy po prostu nie wyświetli wyniku, jak nie będzie prawidłowe... Tylko niestety nie może zdarzać się to za często. Przerwania zaś są obecnie tylko od. 1 timera... [0]. Czy ten odczyt 9 bajtów będzie trwał...
Kolego tera nie działa mi ustawianie godzin a zrobiłem to tak deklaracja:[syntax=vbnet] Declare Function Ustaw(byref Godziny As Byte , Byref Minuty As Byte , Sekundy As Byte) As Integer Declare Sub Znak(cyfra As Byte) 'deklaracja tablicy stałej do wyświetlania cyfr i znaków na wyświetlaczu 7 seg Declare Sub Czytaj 'deklaracja funkcji bez parametru do...
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...
Witam, mm sobie zegar i termometr. W programie na samym początku jest odwołanie do dwóch podprogramów: pomiar temp, oraz obliczenie godziny, a następnie powrót z tych podprogramów i wyświetlenie wszystkiego za jednym zamachem. Ale ponieważ pomiar temperatury jest na ds18b20 więc potrzebuje 750ms na pomiar, a to wpływa na wyświetlanie sekund na zegarze...
Po co te klawisze w przerwaniu sprawdzasz ? I czemu tak dużo jest w tym przerwaniu .Licz tam sobie tylko czas , a sprawdzanie klawiszy zrób w pętli głównej. Odczyt ciśnienia, temperatury i wilgotności musze zrobić z przerwami, wiec klawisz w tym czasie nie sa obsługiwane.. wilgotność mam z przerwa 1s, ds18b20 podobnie, ciśnienie raz na sek, wiec wszystko...
hmmm dowolnym przerwaniem, a jeśli ma ich być wiele np 5 albo 6 to może wykorzystać nawet przerwania PCINT Ma być ich wiele i PCINT to jedyne rozwiązanie. Tylko, czy to będzie dobrze działało? Jak by miała wyglądać procedura przerwania od PCINT? Mogę prosić jakiś kod szkieletowy? Masz tyle kanałów ile chcesz, częstotliwość spokojnie można wyciągnąć...
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...
Szanowny Panie Bo Mój timer1 jest juz zajety bo zlicza mi impulsy slimaka podajnika. Takie cusie robi się na przerwaniach zewnętrznych (INT0, INT1 dotyczy Megi8) 1. Mega 8 posiada trzy Timery, więc można wykorzystać 0, lub 2. 2. Trzaba wystrzegać się Debounce i Wait, Waitms 3. formatuje i pozycjonuje prawidlowo w zakresie -99,9C do 999,9C DS nigdy nie...
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...
Starałem się trzymać jednego "standardu". W odbiornikach też mam PCF8563 i wszędzie używam tego zapisu. Dodatkowo, zaraz po odebraniu i zdekodowaniu sygnału DCF77 ustawiam flagę i wszystkie odbiorniki wtedy jednorazowo aktualizują czas. Jak ktoś z tym zaczyna, to nie należy się denerwować, jeśli nie odbiera. Najlepszy odbiór jest 1-5 w nocy, czasem...
Przed każdą instrukcją związaną z komunikacją 1-wire musisz wyłączyć wszystkie przerwania ponieważ 1-wire będzie się rozjeżdżał i będą wychodzić głupoty. No to próbowałem to tak zrobić. Czy wystarczy samo Disable Interrupts czy każde przerwanie trzeba z osobna? Niestety dalej krzaki, często 0 stopni, rozsunąłem nawet flagi a dalej nie jest dobrze....
Jak pisał kolega (at)piotrva wystarczy użyć flagę w przerwaniu aby program był nieblokujący, więc żaden czas się nie marnuje. Osobiście odczyt zawszę robię bezpośrednio w przerwaniu dzięki czemu odpadają mi problemy z błędnym odczytem (nie rozwala mi komunikacji 1wire). Mimo niestosowania CRC nigdy nawet na długich przewodach nie mam ŻADNEGO błędnego...
Sekundę chcę wykorzystać do wykonania pomiaru z DS18B20 co trochę zajmuje To musi być dokładnie co 1000ms? DS18B20 potrzebuje 750ms na przetworzenie temp. , więc jak odczytujesz PCF'a kilka razy na sekundę to bez problemu DS "zdąży" . Jak wykrywasz zmianę sekund odpalasz DS'a i czekasz do następnej zmiany. Wtedy odczytujesz temp. i znowu odpalasz DS'a....
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...
powiem ci ze dziwne te twoje programy, nie zebym sie znal na tym jakos specjalnie, ale mnie uczono tak: w przerwanie wchodz na chwilke i jak najszybciej je opuszczaj! wedlug tej zasady wydaje mi sie bardziej racjonalne zrobienie programu tak by petla glowna programu byla uruchamiana co 1sekunde, w petli glownej rob wszystkie przeliczenie razem z pomiarem...
Źle podchodzisz do tematu. Dopóki są to jakieś tylko zabawy w budowę termometru to sobie można pozwalać na takie błędy. Kiedy jednak od pomiaru takiej temperatury ma już zależeć praca jakiegoś urządzenia to powinno się do sprawy podejść poważniej. Po pierwsze ten uC ma trzy Timery. Może mierzyć dowolne czasy. Czy na pewno jest Ci potrzebne przerwanie...
Z tego co pamietam w wersji 3 przewodowej mozesz przed odczytem temperatury sprawdzic czy konwersja zostala ukonczona jaezli nie pomijasz odczt i zajmujesz procesora czym innym (pozbywasz sie wait) i nie musisz tego robic w przerwaniu tylko zawsze przed odczytem temperatuty. Robiło sie to chyba tak ze wystarczyło wysłac "reset DS" a potem badac stan...
Wszystko to pięknie, ale zapomniałem o jednej rzeczy. Otóż teraz, kiedy testuję tą transmisję, to pokazana obsługa Timer1 nie jest wykonywana. Jak widać, w programie jest "case" i w zależności od sytuacji albo przerwanie wygląda jak w listingu (czyli z obsługą ADC), albo - i tak jest w tej chwili - przerwanie nie robi nic. Znaczy jest ; [syntax=vbnet]Timer1_vector2:...
Nie mylisz się a dokładnie powinno tak to przebiegać 1wreset 1wwrite &HCC 'reset magistrali 1wwrite &H4E 'zapis do scratchpad 'zapisuje trzy bajty do scratchpad zawsze obowiązkowo i nie można zapisu przerwać resetem 1wwrite &H00 '1bajt 1wwrite &H00 '2bajt 1wwrite &H7F '3 bajt Wait 1 1wreset ' reset 1wwrite &HCC 'skip ROM 1wwrite &H48 ' zapis do EEPROM...
...Nie wyświetla mi dziesiątych liczb. Wyświetlacz sprawny na 100% No przecież sam napisałeś w kodzie warunek , żeby nie wyświetlał dziesiątek jeśli nie są równe 0 , a dokładnie rzecz ujmując , to napisałeś , żeby wyświetlał dziesiątki , kiedy ich wartość jest równa ZERO :!: Wyswietlanie: Gosub Oblicz For A = 0 To 125 If Dziesiatki = 0 Then 'Oto...
do programowania uzywam avr-studio bo tylko on mi dziala z moja programatorka. mam ustawiony tam wewnetrzny rezonator 8mhz. cos jeszcze oprocz tego musze ustawic? i kolejny problem: #include <avr\io.h> #include <inttypes.h> #include <avr\pgmspace.h> #include <util\delay.h> #include <stdlib.h> #include <avr\iom8.h>...
Zamieszczam kod Proszę tego nie zrozumieć jako narzekanie a jako uwagi: 1. Pomiar temperatury. Funkcja jest, nie ukrywajmy tragiczna i cud że działa. Nie wolno tak pisać. Odczytujesz tylko 2 z 9 bajtów odpowiedzi czujnika. Nie sprawdzasz w ogóle: - czy czujnik w ogóle reaguje i odpowiada na komendę 1wreset - czy suma kontrolna się zgadza Kiedy czujnik...
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...
Witam, zaczynam "zabawę" z uC i programowaniem. Na pierwszy strzał chciałem zrobić prosty (tak na początku mi się wydawało) sterownik. Planowane opcje to: zegarek, termometr i obsługa 2-6 wyjść 230V. Wszystko chciałem stworzyć na atmedze8 ewentualnie 16. Założenia: - LCD na którym będą informacje prawdopodobnie będzie 4x20 - czas + ewentualnie data...
Podstawowy błąd w programie odbierającym dane to za mały bufor, dane mogą być nadpisywane. Bufor powinien mieć minimum 14 bajtów, zmienne są wysyłane w postaci łańcucha np. "-32768,-32768",$0D. Do prawidłowej pracy bufora wymagane jest globalne włączenie przerwań (Enable Interrupts). [syntax=basic4gl]Config Serialin = Buffered , Size = 28 , Bytematch...
Hmm... Spróbuj regularnie migać LED, jednocześnie komunikując się z PC, obsługując pomiar temperatury za pomocą 1wire (DS18B20) i wyświetlać ją na LCD, używając waitXX... ;) Timer0 jak nic do zastosowania... Tymczasem małe co nieco w załączniku (miganie LED z użyciem timera), zarówno dla ATmega8, jak i na ATmega8515. Ponieważ ATmega8 nie posiada przerwania...
Witam jak w temacie . Mam pewien sterownik sterujacy klimatem zbudowany na Atmega32 wyswietlanie na LCD 16*2 jednak ilosc danych wyswietlanych powoduje ze aby uzyskac potrzebne wyniki musimy czekac nawet 10sek oraz jak wiadomo widocznosc wyswietlacza LCD nie jest zadawalajaca. 1.Jeden z uzytkownikow zaproponowal podlaczenie 4 wyswietlaczy LED na ktorych...
O jeden problem z głowy. Ale przy dwóch timerach i całym programie pojawiły się dodatkowe: Mam problem ze świeceniem diody LED po przekroczeniu obrotów, mam zrobiony warunek: [syntax=vb] If obrmin2 >=3000 Then Set PORTA.5 Else Reset PORTA.5 End If[/syntax] Warunek działa zaświeca i gasi tak jak powinien, ale gdy obroty dłużej są przekroczone powinna...
Jak to usunę to jest tak samo. zamiast wait 1 sec; W przerwaniu od timera0 icrementuj zmienną np "S" i gdy ona osiągnie S=250 postaw flagę Fsec, wyzeruj zmienną S. W do....Loop If Fsec =1 , wyzeruj tą flagę i incrementuj 'Wysw'. Dalej, przenieś wszystkie rachunki i 'lookups' do petli głównej pozostawiając w subrytynie 'wyswietlanie' tylko multiplexing...
Zegarek oprócz funkcji wyświetlania czasu ma pokazywać temperaturę i mieć możliwość sterowania z pilota (RC5). Tutaj pierwsze pytanie, czy GETRC5() wprowadza jakieś opóźnienia? Mam na myśli to czy nie zakłóci to zliczania czasu. Dodatkowo obawiam się, że będzie problem z płynnym sterowaniem, a to dlatego, że nie jest podłączony pod INT0 albo INT1 http://obrazki.elektroda.pl/5338684500_1...
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...
Witam! Od kilku dni siedze i nie mogę nic wymyśleć :( Bez ogrudek - podaje źródło: $regfile = "m16def.dat" $crystal = 8000000 'definiowanie zmiennych i stałych Dim T As Integer Dim Licznik_przerwan As Byte Dim Dioda As Bit 'konfigurowanie interfejsu 1Wire Config 1wire = Portd.1 'konfiguracja wyświetlacza Config Lcdpin = Pin , Db4 = Portc.6...
Witam. Dostałem 4 sztuki ds18b20 w samplach i konstruuję termometr do szkoły. Napisałem program,udało mi się połączyć z czunikami i wyświetlić temperaturę na LCD,wszystko było ok. Oba czujniki miałem zamontowane na płytce prototypowej(mam na niej zmontowany cały układ). Po pierwszych testach przylutowałem do jednego czujnika skrętkę o długości ok 30...
Ja pozakładałem żółte tło z czarnymi literami. Pisałem soft w Bascomie i miałem wątpliwości co do kodu po kompilacji. Kompilator nie wykazywał żadnych błędów składniowych. Na początku gdy kod był jeszcze krótki w zasadzie co napisałem to działało OK za wyjątkiem przerwań zewnętrznych na końcówce INT procka. Więc zrezygnowałem z tych przerwań choć to...
Witam Wykorzystałem kod Kolegi Duch do pokazywania kierunków zmian temperatury - tzw. "strzałki" W przyszłości, proszę używać tagów SYNTAX - poprawiłem.
Jak czas transmisji danych? Wysyłasz do wszystkich DS polecenie zmierzenia temperatury (kilka/kilkanaście ms albo mniej), czekasz 750 ms i odbierasz dane ze wszystkich (kilka/kilkanaście ms albo mniej). Dokładne czasy możesz wyliczyć na podstawie szybkości transmisji i ilości przesyłanych danych. No i właśnie o wyliczenie tych dokładnych czasów tutaj...
Zamiana wyświetlaczy nic nie daje, zamieniałem nawet same kabelki łączące je z płytką i też nic. Jeśli chodzi o przerwania to mam odbiór danych z RFM12 oraz obsługę klawiatury na PCF8574. Może faktycznie coś na rzeczy z tymi przerwaniami. Wyświetlacz, który nie działa jak trzeba oprócz wyświetlania daty, godziny oraz części odebranych danych wyświetlać...
bascom przerwania ds18b20 bascom bascom ds18b20
tauron licznik dwukierunkowy pneumatyczne zawieszenia zestaw naprawczy pompa
żarówka szeregowo początkujący elektronicy
Atmel ICE: "Failed to get interface clock value" - przyczyny i rozwiązania Busch+Müller tylna lampka rowerowa nie włącza się