Przerwanie wyzwalasz poziomem czy zboczem? Kolejna sprawa. Gdzieś czytałem, że AVR po wyjściu z przerwania wykonuje JEDNĄ INSTRUKCJĘ i przechodzi znów do obsługi przerwania (jeśli jest nowe). Jeśli chcesz blokować wskoczenie do nowego przerwania , to musisz w OBSŁUDZE POPRZEDNIEGO PRZERWANIA na samym końcu sprawdzać bit zgłoszenia ponownego przerwania....
przyzwyczajony do uC pokroju atmeg8 A jaka jest róznica w tym? Czy to atmega czy attiny dziala tak samo ale wyczyszczenie flagi tak? Po to jest
Efekt jest dokładnie taki jak kod - o to mogę się założyć. Twój kod ma po prostu błędy i tyle, więc czego oczekujesz? Poza faktem braku volatile "tu i tam", to zerowanie tej flagi w przerwaniu masz, ale gdzie masz jej ustawianie? Nigdzie. 4\/3!!
są różne tryby obsługi lcd(4/8 bitowy, zodczytem flagi zajętości i bez), i nie wszystkie piny musisz wykorzystywać http://radzio.dxp.pl/hd44780/
Powiem Ci, że nie wiem po co tak ma być, ale podam Ci mój kod. [syntax=basic4gl]Rc5get: Disable Int0 Enable Interrupts Set Rc5flag Return[/syntax] Zamiast ustawiania flagi można dać odbiór kodu. Ale ja wolę to robić w pętli. Nie wiem tylko po co to Enable Interrupts skoro jest ustawione na początku programu, ale bez tego nie działa.
A może masz gdzieś funkcję obsługi tego przerwania? Dodano po 4 Dodam, że korzystam z programowego bufora cyklicznego, który w przerwaniach odbiera dane od UDR. Jedyne co mi przychodzi na myśl to to, że przerwanie tak szybko się wykona (odebranie danych do bufora i skasowanie flagi RXC), że część programu: while ( !(UCSRA & (1<<RXC)) ); nawet...
Proszę, gotowy przyklad rozwiązania. Napisałem przy kawie i potestowałem w symulatorku czy się nie pomyliłem gdzieś ;) [syntax=basic4gl]$regfile = "m8def.dat" '$sim 'dla symulatora Config Portd.5 = Input : Set Portd.5 : Czuj_1 Alias Pind.5 Config Portd.6 = Input : Set Portd.6 : Czuj_2 Alias Pind.6 Config Portd.7 = Input : Set Portd.7 : Czuj_3 Alias...
programu to ja ci już nie przeanalizuję teraz bo padnięty jestem ..... .... ale to że wgrywasz bootloaderem i że atmega była programowana wiele razy - nie ma tu najmniejszego znaczenia Dodano po 22 ok - po pierwsze nie stosujesz wcięć w kodzie a jak stosujesz to totalnie bez ładu - przez co nawet tobie trudno później dostrzec jakieś błędy (a szczególnie...
Dlaczego wykorzystałeś drugie rozwiązanie zamiast pierwszego (IMHO - znacznie lepszego)? Wykorzystując takie zmienne jako flagi prowadzisz do niepotrzebnego komplikowania kodu i utrudnienia kontroli dynamicznie rozwijającego się programu :) Jedna z propozycji rozwiązania problemu: [syntax=c]char SPI_MasterTransmit(char cData){ char spi_return; ATOMIC_BLOCK(ATOMIC_RESTORESTATE){...
Czekaj, czekaj. Jeden czujnik odpali przerwanie INT0 a w tym przerwaniu sie uruchomi timer. Drugi czujnik po INT1 ma go wyłączyć. Raczej o tym myślałem. Lepiej tak: czy ktoś by mi dokładnie wytłumaczył jak wywoływać timery, zbierać z nich czas, do czego służą poszczególne rejestry. Noty katalogowej tego procka po polsku nie znalazłem, a dobrego poradnika...
Polecam blog naszego kolegi: http://www.stsystem.elektroda.eu/index.p...
Tomqu z podanych przeze mnie linków ściągnij przykład 04 i podmień w nim main.c na: [syntax=c]#include"main.h" //**************************************... #define BUF_SIZE 8 // definiujemy bufor o rozmiarze 8 bajtów (musi byc potega dwójki dla tego sposobu!!!) // definiujemy maskę dla naszego bufora #define BUF_MASK...
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...
Tego nie widziałem. Znalazłem za to informację że dotyczy to rezonatora pracującego jako generator wytwarzający główny sygnał zegarowy: http://obrazki.elektroda.net/9_123515576... A po drugie, akurat w ATMega8 jest błąd w krzemie i te wewnętrzne kondensatory nie działają (tzn. FuseBit ich nie włącza). Użycie rezonatora jako źródła sygnału dla...
No dobra, udalo ci sie polechtac moja proznosc wiec moze zrobimy tak. Opisze tutaj przykladowego mekafile-a z nastawieniem na WinAVR, Atmega8 i STK200 tak aby inni tez cos z tego mieli. W zasadzie wszystko jest opisane w angielszczyznie no ale jakby kto nie umial to daje po polsku. # Hey Emacs, this is a -*- makefile -*- #---------------------------------------...
http://obrazki.elektroda.pl/5636705900_1... https://filmy.elektroda.pl/37_1378532310... Termometr mikromocowy LCD ATMEGA16 Tym razem głównym celem projektu było sprawdzenie możliwości wykonania mikromocowego systemu pomiaru temperatury w oparciu o możliwie standardowe elementy, mówiąc w skrócie byłem ciekawy czy zwykły avr może być...
http://obrazki.elektroda.pl/2095365300_1... LCD_RST - RESET LCD_RS - RS LCD_CLK - CLK LCD_DAT - DAT LCD_CS - CS LCD_GND - GND LED_GND - GND LED+ - LED+ LCD_2V9 - 2V9 LCD_1V8 - 1V8 Chyba nie takie trudne :) Czy zastosowanie dwóch mniejszych procków np. Atmeg8 komunikujących się ze sobą poprzez UART nie poprawiło by parametrów urządzenia?...
"Nowe" czyli od Xmega i nowsze AVR mają mozliwość priorytetu przerwania. Poprzednie miały ustalony. Nie wiem jaki to AVR, ale jeśli ustawisz Timer i przerwanie od niego to jak będzie w przerwaniu to oczywiście zauważy potem flagę przerwania z USART, ale może być za późno, dlatego jeśli nie trzeba, to się przerwań od wszystkiego nie uruchamia. Rzadko...
...Czy może być coś skopsane w kompilacji komendy "while" w kompilatorze? Pozdr. Skopsany jest zapis instrukcji , a nie kompilator :) Ponieważ kompilator złożone instrukcje wykonuje w pewnej kolejności , to zapisu jakiego użyłeś , chyba nie potrafi zinterpretować. A ponieważ ta instrukcja jest poprawna składniowo , to nie ostrzega o błędzie , choć...
Mam dobry pomysł na owy problem :) A więc zatrudnię timera2 i tryb asynchroniczny. Na nóżki PC7 (TOSC2) PC6 (TOSC1) podłączę kwarc zegarkowy. Przy odpowiednim preskalerze będzie mi on generować przerwanie co 1s. Aplikacja C# wyśle mi ustawione przeze mnie dane czasowe na atmegę - np 18/6h. Atmega przeliczy sobie ile sekund to te dane godziny i podstawi...
Do każdej noty aplikacyjnej jest dołączona licencja. Zazwyczaj mówi ona, że można używać kodu do celów komercyjnych, a autor nie ponosi odpowiedzialności za szkody wyrządzone przez kod ani za błędy. A więc nie przejmuj się ograniczeniami licencji. Musisz mieć jednak na uwadze to, że sporo (większość?) not aplikacyjnych od Microchipa zawiera błędy i...
Aby korzystać z flag resetu do rozróżniania poszczególnych warunków wystąpienia resetu, użytkownik powinien odczytać i dopiero później resetować MCUCSR najwcześniej jak tylko to możliwe w programie. Jeżeli rejestr ten jest wyzerowany nim zajdzie inny reset, źródło resetu może zostać ustalone poprzez sprawdzanie flag reset. Atmega sterująca piecem co...
Witam, Mam problem z ustawieniem flagi podczas zakończenia odbierania ciągu znaku. Program pisany pod atmege 8. UART inicjalizuje w następujący sposób: [syntax=c] #define UART_BAUD 9600 #define __UBRR ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1) void USART_init(uint16_t x){ UBRRH = (uint8_t)(x>>8); UBRRL = (uint8_t)x; UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<&...
W ogóle nie używamy _delay() -nie tylko w przerwaniach. Poza tym- po co jest to kasowanie flagi przerwania w przerwaniu- po obsłudze przerwania ta flaga sama się kasuje.
Wymuszasz zmianę wartości danego pinu, ale bez ustawienia flagi OCFnx. Nie działa w trybach PWM.
Co do tych flag - nie prosciej ustawic ktrotki okres WD i w kazdym miejscu umiescic WDR? Wtedy na biezaco WD jest resetowany w miare poprawnego wykonywania kodu. W miarę niepoprawnego również. Dlatego flagi są lepsze.
Korzystając z sin ,cos, asin ,acos na avr mam inny wynik niż na komputerze kod identyczny a chodzi o wschód zach. słońca ,nie bardzo już wiem dlaczego tak się dzieje ,potrzebne jakieś flagi kompilatora czy co?
ATmega (ani prawie żaden inny uC) nie obsłuży przerwania generowanego z częstotliwością 1 MHz. Użyj jednego timera tyko do generowania przebiegu, a innego do zgłaszania przerwań, w ktśrych masz robić to, co robisz raz na jakiś czas.
Witam, drogich forumowiczów. Mam problem z komunikacją kilku urządzeń w sieci rs485. A tak prawdę mówiąc to z komunikacją pomiedzy dwoma, jednym "master" i jednym "slave". Normalnie staram się zadawać pytania w ostateczności na forum Elektroda, ale po prawie 3 tygodniach siedzenia przy problemie, przeglądaniu masy poradników i postów związanych z rs485...
Witam Mimo, że większość proponowanych tutaj rozwiązań podłączenia RFM12 do Atmegi wykorzystuje SPI programowe, ja podłączyłem tradycyjnie, przez SPI sprzętowe - mimo, że nie miałem problemów z wgrywaniem kodu do Atmegi spiętej z RFM12, to uruchomienie ich razem jest problematyczne ( każde osobno działa bez problemu ) [syntax=basic4gl] $include "Config_AVR-DOS.BAS"...
Ale zdaje się chodzi o to że jeśli masz podłączoną linię R/W do uC to pewnie przeprowadzasz inicjalizację(czy jakąkolwiek operację na LCD) z odczytem flagi zajętości LCD. Nie wczytywałem się jak to wygląda bo używam biblioteki bez odczytu tej flagi ale prawdopodobnie każda funkcja odczytuje flagę zajętości na lcd aby przyspieszyć jego działanie(pominięcie...
Dostosuj ten przykład do Twojego programu czyli nie mierz w przerwaniu tylko ustaw flagę by dokonano pomiaru. Możliwa wtedy będzie obsługa innych przerwań itd.. To klasyczny przykład jak nie należy obsługiwać przerwań. Ustawianie flagi nie ma żadnego sensu, bo wtedy nie trzeba przerwania. W przerwaniu jak najbardziej można obsługiwać pomiary ADC. Ale...
W przerwaniach wywołujesz bardzo długie funkcje. A przerwania masz szybkie więc zanim funkcja się skończy to już kilka-kilkaset przerwań Ci ucieknie pozostawiając po sobie flagi które wywołują przerwanie natychmiast po zakończeniu poprzedniego.
U mnie akurat dość szybko "zaskoczyło". Tylko mam w odbiorniku problem z blokowaniem przerwań/timerów . W nadajniku nie ma takiego problemu. timer działa, bo odlicza czas pomiędzy "wysłaniami" oraz czas wywołania czujników DS i DHT11. Zakładałem, że odbiornik działa tak: - nasłuchuje danych - pojawienie się danych wywołuje przerwanie INT2 ( stan niski...
Dodano po 8 Dopiero zauwazyłem, że co 100 ms wywołujesz podprogram Button wobec czego warunku tak nie można wyciąć bo nie będziesz mógł wywołać tego podprogamu. Zaraz coś zaproponuje. Dodano po 1 Jakiej częstotliwości masz kwarc i jaki procesor?
Czy dobrze zrozumiałem? INT włącza Timer, który dla max prędkości zliczy np. 2000 taktów, więc w pętli głównej gdzie dokonuje obliczeń po ustawieniu flagi (dokonaniu pomiaru) powinien być warunek, żeby program nie obliczał jeśli timer<2000? Coś w stylu: do if flaga then if timer1>2000 tu robi obliczenia i wyswietla predkosc ... loop
Zamiana wyświetlaczy nic nie daje, zamieniałem nawet same kabelki łączące je z płytką i też nic. Jeśli chodzi o przerwania to mam odbiór danych z RFM12 oraz obsługę klawiatury na PCF8574. Może faktycznie coś na rzeczy z tymi przerwaniami. Wyświetlacz, który nie działa jak trzeba oprócz wyświetlania daty, godziny oraz części odebranych danych wyświetlać...
W zasadzie dlugiiii chyba robisz w tym przerwaniu "masło maślane". To chyba będzie działać bo kasowanie flagi przerwania następuje po obsłudze ale rozumiem irytację tadzik85. Mnie taki kod też nieco irytuje.
No to juz twoja glowa zeby wiedzial, kazdy uklad ma zbior instrukcji ktore okreslaja co ma w danej sytuacji zrobic, np jak dostaje 0x45 to odpowiedziec 0x35 a jak 0x25 to zapisac nastepny bajt jaki otrzyma itd itp... Jako ze kazdy uklad ma swoj zestaw instrukcji, a avr takowego nie ma by moc pracowac w dowolnej konfiguracji, to sam musisz taki zestaw...
A wzmacniacz przed głośnikiem dałeś oby? Sam TEA5767 nie wysteruje nawet słuchawek. Oczywiście że można zrobić szukanie - bity sterujące SEARCH, SUD (up/down), MUTE i flagi w statusie READY i BAND_LIMIT, zdaje się że nawet było to w osobnym dokumencie opisane.
Cos zle kombinujesz. Po co chcesz przesuwac PORTB ?? Przesuwasz rejestr z dana do wyslania szeregowego a nie rejestr portu. Do tego zadania najlepiej wykorzystac instrukcje ROL lub ROR i testowac flage C instrukcjami BRCC i BRCS (oczywiscie asembler) i w zaleznosci od stanu flagi ustawiac pin lub zerowac. Pozdro Dexter
W standardowej konfiguracji avr-gcc skok do przerwania zajmuje 4+2 cykle, ew. więcej gdy przerwanie nadchodzi "w środku" instrukcji trwającej więcej niż 1 cykl. Powrót z przerwania to 4 cykle. To prawda, możesz w pętli testować bit INT0 w rejestrze GIFR, daje to test co 3 cykle zegarowe (sbis + rjmp). Ale równie dobrze możesz testować stan na pinie...
Domyślnie atmegi są taktowane wewnętrznie 1MHz. Przyłączenie kwarcu bez przestawieniu fusebitów nie jest problemem. Atmega go nie używa i tak co jest napisane w dokumentacji. Wszystkie porty na starcie programu są wejściami co można przeczytać w dokumentacji kontrolera w opisie portów wejścia/wyjścia. Źle myślisz: Flagi kasuje się wpisując do nich programowo...
Mógłbyś trochę rozwinąć ? Niestety nie mogę tego ogarnąć - to już moje drugie podejście, po próbie połączenia UART z PWM, wtedy odpuściłem, bo blokowało mi wyjścia na czas połączenia. Przeglądając przykłady na tym forum wyszło coś takiego: '********************* Konfiguracja UART Config Serialin = Buffered , Size = 40 , Bytematch = All Enable Interrupts...
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...
Witam. Mam następujący problem: gdy deklaruje zmienną jako float bądz double, po kompilacji mam około 4 kilo kodu więcej niż gdy jest zadeklarowana jako int, potrzebuje liczby ułamkowej dzieląc tę zmienną w tym przypadku przez tysiąc słyszalem coś ze mogę mieć zle ustawione flagi w kompilatorze ale nie bardzo wiem ocb. proszę o jakąś podpowiedz, dzięki.
Tak jak zacytowany w tym punkcie fragment dokumentacji (który także przytoczył piotrva) w momencie rozpoczęcia wykonywania przerwania, blokowana jest flaga I czyli globalne zezwolenie na przerwania. Powoduje ona to, że aktualnie wykonywana funkcja przerwania nie zostanie przerwana aż do jej zakończenia. W tym czasie flagi poszczególnych przerwań np....
To jest dobry pomysł. Na początku main(), zaraz po inicjalizacji LCD wrzuć funkcję wyświetlającą napis np "RESET" i będziesz wiedział, czy to funkcja się wywołuje czy uC się resetuje. Można także wykorzystać flagi resetów z MCUCSR, a konkretnie bit PORF. Bit 0 – PORF: Power-on Reset Flag This bit is set if a Power-on Reset occurs. The bit is...
Nareszcie twórcza odpowieć. Dięki wielkie myślę że coś z tym zrobię chociarz nie ukrywam że wolałbym ręczny ruch potencjometru jako priorytet lecz ten program a właściwie atmega musi zmieścić jeszcze więcej funkcji. A jak zrobić żeby flaga była ustawiana dopiero po odebraniu komunikatu? Dodano po 2 Przepraszam za odgrzewanie tematu, napisałem program...
To trzeba zrobić, mnie to działa w urządzeniu więc dlaczego miałoby nie działać innym. Atmel daje dokumentacje i trzeba z niej korzystać, może w opisie PWM nie tłumaczy zbyt jasno. Miałem zrobić PWM który miałby 5kHz no i regulację wypełnienia, zrobiłem i działa. Flagi są kasowane w momencie obsługi przerwania. Wykorzystaj przerwanie od przepełnienia....
Witam, Chciałem połączyć stosunkowo szybki przetwornik (lub przetworniki) AC z procesorem ATmega128 poprzez interfejs SPI. Napotkałem jednak kilka problemów do rozważenia. Jako, że jestem początkujący to być może dla wielu z Was te zagadnienia okażą się łatwe i będziecie w stanie mi pomóc, za co oczywiście z góry dziękuję. Problemy są następujące: 1....
No i trzeba sobie postawic pytanie jak dokladny czas jest potrzebny. W wiekszosci zastosowan nawet ten znieksztacony przez czasy przejscia przez siec jest bardziej niz wystaczajaco dobry. Dokładnie tak. Jak dla mnie czas odebrany przez NTP lub time protocol jest wystarczający. Dodatkowo stopień komplikacji w porównaniu z DCF77 jest mniejszy - DCF 77...
Witam Mam Atmega32A + PCF8563 + PCF8574 + RFM12 + DS18B20 +DHT11. Port danych LCD to Port.A, ControlPort to Port.C. I2C standardowo na Portc.0 Portc.1. Niestety jest problem z obsługą I2C, tzn. zegar PCF8563 nie działa w ogóle ( na LCD puste pole ) , a klawiatura na PCF8574 - tylko jeden klawisz i to nie ten, który jest przypisany w kodzie ( działa...
Witam, kod nie jest moje autorstwa, więc nie chcę go umieszczać . W każdym razie algorytm jest realizowany w następujący sposób: 1. Wysłanie za pomocą UARTu informacji do uC o zezwoleniu na regulację prądu + wysłanie wartości współczynników regulatora i prądu referencyjnego. 2. Jeśli ustawiona jest flaga zezwalająca na regulację, oraz ustawiona jest...
Jeśli proc faktycznie się nudzi, to może w pętli czekać na zapalenie flagi INTx zamiast zezwalać na wykonanie podprogramu obsługi przerwania. Zyskasz na czasie przyjęcia obsługi przerwania - nie będzie odłożenia adresu powrotu na stosie, oraz wywołania funkcji z wektora przerwań. powodzenia, genetix
Witam forumowiczów, zacząłem realizować projekt zegarka, kalendarza i termometrów z owego linku: http://obrazki.elektroda.pl/6128170300_1... Proszę o porady i sugestie jak można rozwiązać ten problem :P
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...
...jeżeli ktoś ma jakiś pomysł jak to ugryźć, bardzo proszę o podpowiedz :) Ależ to jest śmiesznie proste(?) :D Wystarczy wykonać 3(słownie: trzy) porównania i tej podstawie podjąć decyzje - włączyć , czy wyłączyć: oto jest pytanie ;) F0=FALSE F1=FALSE F2=FALSE F2 = Czas_załączenia <= Czas_aktualny //jeśli warunek jest spełniony , to flaga F2 =...
Nie wywołuje cli (nie wiem co to jest). Dostałem kiedyś radę radę żeby dodać sei w main i tak też zrobiłem. Mój program działa tak mam pętle while(1) w której sprawdzam klawiaturę czy nie została wciśnięta i jeżeli tak to tylko ustawia odpowiednie pola to samo dzieje się w przerwaniach. Gdy odbieram jakiś znak to dodaje go do tablicy i ustawiam odpowiednią...
Może kody obsługi przerwań masz tak czasochłonne, że jak dołożysz żądanie INT0, to obsługa timera się nie wyrabia. Skutkuje to tym, że po wyjściu z obsługi OVF0 wykonany zostaje jeden rozkaz z programu głównego i ponownie procesor wchodzi w OVF0. Jeśli to nic tajnego to zapodaj kod obsługi przerwań... A, jeszcze jedno... przesymulowałeś? Dodano po 4...
Witam! Mam problem ze zrozumieniem działania zewnętrznych przerwań w mikrokontrolerach atmega (avr). Dla przykładu posłużmy się konkretnym osobnikiem - Atmega48. W specyfikacji http://www.atmel.com/dyn/products/produc... (strona 64) wyróżniają dwa przerwania INT0 i INT1 i dodatkowo 24 - PCINT23..0. Te 24 przerwania są podzielone...
Witam Panowie, potrzebuję oświecenia. Chcę zrobić system na atmega8, który na bazie pomiaru rezystancji będzie sterował diodą led, która to będzie świeciła się przez 2, 4, 6 sekund z możliwością wydłużenia tego czasu do kilkudziesięciu sekund i przerw kilkugodzinnych między cyklami. Korzystam z trybu CTC i w nieskończonej pętli, za każdym razem kiedy...
W C.Jak się tak namyślam to wygląda że nie jest to błąd programowy. Co do samego programu jest OK.Działał na innej płytce też z Atmegą 128. Jeszcze na koniec przepisałem dokładnie przykład z dokumentacji atmegi i to samo. Dziwnie to wygląda.Zmniejszyłem jeszcze rezystory pull-upujące do 1k i efekt ten sam.Dodam że były także 10k,4,7k i 2.2k.Mam 0.19V...
Witam Mam problem nie do przejścia, znalazłem na internecie kod do obsługi właśnie tego modelu ekranu, standardowo pisany był pod ATmega32, lecz pod ATmega8 również ma działać. Rozpocząłem naukę poruszania się po Eclipse, wcześniej pracowałem na "Programmers Notepad http://obrazki.elektroda.pl/8462891800_1... Konfiguracja pinów w bibliotece...
Notmalnie, przecież licznik w tym przypadku służy tylko do odmierzania czasu, żeby w ściśle określonym momencie wyłączyć diodę. Dodatkowa zmienna jest zupełnie niepotrzebna. Przerwanie timera można wykorzystać do czegoś innego (konkretnie przerwanie porównania) - do określania momentu wyłączenia LEDa i ustawienia flagi sygnalizującej konieczność uaktualnienia...
teraz mam inny problem. Przy próbie zmiany wyświetlanego tekstu obraz zaczyna migać. Próbuję odczytać status wyświetlacza niestety bez efektu. Ekran przestaje migać ale też nic się nie wyświetla. Poniżej 2 funkcje jakie napisałem: Sub Status_read() Lcd_io_dir = &H00 //zerowanie aliasu PortuA - portu danych Reset Lcd_io_cmd Reset Lcd_io_rd ! nop Flag...
Dostałeś pomógł :) A jeszcze mam pytanko, jak zrobić coś takiego żeby np. za 5 przyciśnięciem dopiero silniczek zmieniał rotację, czyli np. kręci się w prawo, przyciskamy 5 razy, kręci się w lewo (bez konieczności trzymania przycisku) dajmy na to przez około 5 sekund, potem (powrót) kręci się w prawo i rozpoczyna zliczanie 5 przyciśnięć, jak 5 razy...
Przesyłam fragment kodu dla "paluch_gda" jedną cewką zapłonową na dwa obroty wału (pełny cykl pracy) na jednej cewce generowane są 4 takie "odcinki czasu" (iskra przeskakuje po raz na każdej ze świec), więc na 1 obrót wału przypadają 2 "odcinki czasu". Dzielimy więc wartość Nr (liczba "odcinków czasu" w 1 minucie) przez dwa i otrzymujemy prędkość obrotową...
No to lipa wtedy jak nie da sie. Myslalem ze te uC maja wlasnie taka opcje ze ten timer2 taktowany asynchronicznie z kwarcu zegarowego bedzie chodzil normalnie w trybie power seve. Cos takiego doczytalem w nocie. A power down wlasnie wszystko wylacza. Dobrze doczytałeś ;) Timer2 pracuje , ale nie robi nic , poza ustawieniem flagi przerwania.Nie potrafi...
Witam W swoim programie wykorzystuję klasyczny kod dla DS18B20. Pomiar, obliczenia i odczyt podzieliłem na dwie części, każda wyzwalana flagą od od Timer0. Najpierw w podprogramie wywołuję DS'y pierwszym wystąpienie flagi od Timer0, a w następnej wywołuję podprogram konwersji i obliczeń. [syntax=basic4gl] $regfile = "m644def.dat" $crystal = 14745600...
Witam! Dziękuje za rady, wszystko działa jak należy. Piszę, ponieważ chciałbym się poradzić jak rozwiązać problem z innym urządzeniem, którym się aktualnie zajmuję. Mianowicie mam dwie ATmegi8 w odległości 1,5m. Z jednej ATmegi podaje dwie sprzętowe flagi do drugiej. Obie są zasilane z 5V, zasilanie stabilizowane , filtrowane i odkłócone standardowo...
problemem mogło by byc zasilanie z programatora? oto fragment kodu: #define F_CPU 1000000UL #include<avr/io.h> #include<util/delay.h> void Inicjacja_spi() { DDRB = ( 1 << PB7 ) | ( 1 << PB5 ) | ( 1 << PB4 ); SPCR = ( 1 << SPE ) | ( 1 << MSTR ) | ( 1 <<...
To czekamy na prezentację jak już wszystko będzie działać :) Prezentacja na pewno będzie jak już wszystko złożę w całość. Jak na razie w wolnych chwilach pomiędzy zajęciami staram się dopracowywać wszystko na płytce stykowej. Zaobserwowałem dziwną rzecz. Atmega po kilku przejściach programu (czyt. po kilku uaktywnieniach ledów z czujnika) samoistnie...
No tu racje(dzięki ze zwróciłeś na to uwagę) , możliwe ze atmega odczytuje wynik (podłączyłem teraz napięcie mierzone pod PA0), tylko ze nadal wyświetlacz nie reaguje... Zaraz podłącze może diody i na nich niech wyświetla wynik. (chociaż wolał bym żeby ten wyświetlacz tez pokazywał wynik) Macie jeszcze jakieś propozycje? Dodano po 2 Podłączylem tak...
Prosiłem o więcej informacji :( Wypróbuj coś takiego: #include <avr/io.h> //#include <avr/interrupt.h> #include <interrupt.h> #include <signal.h> SIGNAL (SIG_INTERRUPT0) { unsigned int i=1; PORTC^=_BV(PC0); // zmieniamy stanu na przeciwny while(i++); //eliminacja skutków drgań styków (~393000...
Oto mój kod do obierania danych od Mastera: [syntax=c] #include<avr/io.h> #include "rs232.h" #include <util/delay.h> #include <stdlib.h> #include <stdio.h> void Inicjacja_spi() { DDRB = ( 1 << PB4 ); //MISO jako wyjście SPCR = ( 1 << SPE ); //Włączamy SPI } char Odbieraj_spi() { //Czekamy na koniec transmisji danych...
Witaj :D Według mnie tablica jest niezbedna poniewaz to w niej sa zapisane wlasciwe znaki , i wydaje mi sie ze nauczuciel sie myli bo samo polecenie getatkeyb() zwrocilo by numer wcisnietego klawisza a nie konkretna literke , liczbe czy znak . Przykladem moze byc fragment polskiego helpa do bascom-a w ktorym jest opisane dzialanie tego polecenia Funkcja...
Schemat wygląda następująco: http://obrazki.elektroda.pl/6868170600_1... Przeglądnąłem instrukcję do TC72 i napisałem do do odczytu pojedyńczej temperatury. Zaraz sprawdzę czy działa tylko muszę napisać jeszcze funkcje do wyswietlacza. Mam parę wątpliwości otóż w inicjalizacji SPI ustawiam SCK i MOSI a SS i MISO jako wejścia. Następnie...
Witam Oglądam sobie dokumentację do PCF8563 i brakuje mi w nim generowania przerwań (na pinie INT) co sekundę jak robi to PCF8583. Wolałbym nie używać pinu CLKOUT skonfigurowanego do pracy przy 1 Hz. Kiedy używam PCF8583 ATMEGA w przerwaniu zewnętrznym generowanym przez PCF odczytuje sekundy, a jak trzeba to minuty i ... tak dalej. W PCF8563 widzę teoretycznie,...
(at)kamyczek - ja też bardzo lubię SPI, jeszcze nigdy nie miałem takich jazd z tym :) Ale OK. Wrzucam co mogę, co może pomóc w rozwiązaniu zagadki... [syntax=cpp] /* * GccApplication1.cpp * * Created: 2015-05-04 22:21:33 * Author: daniel */ #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #define CS_HPORTB |= (1 <<...
Jestem w trakcie pisania programu na Atmegę8. Mam zdefiniowane trzy przerwania: [syntax=c] ISR(INT0_vect) { net = 0; //wywołanie co 10ms 50Hz } ISR(ADC_vect) { pomiar = ADCW; } ISR(TIMER1_COMPA_vect) { PORTC ^= 0x10; if (enable_flag == 1) { step++; } if (step == 5000) { step = 0; } } [/syntax] Obecnie pierwsze przerwanie INT0 jest nieaktywne. Początkowo...
Witam. Mam pytanie bo nie wiem czy dobrze zrozumiałem działanie fast pwm dla atmegi. Kicznik zlicza od 0 do max. Wartość max jak w nocie pisze uzależniona jest od rozdzielczości (8,9,10 bitów). Ale jest też mowa że można uzyskać rozdzielczość od 2 do 16 bitów w zależności od ustawienia OCR1A). Mi chodzi o rozdzielczość 8 bitów. Ustawiam WGM odpowiednio...
A co robię niezgodnie z dokumentacją? Poniższe funkcje znalazłem na stronie internetowej, która wyglądała całkiem poważnie. Obojętne mi z której flagi będę korzystał byle działało :P A skoro w większości przykładów natknąłem się właśnie na wykorzystanie tych flag to tego się na razie trzymam. ----------------------------------------... W sumie to...
Witajcie, w jaki sposób można optymalnie odczytać przesłany (aż do znaku nowej linii / powrotu karetki) ciąg znaków od przerwania otrzymania danych? /* * Sterowanie przez RS232 (main.c) */ #include "defines.h" #include <ctype.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <avr/interrupt.h>...
Walcze z uruchomieniem tego wyświetlacza. Znalazłem bibliotekę do jego obsługi i zacząłem sklejać własny program korzystając z napisanego dawniej programu do TWI (stąd różnojęzyczne nazwy procedur). W pętli głównej umieściłem miganie LEDem, co by wiedzieć czy nie utknął w którymś z while'ów w obłudze TWI. Początkowo się zawieszał, coś pozmieniałem i...
Witam W projekcie wysyłanych będzie około 800bytów danych do PC i w PC bedzie na bieżąco wyświetlane. Do czego zmierzam. W czasie kiedy bedę obsługiwać przerwanie od Timer1 może pojawić się sygnał do PC, że dokonywana bedzie tramsm,isja. W atmega8 nie mozna ustawiać priorytetów przerwań w odróżnieniu do 8051. Kiedy pojawiało mi się przerwanie do timer1...
Witam Jeśli chodzi o to co knuje :D ( tzn. jak ma działać ). Najpierw chciał stawiać webserwer, ale poległem na dobrej obsłudze odczytu kilku linii ( wykrycie kilku znaków, które uruchomią podprogram wysyłania na serwer ). Więc na początek coś prostszego, ale też widzę, że bez dobrej obsługi odczytu kilku linii będzie kulało. Wracając do tematu Kiedy...
Dodaje kod do zapisu daty i czasu w PCF8563 [syntax=basic4gl] '********************* Funkcja ustawiająca zegar PCF8563 Sub Settime_pcf Ssek = Makebcd(s) 'sekundy Mm = Makebcd(m) 'minuty Hh = Makebcd(h) 'godziny Dday = Makebcd(day) 'dni Wwk = Makebcd(wk) 'dni tygodnia Mmonth = Makebcd(month) 'miesiace Yyear = Makebcd(year) 'lata I2cstart 'warunek startu...
Witam, jestem nowy na forum i postaram sie opisać zwięźle i dokładnie. Mam pewien problem z Atmegą 16A i wyświetlaczem wc1602a0-sfylync06. Otóż było już kilka tematów związanych z tym wyświetlaczem ale mnie już sprawa przerasta. Podłączenie jest dokładnie takie samo jak na stronie radzia: [url=http://radzio.dxp.pl/hd44780/hd4478...
Już śpieszę z wyjaśnieniami. Wróżenia z fusów nie oczekuję, lecz w pełni zadowoliłby mnie fragment działającego kodu do usypiania i budzenia atmegi. Schematu niestety nie ma. Puki co, układ jest zmontowany na połączeniu pająka z płytkami uniwersalnymi. Nie mam niestety nawyku pisania komentarzy. Może to nieco utrudniać interpretację. Oto cały kod: [syntax=c]/*...
Ja mam podobny problem i takie same objawy. Tylko w moim przypadku używam kompilatora keil i przykładowych programów z książki K.Kardacha wiec pomyłka jest nie możliwa, wszystkie programy z tej ksiąki były zwykle pewne. Po podłączeniu nie ma nic, no chyba ze podkręcę kontrast wtedy mam rządek czarnych kwadratów. Szukam rozwiązania mojego problemu, najlepiej...
Witam, zbudowałem następujący układ: http://obrazki.elektroda.pl/1600386800_1... ( Potencjometry mają po 100kilo ohmów. ) Układ jest generatorem z regulowaną częstotliwością i długością pulsu, regulowaną za pomocą potencjometrów. Niestety mam dziwny problem z jego obsługą. Kiedy programowo WYŁĄCZĘ wyświetlacz wszystko działa elegancko....
Witam serdecznie - jestem początkujący i próbuję uruchomić termometr na atmedze8 Atmega ma podłączony wyświetlacz alfanumeryczny 2x16 znaków DS podłączony normalnie - nie pasożytniczo pisząc program opierałem się na: http://ds5.agh.edu.pl/~czaro/naukowo/avr... oraz chwilkę później ponieważ pierwsze rozwiązanie nie działało: http://www.elportal.pl/forum/viewtopic.p...
Dzięki wszystkim za opinie. Oddałem dziś projekt został oceniony na 5;] Dokonałem kilku zmian w programie więc wrzucam nową wersję: http://obrazki.elektroda.pl/8149391200_1... Jeśli już eliminujesz drgania styków programowo i w dodatku z użyciem timera, to mogłeś się pokusić o tak samo zrealizowane opóźnienia. Mnóstwo pamięci pożera...
No wiec tak :P Pytka jest na pewno ok (wlasnej produkcji) bo z portem LPT działa bez problemów - wyświetla. Ale żeby to ustrojstwo zmusić do działania z atmega to kosmos .... A oto config (przepisany z programu działającego na lpt): Wyjsc #define LCDG PORTD // PORT LINII STERUJACYCH #define DLCDG DDRD #define CS 6 // LINIA CHIP SELECT #define A0 3 //...
Witam, zaczynam dopiero w AVR GCC, więc pytam, bo nie znalazłem odpowiedzi na forum. Jest sobie struktura,która składa się z 4 bitów. Te cztery bity mają być ustawiane i kasowane co pewien okres czasu przez przerwanie. Wartości tych bitów mają potem być kopiowane na odpowiednie piny portu D. #include<avr/io.h> #include <avr/interrupt.h>...
Odbiór znaków rób w przerwaniu i zapisuj je kolejno do bufora. W przerwaniu tym włączaj lub resetuj przerwanie timera tak, aby przerwanie timera było wyzwolone dokładnie 3,5 znaku później. Jeśli w tym czasie przyjdzie jakiś znak resetuj timer i cykl będzie mógł powtórzyć się, jesli jednak znak nie zostanie odebrany w tym czasie przerwanie timera wyzwoli...
Przenieś Enable Pcint0 i Enable Pcint3 zaraz przed Enable interrupts, albo zobacz co sie stanie jak skasujesz flagi tych przerwań. PCIFR.PCIF0 = 1 PCIFR.PCIF3 = 1
Nie chodzi mi o optymalny kod itp., chcę tylko by ATMEGA miała poprawne dane w pamięci! Ale Twoje rozwiązanie transmisji jest najgorsze z możliwych...dlatego masz z nim problemy. ISR(USART_RXC_vect) { buf_odbioru[poz_znaku_odbioru]=U... if(buf_odbioru[poz_znaku_odbioru... && buf_odbioru[poz_znaku_odbioru-1]...
Witam wszystkich Mamy przedświąteczny okres a tu jeszcze taki problemik mnie dorwał Jak dokonać podziału żeby uzyskać 1/12 sekundy w pełnej wartości bez przecinków O ile jest to wykonalne ? Do dobrania jest kwarc preskaler i dowolna wartość podziału flagi.
atmega odczyt flagi timera flagi funkcji markery flagi
górna grzałka schłodzić pokój przenoszenie klimatyzatora
led3204 pilot video graber silver crest
Lokalizacja bezpiecznika postojowego w Scania Irizar Lokalizacja bezpiecznika świateł postojowych Scania Irizar