Witam, Jak mozna to zrealizowac prosciej? Moze wystarczy int - najpierw mnozac przez 60, a pozniej dzilac przez 10000. Tylko, czy wtedy otrzymam wartosc calkowita, ktora chce? Prościej = bez użycia floata? Wszystko zależy od zakresu przetwarzanych liczb. Jeśli 60*x < 10000, to zawsze dostaniesz zero. Ogólnie przy wynikach blisko 0 stracisz dużo dokładności...
Typy wartości pośrednich: literał 976 to int, 5000 to int, a więc mnożenie da int'a. Rzutuj jedną z liczb na long int przed mnożeniem.
W języku C zastosowane operacje i funkcje zależą od typu parametrów, a nie od oczekiwanego typu wyniku. W C++ rozwinięto to do pojęcia przeciążania funkcji, i można mieć kilka funkcji o tej samej nazwie, ale różnych parametrach i kompilator sam wybierze odpowiednią wersję. Mnożenie to też pewien rodzaj funkcji zwany operatorem. Mnożenie p = i*u wykonywane...
dzielisz a potem znów mnożysz przez to samo...
i razy okres próbkowania (czas pomiędzy próbkami). I Przeanalizuj jakiego typu dane są ci potrzebne. Suma pewnie będzie 4 bajtowa. A współczynnik przez który będziesz mnożył?
Poszukałem przez EleCena, i znalazło mi LM35 po 2zł w Soltroniku (Warszawa na Wolumenie), a LM335 poniżej 1zł (ale Soltronik ma po 3zł). Jest kwestia, w jakim zakresie ATmega może mierzyć napięcie, bo LM335 w temperaturze pokojowej (25°C) będzie miał teoretycznie 2,9816V, a w temperaturze 125°C - 3,9816V. Jeśli można mierzyć do 5V, to wystarczy, tylko...
Wziąłem to,co było pod ręką, poza tym każda ATmega posiada sprzętowe mnożenie, które zdecydowanie ułatwia sprawę przy pobieraniu wartości z tablicy oktaw. Na upartego, to i można zrobić na ATtiny24 (warunek: jeden timer 8 bit i jeden 16 bit), ale ten projekt ma służyć początkującym, a tacy, według moich subiektywnych obserwacji działu "Mikrokontelery",...
Witam czy jest możliwość zwiększenia precyzji obliczania funkcji trygonometrycznych i wogóle wszystkich obliczeń takich jak mnożenie i t d
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....
Jak wyglada opkode instrukcji dzielenia w AVR ? Która ATmega ma ? ZTCW jest mnożenie (MUL), mnożenie znak/bez znaku (MULS), cząstkowe mnożenie (FMUL) + znak/bez znaku (FMULS), ale o dzieleniu nie słyszałem. Jest ponadto instrukcja modulo na dwóch dowolnych rejestrach (EOR). Polecan spis instrukcji asemblera na końcu pdf-a (najczęściej dalej jest już...
Zgadzam sięz końcową konkluzją dotyczącą BASCOMA dlatego powtórze: Zresztą kto to wie co tak naprawdę robi BASCOM na poziomie kompilatora?? Co do braku FPU: myśle że taką operację mozna spokojnie zrobić z wymaganą przez Ciebie dokładnością na ATMEGA, kwestia jest tylko kompilatora oi ew. biblioteki. Teraz nie mam czasu ale sprawdze to pod WinAVRem....
Jasne, wiadomo że kod wynikowy po kompilacji w Bascomie nie będzie optymalny. Akurat ten program do złożonego sterownika CO pisałem w Bascomie bo nie zależało mi na szybkości i wielkości, tylko na tym żeby działał i by szybko go napisać. Przykład ten zrobiłem w celu edukacyjnym. Dzięki za rozwinięcie mnożenia x*86 jako ciąg przesuwań. Atmega jednak...
Filtrowanie, które pokazałem NIE wymaga ani mnożenia, ani dzielenia, dlatego działa kilkaset razy szybciej niż rozwiązanie z mnożeniem przez 19 i dzieleniem przez 5 czy 20.
Dobrze myślisz. Trzeba przeliczyć. Zakładając ż mamy odczyt 50 23 30,97 mnożymy ostatni człon czyli 30,97 * 0,60800774943493703584113658379077 i mamy poprawna wartość. Mnożnik możesz trochę skrócić lub rozbudować :) Zmieni się tylko dokładność ale aż taka wielka myślę że nie będzie potrzebna. Pozdrawiam
Z przestrajaniem VCO o przebiegu sinusoidalnym w szerokim zakresie nie jest łatwo,ale są sposoby: Zrobić VCO przestrajane diodą pojemnościową na częstotliwość kilku MHZ i przez przemianę zejść do zakresu 0-1MHz Zrobić VCO o przebiegu trójkątnym i kształtować sygnał sinusoidalny układem nieliniowym (zasada działania ICL8038) Generator z mostkiem Wiena...
Sam pomiar w przerwaniu nic nie da. Bo zawsze wskaże porównywalny prąd (impulsowy podczas trwania impulsu PWM). Ten prąd trzeba przeliczać w zależności od wypełnienia PWMa. I dlatego pytałem jaki chcesz prąd. Średni czy skuteczny. Jak średni to mnożysz przez wypełnienie PWMa (przeskalowane do zakresu 0...1). A jak chcesz skuteczny to mnożysz przez wypełnienie...
Cześć Ta płytka jest bez sensu. Wybór przetwornika C/A dyktowany jest tylko niską ceną (w którym miejscu jest tam wysoka jakość, to nie wiem...). Atmega nie nadaje się do nawet podstawowej obróbki sygnału. Mnożenie zajmuje mnóstwo czasu, żadnego DMA. Jak napisał kolega wyżej Cortex M4 i można się trochę pobawić. Pozdrawiam Fimek
W dodatku żle uśredniasz. Oddzielnie dodajesz bajty starsze, a oddzielnie młodsze. A co jeśli wystąpi przepełnienie z młodszych? Druga rzecz - czy do tych tablic odwołujesz się poza przerwaniem? Jeśli tak to pojawia się analogiczna sytuacja z volatile i dodatkowo z zapewnieniem atomowości dostępu do danej typu integer. A trzecia rzecz - kosmetyczna...
Sorry, muszę częściowo odszczekać to co napisałem (tak to jest, gdy się o czym innym myśli i pisze). Złożoność obliczeń w mojej sieci wynikała głównie z tego, że służyła ona do analizy szeregów czasowych, przy czym w pierwszej wersji zależność była taka, że przebieg 6 zmiennych w czasie 0,5s był analizowany przez ok. 6 sekund. Ponieważ próbkowanie sygnału...
1. ok, z 1 się wycofuję bo masz zrobione zewnętrzne pull-upy ale niepotrzebnie mnożysz rezystory, gdyż takowe są wewnątrz procesora - wystarczy tylko włączyć je z poziomu programu. 2. to teoretycznie może powodować problem - najlepiej sprawdzaj przerwania w jakiś inny sposób - np. w każdym tylko zapalać lub gasić diodę 3. Rozumiem istotę Twojego problemu,...
Dodawanie szostek tez zadziala, ale czym rozni się ono od dzielenia przez 10 ? Czy chodzi moze o wyzszosc symbolu " + " nad symbolem " * " ?? Jeśli chodzi o wyższość * nad + to nie duża różnica, szczególnie w Atmega gdzie jest szybkie sprzetowe mnożenie. Ale już miedzy dodawaniem a dzieleniem które nie jest sprzętowe to jest zazwyczaj spora różnica...
ADMUX=0b10000000; //kanał 7 ADC Zamiast 7 ustawiasz zerowy kanał ADC, a ten pin wykorzystujesz jako wyjście na wyświetlacz przecież... nic dziwnego, że bzdury wychodzą. O co chodzi z tym mnożeniem przez 100 (i dlaczego w przerwaniu, do tego jeszcze na zmiennej globalnej)? Jeśli już to powinno być przez 2 (wtedy wystarczą liczby 8-bitowe) albo (na 16-bitowych)...
Jeśli chcesz mieć źródło o stałej wartości prądu to -na przetwornik wrzucasz napięcie z rezystora pomiarowego -porównujesz go z wzorcem- wartością, do której dochodzisz metodą prób i błędów -jeśli napięcie rezystora jest mniejsze niż założone przez Ciebie to zwiększasz wypełnienie PWM o 1, czyli zwiększasz napięcie a w konsekwencji prąd, jeśli większe...
Wstałem rano z wyspaną głową i patrzę na Twój kod przy kawie. Deklarujesz 80 bajtów na adresy czujników. Start każdego adresu określasz tak, że mnożysz razy dziesięć wartość zmiennej "Zmienna" Pierwszy Dallas zajmuje więc komórki 10,11,12,13,14,15,16 i 17 Siódmy Dallas zajmuje 70,71,72,73,74,75,76 i 77 ... i tutaj zadeklarowane 80 bajtów się kończy......
Nie. Po prostu słyszałem że makro to zwykłe kopiuj/wklej. No więc wkleiłem zawartość „wywołania makra” do makra, wyszło że pojawiło się mnożenie pomiędzy plusami i takie tam, więc policzyłem zgodnie z kolejnością działań i wyszło. A co do totolotka: skąd wiesz że już nie gram? :D
Najpierw przetestuj sobie algorytm kondycjonowanie+filtr+demodulacja w jakimś środowisku: Matlab/LabView, żebyś dokładnie wiedział jak ma działać. Demodulacja synchroniczna cyfrowo jest bardzo prosta w realizacji jeśli znasz częstotliwość nośnej (sprowadza się jedynie do mnożenia).
witoldwitoldowicz - trochę udziwniasz, nie prościej sumowanie zrobić w przerwaniu? goldcap - zajmuje sporo bo używasz arytmetyki zmiennopozycyjnej. Jaki sens jest mnożyć razy 1.1 a potem razy 1000? Nie lepiej od razu pomnożyćrazy 1100? Jeśli nie wyświetlasz nic po przecinku to dzielenie przez 1024.0 też sensu nie ma, lepiej przez 1024. A jeśli masz...
Witam forumowiczów. Od paru godzin męczę się z pewnym problemem. Nie rozumiem dlaczego Atmega 32A błędnie liczy mnożenie trzech zmiennych. Utworzyłem zmienną "wynik" wielkości 4 bajtów (zakres liczb 0 do 4294967295) utworzyłem zmienną "a" wielkości 2 bajtów (zakres liczb 0 do 65535) utworzyłem zmienną "b" wielkości 1 bajta (zakres liczb 0 do 255) utworzyłem...
DFT czy FFT są dość zakręcne w implementacji i możesz sobie nie dać rady poza tym wymaga wielu mnożeń i tu ATMEGA może nie dać sobie rady. Jak wystarczy Ci odświerzanie kila razy na sekunde i niska rozdzielczość(8 bitów 32-64 próbek) to może się udać.Ale wtedy tylko 3 zakresy(bas+średnie+treble) Nie są, aż tak bardzo zakrecone. Wystarczy się troche...
Witam męczę się z tym przeliczeniem kty już któryś dzień i nie mogę sobie poradzić. Przykład powyżej jest interesujący ale żeby zastosować go w swoim układzie musiałbym znać pochodzenie poszczególnych wartości przez który jest dzielony i mnożony wynik otrzymany z adc. Jest na forum jakiś umysł ścisły, który potrafi wytłumaczyć pochodzenie tych cyfr?...
Tak myślałem, że należy cały port zapisać do jednej zmiennej, tylko nie byłem pewny czy po zapisaniu do zmiennej liczby binarnej mogę korzystać z niej jako dziesiętna. Jeszcze pytanko z tym mnożeniem, jeżeli po pomnożeniu wartość liczby się nie zmieni, to po co ją w ogóle mnożymy? :D Chyba nie do końca dokładnie przeczytałeś posty wyżej. McMonster...
A co to ma być? ultoa(0000000000,pomiar,10); Co odczytujesz z ICR1? To też jest źle, a nawet podwójnie źle: c = a*65535; najpierw mnożysz przey błędną wartość, wynik mnożenia jest obcinany do 16 bitów, a następnie podstawiany na zmienną c. Powinno być: c = (uint32_t) a << 16;
Wiem, że odkopuję, ale skoro ja znalazłem ten temat, to i inni mogą czegoś się dowiedzieć. W podanym przypadku potrzebny zakres to 125 wartości(1115-990), więc bez kombinacji. Od wartosci cisnienia odejmij 990 i masz jeden bajt. Odbiornik do bajtu dodaje 990 i zapisuje w odpowiedniej zmiennej. Bez dzielenia i mnożenia, ale z ograniczonym zakresem do...
Obawiam sie że atmego bez naprawde sprytnie napisanego softu jest po prostu za słaba do tego celu. Wez po uwagę że float mnożenie to ok 2980 taktów zegara przy zmniennych typu volatile. Dla porównania. Dzielenie na pewno więcej. Dane dla innych typów danych: uint8 => 19 cycles uint16 => 24 cycles uint32 => 103 cycles int8 => 37 cycles int16 => 33 cycles...
Koniecznie zadbaj o to, żeby wychodząc z tego przerwania jego flaga była wyzerowana, a wtedy to o czym kolega _marek_ mówi nie będzie miało miejsca. --- Podczas puszczania przycisku są zdecydowanie mniejsze drgania styków niż podczas jego przyciskania i o to mi chodziło. Poza tym reagujesz wciąż na zbocze opadające a tylko czekasz z powrotem na narastające,...
Do tego stopnia sobie poszalałem, że początkowo główna pętla programu była pusta :) ale to nie był dobry pomysł :P . No nie. Generalnie, w przerwaniu powinno być to, co się powinno wykonywać albo a) bardzo często, albo b) bardzo precyzyjnie (czasowo lub zdarzeniowo). Procedura obsługi przerwania powinna być tak krótka (inaczej: tak szybka), jak się...
ATMega ma ALU zdolne do mnożenia dwóch liczb 8-bitowych w 1 cyklu zegara... http://ww1.microchip.com/downloads/en/Ap... W sumie to istniał układ mnożący dwie liczby 4-bitowe - 74284. Tu masz ładne omówienie teorii, z przykładami: https://www.electronicshub.org/binary-mu...
Dla mnie wszystko jest jasne. Zakładam że table_temp jest tablicą wielkości typu int (16 bitów, ze znakiem). Mnożenie (*(Table_temp + 4) - '0') * 10000 (listing 2) kompilator domyślnie wykonuje jako int*int z wynikiem również int , no i dochodzi do przekroczenia zakresu -32768..+32767, które nie jest sygnalizowane. Natomiast operacja counter_temp +=...
Problematyczne nie jest zapisywanie do tablicy intów wartości 13-bitowych, tylko to, że w wyniku mnożenia tych wartości otrzymujesz wyniki 16-bitowy, a nie co najmniej 26 bitowy i tenże 16-bitowy wyniki sumujesz. W efekcie dostajesz śmieci. I nie, rzutowanie: suma+= (uint32_t) tab[indeks]*tab[indeks]; nie załatwia sprawy, bo 16-bitowy wynik mnożenia...
no właśnie, kiedyś at90 różniło się wiele od pierwszych Atmeg, a teraz chyba tylko ilością nużków :) tym bardziej że niektóre tiny są wyposażone nie gorzej niż megi... Ale zauważyłem coś jeszcze - wszystkie Atmega mają 131-133 instrukcje , a Attiny 118 (nie mają mnożenia) - chyba że się mylę i już takie też są...
To czy dobrze zrozumiałem, że [syntax=c] v1Wire_SendByte(0xCC); v1Wire_SendByte(0x44); _delay_us(750); ucReset=uc1Wire_ResetPulse(); v1Wire_SendByte(0xCC); v1Wire_SendByte(0xBE); [/syntax] mam zastąpić na: [syntax=c] v1Wire_SendByte(0xCC); v1Wire_SendByte(0x44); _delay_us(750); ucReset=uc1Wire_ResetPulse(); v1Wire_SendByte(0xCC); v1Wire_SendByte(0x4E);...
Co do mikrokontrolera z przetwornikiem 12-bitowym - np. M054 lub STM32F05x. Zastanów się, ile takich obliczeń w zmiennym przecinku ATmega może wykonać w ciągu sekundy. W wielu zastosowaniach program praktycznie stanie w miejscu, bo Twoje mnożenie i dzielenie zmiennopozycyjne zajmie tysiące cykli procesora oraz kilka KiB pamięci. Dla ATmega8 to może...
No niby mam jeszcze 1/4 pamięci ale program nie jest skończony. Kompilator jest ustawiony na minimalizację kodu. W bibliotece NokiaLcd jest jedynie obsługa 8 bitowych zmiennych. Po wyrzuceniu z biblioteki niepotrzebnych funkcji zaoszczędziłem kolejne 0x100 pamięci. Muszę jednak policzyć zużywane kalorie na podstawie tętna a to wymaga mnożenia ułamków....
Kłania się pojęcie funkcji w języku C. setup() i loop() to też są funkcje. Do testowania stanu styków potrzeba tylko jednego przerwania timera, nic więcej. Po co mnożyć przerwania, czy to od zmiany stanu linii, czy to od dodatkowych timerów? Przy jednopoziomowym systemie przerwań, takim, jaki ma ATmega, o ile programista nie udziwnia nic na siłę, zmienna...
Wynik Twojego działania to: 64449, czyli mieści się w zakresie i nie powinno być problemu. I właśnie dlatego 63 jest ostatnią wartością którą widzisz. Powinieneś widzieć jeszcze 64, ale pewnie nie ma wystarczającej precyzji potencjometru i od razu przeskakujesz na (teoretyczne) 65. Poza tym muszę mieć przetwarzanie z 10-bitową precyzją. Ciekawe po...
To był tylko mój dodatkowy opis jak zabierałem sie za ten kod, gdy programujesz chip mkAVRCalculator posiadasz do wyboru opcje zabezpieczajace. Mi chodziło tez by nie blokowac całkowicie procesora i umożliwić wczytanie programu od nowa jesli UID został wykasowany a program zablokowany(tak do testów na początek). https://obrazki.elektroda.pl/5766266800_...
Jak to zwykle na początku bywa warto ściągnąć jakiś kurs. Polecam też książkę Dolińskiego "Mikrokontrolery AVR w praktyce" (przede wszystkim bardzo dobrze opisane komendy assemblera wraz z przykładami) - przykłady są na 90S2313, ale maja 90% wspólnego z wyższymi wesjami. Ostatnio wyszła nowa książka "Mikrokontrolery ATmega w praktyce" czy jakoś tak...
J_Bravo --> a stosujesz jakąkolwiek antenkę? jeśli tak? to jaką? i ile oczekujesz na wyszukanie urządzeń w pobliżu???? - operacja wyszukania może trwać bardzo długo i trzeba cierpliwie poczekać aż pojawi się odpowiedź "OK" z modułu. Może to trwać nawet 60s. pawel260 --> tzn co? masz odpalone dwa oddzielne okienka terminala i jedno połączone przez zwykły...
W C domyślnie wszystkie obliczenia są przeprowadzane tak jakby liczby miały typ int. Pomyśl więc sam - jeśli na AVR max dla int to 32767, to jaki będzie wynik operacji mnożenia razy 250 (co zapewne prowadzi do przepełnienia) i dzielenia int przez 100000? Jak dla mnie zero - zawsze.
Poprostu podajesz numer sektora (blok 512B) jaki chcesz odczytać. adr= sector+OFFSET_ADR; adr<<=9;//mnożenie *512 bajtów repeat=0; res = sd_command(READ_SINGLE_BLOCK,adr)... Jest jakoś możliwość edycji zawartości karty z poziomu PC tzn wkładam normalnie kartę do czytnika USB na SD i już jakoś grzebię sobie w tej karcie Dokładnie, i do edycji...
Witam dziękuję wszystkim za odpowiedź. Dobrym pomysłem jak na moje możliwości wydaje się być sposób TMF. Jednak nie wiem czy dobrze zrozumiałem. Mam użyć drugiego licznika który będzie sobie zliczał do liczby x i jak ją osiągnie to wrzuca mi do TCF0.CCABUF dane z tablicy pod indexsem y po czym zwiększa index y o 1. Rozumiem że to przy liczniku 0 lub...
Witam, mam pytanie do osób, które mają pewne doświadczenie w atmegach. A mianowicie, jakie częstotliwości taktowania naprawdę mogą osiągnąć mikrokontrolery AVR i w jakich warunkach. Wiem, że w notach katalogowych górne limity to np. 16M dla starszych układów (np. m8) i 20M dla nowszych (seria m48,m88,m168), ale wydaje mi się, że ta informacja podana...
Wielkie dzięki (at)markosik20. Tak szczerze to ten pierwszy twój przykład też zadziałał (po zwiększeniu do liczb uint32_t i mnożeniu przez 1000 a następnie dzieleniu). Drugi też działa i chyba z niego skorzystam (ze względu na dokładność).
Dodaje kod do zapisu daty i czasu w PCF8563 [syntax=basic4gl] '********************* Funkcja ustawiająca zegar PCF8563 Sub Settime_pcf Ssek = Makebcd(s) 'sekundy Mm = Makebcd(m) 'minuty Hh = Makebcd(h) 'godziny Dday = Makebcd(day) 'dni Wwk = Makebcd(wk) 'dni tygodnia Mmonth = Makebcd(month) 'miesiace Yyear = Makebcd(year) 'lata I2cstart 'warunek startu...
a więc przerobiłem kod tak jak umiałem #include <avr/io.h> #include <avr/interrupt.h> void setup() { Serial.begin(115200); } //Counts overflovs volatile uint16_t T1Ovs1, T1Ovs2; //Variables holding three timestamps volatile uint16_t Capt1, Capt2; //capture Flag volatile uint8_t Flag; //Initialize timer void InitTimer1(void)...
A ja proponuję się nie bawić w mnożenie bytów bo przycisk power po prostu zwiera do masy. Więc nie jest potrzebne nic poza wolną nóżką mikrokontrolera, która ściągnie to do zera. Nawet nie czuję kiedy rymuję ^_^ Który z kabelków jest masą a na który podajesz sygnał to już sobie sam znajdziesz :) .
Namoje szczęście mnożenie ma być przez liczby całkowite Ale mnożenie przez liczby całkowite też będzie z błędem. Nie podaję częstotliwości i innych szczegółów- na tym etapie jest to nie istotne. To akurat jest bardzo istotne. Do wysokich częstotliwości trzeba inaczej podejść. Podaj chociaż bardzo przybliżony zakres. I powiedz czy wymagana jest stuprocentowa...
jacekw88 ---> tak ja mam pomysł, poczytaj dokładnie cały przyklejony temat: http://www.elektroda.pl/rtvforum/topic42... to ci się coś rozjaśni, bo komunikat z PonyProga -24 jasno oznacza, że zrobiłeś kiszkę z połączeniami i na sucho bez schematu tego co zrobiłeś w rzeczywistości to możesz sobie tak tu jeszcze pisać miesiącami a nic z tego nie...
Witam Dręczy mnie jeszcze kilka spraw dotycząca procesorów Atmega serii 8... Wedle dokumentacji, odnosząc się do procesora 168. Jest określone jako by bootloader miał się znajdować w obszarze pamięci 0x1C00-0x1F80 gdzie pamięć procesora jest do 0x3FFF, do tego AVRisp z AVR studio też interpretuje to w fuse bitach. Lecz wgrywając bootloadera w ten obszar...
Po pierwszym ogniwie - brak dzielnika Po drugim - dzielnik 2:1 Po trzecim - 3:1 Po czwartym - 4:1 itp... Dzielniki oczywiście względem masy. Potencjometr 1M to raczej za dużo, nie wiadomo czy taki prąd będzie wystarczył dla ADC. A napięcie ogniw obliczasz następująco: napięcie za ogniwem-napięcie przed ogniwem = V tego ogniwa. Oczywiście w programie...
Witam, napotkałem w swoim projekcie na dziwny wręcz dla mnie nie wytłumaczalny problem dotyczący mnożenia liczb zmiennoprzecinkowych. Poniżej kod który generuje problem: [syntax=c]float error = ( tutaj podaję różne wielkości z przedziału -100 do +100 ) float dana = error * 4.0f; [/syntax] Następnie zmienną dana wyrzucam sobie rs232 na komputer i otrzymuję...
Witam Zaciąłem się podczas pisania programu na woltomierz. Układ opiera się o uC Atmega 16. Pomiar napięcia z zakresu 0 - 5 V. Wynik ma być standardowo wyświetlany na LCD 2x16. Procedury do obsługi lcd mam napisane. ADC wywołuje przerwanie w którym chce skonwertować otrzymany wynik na znaki wysyłane do LCD Zamieniłem już wynik z HEX na DEC. liczbę danej...
Do prostych operacji, zwłaszcza mnożenia, dzielenia, dodawania i odejmowania polecałbym jakiś format stałoprzecinkowy, nowa avr-libc ma może i szybkie, ale za to strasznie "rozdęte" procedury obliczeń zmiennoprzecinkowych. Ich rozmiar jest wręcz paskudny. Przykład, kod z mnożeniem, dzieleniem, dodawaniem i odejmowaniem zmiennoprzecinkowym w poprzedniej...
Procesor atmega 328P. Strona http://srukami.inf.ua/pultoscop_v25110.h... Zmienia tam kwarc w arduinо z 16MHz na 27MHz Mega328, nota katalogowa, strona pierwsza, Fmax 20MHz. Nie bębę mnożył przykładów z życia, co dzieje się z człowiekiem czy urządzeniem, które jest przeciążone o 35% przez cały okres swojej pracy.
Mnożenie przezd dwa przesuwa o jeden bit w lewo przykłądowo mając liczbę 16bitową: 0111011100000011 po pomnożeniu przez 2 otrzymamy 1110111000000110 po kolejnym pomnożeniu przez 2 otrzymamy 1101110000001100 Dzielenie przesuwa w drugą stronę czyli w prawo Mozesz użyć zmiennej 16bitowej a po przesunięciu wyłuskać interesujące 10bitow i przepisać na PORT...
Dużo zależy jak i przebieg na to puszczasz? Zauważ, że masz teraz na działkę 132 us czyli na całość niewiele ponad 1ms. Żebyś przy tych ustawieniach zobaczył 1 okres musiałby to być 1KHz sygnał. Jeśli puszczasz sygnał poniżej 500 HZ to przy tych ustawieniach zobaczysz mniej niż jedną połowę okresu a więc linię. Przypuszczam, że puszczasz prostokąt o...
Podobne projekty wykonane zostały tez w przeszłości: http://www.swinkels.tvtom.pl/swinsid/pla... http://kevtris.org/Projects/sid/oldsid.h... Gdybys pisal w asm zamiast bascom to atmega na pewno by sobie poradzila z emulacja 6502, ale wątpie aby atmega była w stanie zastąpić 6510/8500 w C64, za to mogła by być świetnym np koprocesorem matematycznym...
czyli jak mam to zrobić proszę o jakiś przykład myślałem o komendzie shift ale to nie działa tak jak bym chciał muszę jak wspomniałem wcześniej po zdekodowaniu stanu końcówki procka konkretnie atmega 8 wpisywać po kolei do jednej zmiennej wszystkie jedynki i zera w takiej kolejności jak przychodzą tak 80 razy komenda schift left lub right działają jakbym...
Ale po co mnożyć byty? Zastosuj prostą przetwornicę step-down i z głowy. BTW: 12V 3A to 36W, 6V i 8A to 48W - perpetum mobile planujesz?
W przerwaniu nie miało być nic. A co to za funkcja operująca na buforze?? [syntax=c]switchBuffors();[/syntax] Ciekawe jaka logika myślenia skłania do takiego pisania programów, użyję porównania: to jak drapanie się po lewym uchu prawą nogą ;). I jak napisałeś wychodzi "audio sieczka" bo tak naprawdę nie wiemy jak wygląda naprawdę plik i czym jest stworzony,...
Program który wrzuciles nie dziala mi dokladnie... A czy dokładnie zrobiłeś tak jak napisałem? if(licznik==4) { licznik=0; T1=TCNT1; // WAŻNE utoa( (T1-prev_T1), bufor1, 10 ); // WAŻNE lcd_clrscr(); lcd_puts("HZ"); lcd_gotoxy(3, 0); lcd_puts(bufor1); // _delay_ms(950); //...
W AVRStudio puściłem FFT 128 gołe (czyli bez okna i liczenia modułów), ATMega czyli z mnożarką, wyszło 270 tys cykli, czyli przy 16 MHz 0,033 sekundy algorytm raczej sprawdzony, ale badam dalej. CodeVision C, prawie 900 bajtow kodu w tym 320 bajtów sinusa. Ach, mnożenie 16*16 wykonuje funkcyjka którą zaczerpnąłem z noty aplikacyjnej Atmela
Add ARM: Koszt porównywalny z wieloma 8-bitowcami (np ATMega, 51...), a w tej cenie dostajesz np 32KB RAM, co daje juz duży stopień swobody. dodawanie i mnożenie liczb 16bitowych czy 32bitowych nie jest już takie skomplikowane ;) Oczywiscie nie ARM za wszelka cene i wszędzie, ale jako główny procek... poza tym, można już bardzo skomplikowane rzeczy...
Procesor ATmega od biedy "ma możliwość" obsługi przerwań zgłaszanych z częstotliwością 33 kHz, ale pod warunkiem, że jest programowany w C lub asemblerze, a nie w Arduino ani Bascomie. Obsługa takiego przerwania w C musi być b. uważnie napisana - kilkanaście linii kodu, bez wywołań procedur, mnożeń ani dzieleń.
Można i tak. Ale za precyzyjne to to nie będzie. Będzie to tak precyzyjne jak ten Twój patent analogowy. Z PLL to chodziło mi po prostu o mnożenie częstotliwości przebiegu generowanego przez procesor. Powiedzmy procesor generuje przebieg 0…50kHz (+/-100Hz) a PLL mnoży ten przebieg przez 10 (i wychodzi 500kHz +/- 1kHz). To taki przykład, bo najlepiej...
W oryginale podałem 0 xb 11111000, co jest oczywistym błędem, bo miał być binarny, ale zakładam, że się tego domyśliłeś a kompilator nie przepuścił :) Ta konstrukcja niczego nie ustawia tylko zeruje 3 najmłodsze bity, ponieważ jest to mnożenie logiczne z ustawionym już wcześniej ADMUX za pomocą znaku & Dodano po 3 http://www.java2s.com/Tutorial/C/0100__O...
Faktycznie zapomniałem dodać, że pracuję na ATMega 16, piszę w asemblerze. Zapoznam sie z problemem i na pewno wrócę z pytaniami, chyba, że ktoś podrzuci inny (bardziej przyswajalny) problem :) Czy "to" można zrobić w ATMegach, bo gdzieś obiło mi sie o uszy, że l. zmiennoprzecinkowe, to raczej trudno zaimplementować. Dzieki. We'll be in touch.
ja zrobiłem tak : rezystor 0.1ohm na kablu głośnikowym , potem wzmacniacz i prostownik na LM324 , na końcu attiny26 przelicza wszystko , mnoży napięcie przez prąd i wychodzi ładny wynik w watach , taki miernik spełnia swoje zadanie jedynie gdy puścisz sinus bo podczas grania muzyki to wynik jest nieczytelny
Witam. Mam lcd ks0108b 128x64 i chcę zrobić licznik. Chcę napisać program na atmega 644/16 który będzie zliczał czas między impulsami na int0 po czym 3.6 dzelił przez wynik i mnożył razy obwód koła. Początek programu napisałem, skonfigurowałem port na zbocze opadające ale nie wiem ja liczyć ten okres. Proszę o pomoc w tym programie. [syntax=basic4gl]...
Przepraszam wszystkich programistów z prawdziwego zdażenia jeśli ich uraziłem. W bascomie(środowisku programistycznym) nie podobają mi się 3 rzeczy: 1 jest płatny - przynajmniej był jak sie na niego natknąłem 2 kod generowany przez niego jest wolny 3 kod generowany przez niego jest duży od razu zastrzegam że korzystałem z niego w 2003 roku wiec sporo...
Witam, zmagam się z tym problemem już dobrze ponad tydzień, miałem nadzieję, że uda mi się samemu go rozwiązać, jednak nie obejdzie się bez pomocy bardziej doświadczonych w temacie :wink: Otóż problem jest jak w temacie, dosyć rozbudowany wsad (ponad 96% pamięci) działa poprawnie, nie zauważyłem żadnych anomalii, błędów logicznych czy obliczeniowych....
- brak możliwości bezpośredniego dodania stałej do rejestru A nieprawda. Można odjąć stałą. Można odjąć wartość ujemną... Dodatkowo, organizacja pamięci programu w słowa... bllee, komplikuje to trochę odczyt danych z pamięci programu... w 51 jest 16 bitowy DPTR i jest pięknie, a tu... A tu masz aż trzy rejestry których możesz użyć jako szesnastobitowych...
Można mnożyć razy 8 i to zwykle wystarcza :) Raz miałem potrzebę zliczać SCK, dla prostego wyliczenia wydajności transferu danych - nie chciałem, aby dodatkowe instrukcje zliczające bajty miały wpływ na wynik. W tym celu można podać SCK na wejście taktujące timera. To chyba jedyna opcja w ATMega. W XMEGA jest o tyle łatwiej, że stosowne połączenie można...
Ilmarinen ma rację. Ten program trzeba napisać lepiej. Nawet teraz widzę że można dodać ulepszenia. 1) Program powinien mierzyć długość bitu. Obecnie jest to ustawione na sztywno na taktowanie 8MHz. I tu jest problem: piloty maja rozrzut, a wewnętrzny generator RC AVR ma zbyt duże wahania częstotliwości żeby to super działało. 2) Mnożenie i dzielenie...
Oczywiście, ja też jestem zdania, że jeśli się da, to czemu czegoś nie poprawić. A zwłaszcza, jeśli jest to małym nakładem pracy i finansów. Pytałem tylko, bo ja m.in. stosuje fabryczną klawiaturę 3x4, oraz procesor wykonuje szereg innych zadań, tak, że uśpienie go raczej nie wchodzi w grę. Nie robiłem jeszcze prób z oddziaływaniem DDSa (jako urządzenia)...
Programuję procesor Atmega 128 w gcc. Zmontowany układ ma mnożyć zmierzone napięcie przez przekładnię. Przekładnię zmieniam od 1 do 10 z krokiem 0.1. Problem jest w tym że w procedurze zmiany przekładni dodając do przekładni 0.1 lub odejmują na wyświetlaczu wyświetlają się wartości np. 9.3 i 9.5 a 9.4 nie idzie wyświetlić. Dodam że jeśli na stałe w...
Mam jeszcze jeden problem, mianowicie: Mam zmienną typu single U i przypisuje jej liczbę 2.56 chcąc ją zwiększać o 0.01 robię coś takiego U = U + 0.01 a potem wyświetlam to na LCD. Lecz pojawia mi się http://obrazki.elektroda.net/98_12637529... Wiem, że resztę cyfr mógł bym zamaskować na przykład poprzez instrukcje fusing. Lecz jeżeli dalej chcę...
Czyli pewno lepiej jak wykonam jakąś tabele wschodu, zachodu i maksymalnej wysokości dla danych dni i będę to odczytywał. Jeśli nie da rady tak tego wykonać na atmedze16 no to kicha trochę. A gdyby mnożyć całość przypuśćmy 1000 razy i zrobić long double? Wartość poprzecinkowa będzie wtedy miała mniej miejsc po przecinku więc powinno to być bardziej...
pisałem w CodeVisonAVR i bascomie i w zasadzie nie widzę różnicy jeżeli chodzi o zajetość programu i szybkość. Wszystko zależy od programisty jak pokieruje swój program i podejdzie do sprawy. Oba języki działają na podobnej zasadzie, czesto różniąc się tylko samym sposobem zapisu instrukcji, bo w zasadzie kod się pisze na podobnym poziomie abstrakcji....
Typów 32-bitowych nie używa się zbyt często (chyba, że dla zmiennych lokalnych, bo tak jest szybciej). Za to całkiem często potrzebujemy danych 16-bitowych. Popatrz, ile instrukcji kosztuje na AVR dodawanie, mnożenie i dzielenie danych 16-bitowych. Na Cortex M3 każdą z tych operacji na danych 32-bitowych wykonuje się jedną instrukcją, na M0 dzielenie...
Sterowanie bezpośrednie układem przekaźnika nie jest zalecane. http://www.elektroda.pl/rtvforum/viewtop... http://www.elektroda.pl/rtvforum/topic57... Jeżeli masz zamiar sterować więcej przekaźników np. 8 to zastosuj uln2803 Może być obciążany na jedno wyjście do 500mA ale maksymalne jego obciążenie nie jest mnożone przez...
Witam Poczytałem o tym projekcie z początku wątku - jest fajny -) w kilku słowach: - ATMEGA wytwarza sygnał który trzeba "wcisnąć" w modulator aparatury sterującej RC - ATMEGA steruje DDSa "statycznie" , DDS ma tylko zastapić klasycznu kwarc w aparaturze RC - ot tyle nie jest realizowane coś takiego przez DDS jak na początku napisałeś "razem z programową...
Już rozwiązałem ten problem. Tkwił on w kontraście. W związku z nim mam pytanie. Kiedy wyświetlam o wiele dłuższy tekst po prostu muszę zwiększyć kontrast. Czy jest jakiś sposób, aby to działało poprawnie. Moje drugie pytanie dalej dotyczy tego mnożenia adresu stringu. Widziałem też taki zapis: ldi ZL, low( napis << 1) ldi ZH, high( napis <<...
Zmusza. Dzielenie i mnożenie na liczbach zmiennoprzecinkowych nie są tak upierdliwe jak dodawanie i odejmowanie. Ten dodatkowy kilobajt to procedury konwersji, mnożenia i dzielenia na liczbach zmiennoprzecinkowych.
Co z tego, że są "w stanie 1"? No zgadza się, że przyciski są tylko tymczasowo, ale one mogą załączyć podczas jednego naciśnięcia przerwanie nawet kilkaset razy. W dodatku w przerwaniu masz operację mnożenia na zmiennej SINGLE co nie jest dobrym rozwiązaniem. Jeszcze raz sugeruję by wywalić LCD z pętli. Najlepiej ją zostawić pustą. Wynik wyświetlać...
Sprawdzałem w necie. Gość kiedyś sprawdzał coś podobnego na symulatorze wyszło mu że dodawanie/odejmowanie jest dużo szybsze(mniej więcej się zgadza), mnożenie niewiele a dzielenie wolniejsze. [url=https://ucexperiment.wordpress.com/... Fakt faktem przykład jest prosty, myślę że w najbliższym...
A ktoś ma problem z priorytetem operatorów? Ja po prostu wszystko zawsze piszę w nawiasie i problem nie istnieje. Takie rzeczy jak _BV, bit_is_set() i tym podobne to jak dla mnie jest mnożenie bytów ponad potrzebę - cokolwiek poważniejszego potem trzeba zrobić i już proste sprawdzenie bitu jest niesamowicie skomplikowane. I nie wyskakuj mi tu z jakimś...
po pierwsze pomijając wartości #define F_CPU 14745600ul /// UART #define UART_BAUD 115200ul #define UART_CONST (F_CPU/(16ul*UART_BAUD)-1... ja tu pomijam fakt, że dzielenie to mnożenie przez odwrotnośc tylko chodzi mi o nawiasy których ci brakuje ( i pewnie to żle konfiguruje zegar tworząc przekłamania) Po drugie wszystkie zmienne globalne...
Ja mówię o różnicach w ASM. Tych swoją drogą pomiędzy ATMega8 a 88 nie ma za dużo (w sumie nie widzę żadnych ale nie przyglądałem się specjalnie). A gdyby nawet były to rozwiązuje je kompilator C. Tak jak np. rozwiązuje brak rozkazów mnożenia w mikrokontrolerach ATTiny. Albo różnice w dostępie do rejestrów SFR poprzez STR albo OUT. Kod w C wygląda tak...
Problem rozwiązany, przesiedziałem nad programem i znalazłem co robiłem źle ;) Jak by ktoś chciał to przesyłam kod w c , oprócz tego dodałem jeszcze odejmowanie i mnożenie. [syntax=c] /* * kalkulatorv4.c * * Created: 15.11.2020 11:41:02 * Author : Ananass */ #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void)...
algorytm mnożenie mnożenie kolumn asembler mnożenie
robota kuchennego honda civic sterownik schemat logitech wingman
satel powiadamianie radiowe komunikacja radiowa satel
Programator do mikroprocesora MC9S08AC32CFGE - wybór Podłączenie czujnika wilgoci do wentylatora dwubiegowego