Procedura jest trochę rozkopana, jednak przerwaniami wyłączonymi na odczyt całego bajtu działa bezbłędnie. ;***************************************... W_READ: MOV R0, #8 CR:CLR EA NOP NOP NOP NOP CLR WIRE NOP NOP NOP NOP NOP NOP SETB WIRE MOV W1, #1 MOV W2, #5 LCALL WAIT_1W;ZWLOKA 5US MOV C, WIRE RRC A MOV W1,...
Mcucr = Mcucr Or 2 W helpie wyczytałem że procesory serii Mega mają przerwanie INT0 tylko na niski poziom i wykonują się w kółko jak poziom jest niski. Z drugiej strony ATmega8 Bascom tolerował, ATmega32 już nie. Dokumentacja mnie wprowadziła w błąd. Omawiając przerwania jest odesłanie do strony z opcjami uśpienia, a powinno być dużo dalej do zegara...
ooo właśnie albo jak mówi kolega atom1477 --- bo ja już dawno w Bascomie bawiłem się 1Wire - być może nawet samemu trzeba wyłączać przerwania na czas wysyłania poleceń - jak pokazał kolega powyżej w przykładzie - więc tym bardziej można osiągnąć twój cel na kilka różnych sposobów
witam. Po pierwsze podczas "gadania" z DSem wyłącz przerwania (na czas konwersji temperatury znów je włacz oczywiście), nie możesz bowiem transmisji 1wire zakłucać przerwaniami, w reszcie działania programu przerwania zostaw włączone, po drugie zatrzymania przerwań moą mieć wpływ na pracę zegara....będzie się późnić. A może by tak odczytywać DSa co...
No to trzeba je oprogramować tak, aby nie bruździło... czas obsługi przerwania ok. 1-2 µs (przez wstawkę asemblerową) chyba nie zrobi na transmisji 1Wire większego wrażenia ? Przy 8 MHz mamy do dyspozycji 8 cykli zegarowych w czasie 1 µs, a przy 16MHz - 16 cykli zegarowych. reti zajmuje 4 cykle, cbi / sbi po 2 cykle, ewentualne nop pomiędzy...
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
Przetestuj ten. Tak go poopisywałem, że aż mi się nie podoba :D [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 '# wyświetlacz Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cls '# timer ' 8000000Hz(8MHz)/256(Prescaler)=...
Z dwoma bajtami uC i Dallas w 5ms wyrobią się spokojnie. Problemem jest brak synchronizacji pomiędzy przerwaniami generowanymi przez Timer a funkcją Waitms. Ponieważ przerwanie występuje teraz co 5ms to można w nim ustawić flagę że własnie się zakończyło. Wtedy w pętli głównej możesz sobie spokojnie liczyć te flagi. 50x 5ms = 250ms co bardzo tu pasuje....
Kolega Mad Jaro mierzy czas pomiedzy INT-em i przelicza na obroty. zablokowanie INT spowoduje pływanie obrotów( INT nie liczy impulsow). Kolega xury ma rację odnośnie jednokrotnego użycia szukania czujników. A poza tym zsynchronizuj odczyt 1wire z przerwaniem INT tzn. komunikację z 1wire podziel na max -5 bajtowe odcinki i wykonuj je po przerwaniu INT....
A spróbuj tak: [syntax=basic4gl] ' Fuse bity ustawione fabrycznie $regfile = "m8def.dat" $crystal = 1000000 Config Portb = Output 'sterowanie segmentów LED Config Portd = Output 'sterowanie segmentów LED Config 1wire = Portc.5 Anoda1 Alias Portc.1 ' Lewy wyświetlacz Anoda2 Alias Portc.2 Anoda3 Alias Portc.3 Dim Nr_wysw As Byte Dim Liczba As Long Dim...
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ł...
$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...
Może nie umie wstawiać? $regfile = "m88def.dat" $crystal = 1000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4 Config Portd = &B00001111 'portd 0 1 2 3 jako wyjscia portd 4 jako 1wire 5 6 7 jako wejscia Portd.5 = 1 Portd.6 = 1 Portd.7 = 1 Portd.3 =...
Ten program jest taki, że nie wiadomo od czego zacząć poprawiać. Najlepiej byłoby go napisać od nowa :D Niemniej poprawiłem to co ewidentnie musiało być poprawione. Tak na marginesie to nie wiem co za magik wymyślił te ponowne włączanie przerwań w obsłudze przerwania po to tylko by odebrać kod RC5 w przerwaniu. Ludzie to małpują i kłopoty gotowe. Sprawdź...
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. Od paru dni pracuje nad swoim projektem komputerka do samochodu na ATMEGA8. W założeniu będzie miał funkcje: - pomiar temperatury wewnętrznej i zewnętrznej - pomiar napięcia w instalacji samochodu - pomiar poziomu paliwa w baku - pomiar ilości spalonego paliwa - ostrzeżenie o nie zapalonych światłach przy odpalonym silniku. - migająca sygnalizacja...
http://obrazki.elektroda.pl/2126980700_1... System monitorowania środowiska, oparty o interfejs LoRa IoT składa się z stacji bazowej zbudowanej z wykorzystaniem modułu Arduino Mega z bramką LoRa oraz zdalnych stacji opartych na Arduino Feather, które łączą się z stacją bazową poprzez radiowy interfejs LoRa. System pozwala na monitorowanie...
http://obrazki.elektroda.pl/9785417500_1... Witam wszystkich Przyszedł czas aby wykorzystać przedstawiony przeze mnie w http://obrazki.elektroda.pl/6714514800_1... Sygnał start i stop jak widać na schemacie przechodzi przez tranzystor Q1 i Q2, bramki Schmitt’a i podawany jest na wejścia INT0 i INT1 procesora. Diody...
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.
Wpadł mi w ręce uszkodzony tuner TV-Sat Echostar DSB-717 i postanowiłem jakoś go wykorzystać. A właściwie nie cały, tylko płytkę z wyświetlaczami i mikrokontrolerem ATTiny2313. Układ mierzy temperaturę w 6 punktach z wykorzystaniem czujników Dallas DS18B20 przy rozdzielaczu co na podłogówkę i grzejniki. Mierzę temperatury: - zasilania i powrotu z podłogówki...
(...) 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...
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...
z kopiowałem Do.....Loop i temperatura działa ale mruganie nie ustało . Kolega LChucki ma racje ale wcześniej nie zagłębiałem się szczegółowo w 1wire i nie spodziewałem się ze będą kłopoty. Wcześniej robiłem sterowniki temperatur na zasadzie zał/wył grzałkę i to działa do dziś. Próbowałem wcześniej procedurę odczytu 1wire władować do przerwania (przejścia...
Do obsługi 1wire potrzebuję korzystać z przerwania na PC0. Do 1-Wire używa się UART chyba, że problem rozwiązujesz po Arduinowemu.
Wyłącz przerwania na czas transmisji 1wire
Witam, Przy budowie układu opartego o µP ATMega32 mam pewną niedogodność, która powstaje z niewiadomych przyczyn albo z mojej niewiedzy. Mianowicie do µP mam podłączony czujnik DS1820 poprzez magistralę 1W. Temperatura odczytuje się w pętli głównej programu co 10 sekund. Natomiast wyświetlana jest na dwóch wyświetlaczach 7seg Sterowanych...
Znaczy i to i to. Po pierwsze na czas samego wysyłania komendy interfejsem 1wire należy zablokować przerwania (bo po co prosić się samemu o błędne pomiary), a kontrola sumy CRC jest obowiązkowa tak czy inaczej, bo ona pozwoli nam wyeliminować błędy związane m. in. z zakłóceniami.
Bardzo dobrym rozwiązaniem będzie jeśli kod do obsługi wyświetlacza umieścisz w przerwaniu od jakiegoś timera do { . tu w pętli głównej obsługa magistrali 1wire . } loop czas: { . tu obsługa przerwania licznika . } masz uniezależnienie od instrukcji wait mozesz naprzykład ustalić częstotliwość przerwań licznika co 1ms
1. warto użyć przerwań chociażby dla obsługi RC5 2. do obsługi 1wire nie potrzeba wykorzystywać przerwań choć można 3. Jeśli do tego będziesz miał jakiś wyświetlacz multipleksowany LED to bez przerwań się nie obejdzie 4. Jeśli użyjesz wyświetlacza LCD to do jego obsługi przerwania nie są potrzebne - tak więc procek w rękę, rzut oka na niektóre przykłady...
na wbudowanych timerach może być problem bo na czas odczytu temperatury z 1wire nie mogą się właczyć żadne przerwania
Widzę, że 1Wire i przerwania to zawsze dobry temat na dyskusje :) Dlatego wrzucam drugą wersję programu termometru z obsługą 4 wyświetlaczy bez wyłączania przerwań. Obsługa czujnika odbywa się w przerwaniu. A reszta operacji już w pętli głównej, tak by jak najmniej działo się w przerwaniu. W pierwszym zgłoszonym przerwaniu do czujnika zostaje wysłana...
Właśnie... Jest jeszcze motyw taki, że PIN, którym podłączam się do 1Wire to INT0, przerwania na oba zbocza. Zbocze opadające zeruje timerek a zbocze narastające sprawdza ile upłynęło czasu (ile trwał impuls). Jeśli czas trwania impulsu oznacza RESET PULSE od mastera, zaczyna się cała obsługa w moim SLAVE. W nocie katalogowej jest napisane, że jeśli...
to rozwiązanie z czasami, rozumiem. U mnie raczej żadne przerwanie nie wcinało się podczas 1wread, ponieważ korzystam tylko z przerwania t2 generowanego raz na sekundę i na początku przerwania wykonuję 1wread potem zapuszczam kolejną konwersję i wracam w kolejnym przerwaniu po sekundzie.
Witam. Bardzo przepraszam jesli ten post jest w zlym dziale. Jednak za diabla nie widzialem gdzie moje pytanie bedzie pasowac... Mam dosc dziwny (dla mnie) problem. Mianowicie kabel idacy od komputera do czujnikow 1wire przechodzi obok/lezy na/placze sie z kablami zasilajacymi 5 swietlowek (1x24W, 3x24Wi i 1x8W). A raczej (aby byc dokladniejszym) zasilajacym...
Hej pokaż co masz w "d_led.c" i tak z ciekawości wyłącz przerwania przed czujniki_cnt = search_sensors(); w while.
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...
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...
Bo już głupieję- dość szybko. No nie dziwię się, ja też bym zgłupiał ;) poważnie.... Tak sobie poczytałem cały ten wątek i aż mi ciarki po plecach przeszły od tej niby-wojny ;) tymczasem wyszedł z tego bełkot dla kogoś kto zaczyna naukę C. (tzn proszę mnie źle nie zrozumieć, nie chcę nikomu dogadywać) Pytanie wpierwszym poście było proste aczkolwiek...
ok ale dla mnie cala funkcja do odczytu 1wire jest krytyczna wlasciwie. nie wylacze przed nia przerwania a wlacze po niej bo na wyswietlaczu bede mial to samo jak w przypadku kiedy funkcje wrzucam bezposrednio do przerwania. wedlug symulatora funkcja wykonuje sie 150 ms.
W AVRach nie da sie, priorytety sa ustawione na sztywno, ale uwzglednia sie je tylko wtedy, kiedy przerwania maja zostac wywolane w tym samym czasie. Dlatego sama obsluga musi byc jak najkrotsza.
Z 1-wire trzeba trochę poeksperymentować, ale z reguły szybko się udaje. Bawiłem się z tym na różnych rodzinach mikrokontrolerów i przeszkadzały różne niedopatrzenia (najczęściej czasy), ale ostatecznie wszystko ruszało. Czy może nie masz zbyt małego czasu przed odczytem linii danych w funkcji odczytu bitu uint8_t _1WireReadSlot(void) ? Specyfikacja...
ad.1 - rozumiem, że nie używasz JTAG'a ale właśnie trzeba zwrócić uwagę, które Piny procka są że tak powiem "nieczynne" dla ciebie jeśli jest on załączony. Więc jeśli chce się z nich korzystać jako ze zwykłych portów I/O to oczywiście trza wyłączyć tego fusebita 2. to że działa ci magistrala na porcie C przy włączonym JTAG może wcale nie być dziwne...
[youtube]https://www.youtube.com/watch?v...
Mam problrm z zapisem i odczytem danych do DS18B20. Program wykrywa czujnik jednak po podaniu komend do pomiaru temperatury a następnie odczytaniu danych z DS w zmiennych temp1 i temp2 są same jedynki. W tej postaci na wyświetlaczu mam "Ok11111111" Kod programu: [syntax=c]#define F_CPU 1000000 /* 1MHz zegar procesora */ #define CYCLES_PER_US ((F_CPU+500000)/1000000)...
Witam Szanownych Kolegów. Tworzę właśnie sobie hobbystycznie driver do urządzenia 1wire (popularny termometr). Napisałem kod na AVR i odpaliłem podłączając na magistralę narazie tylko jeden czujnik. Po resecie otrzymuję presence pulse jak jest podłączony i nie otrzymuję nic jak nie jest podłączony zatem zachowanie ok. Następnie wysyłam komendę SEARCH...
Witaj. ale......jak dodaje odczyt zegara to nie odczytuje go :( No to musisz nad tym popracować. Czy w przerwaniu chcesz umieścić cały program?? Tak się nie robi. No i po drugie. Przy odczycie temperatury robisz Waitms 750. Mało miałem do czynienia z 1Wire i nie pamiętam, czy opóźnienie musi być 750ms, czy może być np. 1000ms. Jeśli tak, to aż się prosi,...
-onwire.h zmieniłem tylko pin, do którego odpowiada za linie 1Wire, czasami zostawiałem to nie zmieniane i tak jak tam piszę podłączałem odpowiedni pin. -Naturalnie, kwarc wsadzony 11059200 -Tak -Zgadza się -W instrukcji pisało, że zworki bodajże mają być włożone, aby zadziałał zewnętrzny kwarc -Sprawdzać nie sprawdzałem. -Ominąłem całkowicie gniazdko...
Nie bardzo pojmuję , Twoją strategię :( void wait480us(void) {TIMSK |= _BV(0); unsigned char zt1; unsigned char zt; for (zt=15;zt>0;zt--) {for(zt1=20;zt1!=0;zt1--) asm("NOP");} TIMSK &= ~_BV(0);} //Po co blokujesz przerwania T0 ????? void wait415us (void) {TIMSK...
Witam! Mam takowy problem. Pisze sobie program zegarka polaczonego z termometrem oraz wspolpracujacym z komputerkiem (uklad posiada RS oraz kilka wejsc wyjsc). Same zczytywanie z DS'a nie jest dla mnie problemem - jezeli program jest wielka petla typu: Do Gosub 1wire Gosub I2c_read Gosub Lcd_wys Loop to wszystko dziala. Jednak chciałem zrobić to na...
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...
Witam. Zdefiniowane są sekwencje zerowania, nadawania i odbierania danych. Określono w nich jak długo powinny trwać, jakie impulsy po sobie następują oraz jak długo mają trwać. Ja mam pytanie a może kilka. Po sekwencji zerowania oraz pomiędzy przesyłaniem kolejnych bitów oraz bajtów danych jakie mogą być przerwy czasowe? Znalazłem określenie szczeliny...
Witam, Nabyłem moduł MMega01 firmy http://www.propox.pl/index.phtml?lang=pl Problem polega na braku komunikacji z urządzeniami 1wire... Probowałem podłączyć termometr DS18b20(nie jeden - myślałem że ten co mam jest uszkodzony) i nic... taktowanie procka to ok 16MHz. Jako rezystor podciągający na magistrali 1wire daje 2,2k np w ATmega32 zawsze wystarczało....
Hej! Cześć mam fajny problem z magistralą 1Wire, otóż chce podłączyc do jendej lini termometr DS18B20 oraz czytnik pastylek DS1990A i zaczynają się dziać cuda-> nie działa. Gdy łącze osobno wszystko gra tylko dwa na raz nie chce zadziałać. Pomocy Pzdr
A wiec mam problem z tym czujnikiem ;( W ukladzie mam dwa czujniki - 1 polutowany na plytce plytce obok AVR-a, natomiast drugi na przewodzie ekranowanym o dlugosci ok. 3 m (oba podpiete do osobnych nozek procka, zasilane w "normalny" sposob - 3 przewody). Z czujnikiem 1 wszystko jest ok, natomiast 2 wariuje gdy temp. spadnie ponizej ok. 26 stopni C....
Rozumiem. A teraz mam małą zagwozdkę: 1. Wysyłam żądanie konwersji. 2. Startuje timer1 generując przerwanie co ok. 2 sekundy. 3. Skok do obsługi przerwania, a w niej żadanie odczytu 1wire i pobranie dwóch bajtów danych. 4. Powrót do programu głównego. 5. W programie dokonuję niezbędnych przeliczeń i operacji na zmiennych. Dobrze kombinuję, czy nie bardzo?...
Zrobienie OW na USARCIE moim zdaniem jest prostsze i bardziej efektywnie niż pajacowanie z delayami i ustawieniami portów, tym bardziej, że schemat takiego połączenia jest bardzo prosty i wszystko sprowadza do wysłania/odbierania pojedynczych bajtów z USARTu, co jest dobrze opisane na stronie MAXIMa A mi się wydaje, że pajacowaniem jest twierdzenie,...
Może trzeba coś samemu skrobnąć i wtedy użyć symulatora a później analizatora stanów logicznych bo podstawową prędkość 1Wire to "z palcem w uchu" :D Przecież pisałem o overdrive. W trybie master problem prędkości przerwań itp rozwiązuje sprzęt (UART, SPI, DS2480, DST2482) ale zrobiłem też obsługę overdrive bez użycia sprzętu i przerwania zawieszam...
A jak chcesz to obliczyć :?: Znając numer rozkazu i czasy logicznej "1" i "0" można ten czas obliczyć choć przyznam, że to nie jest poprawne rozwiązanie. Zły pomysł ;) Poczytaj sobie specyfikację magistrali 1wire i zastanów się , kto w układzie czytnik-mikrokontroler udający DS1990 jest master , a kto slave. Piotrek Masz rację, to sterownik inicjuje...
czujnik 1wire esp8266 1wire atmega8 1wire
wyciszy domofon playstation czekaj komutatorowy schemat
interfejs lexia interfejs lexia
Podłączenie anteny do płyty Cap2 v1.0 - instrukcje Jak podłączyć tuner DVB-T do komputera - poradnik