Witaj, Pobieżnie patrząc na program, wygląda prawidłowo. Może podłącz do jakiegoś pinu LED i zmień: [syntax=c]ISR(TIMER1_COMPA_vect) { PORTTESTOWY ^= (1<<pin_testowy); //zmień stan LED na przeciwny }[/syntax] i sprawdź czy co 1sek się zmienia. Oczywiście ustaw pin jako wyjście.
Nie, podajesz na jedno wyjście wiersza stan niski i sprawdzasz stan wejść kolumn podciągniętych wwnętrznei do plusa. Robisz to zwsze w przerwaniu timera. To samo przerwanie może służyć np. do wyświetlanai LED, o ile masz w systemie wyświetlacz multipleksowany.
Owszem, wykorzystać AVR z rodziny XMEGA - tam timer jest o wiele bardziej elastyczny, można go też taktować z innego timera, w efekcie uzystać dowolny preskaler zegara. W ATMega 64 timer też może mieć zewnętrzny zegar, możesz więc zewnętrznie połączyć wyjście jednego timera, który będzie preskalerem z wejściem zegarowym innego timera. CLK/2 w ten sposób...
Można. Można też zamiast sprawdzać stan pinu programowo, podłączyć pin wyjściowy Timera pod jakieś przerwanie INTx.
The extreme values for the OCR0 Register represents special cases when generating a PWM waveform output in the fast PWM mode. If the OCR0 is set equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR0 equal to MAX will result in a constantly high or low output (depending on the polarity of the output set...
Dodam że w programie poprawiłem błędy składni a nie popatrzyłem na schemat i nie poprawiłem błedów logiki. Na schemacie podłączone masz tylko wyjście OC1A więc odwoływanie się w programie do PWM1B jest całkowicie bezcelowe. Do tego DC_on_off to alias pinu OC1A czyli Timera1 który został ustawiony w tryb generowania sygnału PWM. W takim trybie Timer...
Proszę, może to Cię zachęci do przeczytania reszty we własnym zakresie. Program "miga" nośną 38kHz co 1ms ;) http://obrazki.elektroda.pl/5631733100_1... [syntax=vbnet] $regfile = "m8def.dat" $crystal = 8000000 $hwstack = 64 $swstack = 32 $framesize = 32 Config Timer2 = Timer , Prescale = 1 , Compare = Toggle , Clear Timer = 1 Compare2...
Używam Timera1 z Atmega164P w trybie CTC, Atmega ma kwarc 16MHz, interesujący kawałek programu wygląda tak: Konfiguracja Timera: void Timer1_Init(void) { DDRD |= (1<<PD7); // PD7 wyjście PORTD |= (1<<PD7); // PD7 <= 1 TCCR1B = (1<<WGM12)|(1<<C...
Podłącz diodę optotriaka pod wyjście OCx procesora, dzięki temu impuls wyzwalający będziesz mógł generować sprzętowo za pomocą timera.
Dlaczego przy wypełnieniu 100 % stoi, a przy 0 % coś tam się dzieje ? Co oznacza PWM o wypełnieniu 100%? To już nie są impulsy, to jest napięcie stałe. Dlatego zmieniłem preskaler na 1024 i teraz mam częstotliwość 488 Hz oraz okres 2 Nadal nie rozumiesz. Potrzebujesz częstotliwości ok. 50Hz, a nie 488Hz. Proponuję to zrobić w osobnym projekcie na timerze...
http://obrazki.elektroda.pl/3637756900_1... http://obrazki.elektroda.pl/6313868300_1... Zrealizowałem w tym roku swoje postanowienie jeszcze sprzed zeszłej zimy i zrobiłem sobie wreszcie własny sterownik pieca CO. Na początek pytanie "dlaczego"? Otóż oryginalny dostarczony z piecem przede wszystkim miał 6 poziomów nadmuchu...
Witam, nie znam się, ale możesz na szybko spróbować na jednym timerze liczącym do 2.5ms z przerwaniem porównania przy wartośći dla serwa gdzie ustawiasz stan niski i przepełnienia, gdzie zmienisz serwo na kolejne, ustawiając wyjście serwa na wysokie i nową wartość porównania. W pętli głównej zmieniasz tylko wartości dla serw. Pewnie słaby sposób, ale...
Na ATmega 128 posiada sporo pinów. Jeśli 8 z nich ci nie jest potrzebnych to możesz spokojnie taki przetwornik wykonać. Rozdzielczość przetwornika będzie wynosić 8bit, czyli 256 stanów logicznych. Filtr i tak musisz zastosować w celu wygładzenia przebiegu schodkowego. Stosuj rezystorki z zakresu 10-20KOhm ale bardzo zbliżonej zmierzonej rzeczywistej...
Opóźnienie - zatrzymanie timera na określoną ilość cyklów zegara. Zanegowanie - zmiana wartości w rejestrze porównywania(chyba OCRx). Zamiast 10 dajesz 255-10=245. Wystawić na innym wyjściu - zmienić timer. Pomyliłeś pojęcia myśląc, że układ sprzętowego PWM steruje na rejestrze PORTx. Takie rozwiązanie nie pozwalało by użytkownikowi na korzystanie z...
Zadeklarowałeś "Zmianna" a przypisujesz "Zmienna". :) Edit: Wyjście z procedury obsługi przerwania wykonuje się za pomocą Return a nie Goto Glowny ! Resztę błędów znajdziesz sam. :)
Łopatologicznie: a) Prąd bazy obiliczymy sobie tak: (napięcie zasilające procesor - napięcie kolektor emiter) / rezystor baza- wyjście procesora. Oczywiście tranzystor NPN, Emiter do masy, obciążenie dopięte do kolektora. Teraz badamy ile wynosi minimalne wzmocnienie tranzystora BD139. Parametr hFE3. zależnie od grupy tranzystora może to być tylko 40....
Napisałem raczej... i do tego kolejna osoba rozwiała wątpliwości... Wiele czasu kiedyś szukałem co jest nie tak a okazało się że zapomniałem pina jako wyjście ustwić. To zalezy od konkretnego pinu gdyż niektóre mają inną budowę.
Masz najnowszą wersję 2080? Czasem gdzieś się czai jakiś błąd i wtedy warto sobie zrobić taki ekspresowy kodzik który najpierw konfiguruje licznik a potem od razu odczytaj rejestry i sobie wyświetl w postaci binarnej. Można wtedy sprawdzić z notą czy wszystko ustawione tak jak powinno. Nie wszystkie tryby licznika da się do końca skonfigurować Bascomowymi...
Jak poprawnie skonfigurujesz to zadziała. Oczywiście sam licznik to nie wszystko, trzeba jeszcze ustawić port jako wyjście.
Witam, męczę się już któryś dzień nad nową Atmegą128 i gdy nic nie znalazłem na forum co by mi pomogło postanowiłem zadać pytanie. Czemu ten uC nie wchodzi mi w przerwanie? Napisałem prosty program testowy, steruje on silnikiem krokowym, po określonej liczbie impulsów ma zmienić ICR1 co powoduje wzrost częstotliwości a zarazem prędkość obrotową, na...
Ten bit uruchamia lub wyłącza tryb zgodności z nie produkowaną już megą103. W tym trybie dla przykładu masz do dyspozycji tylko jeden USART, jeden 16bitowy timer zamiast dwóch, PORTC działa tylko w trybie jednokierunkowym (tylko jako wyjście) itd... Z pozostałymi różnicami postaraj się zapoznać już samodzielnie (nota str.4, 5).
Witam Jak najbardziej nadają się do tego timery. Wykorzystujesz wyjścia OCxA, OCxB i OCxC. Każdy timer mający wyjście OCx nadaje się do tego, trzeba ustawić go w tryb CTC ale też można korzystać z PWM, ustawiając odpowiednie wypełnienie.
Witam, pracuje nad małym systemem modułowym do sterowania w domu. Na ten moment mam : -klawiaturę Matrix do wpisywania kodu do drzwi (atmega88pa) -manipulator do temperatury (atmega164pa) -czujnik temperatury (attiny84a) Zamówiłem wszsystkie części i własny projekt płytek pcb. Klawiatura działa bez żadnego problemu, program wgrywa się i działa w 100%...
W tym momencie nie mogę; ale podłączyłem poprawnie zasilanie bo świeci się dioda na sterowniku, i jedną nózkę sterownika do masy, a drugą do pinu 11 w Atmedze... Nie możesz mieszac 'zwykłej' numeracji pinów mega8 z numeracją przyjęta w Arduino. Te numery nie pokrywaja się !!! Pin 11 dla Mega8 jest PD5 lub alternatywne wejście Licznika/Timera1 (w Arduino...
Do sterowania 16 (a nawet 20) diod, z których świeci tylko jedna, potrzebujesz 5 linii portów mikrokontrolera i 5 rezystorów i nie trzeba do tego jakiegokolwiek multipleksowania - po prostu zapalasz tę właściwą diodę wystawiając 0 na jedno wyjście, 1 na drugie, a pozostałe trzy ustawiasz jako wejścia. Dowolny współczesny uC (czyli raczej nie stara ATmega)...
Po pierwsze OCR0 nie jest 16b tylko 8b ... zapisując 499 do rejestru trafia 243... Reszte sprawdzam... //Dla porównania czyścisz wyjście, więc zakładam, że pamiętałeś o włączeniu podciągania na tym pinie. ////Nie konfigurując bitów WGM00 i WGM01 timer zlicza do 255, a przy 243 czyści wyjście ... to nie jest 50% duty(wypełnienia). //////PS. Twój miernik...
Bardzo dobrze, uznałeś że wait zupełnie się nie nadaje... Ja bym zrobił to tak: Timer generuje przerwanie co ok. 1s w przerwaniu zwiększam jakąś zmienną o 1... Z resztą poniższy przykład chyba najlepiej Ci wytłumaczy moją idę: do if wejscie_1 = 1 then licznik_1 = 0 flaga_wejscie_1 = 1 end if if flaga_wejscie_1 = 1 then ' to mozna umiescic w przerwaniu,...
Ustawiłeś tryb fastPWM i preskaler na 256. A zatem częstotliwość sygnału PWM będzie w okolicy: F_PWM = F_CPU/(preskaler * TOP ) = 8MHz/(256 * 256) = 122Hz Dodatkowo wpisałeś do rejestru OCR0 wartość 104 . Na początku gdy licznik ma TCNT0 = 0 wyjście PB3 jest w stanie wysokim. I dopiero jak licznik zliczy do TCNT0 = 104 zmieni się stan wyjścia PB3 z...
PB3 jest wyjściem PWM podłączonym do timera nr 0, natomiast PD7 do timera numer 2. Musisz po prostu skonfigurować analogicznie pozostałe dwa timery. Tylko że one są 8-mio bitowe, więc rozdzielczość będzie gorsza.
... Później wykorzystałem wyjście CompareA , skonfigurowałem charakter na toggle i pięknie sygnał generuje, nic nie przeszkadza sygnał jest ciągły, ale za jasną ch... nie mogę wpisać początkowej wartości i regulować częstotliwość... Świetny pomysł, tylko gorzej z wykonaniem :D Użyj jednego z dwóch trybów CTC timer1 i zmieniaj wartość końcową , czyli...
Przepraszam, że odkopuję temat ale mam problem właśnie z timerem 0 w atmedze 328p i jak bym miał zakładać nowy temat to nazwał bym go prawie tak samo jak ten więc wolałem napisać w już istniejącym temacie. Chcę sprawdzić działanie 8-bit Timer/Counter0 w ATmega328P. Efekt do uzyskania prosty. Ustawiam pin C5 jako wyjście (na początku stan niski) i przy...
Taki prosty multiplekser można zrobić na dowolnych bramkach logicznych, wyjdą 2*3, na sygnał, więc np. 2x74xxx00, lub 4 jeśli zastosujesz bramki z wyjściem OC i zrobisz wired and.
Fajny ten kalkulator...tylko skomplikowany. sie przyda. Teraz może dalej te timer'y ,Czy tak uzyskam PWM na Pinb.0 o częstotliwości zależnej od wyniku ADC? Jak już męczyć tajmery to tak żeby je troche znać... Config Portb = &B11111111 'Portb.0 ma być wyjściem Config Timer1 = Timer , Prescale = 1 Enable Interrupts : Enable Timer1 On Timer1 Gen Dim...
dzieki za odpowiedz co do prezrwan to troche trudna sprawa bo jesli zrobie to na przerwaniach i bede dzielil zegar np 8 mega na 1 mega to co 8 cykli sie wywola przerwanie i bedzie bardzo absorbowac uC ktory ma troche inne zaganie niz podzial zegara(kod mam napisany w C to troche truno nawet przewidziec ile czasu sie bedzie wykonywal). Troche dokladniej...
Xmega niby jest super, ale jeżeli chcesz puścić dane przez port SPI (max. 8MHz, więc teoretycznie 200pxl), to nie masz bufora i pojawia się kwestia stabilizacji obrazu. Bufor ma tylko USART w trybie SPI, ale on pracuje z prędkością do 4MHz (100pxl/linię). Możesz użyć DMA do transferu danych na port, z którego uzyskasz kolory, ale... Prędkość DMA zależy...
Nie jest to lepszy przykład. Jak widze te delay_us w przerwaniach to aż mnie skręca. Z całym szacunkiem ale nasuwa mi się tylko jedno słowo: amatorszczyzna. Jeżeli Ci się wydaje, że robisz coś przełomowego i odkrywczego to chciałbym Cię uświadomić, że jesteś w błędzie. Finalną wersje optymalizacji można będzie zobaczyć w EP, to jest szybka poprawka...
Przede wszystkim to zastanów się dlaczego do generowania nośnej usilnie chcesz pisać jakiś kod programu i obciążać tym program główny procesora, skoro można to zrobić CZYSTO sprzętowo za pomocą timera. Tylko nie Timera0 bo ATmega8 jest biedna w porównaniu do ATmegai88 gdyż timer0 nie posiada w niej trybu CTC. Tymczasem masz jeszcze timer2 i wystarczy...
Witam, Nie odpisałem wcześniej bo nie byłem dyspozycyjny. Mogę powtórzyc, tak jak wcześniej ze ja odblokowałem moją atmega(128L) dzięki generatorowi, który zrobiłem na atmedze16(wczesniej pisałem ze na atmie8 ale to nie ma różnicy!!!) ok.2MHz. Na atmedze16 miałem kwarc zew.12MHz. Korzystałem z funkcji OC i trybie generacji fali CTC(z zerującym zegarem),...
W oparciu o Wasze rady oraz [url=http://www.avrfreaks.net/index.php?... Guide to AVR Timers i przydatną stronę [url=http://www.et06.dk/atmega_timers/]A... Timer/Counter/Prescaler Calculator w wolnym czasie sklepałem taki kawałek kodu: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h>...
Spróbuj tak, tylko zmień na PORTA bo ja miałem wolny PORTB: #include <avr/io.h> #include <avr/interrupt.h> // Biblioteka przerwań #define LED_TOGGLE PORTA^=_BV(0); volatile uint8_t stan; ISR (TIMER0_OVF_vect) // Przerwanie od przepełnienia timera0 { //LED_TOGGLE; stan=!stan; if (stan) PORTB=0; else PORTB=255;...
Sygnał taktujący podawany jest na pin XTAL1 AT90CAN128. Generowany jest przez ATmega16 (TIMER1 wyjście OC1A) więc mogę go sobie zmienić. Myślałem że to przez ten sygnał komunikacja nie działa dlatego jest taka mała częstotliwość. Dodano po 1 Wróciłem do wcześniejszych ustawień: AT90CAN128: taktowany z wewnętrznego kwarcu 8MHz, BAUD = 600 ATmega16: taktowana...
Zielonego pojęcia nie mam który pin w Arduino ma oznaczenie ma oznaczenie 28 a który 15. Możesz to podać jako numery pinów AVR? Np. PC6 albo PA3? Zobacz czy według noty pdf ten pin ma jeszcze jakąś funkcjonalność - np. wyjście PWM dla jakiegoś Timera oraz zobacz czy przypadkiem w innej części programu nie korzystasz z tej funkcjonalności.
Czemu ma służyć ten kod: ISR(TIMER1_OVF_vect) { PORTB|=(1<<PB1); // podciągnięcie do VCC } Tryb PWM nie wymaga "ręcznego" sterowania wyjściem.
ElKuba, a czy atmega8 i AtMega16 masz fabrycznie nowe, czy od kogoś ? Może ktoś wpisał fuse jak już napisałem w pierwszym poście: ...Napisany program testuję w programie Proteus 6.5. ... I teraz mam pytanie czy jest to problem wynikający z niedociągnięć programu proteus... Tak więc projekt testuję tylko wirtualnie za pomoca Proteusa, i dla atmega 8...
82C54 jest do kupienia, ale jest znacznie droższy od NE555 (kosztuje prawie 11zł), czy CD4541: [url=http://www.ceneo.pl/32561364]82C54 na Ceneo.pl. Opis jest na stronie Intel-a: [url=http://download.intel.com/design/ar... katalogowa, [url=http://www.intel.com/design/archive... trybów...
Witam Kolegów. Mam mały problem. W zasadzie mój problem polega na tym, że działa coś co moim zdaniem nie powinno działać. Napisałem prosty kod na obsługę timera w ATmega 32. Prpgramik ma generować na 1-szym pinie PORTA sygnał o określonej częstotliwośći. Kod jest następujący: #include <avr/io.h> main() { DDRA=255; //ustawienie PORTA...
cały kod Zmień jeszcze: #define led1 PB1 //defincja diody podłaczonej do PB1 - wyjście OC1 i podłącz diodę do PB1, wtedy nie potrzebujesz używac interruptu. e marcus
To co opisał excray jest widoczne także na schemacie timera, a tutaj znajomość angielskiego nie jest potrzebna :) http://obrazki.elektroda.pl/1695037200_1... Czy teraz już widzisz jak TCNT1 jest porównywany z OCR1A i/lub OCR1B, i których pinów OCn dotyczą? No dobra ale skąd wiadomo że np. w trybie CTC procesor ma porównać TCNT1 z jakim...
Dzięki za zainteresowanie moją sprawą. PD5 podłączyłem kontrolnie, aby sprawdzić, czy mój tok rozumowania jest poprawny i jak mogłeś się przekonać uruchamiając program u siebie, Timer1 działa znakomicie. Problem jest z Timerem0 i wyjściem OC0 (PB3). I tak planowałem kupić drugą Atmegę do innych celów, więc przy okazji sprawdziłem program na nowej i...
Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'. Dopóki choć trochę nie pokumałem o co chodzi z uP, to ta książka była do bani, bo pisana kosmicznym językiem, mimo, że po polsku. Dopiero teraz ją doceniam. A chodzi mi o to, że ciężko znaleźć literaturę, która od razu wyjaśni wszystko fajnie - właśnie dlatego napisałem na forum, aby ktoś chć trochę...
Byłby ktoś w stanie mi z tym pomóc? Miałoby to wyglądać tak: * sterowanie wentylatorami czasowo * sterowanie poprzez odczyt temeratury 2 osobne funkcje (działa albo jedno albo drugie). Do tego co mam dołożenie wł/wył czasowego (w zupełności wystarczy najprostsze z możliwych) OK, Popatrz na swój program; sterujesz ustawienia trzema przyciskami, z których...
W inicjalizacji portu: void PORTinit(void) { PORTC=0xFB; // wartość startowa DDRC=0xFF; // port C jako wyjście } Po restarcie piny proca sa ustawuione domyslnie jako wejscia, Ty podciagasz te wejscia do + : PORTC=0xFB; // wartość startowa a potem dopiero ustawiaszport jako wyjsciowy : DDRC=0xFF; // port C jako wyjście Powinno byc to...
Timery najprościej zsynchronizować taktując je ze wspólnego przebiegu zegarowego, który może być generowany przez 3 timer. W skrócie w jednym procesorze puszczasz timer i wyjście z niego dajesz na pin OCx. Z tego wyjścia doprowadzasz sygnał zegarowy na piny Tx timerów w innych procesorach. Po konfiguracji, jeśli wyzwolisz timer generujący zegar to pozostałe...
Na próbę zrób: i sprawdź, czy są zmiany na pinie D5. Na to bym nie wpadł, z noty katalogowej wynika, że nie powinno się podciągać jako wyjście, robi się to wpisując bity w COM1A1 i Com1A0. No i oczywiście działa :)
Jak rozumiem, chodzi o to, żeby timer zliczał impulsy podłączone do pinu T1. To dlaczego ustawiłeś ten pin jako wyjście?
Tu nie ma żadnej filozofii. Ja co prawda programuję na ATmega16 i procedura wygląda tak: void generator_PWM(unsigned int wypelnienie) { TCCR2 =0x69; //tryb FAST PWM, bez preskalera, zeruj OC0 gdy porownanie = TRUE; f = 16M/256 = 62,5kHz OCR2 = wypelnienie; //wartosc porownywana 0..255 } Jak zrobiłeś PWM na ATmega32 to z tego co wiem...
Prawidłowo. Dodam tylko, że skoro wykorzystujesz Timer1 i wyjście OC1A, to zamiast OC0 warto byłoby użyć wyjścia OC1B, bo także należy do timer1. Wtedy do generowania dwóch PWM użyjesz jednego timera zamiast dwóch. I jeszcze drobna uwaga - sygnały dołączaj do kluczy (tego ruchomego przełącznika z rysunku), a nie do dolnych punktów kluczy. Sygnał pełni...
Tak,zgadza się,po prostu z rozpędu wpisałem Timer3,bo pisałem wcześniej na Atmega128. Poprawiłem nieco kod,ale nadal mam problem z zatrzymaniem stopera. Czy może tryb CTC będzie tutaj lepiej współgrał? [syntax=c] #define F_CPU 16000000uL #include <AVR/io.h> //biblioteka we/wy #include <AVR/interrupt.h> //obsluga przerwan #include <util/delay.h>...
W części KONFIGURACJA_PINOW, której tu nie wkleiłem. Jeżeli to bardzo istotne to mogę ją podać. Nie zrobiłem tego tylko dlatego aby oszczędzić czytającym 100 kilka linii definicji stałych, a następnie konfiguracji czy dane wyprowadzenie to wejście/wyjście i jeżeli wyjście to w jakim stanie. RCALL MAIN dodaje to gdyż kiedyś jedna instrukcja RET wróciła...
Witam . Napisałem ( prawie) sobie na ww procesor program w asm i bascomie który ma robić za zamek otwierany kartą . W bascomie wszystko działa w 100 % według założenia jednak w asm mam taki problem że układ sam zmienia swoje taktowanie (ponad 2x) przez co wszystkie funkcje czasowe nie pracują jak powinny . Nie było by w tym nic niezwykłego ( ustawiony...
Witam forumowiczów :D! Tworze projekt na zaliczenie - prostą perkusje elektroniczną, która posiada 12 przycisków, czytnik kart SD i wyjście PWM podpięte przez wzmacniacze do gniazda jack. Wszystko do momentu odtwarzania dźwięku działa poprawnie - wartości z pliku czyta prawidłowo (przetestowane na diodzie). Problem pojawia się gdy zaczynam odtwarzać...
a czy mógłbym w takim razie prosić o jakiś przykład z getrc5? ja używam czegoś takiego: '---------------------------------------... ' RC5.BAS ' (c) 2000 MCS Electronics ' oparte na nocie aplikacyjnej AVR410 f-my Atmel '---------------------------------------... $regfile "m1280def.dat"...
Witam Zrobiłem sobie układ, który ma na wyświetlaczu wyświetlać godzinę oraz temperaturę wody. Samą obsługę wyświetlacza jakoś udało mi się ogarnąć, natomiast mam problem przy odczycie temperatury z czujników oraz czasu z ds1302. Na początku ustawiam sobie godzinę 10:40 i to wyświetla się poprawnie, ale jak idzie odczyt z ds1302 to wyświetla mi się...
Obawiam się, że żaden AVR nie jest w stanie obsługiwać przerwań zgłaszanych z częstotliwością > 400 kHz. Czynności sprzętowe związane z obsługą i wyjściem z przerwania zajmują kilkanaście cykli zegara, do tego dodaj prolog i epilog procedury - następnych min. kilkanaście cykli. W ogóle nie używa się aż takich częstotliwości przerwań - takie rzeczy trzeba...
Zastosowałem rozwiązanie oparte na mikrokontrolerze z rodziny ATmega + zmodyfikowany przez Briana Lowa szkic autorstwa Bena Buxtona. Wyjście na 2 mikroprzekaźniki. Działa bez zarzutu. Jest debouncing, nie ma gubienia impulsów. Układ działa nawet przy "wariackim" kręceniu pokrętłem enkodera (choć nie do tego został stworzony). W przyszłości: - przepisanie...
Nie mam przez weekend dostępu do programatora itp. aby sprawdzić mój program. Czy poniższy kod zadziała jak programowe pwm na pd.2 oraz czy pb.3 będzie sobie mrugał? Wiem że nie powinienem pytać, tylko to sprawdzić ale zależy mi na waszej opinii :D $crystal = 1000000 $regfile = "m16def.dat" Config Timer0 = Timer , Prescale = 8 On Timer0 Przerwanie...
Dzień dobry, Pytanie do doświadczonych wyjadaczy. Chciałbym uzyskać możliwość sterowania jednym timerem - TCA0 do wysterowania dwóch różnych przebiegów PWM (1250 Hz i 5 kHz). Kontroler, jaki używam, to Atmega4808 z F_CPU = 20 MHz, podziałka prescalera jest ustawiona na 64. Jak chcę móc przełączać konfigurację timera w osobnej funkcji "switch case",...
Witam! Ostatnimi czasy walczę z regulatorem PID opartego na ATmega16 do pieca oporowego. Chcąc zastosować często polecaną bibliotekę PID Atmela natknąłem się na problemy. Po pierwsze czy mogę testować działanie (mam namyśli czy algorytm jest dobry) za pomocą potencjometru którym sobie reguluję zmienną Temp w zakresie 0 - 1800 i obserwując wartość wyjściowa...
Zobacz tutaj: http://www.sbprojects.com/knowledge/ir/n... http://www.ustr.net/infrared/nec.shtml Programowo robisz to tak: Konfigurujesz PWM żeby generował częstotliwość nośną (36kHz dla NEC) Dajesz odpowiednie wypełnienie PWM (od 25% do 35%) W trakcie nadawania kodu włączasz podłączasz wyjście PWM do timera na czas trwania 1, a odłączasz na czas...
Albo jeszcze inaczej. Podpinasz wyjście z wiatraka do przerwania np. INT0 W przerwaniu zwiększasz o jeden dowolną zmienną np. obr. Dodatkowo ustawiasz Timer na odmierzanie stałych odcinków czasu np. 1s. W obsłudze przerwania odczytujesz zmienną obr. i zapisujesz ją w zmiennej obroty, nastęnie zerujesz zmienną obr. Przy okazji w tym przerwaniu wyświetlacz...
Do rejestrów przesuwnych (bo takie najlepiej jest użyć) można ładować dane z prędkością megaherzów, tak więc nie musisz się martwić, że braknie Ci "czasu procesora", załadować je można w ułamku sekundy, zwłaszcza, gdy taktujesz procesor zegarem parunastu megaherzów. Nie wywołuje to nawet migotania diod. Sterowanie może wyglądać tak: obsluga_przerwania_timera...
Zły pomysł, zły kod. Użyj jednego timera w trybie zliczania impulsów zewnętrznych i podłącz wyjście wentylatora do jego wejścia. Drugi timer zaprogramuj na zgłaszanie przerwań co 1 sekundę (timer 0 tego nie potrafi), w procedurze przerwania odczytaj wartość licznika, wyzeruj licznik i wyświetl wartość. Nie jest to idealne rozwiązanie, ale o niebo lepsze...
Witam. Zwracam się z prośbą o przeanalizowanie fragmentu tego kodu. Nie mogę sobie poradzić z 4 bitem port B. Zmieniam jego wartość w przerwaniu na przeciwną, w pętli for nie zmieniam już jego wartości przy operacjach ustawiania i zerowania bitów - ruszam tylko bity 0-3 - pomimo to nie zawiera on wartości takiej jakiej bym się spodziewał (powinien co...
Cześć. Napisałem swój pierwszy program na przerwaniach, ale nie działa on do końca tak jak zamierzałem. Układ jest taki, że pod port B mam podpiętą diodę/diody, a pod wejście wywołujące przerwanie PD3 (INT1) mam podłączony oscylator o zmiennej częstotliwości w zakresie od 0 do +/- 30Hz. Program miał polegać na tym, że powyżej granicznej częstotliwości...
Pozwolę sobie umieścić post pod postem żeby wiadomość dotarła do zainteresowanego. Jeszcze lepszym wyjściem dla takiego zegara będzie zastosowanie dedykowanego rezonatorka 32768Hz (32,768KHz) Wartość 32768 to w zapisie binarnym dokładnie piętnaście bitów. Jeśli więc Timer będzie zliczał generowane impulsy to po 32768 uzna że mineła sekunda :D Bascom...
Myślałem że same wyprowadzenie odczytanych wartości hex z pliku muzycznego i "wypuszczenie" ich na PWM w zupełności wystarczy Mnie też tak się wydaje, że trzeba mieć właściwy format danych (signed lub unsigned) i wysyłać je na właściwie skonfigurowane PWM we właściwy sposób :) Przetestuj sobie na kilku tablicach sinusa umieszczonych bezpośrednio w...
Witam Krąży mi po głowie pomysł aby w motorku zbudować obrotomierz, chciałem wykorzystać Bascoma+Atmega8. Atmega może pobierać impulsy z czujnika halla który daje ładny prostokąt wiec nie ma problemu z zakłóceniami. Timer by liczył ilość impulsów przez 250ms a następnie po przekształceniu wzorami odpowiednimi podawał by na wyjście PWM na którym będzie...
Wejscie zajmuje 13 taktów a wyjście 15 taktów- przynajmniej tak u mnie jest. Wejdź po kompilacji w plik .lss i zobacz ile rozkazów zajmuje prolog i ile epilog przerwania. Rozkazy trwają 1 lub 2- a reti aż 4 cykle zegara. To znajdziesz w tabelce na str.329 i dalej. To można precyzyjnie obliczyć. No i w przerwanie procesor wejdzie dopiero jak obsłuży...
Ty to jesteś krejzolka Aldoro wiesz hahahahaha Podłączył byś wyjście transoptora do wejścia INTx albo ustawił Timer jako Counter a wyzwalanie jako, na przykład Falling, Co sekundę sprawdzał byś ile impulsów nabiło przez sekundę. I to wszystko. Bez obsługi przepelnienia Timera osmiobitowego zmieścił byś 255 impulsów na sekunde. Miłego dnia. Mogłeś wcześniej...
Witam! Zdaje mi się że ten przykład jest napisany na innego prockaponieważ: DDRB=0x08; //PB3 - wy (OC1 - wyjście PWM), pozostałe we w atmedze32 PB3 to nie OC1, tylko PD4 - OC1B, PD5 - OC1A, czyli mozna zrobić dwa PWM'y. DDRD=0xff; //PD1 i PD0 - we (obsługa klawiszy SW1 i SW4), pozostałe wy /fc jeśli PD0 i PD1 to wejścia to dlaczego są...
Wg mnie będzie Ci ciężko zrobić dokładne odstępy czasowe z wykorzystaniem _delay_us i _delay_ms. Wchodzą w to wszystko przerwania, odstęp 1us przy kwarcu 16Mhz to 16 taktów, wejście do przerwania, obsłużenie go i wyjście pewnie zajmuje więcej. Jeśli przerwania przychodzą często to czas podany w parametrze funkcji będzie się rozjeżdżał. Żeby mieć pewność,...
Skoro to timer 16 bitowy to najprościej wygenerować przebieg sprzętowo, bez żadnych przerwań - ustawić timer w tryb PWM albo CTC z OCR1A lub ICR1 jako wartość maks, preskaler 2, wartość top 41279, wartość rejestru Compare Match (OCR1B lub OCR1A) 39999 albo 1279 w zależności od ustawionej polaryzacji, wyjście oczywiście musi być albo OC1A albo OC1B.
Tak, jestem pewien bo już poszedłem do przodu z programem. Wyjście odbiornika podczerwieni mam podłączone pod INT0 i tylko pierwsze naciśnięcie przycisku na pilocie trzeba trochę dłużej przytrzymać, bo pierszy odbiór że tak powiem idzie na przerwanie i skok do podprogramu. Dalej już wszystko działa całkowicie płynnie i bez jakichkolwiek zauważalnych...
Witam od dobrych paru dni męczę się z wyświetleniem temperatury na wyświetlaczu 7-segmentowym. Sam wyświetlacz działa bez najmniejszych zarzutów :[syntax=c] #include<avr/io.h> #include<util/delay.h> #include<avr/interrupt.h> #define wyjA (1<<PB0) #define wyjB (1<<PB1) #define wyjC (1<<PB2) uint8_t tab[]={0x40,0xf9,0x24,0x30,0x19,0x12,0x0...
Natura wezwała... ale już jest: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //wykorzystuję ADC w trybie Free Running jako generator liczb losowych oraz timer do sterowania LEDami volatile unsigned int LED_pozyc_licznik_przerwan; //licznik przerwań dla LED świateł pozycyjnych void Init_adc() { //inicjuje...
Witam Mam następujący problem: Mój program ma robić coś takiego. T0 zlicza impulsy z zewnątrz, T1 mierzy czas, w przypadku przepełnienia T0 przepisujemy wartość T1 do tablicy #include <avr/io.h> #include <compat/deprecated.h> #include <util/delay.h> #include "lcd.h" #include <avr/io.h> #include <stdlib.h> #include...
ENKODER.H To raz. Dwa - nie ma nigdzie sei(); Trzy - jak jest otwarty kolektor to trzeba zrobić pullup na linii wejścia. Napisałeś też push pull więc w sumie nie wiadomo jakie jest wyjście z enkodera. 1) Ile mam błędów? Dlaczego mi to nie zadziała? ( : 2) Czy wyjscia A i B mogę podłączyć zgodnie ze schematem? Czy muszę dodać oporniki? Co to znaczy...
Tak wiem, to tylko test działania, funkcja uzyta bedzie do wystawiania piku co 100ms ( flagi ) ktora bede zliczal w podprogramie :-) Na wyświetlaczu było po prostu łatwiej testować efekty zmian w programie. Pozostaje mi tylko 1 kwestia, mogę ją rozwiązać stopując zegar ale w ramach nauki zapytam: Program obsługuje j.w. timer 100ms. Dodatkowo na przerawniu...
Witam, Mam też problem z PWM tylko trochę innego rodzaju. Też pracuję na Atmega16. Oprócz tego używam AVRStudio w wersji 4.13 oraz WinAvr 20070525. Mój kod wygląda następująco: #include <avr/io.h> void main(void) { DDRB=0xFF; DDRD=0xFF; TCCR1A=0x83; // wy. jest ustawianie po osiągnięciu warunku // równości podczas zlicznia w dół // zerowane po...
A jak masz te LEDy podłączone? Dla Twoich ustawień dostajesz przebieg o wypełnieniu 1/256 tzn. przez 255 z 256 okresów wyjście jest w stanie niskim.
https://obrazki.elektroda.pl/3845985100_... https://obrazki.elektroda.pl/1095475900_... Kiedy zbliżała się tegoroczna jesień i słońce wschodziło coraz później, postanowiłem zbudować budzik świetlny - urządzenie, które o zadanej godzinie włącza stopniowo rozjaśniające się światło. Nawet, jeśli nie obudzi ono użytkownika,...
Witam, Zacząłem zabawę z AVR-em. Oczywiście trzeba uruchomić pomysł w miarę szybko więc BASCOM. Programy "kroczki" testuję na konfiguracji na wyrost, czyli Atmega16 z taktem 16MHz. Popełniłem program testowy który w założeniu miał zliczać impulsy poprzez timer. Źródłem impulsów jest PCF8593, procek obsługuje to przez PortB.0 (Wejście dla timerka). Konfiguracja...
Witam. Pierwszą instrukcją w podprogramie "Obr" powinno być zablokowanie przerwania od Timer1. Ciekawym , po co :?: A ostatnim poleceniem przed wyjściem z podprogramu to włączenie tego przerwania. Pozdrawiam To dopiero byłby bajzel :D Może nowy kolega najpierw pomyśli lub poczyta dokumentację , a potem "doradza" :?: ;) A teraz całkiem poważnie. Jeśli...
Jest to urządzenie wykorzystujące dowolny popularny zasilacz do laptopa (np. o napięciu 18,5V i prądzie 3,5A), co powoduje obniżenie kosztu budowy urządzenia do minimum. Przy zastosowaniu takiego zasilacza napięcie można regulować od 1,2V do 17,9V , a maksymalny prąd to 3A . Dzięki zastosowaniu przetwornicy napięcia o wysokiej sprawności, temperatura...
Witam. Mam problem z przetwornikiem A/C w ATmega16. Chciałem aby wyniki były wyświetlane tylko w momencie kiedy wartość w timerze 0 zrówna się z wartością w OCR0 - ale tylko co drugi raz. Dlatego też dałem switch(cykl). Wyjście OC1A jest podpięte do wejścia timera 0. Wiem że to dziwnie, ale jest to część większego programu i tak musi być. Pomiar napięcia...
Witam, Nie mogę sobie poradzić z konfiguracją licznika 16b (timer1) w procesorze atmega32. Potrzebuję sobie wygenerować impuls o zadanej długości, próbuje użyć do tego celu licznika w trybie CTC z ustawieniem "Clear OC1A/OC1B on compare match (Set output to low level)" a więc zawartość OCR1A będzie regulować długość impulsu. Kod testowy: DDRD |= _BV(5);...
Już tłumaczę. Bazując na mojej aktualnej wiedzy musiałem tak zrobić, ponieważ: 1) LCD jest fizycznie mocno oddalony od Atmegi, wykorzystanie I2C wszędzie, gdzie to możliwe upraszcza "kabelkologię". Przedstawiony układ to de facto dwa układy: pierwszy - Atmega - kontroler pomp i LED oraz drugi - podłączony poprzez I2C LCD i wspomagające Attiny, 2) Biblioteka...
Patrząc po temacie w którym okazało się, że winą dziwnej pracy uC był fusebit M103C można bez problemu opisać powstawanie błędu: spód stosu był niepoprawny (w m103 pamięć kończy się niżej), a więc powrót z przerwania był skokiem w losowe miejsce co kończyło się resetem procesora stąd niezależność od wpisanej wartości, jednak od pewnej krytycznej wartości,...
Z tego co widzę czujnik ten wysyła sygnały PWM (modulacja wypełnieniem pulsu) o częstotliwości 100Hz i wypełnieniu 50% dla 0g. Zmiana wypełnienia o 20% oznacza zmianę o 1g gdzie czujnik ma gwarantowane działanie na +/- 1.7g min. Czyli wypełnienie 50%=0g, 30%=-1g, 70%=1g. Minus tych czujników jest taki, że żeby to dobrze obsłużyć to musisz łapać te zmiany...
TCCR0=0x04; TCNT0=0x05; I w przerwaniu na początku musisz mieć: TCNT0=0x05; I zliczać równo 125 przerwań - odliczysz doładnie 1s. Tak przy okazji, nie prościej to zrobić na tajmerze 1, który jest 16 bitowy i nieco inaczej pracuje? Zresztą już w jednym Twoim wątku wstawiłem program kalkulatora do obliczania zawartości rejestrów do tajmerów i UARTa.
wyjście timer atmega wyjście wyjście atmega
wyznaczanie kąta zasilanie odkurzacza uszkodzony akumulator laptop
Zmywarka podgrzewa wodę podczas płukania na zimno Jak zdjąć obudowę wiertarki Compresor 18V?