Z tego co widzę w PDF-ie, sygnał z odbiornika musiał by być podawany na wejście ICP kontrolera, jest to noga Timera1 (tylko on obsługuje Capture).
Ok, Czy na Atmega też się da? Oczywiście, to zrobisz i na starym '51. Atmegi są bardzo różne - Atmega8 i ATmega4809 to dwa różne światy. Ale generalnie, każda ma timer, który może działać w trybie capture, w którym możesz mierzyć częstotliwość lub wypełnienie. Każda potrafi także sprzętowo generować PWM. Aczkolwiek przy podanych przez ciebie częstotliwościach...
Inna sprawa to że wejście w INTx to kilka taktów i już jest trochę nieaktualne jesli chodzi o Timerx. Nie lepiej połączyć ICPx i czytać Input Capture Register? Witaj Potrzebuję mierzyć na zboczu opadającym i narastającym a z tego co widzę ICP ma do wyboru tylko opadające albo narastające, chyba że jest jakaś możliwość.
Nie znam dobrze Bascom'a ale moim zdaniem to zapewne kwestia Timerów. Masz w kodzie [syntax=basic4gl]Period = Capture1[/syntax] jest różnica w przypisaniu dla ATMega 8 - ICP1 to pin 14 (PB0) dla ATMega 32 ICP1 to pin 20 (PD6) - zobacz czy ( i ew. co tam masz podłączone ) w załączeniu pinouty:
(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
Cześć. Od około dwóch tygodni pracuję nad układem, którego głównym zadaniem jest jak najdokładniejszy pomiar czasu propagacji fali ultradźwiękowej między dwoma membranami piezoelektrycznymi. Układ jest zbudowany zgodnie ze schematem blokowym przedstawionym poniżej: http://obrazki.elektroda.pl/4225526900_1... Mikrokontroler to Atmega328...
Po 1) użyj znaczników [code]... Po 2) funkcje inline _delay_us i _delay_ms muszą być wywoływane z argumentami o wartości znanej w trakcie kompilacji (stałe) - było o tym wielokrotnie na forum. [url=http://www.nongnu.org/avr-libc/user... Po 3) co do inline asm to zobacz [url=http://www.nongnu.org/avr-libc/user...
Można to zrobić inaczej, dokładniej... Trzeba tylko wykorzystać timer w trybie Input Capture... Acha tylko o jakich czasach mówimy...? us, s, min...? Mogę podesłać kod, ale to jutro bo mam go na innym komputerze...
Hej, Dzielnik zmieniłem i jest przed diodą. Dodanie kondensatora C6 za diodą powodowało, że przy rozłączeniu zasilania mega nic nie zapisywała i zliczała od zera. Podobnie jak wpisanie polecenia RISING. Odlutowałem C6 i zmieniłem polecenie na FALLING. Zamieniłem dzielnik tak jak był na początku a więc 100K i 18K tak aby comparator wyzwalał się przy...
Ale nie o to mi chodziło ;/ to zawsze mój problem dla którego na elektrode udaje się jak już naprawdę wyrwę wszystkie włosy z głowy, będziemy sie sprzeczać o 65535 ale nikt nie był w stanie mi pomóc...a wszyscy tacy mądrzy Bo my nie dajemy ryby tylko wędkę, a koledzy wiele już Ci wędek dali :) Dorzucę więc i ja kolejną tym razem wraz z rybą - pomiar...
Patrzę też, że u Ciebie występuje niepokojąca manipulacja konfiguracją ICP w obsłudze od przepełnienia. W obsłudze od przepełnienia mam tylko konfiguracje timera gdyby był zanik sygnału.. Tak zwany "timeout" gdy nastąpi pod rząd ponad 10 przepełnień timera (400ms) a ICP tego nie skasuje bo brak sygnałów to ustawia timer na zbocze narastające i ustawia...
Witam wszystkich. Potrzebuję mikrokontrolera do obsługi samego odbiornika ultradźwiękowego. Wiem, że potrzebuję czegoś z input capture i ADC ale nie wiem co dalej. Wiem, że można by to zrobić na jakimś Atmega ale zależy mi na dużej precyzji w określeniu czasu odbioru (a raczej różnicy między dwoma sygnałami bo rzecz jasna aktualna godzina mnie nie interesuje)....
Szukaj pod hasłem "Timer Interrupt Capture" przykładów jest od groma nawet pod Arduino ATMEGA328..
Zainteresuj się funkcją Input Capture Unit - opis oraz przykład dla C: http://mikrokontrolery.blogspot.com/2011...
Pokaż jeszcze schemat odbiornika. Na pierwszy rzut oka w ogóle masz to jakoś dziwnie zrobione - poprzez polling pinu odbiorczego? Poszukaj w sieci - są bardzo dobre przykłady w oparciu o tryb Capture Timera1.
Nie mam jak określić dokladnie częstotliwości, ale mniej więcej z przełożenia czujnika w skrzyni myślę że od 0 do 4000 impulsów na sekundę ( tak orientacyjnie), szerokość impulsu to 1/16 obrotu czujnika. Znalazlem dziś jedyny projekt, z którego mógłbym wziąć podstawę, ponieważ jest to obrotomierz czyli też zliczanie impulsów i podobno działa na takiej...
Witam, 1. W postach używaj znaczników kodu tak aby kod był czytelny i wyróżniony 2. W programie brak inicjalizacji stosu. 3. Rozkaz skoku do obsługi przerwania od SPI masz pod złym adresem. Adresy wektorów przerwań są co 2 słowa (4 bajty), a rozkaz RJMP zajmuje tylko 1 słowo (2 bajty) tym samym RJMP SPIIntVecror znajduje się pod adresem 0x000A (0x0014...
Zmienne static są inicjowane przypisaną wartością tylko raz, na początku programu. Kolejne wejście do procedury obsługi przerwania nie powoduje ponownego przypisania im wartości; mają wartość taką, jak po zakończeniu poprzedniej obsługi przerwania.
O ile dorze rozumiem idee tego przerwania (nie miałem okazji wykorzystać go w praktyce) to określona zmiana na którymkolwiek pinie z grupy wywołuje przerwanie... i teraz myślałem, żeby za pomocą prostych warunków zliczać, który wywołał i ile w danym czasie. Problem widzę w momencie, gdy przykładowo czujnik A wywoła przerwanie w bardzo krótkim czasie...
Mam problem z tym call i ret mam taki kod: ldi R16, 0x00 Co jest źle? W przypadku procesorów AVR zawsze na sam początek musisz ustawić stos w odpowiednim miejscu w pamięci programu. Praktycznie każdy program więc zaczyna się (dla atmega32) od rozkazów ustawiających stos. Za manualem str 45: Address Labels Code Comments $000 jmp RESET ; Reset Handler...
Rzut oka na datasheet, na pierwszej stronie: "Four 16-bit Timer/Counter with Separate Prescaler, Compare- and Capture Mode" Powinieneś więc dać radę zmierzyć nawet cztery takie sygnały i niekoniecznie zaczynające się w tym samym momencie. Trzeba wykorzystać tryb capture liczników. Chyba że chcesz się tak męczyć dalej to jeśli faktycznie oba sygnały...
Przykład wykorzystania Capture: http://mikrokontrolery.blogspot.com/2011...
a więc przerobiłem kod tak jak umiałem #include <avr/io.h> #include <avr/interrupt.h> void setup() { Serial.begin(115200); } //Counts overflovs volatile uint16_t T1Ovs1, T1Ovs2; //Variables holding three timestamps volatile uint16_t Capt1, Capt2; //capture Flag volatile uint8_t Flag; //Initialize timer void InitTimer1(void)...
Tak wiem że należy odpalić timer na początku i zatrzymać na końcu i odczytać jego wartość.. no nic. Dziękuję za wypowiedzi tak czy inaczej.. Odp. kol. Draco była troche sarkastyczna, bo na tak prostą procedurę nikt, kto ma choć troche rozeznania w tej dziedzinie chyba (!) nie szuka pomocy. Mopzesz to zrobić na kilka sposobów: 1. mierzyc czas metodą...
Ja tylko mowie co zaobserwowalem przez ostatnie 2 lata zabawy bezpilotowcami. Konektorow co wyparowaly koledze z powodu 2 niezbalansowanych 5s co sie bawil dwusilnikowcem Wam nie pokaze, i opisu aktu urodzenia rowniez. Ale zgadzam sie z opinia ze POlacy z POlski wiedza lepiej. Dodano po 32 Akurat w PCM nie jest po kolei. Po kolei jest w PPM. PCM ma...
Witajcie! Robię bibliotekę mającą w zamyśle być modułem do I2C slave, z użyciem atmegi 128A. Wyizolowałem najmniejszą możliwą część błędu który doświadczyłem, może ktoś z Was będzie miał pomysł co może być przyczyną. Żebyśmy wiedzieli o czym dyskusja, kod programu: avr-g++ -O0 -std=gnu++1y -Wall -Wextra -Winline -mmcu=atmega128a Testowałem również z...
Jesteś pewien co do tego PWM? Sterowanie wskazówką w licznikach najczęściej zrealizowane jest w oparciu o specyficzny rodzaj silnika - air core gauge. Tam wychylenie wskazówki uzależnione jest od relacji prądów płynących w dwóch przesuniętych o 90* cewkach. Próba odczytu napięcia/prądu tylko z jednej cewki da błędny wynik. Co do najprostszej implementacji...
1. Nie widzę deklaracji zegara systemowego więc skod kompilator będzie wiedział jak zrobić delay_100 ms W CodeVision ustawia sie to we wlasciwosciach projektu 2 Jesteś szybki jak zobaczysz na diodzie jak sie zapala i gaśnie co 0,1s Jak zmienie na 0,25s to i tak nic to nie zmienia, i tak nie działa /***************************************...
Trikess , w AVR jest też taka funkcja sprzętowa (Input Capture).Co prawda nie zeruje ona licznika, ale w AVR instrukcje (asemblera) są wykonywane króciuteńko i zegar nie jest dzielony przez 12, więc przerwanie od ICP1 może zawierać kod resetujący licznik, co nie wpłynie znacznie na jakość pomiaru, zwłaszcza przy takim zastosowaniu (wiatrak od PC).
A w pliku "m8def.inc" stoi: .equINT0addr=$001; External Interrupt0 Vector Address .equINT1addr=$002; External Interrupt1 Vector Address .equOC2addr =$003; Output Compare2 Interrupt Vector Address .equOVF2addr=$004; Overflow2 Interrupt Vector Address .equICP1addr=$005; Input Capture1 Interrupt Vector Address .equOC1Aaddr=$006; Output Compare1A Interrupt...
Ponieważ tzw. casting w BASCOMie jest nieco zbyt prosto zrobiony to proponuję zrezygnować z: Dim Xl As Word Dim Xh As Word A w przerwaniu pobierać zawartość z rejestru ICR za pomocą specjalnie generowanej dla tego celu zmiennej typu Word: Capture1 . Pętlę Do..Loop zamieniłbm na sprzętowe porównywanie i kasowanie licznika przez CTC. Niech takimi rzeczami...
Może podpowiesz jakie bity ustawić i które są za co odpowiedzialne??
Witam! Mam problem z popranym odbiorem danych. Kod wygenerowany przez kreatora jest przedstawiony na listingu. I teraz pytanie. Mam odebrać z odbiornika widomość o długości 154 bajtów. Wiadomość ta przychodzi co 1 sekundę i zaczyna się zawsze czterama takimi samymi znakami : (at)(at)Ha Próbowałem już robić to z pętlą, by odbierać 154 znaki, i potem...
Witam! Z tego co zauważyłem, a to: '-------------------------obsługa przerwań--------------------------------... '''''''''''''''''''''''sekunda - przerwanie od zegara'''''''''''''''''''''''''' Calasekunda: Cala_sekunda = 1 Stop Timer0 Impp = Tcnt0 Tcnt0 = 0 Start Timer0 Liczba_taktow = Capture1 Capture1 = 0 Return wg. mnie powinno być: '-------------------------obsługa...
Witam, w moim sterowniki midi mam 5 przycisków chwilowych których wywołanie wygląda tak aktualnie: [syntax=c] void readValves(){ // Read Valve 1 to 5 switches switchCombination=digitalRead(8) + (digitalRead(9)<<1) + (digitalRead(10)<<2) + (digitalRead(11)<<3) + (digitalRead(12)<<4); [/syntax] Chciałem zrobić tak żeby były na...
//timer 1 16bit konfiguracja (ICP1) TCNT1=0; //ustawienie poczatkowej wartosci timera 1 TCCR1B |= (1<<ICES1); //pomiar na narastajacym zboczu TIMSK |= (1<<TICIE1) | (1<<TOIE1); //zezwolenie na przerwanie od ICP i od overflow TCCR1B |= (1<<CS12) | (1<<CS10) ; //prescaler 1024...
Potrzebuję wysyłać po RS232 wartości : volatile unsigned int narastanie,opadanie,które są tymczasowymi wartościami rejestru ICR1. Są to czasy pojawienia się odpowiednio zbocza narastającego i opadającego w trybie input capture,ktory próbuję od jakiegoś czasu uruchomić,ale beż efektów.W tym trybie chcę mierzyć czas trwania impulsów,jakie pojawiają się...
#include <mega128.h> #define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7 #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC)...
Ten sam kod, który zaprezentowałem w pierwszym poście , natomiast przerwanie wywołane już na nodze portb.0 i działa zmienna nie jest nadpisywana. Cała reszta kodu bez zmian poza zmianą przerwania. Przerwania skonfigurowane prawidłowo. Moze przerwania masz skonfigurowane prawidlowo... ale..... Czy mozesz wyjasnic w jakim celu, w obsludze przerwania...
Witam Dla lcd opartego o sterownik KS0108 zastosowałem bibliotekę radzio : http://radzio.dxp.pl/ks0108/ Mój LCD ma rozdzielczość 192x64 piksele i 3 Piny CS . Procesor to Atmega128 taktowana 16MHz . Chciałem zbudować analizator FFT i zastosowałem bibliotekę z linku : http://elm-chan.org/works/akilcd/report_... mój program : [syntax=c] void capture_wave...
Witam, czytając książkę A. Pawluczuka natknąłem się na inicjację wektorów przerwań. Jak wiadomo w książce jest wykorzystywany µC ATmega8515 (niestety ja korzystam z ATmegi32). Przykładowa tablica tutaj: .orgINT0addr ;External Interrupt0 Vector Address reti ; ;---------------------------------------... .orgINT1addr...
No więc zgodnie z moimi przypuszczeniami masz tam sygnał cyfrowy, w którym informacja o położeniu jest kodowana jako czas trwania impulsu - 1,5ms położenie neutralne, 1 lub 2ms położenia skrajne. W takim przypadku to co potrzebujesz to: 1. Porzucić pomysły związane z ADC, 2. Zająć się timerem, a dokładniej układem pomiaru czasu trwania impulsu - input...
Tylko jest tego rodzaju problem iż atmega taktowana zegarem 16mhz przy preskalerze 8 i 8 bitowym liczniku minimalny czas jest w porządku (0,5us) maksymalny natomiast 128us więc dalej musze inkrementowac w przepełnieniu zmienną . Dodatkowo z tego co widze input capture przypisany jest tylko do timera1 ja go używam do innych celów (2 kanałowy pwm). Poradziłem...
Pierwsze wynik = wynik/10 trzeba usunąć, to stąd brał się ten błąd w wyświetlaniu, musi się zaczynać od Dziesiatki = .... Trzeba by dodać Start Timer1 no i pokombinować może dodaj jeszcze "edge = rising" obok "capture edge = rising"
Robi się to prosto na wejściu ICP Atmegi, mierzysz czas pomiędzy kolejnymi zboczami, raz jest opadające, raz narastające itd.. potem to tylko interpretacja wyników, liczenie bitów i po odliczeniu 64 bitów z transmitowanych 66, bo dwa ostatnie dla uproszczenia procedury pomijasz. wyświetlasz na LCD lub wysyłasz po RS232 do komputera, a tam wyświetlasz...
Witam, od jakiegoś czasu staram się wyłapać choćby najprostsze interrupty i włączyć sobie interruptem diody podłączone do atmegi, ale wygląda mi na to, że coś nie tak włączam obsługę interruptów. Oto kod: [syntax=c]/* * SensorTest.c * * Created: 2011-11-03 23:56:52 * Author: Prpht */ #include <avr/io.h> #include <avr/interrupt.h> uint16_t...
Witam ! Tworzę mały sterownik do auta i mam problem. Dotyczy on pomiaru częstotliwości (a właściwie czasu trwania stanu niskiego lub wysokiego) na Atmedze 128, która po dalszych przeliczeniach będzie mierzyć obroty silnika. Sygnał , który będzie mierzony to prostokąt o wypełnieniu 50% i częstotliwości w granicach 15-150Hz. Jak w tytule pomiar ma się...
Witam, złożyłem płytkę, napisałem kod i coś nie działa, narazie podam kod bo płytka śmiga byłbym wdzięczny za sugestie co jest nie tak że to nie chce działać, kod zbudowany po części w CodevisionAVR. Wyświetlacz jest na wspólnej Katodzie stąd mój wniosek że aby zaświecić jakiś segment muszę wysłać 0 na pin, a aby go zgasić 1. Jeżeli źle myślę to poprawcie...
Coś nie chce mi działać, wgrałem z kompilowany hex do procka i restartuje mi Z80 co chwile. Pod pinD cały i pod pierwsze 4 bity pinB mam podpiętego Z80 i po wgraniu softu z twoją poprawką resetuje się Z80. Cos mu zakłóca transmisje z resztą gratów ;) ale dzięki za chęci ;) Pokreciłeś to całkowicie... Jeżeli cały portD przeznaczyłeś na input Data, które...
Witam, pisze program w assemblerze który pozwarciu INT0, będzie wykonywać określoną czynność(łączyć się z innym urządzeniem), Ale narazie utknąłem w martwym punkcie, napisałem program który po zwarciu INT0 wywołuje przerwanie które zapala diodę podpiętą do lini PC0 5 razy i gasi(zapalenie uzyskuje poprzez ustawienie PC0 w stan wysoki). Całość funkcjonuje...
co do ponizszego trudno sie zgodzic: " ICP1 coś do komparatora (Input Capture Pin) OC2 coś komparatora OC1B coś do komparatora OC1A coś fo komparatora " zadne z tych pinow to nic do komparatora ICP1 to zewnetrzne wyzwalanie licznika 1 OC1 - to wyjsca licznika 1 zmieniajace stan w trybie porownania zawartosci TCNT i OCR1 (przy zrownaniu tych wartosci,...
Witam, Chciałbym mierzyć czas miedzy dwoma sygnałami gdzie pierwszy sygnał generuje START, a po kilkunastu mikrosekundach taki sam sygnał dochodzi z drugiego źródła i generuje STOP pomiaru. Odstęp między tymi sygnałami wynosiłby od kilku do kilkudziesięciu mikrosekund. Chciałbym do tego wykorzystać funkcje Input Capture Timera 1. Niestety Atmega328...
(...) Więc pytanie- zastosujesz rezonator kwarcowy w tym rozwiązaniu czy będziesz dalej próbował coś działać z generatorem RC? Zdecydowanie kwarc. Czym większa stabilność pomiaru częstotliwości tym większy zasięg wykrywacza. Pozdrawiam Dodano po 3 Dla uzupełnienia tematu działający prototyp: Filmik: http://youtu.be/bQox3S40gTE http://obrazki.elektroda.pl/2340370400_1...
Łap. Napisałem przy kubku kawy i najdłużej to organizowałem się do zdjęć :D To prosty kodzik i zawsze można coś poprawić. Niemniej, co widać na fotach, mierzy częstotliwość, wypełnienie oraz pokazuje czasy stanów Hi/Lo ;) Może się komuś przyda :P http://obrazki.elektroda.pl/4849788600_1... http://obrazki.elektroda.pl/2015178300_1...
1) Kompatybilność z ATmegą103 mam wyłączoną w 'fusach' 2) Można by to przetłumaczyć tak: "Jeżeli rejestr ICRn jest używany jako wartość TOP dla licznika, to pin ICPn zostaje odłączony i w konsekwencji funkcja Input Capture jest niedostępna." To chcąc zbudować układ przechwytujący sygnał wejściowy, taki jak w dokumentacji na stronie 118, nie mogę ustawiać...
Hej. Dzięki za pomoc. Działa trochę lepiej ale jednak dalej źle. Tym razem dane już się zmieniają w zależności od położenia drążka w nadajniku, ale druga zmienna zmienia się zawsze a jest zbyt mała żeby to była przerwa synchronizacyjna. No i nie wiem co to za dana na miejscu zerowym tablicy, w ogóle się nie zmienia. Jest niby ponad 8000 ale jak ustawie...
Do obsługi Timera1 są 4 wektory i nie wiem, które aktywować, co wpisać w procedurze odwołującej się, czy w ogóle jest taka potrzebna. Czy wystarczy tylko uruchomić te przerwanie i sygnał będzie generowany automatycznie ? Tabelka jest prosta: TIMER1 CAPT Timer/Counter1 Capture Event Zdarzenie z przechwycenia licznika (zwykle przez zmianę na pinie...
ok, mam rozumiec ze niezaleznie od tego co beda mierzyc poszczegolne kanaly (1...4 czestotliwosc do 2.5 khz oraz 5...8 napiecie od 0..24v) wszystkie musza miec tą sama czestotliwosc probkowania?? w tym przypadku robi mi to dosyc duzo zbednej informacji na kanalach napieciowych bo zmiany napiecia z zalozenia nie przekrocza 0,1v w czasie 0.02s a taka...
Witam. Jestem początkującym w dziedzinie programowania na elektronice znam się dobrze. Chciałbym zbudować komputer pokładowy do mojej hondy civic i znalazłem na elektrodzie projekt z pod tego linku. http://www.elektroda.pl/rtvforum/topic22... Płytkę zaprojektowałem na nowo pod atmege128 reszta bez zmian. Wyświetlacz od Siemensa s65 ls020 podłączyłem...
Ja troszkę odsunę się od odpowiedzi. I powiem tak: Jeśli poznasz dobrze jedną architekturę w raz z całą otoczką, tzn sposobami debugowania, posługiwania się narzędziami. Nauczysz się dobrze kodzić i nie mam tu na myśli napisania czegoś co działa, bo to dopiero 20% sukcesu. Bo niezawodność czytelność kodu i łatwość modyfikowania jest również ważna i...
Wcześniej sprawdzałem czy wchodzi do przerwania z pustą główną pętlą w pragramie - włączałem buzzerka w przerwaniu tylko. Teraz, powinno być tak, że po wejściu do przerwania (w moim przypadku przy wciśniętym klawiszu) buzzerek powinien dzialac, ale i po wyjściu nadal brzęczeć - a tu nic. Po wyjściu z procedury przerwania milknie, czyli gubi gdzieś ustawienie...
W sumie nie wiem ale nawet jak dało by radę zmusić ten Timer do pracy zarówno jako PWM oraz jako Capture to nic z tego nie będzie bo tryb PWM skraca cykl zliczania do 256 (albo 1024 albo jeszcze jakiejś innej) więc za długich impulsów to nie zmierzysz. Za pomocą Timera0 zmierzysz czas trwania impulsów tak jak każdym innym Timerem. Ale musisz się jeszcze...
Wyjaśnij jeszcze co to jest stan C, do czego służy i jak go definiujesz/rozpoznajesz, bo nijak tego nie idzie zrozumieć, to po pierwsze. Po drugie, możesz spokojnie przyjąć rozdzielczość pomiaru na poziomie 10 us. 1 us nic nie da, bo pojedynczy impuls nadajnika trwa min. 25 uS. Po trzecie, ponieważ użyteczne długości impulsów na wyjści TSOP nie przekraczają...
U mnie (Katowice) z DCF77 nie ma problemu, oczywiście zdarza się, że przez jakiś czas nie działa, ale przecież nie musi - wystarczy że złapie sygnał od czasu do czasu. Z tego co zauważyłem, to strasznie przeszkadza w odbiorze DCF77 komputer. Kiedy miałem zasilane układy przez USB to generalnie był problem, gdy je zasilałem osobno - z sieci lub z baterii...
Z demultiplekserem używałbyś prosto trybu fast-PWM do określenia długości impulsu (wyjście OCR podłączone do wejścia multipleksera), ze stałą długością timera (2ms?), przełączając wyjście na przerwanie compare match. Przez pewien czas na wszystkich wyjściach byłoby zero.
... tak naprawdę ma to być obrotomierz do motocykla . ... Priorytetem jest bardzo szybka reakcja wyniku .... Zastanów się czy nie warto wykorzystać w tym procesorze Timera pracującego w trybie Capture Mode: http://obrazki.elektroda.pl/4130623300_1... Znajdziesz w nim dodatkowo wbudowany układ redukujący szumy sygnału wejściowego oraz...
Mam problem z przerwaniami, a raczej z pewną różnicą w budowie Atmega8 i Atmega32, a mianowicie mam program, który działa prawidłowo na Atmega8 poniżej fragment http://obrazki.elektroda.pl/7547240700_1... Jakaś sugestia/pomoc?
No właśnie tylko u mnie dość cienko z programowaniem i obawiam się, że może mnie to przerosnąć. Do tej pory udało mi się odpalić wiele rzeczy, ale nie wiedziałem ze z tym będą takie problemy. Dobrze by było jakbyście rzucili też okiem na całość programu, czy jest jakoś w miarę poskładany. Edit: Znalazłem coś takiego: [syntax=vb] //Timer1 Capture //Timer1...
Uporałem się w końcu z tym jakoś. Program jest bardzo stabilny nic się nie sypie. Zrezygnowałem całkiem z pomiaru tych pierwszych 10 odczytów. Wolę poczekać te 10 sekund i mam od razu uśredniony wynik, a na czas tych pierwszych wyświetlam po prostu --.-L i ---km. Później już odpowiednio 12.0L i 200km. Pojeździłem trochę i rozdzielczość jest wystarczająca,...
Witam Napisałem prosty program używający timera1 i timera 2 do zliczania częstotliwości, Chciałbym użyć dodatkowo serwa do mojego projektu ale używając intrukcji Servo coś nie tak dzieje się z serwem . Po włączeniu zasilania ciągle pracuje i próbuje przekręcić się o 360 stopni "ciągle pracuje". Kiedy w kodzie spełniony jest warunek i uruchamia się komenda...
Witam, ja ogarnąć konfigurację tego tercetu? Korzystałem ze strony: http://vk5tu.livejournal.com/56648.html ... ale tam jest inny target. Mi zależy aby zmusić Atmel-ICE pod Linuksem do debuggowania Atmege32. Mój config: atmel_ice.cfg krzysiek(at)krzysiek:~$ cat atmel_ice.cfg ----------------------------------------... [syntax=ini]#...
Dr.Vee: On użył Timera1 bo to ma być uniwersalna procedura pomiaru czasu. W takim razie najlepiej użyć input capture i nie będzie żadnych opóźnień. Pozdrawiam, Dr.Vee
Sluchaj - krotka pilka - masz do dyspozycji trzy przewody - masa, zasilanie i sygnał. Zasilasz to z 5V. Odpalasz PWM na atmedze i sygnał zapinasz na pin od PWM atmegi np OC1A. Sterowanie polega na zmianie wypełnienia impulsu :) Realizujesz to w atmedze przez PWM oczywisccie :) U mnie smiga cos takiego: #include "naglowkowy.h" void Serwo_init(void)...
W programie masz bałagan, ale pewnie większym problemem są tu schemat i założenia. PWM 8Bit przy 16Mhz to wyjdzie 62,5kHz. Nawet małe silniczki mają bezwładność na poziomie 10ms więc to chyba niepotrzebne. Przy Twojej prędkości musiałbyś duży nacisk położyć na ten układ ze sterowaniem tranzystora. Dla tego PWM proponuję użyć jakiegoś preskalera. Potem...
czy w maxach ustawiasz poprawnie nadawanie i odbior bo moze tu robisz blad // USART1 initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART1 Receiver: On // USART1 Transmitter: On // USART1 Mode: Asynchronous // USART1 Baud rate: 9600 UCSR1A=0x00; UCSR1B=0xD8; UCSR1C=0x06; UBRR1H=0x00; UBRR1L=0x17; Brakuje ci UCSR1A tu masz caly...
Witam, Chciałbym zaprojektować matrycę led 8x8 w której losowe (pseudolosowe) ledy przyciemniały się i rozjaśniały, nawet kilkanaście jednocześnie i żeby wszystkie równo nie przygasały, tylko to przemieszać trochę; tzn. jedna się rozjaśnia, druga się przyciemnia, no w różnych fazach, żeby były. Sterowanie PWM multipleksowanej matrycy zdaje się być...
Witam. Problem który mi się nadarzył był już poruszony na forum (czyli nie jest to odosobniony przypadek), niemniej pozostał bez zadowalającej odpowiedzi. Mianowicie, w ramach przetestowania przetwornika podaję mu napięcie z potencjometru. Przy małych wartościach napięcia (nieco wyższych od zera) przetwornik bardzo zawyża (nawet do pełnego zakresu)....
Nie mam niestety kwarcu 8MHZ i nie mam jak sprawdzić. I nie wiem czy mogę użyć wewnętrznego oscylatora. Do kontroli amatorskiego RC-serva nie jest absolutnie konieczny kwarc! Błąd częstotliwości wewn. oscylatora w porównaniu do rezonatora kwarcowego jest mniejszy niż błąd serva. Musisz przyjąc ze zwykłe servo (bez encodera) ma błąd co najmniej 0.5...
nic to nie daje. Juz nie wiem co mam robić próbowałem jeszcze użyć LED - do portd.7 - w sygnalizacji przepełnienia T2. Przesyłam calutki kod programu: #include <mega8.h> #include <delay.h> int licz = 4; // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { licz++; } // Declare...
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:...
Może najpierw zacznę od tego co muszę zrobić. Potrzebuję generatora impulsów PWM, ma mieć kilka częstotliwości do wyboru z góry zdefiniowanych, po wybraniu jednej częstotliwości i naciśnięciu startu wypełnienie ma się zmieniać powiedzmy co 5 sekund o 5%. No to czeka cię zabawa z opcjami Prescaler i Pwm . Bo będzie to najprostszy sposób dla Ciebie....
Witam, pomijając kod, to Twój pomysł skąd się wziął? Z grubsza to masz 3 możliwości: - zliczasz timerem zmiany na pinie z pominięciem drgań - mierzysz czas między stanami wysokimi za pomocą Input Capture i zliczasz tylko te z minimalnym założonym odstępem - robisz normalną obsługę przycisku (w przerwaniu timera) i liczysz wciśnięcia. Nie używasz do...
Od dokładnych pomiarów czasu, a co z tym idzie częstotliwości jest Input Capture Unit: http://mikrokontrolery.blogspot.com/2011... ... i zmień język się na C.
Pozwoliłem sobie uczytelnić kod dla pokazania jak można sobie ułatwić pisanie kodu - zmieniamy w jednym miejscu, a zmiany są uwzględniane w całym kodzie... Daje to bezbolesną możliwość dowolnego przepięcia linii sygnałowych pod inne wyprowadzenia µC przy minimalnych zmianach w kodzie (podobnie jak w językach wyższego poziomu). #include <m16def.inc>...
Witam, zacząłem sobie dziś robić mały projekcik, są to 2 płytki z procesorami atmega32, jedna ma za zadanie naśladować silnik(prowizorycznie) jest generatorem impulsów prostokąt. z wykorzystaniem timera 16bit CTC, jeden kanał to częstotliwość a drugi to szerokość impulsu. Do przeliczania obrotów na minutę wykorzystałem wzorek: x=(F_CPU/(T1_PRESCALER*((float)obroty)/6...
#include <mega8.h> #include <stdio.h> #include <delay.h> #include <math.h> // 1 Wire Bus functions #asm .equ __w1_port=0x15 ;PORTC .equ __w1_bit=5 #endasm #include <1wire.h> unsigned int status=0, error=0; int temperatura=0, temperatura_zadana=0; unsigned char rom_codes[5,9]; unsigned char devices, ii; int ds1820_status=1,...
Atmega32 ma rejestr TIFR, czyli usuń "1". [syntax=asm]; Clear interrupts (if any happened). sbi _SFR_IO_ADDR(TIFR), OCF1A[/syntax] ; TIFR - Timer/Counter Interrupt Flag register .equTOV1= 2; Timer/Counter1 Overflow Flag .equOCF1B= 3; Output Compare Flag 1B .equOCF1A= 4; Output Compare Flag 1A .equICF1= 5; Input Capture Flag 1 edit. Jeszcze TIMSK zamiast...
Witam to mój pierwszy post na tym forum, stąd możecie mi wierzyć jak bardzo jestem zrozpaczony:) jeśli temat jest w złym miejscu to prosiłym moderatora o przeniesiegnie i z góry przepraszam:) zwykle staram się rozwiazywać wszystkie problemy sam ale tym razem mam coś czego nie jestem w stanie zrozumieć. Pracuję chwilę nad programem którego działanie...
Przy tak niskiej częstotliwości impulsów lepiej nie zliczać impulsy w czasie, lecz użyć zewnętrznego przebiegu do bramkowania licznika, który zlicza impulsy ze swojego zegara o dużej częstotliwości. Dzięki temu dostaniesz informację o liczbie taktów zegara referencyjnego przypadających na okres sygnału zewnętrznego. Umożliwia to dokonanie pomiaru w...
Tak jak piszesz. Żyroskop podaje sygnał sterujący serwem. Czyli jest to sygnał prostokątny. Gdzie dla neutralnej pozycji serwa co 20 ms występuje impuls o czasie trwania 1,5ms. Dla maksymalnego odchylenia serwa w lewo impuls ten skraca się do 1ms. A dla maksymalnego wychylenia w prawo - wydłuża do 2ms. Po opisie żyroskopu, można wywnioskować iż odchylenie...
Wystarczy zerknąć do DS i sprawdzić jak poustawiać rejestry. To jest kilka linijek kodu - uruchomienie timera w tryb input capture + przerwanie overflow od niego - uruchomienie innego timera w trybie ctc liczącego np 20ms. - obsługa przerwania w którym ustawiamy flagę (tego z ctc), że trzeba obliczyć szybkość - w przerwaniu overflow inkrementujemy jakąś...
(at)nowyARM W zupełności się zgadzam. Tyle, że w przypadku atmegi 8 jest jeden problem - brak ICP. Cała rodzina tych procków ma ICP. Od Atmega8 do Atmega32: "PB0 ICP1 (Timer/Counter1 Input Capture Pin)" dla A8.
PD6. Sorry . Już zmieniam więc. Generalnie najłatwiej by było gdyby licznik startował po otrzymaniu 1 impulsu z hallotronu i stopował się po otrzymaniu drugiego impulsu. Czas ktory by był zliczony oraz obwód koła po którym kręci się czujnik dałby mi prędkość obrotową.... Do tego służy ' Capture ' - np. Timer1. Sygnał Input do ICP1 e marcus
gdyby ten wątek czytał ktoś kto akurat przypadkiem nie ma właściwej książki ;) to przykłady zastosowania input capture na atmedze można często znaleźć w projektach gdzie odbierane są sygnały z pilota na podczerwień bo tam właśnie mierzy się czasy impulsów i przerw między nimi hm, właściwie to odpowiedzi są banalne: 1. tak 2. no przecież to proste skoro...
witam To moje pierwsze zetknięcia z AVR`ami stąd pytanie dla wielu może wydać się banalne lecz raczej nikt mi nie zarzuci, że nie szukalem ani nie czytalem. Przeszukałem całe forum ale o o środowiesku IAR jest bardzo mało postów. Wszystko to co wyczytałem pochodzi z user manulala Iar`a. Problem polega na tym, że po włączeniu licznika/ timera 1 oraz...
Ja to widzę tak: W celu uzyskania 1 taktowej precyzji należy odczytać (w tym przypadku) rejestr TCNT0 dokładnie w 8000000 takcie. Można też go odczytać w innym momencie i odjąć odpowiednią ilość taktów. Tylko jaką? Kluczowy jest ten fragment dokumentacji technicznej: The interrupt execution response for all the enabled AVR interrupts is four clock cycles...
Nie za bardzo rozumiem koncepcję z wykorzystaniem trybu CTC, mógłbyś ją rozwinąć ? Przecież aby zliczać impulsy potrzebuję tryb capture, co wtedy z PWMami ?
zaprzyjaznij sie z datasheetem i znajdz sobie w nim rozdzial p.t. Input Capture gotowy kod mozesz napisac na podstawie tego co tam znajdziesz, powodzenia. 0x41 0x56 0x45!!
ISR(INT0_vect) { ISR(TIMER3_OVF_vect) { TCNT3 = WARTOSC_PRZELADOWANIA; czas++;}} ISR(INT1_vect) {} Pomijając fakt że atmega16 nie ma timera nr3 ( tylko 0,1,2) ta konstrukcja wygląda dziwacznie :) skoro mam podłączony kwarc 16Mhz, to preskaler ustawiam na taktowanie zewnętrzne Taktowanie zewnętrzne wymaga fizycznego podłączenia sygnału taktującego z...
Jeśli jeszcze aktualne :) W ten sposób to obliczasz częstotliwość sygnału, a nie wypełnienie. Powinno być raczej: ts zawiera (bez konieczności przeliczania) czas trwania impulsu w mikrosekundach.
atmega compare capture capture failed capture server
atmel 24c64 wentylatora mercedesa szaleć touchpad
teltonika konfiguracja sprzedam tp118
Piecyk Vaillant nie zapala się, leci zimna woda Zmiana kierunku obrotu silnika DC potencjometrem