gdyby to było takie proste to nie pisałbym o tym na forum, ja potrzebuję czytać pozycje przy pełnej prędkości i to bezbłędnie bez żadnych przekłamań... Maksymalnie schrzaniłeś hardware, teraz to już Cię nic nie uratuje. Do zliczania trzeba było wykorzystać ten większy Timer, a do wykrywania zmiany kierunku przerwanie. Pięknie by to chodziło a procek...
Programowe generowanie sygnału video w jakimkolwiek standardzie jest zadaniem krytycznym czasowo, dlatego bez asemblera niewiele zwojujesz. Nawet w asemblerze trudno uzyskać więcej niż 100 punktów w linii. Zresztą zerknij na: Rejestrator przebiegów cyfrowych - przystawka do TV z EP Rejestrator przebiegów analogowych - przystawka do TV z EP Nie jest...
Działa ;-) Ustaw Breakpoint na linijce (prawy myszy Toggle Breakpoint) [syntax=avrasm]com LED[/syntax] naciśnij F5 (Run) jak zatrzyma się na Breakpoint wykonaj kod przerwania krokowo F11 naciśnij F5 (Run) jak zatrzyma się na Breakpoint wykonaj kod przerwania krokowo F11 itd. Zamiast 15625 ładuj do OCR1A 15624. Wieczorem wrzucę inny sposób migania tym...
... Nigdy nie dołączałem modułów w assemblerze do moich projekcików i nie wiem czy dobrze zrobiłem. No niestety , nie popisałeś się :-P Zobacz na adres , do którego jest kopiowany R24 6d2:8b bd out0x2b, r24; 43 r24 został skopiowany do GPIOR2(0x2B) , a nie do PORTD(0x0B) i zonk :| Nie chce mi sie tłumaczyć dlaczego tak się stało , więc dam Ci gotowca...
To o czym piszesz to jest implementacja konkretnego algorytmu którego się trzymasz. Najwidoczniej nie najlepszego, skoro 16MHz nie wystarcza żeby odpowiedzieć na prosty impuls. Jak wrócę do projektu (może jeszcze jutro) to pokażę kluczowy fragment programu w C, rozwinięcie assemblerowe i oscylogramy. Dodano po 9 No i przy okazji jestem prawie pewny,...
pisze program w assemblerze i nie moge skonfigurawac timera0 do pracy w trybie CTC robie tak: -mam w wektorze przerwan instrukcje skoku do procedury -mam dzialajaca procedure -ustawiam stos -ustawiam wartosc TCNT0 -ustawiam wartosc OCR0 -wpisuje do TCCR0 wartosc 0x0D ( ctc + prescaler 1024) -ustawiam TIMSK na 0x02 -odblokowuje przerwania poleceniem...
$katalog_WinAVR$/doc/avr-libc/avr-libc-u... Tworzysz osobny plik w asemblerze (.S, nie .s) zawierający procedurę obsługi przerwania, kompilujesz do pliku .o i linkujesz z pozostałymi plikami. W dołączanym wo WinAVR szablonie Makefile jest przewidziane miejsce na wypisanie źródeł w asemblerze (ASRC = $tu wpisz nazwy plików$). Przykład,...
- czy praca równoległych timerów nie będzie jakoś na siebie wpływać (program przerywa pracę na skutek działania timera1 by precyzyjnie wyznaczyć czas, a tu w tym samym momencie dochodzi kolejne przerwanie od innego timera, i co wtedy) Timery działają niezależnie, ponieważ realizowane są sprzętowo. Nie będą na siebie wpływać. Program niestety (w tym...
Odpowiem na własne pytanie zamieszczając cytat z avrfreaks forum. Autor: clawson. "This is dependent on your C compiler. In the case of GCC there is some "hidden" assembler: Code: 0x0000 JMP reset 0x0001 .. interrupt vector table 0x00NN 0x00NN+1 reset: clear register R1 0x00NN+2 clear SREG (including I) 0x00NN+3 set stack pointer 0x00NN+4 if .data vars...
OCR0=0x20; /// podobno mozna zjechac do 0 i otrzymac fck/2 Zjechać może i można, ale chyba tylko do sprzętowego przełączania pinu. bo obsługa przerwania w 1 cyklu jest niemożliwa. void timer0_comp_isr(void) { PORTC ^= BIT(0); } Wrzuć co kompilator wyrzuca do assemblera do kompilacji. W sumie na obsługe jest 32 takty razem...
Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
Witam Otóż mam mały problem. Pisze sobie szybkie przerwanie dla timera na Atmega644, to co mi kompilator z C przetłumaczył na assembler wrzuciłem do wstawki assemblerowej a przerwanie zadeklarowałem z argumentem ISR_NAKED, rejestry używane w przerwaniu zarezerwowałem przez: register uint16_t licznik asm("r30"); register uint16_t temp...
Ustawienie kierunku wyjścia było tylko przy wyrzucania zbednych linijek usunąłem go ale już dopisałem, moze ktoś sprawdzić czy u niego działa taki prosty kod bo ja już zaczyna podejrzewać procek... . Jeżeli wrzucę LED_TOGGLE; w pętle while to na oscyloskopie widzę przebieg prostokątny więc pozostałe sprawy są OK nie wiem dlaczego nie działa to przewanie...
A można jakoś ustawić ten licznik timera żeby zliczał np do 100?
PORTB |= 0x0F; w assemblerze wygląda to mniej więcej tak: in r16, PORTB ori r16, 0x0F out PORTB, r16 podobnie PORTB &= ~_BV(i); przy czym to drugie polecenie zajmuje kilka instrukcji i trwa zdecydowanie dłużej. Przerwanie może wystąpić w dowolnym momencie, nawet pomiędzy instrukcjami in i out. Jeżeli to się stanie, stan portu ustawiony...
No tak, ale wtedy otrzymasz wygenerowany przez kompilator zupełnie inny kod assemblera, stąd program jak i symulacja nie będą odpowiadać wersji końcowej.
Thunderacer opluł kolejna osobę. Proszę forumowiczów o nie podejmowanie z nim dalszej dyskusji do momentu w którym on opublikuje własny program w ASM do tego projektu który będzie lepszy (podejrzewam że z PWM) niż program Jaglarza. Jestem pewien że Thunderacer pokaże nam swój kunszt programistyczno-projektowy i zaprezentuje coś lepszego. Thunderacer...
Witam, pisze program w assemblerze który pozwarciu INT0, będzie wykonywać określoną czynność(łączyć się z innym urządzeniem), Ale narazie utknąłem w martwym punkcie, napisałem program który po zwarciu INT0 wywołuje przerwanie które zapala diodę podpiętą do lini PC0 5 razy i gasi(zapalenie uzyskuje poprzez ustawienie PC0 w stan wysoki). Całość funkcjonuje...
Ok, moje błędy, niemniej wcale mi to nie pomogło, mówię, widzę brak inkrementacji z IDE Simulator po prostu. A to dziwne, bo sobie wkleiłem twój kod, wywaliłem to cli/sei z przerwania i wszystko działa ok. Co znaczy, że nie widzisz brak inkrementacji? U mnie wchodząc w przerwanie TCNT0 jest równy 8, potem 12 i 15, bo tak jest kompilowana obsługa przerwania....
Zamieszczony wcześniej kod jest sprawdzony - działa na atmega8 Również po pomyfikacjach portów działa na attiny2313 i zajmuje 65% flash, wiec jest jeszcze miejsce na jakieś "wodotryski". Używam Bascom demo w wersji chyba najnowszej: 1.11.8.7 build 001 MS windows XP SP-2 Program pod attiny2313 na płytce uruchomieniowej ZL11AVR (Płytka ZL2AVR pod megę...
Odniosę się tylko do nadajnika, bo mam wrażenie, że autor wątku w tej chwili właśnie nadajnik próbuje wykonać. Nadajnik możesz to zrobić w oparciu o timer, na którym ustawisz sobie określony zegar - np. te porządane 250 kHz. Być może musisz ustawić 500kHz - aby wyłapywać nie tylko czas cyklu, ale i jego zbocze narastające i opadające. Potem budujesz...
Nie lepiej uzyc po prostu funkcji delay? Jak w assemblerze liczenie cykli ma jakis sens to w c juz go w ogole nie widze, musialbys odpalic symulator i zobaczyc ile zzera cykli for dokladnie, jak jeszcze uzywasz jakis przerwan to ci sie program calkowicie rozjedzie. Wg mnie najlepszy jest timer do tego. Aler jak tak bardzo chcesz na forze to: for(i=0;i<25;i++)...
Chodzi mi o to drugie. napisałem taki program z dwoma nie zależnymi pwm ale nie wiem dlaczego przebieg OC1A da się tylko zmniejszyć wypełnienie a nie da się zwiększyć. oto program: .include "m8def.inc" .macro load16 ldi r16,high((at)1) out (at)0+1,r16 ldi r16,low((at)1) out (at)0,r16 .endm .equ res=30 ;rozdzielczość .cseg .org 0x0000 ldir20, 15 ldi...
Praktycznie bo takie dostałem polecenie i nie bardzo wiem jak ugryźć temat. Praktycznie (nie teoretycznie) ktoś cię nie lubi, bo daje takie bzdurne zadania. Praktycznie - napisz na sztukę kod (w assemblerze) wykonujący poszczególne instrukcje assembler'a. Następnie z użyciem JTAG'a (którego pewnie nie masz) - możesz pobawić się w coś - co się nazywa...
Dzięki za podpowiedź. Będę mógł sprawdzić dopiero pod koniec tygodnia. Niestety dopiero teraz, jak "mam mokro w gaciach" wczytałem się w datasheet i wyględa na to, że zupełnie niepotrzebnie kombinowałem, bo miałem ustawione wszystko jak należy. Mam jeszcze jedno pytanie, ale dotyczy ono raczej assemblera i 1wire. Każdy, kto dłubie w asm, zostaje zmuszony...
Czy można w jakiś sposób zrobić coś takiego, żeby po przyłożeniu np.: 3,3V do nóżki Atmegi można było sprawdzić, czy jest tam to 3,3V czy np 1V ? Można to jakoś programowo rozwiązać ? Na razie zrobiłem przerwanie timer'a, w którym można by było sprawdzać stan nóżki, tylko jak to zrobić ? W przypadku zwierania tej nogi do masy jest prosto (tak jak z...
Wybaczcie moje marudzenie ale takie makro wymaga co najmniej dodatkowych dwóch "difajnów". Proponowane "ułatwienie" spowodowało że musimy zamiast 11 znaków wklikać 50 i na dodatek w czasie analizowania skakać po dokumencie aby zobaczyć co oznacza makro a później co oznaczają poszczególne definicje z makra. Wszystko zalezy, z jakiego edytora korzystasz,...
juz się pogubiłem.. w Dodano po 1 może da się to ulepszyć poprzez wstawki assemblerowe??
Witam, pracuję obecnie nad pewnym projektem, w którym używam 32 kanałów PWM na procesorze Atmega162 generowanych programowo wg. dokumentu AVR136, program napisany w języku C. Mogę powiedzieć, że generalnie wszystko działa zgodnie z oczekiwaniami, modulacja działa prawidłowo, jednak chciałbym poznać, jaki procent czasowy zajmuje obsługa przerwania. Nie...
Obsługa przerwania zajmuje z 70 cykli (odłożenie rejestrów na stos i zdjęcie ich ze stosu). Do tego z 10 cykli na wpisanie wartości do Timera i z 10 na ztogglowanie pinu. Razem 80 cykli. 8000000Hz / 80 = 100kHz. Jako że dajesz Toggle to będziesz miał dwukrotnie mniejszą częstotliwość. Czyli max uzyskasz 50kHz. Skoro masz 32kHz to pewnie przez to że...
Zbadałem systematycznie swój problem i okazało się, że przyczyną było włączenie przerwań ("sei"). Jeśli przerwań nie ma, to wszystko działa jak powinno, natomiast po ich włączeniu obserwuję kilkunastokrotne spowolnienie procesora. To jest prawdziwe spowolnienie, a nie tylko timera - pętla assemblerowa o znanej długości wykonuje się o wiele za wolno....
Gdyby założyć, że w momencie zmiany na jednym pinie, na drugim jest stan stabilny, to może udałoby się to zrobić tak jak próbowałeś. Myślę tylko, że i tak powinieneś nieco zmienić procedurę obsługi przerwania. Po pierwsze po delay należałoby najpierw sprawdzić stan pinu, który wywołał przerwanie, żeby stwierdzić, czy to nie był jakiś stan niestabilny....
Problem rozwiąże, odmierzanie czasu przez timer, a nie przez wait czy delay (nie znam BASCOMa). Jak już ktoś wspomniał odczyt i zapis bitu na 1-wire jest dość krytyczny czasowo. Miałem z tym problem w assemblerze i ADuC841. Przerwanie od multipleksowania wyświetlaczy skutecznie zakłócało transmisję. Polecam też sprawdzanie CRC, żeby ustrzec się przed...
Witam Jakie wartości przyjmuje zmienna X przy odczycie nie dotkniętego panelu ? jeśli są stałe to sprawdź czy odczytujesz inną wartość i dopiero wtedy obliczaj współrzędne dotknięcia.Wartości pól "góra" i "dół" masz takie same jak pól "prawo" i "3". Czy procesor poprawnie odtwarza do końca plik nr 1? Co się dzieje w momencie osiągnięcia końca pliku?...
co napisaliscie jako swoj pierwszy program na dany uC w danym jezyku (rozbudowy sie licza, byle by wciaz byla to ta sama baza) n. n. - literka, cyferke z przodu dodam sam. zachowujcie chronologie w swoich dokonaniach na roznych platformach jezykowych i sprzetowych, tak aby to mialo sens! ____________________ 0x1-a. Freddie Chopin - migacz diodkami o...
Te czasy to chyba chodzi o mikrosekundy a nie milisekundy? Przy odstępach rzędu ms nie byłoby najmniejszego problemu, jako że najdłuższe co może być, czyli reset pulse trwa zaledwie 480 us. Ale ok, napisz coś więcej o tym pomiarze obrotów. Dlaczego wykorzystałeś wejście INT, zamiast wejście taktujące timer? Jeśli zastosowałbyś timer to problem znika,...
:arrow: dscreator Przede wszystkim koniecznie skomentuj każdą linię i wklejaj za pomocą znaczników Code , ponieważ (jak widzisz) Twój program jest zupełnie nieczytelny (forum usuwa spacje na początku linii). Program powinien zaczynać się zaraz za obszarem wektorów przerwań. Jeśli jakiegoś przerwania nie wykorzystujesz to zamiast mnemonika rjmp wstawiasz...
Fragment: Incr Licznik If Licznik = P Then Portd.2 = 0 End If If Licznik >= C Then Portd.2 = 1 Licznik = 0 End If wykonuje się w najlepszym przypadku (bez wchodzenia do IFów) 6us. Z wejściem do drugiego IFa 7us. Krótko mówiąc procesor nie ma nawet czasu na wyjście z przerwania a już powinien obsłużyć następne. Czyli na tym kwarcu nie widać szans na...
Przepisał bym Ci to do assemblera to by działało z 5 razy szybciej. Ale najpierw musisz uruchomić przerwanie (żeby program do niego skakał). Ja nie widzę błędu w kodzie i powiedział bym że powinno działać (przerwanie).
Witam Jako że niestety spaliła mi się karta teleVGA postanowiłem wy myśleć inne rozwiązanie na obsługę TV lub monitora. Na elektrodzie było sporo tematów jak podłączyć telewizor bądź monitor pod mikroprocesor. Jedne z wykorzystaniem karty graficznej od PC ale niestety nikomu się chyba nie udało Ja znalazłem taki właśnie projekt na atmega 168 niestety...
Większość przykładów znalazłem w Asemblerze... Nie zastanawiałeś się, dlaczego? Kod w C jest zwykle mniej optymalny, przez co nie daje się uzyskać tak dużych częstotliwości, jak w przypadku asm. Jeszcze będę musiał pominąć for bo zajmuje za dużo cykli. No to jeżeli zamierzasz przerzucić wystawianie próbek do przerwania timera, to jednak radziłbym napisać...
No cóż, jak dla mnie to 2 sprawy do przerobienia : 1. Pomiar czasu na Timer0 - jakaś parka bajtów w SRAM, służąca za licznik, który co przerwanie zmniejsza swoją wartość do zera, ale się nie przekręca. Jak chcemy zmierzyć czas, to cli, zapis licznika, sei i już tylko sprawdzamy czy licznik jest wyzerowany, a w międzyczasie program może wyskoczyc do...
http://obrazki.elektroda.pl/6006020500_1... Witam Jestem uczniem 2 klasy liceum, z elektroniką łączy mnie tylko hobby. Chciałbym przestawić mój projekt wykonany na konkurs Gra Retro. Jest to remake gry Tetris. Jako wyświetlacz użyłem monitora VGA (w tym wypadku LCD) oraz pada od Pegasusa jako kontroler. Całe oprogramowanie zostało napisane...
Ten kompilator działa wrednie bo w zależności od jego opcji które ustawia się poprzez menu można zrobic tak ze liczba INT będzie CHAR i to w cale nie jest żart służę przykłądami jakby co :) O tym co kolega ma w opcjach niestety nic nie wspomina. Assembler w tym względzie jest jednoznaczny i prosty. A takl na marginesie my sie tu produkujemy a autor...
Czytam, czytam. Akurat tam zaglądam nad wyraz często - wiem jak poustawiać bity, itd - moje pytanie tyczyło się głównie wydajności prądowej, itd, prawda? ;) Nie programuję w C. Nie chcę. Wystarczyło mi nauki assemblera. C, no cóż, może kiedyś. A Bascom nigdy :D Co do kodu - wiesz ilu programistów popełniało samobójstwa przez intuicję? ;) Nie no, żartuję....
Sposób jest bardzo prosty ... zmień język na C lub assembler. Też nad tym myślałem ale to proste nie będzie W drugiej kolejności zastanów się nad zewnętrznym flashem, bo jak sądzę tę pamięć zajmują Ci próbki dźwięków, a nie program. Nie ma żadnych próbek dźwiękowych program działa od kilku lat i jest ciągle udoskonalany. Buzzer znajduje się na płytce...
Jak już pisać wstawki w ASM, to zamiast używać kodu w stylu (przykład z GCC-AVR Inline Assembler Cookbook): naked ): _SFR_IO_ADDR(SREG) zamiast zwykłego SREG . Można zresztą w ten sposób pisać także funkcje wywoływane później w plikach *.c, jeśli są np. krytyczne czasowo. No chyba, że tego wstawianego kodu będzie naprawdę niewiele :)
A masz ustawione odpowiednio fuse ? Mój Make: # Name: Makefile # Project: hid-data example # Author: Christian Starkjohann # Creation Date: 2008-04-07 # Tabsize: 4 # Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH # License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)...
Na Atmega128 możesz zrobić programowy PWM na Timerze i wykorzystać jako wyjścia PWM wszystkie dostępne nogi. Na dowolnej Atmedze taktowanej 8MHz i posiadającej odpowiednią ilość nóg możesz zrobić sterownik DMX 32-kanałowy. Mowa oczywiście o PWM rzędu 120Hz max, do LED wystarczy :) i "szkolnych" procedurach w C, bez żadnych strasznych optymalizacji czy...
Zanotowałem bardzo dziwne dla mnie zachowanie Avr Studio. Otóż mam następujący program: [syntax=asm] .INCLUDE "m8def.inc" .cseg .org 0 rjmp Start .org OVF0addr rjmp ISR_TOV0 Start: ldi r17, high(RAMEND);utworzenie stosu out SPH, r17 ldi r17, low(RAMEND) out SPL, r17 ldi r16,1 ;konfiguracja timera out TCCR0, r16 out TIMSK, r16 ldi r16, 0xf0 ;wpisanie...
...czy na czas wytransmitowania, bądź odbioru znaku program wstrzyma swoje działanie na 10ms, czy po prostu odbędzie się to równolegle... Jeśli budujesz transmisję RS232 na przerwaniach, sprzętowy USART odbiera znak w czasie, gdy procesor wykonuje program główny. Po odebraniu całego znaku generowane jest przerwanie. W obsłudze przerwania musisz tylko...
Ja też dotarłem do tego helpa :D . Nie chodzi mi o konfigurację poszczególnych timerów, tylko o korzystanie z nich w programie. Tak się składa, że po skonfigurowaniu timera 1 jako generatora PWM, aby z niego korzystać wystarczy w programie wpisać na przykład pwm1a=10. Ta komenda daje (w przypadku na przykład działania 8 - bitowego) współczynnik wypełnienia...
Wszystko pięknie, ładnie, ale żaden z programów nie działa... Program excray'a, się kompiluje, ale: nie widzę nigdzie wyjścia OCR1A (PB1), na które jest podawany sygnał wyjściowy PWM'a. Na wyjście to podawany jest stan niski (ustawiony bit COM1A1). Dodam tylko, że chodzi o PWM w trybie Phase Correct. W moim programie wszystko jest ok, poza odczytem...
Witam. Właśnie staram się zrobić mysz komputerową na atmedze 32 za pomocą biblioteki V-USB. Program testowałem na płytce rozwojowej z kwarcem 16MHz, atmegą 32 i wszystko działało. Po przeniesieniu się na moją płytkę z kwarcem 12MHz i przekopiowaniu kodu, na wyjściach D+ i D- mikrokontrolera nic się nie pojawia, D- stan wysoki, D+ niski. Oczywiście zmieniłem...
Tak powinien wyglądać plik Makefile: # Hey Emacs, this is a -*- makefile -*- #---------------------------------------... # WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. # # Released to the Public Domain # # Additional material for this makefile was written by: # Peter Fleury # Tim Henigan...
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
Witam Nie mogę wrzucić szkicu z biblioteką TimerOne. Arduino Nano Arduino Uno Oba klony Inne szkice wgrywają się. Działają Tu wywal mi takie błędy Arduino:1.8.7 (Windows 7), Płytka:"Arduino/Genuino Uno" C:\Program Files\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\Arduino\hardware -tools C:\Program Files\Arduino\tools-builder...
Wystarczy zwykły attiny2313 (chyba że musi być to atmega), przecież ma wbudowany układ UART. Odczytujesz w pętli (albo w przerwaniu timera) stan PinB, dalej, wysyłasz to poprzez UART do komputera.. Do napisania w pół godziny w assemblerze dla kogoś kto dopiero się uczy :) (Mogę Ci pomóc z tym kodem, daj tylko znać na priv...)
Witam. Mam pytanie: Czy 1 ms może być różna przy różnym kwarcie? Czy jaki kolwiek kwarc da tą samą 1ms? To juz sa dwa pytania. Po pierwsze ... "przy różnym kwarcU", ok? Taka (umowna) "1ms" zalezec bedzie zawsze od czestotliwosci uzytego kwarcu. W mikrokontrolerach masz wszystko czego trzeba, by precyzyjnie odliczac czas: kwarcowy takt (XTal) z precyzja...
Ciezka sprawa. Nawt jesli popedzisz ATMege z 16MHz to masz zaledwie 16 instrukcji/us. Da sie to zrobic zakladajac, ze PWM jest uporzadkowana tablica (np. w kolejnosci wzrastajacej) i wykorzystujac przerwanie timera (COMPARE). Ladujesz rejestr do porownania wartoscia kolejna z tablicy, w przerwaniu zmieniasz stan IO i zwiekszasz wskaznik do tablicy PWM....
Arduino ma tę zaletę, że można kupić płytkę za 30zł i coś na niej robić. Gdyby nie to, że osoby które prowadzą laboratoria po prostu kupiły kilka zestawów Arduino, to zajęcia laboratoryjne z mikrokontrolerów jednoukładowych byłyby prowadzone wyłącznie w oparciu o dwa zestawy DSM-51 i ew. mocno niedorobiony emulator tego systemu na PC. Można się nauczyć...
Racja. Już dawno nie pisałem w assemblerze. Zastosowałem etykiety do skoków, a później wywołałem funkcje i działa (funkcja zabawa diodami). Przy obsłudze przerwania będę odkładał rejestr SREG na stos. Poniżej poprawiony listing programu. .include "m8def.inc" ;wektory przerwan .org $000 rjmp reset ;***************************************...
Nie zgadzam się z Twoją opnią, która sprowadza się do tego, że skoro jest dostepny C, to zapomnijmy o asemblerze. Zacytuj ta opinię, bo chyba coś innego napisałem. Masz rację, jeśli dotyczy to projektów amatorskich (hobby) lub krótkoseryjnych, w których ważniejszy jest czas wykonania prototypów niż korzyści ekonomiczne. Nie wiedzieć czemu, wszystkim...
Może nie zignorowałem tylko programuję w Programmers Notepad stąd pewnych nieścisłości kompilator mi nie pokazuje:) co do kwestii: 1. Zamieściłem teraz u góry F_CPU 2. Załączaj tylko io.h? chodzi o to żeby załaczać jedynie ten plik zamiat include <avr/iom8.h>? 3. Nie za bardzo znam się na assemblerze ale dzięki za odpowiedz:) 4. Przy takim ustawianiu...
Dzięki za podpowiedź BlueDraco, masz rację tablica jest zbędna. Myslę że tak można by to zrobić, czy dobrze myślę? Trzeba tylko zainicjować zmienna "i" wartością 0b00010001 by działało na 4 bitach portu prawidłowo. [syntax=c]//============================... int main(void) { uint8_t i =...
Pisząc program stanąłem przed problemem odbioru kodu RC5 z pilota ale z użyciem przerwania. O ile w BASCOM 8051 GETRC5 w przerwaniu działa doskonale, to w BASCOM AVR jest to kompletna porażka. Wadą Bascomowej funkcji GETRC5 jest: 1) Dziadowskie działanie w przerwaniu (niby działa ale traci pierwszy pakiet z pilota) 2) Zastosowanie jej w programie powoduje...
Ostatecznie zrób wstawkę w ASM. Wklej tutaj swój kod z przerwania, może da się go przyśpieszyć. Wiem że procek za czym skoczy do podprogramu przerwania robi jeszcze dużo rzeczy poza moimi plecami, ale w moim przypadku jest to pożądane - mój zegar przecież śpieszy . Tak więc robienie wstawek asembler-owych i próbowanie na siłę zbliżyć się do teoretycznej...
http://obrazki.elektroda.pl/2289355800_1... Witam, Chciałbym przedstawić moją konstrukcję sterownika do wzmacniacza lampowego (opcjonalnie tranzystorowego). Sterownik powstał ok 2 lata temu na prośbę zaprzyjaźnionego audiofila a potem był rozwijany w ramach forum poświęconego konstrukcjom audio. Ponieważ ostatnio powróciłem do tego...
(at)yanan Sposób na timeouty jaki masz jest ok, jakbym miał się czegoś przyczepić to tego, jak odróżnisz odebranie 0xff od timeouta w twojej funkcji? Oczywiście najogólniej robienie odbioru danych z wolnych interfejsów typu UART za pomocą poolingu to porażka na całej linii. Zdecydowanie należałoby użyć przerwań interfejsu UART, co w połączeniu z timerem...
$regfile = "ATtiny25.dat" $crystal = 8000000 Config Pinb.2 = Output ' pompa Config Pinb.1 = Output ' dioda Config Timer1 = Timer , Prescale = 256 On Timer1 Sekunda Dim Sekundy As Byte Dim Minuty As Byte Dim Milisekunda As Byte Enable Interrupts Enable Timer1 'Timer1 = 6 ldi R16, 6 !Out TCNT1, R16 Set Portb.2 Set Portb.1 Do If Minuty = 0 Then...
Pętla ma tą drobną wadę, że jeśli w nią wrzucisz jakieś funkcje warunkowe to nigdy nie wiesz, co jaki czas się dokładnie obróci :) takie tam. Przy jednym warunku to jeszcze nic, ale już przy n rozgałęzieniach, policzenie najgorszego możliwego czasu obrócenia pętli staje się utrudnione. Bo jak warunek nie spełniony to sprawa krótka skok, a jak spełniony...
Witam! Zlecę napisanie prostego programu w assemblerze na mikrokontroler ATMEGA128. Docelowe projekt ma być symulowany w AVRStudio. Zalecenia do projektu:Opracowanie systemu sterowania sygnalizacją świetlną dla prostego skrzyżowania (dwie ulice równorzędne) z wykorzystaniem: włączania przycisku, zapalania diód i obsługą timera. Zainteresowanych proszę...
Proszę wygenerować kod assemblera i wkleić tutaj dla takiego kodu C: A proszę bardzo :) [syntax=avrasm]ISR(TIMER1_COMPA_vect, ISR_NOBLOCK) //1000 razy na sekundę { 4a:78 94 sei 4c:1f 92 pushr1 4e:0f 92 pushr0 50:0f b6 inr0, 0x3f; 63 52:0f 92 pushr0 54:11 24 eorr1, r1 56:2f 93 pushr18 58:8f 93 pushr24 5a:9f 93 pushr25 5c:af 93 pushr26 5e:bf 93 pushr27...
Nie wiem czy ktos w Polsce zadal SOBIE na tyle trudu aby dokonac tlumaczenia czegos co sluzyloby INNYM... (obie srony za darmo). ktoś przetłumaczył dokumentację do ATmegi16 (fakt, nie zdanie po zdaniu, ale gdzieś w 80-90% najważniejsze rzeczy). Pytanie do autora: czy to ma być czynność powtarzająca się na okrągło, czy może rzadko i dodatkowo w tym...
Witam, zacząłem nauke assemblera od kursu " .nolist .include "m88PAdef.inc" .list .cseg .org 0 cli //wyłączenie przerwań ldi R16, HIGH(RAMEND) //implementacja stosu out SPH, R16 ldi R16, LOW(RAMEND) out SPL, R16 //konfiguracja PWM sbi DDRB, 3 //ustawienie jako wyjście linii na której będzie generowany sygnał PWM ldi R16, (1<<WGM00)|(1<<W...
Wybierz inną serię z lepszymi peryferiami i możliwościami. np 328 Och tak, rzeczywiście, do timera kuchenki mikrofalowej te peryferia będą jak znalazł! Stwierdziłem że Na Assemblerze było by to zbyt ciężkie do zrobienia a współcześnie popularny jest C i chciałbym się nauczyć Współcześnie popularne jest Arduino z C/C++ (pomieszane) Jeśli coś miałbym...
Ja bym się nie pchał w 8051 bo to zacofane układy. Powstał w 1980 roku. To że dużo osób na nim pisze, nie znaczy że jest dobrym wyjściem. Polecam AVRy, i nie tiny, bo on nic nie ma, tylko od razu ATMega8. Pisanie, że assembler jest trudny, świadczy o jego nieznajomości. Jest to język którego rozumie sam układ, więc musi być najprostszy. Składnia prosta,...
https://obrazki.elektroda.pl/4148743200_... Pierwszy mikrokontroler AVR ATmega zadebiutował w 1998 roku i zrewolucjonizował rynek. Stworzony został przez firmę Atmel, która została przejęta w 2016 przez Microchip. Mikrokontrolery ATmega od początku były dość ważne dla hobbystów. Ale w ostatnich latach ich pozycja na rynku została zakwestionowana...
Przerwania wcale nie są złe tylko dlatego że tobie się na nich nie udało. To trzeba zrobic w assemblerze. Ale nawet przy taktowaniu 16MHz nie podzielisz częstotliwości większej niż powiedzmy 1MHz. Ja bym walną to na Timerze w trybie CTC. I ustawił Timera tak żeby generował sprzętowo sygnał na swoim pinie IO. Będzie i szybkie i proste. Wtedy przy taktowaniu...
Witaj, Za co jest odpowiedzialny Timer0? Za określenie częstotliwości granicznej? Czy masz wolny Timer 1? Jeżeli tak, to moim zdaniem strasznie sobie to komplikujesz. W końcu Twoim zadaniem jest zmierzenie okresu przebiegu o częstotliwości, którą podajesz z generatora, a od tego jest tryb Capture, czyli pomiar długości impulsu. strona 83: Input Capture...
Atmel ma taki bajzel że już sam nie wie co robi, tu mamy mege8535 (to rozumiem) Tiny2313 (też) a tu nagle Mega168 (przecież to nówka sztuka) Mega329, 48 też są nowiuśkie. Teraz Atmel robi czterocyfrowe (raczej wprowadza) potem znowu będą trzycyfrowe (planowany: Mega640), albo pięciocyfrowe. Bajzel jest i niedoświadczonemu elektronikowi ciężko wyczaić...
Witam. Mam problem ze zrozumieniem działania przechwytywania wartości licznika Timer1 do ICR1 w momencie wystąpienia określonego zbocza na wejściu ICP mikrokontrolera ATmega8 w odniesieniu do dekodowania kodu RC5 (lub innych kodów). Ujmując w skrócie, nie wiem jak ma wyglądać procedura dekodowania RC5 z wykorzystaniem wejścia ICP, a na tym mi zależy....
Zmieniłem - niestety, nie pomogło :( p.s. biblioteka nawet w oryginale przy kompilacji wywala błąd... Dodano po 3 Mam ochotę się poddać i kupić płytkę z ATmega... W sieci jest worek przykładów i wszystko działa - przy zmianie na Xmega zaczynają się problemy, spowodowane moją znikomą wiedzą. Trochę mi szkoda dwóch miesięcy owocnej nauki i potencjału...
Jest to dosc proste do wykonania, ale tlumaczenie tego dosyc uciazliwe ;-) Generalnie musisz wiedziec o obsludze przyciskow, eliminacji drgan stykow, uzywaniu timerow/licznikow i obsludze przerwan. Wszystko to znajdziesz ladnie i zrozumiale opisane w ksiazkach. Moge polecic www.btc.pl Jest tam kilka ksiazek o programowaniu mikrokontrolerow AVR (w C++,...
No i ja piszę dla siebie, i po swojemu. Zmienisz podejście, gdy będziesz chciał po kilku miesiącach wprowadzić kilka zmian do swojego starego programu. Akurat to mi nie sprawia problemu :) - za to trudno mi się czyta cudze kody. Chyba bez jakiegoś szczególnego powodu. Dodano po 14 rpal - goto jest bo mamy wolny wybór :) Pistolet też można kupić, od...
Cześć wszystkim! Projektuję właśnie prostą konsolę do gier wykorzystującą monitor VGA i opartą na ATmedze644PA. Tak tak, wiem że generowanie sygnału VGA to zadanie dla układów typu FPGA, ale odrobina szaleństwa jeszcze nikomu nie zaszkodziła :) Tak więc, ATmega644 służy do generowania sygnału VGA. Klatki są przechowywane w pamięci RAM (układ AS6C1008)....
Szkoda. Wprawdzie potrzebowałem 24MHz i ucieszyłem się że ten na 20MHz chodzi i na 24MHz. Ale liczyłem na to że jak zdobędę ten na 24MHz to łyknie ze 30MHz. Szczególnie że okazało się że 24MHz mi nie wystarczy. Wczoraj przypadkiem odkryłem w datasheecie dodatkowe rozkazy (muls, mulsu, fmul, fmuls, fmulsu, movx, lpm, Rx, Z, lpm, Rx, Z+). Pomoc BASCOMa...
Tak jak napisałem, próbowałem różnych rzeczy i sposobów. Timer to pierwsze od czego zacząłem. Problem w tym, że gdy próbowałem ustawić preskaler (inaczej PSC) = 3 i ARR = 3 (co mi daje 1us bo: 16MHz/((PSC+1)(ARR+1))=16MHz/(4*4)=16MHz... co odpowiada 1us) Timer przestawał działać. Nie wiem czemu dla tak małych wartości się wysypał. Szukałem w nocie...
Witam, mam prośbę, czy mógłby ktoś sprawdzić mojego Makefil'a, ponieważ podczas kompilacji wrzuca mi błąd o kodzie: avr-objcopy: 'main.elf': No such file make: *** [syntax=c]//sterownik wyswietlacza #include "HD44780.h" //usawiasz tam porty sterujące, nie musisz ogarniać kodu #include <util/delay.h> #include <avr/io.h>...
Ja jak na razie to tylko C. Nie chcę żadnych zbyt wypasionych rzeczy wymagających tworzenia i usuwania (konstruktory, destruktory, klasy, obiekty). Po prostu nie lubię rozpierdychy na stosie, bo mam zwyczaj stos wykorzystywać dość nietypowo (np. robiąc wielowątkowość). Oczywiście kompilator o wszystko dba i wszystko by działało, ale ja dając wstawki...
Po pierwsze, czy to musi być w assemblerze? W C to dosłownie 10 linijek kodu. Po drugie, co do zwalniania i przyśpieszania - można zmieniać delaye, ale najsensowniej to chyba zrobić na timerze. Ustawiasz timer w trybie CTC, klawiszami tylko zmieniasz wartość do której zlicza, a w procedurze obsługi przerwania przepełnienia timera wystawiasz kolejne...
Prędkość obsługi przerwań determinuje wyłącznie tempo ich obsługi. Aby AVR wykrył przerwanie potrzebne są o ile dobrze pamiętam 2 takty zegara, co niewiele zmienia, bo z taką prędkością i tak przerwań nie obsłużysz, bo samo wejście do nich trwa ponad 4 takty, a wyjście dodatkowo 2. I to w przypadku pustego przerwania. Lepiej opisz co to za proste analizy...
"i" jest typu int. Dzięki za kod, ale nie jestem biegły w assemblerze... [syntax=c] int main () { int i = 0; //wartości RED //TIMER 1 - No prescaling, PWM 8 bit Phase Corrected TCCR1A = 0b10101001; // czerwony (1<<COM1A1)|(0<<COM1A0)|(1&l... TCCR1B...
Ja ostatnio miałem problem z zapisem do pliku TXT. Co minutę były zapisywane parametry takie jak temperatura, wilgotność itp. A w międzyczasie podcinało sobie przerwanie od Timera2. Wywoływane ze 100 razy na sekundę robiło programowego PWMa na pinie PortA.2 czy jakimś takim. I to za pomocą sbi/cbi a nie operacji In/Out więc to na pewno nie robiło problemu....
Odkopię temat bo mam problem też z Attiny13. Problem jest następujący: po skonfigurowaniu timera0 jaki licznik zaczyna on zliczać kolejne takty procesora z określonym preskalerem ale w momencie użycia procedur waitms lub if timer0 zatrzymuje się. Dzieje się tak podczas sprawdzania na sprzęcie jak i na symulatorze. Program powinien działać poprawnie,...
https://obrazki.elektroda.pl/4950580000_... Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka...
Czyli błędnie rozumowałem, że mogę wybudzić procka przez Int0, bo jeśli będzie procek w power down, to Int0 nie będzie działać, więc nie zareaguje na pojawienie się tam stanu niskiego. Nie bardzo jestem to w stanie sobie wyobrazić i tak szukam po omacku. Nie, nie rozumowałeś błędnie. Błędem jest to, że chcesz wykorzystac ten sam interrupt do 'POWERDOWN'...
1. Definicje MCU i F_CPU to tylko w Makefile. 2.Wypróbuj takie coś w ramach zwalczania przyzwyczajania się do "delajów" ;) - jak ja widzę używanie timera w trybie CTC, generalnie tak napisane, że raczej z notą katalogowa w ręku nie trzeba za dużo wyjaśniać o co chodzi : - plik LED_Line.c:[syntax=C]#include <avr/io.h> #include <avr/interrupt.h>...
http://obrazki.elektroda.pl/2563369400_1... Witam wszystkich! Chciałbym zaprezentować pewien mały projekt, który wykonałem na prezent. Jest to drzewko szczęścia, w którym rolę liści pełnią diody LED RGB. Był to jeden z moich pierwszych projektów oraz pierwszy zawierający część analogową (dlatego zarówno projekt jak i wykonanie nie jest...
8kanałowe a ile próbek? Najtańsze nowe ok. 500zł (atlantec) taki z akcesoriami 800zł, oczywiście, że wew. pamięć a potem "po fakcie", jak Sobie wyobrażasz oglądanie ONLINE przebkiegu 100MHz?xD Masz racje pytanie było debilne. O ile koledzy byliby na tyle uprzejmi prosiłbym także poddanie recenzji poniższego pomysłu. Z góry zaznaczam ze nie do końca...
timer assembler atmega assembler assembler atmega
bosch zmywarka hałas impedancja przesunięcie fazowe jakie playstation polecacie
piekarnik samsung piekarnik samsung schemat
Husqvarna 562XP nie odpala po problemach z prowadnicą Kod błędu 23 w odkurzaczu Hoover - co oznacza?