To wszystko prawda, aczkolwiek wydaje mi się, że różnie to widzą różne kompilatory. Ofszem Acc jest nazwą rejestru SFR i można ją używać jak każdej innej zmiennej czyli w rozkazach z adresowaniem bezpośrednim (direct). Oczywiście jeśli to możliwe to lepiej jest korzystać z rozkazów wykonywanych na akumulatorze. Ale czy każdy kompilator zrozumie inc...
Wyprowadzając clk z portc można zyskać 1 cykl ( 15 cykli zamiast 16) przy okazji nie wyprowadzając zbędnej części bajtu na pozostałe piny. ld r17.50 lot: ld r16, x+ mov r18, r16 andi r16, 0x0F out PORTC, r16 ori r16, _BV(clk) out PORTC, r16 swap r18 andi r18, 0x0F out PORTC, r18 ori r18, _BV(clk) out PORTC, r18 dec r17 brne lot andi...
https://obrazki.elektroda.pl/3928983600_... Opiszę naprawę dość rzadkiej konsoli, polegającą na odtworzeniu schematu pierwowzoru, zaprojektowaniu i wykonaniu płyty głównej i dalszych krokach niezbędnych do przywrócenia jej życia i funkcjonalności, w których zastosowałem swoją nowatorską metodę. Będzie więc coś dla miłośników retro,...
Lutowanie BGA (a stosowne ARMy chyba tylko w takich są obudowach) Dementuję takie pogłoski. Przykładowa płytka STM32F429-DISCO. Ma prawdopodobnie wszystko co potrzebuje autor tego tematu, kosztuje śmieszne pieniądze. Na pokładzie 64Mbit SDRAM, więc wystarczy na wiele ekranów. Alpha blending + overlay (obraz statyczny + dynamiczny) robi sprzętowo. Sercem...
https://obrazki.elektroda.pl/5680051600_... W tym artykule opiszę powód wymyślenia oraz konstrukcję testera do kart pamięci microSD który posłuży to sprawdzenia pewnej ciekawej własności kart. Przyczyna powstania Karty MMC/SD/microSD oprócz swoich naturalnych zastosowań są też lubiane przez miłośników mikrokontrolerów z kilku powodów:...
(...) (*(char **)(param_1 + 4), "rb"); if (pFVar1 == (FILE *)0x0) { lVar3 = 0; } else { fseek(pFVar1,0,2); lVar3 = ftell(pFVar1); fclose(pFVar1); } printf("nowy rozmiar %d\r\n",lVar3); } (at)__security_check_cookie(at)4(local_4 ^ (uint)&pFStack_28); return; } Wstępna ocena dostępnych informacji Pytanie dotyczy wielu kwestii: 1. Potencjalne wady...
Opis problemu wskazuje na to, że powinieneś w Startup Config ustawić początkowe wartości kanałów na -1, tj. na "remember last state". Dzięki temu moduł będzie pamiętać poprzedni stan i będzie poprawnie raportować zmiany. Nie martw się o zużycie pamięci flash, system zapisu zmiennych optymalizuje cykle erase flash (zapisuje w blokach po 64 bajty a dopiero...
Cykle 1, 2 oraz 3 nie mogą miec takiego samego A0 bo kodyu tych rozkazów leżą one obok siebie w pamięci. Zatem A0 nie będzie stały przez 7 cykli. Popraw się. Wstępna ocena dostępnych informacji Użytkownik zwrócił uwagę na błąd w poprzedniej odpowiedzi dotyczący maksymalnej liczby cykli, podczas których procesor 6502 może nie zmieniać stanu linii adresowej...
https://obrazki.elektroda.pl/2227184700_... Dzisiaj uruchamiamy moduł MCP9808, czyli cyfrowy termometr działający w zakresie od -40°C do 125°C przy typowej dokładności 0,25°C, zasilany napięciem od 2.7V do 5.5V. Najpierw zaimplementujemy jego sterownik w oparciu o gotowe funkcje dla komunikacji I2C by móc odczytywać z niego pomiary...
http://obrazki.elektroda.pl/5313552500_1... Sterownik włącza/wyłącza do 8 urządzeń grzewczych i chłodniczych. Stan wyjść zależy od: temperatury mierzonej w dowolnej liczbie punktów, wewnętrznego zegara czasu rzeczywistego, programu grzania i chłodzenia przechowywanego w pamięci EEPROM. Architektura sterownika Sterownik jest oparty na...
Zgłosiłeś słuszną uwagę, ale nasz system pamięci flash jest bardzo elastyczny, jeśli chodzi o zapisywanie stanu. Wykonujemy wiele zapisów flash na jeden cykl kasowania, dzięki systemowi zaprojektowanemu przez współtwórcę. W obecnym stanie rzeczy, o ile się nie mylę, rozmiar sektora wynosi 4096 bajtów, a my zapisujemy 64 bajty (lub mniej więcej?) Na...
Po znalezieniu kolejnych błędów czas na coś nowego - a czasami są one tak ciekawe, że znajduje je tylko przez przypadek, jak np. to, że sprawdzając czy liczba 32 bitowa jest równa zero sprawdzałem tylko jej najmłodszy bajt - chyba z lenistwa. Tą liczbą był numer klastra pliku w FAT32 - wszystko działało dobrze, ale przy jednej piosence się sypało, a...
(at)helmud7543 Znalazłem SMART, a jednak zrobiłem, to jest zrzut przed tym zanim zabrałem się do zerowania dysku, chyba zrobiłem bo martwiły mnie parametry 197 i 199, ale tak jak mówiłem nie było żadnego reallocated sector. https://obrazki.elektroda.pl/5404439400_... Aktualizacja sytuacji dla zainteresowanych. Dysk nadal testowałem...
Musisz policzyć wszystkie cykle rozkazów, zanim ustawisz TL0 (samo ustawianie też trwa 2 cykle). Natomiast jeśli wyliczona wartość TL0 odpowiadająca Twojemu zadanemu okresowi przerwań kończy się na zero (X0h), mozesz podczas wykonywania przerwania "w locie" zmienic 4 najstarsze bajty (rozkazem ORL TL0, #X0h). Możesz również zastosować drugi tryb ustawienia...
Nie rozumiem o jaką pomyłkę Ci chodzi? Normalnie RCALL to 3 cykle a RET 4, sumarycznie 7. Tutaj masz RCALL 4 cykle a RET 5, więc masz 9 cykli. Przeglądając noty można natrafić na: atmega644, "5.8.1 Interrupt Response Time", drugi akapit wyraźnie mówi o tym, że PC ma trzy bajty (mimo że faktycznie górny bajt jest nieużywany, brak nawet rejestru EIND)...
uzylem 2X HYB514256B-70, co daje czas cyklu 130 ns. Mam trzy typy cyklu: zapis CPU=>RAM, odczyt RAM=>LCD, IDLE. Cykl zapisu zajmuje 3 cykle zegara, cykl odczytu zajmuje 5 cykli zegara, cykl IDLE zajmuje 3 cykle zegara. FSM realizuje schemat tak: r0l ) read ( 5 clock cycles ), r4h ) if write then goto w0l, else goto i0l; w0l ) perform write to RAM (...
Coś mi się zdaje że przywiesza się odczyt. Pewnie zmienia się sektor i procesor musi długo zajmować się szukaniem danych zanim odczyta ten jeden czy 16 bajtów. Przydał by się dłuższy bufor. Ale po takim czymś program powinien wracać do normalnej pracy więc jeżeli masz całkowitą przywiechę to nie gra coś jeszcze. Miałem już przypadek że przerwanie w...
Śmiem wątpić... Pętla kopiująca bajt po bajcie będzie w skrócie wyglądać tak: 1) weź bajt czternaście instrukcji . Nie można pominąć faktu, że instrukcje pobierające wartość (ldr,ldrb) i zapisujące wartość (str,strb) trwają po 2 cykle zegara, niezależnie od tego, czy pracują one na bajcie, czy na dwu-słowie . Przy pracy "bajtowej" 15x wykona się dwucyklowy...
Witam. Buduję pewien system zarządzany przez 2 odrębne mikrokontrolery. Jeden z nich to Arduino Uno R3, drugi specjalistyczny sterownik (nie wyposażony w port RS) realizujący cały program w pętli z czasem powtórzenia deklarowanym na starcie (domyślnie 20ms). Po zrealizowaniu pętli sterownik jest bezczynny do czasu upłynięcia czasu cyklu, czyli prędkość...
Proszę o pomoc w rozwiązaniu zadań niżej moje rozwiązania: 1. Na wejście 8-mio bitowego przetwornika ADC podawane jest napięcie wzrastające liniowo od zera do wartości 10V z szybkością wzrostu 1 V / minutę. Proszę przyjąć, że ADC „próbkuje” sygnał co minutę i podać wartości rejestru odczytu ADC (binarnie, lub szesnastkowo) w kolejnych 10...
Jasne ,że zdradzę ,bo nie mam nic do ukrycia . Myślałem,że problem tkwi w wiadomym miejscu :) Program jest przeze mnie modyfikowany,ponieważ na oryginalnych bibliotekach\źródłach książkowych i z forum nie działa mi z żadną kartą :/ [syntax=c] unsigned char SD_INIT(void) //Inicjalizacja karty SD { unsigned short timeout=4096; unsigned char status_R1=0;...
I z jaką prędkością "lecą" bajty po magistrali? W tej chwili maksymalna prędkość magistrali (z jaką prauje razem z obsługą rozkazów itd ) to 95 kB/s. Protokół nie zawiera żadnych zabezpieczeń antyzakłóceniowych. Wysłanie rozkazu wygląda tak: MOV P1,#DANA NOP NOP NOP NOP SETB P1.7 Dane są takie, że najstarszy bit jest zawsze "0" co powoduje wywołanie...
Przy UART mamy 3 bity na ramkę, a więc 260 kHz. Przy 16 MHz daje to 62 cykle procesora na przerwanie - wątpię, czy przy programowaniu w C ATmega ma szansę się wyrobić. Podwójny bufort UART tu nie pomoże, chyba, że w przerwaniu dorzucimy aktywne oczekiwanie, co wygląda śmiesznie, ale zmniejsza liczbę przerwań o połowę kosztem w tym przypadku dodatkowych...
Witam , mam nadzieję iż nie zanudziłem bez reszty.. W zestawieniu z moimi "dokonaniami asm." kolega michalko12, jest najbliższy temu co ja kiedyś robiłem . Oto wersja asm z przełącznikiem kompilacji aby kompilować jako samodzielny plik - kto chce ->ten może :D ( ta wersja to 16-timerów, 16-nasto bitowych, każdy cztery tryby konfiguracji, oczywiście...
O to napisany program w asembblerze dla '51. Niestety nie chce wyswietlać mi polskich znaków, czy procedura ładowania polskiego znaczka jest dobra, czy popełniłem gdzies błąd. Prosze o porady i wskazówki. lcd_rs equ p3.7 ;sygnal RS dla LCD lcd_dac equ p1 ;port danych LCD ;---------------------------------------... org 0h...
CLK w SPI może mieć dowolne czasy więc przerwy pomiędzy i w trakcie wysyłania bajtu są bez znaczenia, istotne są zbocza i stan linii danych w tych momentach. SPI jest dlatego praktyczne bo może być przerywana transmisja innymi zdarzeniami. To że nie wygląda to "ładnie" to nie ma znaczenia. 19 bitów być może można wysyłać sprzętowym SPI jako 24 bity...
Zmieniając typ na int w oryginalnym kodzie przenosisz 40 bajtów (20*2) na każdy po 4 cykle (2 wczytanie, 2 zapis) = 160 cykli. To jest minimalny czas, poniżej którego nie da się zejść. Jeśli memcpy działa szybciej, znaczy nie kopiuje wszystkich 40 bajtów (tylko 20 bajtów - jeśli nie zmieniasz trzeciego argumentu w wywołaniu funkcji), sam kod to wtedy...
Ok ,a czy nie da sie odrazu zapisac sprawdzania przycisku pomijajac zaladowanie stanu portu do akumulatora ?? np : sprawdz: // petla sprawdania przyciskow P0-P7 jnb P2.0,wys0 // jesli P2.0 jest 0 skok do wysw0 jnb P2.1,wys1 jnb P2.2,wys2 . . . itd (...) Można sprawdzać stan linii portu 2 w ten sposób, nie trzeba wykorzystywać akumulatora. mov acc,...
Ad 1. LD(IX+01),#23 - rozkaz 4-bajtowy: - 1 bajt - wartość DD (prefiks mówiący o tym że rozkaz dotyczy rejestru IX), - 2 bajt - wartość 36 (rodzaj operacji), - 3 bajt - wartość 01 (przesunięcie względem wartości z rejestru IX), - 4 bajt - wartość 23 (ta wartość będzie zapisana w komórce pamięci o adresie (IX+01). Rozkaz wykonywany jest w czasie 5 cykli...
1.Bajty i cykle (opis) rozkazu ORAA dla wszystkich trybów adresowania. 2.Różnica pomiędzy SWI a WAIT ( cykle) 3.Kiedy przy sekwencyjnej zmianie PC µC zapisuje na stos: a) 9 bajtów b) 1 bajt c) 0 bajtów Jeżeli ktoś wie proszę o odpowiedz.
polecnie mov "kopiuje" wartosć argumentu ad2 do komurki ad1 to polecnie zajmuje jeden cykl maszynowy i jeden bajt w pamięci programu xchd a, (at)ri powoduje wymianę bitów 0...3 z komurki której adres jest podany w ri, z bitami 0...3 które znajdują się w akumulatorze. bity 4...7 akumulatora i komurki o adresie ri pozostają bez zmian. Polecnie to też...
(at)markos80 Zoptymalizowałem jeszcze trochę kod bo wcześniej miałem wywołanie funkcji w innej funkcji, teraz operacje dla 100 bajtów wynoszą około 1-2ms cyklu. Z ciekawości dla 1000 bajtów 11 ms :D https://obrazki.elektroda.pl/7685138500_...
Ok, 20 IO cyfrowych to 20 bitów, czyli 3 bajty. 10 wejść analogowych 16-bitowych, to 20 bajtów. Tyle chcesz odczytać. Do tego narzut protokołu - bajt adresu, masz 4 urządzenia, to dodatkowo 4 bajty. A więc jeden cykl to co najmniej 27 bajtów do przesłania. Ponieważ korzystasz z UART, więc jeden transmitowany bajt to co najmniej 10 bitów, a więc masz...
Domyślnie Atmel Studio w czasie debugowania blokuje przerwania podczas śledzenia krok po kroku, co ma za zadanie ułatwić śledzenie funkcji. Dodatkowo przerwanie od USART wystąpi bardzo późno - dopiero po wysłaniu bajta, co może trwać nawet kilka tysięcy cykli CPU.
Taktowanie, które jest potrzebne dla uzyskania takiej przepustowości to 3200/8 MHz w przypadku pamięci SDR. W przypadku pamięci DDR będzie to 200 MHz (czyli 400 MT/s). Wątpię by zrozumiał co napisałeś... Chce uzyskać 3200MB na sekundę. W jednym cyklu przesyła 64 bity czyli 8 bajtów. Jeden cykl to 1Hz=1/s. 1MHz to milion cykli milion Hz. 400[MHz]*8[B]=3200[MHzB]=3200[MBHz]=3200...
Zastanów się, jeżeli zapisujesz bajt danych to aby móc korzystać z zapisanej danej musisz przejść procedurę programowania pamięci czyli wygenerować impuls zapisujący 2ms. Jeżeli robisz to za każdym razem po zapisie pojedynczego bajtu to bardzo szybko przekroczysz maksymalną liczbę zapisów, które producent podaje w karcie katalogowej. Wartość 10000 wcale...
Różni się tym, że ten drugi jest niepoprawny, bo liczba 0x221 to dwa bajty.
Dla niektórych 512 bajtów ilość cykli oczekiwania na busy była znikoma, ale średnio przy dużej paczce wyniosła 900 więc co z tego, 900 cykli przy zegarze 32MHz dla bloku 512 bajtów, to przepustowość: ( 32M / 900 ) * 512 = 18,2 Mbajtów/sek Nawet dodając 400 cykli, to 12,6 Mbajtów/sek Dobrze liczę? Natomiast karty HC zapisują najmniej 512 bajtów, więc...
Pomysł genialny. Zrobiłem coś podobnego na procesorze 6502. Pamięć masową można zrealizować na karcie pamięci SD. Aby procesor mógł się z nią komunikować, wystarczy zrobić kontroler pamięci na prostym układzie CPLD - ja wykorzystałem do tego Xilinx xc9572. Kontroler ten zrealizowałem w ten sposób, ze cykl zapisu bajtu X procesora pod pewien adres w...
Z drugiej jednak strony, gdyby poczytać datasheet do odpowiednika tego układu od Microchipa (25AA512), to tam jest już coś takiego: Ale to nie jest ścisły odpowiednik tej kości od STM. Jedynie funkcjonalny i to z pewnymi zastrzeżeniami. Kość Microchipa wyraźnie jest zrobiona w innej technologii (ukryty flash) o czym świadczy choćby dodane "w bonusie"...
W c64 turbo wykorzystywało fakt że w standardowej transmisji dane byly przesyłane paczkami a każda paczka była przesyłana dwa razy na wypadek że jeśli w pierwszej wystąpił błąd to istniała szansa że za drugim razem uda się dane odczytać poprawnie.Z racji tego że magnetofony commodore miały interfejs zgodny ze standardem TTL to błędy nie były częste...
cp R4, R0 cpc R5, R1 brlo IncR17x10p3 ;1000 jest mniejsze niż liczba X breq IncR17x10p3 ;1000 jest równe liczbie X ? Takie pobieżne szybkie spostrzeżenie - czy nie powinno być cp r0,r4 cpc r1,r5 brlo - liczba x jest mniejsza od 1000 Poza tym czemu brlo i breq skaczą w to samo miejsce? Dodano po 5 Poza tym taka czysto kosmetyczna uwaga. Zamiast: ldi...
Pamięć wewnętrzna 2KB - 1514B na ramkę, reszta na stos. Sekcję data, bss oraz opcjonalną stertę wyrzucić do zewnętrznego ramu, chociaż nie wiem na czym niby polega trudność w rzutowaniu wskaźnika - pamięć i wewnętrzna i zewnętrzna są dostępne w dokładnie ten sam sposób. Co do odczytywania przy odbiorze i składania przy nadawaniu można wykorzystać dwie...
W pierwszym przypadku w celu jak największej dokładności czasu opóźnienia jest wyliczana liczba przebiegów wewnętrznej pętli (która wykonuje się w 3 lub 4 cyklach, zależnie od tego, czy licznik może mieć 1 bajt, czy musi mieć 2 bajty) - te obliczenia są wykonywane na liczbach zmiennoprzecinkowych. Co do drugiego kodu, nie jest on funkcjonalnie taki...
'do liczby 1536 trzeba by jeszcze coś dolożyć, na wykonanie instrukcji Zasadniczo nie trzeba nic dokładać, bo wartość timera jest inkrementowana sprzętowo od razu (w kolejnym cyklu maszynowym). Czyli już w trakcie obsługi przerwania. Jeżeli obsługa timera zmieści się w 255 cyklach maszynowych, to zmieniany jest tylko młodszy bajt timera - czyli w procedurze...
Ostryas , mozesz do tego uzyc jednej kostki rejestru PISO. Moze to na przyklad byc 74HC165. Ma osiem wejsc rownoleglych i wyjscie szeregowe. Stan wejsc ladujesz do rejestru rownoleglego, a nastepnie przesowasz to co zapisales osiem razy do procesora, i masz bajt przeczytany. Jesli odpowiednio dobierzesz cykl przesowania, to i debouncing kontaktronow...
Przecież te obliczenia są bezsensowne... Mikrokontroler nie jest "zajęty" wysyłaniem poszczególnych bitów czy bajtów przez cały czas. Wchodzi do przerwania, wpisuje coś do rejestru, wychodzi, nudzi się dalej... W rzeczywistości wysłanie jedneg bajtu przez I2C to powiedzmy kilkadziesiąt cykli zegara. Z wejściem/wyjściem z przerwania, powiedzmy że może...
Nic z tego nie wyjdzie. Próbowałem coś w 6 taktach sklecić, zgrubne obliczenia są takie: - załadować dane z portów - 2 cykle - załadować licznik przesunięć - 1 cykl - wyczyścić rejest pomocniczy - 1 cykl - przesunąć w prawo o 2 bity dane, odpadające 2 bity przekopiować do nowego rejestru - 6 cykli (!) - wystawić na port - 1 cykl (przy założeniu, że...
Nie zrozumiałem,że chcesz powiedzieć ,że twój zegarek nie wyświetla sekund :) tylko pullujesz zegarek DS 3 razy na minutę ,żeby nie przegapić zmiany minuty :) Żartuję oczywiście :) metoda dobra jak każda :) Podeślij kawałek kodu obsługi i2c może znajdziemy babola. Podejrzewam, że układ DS podobnie jak niektóre PCF-y[phlipsa] blokuje stan zliczania czasu...
Karol, miałem Ci napisać :P przez komunikator.. :D ale pisze tu.. może się przydać komuś :) pierwsze co to podam Ci pętle na 1us :) przy 16MHz w kodzie ASM $asm ldi R21, 0 delay_1us: inc R21 cpi R21, 4 brlo delay_1us $end asm lub pisany kod z głowy :P ale jeszcze do udoskonalenia... :P całego przerwania na podstawie ostatniego Twojego skrawka kodu......
Z początku wydawało mi się trochę nadmiarowe patrząc po cyklach CPU wskakując w przerwanie co przesłany bajt, dlatego wolałem sprawdzać czy już się wysłało w pętli Jeśli będziesz wysyłał dane odpowiednio szybko, to przerwanie od TC będzie tylko jedno - na samym końcu. Jeśli użyjesz DMA, to właśnie tak będzie, jeśli nie, to tak czy iak co bajt będziesz...
(at)ElektrodaBot Robię algorytm bufora cyklicznego i jedna rzecz nie jest dla mnie oczywista. Pamięć EEPROM (model AT24C128) obsługuje zapis jednego bajta, całej strony jak i dowolnej liczby bajtów mniejszej od rozmiaru strony. Czy jeżeli zrobię zapis 2 bajtów na środku 64-bajtowej strony, to czy pozostałe 62 bajty zostaną "przepisane", a więc ich żywotność...
W C mnożenie dwóch intów zawsze da int, rzutowanie tego do long później nie ma sensu... Ale jeżeli w mnożeniu bierze udział chociaż jeden long.... :) ... czyli zamiast i = 258*258 spróbuj: i=258l*258 :) Pozdrawiam. P.S. W rozpisce chodzi o to żeby uniknąć mnożeń przez 256, czyli z wejścia wziąc a,b,c i d. obliczyć ich iloczyny, a dopiero później na...
ie bardzo chcę to robić. SPI działa na max, czyli fcpu/2. Wysłanie bajtu to 16 cykli zegara. Wejście i wyjście z przerwania zajmie więcej niż transmisja bajtu. Używanie przerwań jest więc trochę bez sensu. Ok, przyzwyczajony jestem do FIFO i DMA. W tym przypadku i przy tym procesorze to rzeczywiście nie ma sensu.
bobeer: na tym polega cały urok pagewrite że cały blok zapisuje sie w takim samym czasie jak pojedyncza komórka. najpierw sie wysyła adres (musi być podzielny przez rozmiar bloku inaczej niewejdzie cały blok [1]) potem sie wystawia sekwencje stop i układ zaczyna zapisywać - tu jest potrzebne oczekiwanie... [1]: pamięć eeprom 24c512 jest zorganizowana...
Operuje na MEGA2560. To użyj buskeppera. Nawet śmieci nie chce wyświetlać. Wysyłasz jeden przypadkowy bajt, nie kończysz cyklu zapisu, jak chcesz aby to działało? Chyba będę zmuszony je oddać. Raczej "jestem zmuszony się poddać".
Wpisujesz do rejestru danych 0x60 i ze względu na 1 stopniowy FIFO, TXE jest ustawiany w następnym cyklu APB, więc chwilę później wpisujesz "losowy bajt". Bezpośrednio po wysłaniu polecenia (0x60), ustawiana jest flaga RXNE, ponieważ interfejs coś już odebrał, a Ty odczytujesz to coś = "śmieci" i wychodzisz z funkcji. Właściwe dane przyjdą dopiero w...
Kolejny raz widzimy to samo. Zamiast dobrać kontroler do zadania, to próbujesz na siłę dopasować zadanie do kontrolera leżącego w szufladzie. Tutaj o tyle gorzej, że nawet się nie zastanowiłeś ile zasobów potrzebujesz, tylko od razu przyjmujesz 2 albo 3(!) kontrolery do w sumie bardzo prostej aplikacji. Moim zdaniem wszystko zrobisz na jednym uC i może...
Witam rcall nie przeszkadza USARTowi... i całe szczęście, bo musielibyśmy wyrzucić wszystkie AVRy do kosza ;) Problem jak zwykle tkwi w programie. W procedurze obsługi przerwania USART_TXC założyłeś, że możesz włożyć do UDR kolejny bajt, bez sprawdzania, czy jest on pusty. Poniekąd jest to założenie słuszne, ale nie w Twoim programie. A problem polega...
BlueDraco dokładnie tak. Okrojona została do stanu problemu, co nie wyklucza, że podczas prób coś bardziej działało w takim przypadku niż w oryginalnym. Jak zapewne wiesz, przy błędach nadpisywania, element losowości odgrywa ważną rolę i jeden nop może mieć większe znaczenie niż coś innego. Nie zmienia to jednak faktu, że ani wersja okrojona ani nawet...
Jeśli moduł rf jest zintegrowany z mikrokontrolerem to korzysta on z wewnętrznej magistrali danych skraca to czas aktywności mikrokontrolera do minimum . Każdy inny moduł transceivera będzie wymagał wysłania do niego danych np. po spi to zajmuje czas bo raz że trzeba wysłać dane do modułu spi , napędzić zegar i je wysłać , w przypadku gdy masz zintegrowany...
Formę odbioru danych muszę zosatwić bez zmian - jedyny sprawdzony sposób w mojej aplikacje reszte funkcji jakie daje Bascom przetestowałem i nie sprawdziły się. Wyczytałem w helpie że timeout działa w mojej formie zapisu na każdy bajt tak więc ilość cykli * 100 (bajtów jakie odbieram) bo każdemu bajtowi jest przypisany timeout, i problem jest tego typu...
Nie 30, tylko 6 plików... No dobra, Ctrl+C, Ctrl+V: ADD A , Rn do akumulatora dodawana jest zawartość rejestru Rn A <− A + Rn gdzie Rn = R0...R7 (jeden z rejestrów roboczych) kod: 0 0 1 0 1 n2 n1 n0, gdzie n2...n0 – wskazują na R0...7 stąd: 28h−2Fh cykle: 1 bajty: 1 przykład: ADD A , R2 – ADD A , adres do akumulatora dodawana...
Na 100% tylko w tej jednej linijce bo debuguję w AVR Studio i widzę ile cykli zajmuje każda linijka. Wyliczenie który to jest bajt w tej tablicy zajmuje mi jakieś 100 cykli. I dokładnie wiem który to bajt. Pozostaje kwestia wyliczenia bitu w tym bajcie na podstawie X, a do tego potrzebna jest reszta z dzielenia X przez 8. Ale jeszcze myślę, bo wyliczenie...
A jak ci wyszło 50 cykli, bo z moich wyliczeń wynika, że potrzebuję około 110 cykli do odczytu całej klawiatury. *Edit* Już wiem. W czasie odczytu ładujemy kolejny bajt i wyjdzie 50 cykli. Nie wygląda to źle i myślę, że uzyskanie czasu odczytu rzędu 0,01ms jest realne. W takim przypadku potrzebujemy zegara o częstotliwość 5 Mhz.
W AVR mnożenie dwóch bajtów zajmuje 2 cykle, a każde przesunięcie o 1 bit - 1 cykl, a trzeba by wykonać tych przesunięć {9+6+5+4=24} i dodać wszystko, wnioski nasuwają się same, chyba, że procek nie posiada " mul " (chyba się nie dowiemy jaki to proc... ;) ). Pozdr. Light-I
Sprawdź zcas zapisu w nocie katalogowej. Do flasza cykl zajmuje ok 8ms na bajt.
Akurat w tym, konkretnym przypadku dzielenie przez 4 polega na pobraniu starszego bajtu (dokładnie 1 cykl maszynowy), a resztę z dzielenia mamy w dwóch pozostałych bitach, co z pewnością jest prostsze od przedstawionego wyżej mnożenia. Oczywiście cały czas mówimy tu o zmiennych stałopozycyjnych. Korzystając z tablic konwersji całe wygenerowanie łańcucha...
1/ Zamieszane są te bity od szyny danych, w kodzie wcale nie umieszczasz bitów na swoje miejsca (w ZAPISZ_LCD bit źródłowy i docelowy są sygnalizowane tą samą stałą, więc w efekcie bajt leci na opak) 2/ Strasznie zagmatwany kod - wcięcia na różnych poziomach, zbędne (według mnie) odkładanie rejestrów na początku funkcji. Inicjalizację przecież można...
Widzisz, to jest tak - IDLE MODE jest po to, że np jeśli masz TWI SLAVE to układ master może wybudzić twój układ SLAVE właśnie poprzez nadawanie czegoś do niego po TWI (I2C) i wtedy przerwania są nieodzowne. Podobnie zewnętrzne układy mogą wybudzić za pomocą takich interfejsów jak USART czy SPI. Dzięki czemu transmisja może być dalej kontynuowana najszybciej...
jak jusz to modulo 256.. a pozatym to jest to samo co dodawanie z przepełnieniem... jak do x o wartości 255 dodasz 1 to wynik będzie wynosił 0 (zmienna 8 bitów)...(natomiast bit C będzie ustawiony).. odrazu mówie.. modulo 256 z bajtu jest stratą cykli, miejsca w programie, a pozatym nic niedaje (to tak jak dodawanie zera)
Witam Pierwsze linie kodu to deklaracja ustawień liczników T0 i T1. Konfiguracja dla ułatwienia została rozpisana na poszczególne bity, dlatego póżniej trzeba je przemnożyć x4 i x8 aby bity były na swoich miejscach. Dla licznika T0: CT0 EQU 0 M0 EQU 1 G0 EQU 0 T0S EQU M0 + 4*CT0 + 8*G0 oraz dla licznka T1: CT1 EQU 0 M1 EQU 0 G1 EQU 0 T1S EQU M1 + 4*CT1...
Warunek stopu wystarczy na końcu, warunek startu może się powtarzać. pojedynczy warunek stopu przy zapisie więcej niż jednego bajtu występuje tylko w sytuacji PageWrite.. wtedy dokonuje sie jednego adresowania układu.. jednego wyboru pierwszej komórki i wpisuje sie dane aż do końca aktualnej strony.. 24c16 ma strone o rozmiarze 16B więc tyle bajtów...
Po wysłaniu jednego bajtu (i sprawdzeniu SPIF) trzeba ręcznie wyzerować SPIF przed następną transmisją. Poza tym SS (ten od mikrokontrolera, nie od DAC) powinien być ustawiony jako wyjście przed włączeniem SPI (ustawieniem bitu SPE), bo jak nie to mikrokontroler będzie przechodził w tryb slave. Poza zaznaczonymi fragmentami pozmieniałem trochę rejestry...
Wszystko zalezy od protokołu komunikacji i programowania. Jeśli w każdym cyklu programowania bajtu chcesz np weryfikować całą pamięć to może to trwać bardzo długo. Sprawa druga jeśli komputer przy przesyłaniu danych wysyła jakieś dodatkowe dane kontrolne to następuje narzut ilości danych w stosunku do danych przesłanych.
1 takt na SCL to jeden bit. Przy częstotliwości SCL równej 100kHz przy odczycie sekwencyjnym prędkość transmisji będzie równa około 11KB/s (8 bitów danych, jeden bit ack). Przy odczycie losowym na każdy jeden bajt przypadną 4 dodatkowe bajty (adres układu w trybie zapisu, dwa bajty adresu komórki, adres układu do odczytu), czyli na jeden bajt przypadnie...
nie wiem dokladnie czy o to chodzi ale z twojego opisu wywnioskowalem: macie liste rozkazow i analizujecie ja pod katem tego ilu bajtowe one sa, ile cykli maszynowych zajmuje ich wykonanie, ewentualnie jaki jest ich wynik?? dane i wyniki sobie sam wymyslilem dla przykladu wiec sie tym nie kieruj np. rozkaz ADD trwa 1 cykl ma 2 bajty zaczyna sie od adresu...
Podobno controller RAM (DDR5-5200) w tym cpu R5 7600X ( nowa seria 7000) jest b.niestabilny na płytach AM5 , gdzie VRAM > ukł. zasilania płyty nie nalezy do najlepszych Podobno ? lekarstwem na ten problem jest lekki undervolting cpu - np. temat (jeden z kilku o tym cpu) CAS Latency: CL32-36-36-68 / CL30-36-36-68 (XMP 3.0 & AMD EXPOTM) Spróbuj z Ryzen...
Chodzi o to, że mutex i semafor służą zasadniczo do czegoś zupełnie innego (choć jakby się uprzeć, to semafora można używać też w miejsce mutexa, ale licząc się z różnymi poważnymi problemami typu inwersja priorytetów). Dobrze by było więc sprecyzować o który dokładnie aspekt Ci chodzi, bo czym innym jest synchronizacja rozumiana jako "powiadomienie"...
Nie pytam o technologię; pytam o logikę - ALE jest generowany jako ALE (1 logiczna) czy /ALE (0 logiczne)? Normalna logika - sygnał jest aktywny w stanie wysokim. CPU ustawia ten sygnał w stan wysoki w pierwszym impulsie zegarowym wewnętrznego cyklu dając znać, że młodszy bajt może zostać zatrzaśnięty w rejestrze. Od strony rejestru (74HCT573) wygląda...
witam. Przeglądając forum zauważyłem, że wiele osób ma proble z komunikacja pomiedzy układami Atmega poprzez SPi. Podobnie ja. Przypuszczam, że moja konfiguracja jest ok. Master wysyła cyklicznie pojedyncze bajty(wartość zwiekasza się co cykl od 0 ) ale slave pokazuje tylko 0 lub 255. Może ktoś mi podpowie w czym jest problem?! Dzieki z góry. A.K.
_Robak_ : Jakiś przykład? Otworzyłem pierwszy lepszy projekt (avr), 61 plików z czego 6 całkowicie w asemblerze: 1/ moduł komunikacyjny (przy dużych prędkościach liczy się każdy cykl) [uart] 2/ zoptymalizowana funkcja do liczenia internetowej sumy kontrolnej (wychodzi coś około 3,75 cykla na bajt przy n->+Inf) 3/ moduł komunikacyjny z innym urządzeniem...
Przyczyna jest w tych linijkach Trzeba też pamiętać, że jeżeli zdefiniujemy tablicę n elementową i spróbujemy zapisać coś pod indeksem równym lub większym n to kompilator nie zgłosi błędu, ale skutkować to może nieprawidłowym działaniem programu.
Ten procek ma troche za malo mozliwiosci arytmetycznych moim zdaniem. Do tego jest 8 bitowy. I jesli dobrze czytales datasheeta, to zobaczysz, ze movy SA 1 cyklowe jesli dotyczy to pamieci wewnetrznej, w tym takze tego RAMu, co mozesz go MOVXem dostac. Kazda inna pamiec wymaga jednak dodatkowych cykli, poniewaz: 1) adres jest 16 bitowy, wiec trzeba...
Drugi i trzeci bajt określają adres skoku (pełny 16-bitowy). Liczba cykli to określa ile taktów zegara "zajmie" wykonanie rozkazu. Cykl zegarowy to zwykle (w 8051) częstotliwość kwarcu podzielona przez 12.
przerwania znam, niemniej wlaśnie nie mam koncepcji na sam bufor, niby tablica, alemoze zrobic z niego liste jednokierunkową ?, jak go odczytywac, czy po bajcie czy dopiero zrzucić całą ramkę jak przyjdzie? oznaczac koniec i poczatek ramki?, jak obsluzyc blad w postaci np zaginionego bajtu? Jak daleko posunac sie w kodzie obslugi przerwania zeby nie...
Zgadzam się, pokręciiłem coś. "pamięci programu. Maksimum to 1310720 bajtów" a to jest 1 280 kB, Więc gdzie reszta z tych 4mb? :D A jeszcze mi powiedz. Te 100000 cykli to się dotyczy jednej komurki czy jak to się nazywa, czy całej pamieci?
Ja studiowałem zaocznie więc nie miałem żadnych praktyk. Na studiach uczyłem się asemblerów z różnych procesorów (łącznie z tym ile bajtów i cykli zajmuje rozkaz) i to nijak się nie przydaje, niestety nauczanie nie idzie z duchem czasu. Co do wypłaty, będąc po studiach czyli zero praktyki, to ok. 2kPLN netto można zarobić a później to do ok 3kPLN albo...
Flash procesorów STM32 ma wytrzymałość 1000 cykli zapisów. Korzystasz z kilku bajtów a zapisujesz całe 4096. W dodatku nie wiem po co wyrównujesz do 256 te bufory, przecież one są w RAM.
1. W keilu musi. Anonimowe struktury i unie nie są domyślnie obsługiwane. Jakiekolwiek rozszerzenia języka C są obsługiwane przełącznikiem -gnu (trzeba go dopisać do argumentów kompilatora). Nie sprawdzałem czy dzięki temu zostanie umozliwione pisanie anonimowych struktur czy unii, ale całkiem możliwe, że tak. 2. Keil zawsze numeruje pola bitowe od...
Dla jednolitego interfejsu. Nie wydaje mi się że można zrobić uniwersalny interfejs dla wszystkich zastosowań. Wolę dopasowywać rozwiązania do każdej sytuacji optymalnie. Dla zasady. Jeżeli jest to zasada, to niesłuszna. (kto tworzy takie zasady?) Dla poprawności. Czego? Interfejs jednokierunkowy bez odczytu działa poprawnie. Dla zwykłej ciekawości...
Czas dostępu 55ns jest na granicy. Ponieważ potrzebujesz 24-bitową szyną danych musisz wykorzystać 3 takie pamięci, albo jedną umożliwiającą odczyt 3 bajtów w jednym cyklu, ale wtedy potrzebujesz pamięć o czasie dostępu 10-12ns, a nie 55. Poza tym kwestia czy użyty procesor wspiera taki tryb. Tak więc najpierw wybierz procesor, poczytaj o jego interfejsie...
Kolega krytyk chyba ma jakieś problemy. A co do transferu, to myślę, że jest git. Bo przesłanie bajtu danych wymaga dwóch cykli magistrali, każdy tak pewnie po 8 taktów zegara. Przy częstotliwości taktowania 8 MHz daje to 500 KB/s. Niestety, najbardziej zbliżony komputer, do jakiego mam dostęp, to AT (16 MHz no i magistrala 16-bitowa), więc powyższe...
Witam, u mnie też pojawiło się pytanie jaką platformę sprzętową wybrać. Pytanie wynika z faktu iż obecnie działający projekt korzysta z układu FPGA, który odbiera na szynie równoległej o szerokości 48 bitów dane przychodzące z zegarem 15 MHz. Odebrane dane układ FPGA zapisuje do pamięci a następnie przesyła je do PC na którym dane są obrabiane. Jednorazowo...
Nie wiadomo o co ci dokładnie chodzi. Domyślam się, że o to, że procek za wolno będzie przesyłał dane do urządzenia ??. SPI w Attiny2313 może w trybie master wysyłać/odbierać z prędkością fck/2, czyli przesłanie jednego bajta zajmie przynajmniej 16 cykli. Nie napisałeś, co to za "urządzonko" jaki ma interfejs. Jeśli SPI jest dla ciebie za wolne to musisz...
Cześć, taktlos, odczytanie woltów, amperów i watów z danych szeregowych CES7766 (lub CSE7759) wyjaśniono tutaj: [url=https://www.instructables.com/Sonof... Połączyć Upewnij się, że łącze szeregowe jest ustawione na 4800bps. Każdy odczyt licznika (z chipa CSE) zajmuje 24 bajty. Poniższy kod zakłada, że wczytałeś...
Jeżeli to SSD z TBW , to podziel parametr TBW przez jego pojemność, a otrzymasz żywotność układów w cyklach P/E. Poza tym nie zapominaj, że: - minimalną jednostką adresowania nie jest bajt, a strona przy zapisie i blok przy kasowaniu. Weź dokumentację dla dowolnego układu i sprawdź rozmiar tych jednostek, - zapisów dokonują również procesy w tle i...
Nie możesz zmieniać adresu źródłowego dla DMA podczas transferu. Jeżeli nie używasz podwójnego buforowania, a chcesz zmienić bufor/obszar, z którego DMA ma pobierać dane, to należy zatrzymać DMA, zaczekać na potwierdzenie (bit DMA_EN == 0), zmienić adresy, ilość bajtów do transmisji i na nowo wystartować transfer. Łatwiej pewnie będzie użyć Double Buffer...
Z pewnością sposobów jest mnóstwo. Przypomniałem sobie troszkę asembler mcs51. Mam nadzieję, że program w asemblerze wyjaśni wątpliwości (albo pogłębi ;-) ). Skorzystanie z "tabliczki dzielenia" lub "tabliczki mnożenia" na liczbach o podstawie 2^8 przedstawia poniższy program. Tabelę rozbiłem na 3x256 bajtów. Obliczenie realizowane wg zależności x=256*a+b...
1. z tego co piszesz to przerwanie o najwyższym piriorytecie będzie występowało z częstotliwością 4kHz. Zakładając że będziesz miał zegar 8MHz to na obsługe przerwania (zapisanie 8 bajtów) i obsługe innych przerwań będziesz miał: 8MHz/4kHz = 2000 cykli zegarowych co w przypadku procesorów typu RISC daje jakieś 1500 instrukcji. A to jest całkiem sporo....
bajty polskie pcf8583 bajty cykle asembler
telefon livebox odbieranie danych bluetooth grzałka sprawdzić miernik bojler
Brak zasilania do stacyjki w Mitsubishi Pajero 2 Diesel Czujniki w ekspresach Saeco – wygląd, typy, identyfikacja, przykłady modeli Xelsis, Incanto