Cześć Próbowałem kodu z przykładu kolegi Robaka, i niestety ale następuje "przesuwanie się" bajtów, czyli bajt mniej znaczący staje się czasami bajtem bardziej znaczącym i na odwrót. Nie mam za bardzo koncepcji, jak to obejść. Zależy mi na tym, aby w pamięci mikrokontrolera mieć dwuelementową tablicę (każdy element typu char), w której pierwszy element...
To działa tak samo dla dowolnej ilości bajtów. Liczbę wejściową wysuwasz z najstarszego bitu najstarszego bajtu Czyli przesuwasz liczbę 32 bitową (mnożysz przez 2). Wysunięty bit (w znaczniku przeniesienia) wprowadzasz do najniższego bitu najniższej tetrady liczby BCD. Przed każdym kolejnym przesunięciem sprawdzasz każdą tetradę czy nie jest >=5...
Witam, Nie bardzo wiem, czego tu można nie rozumieć - masz po 8 bitów na kolumnę = 1 bajt. Z całego napisu do wyświetlania generujesz N bajtów (w najprostszym przypadku 1 znak = 5 bajtów, bo znak = 5x8 bitów) i zapisujesz do tablicy. W trybie statycznym po prostu wyświetlasz pierwsze 50 bajtów z tablicy multipleksując kolumny. W trybie dynamicznym (scrolling)...
Witam, mam problem z komunikacją między dwoma procesorami ATmega8. Jeden w wersji 16PC drugi w wersji L-8AI. ATmega 8L chodzi na napięciu 5V. Jeden ma być na zewnątrz (8L), drugi jest dopinany kabelkiem w którym jest zasilanie i UART. Programuje układy w BASCOM. Problem jest taki, że jak używam instrukcji Printbin i Inputbin transmisja działa - nie...
to ja jeszcze dodam, że zdecydowanie ładniej jest uzywać typów uint8_t zamiast unsigned char oraz uint32_t zamiast unsigned long. Są to typedef'y dodane do standardu C99 języka C: Jest to też poprawnie zdefiniowane dla avr-gcc w bibliotece avr-libc - plik inttypes.h - zauważ, że wszystkie funkcje z avr-libc operują właśnie na typach z inttypes.h, nigdy...
powinno Ci wyjśc 10. Nie zapominaj że jest to w realnych liczback 1.00 * 0.1 czyli w realnych liczbach 0.1 Jezeli 40 to masz zepsuty procesor :) Na przykład jak potrzebujesz 3% z 95674355.45zł to robisz mul(3, 9567435545) Sprawdziłeś swoja teorię? Nie, a ja sprawdziłem, chcesz zobaczyć kod i okienko debugera czy sam sprawdzisz? Kod: static u64 a=0x100,b=0x10,c;...
Rozpisz sobie jak wygląda przesuwanie bajtu o 1, 2, 3, 4, 5, 6 i 7 bajtów to zobaczysz lub przejrzyj plik lss z kompilacji programu, który to robi. Dodatkowo w C jest duża szansa na promocję typów do int i wtedy to się robi prawdziwa masakra.
Mam napisany dość spory program wykorzystujący dwie tablice, z których jedna ma 48 pozycji, a druga 16. W kodzie są odwołania do poszczególnych bajtów i tego nie chcę zmieniać. Problem w tym, że teraz muszę powiększyć obie tablice o 4 bajty ale w taki sposób, żeby dotychczasowe wartości znajdowały się po pierwszych 4 dodanych bajtach. Czyli muszę mieć...
Masz rację tak właśnie jest na końcu preambuły wysyłam 0x10 i na tej podstawie przesuwam początek bajtu. jednak nie widzę takiego działania w interrupt.c z oryginalnej noty .
Witam męczę sie nad transmisja rs232 między uC a PC. Wymyśliłem juz jak stabilnie odbierać w kompie za pomocą komponentu Comport 2 bajty. Niestety próby połączenia ich w 1 liczbę gdzie 1 bajt jest młodszy a 2 starszy czyli w liczbę 16 bitową nie za bardzo mi wychodzą. Próbowałem przemnażać młodszy bajt przez 256 albo przesuwać zawartość rejestru operatorem...
Boski Dialer - tak, w przypadku kodu szesnastkowego można coś takiego zrobić: bierzesz bajt i robisz iloczyn logiczny z 0x0f i już masz młodszą cyfrę hex. Potem tę samą cyfrę przesuwasz o 4 pozycje w prawo i masz starszą cyfrę.
Dzięki za odzew. Jeszcze raz przedstawię problem. Funkcja FC daje mi 8 wyjść typu BOOL od P0 do P7, a ja chce to złożyć w jeden bajt PM. Co musze zrobić? 1. Zamiast wyjść zrobic TEMP, to jasne . 2. Zrobić sobie zmienną PM_tmp typu byte, jasne 3. Network1: MOVE PM do PM_tmp OK, rozumiem. 4. Network2: |---|L0.0|---(L0.1) i tu nie rozumiem. Jeżeli L(0.0)=1...
Witam, Nie znam tego typu panela HMI ale do wyodrębniania bajtów często korzysta się z przesuwania bitów w lewo i prawo plus dodanie ewentualnej maski. Pozdrawiam,
(at)zumek Dzięki za kod, ale nie do końca wiem jak on działa. Szkoda :( W1 to tablica wskaźników na W, przesunięta o dwa miejsca? Mylisz się :( W1 , to jakby wskaźnik na W powiększony o 1 element tablicy W , czyli 2 bajty . Natomiast tablica wskaźników , to ... nie z tej bajki ;) A dokładnie rzecz ujmując , to Bascom definiuje tablicę W1 , w obszarze...
Mam takie pytanie. Dajmy że przesunełem rejestr na 1 bit. Jak teraz zachowuje się wyjście pierwszego bitu względem wprowadzenia DATA? Czy jeśli będę chciał przesłać przez niego dane to czy będzie mrugał normalnie? Chodzi o to żeby dane przesyłać najpierw przez wyjście pierwsze np. jednego bajta, później przesunąć rejestr na drugi bit, znowu wysłać jednego...
u16 rxData=0; u08 data1=0, data2=0; data1=0x69; //MSB data2=0x8C; //LSB rxData=rxData+data1; // <- Po co ta kombinacja z dodawaniem?? rxData=rxData<<8 ; // <- Tu jest podstawowy błąd - przesuwasz liczbę 8 bit o 8 bit.... w wyniku zawsze 0. rxData=rxData|data2; Pamiętając, ze C umożliwia wykonywanie kilku działań w jednej linii (więcej......
Tak też myślałem, sporo taktów procka.... Właśnie pomyliłem kolejność bitów szyny danych i myślałem, że załatwię to w kilka taktów a tu brrr. Nie znalazłem niestety w AVR nic oprócz przesuwania bitów, przesuwania cyklicznego czy zamiany nibli i obawiałem się, że tak właśnie będzie...:-(. Dzięki...robiw
Zawsze możesz się pobawić czymś takim: Portb.ZMIENNA = ZMIENNA2 '(bajt 0-7=> bit 1/0) Portb = ZMIENNA3 '(bajt 0-255) A zmiennymi operować, jak chcesz. PS. Help i sample nie bolą.
Witam wszystkich Elektrodowiczów! Mam pięć bajtów: unsigned char up, down, left, right, select; up = 0000 0001; down = 0000 0001; left = 0000 0001; right = 0000 0001; select = 0000 0001; W czasie działania programu wszystkie zmienne mogą przyjmować wartość tylko 0000 0001 lub 0000 0000. Aby informacje o tym, czy dana zmienna jest ustawiona (0000 0001)...
Dzięki pomocy kolegi tadzik85 Funkcja wygląda tak: [syntax=c]void SendSpi(uint16_t bajt){ SPDR=bajt>>8; while( !(SPSR & (1<<SPIF)) ); SPDR=bajt; while( !(SPSR & (1<<SPIF)) ); PORTB |= (1<<CS); PORTB &= ~(1<<CS); }[/syntax]
Dzięki! :-) O to chodziło. Jednak - jak rozumiem - dotychczasowe odwołania do bufora (których jest kilkadziesiąt w programie), po zmianie zwykłego bufora na unię, będą musiały zostać zmodyfikowane (u.bajty[x] zamiast jak dawniej bajty[x])? A nie da się przypadkiem tym sposobem zamienić litlle endian na big endian - zamiast tradycyjnego przesuwania bajtów...
No to podsumujmy: - uart_getc() zwraca znak z bufora, dekrementuje licznik znaków i przesuwa wskaźnik w buforze nawet wtedy, gdy bufor jest pusty. - W przypadku przepełnienia bufora nowe znaki będą przyjmowane, a licznik będzie inkrementowany. Przy buforze na 4 bajty po nadaniu ciągu "123456" odbiorca odbierze "345634". - Od czasu do czasu nastąpi zgubienie...
Great! Działa, na początku myślałem, że przesuwa się o jeden bit za daleko więc instrukcję brpl zmieniłem na ... brbc 1,loop ... potem dopiero stuknąłem się w czoło :lol: nie powinno się pisać po nocach :D dzięki wielkie, Eagle, szkoda, że nie da się tego zamknąć w dwóch instrukcjach. Chciałem jeszcze zakombinować coś z kopiowaniem bitów bst i bld,...
witam. moim skromnym zdaniem bascom sie do tego nie nadaje. takie opoznienia i to jeszcze z przesuwanie bajtu powinno sie napisac w assemblerze tym bardziej, ze dokladnie wyliczysz sobie co i jak. jezeli chodzi o maskowanie bitu to nie za bardzo rozumiem co masz na mysli. bit mozna zamaskowac instrukcja [anl] ale nie wyrzucasz go. mozesz rowniez skasowac...
.. myslalem, ze jest do tego jakies 'tajemne' polecenie :) widze, ze bez nakladania masek, przesuwania sie nie obedzie..
Ten opis sie zgadza ale jest trochę nieczytelny, kolejność jest taka: enable H->L to jest start transmisji data musi byc ustawiona przed narastającym zboczem clk clk L->H wpisuje wartość bitu do rejestru clk H->L przesuwa rejestr dla następnego bitu i następnie zmienia się data (to może trwać dowolnie długo byle zdążyć przed następnym impulsem clk)...
Freddie masz racje, juz rozwiązałem problem. Podaje poniżej tą pętle dziki ktorej mozna to zrealizowac, w razie jakby ktos mial z tym tez problem: Zalożenia: tablica[l] - jest to tablica o rozmiarze 9 w ktorej mam umieszczone te 9 bajtów ktore sa przesyłane z DS18B20 do uC char tablica[9]; unsigned char element; int l,m; for(l=0;l<9;l++) { element=tablica[l];...
Witam, Jak w temacie. I tak samo przesuwanie logiczne w prawo lub w lewo, ale bez utraty "wypchanych" bitów. Pzdr. Poprawiłem temat i pisownię. Zamykam.
Bez problemu można uzywać operatorów logicznych AND oraz maski. niestety nie wiem, czy przesuwać bity można było :( (ah, stare czasy)
Rozkaz może przybierać jedynie 11 wartości i tyle (te wszystkie wartości) sprawdzam w Case... (skróciłem listing) i aktualizuję wybrany suwak. Czy Dana[2] będzie już gotowa po sprawdzeniu warunku? Wątpię, bo przecież przy baud=600 b/sek następny bajt, powiedzmy, że ten Dana[2] przyjdzie dopiero po około 6.25ms a warunek myślę, że będzie sprawdzony dużo...
tomasz_kwasniewski: no wlasnie probowalem cos zdzialac z plikami od Ciebie bo wczoraj je sciagnelem ale troche dla mnie to skomplikowane. Jam jest programista C i jeszcze raczkuje w vhdlu. Pojelem juz myslenie w kategorii jezyka sprzetu ale jeszcze nie tak jak trzeba. Przy transmisji asynchronicznej nie wazne jest ktore zbocze(lacze uklady 1 linia wiec...
Witam Nie będę się zagłębiał w obsługę wyświetlaczy, zakładam że potrafisz wyświetlić cokolwiek na wyświetlaczu. Problem Twój jest prosty do rozwiązania. Postaram się to w miarę obrazowo napisać. Rezerwujesz sobie w pamięci 6 + 3 bajty na dane do wyświetlacza. Ładujesz w programie na początku do tych komórek dane w sposób następujący: mov wys1,#znak_o...
OK. Działa :) Dzięki chłopaki. Wszystko przez to że w kursie C który czytałem pisało:" w ce mamy tylko zmienne szesnastkowe, dziesiętne i ósemkowe", a jak widać są binarne :D Co do zsziftowania to jak myślicie jaki algorytm jest szybszy: 8 ifów po kolei: if (liczba & 0b00000001) if (liczba & 0b00000010) ... if (liczba & 0b10000000) czy jeden if w pętli...
Spiout(16*Da1+Da2) 'albo jakoś tak Spiout (16*Da1+Da2) Nie znam na pamięć funkcji bascoma i nie mam go pod ręką, możliwe że źle użyłem w tym przykładzie funkcji Spiout, ale to co jest w nawiasie to cały bajt połączony z 2 połówek. Myślałem, że jest tam funkcja swap która zamienia półbajty, ale w bascomie swap służy chyba do czegoś innego....
Ok. Już podaje: #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h > //makra DS18B20 #define WE 2 #define PORT_1Wire PINC #define SET_1Wire DDRC&=~_BV(WE) #define CLEAR_1Wire DDRC|=_BV(WE) //--------------------------------------...
Witam.Mam pytanie do osób które używały petits.Mniej więcej rozumiem o co biega ale mam pytanie dotyczące funkcji pf_read(); FRESULT pf_read ( void* buff, /* Pointer to the read buffer (NULL:Forward data to the stream)*/ WORD btr, /* Number of bytes to read */ WORD* br /* Pointer to number of bytes read */ ) Na razie odczytuje dane...
Rozwijając to co pisał snnaap o nadpisywaniu, dla pewności lepiej wszystkie wartości maskować/warunkować, wtedy nie ma żadnych nieprzyjemności, jeśli zapomni się o dozwolonych wartościach. Dodatkowo, coś mi nie pasuje przy wysyłaniu danych po SPI. Zakładając, że funkcja wysyła bajt, to w pierwszej linii wysyłasz młodszy bajt słowa, a za drugim razem...
Mam delikatny problem związany z wyświetlaczem z kontrolerem SSD1963. Otóż, cała inicjalizacja wyświetlacza przebiega poprawnie. Wyświetlanie obrazu też wygląda, że jest ok, jednak tylko wtedy gdy obraz do framebuffera ssd prześlę gdy wyświetlacz jest wyłączony (przed wywołaniem komendy 0x29). Gdy próbuję obraz załadować po komendzie 0x29 wyświetlany...
Markos80, naprowadziłeś mnie, waliłem babola z podstawówki, zamiast przesuwać w lewo to ja ciągle w prawo :) byte_a := byte_of_bits + SHL(to_byte(value),6); byte_b := to_byte(value); Dziękuje za pomoc.
Panowie, w pracy mam spore problemy z netem, także teraz w domu na spokojnie wszystko sobie przygotowałem, jednak mam ten sam problem> W załączniku przesyłam mini projekt skupiający się tylko na przesuwaniu rejestru błędów w bloku danych: W UDT2, mam przygotowaną strukturę błędu, która składa się z numeru błędu oraz z daty i godziny. Data i godzina,...
No to tak. Sprawdzałem bardzo dawno temu- mniej więcej w zeszły czwartek. Nie działało dobrze. Teraz jeszcze raz. Zaremowałem puste przerwanie i wstawiłem w przerwanie od ADC TIFR |= (1 << TOV1); Źle chodzi. Pokazuje co 1s napięcie z pierwszego kanału a z drugiego 0.00. W DS piszą o Trigger source jako o zdarzeniu TIMER1 overflow. str.218. Wysoce...
Tak się dzieje z oknami z konkretną zawartością czy z każdym? Zainstalowane jakieś upiększacze systemu? Z każdym oknem, wszystko jedno, czy to okno exploratora Windows, czy np. przeglądarki www. Nie używam żadnych "upiększaczy". Wygląd jest ustawiony w tryb "Styl klasyczny Windows". Myślałem, że to wina "rozciągnięcia" tapety, więc ją wyłączyłem, co...
Tak, obecnie jest sytuacja ze screenu 2. Dysk jest widoczny, ale nie można go otworzyć, we właściwościach jest 0 bajtów dla pozycji: Wolne miejsce, zajęte miejsce, Pojemność. Przy próbie otworzenia jest komunikat: W weekend będę miał dostęp do drugiego komputera i spróbuję na niego zgrać kopię zapasową najważniejszych danych. Linuxa jeszcze nie próbowałem,...
Możesz to kolego jakoś bardziej rozwinąć z tym timerem? Jeżeli chodzi o wysyłanie bajtów przez spi to używam timera.
DZIESTYS: MOV A,LICZBAMłODSZY BAJT CLR C SUBB A,#10H MOV LICZBAMłOSZYBAJT,A MOV A,LICZBASTARSZYBAJT SUBB A,#27H MOV LICZBASATRSZYBAJT,A INC DZISIATKITYSIECY JNC DZIESTYS DEC DZIESIATKITYSIECY MOV A,LICZBAMłODSZYBAJT ADD A,#10H MOV LICZBAMłODZYBAJT,A MOV A, LICZBASTRASZYBAJT ADDC A,#27H MOV LICZBASTRSZYBAJT,A TYSIąCE: ... JAK WYZEJ TYLKO ODEJMOWAć LIICZBę...
Boberov Unbelievable Boot Loader V0.1 2013 Na wstępie skrócone informacje na temat projektu którego szerszy opis znajduje się w dalszej części tekstu. Program bootloadera przeznaczony jest dla ATMEGA8 (po minimalnych zmianach każdy AVR z wystarczającą ilością pamięci), umożliwia programowanie procesora oraz zainstalowanych w systemie pamięci szeregowych...
No ok rozumiem pomysł, powinno zadziałać samo przesuwanie. Wystarczy 7 bajtów (7x8=56) Jak zapewnić sobie w Bascomie te 7 rejestrów na wyłączność? Tzn jak sprawić żeby we wstawce asm. nie skasować czasem jakiejś bascomowej zmiennej? A jeśli sie nie da w rejestrach, to do których komórek pamięci zapisywać skladowe bajty rejestru żeby nie nadpisać jakiejś...
Pojemność bufora jest ograniczona ilością pamięci operacyjnej (RAM+HDD), ale ilość danych które można nim przesłać nie jest ograniczona w żaden sposób. Strumień wejściowy w Windows to uchwyt pliku typedef struct _STARTUPINFO { [...] HANDLE hStdInput; a plik wcale nie oznacza fizycznego zbioru bajtów na dysku, sterownik udostępniający plik...
Witam Mam jedno pytanie. Mam przetwornik komunikujący się po SPI (AD5363). "Mój" ARM wspiera wysyłanie 8 oraz 16 bitowe, natomiast potrzebna mi ramka 24 bitowa... Czy jest jakaś szansa aby wykorzystać hardware'owe SPI, czy raczej muszę sam napisać procedurę wysyłki 24 bitów ? Nie jest to problem ale chcę wiedzieć czy jest taka możliwość. Można na przykład...
Oto mój program wykorzystujący LCD w trybie 4-bitowym, śmiga jak ... Jest tam obsługa LCD i 1wire, procedurki LCD łatwo wyłowić :) // ****************************************... // Project: Obsluga układu DS18B20 // Author: Zbigniew Chrobot // Module description: pomiar temperatury z DS18B20 kwarc 4MHz // wyswietlanie na...
Witam, Posiadam Atmega8 + DS18B20 + wyswietlacz LCD. 3ci wieczor nie umiem znalezc bledu w mym kodzie odczytajacym temperature. Caly czas pojawia sie 170. Inicjacje przechodzi poprawnie, odczyty niby tez ale pokazuje zla temperatura, naprawde nie mam juz pomyslow co jest nie tak... Prosze o sugestie co mzoe byc nietak. Dziekuje //KONFIGURACJA PORTOW:...
Witam. Myślę że ten dział najbardziej to tego pasuje ale jeśli moderator ma inne zdanie to proszę o przeniesienie ale niekasowanie:) Postaram się opisać wszystko najdokładniej jak mogę. Otóż zakupiłem taki układzik jest to przetwornik analogowo-cyfrowy (SAR) z interfejsem SPI, tutaj test jego datasheet: Od razu mowię że ten schemat to tak na szybko...
Witam. Odgrzebuję temat i mam nadzieję, ża moje informacje przydadzą się autorowi wątku. Sam gram na instrumentach muzycznych m.in. akordeonie i keyboardach. Sam też naprawiałem akordeony i dlatego dobrze znam ich budowę. Jeżeli chodzi o zbudowanie takiego kontrolera MIDI do akordeonu to jest to dość prosta sprawa. Zacznijmy od budowy samego akordeonu,...
Witam. Mam problem z napisaniem sterowania grzałką do wytrawiarki. Program ma za zadanie wyświetlać na LCD aktualną temp. i grzanie/niegrzanie płynu. Po naciśnięciu S1 wchodzę w opcje do ustawiania temperatury docelowej (S2 do góry, S3 w dół). Cały problem polega na tym, że przycisk S1 w ogóle nie reaguje (nie wchodzi do menu, wyświetla tylko sub praca)....
Może nie umie wstawiać? $regfile = "m88def.dat" $crystal = 1000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4 Config Portd = &B00001111 'portd 0 1 2 3 jako wyjscia portd 4 jako 1wire 5 6 7 jako wejscia Portd.5 = 1 Portd.6 = 1 Portd.7 = 1 Portd.3 =...
Zgodnie z rysunkiem 6-1, adc to młodszy bajt, więc nie wiem w jakim celu go przesuwasz. Dodatkowo starszy bajt przesuwasz o zbyt mało miejsc. Operacja powinna wyglądać tak: data musi być zmienną 16-bitową. PS. Zakładam, że połączenia i konfiguracja SPI są poprawne
Timer liczy niezależnie od innych peryferiów, tak samo UART wysyła dane bez pomocy programu (oczywiście poza wpisaniem danych do bufora). Niech timer odmierza 1ms, w przerwaniu odczytujesz stan wybranej nogi i umieszczasz w pomocniczym bajcie. Zwiększasz licznik bitów o jeden i przesuwasz zapisany bajt w lewo. Tak dzieje się 8 razy, przy czym za 8 razem...
tak to jest najszybsza metoda wykorzystujaca przesuwanie i dodawanie wartosci 3 .Porownanie czasu tej operacji w asemblerze a sposobow napisanych w basicu pokazuje jakie to sa roznice.Algorytm jest kilka razy szybszy i kilka razy mniejszy.i ta metoda nie jest tylko dla 8-bitowych liczb lecz dla kazdej wielkosci liczby.po prostu zamiast 8 bitow przesuwamy...
Witam, napisałem prawie całą obsługę tegoż urządzenia w assemblerze, ale niestety po odbiorze bajtów scratchpada mam same zera, podejrzewam, że problem leży w procedurzeodbioru bajtu, prosze spojrzeć: readbyte: push R16 push R17 push R18 clr R18 clr R16 ldi R17,8 read: cbi PORTB, 0 sbi DDRB, 0 ldi R18, 1 rcall waits ;procedura mikrosekundowa...
EEprom , jak najbardziej jest zabezpieczony . Oczywiście nie zwykły eeprom . Np. Blaupunkt stosuje pamięć w radiu samochodowym eeprom , która po zaprogramowaniu przesuwa wszystkie bajty o cztery adresy , a instnieją jeszcze inne zabezpieczenia
A nie prościej zamiast ciągle przesuwać te bajty, to w przerwaniu zmieniać pozycję startową, za każdym razem +1 i używać indeksowania modulo 8. Nic nie trzeba przenosić, wszystko robi się samo, prosto i przyjemnie :)
Ja od dwóch dni walczyłem bo podczas przeróbki ogromnego kawałka kodu zapomniałem rzutować pointer na uint8_t* Zamiast przesuwać o 1 bajt to jechało o rozmiar struktury. Nie ma to jak szukanie igły w stogu siana \o/
Pamięć jest zorganizowana w komórki 16-bitowe, objawia się to np tym że wskaźnik programu wskazuje na słowo (2 bajty) a nie na bajt. Wszystkie instrukcje muszą być więc wyrównane do granicy dwóch bajtów. Jakkolwiek z poziomu samego programu pamięć flash jest zorganizowana bajtami, więc spokojnie można w niej umieszczać tablice bajtów bez utraty pamięci....
Tak proste funkcjonalności jak termometr można zrobic interpreterem. Oczywiscie szybkosc wykonywania takiego interpretowanego bajtkodu zalezy od tego, jak ten interpreter jest napisany, i od struktury samego bajtkodu. Jeśli zakładamy, że interpreter 'widzi' wyswietlacz/klawiature/inne peryferia poprzez odpowiednią warstwę abstrakcji, to nie ma kłopotu...
Witam, nie znam tej biblioteki, ale patrząc na zamieszczony kod, myślę, że najlepiej będzie z dwóch 16 bitowych zmiennych (joyX i joyY) zbudować jedną zmienną 32 bitową, przesuwając jedną ze zmiennych joyX lub joyY o 16 bitów w lewo, dodając drugą i wysłać te cztery bajty. Po stronie odbiornika trzeba wykonać operację odwrotną. Mam na myśli zmienne...
No trochę nie po polsku napisałem. Już poprawiłem post. No to mało widziałeś skoro takiego nie widziałeś. Przecież za 5,6,7,8,9,10-cio bitowe, więc i 16 czy 32 bitowy też się znajdzie. Oczywiście nie mówię że są popularne. A do tego ja napisałem wyraźnie że taki przesył jest realizowany programowo. Podałem tylko analogię do UARTa, który to przy 8-miu...
W tej wersji ciężko będzie Ci pomóc. Skoro program się rozbudowuje to nie ma co brnąć w rozwiązania z pętlami. I pora to zrobić porządnie czyli: 1. Na przerwaniach 2. Na ramce danych i dodatkowo np. z sumą kontrolną. Mimo że raczej tego nie pochwalam, to poratuję gotowcem bo akurat go mam :D Kod odbiornika: [syntax=basic4gl] Dim Buffer_in(8) As Byte...
Ja mam poprawnie działający I2C z DMA. Wklejam jeśli jeszcze jest Ci potrzebny, jak nie może ktoś inny skorzysta. Konfiguracja I2C ( standardowo) [syntax=c] void Config_I2C() { I2C_InitTypeDef I2C_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2... ENABLE); I2C_InitStruct.I2C_ClockSpeed = 400000; I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; I2C_InitStruct.I2C_DutyCycle...
Niestety nie rozumiemy się. Problem w tym że rejestr Z w momencie wywołania rozkazu LPM nie wskazuje zgodnie z etykietą DANE własciwego miejsca w kodzie programu (który w bascomie też można podejrzeć) a wskazuje za to słowo poprzedzające. I nie chodzi tu bynajmniej o przestawienie w kodzie programu kolejnych bajtów na zasadzie "SWAP" pozdrawiam A czy...
Zainspirowany podcastami o historii komputerów (podcast #19 - Magnetofon w służbie informatyki Komputery, nawet wczesne modele z lat 50tych, potrafiły wykonywać obliczenia z niezwykłą prędkością i wydajnością. Wciąż jednak problemem była pamięć. Dostępne formy RAMu mogły pomieścić program, trochę danych wynikowych i zmiennych potrzebnych do obliczeń...
Dziękuję za podpowiedzi. Mało precyzyjnie się wyraziłem, ale i tak wiedzieliście o co mi chodzi. Wprowadziłem małą poprawkę w swoim początkowym pytaniu. Tak chodzi o przedstawienie tych działań na liczbach stałoprzecinkowych w kodach znak-moduł (ZM) oraz uzupełnienie do dwóch (U2).Oczywiście oddzielne działania wykonuje dla ZM jak i dla U2 nie łącze...
Najpierw za pomocą pf_lseek musisz zarezerwować odpowiednio duży rozmiar pliku potem wracasz na początek pliku (pf_lseek(0)) zapisujesz co trzeba i kończysz zapis pf_write(0,0,&s1); A skąd posiadasz takie informacje? Co to według ciebie oznacza "zarezerwować odpowiednio duży rozmiar pliku"? Funkcją pf_lseek(ofs) możesz przesuwać wskaźnik zapisu tylko...
Witajcie moi drodzy. Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części poznamy sterownik wyświetlacza LED MM5450, połączymy go z PIC18F2550 i napiszemy od 0 implementację ich komunikacji. Docelowo użyjemy MM5450 do wysterowania wyświetlacza LED 5 na 5. Cały proces powstawania układu na płytce stykowej oraz programu...
Dzisiaj przedstawię prosty system czcionki dla znaków ASCII przeznaczony na wyświetlacz matrycowy z Arduino Uno R4 WiFi. Przy okazji też zademonstruję jak można zrobić animację przesuwającego się tekstu w oparciu o umieszczone tu kody. Implementacja czcionki będzie 100% DIY, napiszemy ją razem i umieścimy w naszym sketchu, chociaż samą czcionkę będziemy...
Dobra. Udało mi się w końcu zamknąć tą szufladę. W timerze mi sprawdza tego booleana. (at)Logan: Dzięki, ale chyba w helpie i gdzieś jeszcze wyczytałem, że nie ma sensu używać DataPacket jeśli nie ma się znaków na start i na stop ustawionych. Została końcówka. Ponieważ procek nadaje ciągle - bajt starszy, młodszy, starszy, młodszy - to w zależności,...
Mam problem z odczytanie data streamu wysylanego przez sterownik silnika krokowego RDK STEPPER. Uzywam do tego funkcji FTDI readfile uruchamianej przy taktowaniu komponentu timer. Dodam ze ramka z parametrami ma dlugosc 7 bajtow. 1- znak rozpoczecia,2-dlugosc ramki,3-6 dane,7 suma kontrolna. Problem polega na tym ze wraz z odczytaniem ramki zmienia...
Przy dłuższych liczbach bardziej opłaca się użyć agorytmu z przesuwaniem i dodawaniem a działa on tak (4 bajty x 4 bajty, wynik 8 bajtów): Przygotuj 8 bajtowy rejestr komórek w pamięci na wynik, w postaci: |Mnozna|00000000h| Gdzie 4 starsze bajty to mnożna a cztery młodsze to zera. Teraz wykonujesz pętlę 32 razy (4 bajty) Przesuwasz 8 bajtowy wynik...
Masz napisać procedury mnożenia liczb: 1 bajtowej przez 1 bajtową (8x8) wynik będzie 16 bitowy (2 bajty) 2 bajtowej przez 1 bajtową (16x8) wynik będzie 24 bitowy 3 bajty 2 bajtowej przez 2 bajtową (16x16) wynik będzie 32 bitowy (4 bajty) Procedura przebiega tak w kodzie naturalnym binarnym: 1. Przygotowujesz rejestr wyniku o długości równej sumie ilości...
Witam.Jak w podanym programie moglbym zwiekszyc opoznienia potrzebne do inicjacji wyswietlacza.Asembler jest czarna magia dla mnie wiec prosil bym o gotowa recepte.Z gory dziekuje ;Data: 04.06.2007 ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^... ;Program obslugi PT100 na AVR ATmega8 - pomiar 2 temperatur i wyznaczanie wilgotnosci ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
;* ;***************************************... ;*PROCEDURA WYLICZANIA SUMY KONTROLNEJ Z NUMERU SERYJNEGO UKŁADU 1-Wire ;***************************************... ;* ;* ;*******************************OPIS****... ;*Kolejne bajty numeru seryjnego...
Wolisz rybę czy wędkę? Jeśli to drugie, to czytaj dalej. Najprostszym sposobem konwersji dowolnie długiej liczby binarnej do pisemnej postaci jest ciągłe dzielenie jej przez 2, a wynik (ascii string) jest zwiększany o odpowiednią potęgę dwójki jeśli dzielenie zwróciło resztę. Zmienne które potrzeba: ilość bitów liczby binarnej i ilość cyfr wyniku, do...
Przedstawiam projekt inteligentnej stacji meteorologicznej. Jest to nietypowa konstrukcja, zdolna do przewidywania temperatury powietrza atmosferycznego na kolejne 24 godziny. Wykorzystałem do tego celu sztuczną sieć neuronową. Stacja rejestruje co minutę wartość temperatury oraz prezentuje na wyświetlaczu w formie graficznej rozkład temperatury z...
Wzmocnienie wzmacniaczy zmienia ci tylko jeden współczynnik przez który mnożysz/dzielisz w programie, nie ma się czym przejmować. Czy czułość masz określoną dokładniej, niż rezystory ustalające wzmocnienie wzmacniacza? Bo jeśli nie, to nie ma powodu robić ponownej kalibracji po zmianie wzmocnienia. Czyli jeżeli na przykład czułość wynosi 175mV/g, to...
Być może rejestr kołowy to to samo co rejestr przesuwny. Tylko że nikt tutaj o takim nie pisał. Pisał za to o buforze kołowym. A to oczywiście jest co innego. Bufor kołowy to bufor w którym przemieszczasz się po bajtach za pomocą wskaźników (bez przesuwania elementów bufora). Z kolei rejestr przesuwny to: Po pierwsze operuje na bitach a nie bajtach....
Od czasu, gdy w przypływie szaleństwa, kilka lat temu udało mi się spłodzić pakiet zmiennoprzecinkowy na '51 (4 działania+ kilka podstawowych funkcji), cierpię na uczulenie w tym temacie. Dlatego proponuję prostsze rozwiązanie, które nie tylko uprości program, ale również powinno zredukować do minimum czas obliczeń. Stosowałem ten sposób parę razy do...
Witam, mam następujący problem z Arduino UNO. Otóż mam wyświetlacz z led 8x8 (1088bs), który podłączyłęm do arduino za pomocą rejestru przesuwającego (sn74hc595n). Generalnie program miał za zadanie zapalać odpowiednią diodę, której połozenie sterowałem małym pilotem. Wszystko pięknie działało do póki nie postawiłem poprzeczki wyżej i postanowiłem dodać...
Dziękuję za duże zainteresowanie. START chciałbym wysyłać, ponieważ chcę sterować ekranem OLED i co za tym idzie muszę wrzucić do bufora 1024 bajty. Zawsze robiłem to w ten sposób, że wysyłałem START-> dane-> STOP. Może nie musiałem tak robić, ale wszystko ładnie działało na atmegach. Teraz chcę przetestować ten sam układ na xmedze i po prostu zdziwiło...
Witam. Chciałem zrobić sterownik wzmacniacza audio na bazie kitu AVT2829. Szczególnie zależy mi na uczeniu się dowolnego pilota. Zrobiłem płytkę przystosowałem do niej program, użyłem większego procesora (atmega8) no i program działa ale strasznie ułomnie. Procedura zapamiętania kodów z pilota przebiega jak należy ale już samo działanie jest strasznie...
Skończyłem dekodować większość z nich. tl;dr czy warto próbować zmusić OpenBeken do rozmowy z tym ściemniaczem? Z pewnością nie jest to zwykły protokół TuyaMCU. Czy łatwo jest napisać coś, co odbiera i wysyła te wiadomości, aktualizuje wewnętrzny stan ściemniania itp. Diody LED i przycisk są łatwe, ale jak przeanalizować 5-bajtowe wiadomości szeregowe,...
Jak na mój gust to wynik "wydalany" z DS18B20 jest ze znakiem, a Ty to wczytujesz wprost do uint... i jeszcze bity przesuwasz bez nadzoru nad tym co się robi w poszczególnych bajtach. EDIT: Jako Light-I rzecze przesówasz się przesuwasz wizualizuje.
najprostrzą metodą zabezpieczenia (zresztą napisałes) sie jest wyłaczenie przerwania na czas przesuwania bufora i to wszystko. Co do przepelnienia sie zapisu w procedurze odczytu z klawiatury nalezy tylko sprawdzac czy nie wychodzimy z licznikiem poz zakres n bajtów bufora Na przesuniecie 32 bajtów mamy czas okolo 10mkrS czyli oko 160 cylki przy 16MHz...
Masz zły sposób sprawdzania poprawności transmisji. Komp stacjonarny może powodować jakiś mały impuls na linii TXD podczas uruchamiania się komputera. Więc AVR odbiera go jako bajt. Potem wysyłasz 72 Bajty, ale AVR odbiera 71 bo wcześniej już odebrał jeden. I na koniec odbiera ten 72-gi i traktuje go jako ten ostatni bajt kontrolny. A on nim nie jest....
Otóż ten "adres" nie przesuwa o bajty, ale o długość zmiennej. Czyli jak masz Word to przesuwa o 2 bajty. Ale zawsze jest to wielokrotność 8 bitów. I przypuśćmy że nie jest istotne czy przesunie o długość zmiennej byte czy o długość zmiennej word... Jeżeli więc odczytujesz do zmiennej typu Word, to Lookup zawsze będzie odczytywało po 2 bajty. ...ale...
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...
Kolego BlueDraco, skompiluj to, pokaż co wyjdzie w ASM dla przerwania. Nie analizuj algorytmu, bo nie on jest problemem. Programowaniem (w tym mikrokontrololerów) zajmuje się już tak długo, że łohoho, skoro wziąłem taką tablicę lokalnie to uznałem, że tam może być (akurat tutaj nie musi, ale może), bo zostaje mi jeszcze sporo pamięci. Nie czepiaj się...
Witajcie moi drodzy Przedstawię tutaj przykład użycia 32-bitowego mikrokontrolera PIC32MX250F128B w roli hosta USB obsługującego pendrive (zapisującego i odczytującego z niego dane). W temacie opiszę najpierw płytkę którą pod tego PICa zaprojektowałem, a potem przykładowe kody obsługi pendrive w języku C, w środowisku MPLAB X i kompilatorze XC32. Wszystko...
nie pamiętam dokładnie ale zdaje się, że na pewno jest tam jakaś instrukcja typy swap czy jakoś tak, która zamienia miejscami 2 połówki bajtu. Czyli twoje 4 bity przesunie do drugiej połowy a potem wystarczy że dasz sobie instrukcję and 0b00001111 która zresetuje ci te najbardziej znaczące bity ;) bo też nie pamiętam czy jest wprost przesuwanie bez...
Witam wraz z kolegą robimy układ elektroniczny na ATTINY 2313, który docelowo ma generować dźwięk na PWM-ie. Dźwięk ma być zapisany na pamięci FLASH Atmela - AT45DB161D. Schemat wygląda następująco: Po stworzeniu płytki i wlutowaniu elementów zabrałem się do pisania kodu. Oto zamieszczam kod assemblerowy mojego programu: .include "tn2313def.inc"...
Zwróć uwagę na to że: 1. Nie da się skasować pojedynczego bajtu. Skasować możesz tylko cały segment czyli dla segmentu INFO jest to 128B lub 64B a dla pozostałych segmentów flasha - 512B. 2. Zapisując dane do Flash'a wcale nie musisz go wcześniej kasować, bo zapisywane dane będą AND'owane z obecną zawartością Flash'a. Teoretycznie może wyglądać to tak...
Ale czy algorytm obliczania CRC zależy od wyboru wielomianu grnerującego i od wartości startowej? Proponuje wykorzystać gotową bibliotekę util/crc16.h dla C w AVR Jak mi powiesz jak to zrobić, to chętnie skorzystam. Mam 1k kodu w asm. Podobno wstawek w c nie daje sie do asm więc nie uśmiecha mi sie przepisywać tego na C tymbardziej, że w C nic nie pisałem....