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...
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,...
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...
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...
(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_...
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ż...
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.
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.
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...
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...
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...
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...
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...
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...
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"...
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...
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.
_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...
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...
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ć".
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...
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...
'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...
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...
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...
(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ść...
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...
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.
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...
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...
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...
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......
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
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)
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...
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...
Sprawdź zcas zapisu w nocie katalogowej. Do flasza cykl zajmuje ok 8ms na bajt.
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...
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...
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...
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.
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...
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...
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...
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...
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...
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...
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"...
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...
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.
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...
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...
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...
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...
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...
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.
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...
Tyle że cbi i sbi to rozkazy w assemblerze które zajmują 2 bajty i wykonają się w jednym cyklu, a np. kod: ADCSR = ADCSR | (1<<ADSC) Niekoniecznie. Ale zależy to jeszcze od inteligencji kompilatora.
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...
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...
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...
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...
Rozumiem, że zastosowany 1 MB pamięci to pamięć dynamiczna (DRAM) wyciągnięta ze starego SIMMA z PC? Opisz proszę mechanizm odświeżania pamięci wraz z zastosowanym schematem. Ja potrzebuję podpiąć do procesora 6502 dość dużą pamięć RAM, którą chciałbym dość często przeprogramowywać, stąd pamięć SRAM odpada (taka o pojemności > 128 kB jest już droga),...
Jeśli więc nadal chcesz wykorzystać AVR, to za pomocą interfejsu SPI podłącz zewnętrzną pamięć SRAM - 128kB wystarczy Ja widzę przynajmniej 2 problemy: 1. adresowanie urządzeń SPI jest poza pamięcią obsługiwaną przez kompiler (bo to nie jest pamięć procka tylko kontrolera SRAM na SPI) - zatem korzystanie z tej pamięci nie jest aż tak proste i gładkie...
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...
A to jak często trzeba zmieniać cyfry, żeby czas stracony na ich wpisywanie zauważalnie obniżył jasność? I2C rzeczywiście jest wolniejszy, zegar do 100kHz i 18 cykli zegara na przesłanie 1 bajtu, 0.72 ms na całość.
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...
dziechu: Długość kodu i odstęp czasowy od wyjścia z pętli do załadowania rejestru danych nie są kwestiami wiary, a empirii - łatwo to sprawdzić. Mogę się mylić - nie sprawdzałem, ale intuicja mówi mi, że kod się wydłuży, o 8..12 bajtów, a ładowanie DR - opóźni o ok. 2 cykle procesora potrzebne na wykonanie instrukcji LDR "dzięki" użyciu BB linijkę wyżej.
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...
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.
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...
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.
Zapewne ma nadmiar mocy w swoim uC. Dla przerwania PCINT występującego z częstotliwością 100Hz, w którym trzeba wpisać zera do dwóch bajtów w RAM(powiedzmy 6 cykli procesora razem z obsługą przerwania), a potem gdzieś w kodzie sprawdzenie , czy ten licznik inkrementowany w przerwaniu Timeranie przekroczył jakiejś wartości (powiedzmy 8 cykli procesora),...
Bardzo często EEPROM jest emulowany w pamięci FLASH w sposób niewidoczny dla użytkownika. Nie można emulować funkcjonalności takiej jak wytrzymałość na ilość cykli zapisu/kasowania albo możliwość nadpisania pojedynczego bajtu. Jak nie można? Potrzeba 1kB EEPROM 100'000 zapisów (jak np w AVR), przeznacza się na pamięć 10kB FLASH, która ma ograniczenie...
Cześć !!! Pomysł bardzo dobry i ciekawy. Ale propnuje przesiąść się na jakiś procesorek ze sprzętowym I2C np. Atmega8 lub któryś z grupy nowych procków Philipsa. Dlaczego. Komunikację Mikroprocesorów z i2C w trybie Slave najłatwiej jest zbudować, gdy masz możliwość obsługi protokołu w przerwaniu. Tzn. procek dalej się kręci , coś czyta czym się zajmuje...
Atmegi nie maja mozliwosci wykonywania programu z zewnetrznej pamieci. Chodzi o predkosc wykonywania programu. Atmega wykonuje instrukcje w jednym cyklu (wiekszosc) a ladowanie bajtu z zewnetrznej pamieci to conajmniej 3 cykle. Procesor by zwolnil kilkukrotnie a pozatym podlaczona pamiec musiala by byc szybka. Druga kwestia to fakt ze AVR maja architekture...
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...
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...
Żeby bardziej zamieszać dodam, ze organizacja magistrali i jednostki centralnej może być różna. Przykładowo 16-bitowy procesor 8088 operował na 8-bitowej szynie danych przesyłając każdą daną 16-bitową w dwóch cyklach - oddzielnie bajt starszy i młodszy. Możliwa jest też sytuacja odwrotna - np. w Pentium rejestry mamy 32-bitowe, a magistrala RAM ma szerokość...
Chyba lepiej byłoby zamiast wartości pseudolosowych zapisywać takie bajty którego bity byłyby zmienne w każdym cyklu zapisu np. $55 i $AA. Zapisywanie np samych 00 lub $FF spowoduje ze tych operacji można wykonać miliony. Jak jeszcze możesz to spróbuj puścić program jeszcze raz ale nie na pseudolosowych bo to niewiarygodny wynik wychodzi. Mnie tez bardziej...
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?
Dzięki. A ile cykli zajmuje: eeprom_read_byte ? I jak wygląda eeprom_read_byte w assemblerze ?
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...
24/50MHz > 6/16MHz => Wolniejszy niż 8-bitowy PIC ;-( No ale co jest zachowywane w tych 6 cyklach w PICach ? CM0 ma 16 32b rejestry. Z tego w ciągu 12 cykli zachowywanych jest 8 (32 bajty). Jeśli pojawi się kolejne przerwanie w trakcie tego przerwania, ale o wyższym priorytecie to przełączenie zajmuje 6 cykli. Kolejne 12 cykli to jest odtworzenie tych...
Ale ja nic nie wysyłam do MCP. Próbuję tylko z niego odebrać bajt i wysłać go na diody. Do Dout podpinam tylko MISO, natomiast żeby odebrać muszę też coś wysłać, wysyłam więc zawartość zmiennej bajt(=0) oraz zawartość tej samej zmiennej powiększonej o 2, żebym widział różnicę na analizatorze. Wysyłam 2 bajty, żeby dostać 16 cykli zegara. MOSI oczywiście...
Witaj, jaką funkcję realizuje pin 26 procesora? Ze względu na konstrukcję programu nie mogłem użyć całego portu (8bitów), a tylko 4. Związane jest to z czasami wykonywania instrukcji. Wczytanie jednego bajtu z Flasha zajmuje 3 cykle zegara, a jego wyświetlenie 1 cykl. Więc aby wyświetlić 4 piksele potrzebowałbym 16 cykli. To dużo, biorąc pod uwagę,...
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...
Nie możesz załadować w ciemno dwóch bajtów do bufora UART. Przerwanie jest zgłaszane, gdy jest wolne miejsce w buforze - na jeden bajt. Piszesz o cyklach procesora i instrukcjach na poziomie asemblera - obejrzyj początek i koniec procedury obsługi przerwania napisanej w C i skompilowanej na AVR - zajmie to więcej cykli, niż potrzebuje Cortex. Dodaj...
Dobra może i fakt, że te ustawienia w rejestrach nie są czytelne, ale DMA i I2C chodzi prawidłowo (jakby było źle skonfigurowane to w debugerze tez by nie chodziło ponad to reszta czujników też by nie chodziła) Odczyt jest taki a nie inny ponieważ wykorzystuje juz funkcje które były napisane wczesniej do moich obliczeń. W sumie w cyklu odbieram 18 bajtów...
W jaki sposób jest realizowane przewijanie tekstu? (scroll) W pamięci sterownika zadeklarowana jest tablica - bufor o rozmiarze 80 bajtów. Przy każdym cyklu wszystkie wartości w tablicy są przepisywane o jedną w lewo, a ostania jest uzupełniana o wartość z bitami aktualnie wyświetlanego znaku, które odczytywane są z tablicy z czcionką w pamięci flash....
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.
Dodaje nieusuwalną przez kompilator instrukcję asemblera "nop" (nic nie rób, bodajże 1 cykl i 1 bajt) nie pozwalając tym samym na usunięcie "nic nie robiącej" pętli. Nie jestem teraz pewien, czy akurat w tym wypadku jest to uzasadnione, ale podejrzewam, że jest to jedno z działających rozwiązań :) Przy okazji - warto korzystać z plików .lss ! Widać...
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...
masz racje teraz, ma predkosc transmisji 4800, nie wzial pod uwage ze przezutnik T musi wykonac 2 cykle aby uzyskac pelen okres sygnalu na wyjsciu.
Czasy C-64, Atari i ZX-Specrtum minęły. Nie trzeba kilka dni pisać prostej funkcji bo brakuje kilku cykli zegara czy kilku bajtów pamięci. Wręcz przeciwnie, coraz więcej ludzi wraca do tych komputerków i zwyczajnie bawi ich pisanie na nie dem i nowych gier. Jeśli chodzi o Arduino to zazwyczaj jest to przerabianie gotowego kodu, ale ludzi to bawi i...
Używałeś kiedyś SPI w trybie Slave na tych uC? Pytam bo po dalszych walkach okazało się, że układ w trybie slave nadający wysyła tylko jeden bajt w jednym cyklu (gdy SSEL jest w stanie niskim). Dokładnie tak samo jak zachowuje się sygnał SSEL w trybie master (po każdym bajcie przełącza się na stan wysoki na długość jednego cyklu zegara). Dlatego raczej...
port A ma w tym przypadku 2 funkcje - pierwsza, to wystawienie dolnego bajtu adresu (pierwszy cykl) łącznie z zatrzaśnięciem go w zatrzasku (sygnał ALE), po czym w drugim cyklu służy do wymiany danych - w zależności od odczytu lub zapisu jest wejściem lub wyjście, i jest wysterowywany odpowiedni pin - /RD lub /WR. Port C jest górnym bajtem adresu, przy...
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 zamień bajty
budowa słuchawek bluetooth wtrysk mercedes peugeot boxer kluczyk
quadral wzmacniacz quadral wzmacniacz
Ciśnienie wtrysku Peugeot Partner 1.9 DW8B Ciśnienie wtrysku Peugeot Partner 1.9 DW8B: 130-150 barów