LED-MASK EQU 10000000B LJMP START ORG 100H START: LOOP: ; początek pętli LOOP XRL P1 ,#LED-MASK ; funkcja exor na porcie P1 MOV A ,#10 ; tu przepisanie do A liczby 10 nic nie wnosi w pętli LCALL OPOZ LJMP LOOP ; koniec pętli LOOP OPOZ: ;poczatek petli opoznienia MOV R0 ,#0 MOV R1 ,#0 MOV R2 ,#0 X: DJNZ R0 ,X ; odejmuje od R0 liczbę 1 i sprawdza czy...
Albo tak też można: Czas: MOV R0,#00H Opoznienie: MOV R1,#06H DJNZ R1,Opoznienie DJNZ R0,Czas Pozniej po prostu lecie dalej:) Jeśli chcesz żeby to był podprogram to wstaw etykiete przed etykietą czas, a na końcu dodaj RET. Powodzenia
d3zerter>> wstawiłem po odczycie stanów portów procedurę nop (czekaj) czy to weliminuje drgania? Z tego co pamiętam "nop" trwa jeden takt procesora (około 1us), styki drgają przez parę milisekund, trzeba wstawić jakąś procedurę która by opóźniła trochę bardziej.
super szybka odpowiedź !!! Dzięki, ale teraz rodzi się moje kolejne pytanie: co znaczy w assemblerze znak dolara ??
1. assembler 2. timer 0x41 0x56 0x45!!
sprubuj zamiast skoku do procedury co podałem wstawić tylko: DJNZ r7,$ też powinno zadziałać a jest to opóźnienie ok.260razy krótsze. pozdrawiam
Sa to po prostu dwie petle. Najpierw 255 razy wykonywana jest petla DLOOP2 az do BRNE DLOOP2 (BRanch if Not Equal). Skok bedzie wykonywany dopoki nie wyzeruje sie rejestr R18. Potem o 1 zmniejszamy R17 i tak w kółko aż R17=0. A czas bedzie cos koło (2_cykle *255_obejsc petli_DL2)*255_obejsc_petli_DL1 + ~3_cykle * 255_obejsc_petli_DL1 czyli cos kolo...
Tu masz błędy #define LED_ON sbi(DDRB,PB1);sbi(PORTB,PB1) #define LED_OFF sbi(DDRB,PB1);cbi(PORTB,PB1) o czym zresztą jest napisane w okienku Build nad tym komunikatem co podałeś: E:\LED.c:35: undefined reference to `sbi' to sbi o ile się nie mylę odwołuje się do assemblera. Opóźnienie masz już gotowe - dołączasz #include <util/delay.h> i możesz...
Jak mamy iść tym tropem to nie tylko nic nie ustawia ale na dodatek to nawet nie jest assembler. Tylko C+
Dziękuje bardzo za naprowadzenie i punkty, programik już działa. Do tej pory bawiłem się assemblerem i '51 a widzę, że C to inna bajka ale z przyjemnością przy niej zostanę.
Nigdzie nie ustawiasz portu jako wyjścia. W funkcji opóźnienie zmieniasz rejestry R16-R18 po czym jak wyjdziesz z funkcji wystawiasz wartości te na porty.
Daj mi kod dla komputera Commodore C64 na cykliczną zmianę koloru ramki obrazu, osobno w języku basic i osobno w assemblerze Oczywiście! Oto prosty kod w języku BASIC i assemblerze dla komputera Commodore C64, który cyklicznie zmienia kolor ramki obrazu. **BASIC:** ``` 10 FOR I = 0 TO 15 20 POKE 53280, I 30 FOR J = 1 TO 1000 : NEXT J 40 NEXT I 50 GOTO...
To nie tak. Jak chcesz używać AVR Studio to musisz używać ich funkcji do zapisu / odczytu EEPROM-u. Funkcje kompilatora są napisane jako inline assembler i zapewniają, że opóźnienie między wystawieniem bitu Write Enable i zapisem (lub odczytem) będzie mniejsze niż 4 cykle. Jeżeli sam robisz taki zapis w C, to kompilator generuje ci więcej kodu i warunek...
Popełniłeś jeden błąd logiczny, a mianowicie wejścia portu D podciągasz do plusa, no więc musisz je zwierać do masy aby był jakiś efekt, a co za tym idzie musisz sprawdzać czy pin jest zgaszony a nie ustawiony, np. zamiast: cpi r18,0x40 ; czy jest przyciśniety SW4 ;0b01000000 breq Przycisk_4 ; tak - to skocz do Przycisk_4 powinno być: cpi r18,0x23 ;...
Dawid nie wydaje mi się, napisałem kiedyś właśnie prosty zegar gdzie w funkcji przerwania od wewnętrznego licznika wykonuje się minimum 100 cykli + opóźnienie 150ms i nic się złego nie dzieje. Fakt że miejsce w pamięci na wektor przerwania jest niewielkie, ale C to nie assembler i kompilator jakoś to sobie ułoży.
Dobry wieczór, Gra działa, ale wyświetla tylko cyfry parzyste z wyjątkiem pierwszej. Generator liczb pseudolosowych polega na wycięciu młodszej cyfry setnych sekundy zegara systemowego... Kiedyś działało, a na CA80 kuleje... Zakładam, że problem wynika z różnicy w implementacji obsługi klawiatury starego (SA) i nowego (CA) systemu oraz wykorzystania...
Zacznij od robienia opóźnień pętlami i w ogóle od obycia się trochę z assemblerem, pomigaj na początek LEDami, a jak już nabierzesz trochę wprawy, to wtedy zabierz się za obsługę liczników / timerów i pozostałych peryferiow. Najlepsi programiści kiedyś od tego zaczynali... Porywanie się na początku za coś bardziej skomplikowanego tylko Cię zniechęci....
Nie masz zdefiniowanego F_CPU, biblioteka delay przyjmuje domyślnie F_CPU=1000000 co powoduje że twoje opóźnienie wynosi 64 sekundy a nie 128. Czemu ma służyć ten nop którego wykonanie będzie trwać 0.5us? Jeżeli nie chcesz wstawki assemblerowej to dołącz bibliotekę[syntax=c]#include <avr/cpufunc.h>[/syntax] i użyj[syntax=c]_NOP();[/syntax]
dodam jeszcze, że kod ten nie musi wymierzać dokładnie sekundy, niech pozwoli poprostu generować opóźnienie dające się zauważyć na diodzie LED(chodzi o migotanie).
W PL PICe są droższe niż Cortexy, więc nie będzie to żadnym problemem [; Pozatym temat chyba nie jest o tym, że Cortexy są najtańsze na ziemi, a o tym czy warto się bawić w assemblera. Pozatym - oszczędności o których tutaj wszyscy piszą mają sens przy tysiącach sztuk na miesiąc, a - jak niektórzy zapewne wiedzą - nie wszystkie firmy produkują takie...
Testy można przeprowadzić w niektórych symulatorach np. [url=http://www.edsim51.com/]edsim51. Przykładowy kod poniżej. [syntax=asm] sekundy EQU 07Eh ;zmienna sekund jedna_dwudziestaEQU 07Fh ;licznik jednej dwudziestej sekundy resetowanie EQU 19456 ;ustawienie zliczania co 0,05sek setkiEQU 07Bh dziesiatkiEQU 07Ch jednostkiEQU 07Dh flagiEQU 020h org 0000h...
Napisałem, gdzie leży problem - za każdym razem wysyłasz dane inaczej, więc nie jesteś w stanie zapanować nad działaniem programu. Na początek napisz prostą procedurę, która np. czeka 15 ms i wysyła daną. Używając tej procedury uruchom wyświetlacz. pamiętaj, żeby poczekać np. 200 ms na samym początku, zanim zaczniesz go programować. Potem, kiedy wyświetlanie...
Z upchaniem ściemniacza do tego procka może być mały problem choć osobiście ściemniaczami się w ogóle nie interesowałem i mogę się mylić. Zależy jeszcze w czym to będzie programowane (bascom, c, assembler). Opcja bez ściemniacza załatwiło by dosłownie kilka linijek kodu. Detekcja zera będzie działać ze stosunkowo sporym opóźnieniem. Lepiej dołożyć do...
Nie podałeś w jakim środowisku będzie uruchamiany kod ale AD1: Diody zapalą się jeżeli w układzie docelowym stan '1' zapala diodę. Po instrukcji jmp nie dajemy przecinka, przecinek występuje tylko jeżeli rozdzielamy parametry rozkazu. Chyba że jest to specyfika używanego assemblera. AD2: Dobrze byłoby nazwać jakoś to makro, słowo 'nazwa' może być mylące....
Nigdy nie korzystałem i nie śledzę rozwoju AI, więc mam pytanie. Czy i ewentualnie jak dobrze, modele językowe radzą sobie z pisaniem programów w asemblerze, Zapytałem Claude o wygenerowanie szkieletu programu dla koprocesora ULP w ESP32. Nie informowałem AI, że musi być w asemblerze, ale sobie poradził całkiem dobrze: Może jednak C++ ? Niestety, Claude...
Witam Poniżej adresów urządzeń masz jeszcze jedną tabelkę, która powinna Ci pomóc w pierwszym pytaniu, oraz strona 25, za opóźnienie odpowiada ten fragment. [syntax=asm]MOV A,#10 ;czekaj czas 10*100ms=1s LCALL DELAY_100MS[/syntax] Jeśli chodzi o rejestry [url=http://pl.wikipedia.org/wiki/Intel_... Pozdrawiam
Robisz mniej więcej coś takiego: mov ACC,#00h Petla: call /Opoznienie/ add ACC,#01h mov P1,ACC ljmp Petla I to tyle. Przy czym w miejscu /Opoznienie/ wstawiasz nazwę funkcji generującej opóźnienie. Można też robić to tak, że timer odmierza dokładnie 1s.
W xmega nie przełacza się zegarów za pomocą fusebit. Przełącza się źródło sygnału w programie. Przykład jest umieszczony na stronie Atmela pliki AVR1003.pdf i AVR1003.zip [url=http://www.atmel.com/dyn/products/a... Przykład jest w C ale to nie problem w asemblerze ustawić odpowiednio te same rejestry (w tej...
W tym konkretnym przypadku szybsze wykonywanie się programu nie zależy od użytego narzędzia programowania (assembler lub język C) ale od jakości algorytmu/kodu (czyli umiejętności programisty). Generalnie ten sam algorytm zapisany symbolicznie trzeba by było zapisać w C i zapisać w assemblerze (wykorzystując zmienne rejestrowe, bezpośrednie odwołania...
W BASCOMIE się nie da ze względu na precyzyjne czasy wyświetlania jednej linii sygnału. Świetnie nadaje się do tego Assembler gdzie kontroluje się każdy takt procesora. I tu bez obrazy widać jak kiepskie masz pojęcie o programowaniu.. Da się to i wieke innych cięższych rzeczy! Generalnie jeżeli realizujesz opóźnienia na timerach to co kogo interesuje...
Jeśli program musi używać delay w tej postaci, to jest źle zaprojektowany. Skoro chodzi o zwykłe miganie diodą, to o wiele lepszy pomysł jest taki : http://msys-mv.blogspot.com/2010/11/conf... Przy zastosowaniu timer'a mikrokontroler: - jest w stanie zapewnić o wiele dokładniejsze odmierzanie czasu. - może wykonywać...
Za mało informacji. Ale zapewne chodzi ci o częstotliwość odświeżania. Ludzkie oko nie zauważa migania o częstotliwości większej niż 25Hz. Dla lepszego efektu śmiało można przyjąć 50Hz. A jeśli chodzi ci o to ile trwa opóźnienie w tym przykładzie przeanalizuj kod. ! listing zawiera funkcje opóźniania, przeczytaj komentarz a sam dojdziesz co i jak.
Uruchomiłem (z diodami :]) ale problem podstawowy to drgania styków po prostu jak wcisne raz np. 5 to mam cały wyświetlacz w piątkach. Czytałem że można zrobić opóźnienie i jeszcze raz sprawdzić. Faktycznie asembler obługuje rozkaz CALL i mogę go używać w RIDE-7 tam zanalazłem że jest MA51 assembler chociaż M to może oznacza że to makroasembler. ale...
Jakie zagadnienie realizujesz, że tak stawiasz temat ? To taki hobby project. Tworzę go już z przerwami od dłuższego czasu. Generalnie chodzi o sprzętowy symulator układów/modułów. Chodzi o to, aby reakcje systemu były jak najszybsze, ale i aby były z tym samym, a przede wszystkim znanymi opóźnieniem, co pozwala np. układowi dostosować się do różnych...
W końcu się ogarnąłem i poszedłem tam, gdzie kupiłem makietę. Na miejscu koleś wgrał mi bootloadera na tą drugą Atmegę, a pierwszą Atmęgę (ta przez którą jest ten temat) wziął do serwisu :D Miał dziwną minę, kiedy próbował coś tam wgrać. Jutro mam się po nią zgłosić. Udało się trochę zaoszczędzić na programatorze. Jeśli chodzi o programy, to po wgraniu...
Witam, Mam za zadanie wykonać dwuprzyciskowy stoper, w którym 1 przycisk na porcie P5.1 odpowiada za start i stop/pauza, natomiast 2 przycisk na porcie P5.0 za reset. Problem tyczy się pierwszego przycisku, mianowicie przy wystartowaniu stopera i chęci zastopowania wciśnięty przycisk nie zawsze reaguje (tzn czasami reaguje za 1, za 3 lub innym razem)....
2 Przeanalizować skompilowany kod assemblerowy. assembler MSP jest chyba jednym z najprostszych ktore istnieja - analiza tego co tam kompilator naprodukowal jest bardzo prosta. pozatym wystarczy uzyc symulatora wbudowanego w kazde sensowne srodowisko, aby zmierzyc ilosc cykli poswiecanych na ta instrukcje. 4\/3!!
Wiem, że to Wam się nie spodoba, ale nie chciało mi się przedzierać przez te wszystkie rejestry, w dodatku dość nieintuicyjne ułożone. Kod jest w oparciu o SPL, opóźnienie jest. [syntax=c] void lcd_fmc_init(void) { FMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure; // enable FMC clock RCC...
Witam! Dostałem za zadanie wrzucenia na cztery multipleksowane wyświetlacze siedmiosegmentowe napisu "8051". Niestety prowadzący cały czas nie chce zaliczyć laborki z powodu tego, że według niego wyświetlacze powinny się palić mocniej (po odpaleniu mojego programu wyświetlacze nie palą się tak mocno, jak reszta diod, co jest chyba logiczne z uwagi na...
Witam, mam problem, gdyż muszę napisać program który zamieszczam w tym obrazku: http://img91.imageshack.us/img91/9649/ds... dodatkowymi informacjami są: port wyjścia to P1, realizowany jest on na 8 diodach. Wejściem są 2 przyciski, INT0 i INT1 czyli przerwania zewnętrzne. Opóźnienie ma być zrealizowane na Delayu takim jak na zamieszczonym...
Z tym opóźnieniem to kolega ma rację. Przy moim zegarze nie da się dać większego opóźnienia jak ~262 ms. Wracając do tematu to w miejscach gdzie jest opóźnienie 1 us zrobiłem wstawki z assemblera, zmieniłem wszystkie sporne opóźnienia i nadal jest to samo. Nie ma jednego bajtu z wartością temperatury:(. Normalnie to jest masakra z tym moim czujnikiem....
Dobrym rozwiązaniem opóźnienia jest assemblerowa instrukcja NOP . Znając prędkość zegara można ustalić ile trwa jeden cykl uC, a wykonanie NOP 'a zajmuje właśnie jeden cykl. A potem Portx.y = Byte.z , ale to tylko wtedy gdy nie wysyłamy całego bajtu, albo jego bity w zmienionej kolejności. W komendzie Shiftout też można ustawić opóźnienie. Waitms podobno...
lepiej: [syntax=asm] START: setb p1.7 mov r7,#X djzn r7,$ clr p1.7 mov r7,#X djnz r7,$ sjmp START [/syntax] Opóźnienie 1+1+2*x Swoją drogę C jest bardzo dobrym językiem ale nie na 51 niestety. Architektura nie jest zoptymalizowana pod kątem programowania w C.[/code]
Witam, właśnie pragnę podłączyć dwa czujniki do szyny 1-wire, problem w tym, że przy sekwencji odczytu 64bitowego romu, nie zgadza mi się CRC (jeden czujnik podłączony) i po zaadresowaniu go na szynie, nic się nie dzieje, odbieram same jedynki. przy odbiorze scratchpada crc oczywiście poprawne i wszystko biega... menu: in R16, SREG push R16 rcall...
dlaczego nazwa rejestrów do których ją wpisuje to OCR1AL a nie OCIE1AL? i OCR1AL zamiast OCIE1AH? Myślę, że powinieneś poczytać i drugie za co odpowiada ta wartość w rejestrze OCIE1A? to jest ustawianie tego preskalera? Nie. Ustawienie preskalera to bity CS2:CS1:CS0 w rejestrze TCCR1B. Ich wartość należy ustawić w zależności od potrzeb zgodnie z tabelką...
Trochę zaofftopikuję: kod w C a zwłaszcza w C++, którego zazwyczaj używa się na PC, jest zupełnie inny niż niż kod dla uC, zwłaszcza, jeśli autor kodu na PC nigdy nie posługiwał się Assemblerem. Na PC są gotowe wygodne polecenia do operowania na plikach, obsługi konsoli (ekran, klawiatura), nie trzeba się też martwić o każdy bajt pamięci. Ponadto w...
Opóźnienia najlepiej realizować w postaci wstawek assemblerowych, bo wtedy możesz doliczyć się ile dana pętla pożera cykli. W C tego dokładnie nie zrobisz. Możesz sobie napisać funkcję, która będzie wykonywać pętlę for albo while wykonywała określoną ilość razy, ale jedynie metodą prób i błędów można dojść jakie faktycznie opóźnienie wykonuje. Możesz...
stan zajętości BF jest sprawdzany oczywiście w pętli, i występują tam jak powinny dwa cykle wysterowania E do 1 a potem do 0. Wstawione tam są dobre opóźnienia (po 2-3 nop'y). Oczywiście dopiero po wyjściu z pętli, gdy BF już = 0 następuje ta zmiana kierunku dla pinów sterujących D7-D4 wyświetlacza. ale też już myślałem o tym nie nadążaniu wyświetlacza...
Widze dyskusja przechodzi z okolic elektroniki, do rdzennego oprogramowania i z powrotem. Podejście graficzne ma o wiele większe szanse w modelu "wybór z ...", i tu elektronika/automatyka/PLC/whatever jest pozytywnym przykładem, tak czy inaczej to wybór z pewnej puli elementów. Było by strasznie trudne w modelu budowania zupełnie nowej, nie istniejącej...
Właśnie jeszcze nie ogarniam przerwań - domyślam się o co chodzi ale jak się za to zabrać? Bo jak próbowałem zrobić "warunkami" to zdarzało się tak, że gdy raz nacisnąłem jeden klawisz np. "1" to na wszystkich segmentach pojawiało mi się 1 - domyślałem się, że pętla tak szybko za działa, że to moje jedno klikniecie odebrała jako 4 kliknięcia - wtedy...
No właśnie przerobiłem układ żeby móc kontrolować RW. W kodzie który podałem jest jeszcze błąd - zamiast "while(LCD_ReadStatus()&0x80);" powinienem dać "while(LCD_ReadStatus()&0x01);" - bo port DB7 mam podłączony do PA0. Ale to też nic nie pomogło. Powstawiałem opóźnienia na 200ms wszędzie gdzie się tylko dało i nadal nic. Wrzuciłem ostatni kod na [url=http://www.henry.vel.pl/temp/ATMega...
Witam, zaczynam przygodę z assemblerem wcześniej pisałem programy w języku C i szło mi 100x sprawniej...Chciałem na początek napisać programik który migałby diodę LED. Jednak nie działa procedura opóźnienia. Zapętla się w nieskończoność w miejscu DELAY_LOOP3: NOP NOP NOP DEC R18 BRNE DELAY_LOOP3 cały program wygląda tak: .include "m32def.inc"...
Witam Czy ktoś może miał styczność z tym mikrokontrolerem? Na drugim roku studiów zaczynamy z mikrokontrolerami co mnie bardzo interesuje, ale wykładowca przedstawił PicoBlaze, który ma bardzo małe zasoby i podobno można go programować jedynie w jego własnym języku assembler. Na razie tak patrzę sobie na symilatorze do pobrania ze strony http://www.mediatronix.com/pages/pBlazID...
Czasy się zgadzaja bo sprawdzalem w symulatorze avr studio. Jak to sprawdzasz ? Mi nigdy się nie udało w symulatorze AVRSimulator (AVRStudio) zasymulować czasu rzeczywistego, a AT90S2313 nie ma DebugWire, ani JTAG. Do generowania opóźnień proponuję użyć przerwania Timer0 Overflow , tak skonfigurowanego, aby było zależne od stałej Xtal, która definujesz...
Witam wszystkich. I dziękuje za poświęcony czas:] Jestem twórcą w/w aplikacji. Wielki Szacunek dla m4jkel'a któremu chciało się przeanalizować kod mojego programu. Całość została napisana w języku Assembler (który uwielbiam) przy użyciu kompilatora Fasm. Poniżej opiszę w jaki sposób nastąpiła infekcja komputerów. Na życzenie jestem w stanie udostępnić...
prosto wysyłasz na na port outp 1 opóźnienie outp 0 i tak w kółko powinno być outp 1 opóźnienie outp 0 opóźnienie Po drugie, nie jestem przekonany czy Twoje VB(nie wiemy co to za wersja) wysteruje port - chyba nie ma operacji na porcie. Ja musiałem używać wstawek assemblerowych ale to było wieki temu. Poczytaj na TECHNET Microsoftu http://support.microsoft.com/kb/823179.....
Podstawowy kod do generacji krótkich przerw: ;------------------------------------- ; opoznienie 15µs - zegar 4MHz movlw0x04; 1 DEL03 * 3 + 3 = 15us movwfDEL03; 1 WAIT_TFB decfszDEL03,F; 1(2) gotoWAIT_TFB; 2 ;-------------------------------------- Do długich odcinków czasu lepiej użyć timerów, ale w assemblerze to nie jedna czy dwie komendy....
https://obrazki.elektroda.pl/4689387300_... Jak niedawno zapowiadałem, prace nad projektem efektora do miksera Behringer DJX700 praktycznie zostały zakończone. Na chwilę obecną mam działający układ wraz z devboardem i ukończone programy efektów. Ale po kolei. O samym procesorze FV-1 możecie poczytać w innych moich tematach; konkretnie...
To nie jest element języka C. Język C nie oferuje żadnych funkcji odmierzających czas. Ogólnie sam C się do tego kiepsko nadaje. Trzeba zejść do "sprzętu". Metody są 2. Odliczanie ticków - kiepska metoda, mało dokładna oraz raczej koniecznie trzeba wykorzystać assembler, albo policzyć ile tików trwają operacje które kompilator wypluje (czyli itak assmeblera...
Czy próbowałeś zbliżyć się do maksymalnej możliwej szybkości komunikacji z wyświetlaczem OLED, czyli 400 kHz? Nie, ponieważ moje procedury działają tylko na 100 kHz. Żeby zmienić ich częstotliwość działania, trzeba by je napisać od nowa z uwzględnieniem krótszych opóźnień. Wtedy na pewno nie zadziałają przy niższych częstotliwościach pracy mikrokontrolera...
A zmieniałeś Fusebit'y? Jeżeli nie to układ korzysta z wewnętrznego oscylatora 1MHz. Pozdrawiam Coś czuję , że jeszcze o tym Fusebit muszę poczytać. Bo chyba nic nie zmieniałem. Ale na razie mój projekt ogranicza się do części elektroniki, natopmaist program będzie powstawał w międzyczasie robienia i gromadzenia części. No i nauki tego wszystkiego...
Dodałem przed tym warunkiem funkcję, która wprowadza opóźnienie i w zależności jakie to opóźnienie jest program sie wykrzacza lub nie. Czyli w zależności od częstości sprawdzania warunku program działa lub nie. Całość w C: [syntax=c] /***************************************... /* I N C L U D...
dzięki za pomoc , zrobiłem to tak : Slijbajt: Wartosc = Portc Kierunek = Ddrc For Razy = 7 To 0 Step -1 Wartosc.5 = 0 Kierunek.5 = 1 Wartosc.4 = Bajt.razy Kierunek.4 = Not Bajt.razy Portc = Wartosc Ddrc = Kierunek Waitus 7 Ddrc.5 = 0 Portc.5 = 1 Waitus 1 Next Razy Waitus 6 Ddrc.5 = 0 : Portc.5 = 1 Waitus 5 Ddrc.4 = 0 : Portc.4 = 1 Return...
No właśnie może Wam się to wydać głupie, ale kumam assemblera nawet trochę ale pętle to moja zgroza :( Nie mówie że jestem specem ale swoje wiem. A w jaki sposób można wydłużać i skracać ten czas? I czemu zeruję rejestr np. R2?
A po co w ogóle komu mikrokontroler w tosterze albo mikserze, choćby z firmware napisanym w assemblerze? Po co w tych urządzeniach jakakolwiek elektronika cyfrowa? Rozumiem, że to pytanie retoryczne w czasach, gdy nie gdzie indziej jak na tym forum niemal każde rozwiązanie wymagające użycia więcej niż jednego układu sprowadzane jest do rady "użyj uC"....
dzięki za informacje, pewnie później się przyda, ale nie to jest narazie problemem, ujmę to inaczej: ;--- funkcja tworzaca czerwona ramke -------------------------------- ramka PROC STDCALL szer:DWORD, wys:DWORD, wspXY:COORD ;--- ustawianie koloru czcionki--- INVOKE SetConsoleTextAttribute, hout, kolor_R ;--- ustawienie kursora ----------...
Po wpisaniu jakiejś wartości do DDRx lub PORTx stan PINx zmieni się dopiero z opóźnieniem jednej instrukcji. Jest to spowodowane synchronizatorem IO w AVR. Czyli między ustawianiem np. PORTA i odczytywaniem PINA musi pojawić się jakaś instrukcja. Zazwyczaj stosuje się assemblerowy NOP, bo on nic nie robi, ale trwa jeden cykl rozkazowy. Polecam książkę...
: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...
Tak, kupiłem sobie mądra książkę w której są opisane m.in. układy dekodujące RC5 (czy dobrze mi się obiło o uszy że układy te sa juz nieprodukowane - dokładniej chodzi mi o SAA3049). Ale uznałem że wolę to wszytko oprzeć o procesor. Tym bardziej że program, bez problemu (mam nadzieje, bo o ile w assemblerze 80x86 programowałem, o tyle asseblera AVR-ów...
(at)szelus "Mógłbyś podsłuchiwać własną transmisję... " Mogę, tyle że oscyloskopem bez pamięci, który w dodatku śmieci na linii... :-( Jak dla mnie nadawał się tylko do testowania ogólnego stanu linii (przydźwięk i czy coś leci, jak to wygląda - stabilnie czy nie, i tylko przy ciągłym wysyłaniu tego samego znaku przez ATMEGĘ, np. 0xFF, 0xAA, 0x55 i...
Napisałem coś takiego ASSEMBLER ;klawiatura KEY_START EQU P1.1 KEY_UP EQU P1.2 TX EQU 031H; ZMIANNA DLA TIMERA WY1 EQU P2.2 ;Wyjście generatora ;TIMERY T0_G EQU 0 T0_C EQU 0 T0_M EQU 1 TIM0 EQU T0_M+T0_C*4+T0_G*8 T1_G EQU 0 T1_C EQU 0 T1_M EQU 0 TIM1 EQU T1_M+T1_C*4+T1_G*8 TMOD_SET EQU TIM0+TIM1*16 THO_SET EQU 256-180 TLO_SET EQU 0 ;***************************************...
Skonsultowałem z kolegami z grupy kilka rzeczy i dowiedziałem się że mogę tą sygnalizacje oprzeć na dowolnym układzie i dowolnym języku ( tylko na kartce w sprawozdaniu ma to być napisane w assemblerze. Tak więc odpaliłem bascoma i zacząłem pisać. Ale bardzo bym był wdzięczny gdyby mi ktoś powiedział jak zrobić opóźnienie takie żeby np po zmianie z...
Witam, Mam problem z początkiem nauki programowania mikrokontrolerów. Zakupiłem na Allegro programator USBasp oraz podstawkę do programowania. Taki jak w linku: <ciach> Na USBasp ustawiłem przycisk na 1-ON, 2-ON, 3-OFF. Sterowniki zainstalowałem libusb_0.1.12.1. Dodatkowo zainstalowałem WinAVR do pierwszego programowania. Następnie utworzyłem...
Jaki program pod linuxa,xp,7 64 bit do pisania w asm a potem uzyskanie i hex. Pod Windows znam dwa kompilatory: 1) MetaLink 8051 Assembler - występuje pod nazwą ASM51.EXE - do ściągnięcia z miliona miejsc 2) ASXXXX - zestaw kompilatorów dla paru asemblerów, nas interesuje ASX8051.EXE. Występuje np. jako element kompilatora SDCC. Oba działają z linii...
Cała sztuczka ze zleceniem przeliczenia wszystkiego jest w tym macro adcV() a reszta to przygotowanie do tego numeru ;) Nadmiarowo nawiasy tam są i rzutowania typów, bo lepiej widoczne. jak widać tylko dzielenia i mnożenia przez wielokrotność 2 robię później, bo to jest jako przesunięcia bitów realizowane na tych RISC owych AVRach. To są małe potwory,...
delayX to procedury opóźniające w przerwaniu akurat ma służyć odczekaniu do wygaśnięcia drgań styków przycisku. Według sugestii zamieszczam program bez definicji rejestrów i trybu SPECIAL, żeby nie zaciemniać, a to akurat nie ma wpływu na działanie. .CSEG ; początek segmentu programu .ORG 0x00 ; wektor przerwania od resetu rjmp Reset .ORG 0x04 ; wektor...
Dlaczego albo jedno albo drugie? I jedno i drugie, zarówno sonda reaguje z opóźnieniem na zmianę składu mieszanki przez ECU jak i ECU z opóźnieniem reaguje na zmianę stanu sondy (choć opóźnienie reakcji ECU na zmianę stanu sondy jest pomijanie małe w stosunku to opóźnienia reakcji sondy na zmianę składu mieszanki), stąd duża bezwładność całego układu...
Zacznijmy od tego, ze za pomoca for w C nie da sie uzyskac dokladnego odliczania czasu! Przeciez w zaleznosci od optymalizacji (-O) i wersji kompilatora roznice beda siegaly tysiecy procent. Raz bedziesz mial 10Hz, a innym razem 0,01 Hz. Jesli chcesz w miare dokladnie odmierzac czas to albo korzystasz z funkcji z delay.h, albo piszesz wstawke w assemblerze...
Co znaczy nie działa? Tego typu trywialne kody należy symulować z intensywnym wykorzystaniem okna podglądu assemblera - kompilator tak optymalizuje kod, że z oryginalnego niewiele zostaje i podgląd w C może być mylący. Często objawia się to tym, że pozornie nic się nie dzieje. Pamiętaj, że symulator nie działa tak szybko jak prawdziwy CPU - opóźnienie...
Z pewnym opóźnieniem z powodu małej awarii, ale oto przykład: [syntax=c] #include <avr/io.h> inline void write_data(uint16_t data) { PORTE_OUT=data>>8; PORTF_OUT=data; } int main() { write_data(0xffaa); } [/syntax] I wygenerowany kod: [syntax=asm] 00000218 <main>: #include <avr/io.h> inline void write_data(uint16_t data) { PORTE_OUT=data>>8;...
http://obrazki.elektroda.pl/3751212700_1... Układ jest dedykowany na ATtiny2313, ja przy okazji zagospodarowałem ostatni AT90S2313, jaki miałem i popełniłem miernik pojemności na nim. Krótki opis jak to działa: Miernik mierzy pojemność dołączonego kondensatora ładując go stałym prądem z lustra prądowego Q1, Q2 (2x BC557), które dodatkowo...
http://obrazki.elektroda.pl/1998348900_1... Witam, chciałbym wszystkim przedstawić projekt sterownika matrycowego wyświetlacza LED. Na początek proszę tylko o nie ocenianie wykonania płytki (na płytce uniwersalnej/pająk) bo jestem świadomy jak ona wygląda i jak ją wykonałem. Historia Pomysł projektu narodził się, gdy jakieś pół roku...
Witam Piszę swój pierwszy program na AT90S2313. Program ma za zadanie obsługiwać LCD. Problem się jednak pojawił na początku. Jeśli opóźnienie zostanie wywołane jako procedura: void czekaj(void) { _delay_ms(10); } zostaje ona całkowicie zignorowana: * my_idea.c, line 35: warning: statement with no effect Natomiast,...
Witam zaczynam zabawę z AVR GCC w AVR Studio 5. Wcześniej programowałem trochę w assemblerze i w C dla procesorów PIC. Zdecydowałem pobawić się trochę AVR Studio 5 bo ma wbudowany kompilator. Napisałem/zmodyfikowałem program z jakiegoś tutoriala online. Program ma na celu zapalać i gasić diodę na linii 0 portu B co określony czas. LED jest podłączony...
Witam Chciałbym, żeby mój program na makiecie powodował, że po wciśnięciu przycisku na porcie A (bit 6) na porcie B do którego podłączone są diody wysyłany był zadany stan 8 diod. I to mi się udało zrobić. To jest bez pętli. Naciskam guzik i świecą diody, puszczam i gasną. W tym samym programie chciałbym, żeby po wciśnięciu przycisku na porcie A (bit...
LED EQU P1.7 - przypisanie do zmiennej LED do P1.7 LJMP START - skocz do początku programu (etykiety) ORG 100H - rozpocznij kompilacje od adresu 100 START: - początek programu (etykieta) LOOP: - początek pętli (etykieta) CPL LED - P1.7 zmiana stanu na przeciwny MOV A,#10 -przesuń do rejestru A liczbę 10 (potrzebne do procedury opóźnienia) LCALL DELAY_100MS...
I teraz pytanie z tym związane. Ilość nopów dobrałem "doświadczalnie". W jaki sposób powinno się wykonać takie opóźnienie żeby było elegancko? Jak długo czekać? Gdzie przeczytać ile może trwać takie "stabilizowanie się portu"? Przy okazji natykam się na coraz to nowsze zagadki... Np. dlaczego poniższy kod nie zapala żadnej diody? Jeśli piszesz w językach...
https://obrazki.elektroda.pl/6352676000_... Witajcie. Kilka dni temu otrzymałem paczke, a w niej zamówiony zestaw ewaluacyjny procesora FXCore firmy Experimental Noize. Jest to firma należąca do Franka Thompsona, jednego ze współautorów procesora FV-1, a więc można uznać, że FXCore jest jego następcą ( FV-1, nie Franka :D ) FXCore...
No niby stosuje się już do wszelkich porad i dalej mi to nie działa. Timing dla danego rezonatora obliczam sobie tak: ( Dany timing / (25.175MHz) ) * aktualna częstotliwość mam na stanie tylko 8Mhz więc z obliczeń wychodzi mi tak (640/25.175)*8 = 204 cykle procesora. obliczyłem sobie jak to się ma w moim przypadku stosując się to tych tabelek: http://obrazki.elektroda.pl/7756233400_1...
Gdzieś przeczytałem, że jeśli LPC 1114 jest taktowany 48 MHz, chcąc zrobić opóźnienie 1 us muszę wykonać w pętli 32 nop'y, a dla 12 MHz 8 * nop. Przestań więc czytać takie głupie źródła (; Jak chcesz zrobić opóźnienie 1us to musisz sobie ustawić timer i odliczyć 1us. Każdy inny sposób jest do niczego i co najwyżej będzie przybliżony. Kolejna sprawa...
instrukcja SEI na początku ISR, avr-libc to załatwia Dla ścisłości, powinieneś użyć: ISR(XXX_vect, ISR_NOBLOCK) { ... } bo wpisanie na początku obsługi przerwania sei(); to nie to samo. Wtedy przerwania zostają włączone dopiero po prologu, czyli np. po odłożeniu na stos używanych rejestrów - to wprowadza pewne opóźnienie. Wiem - to...
Zakładam, że jest "popyt" ( (at)nolens_volens , (at)korteksik , (at)dondu , (at)excray ), więc zakładam wątek. W tym temacie można zadać dowolne pytanie związane mniej lub bardziej z użyciem RTOSów na mikrokontrolerach i kwestiami takimi jak wielowątkowość, synchronizacja i tym podobne. Ogólne lub szczególne. O konkretnym problemie lub o ogólnej idei....
Zaraz zaraz koledzy... nikt nie mowil tutaj o jakims dokladnym odliczaniu czasu... bylo to powiedziane orientacyjnie, nawet niech ten while pojdzie w dwoch instrukcjach assemblera (odejmowanie i skok) to zrobi sie z tego 2*15MHz czyli 30MHz a nie 168MHz... a zaloze sie że 32bitowy ARM ogarnie to w jednym takcie i skoku z uzyciem odejmowania jako jednego...
Hehe czyli rozmywałeś widmo losową zmianą f nośnej;] W STM32F1 już nie pamiętam ale raczej wychodziło mniej niż 1us w każdym bądź razie wykonałem taki sam test jak Twój na F4 i wyszło ok 270ns. W sumie do tego testu lepiej by wywołać przerwanie od wciśnięcia przycisku i w tedy w funkcji obsługi przerwania zmienić stan jakiegoś wyprowadzenia, i zmierzyć...
Witajcie. Nadeszły wakacje, nadeszła i nuda. I to jaka, aż wstyd przyznać mi się, że wziąłem się za obsługę kineskopu cz/b 5,5". No cóż, w wieku 22 lat powinno się obsługiwać dziewczynę a nie kineskop, no ale zdarza się i tak :-) Generalnie nie za bardzo jest sens przytaczać kod programu czy schemat. Ogólnie synchronizuje się na przerwaniach z impulsem...
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...
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ć...
https://obrazki.elektroda.pl/6687159300_... Każdy, kto rozważa przesiadkę z ośmiobitowego mikrokontrolera na coś mocniejszego i o większych możliwościach naraża się na pewien problem, który łatwo przegapić, bo przy ośmiu bitach pojawia się sporadycznie. Ale pomnóżmy liczbę bitów przez dwa, cztery, albo i osiem, i zaczynają się schody....
http://obrazki.elektroda.pl/8660171200_1... Celem projektu było zbudowanie odtwarzacza MP3/WAV, używając jedynie układu FPGA, pamięci RAM i przetwornika stereo DAC. Układ wykorzystuje 32-bitowe jądro procesora programowego pracujące przy taktowaniu poniżej 60MHz, które odpowiada za dekodowanie MP3 bez wsparcia sprzętowego - poza wykorzystaniem...
Witam! Już jest wszystko dobrze i program działa bez zarzutu."przekaźnik klapie" mówi sie nieraz jak łączy i zaraz rozłącza.Swoją drogą nie o klapanie chodziło ale o powody -czemu nie przyjmuje określonego w programie stanu.Okazało się ,że przedobrzyłem.Niepotrzebne było robienie "skoku" instrukcją Gosub.Poprostu wystarczyło okreslić warunek.A swoją...
assembler darmowy assembler assembler tablicy assembler przerwania
moduł akcelerometru podłączenie bascom input bajty czujnik temperatury pamięć
manta opinie pralka samsung ecobubble
Zielone tło w lewym górnym rogu monitora podczas czarnego tła Słabsze ciśnienie w myjce Karcher - przyczyny