1. Kod można skrócić o połowę. 2. Stosuj sobie przesuniecie bitowe zamiast liczb szesnastkowych bo można się pogubić. 3. To nie C++ tylko C.
Weźże zapisz te wartości binarne normalnie, z przesunięciami bitowymi, co?
Możesz wysyłać jako 16-bitowe SPI. Musisz tylko pamiętać, że kilka ostatnich bitów będzie ignorowane i odpowiednio przesunąć dane
Tez mi sie wydaje dziwne ze nie mozna tak zrobic ale niestety tak jest.Zrozumielem dokladnie o co ci chodzilo jako ze kiedys sam lamalem sobie glowe nad asmem ale w razie jakby chciec to zrobic w ten sposob lepiej jest dac przesuniecie bitowe bo bedzie ono efektywniejsze.
jednak nie potrafię zrozumieć tego zapisu Jak przesuniesz jedynkę o 3 pola w lewo to masz wartość 8 (innymi słowy to jest *2^n). | to suma logiczna (OR) - czyli zapis (1<<3|1<<5) oznacza ustawienie jako 1 bitów 3 i 5 licząc 0:7. czyli sprawdzać czy jest wciśnięty Negacja logiczna.
XOR to nie jest odejmowanie. negacja z dodaniem jedynki a pozniej OR to jest odejmowanie. Żebyś lepiej zrozumiał, xor nie daje ci przesunięcia, w związku z tym jeśli przesuniecie w działaniu powinno nastąpić to xor nie zadziała jak odejmowanie. przykład: 12 - 8 = 4 i 12 xor 8 = 8, to tak jak byś w systemie dziesiętnym próbował odjąć od 2 liczbę 8. Jeśli...
Witam 1. Proszę w google wpisać słowo klucz "AVR operacje bitowe" ( >> << & ^ ~) 2. Dobrze użyć #define do opisania co to jest LED0, LED1, jeśli zmieni się miejsce przyłączenia diody to później trzeba będzie pilnować każdego odwołania do takiej diody. 3. Nie ma potrzeby zmieniać stanu wszystkich 8 bitów portu D, wystarczy przesunąć ten...
Na mój gust to tam jest byk bo na rysunku nr 2 jest jak wół 1 bajt komendy, 1 bajt danych więc z tym oscylogramem coś nie halo. A jesli ma być zwrócone słowo 11,12,13 ect bitowe to trzeba nieznacząe bity zignorować i np. przesunąć w w prawo o tyle ile bitów będzie brakowało do slowa 16 bitowego.
Nie wiem też po co to dzielenie przez 16 w kodzie, przecież wystarczy przesunąć zmienną o 4 bity w prawo, a kod zmaleje w oczach :) Jeśli chodzi o C to przesunięcie bitowe liczby ujemnej jest niezdefiniowane w standardzie. Albert
Napisałem zanim się domyśliłem - dlatego wykasowałem pytanie o optymalizację :) Takie rzeczy ćwicz w Cmaniaku, bo kod kompilatora dla AVR może robić różne uproszczenia.
Dzieki wielkie, ustawilem przesunięcie bitowe tak jak powiedziales i zadziałało :)
Witam. Przeglądając elektrode znalazłem temat w którym opisana jest funkcja obsługi przetwornika ADC , jednak jest on 10-bitowy. Można programowo zmienić jego dokładność na 8-bit ?(prosiłbym o przykład w basic) Owszem można. 1. Przesunąć wynik o dwa bity w prawo. 2. Skonfigurować przetwornik tak, by podawał wynik wyrównany w lewo - wtedy wystarczy...
Jeszcze nie czytałem o przesunięciach bitowych, a o przerwaniach nawet nie wiem wszystkiego :) Na razie idę na łatwiznę(chcę aby działało, nie ważne jak ale, żeby działało), później funkcję odczytywania rc5 wykonam na timerach(o których też nie wiele wiem). Chyba po prostu zmienię z systemu dwójkowego na dziesiętny :) nie pomyślałem o tym wczoraj :)
To od razu mu trzeba wytłumaczyć co taki zapis oznacza, bo widać, że zaczyna. PD0, PD1..PD9, PC0,PC1..PC8 itd to są zdefiniowane numery pinów w porcie. Definicje te znajdują się pliku nagłówkowym który załączasz na początku każdego projektu pośrednio poprzez: [syntax=c]#include <avr/io.h>[/syntax] Pośrednio, bo dla wygody załączasz io.h, natomiast...
Jak byś poczytał o przesunięciach bitowych i to co napisał mirek to byś sobie sam odpowiedział na swoje pytanie. Nie mam książki Mirka ale wydaje mi się, że na pewno to jest tam opisane. Z resztą dwa posty wyżej jest odpowiedź, z tym, że się Mirosław pomylił bo (1<<1) != 0x01 :) Edit: Widocznie coś źle zrozumiałem, ale nie o to chodzi, autor musi...
Przetwornik ADC w ATMega może mierzyć napięcia nie wyższe, niż napięcie zasilania. Ponieważ korzystam z wbudowanej referencji, napięcie mierzone nie może być większe, niż 2,56V. W trybie 8-bitowym daje to rozdzielczość 10mV, zaś w trybie 10-bitowym 2,5mV. Pomiar prądu miał być w zamierzeniach realizowany na boczniku 0R1 wpiętym w masę pomiędzy zasilaczem,...
"a >> b" jest przesunięciem "a" o "b" bitów w prawo. "&" to nie porównanie tylko maskowanie (iloczyn logiczny) bitów. Wyrażenie "var>>(3*4)" przesunie zmienną o 12 bitów w prawo, czyli zwróci czwarty nibble (trzeci licząc od zera - stąd trójka, nibble ma 4 bity, stąd czwórka). "(var>>(2*4))&0xf" przesunie zmienną o 8 bitów w prawo i zamaskuje 4 najniższe...
Podoba mi się układ podany przez kolegę Urgon, tylko co jeśli zasilanie jest 12V? Można zasilić wzmacniacz z 12V, zmniejszyć wzmocnienie tak żeby na wyjściu było max 3V, ale czy wtedy nie traci się za dużo rozdzielczości? Przydałby się drugi wzmacniacz żeby przesunąć zakres pomiarowy bez zmniejszenia czułości. Osobiście ja bym się nie martwił o dokładność...
Czołem! trochę odgrzewam kotleta, jednak walcze teraz z tym samym czujnikiem w wersji SPI i mam problemy z ogarnieciem konwersji danych. Zgodnie z notą AN3785 Freescale pobieram i usadawiam współczynniki w zmiennych int16_t (justowanie do lewej). Staram się ogarnąć umysłem kolejne kroki przeliczeniowe i mam wrażenie, że w 1 kroku jest błąd. Mianowicie...
Wydaje mi się, że operacje przesuwania bitów robisz na ośmiobitowej zmiennej. Zadeklaruj ją jako 16-bitową albo - podstaw wartość high pod zmienną szesnastobitową - przesuń o osiem bitów - dodaj wartość low Przyszło mi coś innego do głowy - skoro zawsze przesuwasz o osiem to warto by zadeklarować zmienne w tym samym miejscu pamięci tzn. &16bit = &high...
Dziex, ale już wpisałem ldi bitcount, low(CRC16poly). Wcześniej mi to nie działało. Może zrobiłem jakąś literówkę. PS. Żeby wywalić starszą połówkę to trzeba przesunąć 8 razy z nie 4. Wiem że LDI działa tylko na liczbach 8-bitowych. Assembler AVR mam w jednym palcu. Dziwiłem się tylko że kompilator automatycznie nie wstawia młodszej połówki jak widzi...
żeby po samym naciśnięciu switcha Co Masz na myśli ? By zmienić kolejność przesuwania bitów Musisz albo nacisnąć drugi raz ten sam przycisk, lub też nacisnąć inny, ewentualnie jeśli skończy się przesuwanie w lewo, nastąpi przesuwanie w prawo. Jeśli ma być to ten sam przycisk to Musisz dodać informację, która będzie widoczna dla podprogramu, który z...
to jest dobre miejsce żeby sensownie zacząć: http://www.mikesflightdeck.com/diy_airco... Co do drivera to robi sie to inaczej. Cztery rezystory podciągające cewki do plusa. Cztery tranzystory ściągające cewki do masy. Osiem rezystorów sterujących tranzystorami (połączenie szeregowe po dwa) Do tego dwa sprzętowe wyjścia PWM (jedno na jedną...
http://obrazki.elektroda.net/23_12536510... Wszystko zaczęło się od wyświetlacza od kasy fiskalnej IBM 93F1090, który w roku 2006 dostał się w moje ręce. Chciałem go uruchomić lecz niestety nigdzie nie mogłem odnaleźć informacji jak się do niego dobrać. http://obrazki.elektroda.net/46_12536505... http://obrazki.elektroda.net/18_12536509...
Przepraszam, że odgrzewam stary temat, ale uznałem, że warto przypomnieć o tym projekcie. Nie chcę tu rozpoczynać dyskusji nt. jak zbudować profesjonalny wzmacniacz cyfrowy, ani też kłótni dot. sensowności tego projektu. Mój post, jak i mój projekt ma charakter czysto edukacyjny, służy pogłębieniu wiedzy na temat samych uC jak i cyfrowego przetwarzania...
1.Masz błąd w kodzie Zauważ, że jak czujnik wyśle wartość 100,200,300,400,505 to wszystkie diody się zapalą i tak zostanie. PORTC musisz zerować przed każdym zapaleniem diod, bo inaczej one nie zgasną dopóki W nie przyjmie wartości z zakresu 506..1023. 2.Lepiej gdyby kod był taki Do W=Getadc(5) Portc= &B00000000 //ustawiamy wszystkieg diody na 0 Portc.4=(W/512)...
zdebel tak znikł ten warning. piti___ niestety teraz dostaje inne bzdury... 4095,9 stopnia flapo213 po twoim poście postanowiłem dokładnie przeryć datasheeta i napisać od początku po swojemu procedure obsługi ds18b20. oscyloskopu nie mam i nie bede miec z kilku powodow a najpowazniejszy to $$$. oto napisana przezemnie od poczatku procedura obsługi z...
Chcąc wykluczyć czy popełniłem błąd w programie czy układ max6675 jest uszkodzony napisałem obsługę programową SPI. max6675.h: [syntax=c] #ifndef MAX6675_H #define MAX6675_H #define CLK_OUT DDRC |=_BV(PC0) //ustawia PC0 jako wyjście #define CLK_LOW PORTC &=~_BV(PC0)//stan niski na PC0 #define CLK_HIGH PORTC |=_BV(PC0)//stan wysoki na PC0 #define...
https://obrazki.elektroda.pl/5661040000_... Miernik temperatury cewki głośnika wysoko-tonowego Wstęp, zastosowanie Jako konstruktor zwrotnic głośnikowych często stawiałem sobie pytanie, jak dużo jest w stanie wytrzymać głośnik wysoko-tonowy, i jak bardzo jego wytrzymałość zależy od rodzaju filtracji czy samej częstotliwości podziału....
UCSRC = (1<<URSEL)|(1<<U... // z manualna Atmegi zapożyczone:) i działa jako 8b czyli UCSZ0 = 1 oraz UCSZ1 = 1 ;) (3 << UCSZ0) to jest 11 przesunięte o miejsce w rejestrze bitu UCSZ0 Dodano po 8 01 to raczej 7b po mojemu:]
Twój LM75 jest na I2C, zakładam więc że umiesz odczytać z niego te dwa bajty z wartością temperatury. Sprawdzasz najstarszy bit, starszego bajtu w odczytanym z czujnika wyniku. jeśli jest równy 0, to znaczy że temperatura jest dodatnia i wynik liczysz poprzez: 1. przesunięcie otrzymanego z czujnika wyniku o 5 bitów w prawo 2. pomnożenie rezultatu tej...
Jeżeli masz kwarc 4MHz i baud (czyli prędkość transmisji) 9600, to do UBRR musisz wpisać liczbę dziesiętną 25 (UBRRH = 0; UBRRL = 25;). czyli dla kwarcu 8MHz (bo taki mam załozony aktualnie) UBRRH =0 i UBBRL = 51 ..... czyli rozumiem, że zamiast tego kawałku kodu: UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud;...
Wracam z problemem. Kupiłem nowy wyświetlacz który działa i wyświetla kwadraciki. ;) Korzystając z gotowego programu (z książki AVR&ARM7 Pawła Borkowskiego), postanowiłem go sprawdzić. Po zaprogramowaniu atmegi na wyświetlaczu pojawiają się dwa rzędy kwadracików a nie napis. Połączenie i odpowiadające porty są napewno prawidłowe, sprawdzane trzy...
Kłopot w tym, że ja wcale nie rozumiem tego fragmentu kodu: [syntax=c] if ((przechowuje = ((przechowuje << 1) & 0x0F) | ostatnia) == 1) { keypin_pressed = 1; } [/syntax] operator "&" - bitowa koniunkcja (AND), << przesunięcie bitowe. Wartość zapisana w przechowuje musi być możliwa do zapisania w formie zero jedynkowej, aby można...
Witam! Mam problem co do odczytu temperatury z czujnika DS18B20. Jest podłączony pod PD7. Wynik to -0.1. Jeżeli odepnę czujnik wynik jest ten sam. Wie ktoś dlaczego ? Kod: ... #define WE 7 #define PORT_1Wire PIND #define SET_1Wire DDRD &=~_BV(WE) #define CLEAR_1Wire DDRD |=_BV(WE) char buf[8]; //resetujemy magistrale - czekamy...
Tak. Gdybyś chciał wprowadzić przesunięcie o p.cz. to trzeba byłoby wstawić Czestotliwosc = Czestotliwosc +/- Pcz W tym programie Timer1 (16 bitowy) zlicza czas 1s. w jednym przebiegu dla zwiększenia dokładności pomiaru. Impulsy liczone są przez Counter0.
Tak eliminacja wpływu niestałości długoterminowej (dryftu) to zaleta takiego pomiaru, podobnie w metodzie mostkowej eliminuje się wpływ zmian napięcia zasilania na wynik. Czytanie pojedynczych rejestrów jest możliwe, lepiej jednak od razu czytać cały rejestr. Kompilator zadba o odpowiednią kolejność i zoptymalizuje kod. Można porównać jak to wygląda...
Nie wiem czy dobrze wybrałem dział, ale nie wiem czy błąd tkwi w oprogramowaniu czy w podłączeniu :D Na razie podłączałem jeden czujnik do portu D0 docelowo mają być dwa czujniki temp jeden przy całym układzie a drugi dalej by móc mierzyć temp na zewnątrz, wyświetlacz 8-segmentowy razy 2, temp będzie mierzył od 0 do 99 stopni, za pomocą przełącznika...
operuj na zmiennych typu uint8_t (osobno część całkowita, osobno dziesiętna), wówczas nie będziesz musiał marnować kodu na float i jego konwersję, co jest " trochę nieoptymalne". poszukaj w sieci bibliotek Petera Danneggera - będzie szybciej. poszperaj w postach na forum, było już chyba wszystko na temat tego czujnika. Wydaje mi się że unit8_t nie...
Witam. Mam problem z kompilacja programu. Posiadam gotowego maina i biblioteki tylko nie wiem czy to wszystko dobrze robie... Jest to program do wytrawiarki który steruje grzałka i wyświetlaczem LCD. Chciałbym go nieco przerobic. Tak wyglada main: http://obrazki.elektroda.pl/5703366500_1...
Witam od dobrych paru dni męczę się z wyświetleniem temperatury na wyświetlaczu 7-segmentowym. Sam wyświetlacz działa bez najmniejszych zarzutów :[syntax=c] #include<avr/io.h> #include<util/delay.h> #include<avr/interrupt.h> #define wyjA (1<<PB0) #define wyjB (1<<PB1) #define wyjC (1<<PB2) uint8_t tab[]={0x40,0xf9,0x24,0x30,0x19,0x12,0x0...
Program przepisałem całkowicie z http://student.agh.edu.pl/~coni/avr_1wir... zmieniłem tylko port na PC5. Najpierw podłączyłem dobrze i otrzymywałem takie coś: -16.1\0x00\0x00\0x00-16.1\0x00\0x00\0x00... No w moim mieszkaniu to tak ok 24°C. Potem wyciągnąłem...
Witam ponownie Sugestia Kolegi M. S. była pomocna. Całość wygląda tak [syntax=basic4gl] '************ Zegar 6 wyswietlaczy LED + PCF8563 $regfile = "m8adef.dat" $crystal = 8000000 $hwstack = 32 ' rozmiar stosu sprzętowego $swstack = 32 ' rozmiar stosu programowego $framesize = 32 $baud = 9600 '************ deklaracje portow - 74HC595 Config Portc.3...
Trochę przekształciłem mój kod, wg wskazówek tu był kod Nadal nie działa. Może mój zamysł w ogóle jest zły. po otrzymaniu impulsu uC ma odczekać 0,45ms i jeżeli nadal na wejściu jest stan wysoki ma rozpocząć się próbkowanie, w tym celu timer ma odmierzać czas dokładnie 1,788ms czyli tyle ile trwa jeden jeden bit rozkazu, Wywołanie przerwania ma następować...
Dzięki za pozdrowienia i za odpowiedź . A co do układu to jest automat do pokoju i ma sterować światłem rgb , halogenami , klawiatura umieszczona we włączniku+ dioda rgb ma sygnalizować jaka funkcja światła zostanie zmieniona , odczytać i zapisać i2c to zadanie dla attiny2313 . A atmega8 ma wyświetlać na wyświetlaczu co jest obecnie za funkcja , pobierać...
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...
Witam Zrobiłem termometr na Ds18b20 i wynik wyświetlany jest na 3 wyświetlaczach 7 segmentowych Led. Dodatnia temperatura działa bardzo dobrze jednak gdy pojawia się ujemna temperatura poniżej - 10 stopni na wyświetlaczach pokazują sie same 8 8 8 . Może to dlatego że pojawia się - ? Nie wiem jak w bascomie można napisać moduł z liczby np. |-10| = 10...
przesunąć bitowy operacja bitowy przesunąć rozdzielczosc bitowy
rezystor opornik wentylatora wiertła widiowe strumienica zamiast katalizatora
philips senseo sterownik ładowarki akumulatora
Legalność nadawania telewizji bez koncesji KRRiT w Polsce – DVB-T2, OTT, małe sieci kablowe Eco Solar Boost 3500 Pro – jakie urządzenia podłączyć oprócz grzałki CWU? Zmodyfikowana sinusoida