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....
Tylko jeżeli będziesz wyłączał przerwania na czas obsługi 1Wire, to zliczanie czasu w przerwaniu będzie zaburzone jeżeli nie zastosowałeś trybu CTC Timera tylko zwykłe przeładowywanie Timera w przerwaniu (dokładnie to będzie się troszkę późniło).
No tu już nie mogę zdzierżyć :wink: Chcesz korzystać z przerwań od 2 timerów i dziwisz się ,że wchodzą w paradę transmisji 1wire.Te timery to będą nawet sobie wchodzić w paradę , jeśli ich praca nie będzie jakoś zsynchronizowana.Trzeba poprostu "widzieć" oczami wyobraźni pracę programu i tak go skonstruować by działał prawidłowo , lub potrafił się skorygować...
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,...
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.
Nie musisz czekać. Musisz zacząć trochę inaczej myśleć niż "linijka po linijce"... Dokładnie i nie jest to wcale takie proste :cry: Inaczej będzie to wyglądać dla prostego 'termometru', a zdecydowanie inaczej jeśli 'w tle' pracuje kilka przerwań, które rozwalą komunikację na 1wire na amen. Zerknij co kiedyś wykoncypowałem :D , żeby przerwanie obsługujące...
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...
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...
Wyłącz przerwania na czas transmisji 1wire
Witam, Aaaaaa ten chwyt już przerabiałem, ale chyba nie do końca w ten sposób jak kolega opisał. Mianowicie robiłem odczyt DS'a w przerwaniu, ale z oczekiwaniem 750ms na konwersję temperatury, w tym momencie wychodziła już totalna kaszana. Muszę zatem spróbować zrobić samą procedurę obsługi 1Wire w przerwaniu. Spróbuję w przerwaniu obsługi wyświetlaczy...
Tak przerwania mogą zakłócać komunikację 1wire. Na czas komunikacji z DSem blokuj przerwania.
a czy da rade w bascomie stworzyć procedurę obsługi 1Wire tak by nie kolidowała z przerwaniami np.coś w rodzaju wstawki ASEMBLERA
Witaj, Jak się domyślam problem z komunikacją 1Wire. Sprawdź czy w stosunku do częstotliwości z jaką taktowany jest Twój procesor dobrze są dobrane parametry czasowe transmisji. W 1Wire jest zdefiniowanych kilka okienek czasowych - czy są dobrze odliczane? Gdy uruchamiasz transmisję wyłącz przerwania. Pzdr. asd
Do obsługi 1wire potrzebuję korzystać z przerwania na PC0. Do 1-Wire używa się UART chyba, że problem rozwiązujesz po Arduinowemu.
Z chęcią poczytałem prawie cały temat i także uważam, że warto abyś go nie zamykał. Ja jak zwykle idę w kierunku oszczędzania źródła zasilania (w większości przypadków baterii litowej), więc podejście Mirekk36 jest akurat w kontraście do mojego przypadku (w zakresie przerwań): ...Ale nie potrzeba zaraz wszystkiego co się da opierać o przerwania, czyli...
No to mamy winowajcę. Robienie czegokolwiek długotrwałego w przerwaniu to chory pomysł, ale problem polega na tym, że procedury obsługi LCD nie blokują przerwań na czas wykonywania operacji na LCD - dołóż blokowanie i odblokowanie przerwań na prymitywach LCD i zadziała (jako proteza). żeby zadziałało dobrze - przenieś obsługę 1Wire do pętli głównej.
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.
Wyłącz przerwania tuż przed komunikacją 1wire. Po odczytaniu temperatury włącze je ponownie. Takie działanie niestety może zaburzyć inne rzeczy, zależy co robisz w przerwaniach.
Nie jestem pewny czy procesor zdąży wykonać to co masz w tym przerwaniu , zanim przyjdzie następne (mam na myśli wszystko ).Program w przerwaniu ma być krótki , chyba że pierwsza linijka jest taka " Disable timer0 " , ale w twoim programie taka instrukcja raczej odpada. I jeszcze jedno , co się dzieje jeżeli podczas transmisji po i2c lub 1Wire przyjdzie...
Nie mogę tego zrobić przerwaniu z OC1A, bo bruździ mi to w trasmisji 1wire. Zgrywam ją z przerwanie INT0 i to wystarczy. PL
Przyczyną problemów była funkcja odbierania danych 1wire. Zabrakło wyłączenia przerwań. Spowodowało to problem z działaniem softwarowego PWM ale to jakoś obejdę :D Pozostaje jeszcze problem piszczenia cewki i tego chyba nie zwalczę. Może uda mi się dobrać jakiś klosz. Trochę powinien stłumić piszczenie.
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...
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
To że można go obsługiwać z przerwaniami nie oznacza że jest obsługiwane z przerwaniami. Proponuję zerknąć do biblioteki MMC.LIB. Dodano po 2 Może być: Dim Pixel_buffer(2) As Byte At K Overlay Liczba "2" nic nie zmienia.
Witaj, Jeżeli otrzymujesz odpowiedź z układu typu 255 czyli 0xFF to oznacza że masz błędnie napisane procedury niskopoziomowe prawdopodobnie czasówki. Na początek sprawdź czy przypadkiem nie masz ustawionego zegara zbyt niskiego 1[MHz] wewnętrznego. Aby funkcje opóźniające biblioteczne chodziły prawidłowo potrzebne jest z 4[MHz] a dobrze jest 8 [MHz]....
Aaaale... Czy generowanie tego przebiegu ma być jedynym zadaniem twojego mikrokontrolera? Jeśli w pętli głównej będziesz chociażby odczytywać czujnik 1wire lub mocno utylizujesz przerwania, błąd nie będzie rzędu 10% (220Hz zamiast 200Hz), tylko rzędu 50%, a może i nawet 100%. Tego nie wie nikt, i nie ma takiej mocy żeby to policzyć... Co tu dużo tłumaczyć?...
na wbudowanych timerach może być problem bo na czas odczytu temperatury z 1wire nie mogą się właczyć żadne przerwania
Jeśli musisz używać Timer'y i korzystać z generowanych przez nie przerwań, to musisz je tak skonfigurować aby przerwania nie pojawiały się w czasie transmisji na linii 1wire. Być może ktoś zna jakieś "sztuczki" aby przerwanie nie zakłóciło transmisji na 1wire bo ja niestety jeszcze do tego nie doszedłem :( pozdrawiam
Cały bajer polega na tym, żeby tuż przed obsługą 1-wire zaczekać na obsłużenie przerwania, po czym mamy wystarczająco sporo czasu aby dokonać odczytu lub zapisu jednego bitu. Przed operacją na kolejnym bicie znowu czekamy na kolejne przerwanie, i tak w kółko aż odczytamy (lub zapiszemy) cały bajt. W baskomie faktycznie to może być mały problem, chyba...
Witam i dzięki za odpowiedź! Moje podejście do sterowania triaka wynika z obawy o to, czy przerwania nie zakłucą komunikacji po 1wire, co nieraz było tu podnoszone, więc priorytetem jest skrócenie czasu obsługi przerwania. Zastanawia mnie, w którym fizycznie punkcie wykonywania programu tworzy sie opisane wcześniej zjawisko.
Tak, ja też uważam że skorzystanie ze sposobu stosowanego w pilotach (oczywiście bez generowania nośnej) .... to dobry pomysł. Prędkości można uzyskać o wiele wiele większe, a zorganizowanie odbioru na przerwaniu ICP jakiegoś timera sprzętowego da bardzo dobry efekt. I będzie to jakaś alternatywa dla 1wire ;) sam niedługo będę musiał nad takim rozwiązaniem...
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...
Co do kodu: 1. Na początek zrezygnuj z przerwań. Obsługa 1wire wymaga dużej precyzji "czasowej" - opóźnienia liczą się w µs. Jeżeli w czasie trwania komunikacji 1wire pojawi się przerwanie to zależności czasowe się rozjadą. Jak już będzie działać to możesz wrócić do przerwań, ale wyłączać je na czas wysyłania/odbierania bitów z 1w. Lub jeszcze...
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...
Ja pszepraszam że zadam pytanie nie na temat ale czy dało by się za pomocą 1wire skomunikować 2 proce, razem z czujnikiem?
Na końcu przerwania, zerujesz flagę (Reset Flag), nazwijmy ją "flaga końca przerwania", a przed każdym odczytem czy zapisem (przed każdym 1Wire...) czekasz aż ta flaga zostanie wyzerowana. Gdy to się stanie odrazu odczytujesz/zapisujesz dane z szyny 1wire i wtedy przerwanie nie powinno przerywać tych odczytów. Do oczekiwania na wyzerowanie flagi wykorzystaj...
Atom dzięki, że zwróciłeś mi uwagę na 1wread. Wcześniej wyłączałem przerwania na każdej komendzie 1wire, ale podczas testów i modyfikacji programu zapomniałem tego wstawić z powrotem. Jak dopiszę kod do obsługi Timer1 i kwarcu to się odezwę czy to działa jak powinno.
Zobacz sobie krótki opis [url=http://bart-projects.cba.pl/multipl... Zacznij krok po kroku i w 20 minut opanujesz temat. Co prawda tam akurat nie multipleksuję w przerwaniu chociaż tak to właśnie robię najczęściej. Spowodowane to było tym że akurat musiałem pogodzić multipleksowanie sześciu wyświetlaczy z odczytem 1Wire i czasem "naciągałem"...
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...
Fajny projekt, bo powstał na konkretną potrzebę i spełnia swoje zadanie. Do seryjnej produkcji znajdź fajną obudowę i rozmieść odpowiednio wyświetlacz i diody ;) Chciałem podrzucić Ci pomysł na mruganie wyświetlaczy, który jak piszesz miałes. Komunikacja 1wire posiada wysokie restrykcje czasowe. Też kiedyś robiłem urzadzenie, które czytało 2 x DS18B20...
"Czy ktoś wie żeby przerwanie mogło zakłucać pracę 1wire?" Oczywiście że może jeśli wypadnie podczas transmisji danych z DS'a Przed każdą komunikacją z DS'em zablokuj przerwania. Np: Disable Timer1 a po komunikacji odblokuj Enable Timer1.
czesc, mojemu zdziwieniu na wyświetlaczu uzyskałem temp. 85,0 C pomimo zmian temperatury otoczenia temp. nadal wynosiła 85,0 C.... Nia pamietam dokladnie jak to jest z 1820 ale 85 wyglada mi na wartosc wpisywana bezposrednie po resecie termom.... . Po wydaniu rozkazu konwersji trzeba odczekac okolo 1s (dla 12bit) - jezeli tego nie zrobisz bedzie bledny...
Zrealizować 1w na przerwaniach a nie na opóźnieniach. A autor nie chce analoga tylko coś na 1wire.
Jest ktoś zainteresowany rozwiązaniem ekwiwalentnym (na przerwaniu), dla 1wire? :] Biorąc pod uwagę fakt, że jeden bit w 1-wire trwa kilkadziesiąt - kilkaset mikrosekund, oraz to, że można go zrealizować w pełni sprzętowo korzystając z UARTu, taka zabawa IMHO nie ma sensu. Przerwanie z jakąś logiką odpalane co kilkaset cykli nie jest specjalnie kuszące,...
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.
Hej pokaż co masz w "d_led.c" i tak z ciekawości wyłącz przerwania przed czujniki_cnt = search_sensors(); w while.
Fajnie jest wszystko robić w przerwaniach, ale pod jednym warunkiem - takim, że to, co dzieje się w przerwaniu nie wymaga żadnego oczekiwania, czyli odpadają takie ekscesy jak wyświetlanie na LCD czy transmisja przez UART ( lub jakakolwiek inna powolna - I2C, 1Wire). Za to tym, co na pewno należy zrobić w przerwaniu timera, jest badanie stanu i eliminacja...
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.
Człowieku... :) Nie musi być bardziej prawidłowo :) Ma działać. Cały program jest gotowy. Pominąłem odczyt DSów w przerwaniach, bo nie działało, i zrobiłem po prostu, po zapytaniu przez RS. I tak może być. Trzeci raz piszę, że odczytuję komendy z RS poprzez input. No przecież to nie będzie działać w przerwaniu. A przerabianie tego na jakieś inne procedury...
Zablokuj przerwania na czas odczytu temperatury, powinno pomoc. Druga opcja to wykorzystać przerwanie zegara i od razu po odczycie czasu wykonać odczyt temperatury i potem wysłać rozkaz konwersji temperatury do DS. Jak podczas nadawania po 1Wire program wykona jakieś przerwanie to będą problemy z DS (przynajmniej ja takie miałem)
Wracając do tematu a gdyby przerwanie nastąpiło w czasie transmisji 1wire? Dlaczego uważa kolega, że programowy zegar nie jest dokładny ? Wykonywanie instrukcji zerowania w przerwaniu owszem można to uwzględnić, ale nigdy nie będzie on tak dokładny jak rtc poza tym, po co sobie komplikować życie. Ale kolega „miSZCZu5” może zrobić sobie taki...
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...
U mnie trwa ok 400us, czyli bardzo dużo jak na 1wire. I przez to wywala się program. Czyli zrobić tak, że w przerwaniu od timera wysłać jeden bajt, a w przerwaniu od zakończenia transmisji wrzucić resztę 5) bajtów z rozróżnieniem co zostało wcześniej wysłane, żeby wysłać po kolei te 5 bajtów.
Tu się nie martw że ci wyłoży komunikację i2c - to nie jest 1wire. Tu można przerwać cykl zegara na bardzo długo i nic się złego nie stanie - dlatego wolę tmp100 od ds1820. To samo tyczy się komunikacji z lcd - jak wyjdzie dłużej to nic nie będzie - gorzej jak wyjdzie za krótko. Encoder ma dwa sygnały a i b. Jeden dajesz na przerwanie a drugi sygnał...
Do pobrania zamieszczam kod programu Twierdzisz, że od jakiegoś czasu programujesz '51 w C, a niestety przedstawiony przez Ciebie program to "raczkowanie"... Takie rzeczy jak obsługa multipleksowania wyświetlacza LED robi się w przerwaniach, a nie w pętli głównej programu. Przejrzyj sobie kod mojego zegara, do którego zamieściłem link powyżej. Dodatkowo...
Tak, tylko czy nie będzie problemów. Wiadomo, że 1W jest wrażliwe na odstępy czasowe, czy nie będzie problemów z przerwaniami od USB. Niby dlaczego, są takie konstrukcje USB-1wire nawet na elektrodzie, np. tutaj http://www.elektroda.pl/rtvforum/topic15...
Jakiś czas temu widziałem gdzieś ciekawe rozwiązanie wykorzystujące UART mikrokontrolera do transmisji 1WIRE, nie trzeba wtedy martwić się o dokładnie odmierzanie czasu i przerwania mogące zakłócić transmisję. Jak znajdę to wrzucę na elkę.
_delay() w pętli mam tylko tam, gdzie to konieczne - w obsłudze interfejsu 1Wire, aczkolwiek odczyt temperatury z termometru przy użyciu takowego interfejsu może trwać nawet ~800ms.
Postaraj się policzyć zasoby takie jak timery i przerwania czy Ci wystarczy to co mega ma na pokładzie.
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...
Też planuję zabrać się za ARM. Mam kilka lamerskich pytanek do bardziej doświadczonych: 1. Do programowania oczywiście najlepiej JTAG Wiggler? Skleciłem już takowy, tylko jeszcze nie przegwizdałem. 2. Klocek AT91SAM7S - na początek, ale czy nada po '51, AT89 i PIC? Może za duży, czy za mały? 3. Płytka rozwojowa ocywiście będzie DIY - kogo można pomęczyć...
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...
... 2. Oczytujesz temperaturę kiedy w tle "lata" sobie przerwanie. Nie mam zielonego pojęcia czy Bascom wyłącza przerwania na czas obsługi 1wire. Jeśli tak to Twój wyświetlacz LED dostaje 'czkawki' podczas odczytu temperatury. Jeśli Ci to nie przeszkadza kwestia kosmetyki i już. Jeśli nie dostaje 'czkawki' to zapewne Bascom nie wyłącza przerwań i to...
Głównie interesuje mnie to "Waitms 750", bo zegar będzie do.. niczego Będzie działać poprawnie jeśli cały ten kod umieszczę w kodzie wyrażenia warunkowego gdzie warunek będzie spełniany co 750ms? Do tego właśnie można wykorzystać timer i zapomnieć raz na zawsze o wait. Czy w ogóle w takim układzie jest sens dawać odbiornik RC5 i DS18.. pod piny bez...
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.
Na razie to tylko ćwiczenie mające na celu nauczenie się obsługi magistrali 1wire. Skoro mam w przyszłości z tego korzystać, na pewno użyję timera, ale tu powstaje pytanie: Mam włączyć przerwania i ewentualne opóźnienia w nich realizować?
Nie sądzę, by jakikolwiek projekt dał się sensownie zrobić bez przerwania timera, więc testowanie obecności pastylki można zrobić w tym przerwaniu. Z drugiej strony kod obsługi OneWire z delay() nie nadaje się do użycia w projekcie, w którym są przerwania, więC proponuję zrobić od nowa obsługę OW. Przykład na F0 masz w niedawnej EP.
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....
Witam, Mam pytanie co do obsługi termometru ds18b20 i ogólnie komunikacji 1wire. Przejrzałem kilka gotowych bibliotek do obsługi 1wire i wszystkie zawierają opóźnienia programowe (delay). Znalazłem też informację, że można wykorzystać UART do tego celu ale z tego co widzę tam również występują opóźnienia. Nie chodzi mi o opóźnienie 750ms czyli czas...
A jak ty to opracowałeś? To sie da? W moich ukladach praca procka jest przerywana zegarem 20kHz na około 20uS. Wątpie czy daloby sie w to wpleść jakos 1wire tak by nie gubił informacji. W szczególnosci ze procesor ma wybitnie mało czasu wolnego poiędzy kolejnymi przerwaniami...
Dar.El - jedynie tak jak piszesz. zrobię synchronizację pwm 12V z 230V z zerem sieci, 230V na triakach z optoizolacją na moc3020 i 12V na BUZ11 tez z optoizolacja na cny17. detekcja zera z optoizolacja na cny17. pomiar temp z 1Wire. komunikacja na i2c. gitara:) w programie: - pwm programowy w przerwaniach z licznika - pomiar temp jeszcze nie wiem -...
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...
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,...
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,...
Mała poprawka. Ja zrobiłem sobie sam odbiornik rc5 i sam nadajnik rc5 oby dwa na attiny2313. Odbiornik działa tylko tak że zamyka przekaźnik na o.3 sekundy i otwiera, i tak za każdym razem. Więc nie rozumiem o co chodzi z tym standardem 433MHz... A kolejna rzecz to jak napisać taką procedurę jest to trudne? Gdzie znaleźć coś o tym wysyłaniu danych,...
Czy np podczas procedury wykonywania konwersji temperatury termometru w uC nastapi przerwanie programu glownego i skok do innego popprogramu moga wystapic jakies bledy czy nawet uszkodzenie ? Nie, ale jeśli przerwanie wystąpi w czasie komunikacji po 1wire to komunkacja może być błędna.
Nie mogło by być tak, że to przycisk generował by przerwanie? ... i pewnie do tego kolejny "delay" w przerwaniu od przycisku w celu eliminacji drgań styku? Nie brnij dalej w te delay'e, bo jeśli będziesz chciał dodać kolejną funkcjonalność to może okazać się to niemożliwe. Zrób sobie timer np. co 10ms i wywołuj nim przerwanie, ale uwaga: nie umieszczaj...
Plik mmc.c nie należy do biblioteki. Owszem jest w samplach, ale jest pośrednikiem miedzy sprzętem i biblioteką. Powinno się go dostosować do drivera SPI. U mnie na tym samym SPI siedzi jeszcze LCD z SPLC501 i AT45DB161D więc logiczne jest, że PF też powinien komunikować się w ten sam sposób. W tych źródłach brakuje inicjalizacji i przerwania od timera,...
Dr_DEAD poruszył bardzo ważną sprawę przerwań. Musisz bardzo dokładnie określić kiedy przerwania musisz włączyć, i kiedy należy je wyłączyć, aby nie blokować systemu, ani transmisji 1wire. p.s. Dr_DEAD ale mnie ubiegłeś Jednym słowem do 1wier dużo lepszym rozwiązaniem jest użycie timera. p.s. sawitar może i byłem szybszy ale zato mniej szczegółowy...
Witam! To prawda, ze FastAVR pięknie obsługuje wyświatlacz od Nokii 3310. Wszytsko rusza od ręki. Napisałem jednak kilka linijek do odczytu bajtów odpowiedzialnych za temperaturę z DS18B20 i tu pewna niespodzianka: podczas odczytu danych wyświatlacz się resetuje. Nie wiem czy to normalne, ponieważ nie mam obecnie żanego innego na podmianę. Wyglada to...
Przeanalizowałem kod źródłowy i masz rację "autor" przyblokował ci trochę kod. Bo zamiast przez całe źródło korzystać z jednego określenia pinu, trochę nabruździł. Generalnie nie korzysta właściwie z tego pinu dla jakiegoś szczególnego powodu bo całą procedurę wyświetlania zrealizował krok po kroku z opóżnieniami w poszczególnych procedurach i bez przerwań....
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...
Chodzi o to, że przerwanie powinno tylko być małym produktorem (lub konsumentem) informacji, i popychać/czytac te informacje z/do jakiegoś bufora (kołowego lub nie), a interpretacja/składanie danych z bufora powinna byc w petli głównej . Doszczętne przetwarzanie danych w samym przerwaniu to śmierć kliniczna procesora. Mam rozne kody do obsługi różnych...
-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...
czyli jak przykładowo dam: [syntax=basic4gl] do if flaga = 1 then 1wreset 'reset 1wwrite &H55 1wwrite &HCC 1wwrite &H44 'dokonaj konwersji end if if flaga = 2 then 1wreset 'reset 1wwrite &H55 1wwrite &HCC 1wwrite &HBE Temperatura(1) = 1wread(2) 'odczytaj dwa pierwsze bajty end if 'DALSZA OBRÓBKA DANYCH.... 'inne rzeczy - obsługa przycisków czy coś innego......
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...
Mam problem w poczynieniu założeń. W urządzeniu przypominającym małą suwnicę bramową mam zamontować ok. 20 czujników - w zasadzie krańcówek. Czy to będą transoptory szczelinowe czy kontaktrony- jeszcze nie wiem. No ale żeby nie ciągnąć grubej wiązki wymysliłem żeby badać ich stan przez I2C albo 1Wire. PCF8574 albo DS2413. Odległość jest głupia- 6-10m....
Witam, Czy w Bascomie AVR, zmienną Err, która Zwraca 1 gdy wystąpił błąd trzeba potem zerować, czy sama się zeruje. Przykład przerwanie: Kod związany z 1WIRE IF err = 1 then 'err=1 bo np. błąd w komunikacji PRINT "błąd err = 0 'trzeba zerować???? return end if Dalszy kod, który się wykonuje jak nie wystąpił błąd.... ... ... return
A to niby dlaczego nie wolno stosować waitms ??? U mnie jakoś działa przy wielu czujnikach na jednej linii i co to ma wspólnego z wysyłaniem przez uarta ? W tym przypadku waitms nie zakłóca obsługi przerwań, wiec nie widzę problemu. Kolega namieszał trochę w procedurze "odczyt". Na początku wyszukujesz czujniki na linii 1wire, a później, w procedurze...
Ja też nie wiem jak można "jeździć" po UARCIE ;) ... to jeden z najstarszych i bardzo dobrze dopracowanych sposobów transmisji dodatkowo posiadający pełne wsparcie sprzętowe i to w oparciu pięknie o przerwania. Wbrew pozorom także bez problemu działa na kilkanaście/kilkadziesiąt nawet metrów jeśli sygnały puszczone są np skrętką komputerową. Żadnych...
1. znaczniki [code ][/code ] 2. masakralnie pomieszane wszystko: a) odświeżanie wyświetlaczy do przerwania b) odczyt temperatury z cli(); i sei(); do pętli głównej to co do czytelności kodu czy na pewno masz wszystko dobrze podłączone, + rezystor 4k7 na lini DQ 1wire?
A ile trwa wysylanie/odbior danych z DS'a? Tylko tyle czasu powinna zajmowac procedura obslugi DS'a (nie liczac sposobow z wykorzystaniem sprzetowego RS'a jako portu do obslugi 1wire - wtedy moze jeszcze mniej) Nie czekasz czasem w martwej pętli na zakonczenie konwersji temperatury?
..... wymagane jest precyzyjne odmierzanie czasu (transmisja, inicjalizacja, itd.) Jak precyzyjne to odmierzanie czasu ma być i jaka jego wielkość? Liczniki programowe z wykorzystaniem sprzętowego timera są bardzo dobrym rozwiązaniem i do obsługi 1WIRE w zupełności wystarczy. Jeżeli zależy Ci na bardzo dużej precyzji uwzględnij w obliczeniach czas...
No hej! Więc zrobiłem tak jak pisałeś, wszystkie procesy popędzam głównym zegarem, natomiast sygnał clk_1us robi za sygnał „enable” w procesach. Podłączyłem go przez „one_shota” więc trwa jeden takt zegara głównego. Przy okazji pozbyłem się „warningów” pt. „Gated clock”. Hmm… reszty o przerwaniach...
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)=...
tak to mniej więcej robię. tyle tylko, ze przerwanie przerywa komunikację I2C i zjada sekundy , albo powstają jakieś błędy. jak dam odczyt I2C w obsłudze przerwania - to sam wiesz wszystko zaczyna migotać. nie zacząłem jeszcze wkładać do programu procedur do 1wire, ale tam też szykuje się problem z czasem konwersji - nie można dać waitms bo wyświetlacze...
Witam Nie chcę zakładać nowego wątku, więc piszę tutaj, bo problem podobny, choć nie do końca. Piszę program na procek XMega, który realizuje wiele rzeczy, a z istotnych tutaj steruje silnikiem krokowym i odczytuje temperaturę z DS18B20. Sterowanie silnikiem oparte jest na przerwaniu timera, w Którym wykonywany jest jeden krok, oraz określane jest opóźnienie...
To czy WDT eliminuje problem czy nie to już zależy od programu. Czasami warunki w jakich urządzenie pracuje może spowodować np zmianę licznika PC i wtedy program siedzi tam gdzie nie powinien. Są to sytuacje ekstremalne. Większość z nich eliminuje BOD, ale nie wszystkie. W sumie przeleciałem program na szybko i nie mam takich warunków które w moim mniemaniu...
(...) 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...
#include <mega8.h> #include <stdio.h> #include <delay.h> #include <math.h> // 1 Wire Bus functions #asm .equ __w1_port=0x15 ;PORTC .equ __w1_bit=5 #endasm #include <1wire.h> unsigned int status=0, error=0; int temperatura=0, temperatura_zadana=0; unsigned char rom_codes[5,9]; unsigned char devices, ii; int ds1820_status=1,...
esp8266 1wire czujnik 1wire 1wire reset
zmywarka głośno sonoff temperatura sprawność klimatyzatora
adapter bluetooth mackie thump
Manitou 634 - Problemy z włączaniem biegów Czy płomień świeczki rozgrzeje spiralę grzejną?