Problemik z PWM i Przerwaniem Timera. Czy możliwe jest żeby PWM sobie działał, a Timer generował normalne przerwanie? Z tego za zauważyłem to nie bardzo. TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0); //8bit PWM, phase correct TCCR1B = (1<<CS12) | (1<<WGM12); TCNT1H = 0x57; TCNT1L...
W c to wygląda tak: Konfiguracja: [syntax=c]PCFwrite(0x00, 0);//kasowanie testc PCFwrite(0x01, 0b00000001);//tie PCFwrite(0x0f, 64); PCFwrite(0x0e, 0b10000001);//64hz [/syntax] I w procedurze obsługi przerwania kasowanie flagi [syntax=c] PCFwrite(0x01, 0x01);// tf=0 [/syntax]
Witam. Słabo znam angielski i w związku z tym bardzo proszę o pomoc, bo nie wiem, czy mogę zastosować preskaler 128. W helpie Bascoma takowy nie widnieje. Pozdrawiam Moderatora również pozdrawiam :)
W C program autora tematu wyglądałby tak: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> ISR(TIMER1_COMPA_vect) { PORTB ^= (1 << PB1); //zmień stan na przeciwny } int main(void){ TCCR1B |= (1 << WGM12) | (1 << CS12) | (1 << CS10); // Timer1 CTC, prescaller 1024 OCR1A = 0x3D08; // okres TIMSK1 |= (1 <<...
Wybierz prescaler większy bądź równy 128 i wartość porównywania na '8000000/prescaler' Kolega chyba zapomniał , że TIMER2 jest tylko 8-bitowy :( Ja natomiast zaproponuje F_CPU/256/250 czyli ,F_CPU=8000000 , preskaler=256,OCR2=249 i co 125 przerwanie , mamy sekundę.Timer 2 w trybie CTC.Cały zegarek , łącznie z tymi 10 porównaniami czasu , można spokojnie...
Witam, ostatnio podłączyłem do Atmegi wyświetlacz od nokii 3310 i postanowiłem pouczyć się trochę timerów i przerwań. Chciałem napisać prosty programik liczący impulsy i wyświetlać je na LCD. W przerwaniu od INT0 zliczam impulsy, a w drugim przerwaniu co sekundę przepisuje ilość impulsów do zmiennej i kasuję liczbę impulsów. Problem pojawia się gdy...
Część nie związaną z tematem, usunąłem. ________________________________________... Jakby ktoś miał z tym problem, to zamieszczam działający kod: Timer TC0 generuje 100 przerwań na sekundę, dzięki czemu mam 100Hz wyświetlacz. Funkcja obslugi przerwania (plik main.c): __ramfunc void przerwanie (void) { odswiez ();...
Chodzi o to że chcę sobie napisać układ czasowy w oparciu o instrukcję sterująca switch w, której warunkami przejścia do kolejnego stanu będzie odliczony czas tylko nie wiem jak to zrobić może ktoś robił podobny program proszę o pomoc. Poniżej przedstawiam przykładowy kod jakby to miało wyglądać. [syntax=c]int stan=1, tim=5; while(1){ switch(stan){...
Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka z Arduino. Temat oczywiście nie zastąpi w pełni czytania noty...
Witam. Natrafiłem dziś na problem z przerwaniem. Mianowicie mam DS18B20, LCD, UART i timery. Program wygląda tak, że temperatura z DSa jest wyświetlana na LCD, wszystko gra. Mam też przerwanie, w którym co sekundę wysyłane jest 6 bajtów do kompa (przez UART). Przerwanie jest od Timera co 1 sekundę. Wszystko gra do czasu. W pewnym momencie program sie...
Witam Jestem początkujący jeśli chodzi o mikrokontrolery. Jakiś czas temu zaczął mnie nurtować jeden problem. Robię projekt, który robi za termometr i zegarek oraz ma klawiaturkę 4 przyciskową do obsługi interfejsu. Później ma być jeszcze dodany czytnik kart microSD. Czujnik temperatury/wilgoci ma obsługę w postaci 1wire i wykonuje pomiar co 10sek jak...
Dzień dobry Koledzy. Piszę kod w C#.NETMF dla STM32F429I-DISC1. Próbuję zrealizować takie działanie w którym wykorzystuję metody klasy UIElement. Jedna z metod obsługuje zdarzenie dotknięcia panelu dotykowego. Druga z metod ("Invalidate();") pozwala aktualizować treść wyświetlacza. Do tego mam timer który co sekundę generuje przerwanie inkrementujące...
Tak właśnie myślałem że używanie przerwań i poleceń wait nie jest dobrym rozwiązaniem. Dzięki za odpowiedź. To nie ma nic wspólnego. Po to są przerwania żeby w ten sposób z nich korzystać. Natomiast twój problem bierze się z całkowicie czegoś innego. Po prostu tak napisałeś przerwanie i tak często je wykonujesz, że u ciebie w tym konkretnym przypadku...
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...
proponuje trochę policzyć i nie panikować, przerwania ustawiają flagi, obsługiwane są jeżeli tylko znacznik "I" na to pozwala. jeśli obsługa 1-nego przerwania zwiększać będzie tylko pewien licznik, a nawet gdyby miało to zająć 100-cykli i tak wszystkie 3 przerwania to 8.000.000 (8MHz)/100/3=prawie 27kHz. wątpię aby tak szybko następował wtrysk i przychodziły...
Witam. Próbuje napisać zegarek na PICu. Używam oscylatora 4 MHz. Nie wiem jak zrobic odliczanie jednej sekundy. Pisałam o tym na innym forum i otrzymałam taka odpowiedź: "Jeśli używasz kwarcu 4 MHz to ustaw preskaler na dzielenie przez 64. W takim przypadku do licznika/timer'a będą przychodziły impulsy o częstotliwości 15625 Hz (1000000 / 64 = 15625)....
Od razu mówię że kasowanie bitu nr 6 w rejestrze GICR nic nie daje, bo jedynie ukrywa przerwanie przed procesorem do czasu włączenia przerwania. Bit ten jedynie ukrywa przed procesorem ustawienie flagi. Flaga jednak i tak zostanie ustawiona przy zmianie stanu pinu PortD.2, nawet jeżeli wyłączy się przerwanie. I jeżeli włączy się przerwanie to procesor...
Tak wiec plik glowny wyglada to nastepujaco #include <at89c5131.h> #include "zmienne.h" #include "funkcje_lib.h" extern GET_KEY(); BYTE Tablica[10]; //Tablica[0] sekundy //Tablica[1] minuty //Tablica[2] godziny //Tablica[3] dni void RTC_INIT() { RCAP2H =(0-10000)>>8; // licznik zlicza impulsy RCAP2L = (0-10000); // opoznienie 10ms - sprawdzone...
Pozwól niech się "samo" zmierzy i wydaje mi się że nazwy są zakrutkie(A to przecież akumulator - daj dłuższe np. przerwanie0) do cls lcd "dlugosc:";impulsy waitms 100 loop przerwanie0: disable int0 enable int1 stop timer0 impulsy=counter0 return przerwanie1: disable int1 enable int0 counter0=0 start timer0 return i musi się coś...
Co do reszty programu to nie będę marudny bo to Twoje początki. Natomiast z pewnością zmień podejście do flagi. Flagę w przerwaniu powinieneś tylko ustawiać. Natomiast w pętli głównej sprawdzasz czy flaga jest ustawiona. Jeżeli tak to wykonujesz przypisany jej kod i ją kasujesz. W tej chwili co sekundę (zakładam, że timer skonfigurowany poprawnie)...
Twój 100% działający i pewny kod też jest do kitu. Przerwanie blokuje wszystkie inne akcje procesora na 2 s. Po co siedzisz w przerwaniu 2 sekundy, skoro masz tylko mrugnąć diodą ? Teraz być może to jeszcze dla Ciebie nie problem. Ale jak program rozbudujesz - kilka przerwań, coś konkretnego w programie głównym - zrozumiesz. PRZERWANIA MAJĄ BYĆ KRÓTKIE...
[syntax=basic4gl]Config Timer0 = Timer , Prescale = 1024 Enable Timer0 : On Timer0 Przerwanie0 Dim Tmp As Word Tmp = 0 Dim Ptimer1 As Word Ptimer1 = 0 Do If Klawisz = 0 Then If Ptimer1 = 0 Then Ptimer1 = 100 End If If Ptimer1 < 95 And Klawisz = 0 Then Tmp = 1 End If End If If Tmp = 1 And Ptimer1 < 85 And Ptimer1 > 70 Then If Klawisz = 1 Then...
Chciałbym napisać przerwanie do mojego programu zegara. Chcialbym aby przerwanie bylo wywolywane zmiana jednego pinu tzn zmiana PINA4 z 1 na 0. Gdy zmienie ten przycisk chcialbym aby wykonalo sie przerwanie. oto moj KOD: int main(void) { char B1; DDRA=0x00; DDRD |= (1 << PD1); LCD_Initialize(); TWI_Init();...
Witajcie ! Wiem, że temat był wielokrotnie sygnalizowany na forum, przejrzałem wszystkie tematy z tym problemem związane i niestety nie uzyskałem satysfakcjonującego rezultatu. Cała idea jest w tym, żeby całą obsługę odczytu temperatur z 4rech DSów, połączonych na oddzielnych liniach, wcisnąć w obsługę przerwań. Krótko mówiąc, chodzi o to, aby odczyt...
Timer 8-bitowy przepełnia się po zliczeniu do 256 a preskaler dzieli maksymalnie przez 1024 więc z prostego mnożenia wynika, że częstotliwość zegara, która spowoduje przepełnienie timera po 1 sekundzie to 1024x256=262144 Hz. Jeśli taktujesz mikrokontroler wyższą częstotliwością to na tym timerze nie zrobisz przerwania co 1 sekundę. Oczywiście timer...
Witam mam dość dziwny problem z przerwaniami w tym procesorze. Jestem jeszcze zielony jeśli chodzi o przerwania i dlatego będę wdzięczny za każdą pomoc. otóż problem pojawia się z takim kodem: #include "lpc213x.h" #include "clcddisp.h" #include "armint.h" CLcdDisp cout;//utworzenie obiektu klasy do wyswietlania void IrqTimerHandler(void)...
Witam :) Próbuje odpalić tryb CTC na Atmega8-przerwanie co 5ms i nie mogę sobie poradzić pomimo czytania PDF.Mało rzeczy robiłem na przerwaniach a jeśli już to na Atmega32 gdzie korzystałem z tego: Przerwanie co 5ms więc mam 1 sekundę. ATMEGA32: [syntax=c] TCCR0 |= (1<<WGM01); tryb CTC TCCR0 |= (1<<CS02)|(1<<CS00); preskaler = 1024...
Witam forumowiczów, Natknąłem się na pewien problem, z którym nie wiem jak sobie poradzić. Sprawa dotyczy nieprawidłowej obsługi przerwania INT0 podczas wykonywania komend sterujących wyświetlaczem LCD. Do Atmega32 podłączone są: - standardowy wyświetlacz LCD, - źródło impulsów (dokładniej jest to liniał cyfrowy), - przyciski. Impulsy wprowadzone na...
Pewne funkcje są wykonywane zarówno w przerwaniu jak i w programie głównym, konkretnie komunikacja po SPI. Aby między sobą się nie gryzły (te w głównym i te w przerwaniu) i aby w programie głównym nie używać ATOMIC_BLOCK, dzięki czemu działają inne przerwania, chciałem wykonywać pewne operacje w sztucznym przerwaniu. Mogę oczywiście blokować w programie...
Witam Napisałem poniższy prosty program który po 6 zmianach stanu na nóżce int0 (PB2) wykonuje przerwanie. include "tn15def.inc" .def acc = r16 ;nadanie rejestrowi r16 nazwy symbolicznej .def licz1 = r20 .def licz2 = r21 .def licz3 = r22 .org 0x00 rjmp pocz .org 0x06 rjmp timer0 .org 0x0B ; -- POCZĄTKOWE USTAWIENIA SPRZĘTOWE -- pocz: ldi...
Witam, mam problem z uzyskaniem przerwania od licznika. Program w ogólności ma co mniej więcej sekundę na przemian zapalać i gasić diode. Licznik jest w trybie porównania do wartości 156. Częstotliwość oscylatora to 4 MHz, przeskalowana przez 256. Program niestety nie chce wejść w przerwanie. Może któryś z bardziej doświadczonych forumowiczów jest w...
To co piszesz jest słuszne i mądre, widzisz, jest tylko jeden problem - soft jest skomplikowany bardziej niż by się wydawało, atmega8 ma tylko 8kb flash a wszystkie przerwania Atmega8 są zajęte (w tym timer1 do zliczania pojedynczych sekund, int1 i timer2 wykorzystywany przez getrc5). Oczywiście zawsze można skonfigurować bufor wejściowy, np. gdy spodziewamy...
Wrzuć poprawiony kod to zapewne powiemy ci dlaczego serwa nie reagują. Przerwanie masz wykorzystać jedno - ovf timera. Na początku przerwania odczytujesz ADC (który zawiera wynik konwersji, która zakończyła się wcześniej), po czym startujesz kolejną konwersję ADC i kończysz przerwanie. Wyniki uśredniasz tak jak pisze kol. BlueDraco. Czy wartość pobrana...
Cześć, postanowiłem zmienić swój stary model Atmegę16A na nowszą wersję więc zakupiłem Atmegę168A-PU. Problem w tym, że za żadne skarby nie mogę zrobić na niej choćby prostego mrugania diodami za pomocą przerwań. Połączenia są zrobione dobrze, konfiguracja również. Ustawiony jest preskaler, uruchomiona globalnie obsługa przerwań, ustawiona jest odpowiednia...
Witam, Laptop HP po włączeniu odpala na dwie sekundy (zapali lampki, odpali wentylator) i gaśnie. Nie daje sygnałów dźwiękowych a przeważnie w takich sytuacjach sam coś potrafił komunikować dźwiękiem itd. Czasem wyjęcie i włożenie baterii pomagało. Próbowałem odpalić bez baterii, na baterii samej itd. wyjmowałem i wkładałem ram i dalej problem. Gdyby...
Witam, w moim programie na atmegę 32 wykorzystałem timer0 oparty na zegarze procesora (8MHz) aby uruchamiać pewną funkcję ok. 100 razy na sekundę. Do programu postanowiłem dodać obsługę zewnętrznego kwarcu zegarkowego 32768Hz aby móc mierzyć w miarę dokładnie czas przy użyciu timera timer2. Po dopisaniu komend do obsługi kwarcu żaden timer nie działa....
Witam, Problem mam następujący: poskładałem komputer wszystko chodzi elegancko poza jedną sprawą, przerwania systemowe obciążają procesor do 70-80% :-( Sterowniki aktualne, BIOS aktualny... Zabrakło mi już pomysłów, a na forach nic pomocnego nie znalazłem... W innych miejscach proponowano: defragmentacje, aktualizacje, itp... Jestem na Windowsie 10...
Pierwszy raz używam debugera. Program leci po kolei i zapętla się w while. Program według mnie powinien co sekundę,naprzemiennie zaświecać i gasić diodę led. Dioda działa,program nie chce mi wejść w przerwanie.
Jeżeli Atmega1280 ma kwarc 16MHz to czy w świetle powyższego znaczy, że zewnętrzne przerwanie INT0 może być wywołane nawet 16 razy na mikro sekunde? Odpowiedź krótka: nie. Odpowiedź długa - to zależy. :) Zależy od tego, co rozumiesz przez wywołanie przerwania 16 razy na sekundę. Nie da się obsługiwać przerwań z taką częstotliwością, bo raz, że samo...
Witam. Do Atmegi mam podłączony enkoder z drukarki na INT0 (obsługuje przerwanie). oraz rs232 , który komunikuje się z aplikacją na PC(też przerwanie). Opcja pierwsza: czytam dane z enkodera manualnie : mam o programie guzik "daj dane". Gdy kręcę enkoderem jak szalony to w lewo to w prawo a potem wciskam guzik "daj dane" to dostaje to co trzeba - znaczy...
Witam Mam mały problem z wykryciem przerwania na jednym z pinów A2560. Otóż jest tak: normalnie przerwania konfiguruję i wykrywam tak: On Int7 Readir Config Int7 = Low Level Enable Int7 Ale teraz muszę wykryć przerwanie na pinie z opisem: OC2A/PCINT4 Pod ten pin mam podłączone wyjście INT z PCF8583P i przerwanie powinno następować dokładnie co 1 sekundę.I...
Witam 1.Czy używając semaforów lub kolejek w przerwaniach, minimalny czas odebrania takiego semafora, lub kolejki wynosi Tick, czyli 1 ms? Czyli w teorii max 1000 razy na sekundę..? 2. Jakie niebezpieczeństwo niesie za sobą obsługa całego przerwania w przerwaniu np od USB, nie używając semaforów lub kolejek. No bo działać to działa. 3. Co jeśli: -obsłużę...
Witam, to mój pierwszy post na forum, więc na wstępie chciałbym się przywitać :) Uczę się programować mikrokontrolery AVR, korzystam obecnie z ATmegi88. Z uwagi na mniejszą popularność mojego mikroprocka korzystam z poradników dla ATmegi8. Mam problem z obsługą przerwań Timera. Podpinam dwie diody, obie mają za zadanie zapalać się co 1 sekundę - jedna...
Ciekawe, jak Ci ten ADC "szczytuje"... ;) Przerwanie z ADC nie przychodzi "jak się coś zmieni", więC jednak trzeba to zrobić na timerze. zastanów się, jak często chciałbyś rejestrować zmiany położenie potencjometrów - wydaje mi się, że 10..100 razy na sekundę. Odpalaj konwersję obu kanałów na przemian w przerwaniu timera, a w następnym przerwaniu odczytuj...
Pierwsza rzecz - Timer2 jest 8-bitowy a nie szesnasto jak Timer1. Czyli jego pojemność to 2^8=256. Bierzemy maksymalny prescaler 1024. Otrzymujemy częstotliwość 15625 czyli timer będzie się przepełniał około 61 razy na sekundę. Wcześniej tą częstotliwość zwiększaliśmy, a teraz chcemy zmniejszyć. Najprościej to zrobić tworząc sobie ulotną globalną zmienną...
A nie łatwiej jest policzyć DO ilu ma liczyć a nie OD ilu? :) i robić przerwania COMP a nie OVF? Ja tak robię i na kwarcu 4MHz timer1 odlicza sekundy bardzo ładnie. Ale u Ciebie timer1 wydaje się mieć dobrze ustawianą wartość. Przy prescalerze 256 musisz mieć 15625 taktów zegara, aby osiągnąć sekundę. W drugim coś mi nie gra. Odliczasz od 0x0F czyli...
Tak też robię :) Wszystko się zgadza oprócz tego, że nie sprawdzam przerwania po I2C. Kwestia jest taka, że ten zegar generuje przerwanie jednokrotnie, więc w obsłudze przerwania w procesorze trzeba ponownie ustawić pewne flagi by zegar wygenerował kolejne przerwanie za sekundę i tak w kółko. Problem w tym, że nie wiem czemu po pewnym nieustalonym czasie...
Działający kod, dioda zmienia stan co sekundę. #include<avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000 char licznik = 0; //zmienna dla licznika programowego int main(void) { TCCR0 = 0x05; //(1 << CS02) | (1 << CS00); prescaler na 1024 TIFR |= (1 << TOV0); TIMSK |= (1 << TOIE0); // aktywne przerwanie overflow...
Mikrokontroler taktowany jest 2.66MHz, więc jeśli TOP określimy na 26666 to przerwanie powinno być 100 razy na sekundę. R
Kolega nelik nic nie pisał o wymaganiach do sterowania tym silnikiem, więc odnosiłem się tylko do jedynych konkretnych pytań, czyli dlaczego gcc wyrzuca błąd i jaka funkcja pozwala czekać krócej niż sekundę. Jeżeli natomiast chodzi o sterowanie silnikiem, to z praktycznego punktu widzenia, sterowanie z PC-ta bezpośrednio przez LPT jest takie bardziej...
Zagląda ktoś do tego tematu?? Poprawiłem się odnośnie pisania tego co chciałem zrobić. Kod wygląda tak: [syntax=c] #include <8051.h> #include <stdio.h> unsigned char gStanPracy=0; /* //Zwloka s sekund void sleep (unsigned char s) { //static unsigned char gStanPracyPoprzedni; unsigned char i, j, k; for (; s; s--){ for (i = 0; i <255; i++){...
Witam, Problem dotyczy zakłóceń powstających na skutek włączenia światła, jakiegoś urządzenia do sieci elektrycznej w budynku. Za pomocą takich transmiterów: (VGA po UTP) Sygnał jest przekazywany z wyjścia VGA z rejestratora CCTV (NVR) - przez skrętkę UTP do drugiego transmitera, podłączonego do monitora LCD 21 cali. Transmitery są elementami pasywnymi...
Witam. Próbuje uruchomić program testowy, który polega na tym, że po wysłaniu na RS-a liczby 2 dioda zapala się na okres 1 sekundy i na ten sam czas również gaśnie przez okres 30 s. Wysyłanie na port szeregowy wykonuje za pomocą przerwania z USART. Odmierzanie sekund z przerwania Timera w trybie asynchronicznym(RTC). Program nie działa, bo mam problem...
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Napisałem coś takiego (oczywiście to część z większego projektu) '$sim $regfile = "m8def.dat" 'informuje kompilator o...
witam. potrzebuję odmierzyć równo 1 sekundę, przykład wziąłem z kodu :
Też tak myślałem ale tak się nie dzieje. Najwyższy priorytet ma przerwanie od Timera 0, potem przerwanie od sekund zegara RTC i na koniec dopiero przerwanie od EINT1. Program się uruchamia prawidłowo i zawiesza się tak jak pisałem wcześniej po kilku sekundach. Przerwań od EINT1 wogóle nie uruchamiam. Zapewne masz rację z tym, że adres powrotu jest zamazywany...
Nie wiem czy dobrze zrozumiałeś ideę wykożystania przepełnienia od licznika w tego typu wyświetlaniu, więc po kolei: - napewno wiesz że przy wyświetlaniu multipleksowym w danej chwili świeci tylko jedna cyfra, aby uzyskac efekt świecenia wszystkich trzeba kilkadziesiąt razy na sekundę zapalac kolejne cyfry. Częstotliwośc przerwań od licznika dobierasz...
Witam, piszę całkiem spory (w moim mniemaniu) program do sterowania silnikiem i paroma jeszcze innymi rzeczami (aktualnie na ATmega32L i 8MHz wewnętrznego oscylatora) i mam niezrozumiały dla mnie problem z obsługą przerwania od timera, kod obsługi przerwania wygląda mniej więcej tak: ... .org 0x0012 rjmp t1Ovf ... t1Ovf: push r16 push r17 in R16,...
Mam do zrobienia program o następującym działaniu: przerwaniem zewnętrznym (INT0) uruchamiam całą machinę - czas zaczyna być mierzony, kolejnym przerwaniem zewnętrznym (INT1) robię STOP, i w tym momencie wynik powinien być wyświetlony na wyświetlaczu LCD. Niestety jak chce odpalić program już na płytce to się nic kompletnie nie dzieje. Zapewne coś jest...
Witam ,napisałem program który ma odmierzyć czas lotu helikoptera (do wyczerpania bateryjki) ,niestety po 2 tygodniach utknąłem na czymś takim: $regfile = "attiny2313.dat" 'wybór procesora attiny2313 $crystal = 8000000 Config Pinb.0 = Output 'dioda sygnalizująca odmierzenie czasu Config Pinb.1 = Output 'buzzer mający piknąć 3 razy po odmierzeniu...
oprócz zmiennej temp reszta czyli aż int0_flag jest volatile większa cześć kodu jest z słynnej ostatnio książki na forum. jeszcze nie zdążyłem za dużo pozmieniać [syntax=cpp] /* * main.c * * Created on: 2012-02-14 * Author: Jacek */ #include <avr/io.h> #include <stdlib.h> #include <avr/pgmspace.h> #include <avr/interrupt.h> #include...
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...
żartujesz chyba. Dokładność 1% dla ADC w ATmega to tak w sam raz, a Ty marudzisz o 0.5%. Do wyświetlania nie ma sensu pobierać nowego odczytu częściej niż 2..3 razy na sekundę.
Witajcie moi drodzy Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części zademonstruję jak używać wyświetlacza 7-segmentowego z PIC18F2550 . Kod obsługi wyświetlacza będzie oczywiście napisany w oparciu o przerwania i timery . Cały proces powstawania układu na płytce stykowej oraz programu na PICa przedstawię krok...
Myślę, że pierwsze podejście jest jak najbardziej poprawne. Chodzi o to by po pierwszym przerwaniu wystąpił jakiś czas nieczułości na kolejne przerwanie zewnętrzne. Może on być nawet znacznie dłuższy- nie sądzę by ktoś chciał klikać przycisk do wyświetlania kilka razy na sekundę. Wybudzanie mikrokontrolera cyklicznie co 400ms z pewnością nie poprawi...
Co ile masz przerwanie od timera bo jak się domyślam stan klawiatury odczytujesz kilkadziesiąt razy na sekundę?? Napisze to po raz kolejny: Wywal odczyt po IIC klawiatury z obsługi przerwania!!! I rób to tak samo jak odczyt czasu w programie głównym na podstawie flagi. Po drugie po co odczytujesz za każdym razem czas z PCF'a??? Skoro masz przerwanie...
Mam taka procedure przerwania: Przerwanie: If Z_lampa = 0 Then 'jesli jest zgoda na zalaczenie lampy Incr Cz_lampa If Cz_lampa >= 12 Then 'jesli uplynela 1 sekunda troche mniej Cz_lampa = 0 'wyzeruj czas lampy If Prz_lampa = 0 Then Set Prz_lampa Else Reset Prz_lampa End If End If End If If Z_tr = 0 Then 'jest zgoda na zalaczenie transformatora mocy...
Atmega jest taktowana zewnętrznym kwarcem 12MHz, żeby jeden tick timera trwał ~1us. 1. Czy timer 8-bitowy przyjmujący zewnętrzne impulsy, może je przyjmować w takich samych odstępach czasowych jak 16-bitowy? Niestety na etapie projektowania nie zauważyłem, że żeby użyć 16-bit timera do przyjmowania impulsów zewnętrznych należy użyć nóżki T1, a nie T0,...
Witam Mam dziwny problem. Do STM32F103RBT6 podłączyłem sobie RTC PCF8563. RTC generuje mi sygnał o częstotliwości 1Hz który wyzwala przerwanie w ARMie. I tutaj pojawia się problem. Niektóre zbocza są jakby pomijane i nie generują przerwania. Taką samą sytuację miałem kiedy wykorzystywałem przerwanie wewnętrzne RTC_IT_SEC. Przerwanie nie zawsze było...
Witam, próbowałem ostatnio przenieść mój program (wyłącznik czasowy) z Atmegi8 (działa idealnie) na Atmegę16 (gdyż ma więcej "nóżek"). Problem pojawił się przy pierwszym uruchomieniu - w miejscu, w którym uruchomione zostają przerwania program się resetuje. Zaznaczam od razu iż spędziłem wiele godzin szukając odpowiedzi w internecie, znalazłem nawet...
Witam! Napisałem sobie obsługę klawiatury matrycowej 3x4 w bascomie. Nie używam umieszczonej tam funkcji getkb(), ponieważ podłączona jest do różnych portów. Sprawdzanie wciśniętych przycisków chcę przeprowadzić w przerwaniu od wewnętrznego zegara TIMER0. Na ATmega32 wszystko bez problemu działa. Płytka, pod którą to robię działa niestety na ATmega8515....
Program do kompilacji pod Free Pascala pod DOSa. Założenie jest takie : program ma zmieniać godzinę w czasie systemowym o +1 po naciśnięciu strzałki do góry i odpowiednio o -1 po naciśnięciu strzałki w dół na klawiaturze. Wymyśliłem sobie to tak: 1. odczytam aktualną godzinę ( przerwanie 21h funkcja 2Ch) 2. dodam lub odejmę 1 3. zapiszę poprawionę godzinę...
Nie ma szans. Chyba że zapis np. 100 pomiarów na raz zajmie mniej niż 200ms równolegle z prowadzeniem pomiarów (czyli prowadzenie pomiaru nie wydłuża czasu zapisu). Bo jak na razie masz sytuację - do bufora ładujesz co 2ms dane, a kasujesz na drugim końcu co 40ms. Czyli po każdych 40ms do bufora wpisałeś 20 pomiarów, a zdjąłeś tylko jeden. W ten sposób...
Jakiej precyzji oczekujesz? Bo .... w sumie najprostszym rozwiązaniem jest zliczenie ile razy wystąpi int0 (możesz zmienić konfiguracje aby reagować na każda zmianę stanu) a licznik można skonfigurować aby dawał przerwanie co 1/32 sekundy i w przerwaniu konwertować ilość impulsów na RPM: ilosc_impulsow/czas_akwizycji/ilosc_impu... co przy...
Chciałbym aby ktoś mi napisał prosty program z wykorzystaniem przerwania. aby wskakiwał do niego co określony czas np 1 sekundę by niezależnie co dzieje się w programie co Np sekundę czy 5sek wyskakiwał do procedury przerwania czyli przerwanie wykonywane co określony czas a nie na podstawie wymuszenia stanu logicznego na pinie do loop przerwanie: Mam...
witam. Ten post powinien znależć się raczej w dziale mikrokontrolery - a nie tutaj tam szybciej uzyskasz odpowiedz na to pytanie. Jezeli chodzi o licznik to wyglada to tak: timer zgłasza przerwanie w moencie przepełnienia (przejście z FFFFh na 0000h ) najlepiej zeby pracował jako 16bit w trybie zliczania imp. wewn zegara. nie wiem czy dobrze obliczyłem...
Już działa:) Jeżeli chodzi o same ustawienia i inicjalizację Timera0 oraz przerwań to okazało się tak jak mi się wydawało że wszystko miałem dobrze. Jak zwykle w takich przypadkach błąd okazał się błahy i leżał w zupełnie innym miejscu. Otóż przy definiowaniu wektorów przerwań nie używałem definiowania ".org". Początek mojego programu wyglądał tak:...
Prywit! Mam problem z obsługą przerwania zewnętrznego. Do pinu INT0 podłączyłem włącznik zwierający do masy. Jak widać w programie podciągnąłem końcówkę do plusa. Do pinów C.1; C.2; C.3 podłączyłem diody LED do zobrazowania problemu. Napisałem taki oto krótki program i jestem zdziwiony działaniem. Po uruchomieniu programu dioda podłączona do pinu C.1...
Z tego co zauważyłem, mikrokontroler taktujesz częstotliwością 1MHz. Przy preskalerze 1024 częstotliwość taktowania timera będzie równa 1000000Hz/1024=976,5625Hz. Z tego wniosek, że w ciągu 1 sekundy timer zlicza 976,5625 impulsów. Biorąc pod uwagę, że timer jest 16-bitowy przepełni się 1 raz na (65536/976,5625) 67,108864 sekund. Jeśli nie musisz schodzić...
Witam zrobiłem sobie prosty odmierzacz czasu na atmedze8 i wyświetlaczu hd44780 i wszystko jest prawie ok, tylko że jak sekundy są mniejsze niż 10 to wtedy wyświetlać np. 0:58:09 to wyświetla 0:58:90, nie mam pojęcia jak to naprawić, ma ktoś jakiś pomysł? [syntax=cpp] #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h>...
Witam, Chcę skonfigurować timer tak aby po określonym czasie zostało wygenerowane przerwanie(jednokrotnie), fragment kodu: [syntax=c]TIM4->PSC = 7200; TIM4->ARR = 10000; TIM4->DIER = TIM_DIER_UIE; TIM4->CR1 |= TIM_CR1_URS | TIM_CR1_OPM | TIM_CR1_CEN; NVIC_EnableIRQ(30);[/syntax] obsługa przerwania: [syntax=c]__attribute__ ((interrupt)) void TIM4_IRQHandler(void)...
Witam, popełniłem takowy program do sterowania ogrzewaniem i zapętliłem się nieco na funkcji start/stop odliczania pozostałego czasu do wyłączenia urządzenia. Poniżej fragment kodu: [syntax=basic4gl]'----------------------... GLOWNA----------------------------------... Do If Flaga_4ms = 1 Then 'co 4ms Flaga_4ms = 0 End If If Flaga_100ms =...
Witam, mam problem z programem na mikroprocesor. Na początek dodam, że prototyp, zanim poszedł w odstawkę pół roku temu działał prawidłowo. Program w tym momencie ma za zadanie wyświetlić 4 zmienne na wyświetlaczu. Uruchomienie przerwań zawiesza program. W zależności od tego kiedy zostaną rozpoczęte, skutkuje to innym efektem. Umieszczając sei(); na...
Może faktycznie szum nałożony na zbocze jest tu przyczyną wielokrotnego wywołania przerwania przy jednym impulsie. W poniedziałek przyjrzę się dokładniej temu zboczu i spróbuje coś zaradzić. Ale z drugiej strony gdyby tak było, to dlaczego impulsy zliczane są prawidłowo wtedy gdy program okrojony jest do minimum? Jaka jest szerokość impulsu? Maksymalna...
Witam, przesymulowałem sobie pierwsze 8 minut działania zegarka. Dokładnie patrzyłem (wartość Stop Watch w symulatorze), kiedy wchodzę do obsługi przerwania. W ciągu tych 8 minut (odpowiada to 12.000 wywołań tego przerwania) błąd był niewidoczny, tzn. symulator nie był w stanie stwierdzić wahań, tj. resztkowe opóźnienie wynosi poniżej 10 ns (najmniejsze...
Odległość napisałem, w pierwszym poście max 40 cm. czasami może bym potrzebował parę cm więcej ale to nie problem nawet przy odległości metra. Jak szybko ma to zadziałać najlepiej od razu czyli tryb multiplexingu nie wiem czy by zadziałał w moim przypadku. 10mm to za dużo, max 5mm - 6mm jeszcze bym przyjął. Ale w zasadzie to nie problem bym zrobił to...
Nadal nie wiem w czym konkretnie problem. Procedura obsługi przerwania od timera musi tylko co 1/2 sekundy przełączyć stan pinu na przeciwny oraz na nowo załadować timer. Nie wiesz jak przy taktowaniu 4MHz odmierzyć 1/2 sekundy, czy nie wiesz jak w ogóle wywołać przerwanie od timera i jego obsługę w ATMEGA128?
Witam ! Zwracam sie z prosba o rade w sprawie obslugi przerwań. Jestem na ukonczeniu projektu termometru na AT89S52 w ktorym mają działac dwa przerwania - wewnetrzne od timera ktory zapisuje wyniki 10 kolejnych pomiarow do pamieci wewnetrzej u-kontrolera oraz zewnetrzne od przycisku - microswitcha ktory powoduje wypisanie zapisanych wynikow z pamieci...
To dziala idealnie i wlasnie o to mi chodzilo. Dzis probowalem poskladac to w calosc i niestety znow mam problemy :| Mianowicie nie wiem gdzie umiescic odczyt zegara I2C i wyswietlanie na LCD. Myslalem, ze odpowiedni do tego bedzie Timer0 i oto wiekszy fragment kodu: #defineTIMER0_CLK 0x01// 1<<CS00 #defineTIMER0_CLK_8 0x02// 1<<CS01 #defineTIMER0_CLK_64...
Witam, W chwili obecnej pracuje nad termometrem, sterowanym na pilota. Pilot wysyła dane w kodzie RC5. Wysłane dane trafiają na odbiornik podczerwieni TSOP31236 (36kHz). W momencie gdy dane nie docierają na wyjściu odbiornika jest stan wysoki, gdy odbierze jakiś sygnał na wyjściu jest poziom niski. Wyjście odbiornika podczerwieni jest podpięte do wyjścia...
Za dużo kodu w przerwaniu + z obsługi przerwania wywołujesz podprogram = obsługa przerwania trwa za długo, nakładają się kolejne przerwania, stos się przepełnia. Spróbuj tak (wykorzystałem Twoją zadeklarowaną, a nie używaną flagę): $regfile = "m8def.dat" $crystal = 8000000 '$sim Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2...
Otóż zliczam czas na timerze 2 i co 1 sekundę generuje mi przerwanie obsługiwane w procedurze signal. Jednak gdy jestem w menu które wywoływane jest za pomocą przerwania: ISR_BLOCK, czas nie jest liczony. Jak zrobić by priorytet przerwania Timera2 był większy niż przerwania zewnętrznego. Nie mogę ustawić ISR_NOBLOCK bo zapcham szybko stos. Czy w AVR...
Witam serdecznie. Piszę program, w którym muszę zliczać przychodzące impulsy z licznika energetycznego do procka. Aby nie zliczać impulsów pochodzących od drgań styków wymyśliłam takie rozwiązanie. Jeśli na INT0 przyjedzie zbocze opadające, włącz licznik T0. Gdy licznik przepełni się- minie 32ms i w tym miejscu będzie poziom niski na pinie, to atmega...
Witam! Uczę się Bascoma i postanowiłem napisać "stoper" sterowany z pilota (pilot nadaje w standardzie rc5). Najpierw napisałem pętlę odpowiadającą za ustawienie stopera za pomocą pilota. Zrobiłem to za pomocą przerwania INT0. Wszystko działało jak należy. Problem się zaczął jak skonfigurowałem timer0 do pracy jako timer. Program przestał reagować na...
[syntax=c] #include <avr/interrupt.h> #include <avr/io.h> #include <util/delay.h> #define LED_DATA PORTB #define LED_SEG PORTD #define SEGA (1<<0) #define SEGB (1<<1) #define SEGC (1<<2) #define SEGD (1<<3) #define SEGE (1<<4) #define SEGF (1<<5) #define SEGG (1<<6) #define SEG_DP (1<<7)...
Witam, Chciałbym napisać program (w Codewarriorze) który na wyświetlaczu 2x16 na grónej linijce będzie odliczał sekundy a na dolnej wyświetlał dane zczytywane z klawiatury matrycowej. Jak to najprościej zrobić? Wydaje się że trzebaby użyć przerwań wewnątrz których byłby napisany podprogram który by co sekundę zmieniał stan sekundnika, a w głównym programie...
Witam, mam pewien problem z przerwaniami, otóż zastosowałem przerwanie zewnętrzne do zliczania obrotów i przerwanie timera do zliczania czasu w sekundach, ale po włączeniu przerwań timera, zobaczyłem w debuggowaniu że przerwania zewnętrzne zliczają do około 4. Czy jest to możliwe że przerwania się gryzą ze sobą? Proszę uzupełnić tytuł postu- zgodnie...
Mam problem jestem początkujący napisałem program który ma za zadanie regulować włączanie wiatraka i czas z jakim ma pracować, 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...
Ok. Zapis do pamieci z zakresu bit band jest dokladnie o 2 cykle wolniejszy niz normalny zapis. [syntax=c] volatile int xx = 1; volatile int k; static inline void bitband_str_prepare(void) { asm volatile(" \n" "movw r7, #0x84A8 \n" "movt r7, #0x4225 \n" ); } static inline void bitband_str(void) { asm volatile(" \n" "str r6, [r7] \n" ); } static inline...
Witam! Zrobiłem prosty projekt wysokościomierza ciśnieniowego. Wszystko działa w jak najlepszym porządku. Teraz muszę go przekonwertować aby działał na mniejszej płytce zasilanej z baterii. Z tego powodu postanowiłem użyć funkcji sleep i przerwań. Program ma działać tak: - w funkcji setup następuje inicjalizacja karty i czujnika, jeśli wszystko działa,...
Odkopuję temat, ponieważ mój problem również tyczy się przerwania od przycisku, przy użyciu tych nieszczęsnych bibliotek :) Wydaje mi się, że wszystko jest włączone i zainicjowane jak należy... Dokładnie przeszedłem przez UM, oraz posiłkowałem się tematami na 'stackoverflow'. Przerwanie następuje, ale trwałe, tzn wszystko się zatrzymuje migająca dioda...
Witam! Mam nadzieję że ten temat został umieszczony w poprawnym dziale. W każdym razie piszę ten wątek ponieważ mam dziwne problemy z internetem. Otóż od momentu w którym zmieniłem dostawcę i przeprowadziłem się do innego mieszkania, mam - bądź miałem (dlaczego być może miałem a już nie mam, wytłumaczę później). Dostawca nie ma tutaj nic do rzeczy,...
Witajcie Podczas ladowania ladowarka spadla mi z okolo 20 cm, niby mała wysokosc jednak odrazu pojawił sie dzwiny dzwiek nie dobiegajacy z wentylatora. Cos jak by tarlo o cos. Ładowarka poladowala tak chwile poczym zakonczyla proces ladowania. Teraz po podlaczeniu ladowarka laduje przez kilka sekund z tym dziwnym dzwiekiem poczym zapala sie zielona...
Mniej więcej co 2 tygodnie ktoś tu próbuje obsługiwać przycisk na przerwaniu portu i co dwa tygodnie próbujemy takiemu delikwentowi wybić ten nierozsądny pomysł z głowy. Przeszukaj archiwum. Przycisków NIE obsługuje się przy użyciu przerwań portu, a przy użyciu przerwania timera. Jak chodzi o mikrokontolery jestem początkujący. Tego typu obsługa była...
Witam, mam problem z internetem.Posiadam usługi internetowe od Vectry, w których skład wchodzi 50Mb/s pobierania jak i również 5Mb/s wysyłania. Podczas oglądania transmisji czy to na telefonie czy na laptopie zostaje ona co 2-3 sekundy przerwana i albo włączy się na kolejne 5 sekund lub wcale to nie nastąpi. Ten sam problem występuję w gram typu counter-strike...
Zastanawiam się, jak się odbywa zapis zmiennej 16 bitowej w procesorze 8 bitowym. Najpewniej najpierw przepisywana jest pierwsza połowa, następnie druga. A czy możliwe jest, żeby jeśli przerwanie wystąpi równo w tym momencie i będzie chciało odczytać wartość tej zmiennej to odczyta pierwszą połowę nową, a drugą starą? czyli jeśli a=0000 zmieniam na...
Witam! Pisze sobie program dla 2313, który w danych wysyłanych do (tego właśnie) procesora musi wyłowić pewnien krótki pakiet i odpowiedzieć na niego. Problem jest taki, że nie mogę tego zrobić w pętli głównej programu, gdyż pętla wykonuje się ok. 0.5 sekundy. Postanowiłem więc obsadzić procedurkę wyłapywania pakietu na przerwaniu. No i tu zaczyna się...
drodzy panowie, może panie :-) Sprawa jest taka, mam układ nad którym już od kilku tygodni ślęczę, coś w rodzaju komputera pokładowego do pojazdu jednoścladowego hehe. Generalnie wszystko jest ok z wyjątkiem... Zastopowałem się przy liczniku kilometrów. przerwanie INT0 zlicza ilosc obrotów koła (jedna linia programu) przerwanie INT1 jest przerwanie...
Witajcie. Proszę o pomoc w sprawie odmierzenia czasu za pomocą Licznika. Licznik pracuje w trybie 0 Program ma co sekunde zmieniać stan wyprowadzenia do którego podpięta jest dioda (wizualizacja pracy licznika) modyfikowałem wartość R1-pośredniego licznika ale bez skutków. po zmianie wartości TH nie ma efektów co zmienić? Grzegorz. $include(at89s8252.inc)...
Poszukuję informacji jak obsługiwać przerwania sprzętowe i programowe w Delphi lub C++. Czy są na ten temat jakieś książki lub dobre witryny opisujące to zagadnienie? Potrzebuję informacji jak się dostać do przerwań zegara systemowego, aby możliwe było wywołanie przerwania np 1000 razy na sekundę (po odmierzeniu 1ms zegar wywołuje przerwanie, które...
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...
Stosuję odczyt DS18B20 w przerwaniu, dlatego, że przerwanie rozkładało mi transmisję 1wire. Przerwanie jest wyzwalane z częstotliwością 100 Hz, przez częstotliwość sieci 220 V i służy do obsługi ściemniacza. Transmisję 1wire umieściłem w tym przerwaniu, żeby uniknąć jej zakłócania właśnie przez to przerwanie. Co przerwanie wykonywana jest kolejna instrukcja...
Witam serdecznie. Zbudowałem sobie licznik impulsów na AVR-ku. Generalnie układ pracuje poprawnie ale bywa że czasami zliczona jest nieprawidłowa ilość tych impulsów. Iteraz mam pytanie bo zgupiałem. Powiedzmy że sygnał liniowo opada ze stanu wysokiego w stan niski w czasie 1 sekundy. (Bardzo ale to bardzo małe strome zbocze) Przerwanie ustawione jest...
Witam mam pewien problem z pętlą while i procedurą obsługi przerwania. Najprawdopodobniej rozwiązane jest banalne, ale jakoś nie mogę wymyślić Otóż mam procedurę obsługi przerwania z UARTA, która do tablicy zadeklarowanej jako zmienna globalna wpisuje 3 liczby odebrane z portu szeregowego w postaci ramki zakończonej znakiem#. Dane nadchodzą co ok 1...
Dziękuję za odpowiedzi. Kubbaz co do INT0 i INT1, to są one podłączone na płytce z AVT pod LCD. Więc do testów chciałem skorzystać z wolnego INT2. Jak już będzie jako tako działać, to zrobię wtedy już nową płytkę i będzie można wykorzystać wszystkie wejścia przerwań. Niestety stronka podana przez Ciebie nie działa (bład 403- brak praw dostępu). Co do...
W tym sęk, że nie mozna. W Win2000 opcje są wyszarzone a w 98 system twierdzi, że : Tych zasobów nie można zmienić. Wygląda, że jest to zafiksowane na stałe. Potrzebuję to zmienić bo źle działa USB. Np ściąganie jednego obrazka ok. 350 kB z aparatu foto trwa 10 sekund :D. Po wyłączeniu w BIOS-ie dźwięku (IRQ = 5), ściąganie poniżej sekundy. To samo...
Jak nie zostaje wyłączone... Przecież podczas wykonywania przerwania inne są automatycznie blokowane, właśnie poprzez wyzerowanie globalnej obsługi przerwań - tak więc nie ma nawet potrzeby stosowania specjalnych zabiegów (cli) w tym celu, to właśnie żeby włączyć stosuje się sei w przypadku, gdy trzeba odblokować przerwanie tak, aby możliwe było jego...
Witam, Podłączyłem sobie do atmegi162 odbiornik podczerwieni (TSOP1736) przez pin PD2, czyli przerwanie INT0. Inicjalizacja przerwania wygląda następująco: DDRD=0; PORTD=4; GICR=_BV(INT0); MCUCR=_BV(ISC01); sei(); A minimalistyczna obsługa przerwania wygląda tak: ISR(INT0_vect){ command++; } No i rzecz w tym,...
bo na pewno zostawiłeś CLS w pętli DO..LOOP - prawda? a kolega wyżej mówił ci żebyś wywalił tego CLS'a i użył polecenia LOCATE, które wyświetla dane zawsze na tej samej pozycji i wtedy nie trzeba kasować całego ekranu LCD. Po drugie sam jakby słusznie podejrzewałeś że warto zrobić odczyt z zegarka co jakiś czas a nie bez przerwy w pętli go odczytywać....
Witam Ręce mi już opadają :( Już jakiś czas próbuję napisać zwykły program który wykorzystuje przerwanie od Timera przy jego przepełnieniu. Przeczytałem posty elektrody, dokumentacje procesora i nic. $regfile = "m162def.dat" $crystal = 16000000 Config Timer0 = Timer , Prescale = 1024 On Timer0 Przerwanie Enable Timer0 Enable Interrupts Do...
Witam, testuje układ, który umożliwia ustawianie zaworu kulowego poprzez silnik krokowy i natknąłem się na coś dość nietypowego. Ustawianie zaworu odbywa się poprzez potencjometr podłączony do portu A, pin 0, przy czym pot podłączony jest dość standardowo, dwa skrajne piny do 5V/GND, środkowy pin do portu PICa. Układ umożliwia tryb, w którym odbywa...
Witam Chcę skonstruować urządzenie, które oprócz zegarka mierzyłoby jednocześnie temperaturę i obydwie wielkości wyświetlałoby na wyświetlaczu LCD. Gdy programy napisałem osobno, obydwa działały, lecz gdy połączyłem je w całość, to czas odczytuję bez problemu, natomiast nie wyświetla mi się temperatura. Podejrzewam, że problem jest w przerwaniach. Poniżej...
crazy_phisic = faktyczne to mój błąd z różnych testów i kombinacji... m.bartczak = tu również to jedynie błąd z testów. Sprawdzałem na różnych timerach. I przy wklejaniu kodu nie zmieniłem tego. W ramach testu zmodyfikowałem kod, tak aby co 1000 przerwań (czyli teoretyczne 1000*1ms) dał mi 1ms impuls na diodę: $regfile = "m88def.dat" $crystal...
Przede wszystkim kwesoly- wielkie dzięki za pomoc. Przerobiłem ten Twój program ale ciągle nie wiem co jest źle. #include <avr/io.h> #include <avr/interrupt.h> #include <stdbool.h> #define INT0PIN PIND #define INT0NUM PD2 #define GetINT0Pin() (INT0PIN & (1<<INT0NUM)) #define Potrzebne_50ms 30 volatile...
Mam taki problem: chcę w programie wykorzystywać przerwania od przepełnienia dwóch timerów (0 i 1). W timer0 mam obsługę wyśw. LED i opóźnienie dla klawiatury a w timer1, z założenia wywoływanym co 100ms, coś jakby zegar z minutami i sekundami, choć nie jest to najważniejsze bo to program testowy. Problem w tym, że przerwanie od timer1 wcale się nie...
Program nie tyle idzie w krzaki, ale po prostu warunek nie ma szans się spełnić. Bez całości kodu trudno coś powiedzieć, bo z tych fragmentów wynika, że warunek (ms==1) może być spełniony raz na ok. 4 miliony sekund (zmienna miliSekundy nie jest nigdy zerowana, a tyle czasu zajmie przepełnienie zmiennej typu long int). Ogólnie: Do sterowania aktywnością...
prosze oto kod mam problem z ogarnięciem dlaczego nie zlicza mi sygnałów z int0 #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/signal.h> // definicje SIGNAL, INTERRUPT #include <util/delay.h> #include <stdlib.h> #include <stdio.h> #include...
Możesz mi jeszcze powiedzieć w jaki sposób skorzystać z zegara? Chce stworzyć (graficznie) timer który przyjmuje za godzinę = godzinę systemową, użytkownik wpisuje godzinę w textBoxie i gdy zegar osiągnie wyznaczoną godzinę to coś ma się dziać. Chodzi mi o to że trzeba jakoś określić zmienne dla godziny, minuty i sekundy np: g = godzina w systemie m...
Stos OK. Mówię Ci. Skasuj flagę przed "Enable INT1". Generalnie kolejność mam w kodzie taką: Config Int0 = Falling 'opadajace zbocze wywoluje przerwanie Config Int1 = Falling 'opadajace zbocze wywoluje przerwanie Config Timer0 = Timer , Prescale = 8 'konfiguracja Timer0 jako timera z preskalerem przez 8 'Przerwanie od przepelnienia Timer0 jest generowane...
Witam Aplikacja: Próbuję zrobić aplikację która odczytuje plik wav'e z karty sd (przez SPI2) i podaje go na DAC'a (SPI1). Potrafie osobno skorzystać zarówno z DAC'a jak i FatFs. I tak: Ustawiłem przerwanie które jest generowane 44100 razy na sekundę (I tutaj może być problem, za często). Podczas przetwarzania obsługi przerwania pobieram dane z podwójnego...
Steruje dwoma silnikami, jednak chciałbym aby jeden z nich się zatrzymał i zaczął cofać przez kilka sekund w momencie załączenia krańcówki. Podpięcie pinów opisane w kodzie. Krańcówka pod INT0 i pod INT1 i z drugiej strony do masy. Wąs = krańcówka. $regfile = "m8def.dat" $crystal = 1000000 Config Portb.0 = Output 'dioda Config Portd.7 = Output...
Witam , w silniku diesla mojej maszyny jest taki prościutki układ bezpieczeństwa, że "masa" elektrozaworu wyłączającego silnik jest poprowadzona przez czujnik ciśnienia oleju. Niestety ostatnio ten układ szwankuje, gdyż zdarzają się takie momenty silnikowi, że gdy dostaje obciążanie, spadają obroty biegu jałowego do bardzo niskich. System regulacji...
dzięki za sugestie, zrobiłem to trochę inaczej Adc i pwm zostało w głównej pętli a LCD się zmienia co 1 sekundę bo miałem już gotowe takie przerwanie. Co o tym sądzicie? SIGNAL (SIG_OVERFLOW0) { second++; lcd_flag^=1; } int main(void) { ... while(1) { // adc // pwm if (lcd_flag==1) {lcd();}...
Witam, wracając do wątku to próbowałem wszystkich metod, jednak żadna nie była zadowalająca, na pewno problem również tkwi w moim doświadczeniu w programowaniu, bowiem nie jestem specjalistą w tej dziedzinie:/...ale ostateczne rozwiązanie jakie zastosowałem jest następujące: - w programie głównym np. co 3 sekundy, gdy spełniony jest warunek, tzn. gdu...
Nie chce zakładać nowego posta więc zapytam tutaj, szczególnie, że problem w sumie jest związany z wątkiem główny tego tematu:-) Napisałem coś takiego: volatile int licznik = 0; void main() { DDRB |= _BV(0);// wyjście DDRB |= _BV(1);// wyjście PORTB &= ~_BV(0);// zero PORTB &= ~_BV(1);// zero DDRD...
Witam, Mam taki oto problem. Mianowicie: W przerwaniu INT0 (wywoływanym z PCFa) wysyłam co sekundę ramkę danych (konkretnie 13 bajtów) na USART0 na którym to działa pewien czujnik. Następnie oczekuję od niego odpowiedzi (47 bajtów) w przerwaniu od USART0. Odpowiedź dopisuję do pliku na karcie SD. I wszystko jest OK. Co pewien czas (np. raz na dobę)...
Natrafiłem na kolejny problem w mojej walce z licznikami. Mój plan jest taki: - licz 18ms - uruchom przerwanie od OCR1A - zmień stan portu D na wysoki - ustaw teraz przerwanie od OCR1B - licz 512 razy po 62 takty (tak mi wyszło z obliczeń przy zegarze 16MHz bez preskalera) - ustaw PORT D na stan niski kiedy wartość licznika będzie się równała 255+polozenie...
Bry, Mam do przerobienia zadanie z Assemblera obsługujące przerwanie T0 na C (Eclipse, SDCC). Niemniej jednak na zajęciach korzystamy formalnie z książki P. i P. Gałka (pracujemy też na DSM-51). Stąd moje dwa problemy (jeżeli temat umieściłem w nie najlepszym dziale, proszę o przeniesienie): 1. Znalazłem składnię tego typu: void t0_isr (void)...
Myślałem że chcesz usunąć pullup'y. Na 5V będzie ok. ok, dzięki :) Dodano po 49 PIERWSZE PODEJŚCIE Na razie zadanie polega na: - włącz diodę (dodałem ją na porcie PB0 podłączona przez rezystor do 5V. - odczekaj 5sek. - zgaś diodę + inicjuj TWI - odczekaj 5 sekund - rozpocznij transmisję - po poprawnym rozpoczęciu transmisji wygenerować powinno się...
Siemanko. Uczę się programowania mikroprocków w języku C. Aktualnie jestem na lekcji przerwań i pojawił się dziwny błąd, którego nie potrafię rozgryźć, może bardziej zaawansowani koledzy potrafili by powiedzieć co źle robię bo nie mam już pomysłów. Otóż cały program ma działać tak że diodka jest wyłączona, po naciśnięciu przycisku ma zamrugać kilkukrotnie....
Nikt nic nie pomoże ? Chcę zrobić tak, żeby po przyciskaniu przycisku na wyświetlaczu pojawiały się kolejne wyświetlenia Case'ów. Case 1 temperatura, Case 2 Napięcie z zapętlaniem do początku po przełączeniu wszystkich. Czasy odświeżania prawdopodobnie mi działają, lecz program wgrany w tej postaci wyświetla jedynie na 2 sekundy powitanie Temp Nap i...
... To w mniej więcej w taki sposób pisze się programy do zegarów alfanumerycznych, i w ogóle obsługę przerwań tak się pisze? WIem tylko, że one (te zegary)zczytują z odzielnych funkcji cyfry i je wyświetlają, a ustawienie godziny ejst możliwe w takim razie w każdym momencie ... Najprostszym rozwiazaniem dla takiego zegarka bylby program zawarty praktycznie...
Uruchomiłem rtc i działa bez problemu na płytce stm32VLDISCOVERY. Do tego chce uruchomić alarm rtc w przerwaniu aby móc wchodzić uc w tryb STOP mode. Init przerwania: [syntax=c] //Konfiguruje linie EXTI dla rtc alarm EXTI->RTSR = EXTI_FTSR_TR17; EXTI->FTSR = 0; EXTI->PR = 0xFFFFF; EXTI->IMR = EXTI_EMR_MR17; //Irq enable dla rtc alarm NVIC_EnableIRQ(...
To mój pierwszy post na tym forum, więc witam wszystkich użytkowników. Od jakiegoś tygodnia bawię się ARMami, używam płytki ZL31ARM z prockiem STM32F103RBT6. Po kilku próbach zdałem sobie sprawę, że standardowa biblioteka ST to jakieś nieporozumienie i zacząłem pisać programy po prostu operując na rejestrach. Zatrzymałem się na pewnym problemie częstotliwością...
jeśli przerwanie jest co 100msek a obsługa procedury wywołanej w przerwaniu będzie trwała 101msek to przed zakończeniem pierwszej procedury i powrotu z przerwania program uruchomi drugi raz tę procedure potem trzeci itd . dojdzie wreszcie do zapełnienia stosu i "zwis" programu Gdy procedura wykonywana jest w pętli głównej jest zezwolenie od przerwania...
Witam. mam mały kłopot z przerwaniami w bootloaderze na wymienionym procesorze (dataszit o ile mnie oczy nie mylą, mowi ze adresacja sekcji pamieci flash jest taka sama jak w zwyklej atmedze8) proc ustawiony na wielkosc sekcji boot na 1024 słowa, po resecie wskakuje do bootloadera. program skompilowany pod 0xC00 czyli w makefile de facto adres .text...
Napisał, że program nie działa tak jak chce, ale nie napisał czy w jakikolwiek sposób sprawdził czy układ wykonuje obsługę przerwania. Choćby przez zapalenie LEDa. W podanym przykładzie zmiana częstotliwości nastąpi dopiero po 15 sekundach. Czy autor czeka tyle? A może fusa ma ustawionego na 1Mhz i zmiana nastąpi za 120 sekund? JarekC
Procesor chodzi na 168Mhz, szyna tego zegara chodzi na APB1 i jest dzielona od nominalnej przez 4 to jest 42Mhz. Preskaler zegara 640 i przerwanie w momencie przepełnienia czyli po 65536 taktach, co o ile się nie mylę daje raz na około sekundę. Tu się mylisz. Zajrzyj na clock tree w sekcji RCC i się okaże, że jednak APB1 dla timerów jest mnożone x...
Witam. Na wstępie chcę napisać że jestem początkującym, i na razie się uczę. Chcę napisać przykładowy program, co będzie wykonywał jakąś funkcję co 1 sekundę. Chcę do tego też użyć obsługi przerwań (w książkach było o przepełnieniu zegara). Mogę od was poprosić przykład jak zrobić taki timer (z komentarzami objaśniającymi)? Mój zegar ma taktowanie 16mhz,...
Witam, mam problem z napisanym przez mnie kodem. Założenie jest takie, że przy puszczonym przycisku Timer1 skonfigurowany jako Fast PWM ma mi powoli rozjaśniać listwę RGB. W momencie przyciśnięcia swicha Timer0 ma odliczyć 5 sekund i PWM ma mi ściemnić listwę. Ma to działać dla 4-ech niezależnych od siebie kanałów. Póki co zacząłem zrobić Fast PWM i...