bierzesz pod uwagę nie to przerwanie. zobacz czasy dla TIMER/COUNTER1 OCR1A Compare Match
Otwórz sobie pdfa od procesora zajrzyj w sekcje Timer2, poczytaj, przejdź do opisu rejestrów i poustawiaj jak uważasz. Ogólnie dla liczników wybierasz prescaler czyli podział między zegarem (16Mhz dla Arduino) a wejściem licznika. Timer2 jest 8bitowy ma 256 wartości, więc masz kolejny podział. Jak potrzebujesz precyzyjnie to są tryby gdzie możesz zrobić...
działają obydwa kody, sprawdzone podczas pisania tego posta. filmiku nie wrzucę, ponieważ ani Avila, ani Cookie nie radzi sobie z nagraniem świecących LED'ów. więc masz albo uwalony procek, albo zwarcia na płytce. dorzucam plik hex który daje efekt "biegnącego światła" w jednej chwili jest zaświecona tylko jedna dioda LED. przy zegarze 16MHz czas przerwy...
Zakres liczenia 16-bitowego timera przy zegarze 16MHz i prescalerze=1 to nieco ponad 4ms. Jak chcesz tym zmierzyć czas, który przy 5000obr/min wynosi ok. 12ms.?
Ale tu wcale nie trzeba kwarca 16.384 MHz. Wystarczy 16MHz. Preskaler na 64, OCR1A na 249 (a więc liczący 250 cykli). I będzie przerwanie równo co 1ms bez konieczności inkrementowania zmiennej.
Nie da się na to pytanie odpowiedzieć nie widząc kodu. USART obsługujesz w przerwaniach? Pamiętaj, że na czs jego wykonania inne przerwania są blokowane, użycie nieblokujących handlerów przerwań wymaga głębszej analizy. Ale generalnie spójrz na to w ten sposób - procesor przez 40% czasu się nudzi. Więc dla 16MHz masz sytuację taką, jakbyś miał cały...
Bascom nie da sobie z tym rady, C też nie da rady bez wstawki assemblerowej, W wartym 5zl ARM klasy STM32F030F4P6 masz 5 kanałów DMA którymi ogarnąłbyś problem tak po prostu. A z czego Ty chcesz te DMA wyzwalać? W przerwaniu bez wstawki assemblerowej też sobie z tym nie poradzi. Coś nie chce mi działać, wgrałem z kompilowany hex do procka i restartuje...
Pewnie że nie będzie działać, ustawiłeś Preskaler =256 a więc przy zegarze 16MHz przerwanie od Timer0 będzie pojawiać się z częstotliwością 62500 razy na sekundę. (16000000/256 = 62500). Zalałeś modem zapytaniami o CSQ i biedny nie ma czasu na odpowiedź.
klops_mops ---> masz dwa wyjścia żeby ci nie mrugały te wyświetlacze w czasie PRINT'a ;) - innymi słowy mówiąc aby procedura wysyłania RS232 nie zakłócała procedury multipleksowania 1. prostszy sposób - zwiększ tą kocią prędkość RS232 na jakąś ludzką - chociaż 9600bps to już praktycznie nie powinno ci mrugać a jak dasz każdą większą to już będzie coraz...
Kod, który pokazałeś wrzuciłem na zestaw testowy z Atmega644P i działa tak jak powinien. Co prawda na kwarcu 16MHz, ale miganie diodą występuje kilka razy na sekundę. Pobawiłem się też wartością OCR1A i zachowuje się zgodnie z oczekiwaniem. Zwiększenie OCR1A zwalnia miganie, zmniejszanie przyśpiesza. Powinieneś zatem szukać błędu gdzieś indziej, w sprzęcie,...
Sprawdź CKDIV8. Jakim terminalem się komunikujesz? Czy są jakieś objawy np. odbiór śmieci? Zrób na razie prosty program w pętli wysyłający co np. sekundę jakiś bajt, by sprawdzić odbiór przez terminal. Przy okazji - wiesz, że to nie ma sensu: [syntax=c]UCSR0C |=(0<<UMSEL00)|(0<<UMSEL01)| ...[/syntax] http://mikrokontrolery.blogspot.com/2011...
Jak zadziała krańcówka to i tak to nie zadziała bo o ile pamiętam to UART FIFO nie posiada (a może się mylę?) Jeżeli wysyłasz kolejne bajty w sekwencji ldi a,CośTam out UDR,a ldi a,CośTam out UDR,a.... i tak kilka razy to... wykonujesz 8M zapisów do UDR na 1s (clk=16Mhz, i po 1 takcie na rozkaz w tym wypadku) UART musi wysłać StartBit 8bitów danych...
Jeśli jest to standardowa sieć 50Hz, to ja nie widzę potrzeby używania 3 timerów, wystarczą 3 zmienne odliczające w przerwaniu tyknięcia timera w CTC. A same tyknięcia muszą być co najwyżej wielkości połowy zakładanej rozdzielczości kroku załączania fazy. Nie można też zapomnieć o odliczeniu czasu do końca impulsu wyzwalającego. Przy zegarze procesora...
Spróbuj zmienić początek programu - wektory przerwań: ;================================ .CSEG .ORG0x0000 jmp RESET .ORGOC1Aaddr jmp TEST ;Przerwanie zgodnego porównania OC1A .org0x0050 ;....... dalsza część programu
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
Udało mi się uruchomić ten przetwornik. Jak zauważył janbernat niesłusznie uznałem, że nie ma sensu podpinać wyjścia oznajmującego zakończenie konwersji przez przetwornik (SSTRB) do INT2. Pracuje on ładnie zarówno gdy między ADC, a uC pośredniczy BC547C lub BD237(tranzystor NPN firmy SGS-THOMSON, akurat takie coś miałem pod ręką). Nie sprawdzałem natomiast...
Ale jeśli mniejsze, to już po 1 takcie zliczania powinno wyskoczyć z przerwania a tak nie jest. Taktowanie timera to 16MHz/1024 = 15625Hz. Pojemność timera to 256, więc przerwanie pojawia się z częstotliwością 15625/256 = ~61Hz. Aby uzyskać opóźnienie ok. 1 sekundy przerwanie musi pojawić się 61 razy i dopiero za 62 zapalić lub zgasić diodę. I tak...
Cześć, Próbuję zaadaptować przerwania do swoich potrzeb z pomocą datasheet atmegi328p i strony [url=http://mikrokontrolery.blogspot.com ]Link Niestety napotkałem pewien problem z którym nie umiem sobie poradzić. Za pomocą przerwań chciałbym odczytywać stany z dwóch podłączonych potencjometrów. Reprezentuję ich wartości na LCD leczy w zakresie 0-255....
Jakieś foto PCB, schemat? Z jaka częstotliwością musi pracować AVR aby uzyskać przepływność 2.4Mb/s (800kb/s * 3 = 2,4Mb/s)? Dla Double Speed mode (U2Xn = 1): BAUD = fosc/8*(UBRR+1) gdy Fosc 16MHz UBRR=1 to: 16e6/(8*(1+1)) = 1'000'000 czyli dużo za mało. Dopiero dla Fosc 39MHz uzyskamy 2,437500Mb/s a tyle to nawet Xmega nie pociągnie.
a jesli powiem ze tak tez próbowałem tylko ze odczyt z kodów z rc5 trwa z przerwą 600ms która musi byc pomiedzy odczytem a konwersją temperatury z ds1820 :( Jakoś nie widzę problemu. Przecież Int0 ma wyższy priorytet niż DS. Jerśli istnieją jakieś konflikty to należy zablokować przerwanie Int0 na czas inicjacji DS'a i odczytu temperatury. W trakcie...
Wejście w przerwanie może trwać przy 16MHz ponad 2us (jak przerwanie jest rozbudowane), więc to nie problem, ale może być użyte przerwanie od USART, którego obsługa zajmie np 15us (podaje dość długie czasy, najczęściej są krótsze). Można śmiało przyjąć, ze jeśli wystarczy rozdzielczość na poziomie 100us nie ma konieczności używania sprzętowego przechwytywania.
Tak się nie robi. Myślę że ten timer się parę razy przepełni zanim obsłuży LCD. Ustaw timer tak aby wywoływał przerwanie przy danej wartości i w tym przerwaniu dodawaj jakąś zmienną o 1 i czyść licznik.
To że wpiszesz F_CPU cos tam nie oznacza że procesor "magicznie" zacznie działać na 16MHz Atmegi mają 8MHz oscylator wewn i do tego ustawiony podzielnik 8. CZyli działają na 1MHz 1MHz / 64 / 25000 = 0.67HZ i tyle właśnie dostajesz. Aby mieć 16MHz to musisz mieć zewn oscylator + ustawic fusy Zresztą poczytaj o innych rejestrach timera bo nie tak się...
Coś mu się odwiesiło i działa te moje i wasze ;) Tak zapytam jeszcze bo mi coś to nie wypaliło zbytnio czy jest możliwość zmiany częstotliwości w "locie"?? Bo projekt zakłada super kondensatory do podtrzymywania "danych" na ile się da, i tak pomyślałem jeszcze by wydłużyć czas to, 16MHz zasilanie musi być powyżej 3,8V a gdybym tak uśpił na 4MHz to wtedy...
Najbardziej ekstremalny [syntax=c]void TMR1_Initialize(void) { //Set the Timer to the options selected in the GUI //T1CKPS 1:1; T1OSCEN disabled; T1SYNC do_not_synchronize; TMR1CS FOSC; TMR1ON off; T1RD16 disabled; T1CON = 0x44; //T1GSS T1G; TMR1GE disabled; T1GTM disabled; T1GPOL low; T1GGO done; T1GSPM disabled; T1GCON = 0x00; //TMR1H 255; TMR1H =...
Załóżmy, że na ten moment projekt jest urządzeniem, które zlicza obroty wiatraczka. Czasami wiatr jest a czasami nie. Gdy wiatr zaczyna wiać urządzenie zlicza obroty wiatraka, a gdy przestanie wiać (np. przez 5 sek) zapisuje do EEPROMu cykl pomiarowy złożony z: - godziny rozpoczęcia wiatru. - godziny zakończenia - ilości obrotu wiatraka - największej...
Witam forumowiczów, Sytuacja wygląda tak, że z jednostki nadrzędnej słane są ramki danych, Po każdej ramce jest szczelina czasowa tak aby nasza ATmega zdążyła odpowiedzieć, Mamy Atmega16 kwarc 16MHz i transmisje 57600 (w przybliżeniu), Gadamy przez RS485 tak, że między ramkami jeszcze przełączam linie bufora, Steruje równocześnie buforem wejścia i wyjścia...
Z tym kondensatorkiem, to wiem, masz rację. Obawiam się, że będę miał małe problemy. Zrobić klawiaturkę w przerwaniu, to nie jest problem. według pierwszego, czy też drugiego schematu. Gorzej jednak będzie z tym "dłuższym trzymaniem". Wpadł mi do głowy jeszcze inny pomysł, zamiast "długie trzymanie" naciśnięcie dwóch klawiszy równocześnie. To też jest...
ile Ci brakuje czasu? może overclocking? AVR'y się ładnie kręcą - jak masz 16MHz max, to powinien pójść na 22-24MHz... zawsze to + 50%
Odczyt EEPROM trwa tyle co odczyt IO. Nie wnosi żadnych opóźnień. Zapis - jest zależny od MCU, dokłądne czasy znajdziesz w jego nocie - zwykle to 2-5 ms. Podczas zapisu procesor może wykonywać inne instrukcje, a nawet je wykonuje. Tylko, żeby z tego skorzystać należy dokonać zapisu z wykorzystaniem przerwań - po zaposaniu komórki wywoływane jest przerwanie...
Nie korzystam z systemInit ani zadnej innej biblioteki, cały kod który mam jest napisany w 100% przeze mnie. Czyli dobrze założyłem, to 16Mhz, pytanie ktore dalej pozostaje bez odpowiedzi to co jest nie tak ? :( Chyba jednak nie cały. Nie napisałeś nic o środowisku - obejrzyj SystemInit(). Najbardziej nie tak jest to, że nie pokazałeś poprawionego...
Witajcie moi drodzy. Tak jak w temacie. Jedna z moich Atmega88P z szuflady bez problemu jest czytana i pisana. Druga wcale - jest napisane, ze ID to same 0. Dodam, ze podłączam ja na wszelki wypadek z rezonatorem 16MHz. 1.Mam rozumieć, ze jest ubita? Pytam, bo wyjąłem ja z szafy po miesiącu przerwy... i szczerze nie pamiętam, czy coś się jej stało czy...
Hej! Zależy co rozumieć pod pojęciem "wyliczyć jedną sekundę". Niestety o C nie mam pojęcia ale w asemblerze (zatrzymanie programu na 1s) zrobiłbym tak: org 0000H ;początek pamięci ljmp Main ;daleki skok do programu głównego ...... ...... org 000BH ;wektor T0 ljmp T0 ;daleki skok do procedury obsługi przerwania ...... ...... T0: ;procedura obsługi...
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...
Być może wywyłujesz jeszcze jakieś inne przerwanie które nie ma procedury obsługi - stawiam na UDRIE. Dodaj : SIGNAL(SIG_UART_DATA) //przerwanie - bufor nadajnika pusty { } oraz dla porządku SIGNAL(SIG_UART_RECV) //przerwanie - znak otrzymany { } Pamiętaj że flaga UDRE (bufor nadajnika jest pusty) jest ustawiona po resecie, a ty napisałeś: UCSRB |=...
Zrobiłem to co podałeś trochę poprawiłem efekt ten sam. Poszedłem też na skróty i wyliczałem tylko okres resetując timer też ten sam błąd.. Zastanawiam się czy aby na pewno attiny ma 16MHz bo są źródła które podają 16,5MHz korzystam z Digispark Attiny85 i ze względu na USB jest tak taktowany, zastanawiam się o ile to prawda ze 16,5MHz jak uciąć te 0,5Mhz...
Witam Próbuję odebrać na komputerze (w programie bray terminal) dane, tzn. konkretnie temperaturę z termometru LM35. Niestety mam problem z odbiorem danych w przerwaniu od UART-u. Poniżej przedstawiam kod programu: [syntax=c] /* Wysyłanie do komputera wartości temperatury interfejsem USART mikrokontrolera */ /* LM35 -> PA0 */ /* ATMega16, f=16MHz...
Policz instrukcje prologu i epilogu wejścia w przerwanie. Zwróć uwagę ktore z nich są wykonywane w jednym cyklu zegarowym a które w kilku cyklach. Nawet jak w przerwaniu nic nie będziesz robił to wejście i wyjście z przerwania zajmie jakiś czas.
Jak masz zbudowany układ detekcji zera, jaki przebieg w porównaniu z sinusoidą masz na jego wyjściu? Ważne jest czy uK powinien reagować na zbocze opadające czy może na narastające ale to wszystko zależy od układu detekcji. Tak jak kolega pisze trzeba pamiętać że triak wyłącza się sam w zerze i nie ma możliwości wyłączenia go samemu. Najlepszym rozwiązaniem...
Aby to zrobić zgodnie ze sztuką obsłuż LED na przerwaniach od USART. Trochę zabawy z tym jest, bo przerwania 300 tysięcy razy na sekundę dla AVR to duże obciążenie (wstawki ASM wskazane). Na 16MHz nie pójdzie, więc kwarc min 18MHz. Prosta sztuczka pozwoli zmniejszyć częstotliwość przerwań dwukrotnie. Aby uniknąć dodatkowych "efektów" wszystkie inne...
Obawiam się, że bez ASM, nie uda się przy 16MHz odbierać danych z SPI, z prędkością 4Mb/s (tak wnioskuję, że 4). Niestety, Bascom to nie C i rozwinięcia ASM nie zobaczysz :-( Musisz "na piechotę" znaleźć funkcję obsługi przerwania SPI i zdesasemblować aby dowiedzieć się jak długo się wykonuje. Możesz też, zrobić w pętli głównej, "machanie" GPIO. Na...
To mogłoby się zgadzać, ponieważ z dokumentacji czasy zawarte w ramce (narastania, opadania, czasy trwania stanów) są wyrażone w nanosekundach ;) więc trzeba by przeliczyć ile czasu zabiera jeden cykl procesora przy 16MHz i zobaczyć ile czasu zajmuje 25*6+16 cylki maszynowych PS: problem rozwiązany. Dałem zamiast każdego DELAY(SHT_DELAY); funkcję _delay_us(5);...
Mój kod również działa. Na wyjściu jest dokładnie 4MHz dla rezonatora 16MHz. Przerwania nie są potrzebne ponieważ wszystko robi sam Timer i nie musi zgłaszać przerwań. Polecenie End jest w programach po to by wyłączyć przerwania i uruchomić nieskończoną pętlę gdyby program się wysypał. Myślę więc że w programie kolegi polecenie End również wyłączyło...
Całość działa na arduino ( klon chiński ) mini pro Atmega 328p zegar 16Mhz. Żadnych kondensatorów, ani filtrów RC. Są tylko długie kable. Taśmy.
W kodzie widziałem _delay_us(2), _delay_us(15) przy obsłudze magistrali 1W bez wcześniejszego użycia cli(). Sprawdzałeś jak długo wykonują się twoje przerwania? Dotyczy to sytuacji: //wykonanie funkcji w tym miejscu powoduje błędne wyświetlenie lecz nie powoduje migania Miganie zaś (gdy wynik pomiaru ok) jest spowodowane tym, ze w przerwaniu masz _delay_us(15)...
Czyli do OCR0 moge wpisać max 0xFF?? W ATmega32 preskaler jest 10 bitowy ale jak to się ma do ustawiania częstotliwości? Jeżeli clk =16MHz a program wyżej (chyba) ustawial clk/64 czyli 250kHz. Tzn że to jest najmniejsza do osiągnięcia częstotliwość na tym ustawieniu? Gdzie w tym wszystkim rola preskalera?
No to zaczynamy po raz kolejny. Coś takiego jak stworzyłeś to niestety za szybko nie będzie działać. Mega z kwarcem rs 14 z groszami działa naprawdę szybko i można zrobić bardzo dużo w jedna sekundę. Do odbierania i wysyłania danych można sobie napisać własną procedurę - nawet w bascomie i jest ona sporo szybsza i działa rewelacyjnie. Deklarujemy przerwania...
Z tego co widzę Arduino kompiluje z -DF_CPU=16000000L czyli pełne 16MHz Tak sobie teraz to oglądam i wychodzi, ze długość stanu LOW waha się i czas max - czas min = 4uS no ale to do przewidzenia było
No to trzeba je oprogramować tak, aby nie bruździło... czas obsługi przerwania ok. 1-2 µs (przez wstawkę asemblerową) chyba nie zrobi na transmisji 1Wire większego wrażenia ? Przy 8 MHz mamy do dyspozycji 8 cykli zegarowych w czasie 1 µs, a przy 16MHz - 16 cykli zegarowych. reti zajmuje 4 cykle, cbi / sbi po 2 cykle, ewentualne nop pomiędzy...
Atmega jest taktowana zewnętrznym kwarcem 16mHz. Dzieląc 16Mhz przez 32kHz wychodzi mi około 488 cylki. Poza tym nie ma znaczenia czy kod w przerwaniu zajmuje 3 linijki czy 100. Przerwanie wykonuje się dokładnie tyle razy. Zegar na tym zrobiony ma błąd mniejszy niż 1 sec na dobę więc nie ma mowy, że uC nie wyrabia.
Witam, muszę tak skonfigurować timer1 aby przerwanie występowało co 1us. Mam uC atmega328pu i kwarc 16MHz. Warości, które wpisuję do rejestrów porównania są na pewno poprawne, ale w moim przypadku dioda zmienia swój stan w czasie dłuższym niż 1s (dla testów w ISR umieściłem licznik ,który w momencie osiągnięcia warości 1 milion zmienia stan diody)....
Witam. 1. Jaka jest różnica pomiędzy podpięciem zewnętrznego oscylatora 16MHz, a ustawieniu wewnętrznego na 4MHz w trybie PLL (4x4=16MHz), Roznica w tym, ze dokladajac pare elementow zewnetrznych mozesz wybrac dowolna czestotliwosc zegara (a nie pochodna 8 MHz), a ponadto miec lepsza precyzje i stabilnosc niz posiada wewnetrzny (INTOSC). 2. Na liniach...
Już widzę kogoś, kto opiera pętlę główną na delay() i próbuje odczytać przyciski do 3ms ;) ( swoją drogą - po co ? ) Fotokomórka zatrzymująca prasę aby niezmiarzdżyła ręki. Reakcja po np 0,7sekundy nie wchodzi w grę. Albo obsługa enkodera Dekodowanie DCF77 Mnożyć dalej przykłady? 1- w obsłudze przerwania z expandera, odczytujesz rejestry expandera...
Witam. Pracujesz na wewnętrznym oscylatorze z PLL co daje 32MHz ale . Timer już nie jest taktowany zegarem 32MHz ale 16MHZ FOSC/2 = TCY . Kolejna rzecz to to że chcesz aby przerwanie występowało co 125ns co przy tej częstotliwości taktowania timera jest nie realne. Przecież obsługa przerwania też trwa ileś tam cykli . Po testuj w symulatorze a w szczególności...
Mikrokontroler to atmega8L: http://www.atmel.com/images/doc2486.pdf str 35 informacje o sleep modes. Używam zewnętrzenego kwarcu 16Mhz. Nie używam BOD. Przycisk na INT0 nie ma debouncingu. Układ działa poprawnie bez usypiania.
Ok, to ja dorzucę swoje trzy grosze :) Przede wszystkim, aby procedury _delay_* działały poprawnie należy włączyć optymalizację kodu np -O1 Sprawdź może to powoduje problem. Po drugie, na czas odczytu i zapisu magistrali warto zablokować przerwania, tak żeby procedura obsługi przerwania nie rozjechała czasu poszczególnych okien. A na koniec moje procedury,...
Jakieś duchy czy co? Żeby wykluczyć pomyłki skopiowałem jeszcze raz kod- ten ostatni- i działa. ATMega32, kwarc 16MHz- zresztą to bez znaczenia. Może coś z oscyloskopem? Nelik- nie czytaj tego: stan wstawiłem jako uint8_t static w przerwanie. I działa tak samo. Nie wiem jeszcze jaki z tego jest zysk/strata że nie jest volatile globalny. Ale nie odbiegajmy...
No to kawa na ławę. Instrukcja Getrc5 w czasie działania używa jest licznika TIMER0 i związanego z nim przerwania. Licznik ten jest służy do generacji wymaganych opóźnień podczas próbkowania sygnału. TIMER0 może być dalej używany przez program, lecz należy się liczyć z wynikłymi opóźnieniami, gdy wykonywana będzie funkcja GETRC5(). Jest tylko jeden...
[syntax=c] ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // czyli automatycznie po zakonczeniu wyzwala kolejna konwersje ADC_RegularChannelConfig(ADC1, ADC_Channel_4,1,ADC_SampleTime_384Cycles... //16mhz/384+kilka cykli co daje okolo 37 Khz [/syntax]
Patrząc po twoim filmie bardzo rzadko zbierasz próbki (157 próbek, a potem około 1s przerwy), tak więc twoje charakterystyki są bardzo statyczne. Tutaj chyba chodzi o to żeby zbierać jak najczęściej i jak najczęściej wyświetlać. Dla porównania dwa filmiki: Twój: Patrz od 1:27 do 1:36 [youtube]http://www.youtube.com/watch?v=... Mój...
Nie sadze zeby bez sprzetowego PWM dalo sie to zrobic, wykonanie procedury obslugi przerwania troche trwa i nawet jak bys mial 16mhz to musialbys w 16 taktach zmiescic skok do przerwania, wykonanie go i powrot. Najlepiej ustaw PWM choc nie wiem czy i on nie ma jakiegos ograniczenia
zasilacz impulsowy 2,3A, na płytce stykowej będzie 1500uF + przy procku 2x100nF, pomiędzy resetem a +5V 1kohm, rezonator kwarcowy 16MHz, dip swith na porcie A + PC7 diody na portB dmx RX PD0 Jtag na porcie C Taki opis wystarczy czy rysować lub zdjęcie zrobić?
Temat dość dawno nie ruszany, ale mam dodatkowe pytanie. 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? us Czy to oznacza, że czas trwania imp. wyzw. moze być faktycznie poniżej 1 us?
Witam zaraz spróbuje czy sposób Kolegi Mazomen coś pomoże. Kolego arktkik1 dlaczego nie możesz zrozumieć co to wyświetlacz 14 segmentowy np. taki: http://obrazki.elektroda.net/45_12692721... Sprawdziłem. Program dobry dla 4 wyświetlaczy ale nie dla 14. Wszystko miga, jak skrócę obsługę do 4 wyświetlaczy to działa dobrze. Dalej jestem w kropce. Ciekawe...
Dlatego następnym razem należy jasno i wyraźnie opisać Swoje intencje. I już dwa błędy są w tym programie: 1. Deklaracja częstotliwości: FastAVR = 16MHz, Bascom = 8MHz. Programowo zauważalna ale tu nieistotna. Sprzętowo zaś bardzo ważna, bo cykl przyjęcia przerwania będzie 2x krótszy. 2. Konfiguracja przerwań po ich włączeniu. Nie ważne, że Enable Interrupts...
Napisałem coś takiego, ale wiem, że w pętli głównej musi jeszcze być konfiguracja prescalera i nie mam pojęcia jak ją napisać. Oglądałem datasheeta z atmegi ale za bardzo tego nie rozumiem. Jaki kwarc do tego trzeba zastosować bo czytałem, że właśnie tą częstotliwość bezie trzeba dzielić. Ja chciałem zastosować 16MHz. Może być? Pozdrawiam Dodano po...
Nie wiem czy obie zmienne są zaniżane bo nie mam możliwości zadania układowi dokładnej ilości impulsów, natomiast zawsze impulsy zliczone na przerwaniu INT0 są zaniżone w stosunku do tych zliczanych na przerwaniu INT1. Owszem, masz taką możliwość - skorzystaj z symulatora dostępnego w Atmel Studio i wygeneruj mu potrzebny plik stymulacji, dzięki czemu...
W czasie tych 24 cykli jest już zachowywany i odtwarzany kontekst . 24/50MHz > 6/16MHz => Wolniejszy niż 8-bitowy PIC ;-( A PIC-e podobno pod względem szybkości znacznie AVR'om ustępują ;-) Albert
\ 1. Rozumiem, że ustawienie odpowiedniej częstotliwości da mi czas, który jest mi potrzebny? Tak, program z tego postu demonstruje rejestry i bity których odpowiednie ustawienie spowoduje daną częstotliwość przerwać timerów, a w konsekwencji odpowiednią częstotliwość wysyłania tekstu / migania diodą, jednak obecny ustawiony czas jest przykładowy, nawet...
Co do TTL'ów to proponuję bramki 74HC14 - mają one tpLH i tpHL rzędu 17ns - jest to stosunkowo mało nawet przy kwarcu 16MHz - wówczas takt zegara trwa ok 62,5ns - wprowadzi to oczywiście błąd stały ale jak myślę jest to błąd do wyeliminowania. http://www.nxp.com/documents/data_sheet/... Co do twojego głównego problemu to ja bym to zrobił...
Wyjąłem CF1 455kHz; zwarłem wejście (pin 1) z wyjściem 9pin 5) za pomoca 10nF; bez zmian. (przy wyjmowaniu filtr się rozpadł, ale to szczegół). Na IC6 pin 16 nie ma 10MHz ( a powinno być). Na Q411 jest 16MHz jak powinno być. podmiana IC6: po podmianie szumi stabilnie i bez przerw. Napięcia na IC1: pin 1 do pin 8:[2,1 0 0 2,1 0,2 2,4 0,2 0,2]V pin 9...
Witam!!! Nie napisałeś niestety jaki kwarc, ale stawiam na 16Mhz. Konfiguracja wygląda na OK. Jeżeli, twierdzisz, że przerwanie się generuje, ale rzadziej to bym polecił sprawdzić fusebity. Po pierwsze źródło sygnału taktującego, a po drugi czy nie jest uruchomiony dzielnik zegara przez 8. Pozdrawiam!!! Azonic_2006
Mam 16MHz OK, ja przeczytałem to co pisze w komentarzach. 16000000/128 = 125000 125000*13=1625000 (1/16Mhz)*162500 = 0.10075 sec ? Nie używasz jednostek i dlatego się gubisz: Czestotliwosc zegara ADC = 16000000Hz/128 = 125000Hz OK, ale poniżej jest błąd. Co tutaj obliczyłeś?: 125000*13=1625000 W drugim kroku miałeś obliczyć: Następnie oblicz ile czasu...
Zgłaszam się po przerwie. Przeczesałem internet w poszukiwaniu różnych rozwiązań w sterowaniu serwami. Przedtem jednak udało mi się coś stworzyć na ATmega16 (at)16MHz. 18 serw i rozdzielczość 100 pozycji... Zajętość czasu procka ok. 10%. Jako, że od jakiegoś czasu zacząłem bawić się trochę PICami znalazłem bardzo ciekawe rozwiązanie, niestety tylko...
No to przecież już gadaliśmy o tym...ale udało się tylko przy taktowaniu 1MHz uzyskać dzielnie przez 2 maksymalnie przy 18kHz sygnału wejściowego. Rozumiem, że przy taktowaniu 16MHz będzie to 16*18kHz=288kHz. Mnie jednak interesuje większa częstotliwość do podziału, powiedzmy koło 2MHz... (im więcej tym lepiej) I dlatego myślałem że na Timerze będzie...
Eh dużo pytań a na wszystkie sa odpowiedzi w datasheecie... ale mam dobry nastrój to wyjaśnię po kolei: VCC - napięcię stałe, dobrzy wystabilizowane z zakresu 1,9-3,6V (typowo 3,3V) PWR_UP, TRX_CE, TX_EN - ustawiasz nimi tryby pracy UPCLK - wyjście zegarowe za preskalerem; przy kwarcu 16MHz maksymalna częstotliwość do ustawienia to 4MHz (może służyć...
Witam! Chciałem wykorzystać timer0 do dokładnego odmierzania czasu, jednak coś powoduje zawieszenie całego programu. Dzieje się tak gdy próbuję odczytać wartość zmiennej w obsłudze przerwania lub w pętli głównej programu. Przerwania od timera są na pewno obsługiwane ponieważ działa zmiana stanu portu w obsłudze przerwania. Kod wygląda następująco: //ZMIENNE...
Witam, Od samego rana próbuje skłonić mojego AVR do współpracy, chcę mianowicie, aby odebrał znak (slowo) w przerwaniu, a nastepnie wyswietlił go na wyświetlaczu LCD i odesłał odpowiedź. I problem jest nastepujący. Jeśli odbieram dane znak(słowo) bez przerwania (po prostu funkcją USART_Receive), to działa, ale jak dodam instrukcje obsługi przerwań to...
Proszę bardzo: [syntax=c] void USART_Init(void) { UCSRC = (1<<URSEL)|(1<<UPM1)|(1<&... // URSEL = 1 - korzystanie z rejestru UCSRC // UPM1 = 1 even parity // UCSZ1 = 1 i UCSZ0 = 0 8 bitowa transmisja UBRRL = 103; // 9600b/s przy F_CPU 16Mhz UCSRB = (1<<RXEN)|(1<<TXEN)|(1<&l... } void nadaj(char...
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...
Czy ktoś z Was sie orientuje czy w każdym cyklu zegarowym sprawdzana jest flaga przerwania INT0? Szukałem po specyfikacjach i nigdzie nie podają. Sygnał na INT0 ma okres 64us, Attinego taktuje kwarcem 16MHz (bez div8) i widze że okres pomiędzy obsłużeniem przerwań wacha się około 63,5us - 64,5us
Witam. Pisząc program natknąłem się na pewien problem, który uniemożliwia mi pójście dalej. Otóż potrzebuję wykonać określone operacje w równych odstępach czasu. Docelowo będzie to coś koło 2-5 minut, ale w czasie testów pracuję z mniejszymi odstępami. Ustawiłem Timer1 w tryb CTC i ustawiłem rejestr OCR1A na 15625, co przy taktowaniu 16MHz daje przerwanie...
Byłem trochę zdesperowany. Teraz wiem że nie powinienem wykorzystywać przerwania TXC bo w sumie spowalniam transmisję nie potrzebnie, oraz ono do tego nie zostało zaprojektowane. Ale to i tak nie zmienia faktu, że program merytorycznie był ok, i dalej nie wiem gdzie w nim był błąd. Ogólnie pierwszy raz wykorzystywałem go z kwarcem 16MHz i pierwszy raz...
Masz w nim błąd polegający na tym, że używasz Timer2, a włączasz przerwania od przepełnienia Timer 0: Zmieniłem na: Podobnie z wektorem przerwań - używasz wektora z Timer0: Zmieniłem na: W jakim celu ustawiasz: Kwarc 16MHz Prescaler 64 Timer2 8 bitów= 256, zaczynam liczyć od 6 aby otrzymać 250 kroków Częstotliwość przepełnienia= Częstotliwość Kwarcu...
2 serwa można zrobić całkowicie sprzętowo TCCR1A = _BV(WGM11); /* Fast PWM, ICR1 is top */ TCCR1B = _BV(WGM13) | _BV(WGM12) /* Fast PWM, ICR1 is top */ | _BV(CS11) /* div 8 clock prescaler */ ; OCR1A = 3000; // to jest chyba dla zegara 16 Mhz - to by odpowiadało impulsom 1.5 ms OCR1B = 3000; ICR1 = clockCyclesPerMicrosecond()*(...
TCCR0 |= ((0<<CS00)|(0<&... // wyłączenie timera T0 Nie wnikam w całość w tej chwili (pętle trwające po 1500ms nie do końca pasują do mojej wizji przerwań:P), ale powyższy kod na pewno nie wyłącza timera - poczytaj o operacjach bitowych, (bitwise operators), bo w tej chwili powyższa linijka...
Witam! ATmega32 16MHz jako slave odbiera dwa bajty po SPI 1MHz ( 15cm taśmy 10 żyłowej )od mastera LPC2148 . Jeżeli jest włączone tylko SPI, a inne przerwania są wyłączone jest wszystko dobrze. Jeżeli włączę przerwanie od timera2 generowane co 100us to zdarza się że atmega gubi jeden bajt i krzaczy się cała transmisja, ale po jakimś czasie jak zgubi...
Dokonałem tych zmian w kodzie i dalej nie działa tak jak trzeba, diody nie zapalają się po kolei, po każdym kliknięciu. Tylko tak jakby losowa a czasami się nic nie dzieje jak nacisnę przycisk. Może to być dlatego że taktowanie mikro kontrolera to 16Mhz? /* Program obsługujący przerwania, po naciśnięciu przycisku podpiętego pod PD2 (INT0) Diody...
...może to wina bascoma.. No tak, winni są wszyscy, tylko nie Ja :D Na Twoim miejscu, zadał bym sobie pytanie:"Ile czasu potrzebuje procek taktowany 16MHz, na wykonanie procedury przerwania Ontimer1 :idea:
Cześć, Napisałem program na AT90PWM3B (16MHz), który w sposób programowy zmienia wartość wypełnienia PWM. Impulsy są generowane w przerwaniu (CTC - Compare Match). PWM ma wartość 50 Hz - ta część działa prawidłowo. Nie zmienia się jednak wartość wypełnienia. Wypełnienie poszczególnych impulsów jest równe początkowej wartości zmiennej. Program zakłada,...
Witam znalazlem w sieci progam do dekodowania RC5 pod C wszystko dziala pieknie tyle ze program nie wykorzystuje przerwania tylko dziala w petli :( probowalem przerobic go na przerwanie INT0 ale okazalo sie ze cos sie zawiesza, domyslem sie ze to timer2 zawiesza sie przy wykorzystaniu przerwania ale po zmianie na timer0 nadal jest ten sam problem po...
Co do wydajności xmegi względem kamery jestem spokojny ponieważ kamera może pracować z mniejszą rozdzielczością i będzie przesyłać dane już gotowe w formacie RGB wystarczy je tylko zapisać w zewnętrznym sram który już obsłużyłem. Chce przechwycić tylko jedną klatkę. Widziałem tą kamere współpracującą z atmegami (16MHz) więc nie mam obaw co do Xmegi...
Witam, bazując na kilku kodach znalezionych w sieci popełniłem takie oto coś #define USART_BAUDRATE 57600 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #define MAX_INTS 100// number of interrupts to be done volatile int counter = 0; volatile int ms_counter = 0; // number of seconds / 10000 volatile int...
Witam, Mam płytkę ewaluacyjną STM32L1Discovery i mam mały problem ze zrozumieniem działania licznika SysTick. Przy włączonym HSE (32MHz), dzieleniu częstotliwości przez 8 i później przez 1000 w ustawieniach SysTick`a przerwanie teoretycznie powinno się generować co 1ms. W praktyce jest tak że dioda świeci około 2s(delay(1000)) gasnie 2s. Czyli mamy...
Witam, 1. 400kHz I2C a 20MHz ISP. Ile razy szybszy jest odczyt (i ew zapis) pamięci DataFlash od I2c EEPROM? Po pierwsze: nie osiągniesz 20MHz transmisji do pamięci DataFlash bo największa dopuszczalna częstotliwość pracy ATmega128 to 16MHz, a do tego częstotliowść pracy magistrali SPI ( a nie ISP In Cicuit Programing - programownie w układzie ) jest...
Przykładowy projekt migający diodą z ustawianą w #define wartością czasu cyklu (AVRasm2 - AVRStudio 4.12SP1) i to nawet na zegarze 16MHz : http://www.elektroda.pl/rtvforum/viewtop... P.S. powolne mruganie - wcale to nie denerwuje, tylko uspokaja - wręcz najważniejsze są powolne ruchy i głębokie oddychanie, jak mawia kol. wzagra......
Witam, Napisałem program do odpytywania stanu klawiszy na Atmega16, kwarc-16MHz. Według wyliczeń przerwanie powinno sie pojawiać co 2,5ms, jednak tak nie jest, jest o wiele wolniej (ponad 1s). Analizowałem program i sam juz nie wiem co może być źle. Pomóżcie Preskaler clk/1024=16000000/1024=15625 1/15624=0,064ms 40*0,064ms=2,5ms #include <avr/io.h>...
DEX - no cóż dlatego, bo taki układ już jest i nic nie da się teraz zrobić. Kolumny i wiersze są podpięte bezpośredni pod wymienione porty.. Więc bezpośrednie wykorzystanie zewnętrznego przerwania nie wchodzi w rachubę. mariuszlorenc - no wlasnie może o to mi chodzi, ale jak to się robi, bo to moje naprawdę pierwsze doświadczenie z Timerami, flagami...
Nie chcę inkrementacji. Wysyłam cały czas tą samą zmienną kilkukrotnie z jednej lokalizacji pamięci. W przerwaniu jest przeliczana na inną wartość w taki sposób: Ok. Niemniej jednak skopiowałem ten kod z #8 do CubeIDE 1.5.0, zrobiłem parę korekt pod moje PCB, dokonałem poprawnej implementacji flagi BUSY i wszytko działa jak powinno z inkrementacją...
To moze najprosciej na przykladzie leda zapalanego/gaszonego w obsludze przerwania od timera0 (tryb CTC). Przerwanie jest co 8ms, led zapalony/gaszony co 1s. Do odmierzenia 1s posluzylem sie komorka z sramu (o nazwie time) z zawartoscia 125 (125*8ms=1s). .org 0x0000 rjmp reset_int .org 0x0020 rjmp timer0_int .......... reset_int: ldi r16,125 sts time,r16;...
atmega16 16mhz kwarc 16mhz bootloader 16mhz
zasilanie brązowy suszarka dioda odpływ parownik
zasilacz laboratoryjny lm723 dyfuzor samsung
Cyfry 4:41 na wyświetlaczu suszarki - co oznaczają? Momenty dokręcania podpór wału korbowego Renault Megane II