a ja chce zauważyć pewien średnik po while
Generalnie w takich przypadkach nota układu twoim przyjacielem. Poczytaj to co napisałem w komentarzach. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> int main(void) { uint8_t i = 0; DDRD = 0xff; //TCCR2A |= (1<<WGM21)|(1<<WGM22); // źle ten tryb jest zarezerwowany TCCR2A |= (1<<WGM21) // CTC //TCCR2A |= (1<<CS20)|(1<<CS21)|(1<&l...
Zmniejsz rozdzielczość, tworząc na przerwaniach programowy PWM. Przy 5 bitach wyciśniesz ponad 200kHz. Jak koniecznie ma być coś zewnętrznego to nawet NE555 można kontrolować załączając odpowiednie wartości rezystancji/pojemności. http://lmgtfy.com/?q=external+PWM+contro...
marco47 - przepraszam, nie zauważyłem. marek19951 - proste if-then nie załatwi problemu. Jeżeli masz zapał, a widzę , że masz, zacznij od procedury obsługi klawiatury , która nie powoduje opóźnień poprzez martwe pętle ( czyli m.in wait, debounce, bitwait itp). Ja to zrobiłem na przerwaniu programowym z timer1, które odliczało mi okresy 10 ms w połączeniu...
W urządzeniu było mało USART, został użyty układ SC16IS760IPW. Teraz musze dodać kolejny SC16IS762IPW czyli dwa USART. Procek z USARTEM komunikuje się po SPI. Komunikacja to wysłanie adresu rejestru i zapis/odczyt danej. Teraz wszystko odbywa sie w pętli głównej, muszę jednak odbiór przenieść na przerwania. Jak sie łatwo domyśleć, nie może byc tak,...
Dysponuję autorskim protokołem transmisji danych przez pojedynczy kabel. Szybki, niezawodny, odporny na zakłócenia . Wymaga jednego timera z jednym kanałem capture i jednym kanałem match. Oczywiscie mozna to zrobić po prostu na przerwaniach programowo, ale wtedy osiągane prędkości są raczej nie... imponujące. Protokół jest zasobożerny, lecz implementuje...
Pin ICP nadaje się jeśli chcesz określić np. długość impulsu. Dla enkodera się nie nada - enkoder daje sygnał w kodzie Graya, ponieważ M8 nie ma sprzętowego dekodera tego kodu musisz to zrobić programowo. Aby nie czekać w pętli i ciągle nie sprawdzać czy coś się nie zmieniło wyjścia z enkodera trzeba podpiąć pod wejścia generujące przerwania. W handlerze...
Kolega snaap nie napisał jeszcze, jak ma skonfigurowane przerwanie INT1. Ja podejrzewam, że ma wyzwalanie stanem niskim, a nie tak jak kolega ravmar (autor wątku) zboczem opadającym. Różnica między tymi dwoma typami przerwań polega na tym, że w tym pierwszym (wyzwalanym stanem niskim) flaga INTF1 jest zawsze zerowana, niezależnie od tego, czy przerwanie...
:D Ale nadal mnie nurtuje dlaczego przy takim programie i włączonym wewnętrznym pull-up generuje Ci się przerwanie, pomimo stanu wysokiego na wejściu INT1. Co tam masz podłączone?
Wyrzuc pojemność, daj dwie bramki szeregowo (żeby ujemny sygnał na fototranzyztorze dawał ujemny na uP) i zliczaj nie na T0 tylko na INT, w obsłudze przerwania zliczaj programowo. Eliminację kilku po sobie następujących lini zrób progarmowo w taki sposób że pierwsze zbocze opadające jest zliczane a nastepnie blokuje przerwania na INT przez czas np....
Mylisz się, da się to zrobić bez przerwań. Na przerwaniach też się da, więc żeby poczuć różnicę i na coś się zdecydować po prostu zrób jakiś projekt, bo z filozofii nic nie wyniknie. Po to mikroprocesor ma te wszystkie timery, przetworniki itp. żeby z nich korzystać. Używając przerwań sprzętowych. Bo jak nie- to używasz "wykastrowanego" procesora....
Ja na razie zostaje przy przerwaniu programowym Może coś przespałem, ale wydaje mi się, że w AVR nie występują przerwania programowe.
Sprzętowo tylko na wyjściach OC. Przy tej częstotliwości można sterować dowolnymi wyjściami programowo, obsługując wszystkie przerwania timera.
Równie dobrze można restartować płytkę programowo. W jaki sposób ? Czytałem o pinie przerywającym, ale też trzeba napisać odpowiedni kod, wstawić w odpowiednie miejsca, pomyślałem że najprościej będzie odcinać masę. Jak tutaj wyglądałby kod z przerwaniem programowym ?
np. Nie da się. TImer0 może zliczać tylko z pinu PD4. I to z PinD.4 a nie PortD.4 ;) Można i z PinD.0, ale nawet przerwania żadnego do tego nie ma więc trzeba by programowo. A nawet jak przerwanie by było (mowa o przerwaniach INTx) to Timer tego nie zliczy. Trzeba by programowo zwiększać zawartość licznika Timera0, ale po cholerę. Jeżeli to ma być...
Takie odwołanie powoduje zerowanie flagi. Wydaje się to dziwne ale już się sam przekonałem. Generalnie w symulatorze AvrStudio ustawienie flagi wywołuje przerwanie. Może wpis zera będzie powodował wygenerownie przerwania ??
ale nie wiem jak podejsc do przerwan zewnetrznych (przyciski). Przyciski mam podlaczone pod: P3.3 (Int1), P3.5(T1), P3.4 (T0), P3.2 (Int0). Jak to jest mozliwe ze sterujac multiplekserowo wyswietlaczami segmentowymi wysylajac aktywny bit na port P3, moge jednoczesnie zglaszac zewnetrzne przerwania (z przyciskow)?? Możesz. Ale dlaczego przyciski mają...
Do regulacji obrotów silnika - w zależności od zamontowanego w pralce - będziesz musiał użyć regulatora napięcia, najlepiej z wejściem analogowym dla silnika szeregowego, lub falownika dla silnika klatkowego 3-fazowego. W przypadku silnika klatkowego 1-fazowego - strata czasu. Dla silnika szeregowego potrzebny będzie jeszcze układ przekaźników konieczny...
Skoro problem startupa już rozwiązałeś, to może napiszę cokolwiek o tym drugim. Po pierwsze - po co chcesz zmieniać wartość I / F z poziomu kodu? W znakomitej większości przypadków - jeśli nie korzystasz z przerwań zagnieżdżonych - nie ma takiej potrzeby. Przerwania aktywowane są (lub nie) w rozbiegówce przy okazji ustawiania stosów dla różnych trybów....
Witam, Znalezione przez Google IRQL_NOT_LESS_OR_EQUAL (0x0000000A). Występuje, kiedy sterownik urządzenia wykorzystujący przerwanie programowe z danym priorytetem próbuje uzyskać dostęp do obszaru pamięci, zajętego przez proces korzystający z przerwania programowego z wyższym priorytetem
Można toggleować ale nie skrócisz cyklu timera do tych 4ms, to musi być wykonane poprzez ocr2a, ewentualnie zerujesz programowo w przerwaniu od ocr2b. To z tym read only musi być błędem, w datasheetach też się takowe zdarzają
korbis - wywoływanie poleceń BIOSu odbywa się przy pomocy przerwań programowych (tzw. przerwania BIOS-u). Wywołujanie funkcji biosu polega więc na tym, że do rejestrów ładujesz parametry funkcji, a następnie wywołujesz odpowiednie przerwanie (instrukcja int). Jest tego sporo, więc nie będę tego tutaj opisywał. Nie wiem, czy współcześnie jest to potrzebna...
Mi to wygląda na jakiś błąd w koncepcji projektu oprogramowania. Zawsze powtarzam, żeby nie ruszać programowo priorytetów przerwań, bo na ogół kończy się to katastrofą. To jak ruszasz priorytety przerwan ? Sprzetowo ?? (at)arcyimperator Jak masz ustawione PriorityGrouping ?
To nie są przerwania na PB1, 2, 3, a sprzętowe wyjścia timerów. NA ATmega8 masz trzy wyjścia PWM - dwa z T1 i jedno z T2. Nie wiem, ilu w końcu potrzebujesz. Jednego powinieneś użyć do generowania 36 kHz, kolejnego (a może dwóch) do sterowania silnikiem. Czemu mają służyć te zabawy z przerwaniem timera i programowym machaniem nogą uC?
Jeśli chcesz mierzyć czas pracy załączonego urządzenia to przerwania i metoda sumowania czasu kolejnych cykli pętli programowej maja podobną dokładność. Jeśli chcesz mieć dokładną sekundę, minutę, itd to tylko przerwania
Tu znajdziesz trochę informacji (w j. angielskim)
Witam! ATCH - Blok funkcyjny łączący określony numer zdarzenia "EVENT" z wybranym numerem przerwania "INT". Operacja zostanie wykonana, gdy do wejścia "EN" podany zostanie sygnał. W momencie, w którym warunki określone numerem zdarzenia są spełnione zostanie automatycznie rozpoczęty proces wykonania fragmentu programu, któremu zosta! przydzielony numer...
wykład był o mikrokontrolerach freescale, ale pytanie to raczej jest odnośnie samej idei przerwań
Hehe... no to następny pomysł - a jak szybko obraca się pętla główna programu? Nie wiem jak masz skonstruowany program, czy w ogóle jest? Dużej precyzji czasów chyba nie potrzeba, nie ma różnicy, moim zdaniem, czy przytrzyma się przycisk 1s czy 1,1s, więc może ten pomysł wsadzić do pętli głównej i bez przerwań. Wtedy w zależności od szybkości pętli...
Witam Dla celów edukacyjnych w załączniku jest schemat i program do obsługi czterech wyświetlaczy na układzie 74164 W układach bardziej rozbudowanych programowo trzeba wykorzystać Przerwania Piotr
Czy RTC (zegar czasu rzeczywistego) używający Timera 2 w trybie asunchronicznym , działa nawet wtedy gdy wyłączone sa przerwania globalne ? ... kwarc, preskaler oraz Timer2 nie potrzebuje przerwań ale to nie wystarcza do zrobienia całego RTC to wystarcza do zrobienia przerwania co 1 sekundę a reszta zegara musisz zrobić programowo i to właśnie na przerwaniu...
Witam, W przypadku XMEGA32E5 i timerówTC45 znacznik przerwania od Overflow/Underflow nie jest automatycznie kasowany po wejściu do obsługi przerwania. Należy go skasować programowo poprzez wpisanie "1" do bitu OVFIF w rejestrze INTFLAGS w obsłudze przerwania. U Ciebie występuje dokładnie efekt braku kasowania znacznika. Pierwszy okres jest poprawny,...
Jak dobierzesz priorytety przerwań (programowo) z TIMERA i ZCD, i transmisję z UART też zrobisz przerwaniowo to czym się martwisz. UART ma bufor 3 znakowy i jest jednostką samodzielną.
No a skąd ci przyszło do głowy, żeby programowy UART chcieć z przerwaniem od sprzętowego używać ??? Ta wersja programowego UART'a w ogóle nie generuje żadnego przerwania.
...Jakie jest zatem rozwiązanie tego problemu (jeśli jest)? Bascomowy UART programowy działa jedynie wtedy , kiedy wywołamy funkcję z nim współpracującą. W pozostałych przypadkach ( kiedy działają funkcje/procedury nie związane z programowym UART-em ) , nadchodzące dane są "niewidoczne" dla procka :( Np. jeśli masz w kodzie Wait 1 , a w czasie działania...
Skoro zasilane, to pewnie optyczne. A jednak obu nas zaskoczył, czujnikami Halla :) nie bardzo rozumiem ta obsługa enkoderów programowo w przerwaniu z timera? To proste. Ustawiasz timer do generowania przerwania. W przerwaniu programowo sprawdzasz wejścia enkoderów i stwierdzasz zmianę stanów, kierunek obrotów.
Bo są timery sprzętowe- i dobrze że są. A z nich można zrobić przerwania programowe- wystarczy obliczyć ile razy timer sprzętowy się odezwie. A wstawianie Waitms albo _delay w przerwaniu- to jak napisał mirekk36- masakra. Ale wstawianie tego w główną pętlę- też.
PCINT to specjalne przerwania aktywowane zmianą stanu pinu. Dodatkowo wszystkie przerwania PCINT w tych procesorach wywołują jedno przerwanie, w którym należy programowo określić, który pin je spowodował ważny jest też rejestr PCMSK, który odpowiada za maskowanie nieużywanych przerwań. Polecam lekturę datasheetów tych procesorów w celu dokładnego poznania...
W AMEGA 2560 można to zrobić tylko programowo (podczas wchodzenia w przerwanie). Generalnie nie ma to sensu bo narzut na programowe ustalanie priorytetu będzie większy niż odpowiednio napisana funkcja obsługi enkodera na INT0. Tzn. lepiej szybko obsłużyć INT0 niż się bawić w ustawianie priorytetów przerwań.
Przecież masz gotowy "scalony odbiornik" ? Tym bardziej że ów scalony odbiornik daje na wyjściu stan niski jeśli odbierze właściwą częstotliwość. Jeśli nie ma potrzeby dekodowania np. RC5 to jest bez sensu. Jeśli ma być sama detekcja sygnału to przerwania i programowo sprawdzać stan.
Domniemam, że ujarzmiasz jakiegoś Cortexa bo wspominałeś o stosie w startupie. W taki wypadku musisz trochę więcej doczytać o samej architekturze ( o ile jeszcze tego nie zrobiłeś) tego rdzenia. Chodzi o to, że Cortexy mają dwa wskaźniki stosu, jeden jest tak jakby dla przerwań( to ten który jest ustawiany w startupie) i drugi jest tak jakby na procesów...
Ja robię wszystko w (wielu) przerwaniach. Istnieją programowe frameworki zdarzeniowe (takie zdarzeniowe równoważniki RTOS), które korzystają z przerwań mniej intensywnie lub wcale. Czy sprzętowo, czy programowo, osiąga się jeden ważny cel - brak przełączania zadań. Handler wykonuje się i kończy, nie pozostawiając "stanu" na stosie,
Najlepszą sprawą jest jak program odwołuje sie do systemu poprzez ściśle określone wejście. Takim wejściem są przerwania programowe. Niektore rejestry z przestrzeni I/O można modyfikować tylko w specjalnych trybach procesora, to samo dotyczy się instrukcji SWI. Wszystko zależy od typu procesora.
Przede wszystkim PCINT wymaga większego nakładu programowego. Przy włączonych wielu źródłach danego przerwania PCINT trzeba analizować, który pin zgłosił przerwanie i w jaki sposób się to odbyło (które zbocze). PCINT jest niżej w hierarchii przerwań, zatem na obsługę tego przerwania trzeba czasem dłużej poczekać (w zależności od konstrukcji programu)...
Podczas wykonywania programu obsługi przerwania w mikrokontrolerach AVR zgłoszenie przerwania tego samego typu ( lub innego) zostaje przyjęte do realizacji. Zostanie zrealizowane po zakończeniu obsługi bieżącego przerwania(nie koniecznie natychmiast). Jeżeli w trakcie przerwania zostaną zgłoszone 2 przerwanie różnego typu to po zakończeniu obsługi tegoż...
Na AVR USB nie jest zrobiony na timerze, tylko na odliczaniu instrukcji. Kiedy trwa transmisja USB, mikrokontroler nie robi już nic innego i ma zablokowane przerwania. Programowy USB na AVR to pożyteczna i ciekawa zabawka, ale tylko zabawka, która nadaje się do b. wąskiej klasy zastosowań..
Moim zdaniem jest prostsza metoda. Tworzy się dwa indeksy i tablice buforującą. Oprogramowanie zapisuje znaki to bufora i zwiększa pierwszy indeks (umownie indeks programowy). Po takim zapisie przed wyjściem zezwala na przerwanie. Przerwanie z kolei jak wykryje, że bufor programowy jest różny od drugiego buforu (umownie bufor sprzętowy) to z aktualnie...
Nie mieszaj przerwań programowych z przerwaniami sprzętowymi. Kontroler przerwań to układ sprzętowy i umożliwia przypisanie przerwania do konkretnej linii przerwań. Niektóre sloty PCI współdzielą jedną linię przerwań. Magistrala PCI (nie ważne ile jest slotów) ma 4 linie przerwań. To prawda, że w Win98 można było wybierać numer przerwania ale w świetle...
[syntax=C]void SysTick_Handler(){ SysTick_Config(prescaler_systic);[/synta... W jakim celu w obsłudze przerwania od SysTick, ponownie konfigurujesz licznik? Logika podpowiada, że raz uruchomiony działa i nie trzeba nic więcej robić. Jeżeli po odliczeniu czasu, przyjmujesz przerwanie, przechodzisz do ustawiania i na nowo startujesz licznik, to częstotliwość...
Set EIRF to już etap kombinowania, pomijając ten zapis próbowałem z Eifr = &B00000011 jak i Eifr = &B00000000 efekt jest ten sam 2x przerwanie... zamysł jest taki by wyzerować flagę zgłoszenia przerwania INT0 czyli ostatni bit rejestru EIFR a to mi nie działa... i chyba nie da się wymusić przerwania programowo wpisując w rejestr, to musi pochodzić pinu...
O dziwo, gdy taka linijka znalazła sie w porcedurze obsługi przerwania zewnętrznego, to nadal było źle. To nic dziwnego bo te przerwanie samo skasowało tę flagę. Jedynie kasowanie flagi ma sens tylko w momencie kiedy dane przerwanie jest jeszcze nieaktywne bo w każdym innym przypadku ty go nie zdążysz skasować bo zawsze szybsza będzie obsługa tego...
Wystarczy dołożyć funkcję, która zwróci wartość zmiennej. Tak jest zrobione - ta funkcja też nie ma dostępu do tej zmiennej, bo jest wywoływana przez wątek który ma taką a nie inną konfigurację MPU. Ja nie mówię o "dostępie" w znaczeniu widoczności zmiennej w kompilatorze, tylko o prawach dostępu w Memory Protection Unit. To jest specjalny port FreeRTOSa...
Watchdog nie jest programowy tylko sprzętowy Możesz mi powiedzieć co tu miałeś na myśli? Watchdog nie jest programowy? pierwsze słyszę. programowo: 1. ustawiam watchdoga na jak najkrótszy czas 2. wyłączam przerwania (na wszelki wypadek) 3. pętla nieskończona. i masz programowy PEŁNY reset i skok do adresu ustawionego za pomocą fusebitów. (to jest najpełniejszy...
Szkoda, że nie ma tematu o RTOS dla Arduino Trzeba założyć :) Gdy RTOS używa przerwań od WD (nie zadziała na każdym AVR, dajmy na to mega128) to jak task oddaje czas innym zadaniom? AVR nie może generować przerwań programowo więc jak to jest realizowane? Nowsze atmegi mogą bo mają przerwania od WD, starsze startują od resetu, ale pamięć nie jest kasowana,...
... i zamiast sprzętowego zrób programowy.
Wejścia GPIO w ESP32 nie mają na wejściu bramki Schmitta (jak AVR), więc jakiekolwiek fluktuacje napięcia na wejściu w obszarze pomiędzy stanem wysokim i niskim mogą powodować efekt, który opisałeś i przypadkowe generowanie przerwań. Doraźnie problem rozwiązałem softowo za pomocą takiego kodu: Napisałeś coś w rodzaju programowego przerzutnika Schmitta...
Problem pojawia się, kiedy próbuję w obrębie funkcji wyzwalanej przerwaniem wykonać operację dodawania i wyciągnąć wynik. napisz w przerwaniu tak: [syntax=c]stykx=stykx+1;[/syntax] albo krócej: [syntax=c]stykx++;[/syntax] Drgania styków kontaktronu będą powodować chaotyczne naliczanie. Zrób debouncing programowo albo sprzętowo.
Przerwania w tym wydaniu sa tak proste że nie moga nie działać. Sprawdź sobie na spokojnie każdą rzecz po kolei, czyli osobno bramkowanie timera i osobno przerwania od INT0. Bascom jest mi obcy ale wydaję mi się że jest dobrze napisane. Sprawdź wymuszenie przerwania programowo czyli podstaw /INT0 (P3.2) =1 i potem 0. To na pewno jest wina muzyka a nie...
Witam, jeżeli czujnik posiada magistrale I2C, i chciałbym pobierać z niego dane i je przetwarzac niezależnie od działającego równoczenie programu głównego. To w takim wypadku musze użyć przerwań. Port 20 i 21 w arduino mega odpowiadają za przerwania oraz komunikację SCL oraz SDA. W takim przypadku powinienem użyć funkcji rezystora podciagajacego oraz...
Ale mieszasz. Ustawiłeś dwa cykliczne przerwania i dziwisz się, że coś nierówno miga. Tu w avr nie ma wielowątkowości sprzętowej i jedno przerwanie przeszkadza drugiemu. Przenieś i wyłącz to przerwanie to co masz w ISR(TIMER2...) do ISR(TIMER1...) . Idea programowego PWM i timerów jest właśnie w tym aby działało wszystko pod jednym wspólnym cyklicznym...
Zdążyłem się poprawić przed Twoją odpowiedzią :) Oczywiście masz rację, ale używaj, a nazw nie liczb, by nie mieć problemów i łatwiej po czasie analizować swój własny kod. Poza tym wrzucając na forum liczby, zmuszasz nas (przynajmniej mnie) do szukania w datasheetach, a niektórych wręcz zniechęcasz do analizowania takiego programu. Nie generuje przerwań...
Nie ,nie ma takiej możliwości ,żeby zmienić w prosty sposób priorytety przerwań. Można to zrobić przez zabiegi programowe lub zastosować mikrokontroler z rodziny x-mega ,który ma znacznie bardziej rozbudowany mechanizm przerwań i możliwość ustawienia priorytetów .Poza tym może warto przemyśleć sens takiego zabiegu ,bo to rzadka sytuacja kiedy uart miał...
Niby czemu miałoby to bez przerwania od timera niedzialac ?? W końcu jest to napisane w asemblerze (nie będzie optymalizowane) i podczas wysyłania są wyłączone przerwania.
Jeden kanał steruje jednym wyjściem. Nie ma możliwości zerowania wyjścia od jednego kanału i ustawiania tego samego wyjścia przez inny kanał. Napisałem wyżej - ustaw okres 5 ms, tryb toggle i odpalaj swoją reakcję programową na timer w co drugim przerwaniu. Nie rozumiem, na czym polega problem. Będziesz miał falę prostokątną 100 Hz.
Witam No cóż rozwiązanie problemu jest programowe. W obsłudze przerwania deklarujesz trzy liczniki zliczające do np. 100 (wygodne bo masz skok 1%). Zawartość tych liczników "przyrównywana" jest do trzech kolejnych zmiennych, na które z kolei Ty masz wpływ. W zależności od zadanych wartości coś włącza się szybciej coś później. I po sprawie. Ot, cała...
Dlaczego nie uzyskasz? Dla 16-bitowego timera i preskalera 1024 dla f=1MHz uzyskasz nawet minutę. Ja bym to zrobił tak, że ustawiłbym timer na zliczanie tego okresu 0-1,3 Hz, w przerwaniu zmieniłbym parametry pracy tak, żeby kolejne przerwanie wyszło po 20ms, wtedy ponowna zmiana i generowanie czasu do kolejnego impulsu. W przerwaniu programowa zmiana...
Ja robiłem dokładnie to samo :) Programowy UART sprawdza się, ale jak program nie jest za bardzo pocięty przerwaniami timerów itp. Poza tym trzeba "czekać" na dane, chociaż w bascomie nie robi to większej różnicy.
No właśnie trzeba zapytać się autora dlaczego nie chce wracać poprzez RETI - bo pisze że obawia się przepełnienia stosu - a właśnie tak (RETI) go nie przepełni - no chyba że będzie coś umieszczać na stosie i nie zdejmować. ( w kontekście " normalnej " obsługi przerwań - bez programowego resetu ) musze zrobic przerwanie, z ktorego nie bede wracal przez...
zrealizował programowe I2C 400kHz na przerwaniach. Wskaż mi miejsce w którym napisałem, że zrealizowałem TWI 400kHz na przerwaniach programowo . Choć wcale nie twierdzę, że to utopia :) Na szybkiego przejrzałem kod i sam sobie odpowiem: funkcja endTransmission() zwraca kod == 4 i resetuje stan. W takim wypadku należy po jakimś czasie ponowić transmisję...
Fakt, tylko uart kasuje flage programowo. ... i to tylko przerwanie odbioru danych (RXC), bo już nadawania (TXC) także kasuje się po wejściu do przerwania.
Witam W dokumentacji pisze tak: "To enable the WDT, a user must write 01EH and 0E1H in sequence to the WDTRST register (SFR location 0A6H)." Czyli taki kod powinien go załączyć?: mov 0A6H,01EH mov 0A6H,0E1H Dobrze to rozumiem? Idąc dalej: "When the WDT is enabled, the user needs to service it by writing 01EH and 0E1H to WDTRST to avoid a WDT overflow."...
Masz narzucony zegar 12MHz i on jest podstawą do obliczeń. Timer będzie taktowany zegarem 1/12 Fosc czyli 1MHz i tego nie zmienisz. Masz do odmierzenia 2 czasy 3360us i 10640us. Wybierając tryb 2 Timera utrudniłeś sobie sprawę bo maksymalny okres który możesz zliczyć do 256us. W takim przypadku musisz zrobić dodatkowy programowy licznik. Największy...
Jak najbardziej jest poprawne, tyle że zauważ że w obydwu przypadkach nie masz zrealizowanej programowej eliminacji drgań styków
A co robi w kodzie takie coś? Nawet masz komentarz napisany. [syntax=c]/* Wygenerowanie przerwania EXTI_Line9 programowo */ EXTI_GenerateSWInterrupt(EXTI_Line9);[/s...
Wszystko się zgadza. tyle , że w przypadku Zdziska problemy mozna skomasować w zasadzie do dwóch głownych : 1. problem ze strony grafiki (śmieci na ekranie pojawiające się przy wpisach zawartości do VRAM) co idzie obejść. (byćmoże Zdzis_ek przetestuje rozwiązanie tego problemu) 2. programy sa pisane własnie w basicu. i jak na "możliwosci" cobry - jest...
Pomyśl, skąd bierze się przerwanie timer? Stąd, że w rejestrze timera został sprzętowo ustawiony znacznik, który można odczytać programowo. Ustawiając w przerwaniu timera znacznik programowy bezsensownie dublujesz znacznik sprzętowy - wystarczyłoby bez żadnego przerwania sprawdzać znacznik sprzętowy zamiast tego programowego. Dobre rozwiązanie polega...
SDI -> Slave Data Input, Tak ? Jak użyjesz sprzętowego SPI, to wysyłasz 2x8bit (nie ma tu żadnego bitu stopu itp., istotne są tylko impulsy na SCK) i z głowy, a jak programowego, to wysyłasz 16 bitów i też z głowy. To po co ci "przerwania" ?
Cześć! Robię sterownik 6 serv na arvku atmega8. Sprzętowo steruję już jednym. Ale aby obsłużyć ich 6 potrzebuję wykoanć wszystko na przerwaniach - programowo. I na razie probuje to wszystko ogarnąć... na pewno procek to umożliwia.. Co myślicie o zastosowaniu do tego ATmegi162, ktora ma 6 sprzętowych kanałów PWM? Teraz może być głupie pytanie... :Tylko...
To zadziała Jutro rano sprawdzę na sprzęcie. Czekać, ale na co... ? Na konwersję Hmm.. no ok. Zatem Jaką mam pewność, że w przerwaniu od Timera nie będę czekał na tę konwersję? Nie mogę blokować "czasowo" funkcji przerwania od Timera... ja nie gotowa to ja olewasz i sprawdzasz w następnym przerwaniu. Ale oczywiście nie chodzi tu o ustawinie jakiejs...
Patrząc w Twój profil nie powinienem o to pytać, ale czasami warto: Czy na pewno diody na PORTB podłączyłeś we właściwym kierunku?
Flagi zeruj bezpośrednio po sprintf - wtedy dane w zmiennych nie są już potrzebne i można je zmienić. Dłuższe czekanie może powodować, że w momencie przyjścia przerwania flagi są ciągle ustawione - i gubisz dane. Dość łatwo to wykryć programowo, więc możesz sprawdzić czy taka sytuacja ma miejsce.
Proponuje oddzielić zliczanie czasu od wyświetlania, będzie czytelniej i dokładniej. Program główny niech zajmie się wyświetlaniem, a przerwanie tylko naliczaniem czasu. Następnie zmniejszyć ilość przerwań, poprzez ustawienie prescalera w rej. option, wpisując do niego 1 zmniejszasz liczbę przerwań dwukrotnie, przy 2 czterokrotnie, 3-ośmiokrotnie 4-szesnastokrotnie,...
Mozna znależć jeszcze wiele innych sposobów odpowiedzi na Twoje pytanie ale zawsze będą zależne od szerszego kontekstu. W PDP11 występował(puje) rozkaz EMT (emulator trap czyli pułapka emulatora), który jest przerwaniem programowym. O ile pamiętam (niekoniecznie, bo było to hohoho) miał on nawet swój wektor przerwania. W procesorach robionych pod javę...
1. Jakie prędkości masz po obu stronach? 2. Nie możesz tego zrobić sprzętowo? 3. Programowo robisz odbiór i nadawanie na przerwaniach i przepisujesz z jednego bufora dane do drugiego... 4. Jakie funkcje ma pełnić Atmega? Czy ma to być tylko monitor połączenia czy co?
5. Czy powinienem włączać linie SCL i SDA jako wyjścia lub wejścia poprzez ustawieniea w DDRC? Przy sprzętowej obsłudze TWI dzieje się podobnie jak przy sprzętowej obsłudze USART. Czyli włączenie mechanizmu sprzętowego powoduje automatycznie zmianę funkcji odpowiednich pinów transmisyjnych i wymusza ich działanie. Tylko przy programowej realizacji...
Elementem wywołującym pracę układu jest Switch S1 który zwierając port PB1 do masy wywołuję zewnętrzne przerwanie INT0 Uzywanie przerwania do styków butonnów, klawiszy i innych podobnych diabelstw jest najgorszym pomysłem. Temat był na tym forum poruszany setki razy - proponuje włożyć trochę wysiłku i użyć wyszukiwarki.
Albertb: Trudno, żebym pokazał kod, którego nie ma. Nie licz więc, że go zobaczysz. ;) Oczywiście chodzi o to, że pomiędzy pobraniem zmiennej - znacznika zdarzenia i uśpieniem z powodu stwierdzenia nieustawienia tego znacznika może nastąpić przerwanie, które ten znacznik ustawi - wtedy pętla zdarzeń uśpi procesor, a reakcja na zdarzenie nastąpi dopiero...
A może masz gdzieś funkcję obsługi tego przerwania? Dodano po 4 Dodam, że korzystam z programowego bufora cyklicznego, który w przerwaniach odbiera dane od UDR. Jedyne co mi przychodzi na myśl to to, że przerwanie tak szybko się wykona (odebranie danych do bufora i skasowanie flagi RXC), że część programu: while ( !(UCSRA & (1<<RXC)) ); nawet...
Ad1. PUSHF POP AX OR AX,0100h PUSH AX PUSH xCS PUSH xIP IRET gdzie xCS:xIP to adres pierwszej instrukcji która ma być śledziona Ad2. Przerwania sprzętowe czy programowe?
Wszystko pasuje, zastanawia mnie juz tylko jak została zrealizowana w uC inwersja i dlaczego transmisja jest z UART_CK - podejrzewam tutaj że jest to zrealizowane programowo, może w przerwaniu EXTI z linii UART_TX. Z ciekawości zapytam, czy na sąsiedniej nóżce czyli 2 (uart tx) też jest ta transmisja tylko nie odwrócona?
Generalni jest taki standard i podstawowe urządzenia i/o są pod tymi samymi adresami zawsze , szczególnie te które występują w przestrzeni 1k I/O procesora.Taki standard stworzył IBM i on jest zawsze zachowany w PC. Np. wszystkie karty graficzne są ze sobą sprzętowo zgodne do poziomu VGA . Co do procedur BIOS to zawsze były zgodne przez przerwania programowe....
Przerwanie od t1 nieblokowane lub w jego wnętrzu sprawdzasz flagę SPI i obsługujesz przerwanie programowo od SPI odbierając bajt
Witam, Czy da się w DOSie (freeDOS) wyłączyć jakoś zbędne procesy działające w przerwaniach procesora ? (COM, karta dźwiękowa, LAN, RTC i inne programowe których nie potrzebuję) Chciał bym by w każdym przerwaniu było jak najmniej zadań (jak najwięcej "wolnego miejsca")
Wartość początkową ustalam odejmując 256 i 125, stąd TCNT0 = 131. Dlaczego tak to liczysz? Używasz trybu normalnego Timera0. Timer 0 w trybie normalnym liczy od 0 lub wartości początkowej ustawionej w rejestrze TCNT0 do wartości 0xFF. Przy 8 MHz i podziale przez 256 obliczenia wyglądają następująco: 8Mhz/256 = 31 250 31 250/256 (od 0 do 0xFF) = 122...
Po pierwsze to system W2k (Czyli W2000) przejmuję całkowitą kontrolę nad urządzeniami fizycznymi, pozostawiając programom odwołania do kernela i API. Programy chcące wykożystywać sprzęt bezpośrednio mają zakaz z kernela używania bezpośrednio adresów we/wy i przerwań IRQ. Tak więc jeśli program chce wykorzystać port szeregowy w sposób bezpośredni - to...
ok,a jak sprawdzić długość pliku?czy trzeba znać strukture poszczególnych typów plików?jak w systemie FAT sa zapisywane własciwości danego pliku takie jak rozmiar,data utworzenia,itp...? http://en.wikipedia.org/wiki/File_Alloca... co w ogóle dzieje się (z assemblerowego punktu widzenia) gdzy wydajemy polecenie np. del plik.txt w DOSie? Tego...
Proponuję zrezygnować z obsługi klawiszy poprzez INTX, gdyż jest przeznaczone dla stabilnych i krytycznych czasowo sygnałów, a przyciśnięcie przycisku to ruletka impulsów, zwłaszcza, gdy już jest sporo czasu używany. Klawisze najlepiej sprawdzać cyklicznie, np. w procedurze obsługi przerwania, przypisując mu jakiś jednobajtowy kod i tworząc ogólny dekrementowany...
Przy 6 kHz to można się pokusić o zliczanie programowe - czyli podajesz sygnał na wejścia mogące generować przerwania. Z drugiej strony, skoro stosujesz ATMega32, to może prościej wykorzystać ATXMEGA32, gdzie w zależności od wersji liczników masz nawet 8 (albo 16 8-bitowych) i sobie to ładnie sprzętowo rozwiążesz.
Zgadza się. Na większości płytek jest 4k7 do +5, który dość skutecznie zastępuje 1k5 do +3.3. z grubsza chodzi o to, żeby przy podłączeniu na linii D+ pojawiło się napięcie nieco ponad 3V przy ściągnięciu w dół prądem ok 200uA. Stos USB z CubeMX nie wykrywa odłączenia, a funkcja Deinit() jest wołana tuż przed Init(). Są sposoby na wykrycie odłączenia,...
A co jest złego w odmierzaniu czasu i obsłudze wyświetlaczy w jednym przerwaniu? O ile nie masz typowego zegara RTC (na kwarcu 32768Hz), to właśnie ten sposób jest najlepszy. Zmiany wymaga natomiast Twoje podejście do tej kwestii. Program powyżej jest lekko chaotyczny. Nie rozumiem dlaczego sekundy potrafisz liczyć w 1 zmiennej, a do minut już potrzebujesz...
przerwanie programowe kodowanie programowe timery programowe
przewodność mosiądzu wygłuszanie pomieszczeń sprężyna siłownika krups
zgrzewarka transformatorowa renault mascott
DTR dla agregatu prądotwórczego ZE400/16 Andoria Gdzie znaleźć DTR dla silnika ZE400/16 Andoria?