SS musisz wykorzystać, bo tylko stan tego pinu gwarantuje przejście pozostałych linii interfejsu SPI w stan wysokiej impedancji. Przerwanie od SS nie jest potrzebne - niski poziom tego sygnału aktywuje interfejs i powoduje wysłanie SPDR. Po zakończeniu wysyłania bajtu danych możesz otrzymać przerwanie zakończenia transferu SPI w którym to przerwaniu...
Witam! Wyłączenie odbiornika jednocześnie czyści bufor odbiorczy, więc jest to dobra droga. Za szybko włączasz odbiornik. Wysłanie ostatniego bajtu do bufora nadawczego powoduje, że program leci dalej (ale jednocześnie trwa wysyłanie bajtu z bufora) w tym czasie włączasz odbiór i dostajesz kawałek nadawanego bajtu. Żeby pozbyć się problemu, musisz po...
1. Ustawienia są niekompletne: zapomniałeś włączyć i skonfigurować matrycę krosującą (Crossbar) odpowiadającą za przypisania sygnałów urządzeń peryferyjnych do wyprowadzeń układu. Jeśli chcesz sprawdzić jak należy skonfigurować mikrokontroler (jego peryferia) to możesz użyć programu Configuration Wizard 2 udostępniony na CLR SCON0.1 Wystarczy zapisać...
Poprawcie mnie jeśli się mylę, ale przecież char to po prostu typ zmiennej 8-bitowej. Nie ma różnicy co prześlę w ramach tych 8 bitów. Lecą sobie zera i jedynki i chodzi tylko o to, żeby programista wiedział jak je później zinterpretować. Innymi słowy czy paczka 8-bitów (typu znakowego 'char') to część jakiejś liczby, którą później programista złoży...
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...
https://obrazki.elektroda.pl/3221612800_... Witajcie moi drodzy. Zapraszam na relację z postępów prac nad otwartym firmware dla BK7231T. Temat ten napisany będzie w formie tutoriala, przedstawię tu krok po kroku jak opracowałem własny, wieloplatformowy (działający na Windowsie i BK7231T) mini-serwer HTTP, system konfiguracji pinów...
I2C wygląda tak, że jedna strona jest "master", druga "slave". Master wysyła polecenie i dane linią SDA i sygnał zegara linią SCK; slave może wstawić swoje dane na linii SDA tam, gdzie master wysyła '1' - a protokół określa, jak wygląda przejście od wysyłania danych przez mastera do wysyłania ich przez slave-a, jest przekazywana informacja, od którego...
Jest też coś o funkcji WriteByte, ale nic konkretnego nie piszą więc trzeba by na żywo sprawdzić czy można ją wywołać (wydaje mi się, że również powinna działać bez problemów). Nie może działać, bo klasa SerialPort nie posiada takiej metody. Chcąc wysłać pojedynczy bajt najlepiej umieścić go w tablicy: Dodano po 10 Masz przecież w tym przykładzie konkretną...
Ale ten sposób wysyłania ramek to trochę nie teges. A jak poprawnie się wysyła takie ramki i czym? Nie możesz po prostu sprawdzić w opisie programu jak należy formatować dane? Bo domyślam się że to jakiś terminal jest. Na Wikipedi jest opisane tak: "Minicom to program do kontroli modemu oraz emulator terminala dla systemów uniksowych" Ciężko Ci pomóc...
https://obrazki.elektroda.pl/6748920600_... Czy malutki, ośmiobitowy mikrokontroler PIC12F683 da radę wysterować dynamiczną kolorową animację na diodach WS2812? Użyty tu MCU ma raptem 2048 bajtów pamięci Flash, 128 bajtów RAM i jest taktowany z częstotliwością do 20 MHz (8 MHz w przypadku wewnętrznego oscylatora). Czy to wystarczy?...
Tak, jeśli używasz przerwania to nie potrzebujesz tej funkcji. Procesor wcale nie musi się resetować, może wpadać w nieokreśloną martwą pętlę po skoczeniu do przerwania od RX (które jest nieokreślone). Program działa więc tak: wykonuje wszystko aż do napotkania funkcji USART_ReceiveByte, wchodzi do niej i oczekuje na zakończenie odbioru bajtu przez...
Pętla for wykonuje się, dopóki warunek jest spełniony. W tym wypadku mamy warunek OR - czyli pętla wykonuje się, dopóki choć jeden z bitów bajtu maska przyjmuje wartość binarną 1. Podobnie jest z zapisem instrukcji warunkowej if : możemy napisać : if ( bit == true ) lub może to być zapis : if ( bit ) . Oba zapisy są równoważne.
http://obrazki.elektroda.pl/5144790300_1... Przedstawiam Wam swoje najnowsze dzieło - KrzysioCart MicroSD - kardridż do konsoli Pegasus, który będzie ostatnim, jaki kupisz - żaden inny już nie będzie potrzebny. Kardridż obsługuję 82% wszystkich gier, jakie wyszły na konsolę NES / Famicom / Pegasus. Obsługiwane są następujące mappery...
No to masz 4-bajtowy znacznik początku ramki, w dodatku niejednoznaczny, tylko po co? Przy automacie masz zmienną - stan automatu, którą elegancko robi się jaku enum, a dalej switch zapewniający obsługę kolejnego bajtu i przejścia pomiędzy stanami. Do obsługi tego początku, jaki masz, potrzebujesz czterech stanów automatu (piąty stan to odbiór danych)...
Masz błąd w funkcji usart_init(). Brakuje Ci ustawień starszegi bajtu danych UBBRH oraz jednej najważnejszej rzeczy nie ustawiłeś ramki danych tzn bitów stopu, kontroli parzystości oraz wielkości ramki :) Funkcja usart_init() powinna wyglądać mniejwięcej tak: void USART_Init() { /* Ustawianie prędkości*/ UBRRH = (unsigned char)(UART_CONST...
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...
https://obrazki.elektroda.pl/8150253700_... Oto krótka prezentacja wnętrza mikrowieży z odtwarzaczem CD i USB firmy Blaupunkt model MS8BK. Sprawdzę tutaj jak jest ona zbudowana, spróbuję przeanalizować jej firmware z nieznanego mikroprocesora i określić jego architekturę w Ghidra, a potem uruchomię jej wyświetlacz z Arduino. https://obrazki.elektroda.pl/3095604700_...
http://obrazki.elektroda.pl/8925093100_1... Witam. Tą bibliotekę napisałem jako mój pierwszy projekt napisany dla avr w C. Zawsze chciałem napisać swoją własną funkcjonalną bibliotekę, a jako, iż kiedyś zobaczyłem w EDW taki sam projekt, postanowiłem korzystając wyłącznie z wykresów czasowych tam zamieszczonych ziścić moje marzenie....
https://obrazki.elektroda.pl/3515341300_... Przedstawię tu analizę wnętrza oraz krótką inżynierię wsteczną protokołu UART kolejnego ściemniacza Tuya, tym razem opartego o dość nietypowy moduł LMB54 (BK7231N) oraz dwa mikrokontrolery HC32F003. W pełni tutaj opiszę, jak można go zaprogramować i dodać jego wsparcie OpenBeken przy użyciu języka...
Skoro Bascom to jest taka komenda jak "I2CSEND". Wszelkie szczegóły znajdziesz w polskojęzycznym helpie do Bascoma.
https://obrazki.elektroda.pl/4706372500_... W poprzednich częściach pokazałem zasadę działania oraz uruchamianie pozyskanych wyświetlaczy (modułów) VFD. Teraz przyszła pora na zbudowanie własnego sterownika wraz z potrzebnym zasilaczem. • Zasilacz Ze względu na dość złożony sposób zasilania samego wyświetlacza postanowiłem zacząć...
Może [url=http://realterm.sourceforge.net/]Re... ?
http://obrazki.elektroda.pl/3546939500_1... Konstrukcja będąca tematem wątku powstała jako projekt na zaliczenie przedmiotu na uczelni, którego celem było napisanie sterownika dla systemu Linux do jakiegoś urządzenia. Ponieważ miałem swobodę wyboru tematu sterownika, postanowiłem stworzyć jakieś urządzenie w postaci karty ISA. Złącze...
Witam. Po pierwsze, najbardziej popularnym trybem pracy UART'a w 51, jest tryb asynchroniczny. W tym trybie wykorzystujesz piny TxD (nadawanie) i RxD (odbieranie) procka. Jeśli chcesz zrobić transmisję pomiędzy dwoma stacjami A i B, (każda zbudowana na 51) to najlepiej połączyć TxDA z RxDB i RxDA z TxDB (czyli na krzyż). Mechanizm odbioru transmisji...
https://obrazki.elektroda.pl/3570276400_... Pokażę tutaj jak przyśpieszyłem programową komunikację SPI służącą do obsługi pamięci Flash. Sprawdzę jak dużo kodu może kryć się za warstwą abstrakcji GPIO BK7231 a potem spróbuję operacje na pinach zredukować tak, by działały bezpośrednio na rejestrach. Ile cykli procesora tracone jest...
Miałem taki problem - po optymalizacji przestawał działać TFT. Sprawdzałem wszystkie opóźnienia, wszelkie podejrzane zmienne robiłem typu volatile, ale problem nadal występował. W końcu za pomocą atrybutu __attribute__((optimize("-O0"))); zacząłem wyłączać z optymalizacji kolejne funkcje. Okazało się, że problem jest w funkcji wysyłania bajtu SPI. Wiem...
https://obrazki.elektroda.pl/3813144000_... Zapraszam na krótki test i demonstrację użycia popularnych modułów wyświetlacza 7-segmentowego opartych na TM1637. Uruchomię taki moduł najpierw z Arduino, a potem bez użycia żadnej biblioteki, na koniec również pokażę alternatywną, eliminującą zbędne opóźnienia bibliotekę przeznaczoną do sterowania...
https://obrazki.elektroda.pl/7838660700_... Witajcie, przedstawię tu wnętrze oraz zmianę firmware kolejnej lampki LED. Temat wyróżni się tym, że ta LEDówka korzysta z protokołu I2C do kontroli swoich kolorów, a dokładniej do komunikacji między modułem WiFi/Bluetooth WBLC5 (BK7231T) i stałoprądowym kontrolerem LED SM2135Eh. Opiszę tu...
http://obrazki.elektroda.pl/9589280700_1... HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy. Parametry użytkowe zasilacza w skrócie: 1. Wykorzystanie tanich i łatwo dostępnych elementów. 2. Wydajność prądowa min 3A (dla niskich napięć może dochodzić do 5A). 3. Rozdzielczość DAC 12bit. (filtrowany PWM 4.9kHz) 4. Rozdzielczość ADC...
http://obrazki.elektroda.pl/7296913200_1... Przedstawiam konstrukcję wykonaną 2 lata temu, jaka jest graficzny wyświetlacz LCD przygotowany do współpracy z DSM-51, jednakże może współpracować z dowolnym innym układem mikroprocesorowym, który umożliwia szeregowe wysyłanie danych. W układzie sterującym jest zastosowany mikrokontroler...
Zrób tak :[syntax=delphi]uses idGlobal; procedure TForm.Button1Click(Sender: TObject); var Buffer_I : ARRAY[0..512] of Byte; ABytes : TIdBytes; begin ABytes := RawToBytes(Buffer_I[0], Length(Buffer_I)); IdTCPClient1.IOHandler.Write(ABytes); end; [/syntax]
Nie wiem dlaczego analizator pierwszy bajt odbiera prawidłowo a przy kolejnym pokazuje jakiś błąd Pewnie przez zbyt krótki "impuls" na linii CS. Generalnie CSa powinieneś przestawiać dopiero po całej transmisji, a nie między każdym bajtem, a jak już między każdym bajtem, to raczej przydałoby się coś dłuższego niż takie "pyknięcie".
A, rzeczywiście, ten uart_puts() jest do wysyłania napisu zakończonego bajtem 0, trzeba go przerobić, i może inaczej nazwać - może uart_putba()?[syntax=c]void uart_putba(const uint8_t *dane, size_t ile) { unsigned i; for(i=0; i < ile; i++) uart_putc(dane[i]); }[/syntax]Ostrzeżenie dotyczące 'const' - skoro rzutujesz dane na 'const', to wypada dopisać...
(...) wiedzi z urządzenia. Szukaj początku ramki. Użyj tego polecenia do odczytania 18 bajtu od początku ramki. ``` char byte = (frame >> 18) & 0xFF; ``` aczkolwiek uważam, że lepszym podejściem jest zdefiniowanie typu struktury (koniecznie packed) i odczytanie tego bajtu jako jej atrybut. Rozumiem Twoje zastrzeżenia, więc spróbujmy podejść...
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...
Ja mam pomysł /: po prostu jak wpisujesz do DR watrość to peryferiuum wdzie że to 2 znaki (bo rejestr ma 16 "waznych" bitów ) i wpisuje do FIFO 0x51 0x00 a następnie je wysyła. musisz zmusić kompilator aby zapisał bajt a nie pół słowa lub słowo [syntax=c]*(volatile uint8_t *)&SPIx -> DR = dana[/syntax] gdzie SPIx - to Twoje SPI (np SPI1, SPI2 etc) a...
SM2135 z pewnością nie zadziała. Wysyła tylko 8 bajtów, a nie 11, a kolory są 8-bitowe, a nie 10-bitowe. Co więcej, pierwszy wysyłany bajt jest inny, więc sterownik najprawdopodobniej zignoruje pakiety SM2135.
Bardzo możliwe, że zastosuję zmienną ilość impulsów w bajcie Chyba tylko wysyłanie bajtu 0xF0 lub 0x55 pozwala uzyskać impulsy w równych odstępach. To jest aż pięciokrotna zmiana częstotliwości.
Zmieniłem swój program, czyli najpierw wysłałem 0 a potem juz normalnie przed wyslaniem karzdego bajtu najpierw sprawdzanie a potem wysyłanie i NIC A myśle że warto by było najpierw sprawdzić czy rejest jest zajęty a nie wysyłać bajt i czekać aż sie wyśle do końca.
Dokladnie tak. W plikach ktore sciagnales masz komponent dzielnika clk, tamten uklad moze pracowac na jednej z 4 czestotliwosci wyjsciowych, ale mozesz sobie podejrzec jak ja wyliczalem czestotliwosc wyjsciowa.
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...
Za pomocą SPI2_IRQ_State wybieram sobie tryb w jakim ma działać obsługa SPI w przerwaniu . W programie głównym wybieram sobie tryb, ładuję odp. rejestry ilością danych do przesłania i inicjuję przerwanie wpisując pierwszy bajt 0xFF do rejestru nadawczego SPI. Potem już samo sobie leci, aż licznik danych osiągnie wartość zadaną. Po skończeniu wysyłania...
W dokumentacji nie znalazłem, ale zdrowy rozsądek wskazuje, że to powinna być ostatnio wpisana dana.
Transmisja czego trwa 80ms? Bajtu przez RFM? Skąd to wiesz? Czy bajtu z CPU do RFM? To drugie masz pod całkowitą kontrolą, bo to CPU steruje zegarem SPI. Co do transmisji przez RFM, to jest taka jaki baudrate ustawiłeś. Natomiast w takim przypadku nie wiem jak zmierzyłeś to 80ms. Weź też pod uwagę, że nawet wysyłając jeden bajt wysyłasz preambułę, synchronizację...
(at)ElektrodaBot Skończyłem na tym, że wgrałem ten kod /* Program realizujący obliczanie i wysłanie przez RS-232 wyniku funkcji kwadratowej y = 0.3187x^2 + 2x - 7 na podstawie x odebranego wcześniej także za pomocą RS-232. Szczegóły: http://mikrokontrolery.blogspot.com/... Mikrokontroler: Atmega8...
Dodałem wczoraj do odsyłanej odpowiedzi 4 bajt i w ciągu nocy tylko raz wystąpiło zawieszenie. Myślę, że ramka faktycznie nie może być zbyt krótka . Tekst z strony producenta "Supports very short packets (down to 3 bytes)" może oznaczać, do 3 bajtów, ale nie 3 bajty :) Teraz idę do pracy i także zostawię włączone tx i rx. Jak po powrocie z pracy nie...
Witam. Próbuje do ATmegi 8 podłączyć kartę SD po SPI. Inicjalizacja przebiega poprawnie, gdyż otrzymuję odpowiedź 0x01 na CMD0 i CMD1 i CMD16. Gdy próbuję odczytać sektor danych ( 512 bajtów ) to odpowiedź jest 0x01 ale nie przychodzi bajt startu danych 0xFE, juz nie wspominając o danych. W załączniku funkcje : inicjalizacja SPI, wysyłanie bajtu przez...
Niestety w uP STM32L151C8T6 i podobnych w tej rodzinie nie ma takiego bitu jak FRXTH. Jutro zobaczę jak wygląda wysyłanie jednego bajtu za pomocą DMA edit: Wysyłając np 5 kolejnych elementów z przykładowej tablicy za pomocą mechanizmu dma, przerwa pomiędzy kolejnymi bajtami w czasie transmisji wynosi 500 ns. Jednak dalej nie wpadłem na pomysł, jak to...
Program ma spełniać prostą funkcje. Odczyt z ADC i wysłanie tej wartości do terminala po UARCIE. Planuje by efekt koncowy tego fragmentu wyswietlal na terminalu, wartość z adc oraz tekst poniżej załączam inicjalizacje uarta oraz dwie funkcje wysylające. [syntax=c] void UART_sendbytes(char * bajty, int count) // wysyłanie jednego bajtu { // aby ograniczyć...
A można wiedzieć dlaczego na każdy znak masz zarezerwowane 8 bajtów (5 bitowych) a nie 7 ? Podejrzewam, że wlasnie wysyłanie tego 8 bajtu powoduje kaszanę.
rs485 wysyłanie bajtu danych odczyt bajtu transmisja bajtu
gniazdo felicia router sparklan podłączyć laptop projektor
Jak zdjąć pokrętło funkcyjne w piekarniku Whirlpool AKZ 237? Rodzaj gniazda wtryskiwacza Mercedes Sprinter 903