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ć...
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...
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;...
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...
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...
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);
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 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);...
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 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)...
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)...
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...
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, 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. 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, 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...
[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...
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...
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 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...
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...
Witam buduje sterownik Dmx do sterowania oświetleniem scenicznym i mam problem w protokołem ponieważ DMX bazuje na RS485 i posiada dodatkowe ramki takie jak: 2. Break. 3. Mark After Break (MAB). 4. Start Code (SC). 5. Mark Time Between Frames (MTBF). 6. Channel Data (CD). 7. Mark Time Between Packets (MTBP). Problem jest taki że sama ramkę danych wysyłam...
Staram się stosować do wszystkich wytycznych ale cały czas nie działa, po wciśnięciu przycisku na pilocie, pojawia się to samo co wcześniej, dodałem jeszcze diodę na PD0 żeby sprawdzić ile razy wywołane jest przerwanie od INT i po jednorazowym wciśnięciu przycisku dioda gaśnie i znów się zapala. przy przytrzymaniu przez moment gaśnie i zapala się więcej...
Siemanko. Uczę się programowania mikroprocków w języku C. Aktualnie jestem na lekcji przerwań i pojawił się dziwny błąd, którego nie potrafię rozgryźć, może bardziej zaawansowani koledzy potrafili by powiedzieć co źle robię bo nie mam już pomysłów. Otóż cały program ma działać tak że diodka jest wyłączona, po naciśnięciu przycisku ma zamrugać kilkukrotnie....
Chyba o to chodziło. Faktycznie tak to ma działać (instrukcja). Wielkie dziękuję. A co do wyglądu, hmm.. trochę poprawiłem, ale tamto było bardziej czytelne (dla mnie) :), nieistotne, już sobie radzę pomału w treści [syntax=c] #define F_CPU 12000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int main()...
Cześć, chciałem przeportować kod do odbioru RC5 autorstwa Dondu za ATMega8 na ATTiny13 - http://obrazki.elektroda.pl/8294459100_1... REzystory diod 470Ω, nie zmieniłem na schemacie. Pilot samoróbka, ale 100% pewniak. No więc w czym problem? Uruchomiłem przykład na ATMega8, wszystko pięknie śmiga. Program kompiluje się dla Tiny13...
Źle przeprowadziłeś inicjalizację. Sprawdź inicjalizację w pdf'ie od HD44780 i porównaj ze swoją - szcególnie to co ustawiasz na szynie danych wyświetlacza (a raczej to czego NIE ustawiasz). Poza tym co w kodzie robi MCUCSR? Nie ma takiego rejestru. Albo MCUCR albo MCUSR niemniej nie widzę powodu aby wpisywać cokolwiek do tych rejestrów na tym etapie,...
Witam Wszystkich, To mój pierwszy post na forum, jakoś jak do tej pory wszystkie odpowiedzi udawało się znaleźć. Ale pojawił się następujący problem: Wykorzystuje ATmega8 do sterowania trzema serwami (jeden timer-jedno serwo). Z samym sterowaniem na przyciskach wszystko jest ok i nie to jest problemem. Nie wiem jak sobie poradzić z transmisją danych...
Witam. Jestem początkującym programistą AVR ;) Grzebałem i szukałem "trochę" po forum ale nie znalazłem nic co by mi pomogło. Próbuje zbudować obrotomierz do motocykla na układzie Atmega8 który wynik wyświetla na panelu LED a nie jak większość projektów na LCD 2x16. Dodatkowo mam takie Ciśnienie by napisać program w języku C który dla mnie jest mniej...
Rozumiem doskonale ale zrobiłem coś innego, mianowicie przy resecie watchdoga zmienne sie resetują ale można zdefiniować zmienna w ten sposób : [syntax=c] uint8_t cycle __attribute__ ((section (".noinit"))); [/syntax] Stan zmiennej jest zapamiętywany nawet po resecie watchdoga. Dlatego można zliczac cykre uruchomienia resetu. [syntax=c] int main(void)...
Witajcie, próbuję odpalić dwie ATmega8 tak, by obsługiwały moduł radiowy NRF24L01. SPI mi działa, wiec dodałem te moduły. Jedna atmega z modułem ma nadawać dane, druga z modułem je odbiera. Niestety tak się nie dzieje... pisałem to na podstawie tej strony: http://gizmosnack.blogspot.com/2013/04/t... Kod nadajnika: [syntax=c]/*...
Witam! Napisałem w C program do sterowania silnikiem przy pomocy mostka L293D. Docelowo całość będzie pracować w robocie z dwoma silnikami i dyferencjałem, czyli prostym robocie dwukołowym. Ale do rzeczy... w robocie będzie krańcówka, której wciśnięcie nastąpi po wjechaniu w przeszkodę. W tym momencie zostanie wywołany program do omijania przeszkody....
Witam Was. Tym razem mam problem z TWI. Po kilku nieudanych próbach usunąłem cały swój kod do obsługi TWI, i napisałem wszystko od nowa - inspirując się kodami TMF'a i Mirkka36 oraz Datasheetem Atmela. Otóż mam zegar PCF8563 i na początku chciałem się z nim skomunikować, tak aby generował mi sygnał z prędkością 1Hz na wyjściu CLKOUT. Przerwanie w ATmega8...
Cześć, ja nadal robię ten sterownik czterech przekaźników na podczerwień, fale radiowe i przez komputer(rs232 i max232). Chwilowo nie posiadam modułów radiowych i zatrzymałem się przy podczerwieni. Mam problem z programem. Wszystko robię dobrze, czyli piszę "obsługę" przerwania, która polega na przypisaniu zmiennej zmienna liczby 1. Następnie w pętli...
Dzięki Panowie za pomoc, poradziłem sobie z konfliktem sygnałów. Zastosowałem 2 przerwania zewnętrzne które odczytują wartość licznika, oraz 1 przerwanie od przepełnienia w którym inkrementuję odliczanie sekundy. Pozostało jeszcze wysłać zebrane dane do jakieś pamięci np. karta SD. W razie pytań będę pisał tutaj. #include <avr/io.h> #include <stdlib.h>...
Mam plytke prototypową EvbAvr04 i zacząłem bawić się komunikacją z zegarem RTC (DS1307) za pomoca TWI. Wysyłanie danych działą, ale odbiór danych wiesza program. Identyczne "symptomy" były w temacie http://www.elektroda.pl/rtvforum/topic24... tyle że problem nie tkwi w adresie zegara, bo sprawdziłem dokładnie. Podłączyłem też wykrywanie przerwania...
pliki d_led.c , d_led.h , projekt_sygnalizator.c [syntax=c] ///////////////////////////////////// ////////// Made for atmega8, 16Mhz oscillator #include <avr/io.h> #include <avr/interrupt.h> #include "d_led.h" #include <util/delay.h> //Segments data volatile uint8_t seg1; volatile uint8_t seg2; //clock counter volatile uint8_t clk_counter=0;...
Piszę program do obsługi pilota RC5 i nie działa jak powinien. Mam podłączony TSOP1836 pod PD2(INT0) zgodnie z notą katalogową. Kiedy następuje zbocze opadające na wejściu PD2 wykonuje się przerwanie w którym co odpowiedni czas sprawdzam stan na tym wejściu. Później wyświetlam na wyświetlaczu bit toggle, adres, komende i czekam 2sek. Jakiego przycisku...
Witam, na wstępie dodam że jestem bardzo początkujący w programowaniu. Staram się stworzyć program który by włączał i wyłączał funkcję RGB, poprzez pilot RC5. Staram się to zrobić po kolei i najpierw próbuję gasić i zapalać pilotem diodę. Problemem jest to, że program reaguje na każdy przycisk a nie na konkretny - zaprogramowany. Chce sterować klawiszem...
Program przekopiowałem już toczka w toczkę z płyty dołączonej do książki, oczywiście zmieniłem pod moje podłączneie do procesora ukłądu pcf8583 ale nadal nie wywołuje przerwania ten układ i nic nie mogę z niego zczytać. Jak sprawdzić czy czasem w jakiś sposób nie uszkodziłem tego układu? Jedyna różnica przy podłączniu odbiegająca od książki to nie podłączone...
Witam, jestem w trakcie budowy robota. Będzie to połączenie line follower'a z robotem, którego zadaniem będzie omijanie przeszkód. Jako czujniki linii zastosowałem TCRT5000, a moduł odpowiedzialny za wykrywanie przeszkód to dwie diody IR oraz odbiornik TSOP. Częstotliwość dla diód generowana jest przez ATTiny13A. Która wysyła sygnał na piny PD2 i PD3...
Jeszcze zmodyfikowałem program: 1. Dodałem (nie wypełnioną jeszcze do końca wartościami ilości impulsów tabele) 2. Nowe obliczenia co do zmiennej uzależnionej od ADC i ładowanej do OCR2. Nie wiem czy dobrze przywołuję dane z tabeli ? Pozostałe sprawy bez zmian... Dodano po 13 Miałem taki przypadek, że Atmega8 była fabrycznie ustawiona na inne taktowanie...
http://obrazki.elektroda.pl/1960236800_1... Dodano po 2 to był program główny a teraz plik RS_232_i_INT0/rs_232_int0.c Dodano po 1 przepraszam że przez dłuższy czas nie wstawiałem kodu i schematu ale miałem przeprowadzkę i nie mogłem
Witam Zbudowałem sobie na jednej płytce stykowej Dodano po 4 Przeczytałem na stronie radzio.dxp.pl, że w zmiennej znak otrzymuję kod klawisza, a nie kod ascii i po to jest plik scancodes.h aby sobie zamienić kod klawisza na znak. Jednak dla przykładu: SPACE - hex:0x20 znak klawisza:29, a gdy klikam spacje na klawiaturze Telly mate wyświetla mi literę...
Zasilanie biorę bezpośrednio z portu USB więc musi być te ~5V. Procesor to AtMega8A-PU Zmiany w configu to [syntax=c] #define USB_CFG_IOPORTNAME D #define USB_CFG_DMINUS_BIT 6 #define USB_CFG_DPLUS_BIT 7 #define USB_CFG_CLOCK_KHZ 16000 #define USB_CFG_IS_SELF_POWERED 0 #define USB_CFG_MAX_BUS_POWER 50 [/syntax] zgodnie z tym co na schemacie połączeń...
Witam , udało mi się odpalić wyświetlacz , użyłem innych bibliotek - pana Peter Fleury . Pojawił sie jednak kolejny problem , biblioteka jest do wyswietlacza 2x16 a ja chciałem ją przerobić na 4x20 i tu pojawia sie problem : - pierwsza linia wyświetla się ok - druga linia , pierwsze 8 znaków drugiej linii jest dublowane z linii pierwszej ( 8 ostatnich...
Właśnie moja nauka zatrzymała się na wyświetlaczu LCD. Mruganie diodami już za mną. Dlatego proszę o pomoc:) Skonfigurowałem dwie biblioteki. Dodałem jako załącznik. Jeśli ktoś może to bardzo proszę o sprawdzenie. Pierwsza to biblioteka ze strony http://radzio.dxp.pl/hd44780/hd44780_avr... Wygląda tak: Pkik HD44780.h //--------------------------------------...
makefile ########################################... # Makefile for the project projekt ########################################... ## General Flags PROJECT = projekt MCU = atmega8 TARGET = projekt.elf CC = avr-gcc ## Options common to compile, link and assembly rules COMMON = -mmcu=$(MCU)...
Ustawiłeś odpowiednio rejestr MCUCR?
Jak na razie testuję to na guziku, podłączonym do PD2 (INT0)... To może nie być miarodajne, ze względu na drgania styków, chyba że wprowadziłeś jakiś sprzętowy debouncing. Jeśli chodzi o kod, nie sprawdzałem, czy cała idea jest prawidłowa, ale zauważyłem: ... MCUCR=1<<ISC00; //przerwanie wyzwalane zboczem narastającym __|-- MCUCR=1<<ISC01;...
Kiedy zgłąszane jest przerwanie ( w tym wypadku polega na odcięciu INT0 od masy) Trzeba było zostawić jak wcześniej, że stan niski powoduje przerwanie (bo jak rozumie to teraz stan wysoki powoduje zgłoszenie przerwania). I chyba masz konfiguracje przerwania złą. nie powinno być: MCUCR &= ~_BV(ISC00); MCUCR &= ~_BV(ISC01); ISC01 ISC00 Description 0...
wyłączanie zegara i konfigurowanie go w przerwaniu - to nie wygląda za dobrze...Szczególnie jeśli chodzi o rejestry MCUCR
Oj przeczuwam kłopoty, piszesz że przesiadasz się z małego AtMega na AtMega128, a tam niektóe rejestry mają zmienione nazwy lub wręcz niektóre bity są w innych/nowych rejestrach. dla AtMega8..32 działa coś takiego #define GLOBAL_INT_ENA()asm("se... #define GLOBAL_INT_DIS()asm("cl... #define INT0_ENA()...
Przyczyna leży zapewne w tym, że nie ustawiasz odpowiednich bitów w rejestrze MCUCR. Te bity to ICS00 i ISC01. Domyślnie są ustawione na wyzwalanie przerwania stanem niskim, więc procesor zlicza całą serię przerwań w czasie trwania stanu niskiego. Przestaw te bity na zbocze (tab 32 str 67 DS)
Oczywiście, że mają wyzwalanie zboczem. Opadającym, narastającym i dowolnym. Tylko nie pamiętam czy Bascom pozwala przez swoje funkcje skonfigurować wyzwalanie zboczem. Ale wystarczy odwołać się bezpośrednio do rejestru MCUCR.
Trybu uśpienia (atmega8, język C). [syntax=c]MCUCR |= (1<<SE) | (1<<SM0); asm("sleep");[/syntax]
A gdzie ustawiasz: MCUCR = (1<<SRE); A poza tym, czy nie za duzo uwalniasz pinów z PC (PC5-PC7)? Ja też stosuję 62256, ale uwolniłem tylko PC7 (SFIOR=(1<<XMM0);) Pozdrawiam.
Witaj. Na początek uporządkuj sprawy dot. trybu usypiania, ponieważ wykonujesz niepotrzebnie w pętli głównej część czynności w tym zakresie. Poza tym skoro już używasz nagłówka sleep.h, to używaj go w pełni, a nie osobno ustawiasz np. [syntax=c]MCUCR |=(1<<SE)|(1<<SM1);[/syntax] Zobacz przykład funkcji main tutaj: [syntax=c]int main(void)...
Potrzebuję pomocy przy zamianie kodu "RFID Reader", tzn. żeby zamiast wyświetlania kodu karty na LCD uzyskiwać odpowiedni poziom na wyjściu 1z10 i czy jest to możliwe do zrealizowania na atmega8? Chciałbym użyć 8 ostatnich cyfr kodu karty. Posłużyłem się gotowcem, który był już na elektrodzie (dopiero uczę się bascoma i nie wiem jak się do tego zabrać):...
Witam. Takie małe pytanko odnośnie robienia układu który po przekręceniu kluczyka w stacyjce poda impuls zamiast ciągłego poziomu niskiego... Po co robić osobny układ? Generalnie to ATmegi mają taki układ wbudowany, wystarczy tylko wybrać opcję wyzwalania zboczem (do wyboru narastające i opadające) wpisując odpowiednią wartość do rejestru MCUCR. Pozdrawiam.
Witam Na 100% działa na Atmedze8: #define ENABLE_INTO_ANY MCUCR|=_BV(ISC10);MCUCR&=~_B... = (1<<INTF0);GICR=_BV(IN... Nie ma kodu obsługi wyświetlacza ponieważ oryginalnie nie ma jej w przerwaniu i nie oddziaływuje na resetowanie procesora. Pozdrawiam
Tylko w ustawieniach mikrokontrolera skoro z Power Save wychodzi poprawnie za pomocą INT. Ale z drugiej strony MCUCR masz ustawiony prawidłowo.
Wszyscy z jakiegoś powodu skupili się na stałych/zmiennych, a nikt nie zwrócił uwagi na niżej przedstawione "rodzynki" :D //poczatek pomiaru x_high TCCR1B &= ~_BV(CS12); TCCR1B &= _BV(CS11); TCCR1B &= ~_BV(CS10); // Przestawienie przerwania na zbocze opadajace MCUCR = 0; MCUCR &= _BV(ISC01); MCUCR &= ~_BV(ISC00);...
MCUCR |= ~((1<<ISC01)|(1<... // Wyzwolenie przerwania niskim poziomem Ten kod nie robi tego co jest w komentarzu - zamiast |= powinno być &=.
Witam. Po paru próbach i czytaniu rozwiązałem problem: DDRD&=~(1<<PD2); PORTD|=(1<<PD2); //int0 GICR|=(1<<INT0); MCUCR&=~(1<<ISC01); //niski poziom wyzwala przerwanie MCUCR&=~(1<<ISC00); // --||-- sei(); zła kolejność ustawianych rejestrów. temat zamknięty. pozdrawiam[/code]
Robisz: MCUCR = (1<<SE)|(1<<SM1&... asm("sleep"); a potem tylko reset go moze obudzic.
Ech... To mi pod dziadowski SPL podchodzi. Jakby tak nie można było: MCUCR |= (1<<SE)|(1<<SM1)|(1<<S... Przynajmniej wtedy zajrzałbyś do DSa i zobaczył że T2 wybudza z tego przerwania ale tylko w trybie zegarkowym.
Zmieniasz wektory w rejestrze MCUCR, a odpowiednie bity są w rejestrze GICR. Więc table jest nie tam gdzie trzeba.
na INT1 jest przycisk, podciągnięty do Vcc. Nie mogę dać wyzwalania zboczem, bo nota wyraźnie mówi, że można wybudzić jedynie stanem. Właśnie wygląda to tak, jakbo po wybudzeniu ciągle wywoływał przerwanie. Gdy usunę z maina cli();, w ogóle nie wykonuje się procedura w while'u. Podejrzewam, że zawisa w przerwaniu. Zablokowanie przerwań pozwala ją wykonać,...
Znalazłem trochę więcej czasu, żeby przyjrzeć się problemowi i zauważyłem: ... MCUCR|=(1<<ISC01) | (1<<ISC00); //zbocze opadające na INT0 MCUCR|=(1<<ISC11) | (1<<ISC10); //zbocze opadające na INT1 ... No to akurat jest ustawienie dla zbocza narastającego, czyli przerwanie następuje po puszczeniu...
witam Mam pewien problem ze skonfigurowaniem przerwania w Atmega8. Program ma wysyłać dane przez UART w zależności od stanu na końcówce PD2 ( INT0 ). Jeżeli ma stan niski to sprawdza jedną zmienną i w zależności od niej wysyła dane. Jeżeli ma stan wysoki to tak samo. Ale tylko jednorazowa zmiana powinna powodować wysłanie danych. Wymyśliłem, że obsłużę...
mcucr pamięć bascom mcucr fusebits atmega8
falownik silnika pralki electrolux wyświetlacz pęknięty zalany sterownik temperatury grzałki pieca
myjka ciśnieniowa stanley myjka ciśnieniowa stanley
Dimplex Quantum, XLE, XLS – jak włączyć i wyłączyć piec akumulacyjny, ustawienia ładowania Kod błędu P0299 - Niedostateczne ciśnienie doładowania turbosprężarki