http://obrazki.elektroda.pl/6106634100_1... Przedstawiam projekt inteligentnej stacji meteorologicznej. Jest to nietypowa konstrukcja, zdolna do przewidywania temperatury powietrza atmosferycznego na kolejne 24 godziny. Wykorzystałem do tego celu sztuczną sieć neuronową. Stacja rejestruje co minutę wartość temperatury oraz prezentuje...
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...
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...
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);...
To o czym piszesz to jest implementacja konkretnego algorytmu którego się trzymasz. Najwidoczniej nie najlepszego, skoro 16MHz nie wystarcza żeby odpowiedzieć na prosty impuls. Jak wrócę do projektu (może jeszcze jutro) to pokażę kluczowy fragment programu w C, rozwinięcie assemblerowe i oscylogramy. Dodano po 9 No i przy okazji jestem prawie pewny,...
to zatrzymanie timera przed załadowaniem wartości jakby pomogło (przynajmniej nie zachowuje się dziwnie) teraz miga w równych odstępach ale nadal nie działa tak jak potrzeba przy ustawieniach jak poniżej P,I = 20 mignięcie diody jak i przerwa trwają po ok 1 sekunde (na razie testuje na diodzie bo oscyloskopu niestety nie posiadam ) a chyba tak być nie...
Wrzucam moją wersję programu do obsługi 4 serw. W ostatnim tygodniu zakupiłem swoje pierwsze dwa serwa, więc mogłem się pobawić problemem ich sterowania. Z powodu, że mam tylko dwa, jedynie dwa kanały są sterowane z przetworników ADC. Pozostałe są obsługiwane przez przerwania, ale nie ustawiane. Wartości dla serw wpisuje się w tablicy serwa_val[]. Doświadczalnie...
bierzesz pod uwagę nie to przerwanie. zobacz czasy dla TIMER/COUNTER1 OCR1A Compare Match
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.
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ź.
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...
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,...
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ć...
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.?
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...
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...
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...
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...
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...
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...
Spróbuj zmienić początek programu - wektory przerwań: ;================================ .CSEG .ORG0x0000 jmp RESET .ORGOC1Aaddr jmp TEST ;Przerwanie zgodnego porównania OC1A .org0x0050 ;....... dalsza część programu
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...
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....
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...
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.
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.
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...
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...
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 =...
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...
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...
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%
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...
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...
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.
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...
Witam. Mam mały problemik z UARTem . Mianowicie wszystko dziala ladnie , wysylanie i odbieranie znakow. Problem powstaje w momencie gdy wlacze przerwanie od zakonczenia nadawania (TXC: USART Transmit Complete ). Wowczas po wyslaniu jakiegokolwiek znaku z mikroprocesora mikroprocesor sie restartuje. Uklad to ATmega16, kwarc 16Mhz, predkosc transmisji...
Witam mam taki problem gdy uruchomię ten program to żarówka bardzo miga. Zliczyłem ilość wywoływanych przerwań i wyszło że na 400 detekcji zera jest 100 przerwań od timera w czasie 4 sekund. Więc detekcja zera działa prawidłowo. Używam Atmega168, kwarc 16Mhz. F_CPU ustawiłem w kompilatorze i działa napewno 16Mhz http://obrazki.elektroda.pl/4656291300_1...
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...
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...
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...
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...
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.
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...
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
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)....
Mam 16MHz, czyli: 16000000/128 = 125000 125000*13=1625000 (1/16Mhz)*162500 = 0.10075 sec ?
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...
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...
atmega16 16mhz kwarc 16mhz usbasp 16mhz
serwis huawei zalany hyundai falujące obroty sygnał zmiana zamykać
interfejs multidiag electrolux mruga start
Kostka zamka tył Citroën C5 I – pinout, naprawa, numery OE, typowe usterki Kolor przewodu świateł postojowych Iveco