Bardzo dużo osób nie zwraca uwagi na to czy mikrokontroler ma na końcu oznaczenia literkę A , PA , PB . W większości przypadków programy działają na pierwszy rzut oka normalnie , różnice i poprawki bywają nawet w seriach układów bo producent poprawia jakieś . Ja sugerował bym w twoim przypadku skorzystać z nowszego układu ATMEGA 88 PA lub PB. Poza tym...
[syntax=c] MCUCR = (1 << ISC11) | (1 << ISC10); //narastające zbocze MCUCR |= (1 << ISC01) | (1 << ISC00); //narastające zbocze0[/syntax]
... ok odczytalem wartosc MCUCR tuz przed wydaniem instrukcji powerdown wynosi 10001010b Skoro Twoje MCUCR ma tak ustawione bity , to co sie dziwisz że nie działa :wink: Twoje ustawienia to: INT0-FALLING INT1-FALLING SLEEP MODE-IDLE SE=1 Powinno być: 101000xx INT0-xx INT1-LOW LEVEL czyli bity ISC10,ISC11 wyzerowane :!: SLEEP MODE- POWER-DOWN czyli...
SIGNAL(SIG_INTERRUPT0) { ... GIFR = 0x40; //****************co to ?? ... GIFR|=_BV(INTF0); //***********co to ? ... MCUCR = 0x00; //INT0 reaguje na stan niski ********** przestaw na FALLING(opadające) Nie wiem czy main pokazałes w całości , ale ja bym w takim przypadku wogóle zrezygnował z przerwnia , a w pętli głównej...
Może trzeba dać SEI przed uśpieniem procka? Przecież włącza SEI tyle że wszystko wg najgorszych praktyk programistycznch. SREG |= 0x80; --------------------------------- W nocie PDF ATtiny2313 wprawdzie napisano w uwadze, że tylko INT0 reaguje na wybudzanie poziomem, ale to słówko tylko (Only) tyczy się poziomu a nie samego przerwania. Powinno być...
Bity w MCUCR określają na co będzie reagować przerwanie zewnętrzne... Zmiana stanu, opadające lub narastające zbocze więc jest to jak najbardziej potrzebne... SIGNAL (INT0_vect) - obsługa zewnętrznego przerwania INT0... SIGNAL (TIMER0_OVF_vect) - obsługa przerwania od przepełnienia timer0... Co do portu... Jak na mój gust powinno być PORTC = !PORTC;...
Podczas pisania artykułów wykonywałem pomiary poboru prądu przez mikrokonrolery ATmega8 oraz ATmega8A i zgodnie ze wskazaniami Atmela były one najniższe, gdy pin był ustawiony jako wejście z włączonym rezystorem pull-up . Podobne pomiary wykonywałem dla PICów z tym, że na poziomie 20nA, wszystko było zawsze zgodne z dokumentacją. BTW najgorsze co można...
Jest parę błędów które widzę już teraz. Pozwoliłem sobie wstawić to w syntax bo nie dało się czytać :) unsigned char ilosc_imp=0; powinno zostać opatrzone jeszcze etykietką volatile. Czyli: [syntax=c] volatile unsigned char ilosc_imp=0; [/syntax] Volatile wyłącza dla tej konkretne zmiennej optymalizację. Jest to konieczne jeżeli korzystasz ze zmiennej...
Witam wszystkich. Zaprojektowałem i uruchomiłem zegarek z wyświetlaczami LED(SA10-21GWA) i układem PCF8583 współpracującym z mikroprocesorem Atmega8 oraz układami PCF8574AP na szynie TWI(i2c). http://obrazki.elektroda.net/21_12497604... http://obrazki.elektroda.net/58_12497606... http://obrazki.elektroda.net/95_12497605...
MCUCR |= (1<<ISC11); MCUCR &= ~(1<<ISC11); Po szybkim review masz literówke w tym miejscu pewnie inaczej chcailes skonfigurowac przerwanie niz wlaczyc i od razu wylaczyc bit. Np tak: MCUCR |= (1<<ISC11); MCUCR &= ~(1<<ISC10);
Skoro to finalna wersja: ... finalny kod programu sterowania grupowego przedstawia się następująco i działa prawidłowo: to mam trzy pytania: 1. Włączasz przerwania COMPARE MATCH, a gdzie jest funkcja obsługi tego przerwania? [syntax=c]TIMSK |= (1<<OCIE2); // odblokowanie przerwania COMPARE MATCH[/syntax] 2. Jaki sens ma ciągłe ustawianie w pętli...
Najpierw zacznij od podstaw języka C - poćwicz operatory bitowe: http://mikrokontrolery.blogspot.com/2011... Zacznij od poniższego kodu: [syntax=c]#include <dondu/dd_atmega8.h> //Wymagane do symulacji definicji i rejestrów ATmega8 int main(void){ MCUCR = 0xff; //symulujemy stan bitów - wszystkie ustawione MCUCR|=(1<<ISC01)&~(1<<I...
Witam, Zaczynam właśnie zabawę z procesorami atmega i mam problem z watchdog'iem na atmega8. Pod atmega328 działa to super ale tam jest troszkę inaczej (jest WDIE, którego w atmega8 nie ma) Skorzystałem z przykładowego kodu z tej strony #include <avr/wdt.h> #include <avr/sleep.h> #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr)...
Mirku: MCUCR = (1<<SM1); /*ustaw przerwanie INT0 i INT1, zbocze narastajace*/ GICR = (1<<INT0) | (1<<INT1); W twojej książce znalazłem również zapis równy temu MCUCR |= (1<<SM1) czy jest on równoznaczny z MCUCR = (1<<SM1) czy używa się ich w zależności od czegoś ? :) PS. a nie powinno być tak ? [syntax=c] while(PIND &...
Uczę się, przepraszam za wcześniejszą formę... [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> //przerwania PD2 - INT0 volatile long int program=0; ISR (INT0_vect) { program++; } int main () { int i = 0; int k = 0; int m = 0; MCUCR = (MCUCR & (~(3<<ISC00))) | (1<<ISC00); GICR |=(1<<INT0);...
Witam wszystkich bardzo serdecznie. Chcę zaprogramować uC ATmega8 w taki sposób aby mierzył mi długości sygnałów podawanych na wejście. Oczywiście przy użyciu przerwań. Nie wiem dlaczego program nie reaguje przerwaniem na zboczu opadającym sygnału. Poniżej zamieszczam kod programu. Jeśli mógłbyś zobaczyć i podpowiedzieć w czym tkwi problem byłbym dozgonnie...
próbuj podpiąć jakiś switch którym mogłbyś zwierać dwa styki linie INT0 podciągnąć w takim przypadku rezystorkiem, np 10k do Vcc od linii INT0 daj jakiś kondensatorek, tak jak pisałem - te 100nF, z drugiej strony kondensatorek podłącz do masy czyli tak : ;) http://obrazki.elektroda.net/35_11543446... Powyższy układzik przetestowałem na poniższym...
Niestety sprawa rozbija się o składnie bascom'a ale dzieki A co , w Bascomie nie można zapisać danych bezpośrednio do rejestru :?: Po konfiguracji ADC i przerwań usypiamy proca w trybie ADC Noise Reduction Mcucr = Mcucr And &H0F ' na wszelki wypadek ;) zerujemy 4 najstarsze bity Mcucr = Mcucr Or &H90 'ustawiamy bit SE i SM0 sleep 'instrukcja assemblera...
Witam pisałem program który miał po pewnym czasie zmuszać mikrokontroler do przejścia w stan uśpienia po czym wybudzanie miało następować w reakcji na zewnętrzne przerwanie na linii PD2. Mikrokontroler wchodzi w uśpienie po zadanym czasie jednak nie chce się potem wybudzić w reakcji na zewnętrzne przerwanie. Byłbym wdzięczny gdyby ktoś rzucił okiem...
Możliwe, że problem leży w sposobie wyzwalania INT0. U Ciebie jest to opadające zbocze, a to wymaga działającego zegara, który jest wyłączony w trybie power-down. Only an External Reset Proponuję zmianę trybu wyzwalania z toggle (ISC01=1, ISC00=0) na level (ISC01=ISC00=0) przed wejściem w power-down, i przywrócenie reakcji na zbocze po rozkazie sleep....
Mcucr = Mcucr Or 2 W helpie wyczytałem że procesory serii Mega mają przerwanie INT0 tylko na niski poziom i wykonują się w kółko jak poziom jest niski. Z drugiej strony ATmega8 Bascom tolerował, ATmega32 już nie. Dokumentacja mnie wprowadziła w błąd. Omawiając przerwania jest odesłanie do strony z opcjami uśpienia, a powinno być dużo dalej do zegara...
Patrzylem na swoj program pilota uniwersalnego w którym stosuje power down i tam oprocz ustawienia wybudzania ma jeszcze ustawione aktywne przerwanie zewnetrzne i oczywiscie napisaną obsluge przerwania. Dodano po 2 moze zamiast zerowac pojedynczy bit w MCUCR wpisz cała wartosc do tego rejestru, gdyz nie widze gdzie ustawiasz ISC11, a jezeli zakladasz...
Dobra pierwsze podejście do kodu: Atmega8 ustawiona fusami na 8Mhz Najpierw dobór preskalera. Jak już wcześniej pisałem pomiar jest od 1,2-1,9ms więc zliczanie czasu moim zdaniem powinno być mniejsze od 0,05ms. Dobrałem preskaler 64 po czasie 524.288ms następuje przepełnienie T1 dla 0xFFFF, a więc jeden takt zliczania ma 524.288/65535 czyli 0,008ms...
Witam. Chce uruchomić dekoder kodu Sirc(sony) na atmega8. Korzystam z tego rozwiązania [url=http://www.dragarti.cba.pl/artykuly... mam podłaczony TSOP1736 do wejścia INT0, zmianie pinów w kodzie na INT0 dla atmegi8 i odpisaniu F_CPU na 8mhz, za żadne skarby nie chce mi to się uruchomić, czy ktoś jest w stanie mi pomoc? Zaznaczam że jestem...
Witam. Mam uP Atmega8 w ktorym wykorzystuje przetwornik ADC. Na stronie 32 PDF'a jest opisany tryb redukcji zaklocen dla przetwornika ADC. Niestety mam problem zeby to uruchomic (zaimplementowac w AVR-GCC). Moze ktos mi powie co robie nie tak... inicjalizacja: (tylko redukcja zakłóceń - przetwornik jest ustawiony i dziala w trybie pojedynczej konwersji)...
Witam, Napisalem program na atmega8 do regulatora dwukierunkowego, którego schemat można znaleść tutaj. [url=http://www.modelhobby.republika.pl/... Licznik pracuje z zegarem 8Mhz i prescalerem 64. Czyli licznik powinien zapelnić sie minimalnie po 2ms. Sygnał z odbiornika trwa od 1ms do 2ms. Najpierw zliczam czas impuslu. W zależności...
Witam Mam problem z Atmega8 (taktowanie kwarc 16MHz) i timer2, na początek program: [syntax=c] void timer2Init(){ OCR2 = 0x01; // TCCR2 |= (1 << WGM21); // tryb pracy CTC TCCR2 |= (1 << CS21); // preskaler = 8 TIMSK |= (1 << OCIE2); // Odblokowanie przerwania CompareMatch } #define startTimer() uSeconds=0;TCCR2 |= (1<<CS21);...
Witajcie. Robię bliźniaczy do wykonanego przeze mnie na '51 projekt układu do pomiaru częstotliwości na AVR w C. Przyjęta przeze mnie logika to: ATMEGA8 - kwarc 10 MHz 1. podawanie sygnału badanego na wejście INT1 2. Timer1 jako licznik z preskalerem CK/1024 2. INT1 wyzwalane zboczem opadajacym 3. Gdy przyodzi przerwanie to nastepuje sprawdzenie czy...
Tak jest ok? [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int main() { DDRD = (1<<PD3)|(1<<PD1)|(1<<... PORTD = (1<<PD2); PORTB = (1<<PB0); MCUCR |= (1<<ISC01) | (0<<ISC00); GICR |= (1<<INT0); sei(); while(1) { } } ISR(INT0_vect) { if(PINB & 1)...
Piszę ponownie, ponieważ jako, że z układem nie mam już problemu mam problem z napisaniem programu. W swoim rozwiązaniu chciałbym użyć dwóch przerwań od TIMER0 oraz zewnętrzne INT0. Teraz tu moje pytanie czy te dwa przerwania zaimplementowane w ten sposób jak poniżej, nie wpłyną na niedokładność pomiaru i czy jest może na to lepszy sposób. Mój kod:...
Witam wszystkich, robię mały projekt do którego używałem Atmegę8. Zaczyna mi brakować pamięci więc stwierdziłem, że wymienię ją na Atmegę328. Niestety jest trochę zabawy z przerobieniem kodu, po pierwsze w Atmega328 nie można używać PD0 itp, tylko PORTD0. Po drugie timery ustawia się innymi rejestrami. Ogólnie program sobie przerobiłem, niestety została...
Witam, Mam drobny problem z podczerwienią. Skorzystałem z kodu z strony http://hobby.abxyz.bplaced.net/index.php... Kodzik bardzo fajnie działa, odebrany sygnał wyświetlony na 6 diodach pokrywa się z kodami dla każdego przycisku w systemie RC5. Mój problem polega na tym, że nie potrafię przekazać odebranego kodu do głownej pętli aby konkretnemu...
Na chwilę małymi krokami wziąłem się za pisanie programu, podłączając wyjście TSOP do pinu PD2 jako przerwanie zewnętrzne o zboczu opadającym i na samym początku mam problem. Mam PORTB podłączony pod 8 ledów i dlaczego tak napisany program [syntax=c]#define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include <avr/wdt.h>...
Witam. Czy byłby ktoś w stanie pomóc mi napisać prosty program, w którym wykorzystuje przerwanie zewnętrzne? Podłączyłem switch z jednej strony do Vcc (takie jest założenie daleszego rozwianięcia zadania) a z drugiej do Portu PD2. Proszę o pomoc oczywiscie z pisania w jezyku C. Może znajdzie się ktoś wyrozumiały, ponieważ większość stron, które przeglądałem...
Witam, zdaję sobie sprawę że wiele razy zakładany był temat związany z odkodowywaniem RC5 na avr. Postanowiłem jednak założyć swój, ponieważ mam dziwne problemy z tą transmisją. Używam mini pilota uniwersalnego który bez problemu komunikuje się z moim tv Sony i korzystałem już z niego kilka razy w projektach własnych. Niestety teraz kiedy jestem w trakcie...
Witam, Zrobiłem na Atmega8 regulator oświetlenia. W zasadzie wszystko działa, tylko irytuje mnie występująca niewielka fluktuacja natężenia światła. Nic nie mruga, ale jak się uważnie przyjrzeć, to natężenie światła lekko faluje. Na każdym etapie regulacji. AVR taktowany zewnętrznym kwarcem 8MHz. Zmienna light, zmieniana w głównej części programu. Nie...
Własnie sie zastanawiam w jaki sposób zmieniać prescaler timera jesli klawisz jest wciśnięty. nie podoba mi sie to że za każdym razem czyta tą instrukcje if else dlatego zrobiłem to tak. ale cos nie do końca działa DDRD = (1<<4); // dioda do testów sei(); GICR=_BV(INT1); MCUCR =_BV(ISC11); DDRD &=~_BV(PORTD3); PORTD = (1<<3); DDRB =(1<<PORTB1);...
Witam :D Mam problem z obsługą przerwań. Otóż poniżej zamieszczony program w przypadku normalnej pracy wyświetla na wyświetlaczu "1" w przypadku wykrycia stanu niskiego na porcie INT1 wyświetla "0". Niestety program wykonuje 2 - 3 przejścia pomiedzy stanem niskim --> wysokim --> niskim -->... i następnie przestaje reagować na zmianę stanu portu...
Witam serdecznie, program ewoluował i w chwili obecnej przyjmuje postać: #include <avr/io.h> // dostęp do rejestrów #include <stdint.h> #include <stdio.h> #include <avr/interrupt.h> // aby użyć funkcji obsługi przerwań //przerwanie od INT0 SIGNAL (SIG_INTERRUPT0) //obsługa przerwania { uint16_t GrayToBinary(uint16_t...
Witam Z pewnością sama dioda IR nie wystarczy. Należałoby zastosować scalony odbiornik IR - TSOP1736 lub jego odmiennik - TSOP34836, do których załączam poniżej noty dokumentacyjne. Otóż nóżkę OUT takiego odbiornika należy podłączyć do pinu INT0 (lub innych INT) (pozostałe odpowiednio do Vcc i GND) i odpowiednio ustawić rejestr GIRC i MCUCR oraz oczywiście...
Ok dzięki te operacje na bitach (a w zasadzie bajtach) już rozumiem. Ta linia do masy układu rzeczywiście nie jest konieczna. 1. Co do wiatraczka to rzeczywiście pomyliłem kierunek strzałki. Czy tranzystor BD139 byłby ok? Może macie lepszy pomysł. Nad wygładzeniem zasilania dla wiatraczka też się zastanawiałem ale w tym układzie chyba nieda się tego...
Zmieniłem i wiele to nie dało. Może problem jest w programie. Jeśli przytrzymam przycisk w pilocie to dioda świeci ciągle aż przycisku nie puszcze, nie powinno tak być i jestem już całkiem zamotany. Poniżej kod: //biblioteki #define F_CPU 1000000UL #include <util/delay.h> #include <avr/io.h> #include <avr/interrupt.h> //zmienne globalne...
[syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define TIMER0_ON (TIMSK |= _BV(TOIE0)) #define TIMER1_ON (TIMSK |= _BV(TOIE1)) #define TIMER0_OFF (TIMSK &= ~_BV(TOIE0)) #define TIMER1_OFF (TIMSK &= ~_BV(TOIE1)) #define led1_ON PORTD |= (1<<PD1) #define led2_ON PORTD |= (1<<PC0)...
Witam, chciałbym przerobić projekt z tego linku http://www.elektroda.pl/rtvforum/topic90... Mianowicie zostawić odliczanie czasu i wyświetlanie go a dodać do niego funkcję w której o wpisanej "na stałe" godzinie w funkcji załączy przekaźnik. Przekaźnik jest 4 modułowy więc potrzebuje 4 wolnych pinów. Kod, który zmodyfikowałem wygląda następująco...
Witam Zacząłem pisanie programów na AVR w C (Atmel AVRStudio 4) i natrafiłem na problem z obsługą przerwań zewnętrznych, a mianowicie procesor nie obsługuje przerwań zewnętrznych. Użyty kod poniżej [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> unsigned char stan0 = 0; unsigned char stan1 = 0; unsigned char licznik1 = 0; unsigned...
Tego kodu powyżej jeszcze nie sprawdzałem, ale napisałem coś prostego, co chyba po lekkiej modyfikacji powinno działać. [syntax=c] #include <avr/io.h> #include <avr/delay.h> #include <avr/interrupt.h> #include "HD44780.h" #include "main.h" volatile uint8_t flag = 0; volatile uint16_t odleglosc; void Init(){ TCCR1B |= (1<<CS11);...
Witam, Mam problem z układem który ma zliczać ilość obrotów silnika i przełączać kierunek obrotów przeciwną stronę po odliczeniu odpowiedniej ilości. Silnik napędza pręt gwintowany na którym jest nakrętka (uproszczony prototyp siłownika z którym układ będzie pracował w rzeczywistości). Program działa tak, że po odliczeniu 50 obrotów w jedną stronę,...
Mam taki program. Niestety coś jest nie tak bo nie jest w ogóle triak wyzwalany. Podejrzewam że coś nie tak jest z wyzwalaniem przerwania lub timera. Program był pisany na atmega8 ja mam arduino UNO więc trochę go przerabiałem i chyba coś spaprałem. zerknijcie proszę... [syntax=c] #include <avr/interrupt.h> #include <avr/io.h> #define LICZBA_KROKOW...
[syntax=c]#include <avr/io.h> #include <util/delay.h> #include "pcd8544.h" #include <avr/interrupt.h> void i2c_start() { //twint- flaga jest wyzerowana, gdy jest na niej 1, jest ustawiona gdy jest na niej 0 TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA); //twcr-rejestr ustawień modułu twi, twint-twi interrupt flag, twen-twi...
Witam Mam problem z obsługą enkodera(EC16-2-F-L20). Opierałem się kodach które znalazłem w internecie i nie wiem czemu enkoder w poniższym kodzie działa tak jak mu się podoba, przełącza stacje radiowe przypadkowo. Bardzo prosił bym o pomoc, z góry dziękuje. ; // Zapis tablicy TWCR = (1<<TWINT) | (1<<TWEN); // Wysłanie dnaych while (!(TWCR...
mcucr pamięć bascom mcucr atmega8 nestor
wózek widłowy linde kontrolka aparat kompaktowy polecacie zawora hamulec
schemat rozrzadu schemat rozrzadu
ThinkPad 560 nie uruchamia się – wymiana baterii CMOS, diagnostyka zasilania, typowe usterki Laser Rust Removal: Fiber Laser Brands, Models, Power, Safety, and Surface Cleanliness