Ja mam to u siebie zrobione na maszynie stanów - niestety program jest napisany w ASM i a PIC'a, więc nie nadaje sie do bezpośredniego przeniesienia, ale istotny fragment mogę zamiescic: [syntax=asm] ;---------------------------------------... ; Odczyt temperatury z DS1820 - Match ROM bra uL_ResPres ; State=9 - reset/presence...
A kto ci każe używać delay? DS ma możliwość sprawdzenia czy konwersja jest już gotowa. Poza tym można do obsługi 1-wire użyć np. UART i całość zrobić w przerwaniach, zapisując odczytany wynik do jakiejś zmiennej.
Jaki masz kwarc? Przed loop daj 100ms przerwy.
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...
Czego byś nie robił odczyt nie będzie błyskawiczny, przynajmniej z gotową biblioteką do Arduino. Wg mnie wszystko co zajmuje pętlę loop na dłużej niż 1ms jest wolne, ale da się z tym żyć. Jeśli Ci blokuje na 750ms to zapewne używasz biblioteki DallasTemeprature. Można wyłączyć oczekiwanie na pomiar metodą DS18B20.setWaitForConversion(0); (po begin),...
No to tak: Jeżeli dobrze czytam program to masz 4 przyciski, timer ustawiony tak aby przerwanie od niego występowało co 50 Hz i nic poza tym. Używasz tylko przerwania od Timera - boisz się innych? Czy może to tylko nieznajomość AVR. Aż prosi się żeby przyciski działały pod INT0 / 1 - zewnętrzne przerwanie i po kłopocie. Następnie _delay_ms(750); zamienił...
[syntax=c]/* Plik "main.c" PD4,PD5,PD6,PD7 - przyłączone czujniki ds18b20 PA0-PA6 - wyswietlacz LCD */ #include <stdio.h> #include <avr/io.h> #include <util/delay.h> #include "hd4478.h" #include "ds18b2.h" #include <avr/interrupt.h> char str[20]; char inout[20]=" IN OUT "; /* Zmienna przechowuje aktualną wartość temperatury */...
Nie trzeba kupić browaru aby napić sie piwa, wykorzystanie millis() w zupełności wystarczy zamiast przerwań, kolega jest na początku drogi wiec ogarnięcie przerwań na tym etapie moze być trudne. Pozdr
Ja robiłem multipleksowanie 8 cyfr i odczyt 2 ds_ów i jedynie co to trzeba liczyc CRC bo jesli przerwanie wystąpi w chwili komunikacji z ds_em to wyswietla głupoty. Pozatym zero migania lub przerw w działaniu wyswietlacza.
Witam ! Zostałem poproszony o zamknięcie tematu, co czynię. Problem został rozwiązany poprzez porządne połączenie wszystkich czujników. W kostce połączeniowej robiło się zwarcie, albo przerwa. Pozdrawiam ! PL
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...
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.
Wszystko działa :) Jako bit kontrolny ustawiłem 0xAA zamiast 0x55 i śmiga aż miło. Poniżej działający kod odbiornika i nadajnika. Temat do zamknięcia. Nadajnik [syntax=c]/*Obliczenie prędkości transmisji*/ #define BAUD 2400 #define MYUBRR (((F_CPU / (BAUD * 16UL))) - 1) /*Dołączenie bibliotek*/ #include <stdio.h> #include <avr/io.h> #include...
Jak na mój gust to ty nie wychodzisz z obsługi przerwań. W przerwaniu masz "delayms(DS18B20_TCONV_12BIT);" (to jest pewnie 750ms...) jeżeli przerwanie się wywołuje częściej niż co 750ms (+ew czas na obsługę LCD itd.) to w praktyce procesor działa tak: 1.uruchamia się w main(); 2.... 3.Włączenie przerwania sei(); 4.Wywołanie przerwania 5.Długo trwa przerwanie......
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 wiem czy chcesz się nauczyć czy potrzebujesz program. Na początek te uwagi: 1. Nie wiem co tam robi dyrektywa $eeprom. Jest niepotrzebna w tym kodzie 2. Zmienna Ds jest zwiększana w przerwaniu niezależnie od tego czy jesteś w Menu czy nie. Tak więc po powrocie z Menu już na pewno nie zdążysz załapać się na warunek If Ds = 2 i wyzerować jej wartość....
W OW_Reset po wyslaniu RESET_PULSE (ktory zreszta powinien trwac 480us, a nie 450) za dlugo czekasz pomiedzy koncem RESET_PULSE a poczatkiem badania PRESENCE_PULSE. Kolejna rzecz - po wykryciu PRESENCE_PULSE nie dawaj stalego opoznienia tylko probkuj magistrale az wroci do "1" - oczywiscie z zabezpieczeniem przed zwarciem do "0" - zeby program sie nie...
Nie, nie, delay to porażka, wykorzystaj funkcję millis() np. tak : [syntax=c]unsigned long czas; const unsigned long przerwa = 60000; // 60 sekund void loop() { if ((unsigned long)(millis() - czas) >= przerwa) { czas = millis(); // tu pomiar temperatury i ustawienie przekaznikow } } [/syntax] To samo możesz zrobić dla wyświetlania danych na LCD, bo...
Na czas komunikacji 1wire musisz wyłączaś przerwania od timer0 (albo go zatrzymywać) bo właśnie to jest przyczyną. Sub Odczyt_temperatury(byref Konfig As Byte) 'jeśli parametr =0 odzytuje wszystkie czujniki, jeśli 1 to 'pierwszy czujnik jeśli 2 to drugi itd. Dim Odczyt(2) As Byte Local T As Integer Dim Temp As Single Local L As Byte...
Być może jestem na to za głupi i się nie nadaje. Rozumiem to tak że jeśli ustawiam pin 3 na INPUT to jest to pin wejsciowy z domyslnie zerem logicznym czyli 0V. Źle myślisz, poczytaj o funkcji pinMode. Jak podlaczylem tak jak opisalem to rozumiem to tak że czekam na zbocze rosnace i z tego względu dalem przerwanie z RISING. Dobrze ale jak poczytasz...
zrobiłem mała próbę . jak pisałem 3 przewody bialy czerwony i zielony. podczas wlaczonego sterownika odłączyłem przewód : biały - pykanie z przerwami - po ponownym połączeniu przewodu odnajduje czujnik i pokazuje odczyt zielony - sygnał alarmowy z przerwami - po ponownym połączeniu przewodu restartuje sterownik i czujnik dziala poprawnie czerwony -...
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...
przerwy wynosza ~1s czyli ok, fuse bity sa ustawione na zewnetrzny kwarc a co do napisu to wyswietla sie "Error" ... :(
dziwny problem .. AAaaa .. a czemu skoro zmniejszyłeś rozdzielczość do 9 bitów to robisz wartość / 16 ?? / czy nie trzeba by odpowiednio zmienić działki .. ?? / Masz tu moją bibliotekę dla wielu Ds-ów ( używałem 8 ) chodzi bardzo sprawnie - miałem problemy z zakłóceniami / siały mi falowniki /. Otrzymujesz tablicę z wartościami temp w dziesiątych częściach...
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...
Generalnie cały ten twój układ trzebaby przeprojektować. Jeśli blokujesz przerwania na 750ms przy wyświetlaniu multipleksowym to nie spodziewaj się dobrych efektów. Postaraj się najpierw zrozumieć jak coś działa. W tym przypadku obsługę OW musisz zrobić sprzętowo, wykorzystując np. UART, co rozwiąże problemy z zależnościami czasowymi. Przykłady multipleksowania...
Czujniki to DS18B20. Czytam je co 10s przez mills() Poza czujnikami używam Arduino do włączania światła, jeśli wcisnę button i trafię na odczyt czujnika, co wypada dość często to lag wynosi ok +- 1 s. Chciałbym aby reakcja była natychmiastowa. Działa to wszystko ale jest denerwujące.
Witam serdecznie, wspomnę, że jestem początkującym "programistą" i jest to moje 1 poważne starcie z uC. Planuje wykonać pewne urządzenie, które będzie wyświetlało temperaturę na LCD oraz przy wciśnięciu przycisku, będzie wyświetlał się losowy napis z tablicy na LCD. Niestety otrzymuję błąd przy kompilowaniu. Tytuł postu poprawiony
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.
Witam, Czy istnieje możliwość przerwania wykonywania przerwania ale nie innym przerwaniem tylko zupełnie, tak jak działa break w pętlach? Chodzi o to, że chciałem sobie zrobić takie prowizoryczne menu i jednym przyciskiem wybierałbym pozycje. W tej chwili robię to tak, że wywołuję przerwanie przyciskiem i w ciągu sekundy jeśli nacisnę jeszcze raz ten...
Polecam lekturę [url=http://www.atmel.com/images/doc2579... AVR318 application note. Opisano w nim jak zrealizować 1-wire używając interfejsu UART. Wówczas mógłbyś do obsługi 1-wire wykorzystać przerwania sprzętowe UART i nie zatrudniać do tego samego uC.
jednak tak napisałem algorytm aby dane z termometru były czytane sekwencjnie w przerwaniach Testowałem również obsługę DS18B20 w przerwaniach w ESP32 na FreeRTOS i symulowanie krótkotrwałych zaników zasilania czujnika praktycznie zawsze generuje problem 85. Niezależnie od egzemplarza czujnika, który użyłem do testów. Ale coś musi być skopane skoro...
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...
Nie to sprawdzałem. Wygląda to jakby procedury odczytu DS-a działały bo ta temperatura wyświetlana -0.1 o tym świadczy. DS jest zasilany z 3,3V i wyczytałem że przy takim zasilaniu rezystor podciągający linie DQ ma mieć około 2k i taki mam. Ale z rezystorem 4,7k też nie działało. Gdzie to wyczytałeś? Datasheet nic na ten temat nie mówi, poza "Can be...
Kasować licznik- a nie przerwania- na początek. Kasować licznik i musisz zastosować dwie flagi, inaczej nie da rady. Jedna sprawdzająca czy już możesz odczytać dane, drugie sprawdzająca czy już możesz wysłać żądanie odczytu:)
W kodzie widziałem _delay_us(2), _delay_us(15) przy obsłudze magistrali 1W bez wcześniejszego użycia cli(). Sprawdzałeś jak długo wykonują się twoje przerwania? Dotyczy to sytuacji: //wykonanie funkcji w tym miejscu powoduje błędne wyświetlenie lecz nie powoduje migania Miganie zaś (gdy wynik pomiaru ok) jest spowodowane tym, ze w przerwaniu masz _delay_us(15)...
Natychmiast, to raczej nie - DS18B20 potrzebuje czasu na przetwarzanie. Ale można tak: za każdym razem, gdy algorytm czytania z DS18B20 wymaga, żeby zaczekać, zrobić wyświetlenie 1 cyfry wyniku (przy kolejnych wywołaniach kolejne cyfry) i odczekać np. 0.01 sekundy - pewnie to wystarczy do sensownego pokazywania. I można czytać "w kółko": po zakończeniu...
Jest na to sposób podprogram odczytu umieszczasz w podprogramie odczytującej klawiature. Teraz gdzie byś nie był czy w menu czy w programie głownym czy tez gdzie indziej zawsze masz pomiar bo procesor w tym wypadku chyba jest troszkę szybszy od ciebie i zawsze czeka na twoją reakcje a nie odwrotnie, wiec moze sie zając odczytem. Z kolei odczyt nie trwa...
Witam, pracuję nad czujnikiem temperatury do silnika pewnej maszyny. Mam dwa problemy. 1. Czy istnieje sensor temperatury typu DS18B20 (1-wire) o zakresie do 200 C ? 2. Czy istnieje możliwość wyeliminowania mrugania czterech wyświetlaczy 7seg ? Jak to zrealizować w C ? Wyświetlacze gasną podczas wykonywania pomiaru temperatury przez DS18B20. Zmontowałem...
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...
(...) 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 wiem co rozumiesz przez stwierdzenie: " aby regulacja temperatury była zależna od czasu", jak i kiedy realizujesz obsługę przerwań ale błędy odczytu temperatury prawdopodobnie są wynikiem zakłócania cyklu odczytu ds-a przez przerwanie od timera. Poczytaj o zależnościach czasowych 1-wire. Jest to interfejs asynchroniczny i musisz zapewnić aby poszczególne...
Troszkę mnie nie było :) pętla główna wygląda teraz tak: while(1) { _delay_ms(1000); toggle(IO_PORT, LED1); LCD_HOME(); err_1w=W_RESET(); LCD_1(err_1w); W_SEND_BYTE(0xcc); W_SEND_BYTE(0x44); _delay_ms(1000); err_1w=W_RESET(); W_SEND_BYTE(0xcc); W_SEND_BYTE(0xbe);...
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...
Oto mój program wykorzystujący LCD w trybie 4-bitowym, śmiga jak ... Jest tam obsługa LCD i 1wire, procedurki LCD łatwo wyłowić :) // ****************************************... // Project: Obsluga układu DS18B20 // Author: Zbigniew Chrobot // Module description: pomiar temperatury z DS18B20 kwarc 4MHz // wyswietlanie na...
To chyba jakiś primaaprilisowy spóźniony żart. Cały program nadaje się do śmieci: 1. Wyświetlanie realizujemy w przerwaniu timera, każde przerwanie na jedną cyfrę (cyfry lecą w pętli) 2. wzory cyfr zapisujemy w tablicy, a nie jako 10 funkcji... To mnie przekonuje do udziału tego kodu w konkursie na najgorszy program roku 3. Od razu w przerwaniu od odświeżania...
Dołącze się do dyskusji. Ja u siebie mam sterowanie ds18B20 ustawione w przerwaniu. Dodatkowo jest to procedura obejmujaca wszystkie rozkazy sterujace pracą czujnika czyli do proceduryt podaje czego chcę od DS18b20 i właczam przerwanie potem program główny ma za zadanie sprawdzic czy procedura odczytu zostałą ukonczona a w buforze mam dane z DS18b20....
Dzięki za zainteresowanie. Odczyt temperatury następuje co 1,3s i nie wyobrażam sobie jakbym miał zwiększyć go do np 5s czy o zgrozo - 10s. To stanowczo za długa przerwa a coś czuję że tyle właśnie potrzeba. W ostateczności do przyjęcia pod warunkiem, że przyniesie efekt:( Muszę to sprawdzić. U mnie żaden z kilku uszkodzonych czujników nie śmiga już...
Nigdy w przerwaniu nie użyłem "wait" i nie użyje.
(at)Duch_, kiedyś był już tu podobny temat i tam był wsad upubliczniony jeśli dobrze pamiętam. Nie wiem czy akurat o tym samym projekcie myślimy, ale nasz forumowy Kolega (at)niveasoft coś podobnego popełnił, o W tym projekcie zastanawia mnie to: "może pracować w trybie odczytu tylko dwóch bajtów lub dziewięciu z CRC" A co jak odczytam 3 albo 5? "Nie...
Problem rozwiąże, odmierzanie czasu przez timer, a nie przez wait czy delay (nie znam BASCOMa). Jak już ktoś wspomniał odczyt i zapis bitu na 1-wire jest dość krytyczny czasowo. Miałem z tym problem w assemblerze i ADuC841. Przerwanie od multipleksowania wyświetlaczy skutecznie zakłócało transmisję. Polecam też sprawdzanie CRC, żeby ustrzec się przed...
Po około godzinie przerwy - wszystko raczej wystygło - układ działa bez błędów :) Jak narazie % błędów nie przekracza 0.00% :) Wygląda na to, że przewody się wygrzały i teraz już będzie ok :) Ps. Zamówiłem DS2482S-100+ u chińczyka. P.W.L.
Czy na pewno nie ma przerwy na magistrali 1Wire ? Ten program jest sprawdzony i należy szukać błędu w połączeniu i konfiguracji. Czy Atmega jest nowa tzn. bezpośrednio ze sklepu ?
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...
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.
Witam, potrzebuję zrobić jak najszybciej sterownik oparty na Arduino. Komponenty: DS1307, DS18b20, LCD 16x2 po I2C, enkoder i bramka SMS oparta na G510, 6 przekaźników sterowanych po i2c (PCF8574). Obsługa każdego z elementów to łatwizna. Wszystko działa. Potrzebuję kontrolować cały czas temperaturę i w momencie spadku poniżej XX włączenie przekaźnika...
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.
Ten "walec" to rezystor 0.1om. tzw. bocznik który jest potrzebny do odczytu oporności całej elektroniki, którym zajmuje się LM358. Ten element który jak mówisz mostek, to nie jest mostek. Jest to bezpiecznik 630ma. Wygląda tylko jak mały mostek. Całe zasilanie jest na 3 przewodach białych jak widać na zdjęciu. Zasilacz którego użyłem to impulsówka z...
- Wyświetlanie temperatury z 4 czujników: -wody w basenie -powierzchni dachu -zewnętrznej -wewnętrznej w domu Pamiętaj o zabezpieczeniu ESD. Najlepszy jest DS9503. Jak nie chcesz aby awaria jednego czujnika nie zablokowała wszystkich, zrób osobne magistrale. Doskonale do tego nadaje się DS2482-800. Jak nie chcesz się wykosztować, to użyj uC z odpowiednią...
Nie działa ci pierwszy sposób ponieważ deaktywujesz watchdog po watchdogu:) tzn nigdy nie dojdzie to tej linijki kodu ponieważ zawsze wcześniej się zresetuje. Daj wdt_disable() na początku programu (a napewno przed włączeniem watchdoga). Ja tak zrobiłem i działa bez problemu. A swoją drogą używałem resetu ponieważ mam dziwny proble, może tu mi ktoś...
To już trochę wygląda na voodoo Z rzeczami z tego świata zwykle sobie radzę :D Na pewno użyłeś digitalPinToInterrupt()? tak Próbowałeś na innym pinie niż D4? Przełączenie przerwania na inny pin sprawia, że nie działa ono wcale. Może lepiej przenieść ją do loop() - wtedy jest większa kontrola nad rozróżnieniem stanów włączony/wyłączony i lepiej panuje...
Witam. Jestem w fazie pisania programu z zegarem DS3231 i atmegą16. Mam podłączone wejście INT0 atmegi z wyjściem INT/SQW DS-a. Podciągnięte rezystorem 10k do 5V. I nie wiem co robię źle ale procesor nie reaguje na sygnał przerwania z DS-a. Powiem szczerze że nigdy nie korzystałem z przerwań zewnętrznych ale znów ustawienie tego nie jest skomplikowane...
Użyj ATOMIC_RESTORESTATE a nie ATOMIC_FORCEON. Dzięki temu odtwarzany jest stan znacznika I a nie bezwzględnie ustawiany. A po co? Jeśli w programie p Tak, ale jeśli kiedyś, z jakiegoś powodu, gdzieś wcześniej zablokuje przerwania, to co się stanie po użyciu ATOMIC_FORCEON? Takiego błędu mozna później długo szukać. Owszem, ATOMIC_RESTORESTATE to jeden...
Jeśli źle umieściłem temat to bardzo proszę o przeniesienie. Kod który wklejam : http://obrazki.elektroda.pl/7428430100_1...
Jak już poznałem lib do DS18B20 to przeraziłem się, gdy okazało się, że ignoruje CRC. I tak się rodzą plotki w necie, a wszystko przez brak wiedzy o bibliotece OneWire, na które bazuje biblioteka DS18B20. Ale to już jest off-topic. Co ma wspólnego lib OneWire do CRC? OneWire nie liczy CRC! Tak samo OneWire nie obsługuje bądź nie EEPROM w DS18B20! OneWire...
Mam taki o to problem. W przerwaniach Timera0 jest odczyt z DS18B20 i multipleksowanie 4 7Segmentowych wyświetlaczy. No to rzeczywiście masz gigantyczny problem ponieważ ty nie masz czegoś tam w przerwaniach Timer0 :( ..... ty CAŁY program z pętli głównej przeniosłeś do przerwania - i dziwisz się że coś dalej nie działa - że inne przerwania coś nie...
Wszystkim czujnikom chcę wydać komendę konwersji a następnie po 10 sekundach chcę odczytać wszystkie 15szt, wydać polecenie konwersji odczyt po 10s i tak w kółko. Jednak moja ATMega ma wiele innych rzeczy do roboty w głównej pętli i nie chcę aby odczyty temperatur zajmowały jej sekundę czy dwie z tych 10s. Obecnie na 15szt LM35 i wewnętrznym ADC uzyskałem...
1. Niepotrzebnie wysyłasz &H55 (Match Rom) - 1wverify robi to automatycznie Czyli w dwóch miejscach ( dla każdego czujnika ) mogę to usunąć ? 2. Po co dwa razy zczytujesz dane z każdego termometru? Połącz raz odczytane dane z zmienną 16 bit. 3. Nie wiem do czego wykorzystujesz potem zmienne, ale czy na pewno potrzebujesz przechowywać dane aż w 3 miejscach...
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...
Ok, to ja dorzucę swoje trzy grosze :) Przede wszystkim, aby procedury _delay_* działały poprawnie należy włączyć optymalizację kodu np -O1 Sprawdź może to powoduje problem. Po drugie, na czas odczytu i zapisu magistrali warto zablokować przerwania, tak żeby procedura obsługi przerwania nie rozjechała czasu poszczególnych okien. A na koniec moje procedury,...
Walcze już z tym dziadostwem n-ty wieczór i nie mam już pomysłów co tu zrobić. Przeczuwam że jest coś nie tak z odbiorem (lub transmisją) ponieważ w zmiennej do której zapisana jest temperatura jest ciągle ta sama wartość w chwili obecnej mam 159, wcześniej miałem b7,dużo różnych krzaczków i na początku -0.1. Mógłby ktoś zerknąć w timeingi z datasheeta...
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ą...
Mam zwykłą 51ke z odpalonymi praktycznie wszystkimi przerwaniami, dodałem tam 1wire i wychodzi delikatny problem. Żeby jedno z drugim się nie gryzło na czas wysyłania lub odbierania bitu wyłączam przerwania. Pomiędzy odbieranymi/wysyłanymi bitami przerwania są włączone po to aby procesor mógł wrócić do ważniejszych zajęć. Nota DS18b20 mówi że czas pomiędzy...
Mój pierwszy post więc zacznę od "dzień dobry wszystkim". Od paru dni bawię się atmegą. Zrobiłem sobie termometr na 18B20. Ponieważ właśnie spaliłem kontroler wyświetlacza podpinając go przypadkowo bezpośrednio do zasilacza(sic, czas ogarnąć kabelki, bo wstyd) to mam czas zapytać jak poprawić wskazania termometru. Po pierwszym podłączeniu wskazywał...
Witam, Zwracam się z prośbą o pomoc przy moim projekcie. Tematem projektu jest obsługa termometru DS18B20 poprzez interfejs USART pracujący w trybie half duplex z przerwaniami i buforem kołowym. Wyszukiwanie urządzeń na magistrali 1-Wire, odczyt co zadany interwał pomiarowy podawany w milisekundach. Wiem mniej więcej, jak obsługiwać ten termometr poprzez...
Sugerowałem się zdaniem: O trybie overdrive nie marzę, wystarczy standardowa prędkość. Robię między innymi emulator DS2431. I co mam napisać, że zgodność 50%? Ze działa ale bez overdrive? To jak zaemulować DS18B20 bez wewnętrznej pamięci eeprom lub możliwości odczytu sposobu zasilania. DS2431 jest pamięcią eeprom, ale można włączyć tryby, które są...
Witam Śmiem zapytać co to za zapis: 1wwrite &HCC , 1 , Pind , 2 ? No raczej wszystkie linie związane z odczytem i zapisem do DS'a są krótko mówiąc zje****. Pozdro Moze i tak, nie twierdze ze jestem orlem, daleki jestem nawet od powiedzenia ze 'umiem' ;) Podlaczone mam 2 czujniki (na d.2 i d.3) i w ten sposob odwoluje sie do kazdego z nich. narazie...
Witam, wiem, ze postów na temat tych układów jest masa, ale nie udało mi sie znaleźć rozwiązania. Problem: Zbudowałem układ, który ma pełnić rolę sterownika akwarium, wyposażony w rtc i czujnik ds18b20. Zaprogramowałem odczyt temperatury i czasu(sprzętowe TWI) oraz obsługę wyświetlacza. Aktualnie podczas pracy układu co 3 sekunda wyświetlana na wyświetlaczu...
Here is the project code: [syntax=vbnet]' Gupik ' V.2 ' ' by KUUCZOO ' All rights reserved... ' ' Sterownik akwariowy z zegarem RTC (DS1307) i termometrem cyfrowym (DS18B20) ' Sterowanie : ' - grzalka (temperatura 1) ' - wentylator chlodzacy (temperatura 2) ' - oswietlenie dzienne (od T1on do T1off, gdzie off>on) ' - oswietlenie nocne (od T2on do...
Ok, a teraz jeszcze jedna sprawa: Zmodyfikowałem trochę program by wyświetlał na multipleksowanych wyświetlaczach LED 4x7 odebraną komendę. Jak zwykle trochę chodzi, ale nie do końca - założenie jest takie: odbiera komendę z rc5 i wyświetla ją na led, efekt jaki uzyskuję: odbiera komendę, wyświetla na ułamek sekundy, potem wyświetla 95, czasem się zdarzy,...
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),...
Jak ma być szybko, to nie zasilaj termometrów pasożytniczo. Wtedy konwersje możesz uruchomić we wszystkich jednocześnie: RESET SKIP ROM POMIAR a odczytywać sekwencyjnie: RESET MATCH ROM 1 odczyt 1 RESET MATCH ROM 2 odczyt 2 .itd Jak "bardzo" silnie podciągniesz magistralę, to możesz zasilać także pasożytniczo. Natomiast sekwencja: RESET MATCH ROM 1...
Jeśli używasz jakiegoś przerwania wyłącz je na czas transmisji danych pomiędzy uC a Dallasem.
Nic nie miga. Nie miga, bo pewnie wydajesz komendę pomiaru temperatury, czekasz na koniec konwersji co trawa nawet 0,7 sekundy, to samo dla drugiego termometru, więc "już" po 1,4 sekundy odświeżasz LCD. Masz w programie obsługę klawiatury, UART czy innych peryferii? Jeśli tak, to czy nie ma opóźnionej reakcji na zdarzenia? Program powinien działać...
Teraz widzę że chyba za mało wiem o przerwaniach zawsze wydawało mi się że przerwanie to sleep które całkowicie blokuje mikrokontroler na ten czas, biorę się do czytania. Czyli w takim razie można sterować grupowo poprzez PWM? czyli PWM z mikrokontrolera idzie do MOC3021 a ten podaje tą (lub taką z którą sie wyrabia) częstotliwość do BT138 a ten z kolei...
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 Wiadomo, że trzeba przygotować dane dla wyświetlacza i zmusić DSa do odczytu. Z DSem jest tak, że układ potrzebuje niecałej sekundy (0.7-0.8s), żeby przetworzyć temperaturę na postać cyfrową. Jednak sam odczyt z układu trwa znacznie krócej. W związku z tym proponuję w obsłudze przerwania wyświetlaczy (na początku) wysłać komendę do DSa aby zaczął...
Mogę naprowadzić: zapominasz o kodzie, który widziałeś, a który korzysta z delay() i robisz wszystko od nowa na przerwaniach. Problem w tym, że przerwanie związane z obsługą DS18B20 powinno wywłaszczać przerwanie wyświetlacza, co na ATmega w zasadzie jest niemożliwe. W związku z tym wypada rozejrzeć się za obsługą DSa przy użyciu UARTa, co daje pewne...
Już któreś z kolei podejście do tematu jednak dalej brak rozwiązania Problem wygląda tak: Potrzebuję termometr na dwóch DS 18B20 Na razie zaprzęgłem jeden i w pętli co kilka sekund (czyli co kilka pomiarów) wyświetla mi 0,0 st C lub inną absttrakcyjną wartość np 95,5 przez jeden pomiar. Próbowałem różnych rozwiązań na chwile obecną program wygląda mniej...
W sumie z przerwaniami nic nie robiłem, nie wiem czy mają być włączone czy nie? Korzystałem z gotowego przykładu z CodeVision. A z jakim zegarem mam testować ten czujnik 4 czy 8Mhz? Zaraz się zabieram za odpalenie tego programu. Dodano po 51 Brakuje deklaracji zmiennych TEMP_RESTART, enkoder switch(enkoder) { case 0x0A: temperatura_zadana=TEMP_m100;...
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...
excray tak jak mówiłem, problem nie leżał w kodzie, czy schemacie. Czujnik reaguje tylko gdy częstotliwość taktowania jest 1000000, przy 8000000 nic nie mierzy(tak jest u mnie). Procek musiałem ustawić na Atmega16a i wtedy zmienić obsługę przerwania z SIGNAL(SIG_INTERRUPT0) na ISR(INT0_vect) i wszystko działa. Temat do zamknięcia.
http://obrazki.elektroda.pl/7995180000_1... Witam! Jakiś czas temu rozpocząłem naukę pisania programów na mikrokontrolery AVR w języku C++. Przeczytałem wiele tutoriali, poradników, itp., aż w końcu doszedłem do pisania własnych, prostych programów. Po kilku takich „pseudoprogramach” zdecydowałem, że teraz czas napisać coś...
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
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...
$crystal = 4000000 'deklaracja częstotliwości pracy kwarcu $regfile "attiny2313.dat" 'model procesora dla którego jest ten program Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32 ' definicja znaki stopnia Config 1wire = Portd.5 ' konfiguracja portu PD.5 jako wejścia magistrali 1-wire Dim Odczyt(2) As Byte , A As Byte , Licznik...
http://obrazki.elektroda.net/40_12347177... Jako miłośnikowi Jedynego Słusznego Systemu Operacyjnego nie dawało mi spokoju, że dla Windowsa jest Lampomittari http://www.elektroniikka.org/thermometer... a pod Linuksem pozostaje digitemp. Mając więc kilka dni wolnego i chęć poznania Gtk napisałem programik, który wizualizuje dane...
Głównie chodziło mi o sposób wysyłania poleceń 1 wire: Disable Int0 'wyłączenie przeszkadzającego przerwania 1wreset 1wwrite &HCC 1wwrite &H44 Capture = 1 Enable Int0 'załączenie przerwania po wszystkim Jeśli nie wiesz, które przerwanie może powodować u Ciebie problemy z 1 wire to możesz wyłączyć globalną obsługę przerwań. Czas po rozkazie odczytu temperatury...
hmm... a może samo sterowanie fazowe masz spierniczone i tu jest pies pogrzebany ? Problem jest banalny, w kodzie, którego analiza to katorga (dlatego nie zagłębiam się) ma 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...
Udało mi się znaleźć obsługę 1-wire w kursie EP dla '51 (wiec myślę, że do '52 też się nada, bo podobna struktura uC). Jednak największą trudność sprawiają mi opóźnienia, a dokładniej ich tworzenie. Chciałbym skorzystać z wewn. timera, ale nie wiem jak. Szukałem, ale nie znalazłem tego w języku C. Oczywiście są książki i zaczynam myśleć nad kupnem jakiejś...
ds18b20 odczyt odczyt klawiatura przerwa ds18b20 błąd odczyt
tuleja głowicy seicento klema kolektor toyota corolla
odzyskiwanie danych dysku odzyskiwanie danych dysku
Kolory kabli do czujnika poziomu wody w pralce Beko Pro Smart Kolory kabli do czujnika poziomu wody w pralce Beko EA810B70/70M