Na Mega328 z KB RAM uruchamianie OS nie bardzo ma sens. Zrób wielowątkowość opierając cały program o maszynę stanów. Zapomnij, że istniej delay. Owszem, krótkich delay (mikrosekundy) w AVR przeważnie nie da się przeskoczyć ale nie zawsze. Na 1-Wire, można obsłużyć USARTem. Nie ma żadnych delay i 1-Wire działa na przerwaniach. Masz więc już pierwszy...
Zmodyfikowałem delikatnie bibliotekę, zamiast korzystać z funkcji microdelay z dodanej biblioteki używam HAL_Delay(). Czyli zmieniłeś delay z MIKROsekund na MILIsekundy. Zapewne w bibliotece był potrzebny ten dokładniejszy, więc nawet jeśli przeliczyłeś argumenty, to pewnie po zmianie nie działa jak należy. Swoją drogą ta funkcja delay która tam była...
Też tak mi się wydaje. Sprawdzę po niedzieli czy to problem z delayem od HALa bo z tym programowym problemu raczej nie ma. Stosuję dwie funkcje ponieważ jedna daje opóźnienia w ms - HAL_Delay(), a druga to zrobiona programowo na timerze funkcja delay() która ustawia opóźnienie w mikrosekundach.
dołącz #include <util/delay.h> i masz _delay_ms();//milisekundy _delay_us();//mikrosekundy pętla for(i=0;i<1000;i++) { } opóźnia ale jest wykowywane bardzo szybko i nawet tego nie zauważysz[około 1ms]
delayMicroseconds() wprowadza opóźnienia w mikrosekundach, a nie milisekundach. Powinieneś użyć delay() zamiast delayMicroseconds().
Na razie zaprzestałem działań nad dosyć dokładnym delayem. do moich celów wystarczy mi ten: #define F_CPU 8000000 // 1MHz zegar procesora -> częstotliwość kwarcu #define CYCLES_PER_US ((F_CPU+500000)/1000000) // cpu cykli na mikrosekunde void delay(unsigned int us) // opóźnienie w mikrosekundach us -> delay { unsigned...
To dziwne bo ja niemiałem najmniejszych problemów... #include <avr/io.h> /***************************************... Definicje stałych ****************************************... #define F_CPU 1000000 /* 1MHz zegar procesora */ #define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */ /***************************************...
Po pierwsze to ty jak zwykle w temacie, gdzie chodzi o AVR 8bit zaczynasz opowiadać jak to ty robisz na ARM'ach - a to nie ma nic wspólnego z tematem. Po drugie - panie kolego - może już przestań opowiadać o Delayu 750ms, bo myślałem że co do tego to chyba się rozumiemy - że to jakaś bzdura i tak się nie robi. Ja piszę o pozostałych delayach ale tych...
Nie pomija tylko zapala ją a później w kilka mikrosekund gasi. Przenieś drugi delay wyżej.
z tego co wiem to delay to komenda to odliczania czasu w mikrosekundach, a do dokładnego odliczania czasu należy używać funkcji Timer.
Hi wszystim!!! Dziala!!Chocby z predkoscia 1Mhz,wiecej nie sprawdzalem. Oto kod: Czas podajemy w mikrosekundach. procedure DELAY(czas:integer); var zm1,zm2 : int64; cykle : int64; begin cykle:=round(czas/1000000*(frequency)); QueryPerformanceCounter(zm1); repeat QueryPerformanceCounter(zm2); until zm2-zm1 > cykle; end; TYlko,ze zuzycie procesora jest...
No i zawsze tak będzie, bo jest JEDEN delay, a powinny być DWA. Rozwiń sobie swój kod, żeby zobaczyć gdzie jest problem: [syntax=c]GPIOA->BSRR = 1 << 5; //set bit Delay(1000); GPIOA->BSRR = 1 << 21; //reset bit GPIOA->BSRR = 1 << 5; //set bit Delay(1000); GPIOA->BSRR = 1 << 21; //reset bit GPIOA->BSRR = 1 <<...
Znalazłem pewne niedopatrzenie w programie. I upieram się przy adresie 94h lub 9B skąd 4d? Config Scl = P3.0 Config Sda = P3.1 Config I2cdelay = 1 ' P1.2 bedzie asygnowane jako MRQ Do ' glowna petla programu P1.2 = 0 ' MRQ na logiczne "0" 'TID odpowiada SDA-0 delay delay ' 200 mikrosekund P1.2 = 1 ' MRQ na logiczne "1" 'TID odpowiada SDA-1 I2cstart...
A funkcja delay jest twoja? Dziala tak jak powinna? 10*250 mikrosekund to 2.5ms. Nie wiem jak tam z twoimi oczami, ale moje takie odjechane nie sa zeby zobaczyc takie mryganie ;)
Tak wiec funkcje np. DELAY(1,6) daje mi opoznienie okolo szescdziesieciu mikrosekund (jedynka oznacza opoznienie w mikrosekundach...dwojka oznacza mili sekundy tylko ziarno to jedna milisekunda) procesor to atmel 89C5131 kwarc 12Mhz...zapomnialem dodac ze 1-wire ogolnie mi dziala moge dokonac pomiaru temperatury tyle tylko ze dla jednego czujnika a...
Przecież obsługa tego czujnika to kilkadziesiąt mikrosekund, a odczyt całości w najgorszym razie to kilkanaście milisekund. Pewnie czekasz bezczynnie na wynik używając delay(), bez kodu trudno powiedzieć.
zapoznaj się zprostą jak drut funkcją: _delay_ms(3000); // tu będziesz miał opóźnienie 3s chociaż nie aż tak dokładne co do taktu zegara. Do odmierzania taaak ogromnie długich czasów to funkcja jak znalazł. Zwykle do takich potrzeb rzadko potrzeba precyzji co do taktu zegara. jeśli będziesz chciał dokładne do taktu zegara to będziesz musiał maksymalnie...
DS1820 podpinam do 4 pinu portu B. W makrze BusHigh ustawiam mozliwosc "podciagania" lini, a w BusLow - pin 4 jest wyjsciowy. Czasy sie zgadzaja bo sprawdzalem w symulatorze avr studio. Dodam jeszcze ze DS1820 jest zasilany dodatkowa linia. Rezystor podciagajacy dalem zgodnie z zaleceniami 4,7 kOhm. Podciaganie dziala - sprawdzalem. Oto kod: .include...
Witam. Ten sam grek napisł jeszcze inne funkcje opóźnień (https://www.google.pl/search?q=Quick+an... - 3 wynik. Wyglądają bardzo podobnie do Twoich. Tylko w nich parametrem funkcji jest liczba pętli a nie mikrosekund. Może w tym tkwi problem (nie 4us ale 25*6+16 cylki maszynowych).
Witam Chcę zrobić w miarę dokładny timer na ATMega8. Ten na którym wykonuje prototypowe projekty działa ale się bardzo późni. Otóż przedstawiam problem: Wykonałem układ zapalający diodę LED przy pomocy ATMega8 ( nic więcej - taki prościutki układ). DO tego napisałem program w C o treści jak ponieżej: ****************************************...
Witam, Schemat układu jest niekompletny, brakuje kwarcu taktującego. Z programu wywnioskowałem, że jest to Xtal 12MHz. Długość trwania procedury obsługi przerwania od Timer0 wraz z preambułą nie musi być dokładnie równa 10 cyklom maszynowym (#3CBA). To wniesie pewien błąd pomiarowy odmierzania czasu, przeciętnie około 10 mikrosekund. I na koniec sprawa...
Podczas odbioru danych z pinu PD2 ( funkcja zgłoszenie ) występuje błąd tylko wtedy gdy przerwanie z timera 0 jest aktywne. Gdy na czas odbioru danych zablokuję to przerwanie procesor ładnie odbiera wysyłane do niego dane. I moje pytanie brzmi: Co jest nie tak z przerwaniem? Konkretnie to, co wskazał albertb: ... jeśli masz włączone przerwanie to jego...
Ok, zapoznałem się już z instrukcją programowania, ale wciaż nie zgadza mi się czas "INTERSCAN CODE DELAYS" W tej instrukcji również interwał czasowy ustawia się co 100us (mikrosekund), Ty napisałeś, że ustawiłeś 100ms, czyli wychodziło by na to, że zeskanowałeś ten kod 1000 razy. Jesteś dale pewien, że napewno tą opcję skanowałeś a nie przypadkiem...
ok ale jak to realizujesz? ja probuje wlasnie zrobic w ten sposob... tzn probuje narazie zrobic opoznienia od 1 do 255 us void czek(unsigned char ile) { TCCR0=0x02; //zalacz TCNT0=(256-ile); } SIGNAL(SIG_OVERFLOW0) { TCCR0=0x00; //wylacz } int main(void) //program główny { sei(); TIMSK|=_BV(TOIE0);...
Jeśli potrzebna jest Wam procedura delay, to możnaby zrobić coś z HPT np. Procedure Delay(x:Integer); //x - czas przerwy w mikrosekundach var f,t1,t2:Int64; begin QueryPerformanceFrequency(f); //czestotliwosc HPT if f=0 then exit; //wyjście jesli nie ma HPT QueryPerformanceCounter(t1); //aktualny stan licznika HPT t2:=t1+trunc(f*x*1e-6); //mam nadzieje,...
Nie działa Ci z to z millis bo może źle używasz. Jak masz przez 200ms kręcić kołem to wstawiasz w loop funkcję, która włącza kręcenie kołem i zapisuje czas startu, w kolejnych wywołaniach sprawdza czy już minęło od chwili startu 200ms i ewentualnie wyłącza kręcenie kołem. Jak coś zablokuje loop na np. 20ms to o tyle będzie maksymalny błąd pomiaru, z...
Nie wszystkie AVRy mają jednopoziomowy system przerwań. Ale to i tak nic nie zmienia. Jeśli nawet wykorzystamy wielopoziomowy system to mamy wybór między dżumą a tyfusem. Albo wyższy priorytet będzie miał LED i będzie kaszanił transmisję OW, albo wyższy priorytet będzie miał OW, ale będzie kaszanił wyświetlanie LED. Albo zrobimy to jak należy i priorytety...
Witaj, Jeśli twój program podczas odliczania czasu nie musi nic robić to wystarczy wpisać do kilku rejestrów odpowiednie wartości i potem odejmując je rekursywnie obliczyć czas. Wiedząc ile czasu zajmuje jedna instrukcja. Np dla 8MHz 1 instrukcja zajmuje 1/2 000 000 sekundy czyli 0,5us musiałbyś wykonać 2 miliony instrukcji aby minęła sekunda movlw.93...
Niezły dowcip z tym 1000000 * NOP A nie słyszałeś nigdy o pętlach? Napisz sobie taką procedurkę: ;---------------------------------------... ; Podprogram opoznienia 1 s dla zegara 12 MHz ;---------------------------------------... DELAY: MOV R1,#250 ; licznik obiegow zewnetrznej petli LOOP1: MOV R0,#250 ; licznik obiegow...
Witam wydłubałem z urządzenia uszkodzonego mechanicznie Z telewizora? Jakie układy siedzą obok na płytce? delay line Linię opóźniającą. ASAHI GLASS CO., LTD. MADE IN JAPAN Przy takich rozmiarach i wykonaniu ze szkła to mi wygląda na linię opóźniającą chrominancji o czasie rzędu 64 mikrosekundy. Wnętrzności: http://obrazki.elektroda.pl/7823597400_1...
No wiem wiem, zauwazylem ta glupote:) Szkoda tylko, ze nie jest mi do smiechu:( Dalej to nie dziala... Robilismy kiedys na laborce bardzo podobny problem, z tym ze w asemblerze, a nie w C. Pomimo tego napisalem to identycznie jak bylo na laborce.... no i dalej nic:( Przeczytalem juz wszystko na temat I2C i naprawde nie qmam dlaczego nie dziala... Troche...
Witajcie! Napotkałem na pewne problemy, gdyż potrzebuje napisać program, który będzie wykonywał pewne operacje co dokładne odstępu czasu w mikrosekundach. Moja funkcja "opóźniająca" wygląda następująco: void delay(int skundy) { int s; for (s=0; s<skundy; s++); } Wiem, że każde wykonanie pętli posiada swój stały czas, czyli...
Temat zostaje przywrócony do życia - mam nadzieje, że pacjent nie zejdzie w trakcie....;). Otóż magistrala 1Wire wymaga dobrego time'ingu, czyli czegoś czym była zupełnie osobna linia zegarowa np. w RS232. Raz podany sygnał w zadanym tempie musi zostać utrzymany do końca wymiany danych z iButton'em, aby 64 bitowy numer identyfikacyjny mógł zostać wysłany...
Mały update: u mnie działa na Ubuntu + XBMC. Z dwoma wyświetlaczami podłączonymi do jednego układu LCD2USB, wyświetlającymi w sumie 4 linie konfigurowalne w pliku /home/username/.xbmc/userdata/LCD.xml To wszystko zrealizowałem metodą prób i błędów. Jak zawsze można to zrobić bardziej elegancko i pozmieniać oryginalne procedury, ale niestety nie miałem...
#include <avr/io.h> /***************************************... Definicje stałych ****************************************... #define F_CPU 1000000 /* 1MHz zegar procesora */ #define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */ /***************************************...
#define F_CPU na sam początek kodu, przed include'ami, a najlepiej to w makefile umieścić jako jedną z opcji, tak żeby została przekazana do kompilatora jako np. "-DF_CPU=16000000UL" Przyjrzyj się temu: static __inline__ void _delay_ms(double __ms) { uint16_t __ticks; double __tmp = ((F_CPU) / 4e3) * __ms; if (__tmp...
(...) ianie prędkości, gdy wartość przekroczy martwą strefę } else { speed = 0; // Ustawianie prędkości na 0, gdy wartość znajduje się w martwej strefie } digitalWrite(STEP_PIN, HIGH); delayMicroseconds(speed); digitalWrite(STEP_PIN, LOW); delayMicroseconds(speed); } } Rozumiem, że chcesz, aby sterowanie silnikiem było realizowane wyłącznie za pomocą...
Witam, buduję sterownik MIDI na uC ATMega8 (język C) i coś nie bardzo mogę się dogadać z komputerem. Prosiłbym o pomoc co może być nie tak. Schemat obwodu (oczywiście bez części programatora, bo ten działa dobrze :)): http://obrazki.elektroda.net/23_11851219... i kod źródłowy: Krótki opis działania: Program ma wysłać 3 bajty (włączyć dźwięk),...
Kondensatory przy rezonatorze należy podłączyć do GND a nie do Vcc. Oj, ale babol - przegapiłem go :) Dodam jeszcze, że to nadawanie 2 razy jest efektem drgań styków (jak się ich pozbyć podałem Ci link w poprzednim poście). Twoje przerwania długo trwają. Gdy styk drga, to wywoła pierwsze przerwanie, a po rozpoczęciu jego obsługi zerowana jest flaga...
Dałem tam tego delay(55) bo czujnik musi mieć czas na konwersję. Więc delay powinien być pomiędzy wydaniem komendy "mierz", a przejściem do odczytu. Czyli co najwyżej powinieneś wydłużyć "_delay_ms(15);". Jeśli zaadresujesz urządzenie I2C do odczytu, to ono decyduje o tym kiedy odpowiedzieć. Jak dasz w swoim kodzie delay, to jedyny efekt jaki osiągniesz...
Witam Chciałbym się dowiedzieć czy za pomocą jednej płytki ArduinoUNO, byłaby możliwość sterowania kilkoma serwami MG996r niezależnie wraz z kontrolą przyspieszenia i hamowania każdego z nich. Kupiłem niedawno robota "robot 6 DOF", coś jak na linku poniżej https://www.youtube.com/watch?v=PX0raMFn... Płytka posiada 6 wyjść PWM, więc mogę podłączyć właśnie...
A co to jest to "poprawne zachowanie"? Wciśnięty UP zapala diodę. Zwolniony DOWN po jakiejś mikrosekundzie ją gasi.
Dosłownie chodzi o 1-2 ms różnicy. A z czego te różnice się biorą? 1-2ms to sporo. Różnica między kanałami w karcie dźwiękowej to mogą być niewielkie różnice w górnej częstotliwości granicznej wzmacniaczy co w najgorszym przypadku da ułamki mikrosekund, elektrycznie zrobić opóźnienie 1-2ms nie jest łatwo, więc i nie ma szans że samo się zrobiło. Dokładnie...
[syntax=c] PORTB = 0x92; //ustaw piny PORTB na 0b10010010 (prawdopodobnie zapala LEDy tam gdzie zera) for(j=1; j<w; j++) _delay_us(50); //Czekaj w pętli W razy 50 mikrosekund //zgaś diody PORTB = 0xFF; //ustaw piny PORTB na 0b11111111 (gasi diody) for(j=1; j<b; j++) _delay_us(150); //Czekaj w pętli B razy 150 mikrosekund [/syntax]
Nie, nie widzę tego. Nie chcę tutaj wklejać kodów z innych poradników, ale na przykład: /* Definicja zmiennych */ int t; for(t=0; t<=768; t+=2) ........................................... _delay_us(t); // opóźnienie w mikrosekundach I tyle.
Witam. Problem jest znowu z petla opozniajaca ,jak pisalem juz wczesniej. Przy kwarcu 16Mhz zapis _delay_us(1500); nie da opoznienia 1500us, poniewaz wartosc 1500 przekracza maksymalne opoznienie dla kwarcu 16Mhz! W bibliotece delay.h jest wyraznie napisane : /** \ingroup util_delay Perform a delay of \c __us microseconds, using _delay_loop_1()....
Biorąc pod uwagę fakt, że jeden bit w 1-wire trwa kilkadziesiąt - kilkaset mikrosekund, oraz to, że można go zrealizować w pełni sprzętowo korzystając z UARTu, taka zabawa IMHO nie ma sensu. No racja :] Ale są przypadki gdzie moje rozwiązanie jest najoptymalniejsze. Ja mam do obsługi 8 czujników, każdy na osobnym osobnym pinie...Osiem UARTow?..:] BTW,...
Witam. Mam problem z odczytem stanu wejść PD2 i PD3 w Attiny 2313 i WinAVR C++. Do wejść podłączone są switche zwierające do masy. Nie mam reakcji na naciśnięcie klawisza. Nie wiem czy dobrze oprogramowałem wejścia. Nie wiem gdzie popełniam błąd. O to wycinek kodu programu: ... //---- wejścia klawiatury --------------------------------------- //----...
__delay_cycles((unsigned)... __delay_cycles((unsigned)... __delay_cycles((unsigned)... To opóźnienie jest 490 mikrosekund. Opóźnienie do 20 mikrosekund. Opóźnienie do 5 mikrosekund. Kod używam do czytania DS1990A. I przyprowadził go do opóźnienia...
Te wszystkie biblioteki w Arduino IDE dla BL0937 to lipa ! Zacząłem pisać sam cały kod... Obecnie mój kod jest taki : #include <Arduino.h> #include "Timer.h" #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266HTTPClient.h> #include <ESP8266HTTPUpdateServer.h>...
Ma mi to posłużyć w nauce podstaw, później można się na coś większego/nowszego przerzucić. To "później" przyjdzie wcześniej niż Ci się wydaje. Pierwszy z brzegu kurs AVR-GCC: http://kursc.forbot.pl/ już na 3 lekcji pojawia się Atmega16A. Ja zrobiłbym podstawkę dip 40 i mniejsze procesory w "razie potrzeb" podłączał poprzez adaptery. Same wyświetlacze...
Mozesz isc na latwizne i uzyc kodu ponizej. Na 100% dziala on na kwarcu 11059200 ale ten Twoj tez chyba styknie. W listingu masz petle opozniajaca 1 ms wyznaczona doswiadczalnie oscyloskopem, nie jest ona napewno dokladna co do mikrosekundy ale taka dokladnosc nie jest w tym zastosowaniu potrzebna. Wystarczy, ze Twoj hardware bedzie zgodny z ustawieniami...
C znam dosc dobrze, studiuje informatyke chciałbym bardziej napisać coś samemu niż korzystac z gotowców, nie wiem jak dokladnie odmierzać czas rzedu mikrosekund na tym polega problem- napisanie funkcji która odczeka potrzebna chwile. Którego timera najlepiej uzyc... PIT, RTT PWM Dodano po 16 do testowania kodu uzywam TV, oscyloskopu i odbiornika TSOP1738
Chciałbym wrocic do procedur jakie napisałem na wstępie: void USART_Transmit( unsigned char data ) ... void write_temp( short int t) , otoz chce użyc jakiejs alternatywnej procedyry, zeby byla o wiele prostrza, jak ktos taki jak ja (poczatkujacy) spojrzy na ten program to bedzie wiedzial o co chodzi. Nie podoba mi sie ta procedura. Szukalem juz troche...
Pisanie funkcji opóźniających to wyważanie otwartych drzwi. Są do tego już zrobione funkcje, musisz tylko dołączyć do programu plik util/delay.h i możesz ich używać. _delay_ms(milisekundy); _delay_us(mikrosekundy); Czyli w funkcji klawisz zamiast czekaj(30*tau); wpisz np. _delay_ms(5); program będzie czekał 5ms. Później musiałbyś wywoływać funkcję klawisz...
jednak jedyne, co udaje mi się zrobić to włączenie muzyki Czyli zasymulowanie pojedynczego wciśnięcia za pomocą Twojego układu działa, tak? To by oznaczało, że czasy są raczej w porządku. Jaką masz wersję pilota? Bały krótki czy szary długi? Po przebiegu zgaduję, że biały, mam rację? Sugerowałbym kilku- albo kilkunastokrotne wykonanie tego fragmentu...
Jakieś pomysły Tak - nauka. Zacznij od bloga kolegi dondu gdzie znajdzesz podstawy mikrokontrolerów oraz języka C. Czytałem, że Procesor nie potrafi wykonywać 2 czynności na raz no rzeczywiście jak zauważysz róznicę rzędu mikrosekund między poszczególnymi czynnościami, to rzeczywiście będzie problem. Będziesz musiał iść w wielordzeniowe. - Jeden rdzeń...
Napięcie na mostku pokazuje 21.2 mV, mierze multimetrem w zakresie 200 mV. mój kod arduino wygląda tak, zczytuje wartość ciągle -8388608.000 V Dodano po 16 Bardzo proszę kod programu wstawiać używając znaczników "SYNTAX". Teraz bezpłatnie poprawiłem za Ciebie, kolejne będą kosztować Cię śmietnik ;-)
zrobiłem test z pętlą, w której program zwiększa wypełnienie o 1 mikrosekundę powtarzając od wartości 700 do 2200 mikrosekund. Wszystko działa płynnie i ładnie do 765, po tej wartości nagle serwo wykona ogromny skok i idzie znów dalej płynnie (jakby nie było zakresu ustawienia 765-1500). Akurat wczoraj też odnalazłem przykład kodu z wewnętrznym oscylatorem...
Repeated variable name __c Repeated variable name __c within block. Rename it typedef debugging not supported COFF file contains inconsistencies or unsupported features. Debug info could be wrong or incomplete to musi zniknąć - pewnie jakieś problemy z bibliotekami... void czekaj(unsigned long pt) //procedura wytracania czasu { #define...
Niby dlaczego za małe(krótkie) Procedury delay liczą 256*256 cykli co daje trochę ponad 65ms dla zegara 1 MHz. Procedury, które podałem łatwo dostosować do dowolnego zegara. Wystarczy pozmieniać wartości ładowane do odpowiednich rejestrow. W komentarzach podane są cykle zegarowe zajmowane przez określoną instrukcję. Dla 1MHz cykl wykonuje się w czasie...
Jak należy rozumieć tą linię? Delay1ms(700); // opóźnienie 255ms Ile dokładnie wyniesie opóźnienie? Jeśli 255ms to układ nie wyrobi się z konwersją. A dalej taki "kwiatek": //opóźnienie około 1 sekundy dla kwarcu 8MHz void Delay(unsigned int time) Jeśli wszystko jest obliczone dla zegara 8 MHz a Ty podłączasz 24 MHz to na 100% nie będzie...
Witam Pisze własnie program do sterowania w LCD w C pod Microblaza o zegarze 100MHz i mam problem z czasem. Mianowicie, znalazłem sobie funkcje : void czekaj(unsigned int useconds) { int i,j; for (j=0;j<useconds;j++) for (i=0;i<26;i++) asm("nop"); } teoretycznie powinna dawać mikrosekundę opóźnienia,...
Zapewne dlatego, że okres (opóźnienie) to odwrotność obrotów (częstotliwości), więc przeliczaj czas półokresu ze wzoru: T = (1 / (rpm / 60)) / 2 lub stablicuj czasy dla założonego zakresu obrotów z rozsądnym krokiem i wstawiaj je do funkcji delay. Na przykład dla 100, 200, 500, 1000, 2000 obrotów, tablica powinna zawierać: czas[] = { 300, 150, 60,...
http://obrazki.elektroda.pl/6223122300_1... Domyślną metodą kontroli napięcia 230 V AC jest kontrola poprzez triak. Tak zrealizowany jest każdy ściemniacz. Kontrola taka oparta jest o kontrolę fazy - triak jest otwierany jedynie na pewną część sinusa napięcia przemiennego. http://obrazki.elektroda.pl/2250705900_1...
Wprowadziłem stosowne zmiany w moim kodzie: - dodałem odpowiednie opóźnienia po zmianie stanu linii EN oraz RS (1 mikrosekunda), - nieco zmodyfikowałem ustawienia wyświetlacza. [syntax=c]/* * main.c; plik zgodny z biblioteką CMSISv1p30_LPC17xx/inc/LPC17xx.h * CMSISv1p30_LPC17xx/src/system_LPC17xx.h * * Created on: 2011-10-01 * Author: jakub.papuga */...
Mój błąd - użyłem słowa "biblioteka" do plików "*.h" z funkcjami inline. Żaden z dołączanych przeze mnie (jawnie) plików h ( io, signal, wdt, delay, pgmspace ) nie odwołuje się (poprzez nagłówek extern) do plików obj. Więc mam nadzieję że będzie ok. Jeśli te same operacje będą wykonywane przy użyciu zmiennych deklarowanych w RAMie to pojawiają się zakłócenia...
Skoro już jesteśmy przy konstruktywnych krytykach, to i ja dodam kilka uwag: 1) Schemat jest bardzo słabo czytelny. Staraj się stosować Vcc i GND, bo np. okolice resetu wyglądają na pierwszy rzut oka co najmniej dziwnie. Warto rozdzielić sekcje zasilania i głównego obwodu. Oto kawałek jakiegoś mojego projektu - sam powiedz, czy nie jest bardziej czytelnie?...
Ale czegość tu jeszcze nie rozumiem przecież mam kwarc 8MHz i stosuje delay_us(value);a value to czas nagłówka i bitów w mikrosekunndach czy czas nie powinien się wydłużyć ośmiokrotnie?????? Zastanów się jeszcze raz nad tym co napisałeś vs nazwa funkcji: delay_ us Innymi słowy, czy ta funkcja jest funkcją liczoną w taktach mikrokontrolera, czy w mikrosekundach?...
Witam, Mam pytanie co do obsługi termometru ds18b20 i ogólnie komunikacji 1wire. Przejrzałem kilka gotowych bibliotek do obsługi 1wire i wszystkie zawierają opóźnienia programowe (delay). Znalazłem też informację, że można wykorzystać UART do tego celu ale z tego co widzę tam również występują opóźnienia. Nie chodzi mi o opóźnienie 750ms czyli czas...
Dobra okazja by to spie.... Jeśli jest to typowa filozofia Arduino, z delayami, odpytywaniem portów w pętli (a nie przerwania), to zabija większą aktywność Jak napisałem - wykorzystuje stack TCP I proste parsowanie stringa. Nie ma w tym magii, proste C portowalne na wiele platform. przyklad kodu parsowania: void parseudp(AsyncUDPPacket packet)...
Co powodowało te błędy odczytu z dyskietek? https://hackaday.io/project/20185-arduin... Nie udało mi się ustalić co. Błąd raczej przy odczycie niż zapisie. Z każdym odczytem nieco inny wynik. Czasami dało się odebrać poprawnie kilkanaście bajtów, czasami nawet trzech czy czterech nie dawało rady. Czyżby zakłócenia? Czasami nawet...
Zmieniłem program i dalej nie wyświetla,przy szybszym opóźnieniu 40us kursor zostaje w pozycji 00.Gdy wolniej 20ms to przeskoczy do 4F. Liter brak. [syntax=avrasm]listp=16f676 #include <p16F676.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF ;_HS_OSC ;stałe**********************************...
Witam Chciałbym się zapytać jak się ma funkcja _delay_loop_2 do funkcji _delay_ms lub _delay_us? Czyli jaki jest przelicznik z hmm... licznika _delay_loop_2 na milisekundy lub mikrosekundy, oczywiście domyślam się, że jest to obliczane względem częstotliwości czyli np. _delay_loop_2(1200); to 4000 cykli zegara dla częstotliwości 8MHz w takim razie dla...
Zaznacze na początku, że nie jestem jeszcze zbyt mocny jeśli chodzi o mikrokontrolery. Napisałem (na podstawie kodów znalezionych w sieci) programik, który za pomocą przycisków pozwala zwiększać/zmniejszać wypełnienie sygnału (PWM) i traktuje nim diodę. Chciałbym za pomocą dwóch innych przycisków traktować drugim sygnałem PWM drugą diodę. Jak to zrobić?...
Tu: " // Odczekanie przez master 470 ms na koniec okresu nie aktywności _delay_us(400); " Piszesz o ms a używasz opóźnienia w mikrosekundach. I w paru innych miejscach też.
Kolego dondu: deklaracja zmiennej licznik: unsigned long int licznik=0;//zmienna globalna licznik Fuse bity ustawione prawidłowo (temat wałkowany setki razy).Zegar definiowałem początkowo w ustawieniach konfiguracyjnych AVR Studio, później gdy zaczęły się problemy przez #define F_CPU. Do mirekk36: Timer sprzętowy działa bardzo dobrze i precyzyjnie....
Na początek powinno być: #define DDR_SPI DDRD zamiast: #define DDR_SPI PORTB Kolejna uwaga: staraj się pisać programy nie wpisując wartości dla wszystkich pinów portu! Stan wysoki na wybranym pinie łatwo osiągniesz np. tak: PORTD|=0xF0; // dla pinów PD4, PD5, PD6 i PD7 albo tak: PORTD|=((1<<PD5)|(... // piny...
dzięki mam juz tam jest odstęp czasowy to jest to _delay_us(13); tyle że to jest w mikrosekundach anie milisekundach dzięki ale gafa :D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D...
Realizując tutorial http://www.patron.net.pl/error.html napotkałem się na problem. Pierwsze aplikacje są dobrze udokumentowane, następne troche słabiej. Mam problem z obsługą wejść w programie. W programie głównym jest wykorzystywana zmiennaklawisz_s1_wejscie a nie jest ona zadeklarowana w pliku nagłówkowym. Analizując program dopisałem: #define klawisz_s1_wejscie...
Witam. Mam program który generuję dźwięk na zestawie ZL3AVR. Chciałbym generować dźwięk o określonej częstotliwości, a nie tak jak jest teraz, czyli w postaci mikrosekund. Wiem, że 1hz to 1/1s ale już gdy liczę na mikrosekundach, coś jest źle. Pomoże ktoś ? #include <avr/io.h> #include <util/delay.h> void voice(unsigned int frequency)...
W sumie zrobiłem coś takiego w oparciu o One-Pulse Mode: inicjalizacja: [syntax=c] void tim6_init(void) { RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; TIM6->PSC = 16-1; // 1us TIM6->ARR = 1000-1; // 1000 cykli daje 1ms TIM6 -> CR1 |= TIM_CR1_OPM; } [/syntax] funkcja opóźniająca: [syntax=c] void delay_ms(uint16_t time) { while(time--) { TIM6->CR1 |= TIM_CR1_CEN;...
Teraz silnik działa elegancko :) . Natomiast mam pytanie odnośnie prędkości gdy zmieniam cykl na wyższą wartość mikrosekund to silnik przyśpiesza. Gdy zmniejszam wartość to silnik zwalnia. Pytanie jak ustawić tą częstotliwość jaka jest maksymalna dla tego silnika. Dlaczego gdy zmniejszam wartość prędkość spada a gdy zwiększam przyśpiesza. Przez to nie...
-> jarek_lnx Trafiłem już dziś na artykuł z pierwszego linka i nawet zamówiłem na "popularnym portalu aukcyjnym" taki to moduł, mając na celu właśnie modyfikację stałej czasowej. Natomiast drugi podesłany przez Ciebie link jest również ciekawy, policzyłem wstępnie że dla 5Hz będę potrzebował C2=16uF. Trochę duży, może zwiększę nieco R6 z bazowych...
(at)kamil94goldman odpowiedź jest prosta - tak samo jak do PSC wpisujesz wartość o 1 mniejszą niż dzielnik który sobie policzyłeś, tak do ARR również powinieneś wpisać wartość o 1 mniejszą. no tak... ;) Walczę z odmierzaniem czasu, nie wchodząc w przerwanie. Opóźnienie chciałem uzyskać dzięki sprawdzaniu flagi przerwania ale gdy program uruchamiam...
Na potrzeby obsługi termometru DS18B20U (1-wire) potrzebuję funkcji, która oczekuje określoną ilość czasu z dokładnością do mikrosekund. Znalazłem coś takiego: [url=http://forums.xilinx.com/xlnx/attac... Niestety z moich testów wynika, że ta funkcja nie działa prawidłowo - wydaje mi się, że ze względu na...
Wielkie dzięki za pomoc nadzieja wróciła , adres wyświetlacza 0x3c Raystar pozostaje wysłać do lcd ten adres znalazłem w necie następny kod Spróbuję go dostosować zerknij czy sie nada do zmian i2cmaster.c [syntax=c]///////////////i2cmaster.c //Plik zawiera funkcje wykorzystywane w i2c dla trybu nadrzędnego (master) #include <compat/twi.h> #include...
hmmmm... kurcze:( Narazie mam ustawiony czas 5 mikrosekund i widać efekt delikatnego migania, dopiero przy czasie jenej mikrosekundy nie widać go... Zasilanie jest albo z jednej 9V baterii albo z 6x1,5V, za każdym razem efekt ten sam:( To może zamieszcze program: #include <avr/io.h> #define F_CPU 1000000 //1MHz zegar procesora #define CYCLES_PER_US...
Można wykorzystywać wewnętrzne podciąganie. Urządzenie slave 1wire może jedynie ściagać linie 1wire do masy i dlatego jest konieczne jakiekolwiek podciąganie. Moje procedury wykorzystują sterowanie 1wire przez właśnie rejestry PORTx. Przy odpowiednie dobranych czasach pozwala to uzyskać transmisję na bardzo długich liniach (udalo się uzyskać transmisję...
https://obrazki.elektroda.pl/4263430300_... W temacie prezentuje: 1. Programator optoizolacyjny albo jak kto woli przejściówka do programowania ;) 2. Program na linuxa do programowania avr przez ISP 3. Inne schematy i konfiguracje działające z tym programem. Może zaczne od wad :) Wszystko co tutaj prezentuje to względnie proste sposoby...
Esp32 program generujacy sygnał prędkości BMW E39. Amatorsko napisałem program który generuje sygnał prostokątny, częstotliwość zmienia się potencjometrem 2kohm. Zadaną częstotliwość przelicza na prędkość i wyświetla na SSD1306 I2C. Problem polega na tym że jak zakomentuję część wyświetlacza to program reaguje na potencjometr i zmienia czas trwania...
#include <avr/delay.h> funkcja _delay_ms(x); _delay_us(x); pierwsza opóźnia o x milisekund druga opóźnia o x mikrosekund Pozdrawiam Robert
No więc tak, cały program jest podzielony na 3 pliki: -main.c <-główny plik, zawiera funkcję main() -functions.h <-plik nagłówkowy -functions.c <-plik zawierający definicje wszystkich funkcji, których prototypy znalazły się w poprzednim pliku Zaczniemy od pliku functions.h: #define F_CPU 1000000 //1MHz zegar procesora #define CYCLES_PER_US...
Twój program z postu [url=https://www.elektroda.pl/rtvforum/v... wydaje się być poprawny. Wartości jakie wpisujesz do OCR1 (czas w us) powinny być w okolicach 1500 +- 500 - tak z grubsza, te powinny zaakceptować różne serwa. Te 5000 o których wspomniałeś to raczej przesada. Jak to zasilasz, bo w tym może być problem....
https://obrazki.elektroda.pl/6710486900_... Każdy, kto zaczyna swoją przygodę z Arduino, zwykle na samym początku staje przed dylematem w jaki sposób prosto i przejrzyście zarządzać zadaniami, które uruchamiane powinny być w określonych i najczęściej różnych interwałach czasowych. Jest to problem tzw. harmonogramowania zadań. W niniejszym...
Jakiego typu jest absolutnie absurdalny i perwersyjnie wypaczony pomysł, aby mając OSa robić takie delay'e w wątkach ??? Również o podobną perwersję zakrawa wykonywanie przerwania timera co mikrosekundę tylko po to, zeby zmniejszać tam jakąś zmienną. Wez timer, skonfiguruj go jako one-shot, skonfiguruj mu takt na 1us, do ARR wpisz chciany czas w us,...
I2C to chyba nie jest dobry trop. Zrobiłem troszkę zmian w bibliotece zmieniając kilka rzeczy. Po tych zmianach udaje mi się próbkować troszkę szybiej około 18-20 razy na okres. W pliku Adafruit_ADS1015.cpp zmieniłem funkcję delay na delayMicroseconds. Było to organicznie uniemożliwiające częstsze próbkowanie niż 1 ms. Dzięki temu zamiast jednej tysięcznej...
Witam, chciałem zrobić sterowanie silnikiem krokowym przy wykorzystaniu Timera. Niestety milisekundy są za długie a potrzebuję uzyskać większe prędkości. Wcześniej zamiast timera miałem delayMicroseconds(); ale z timerem jest łatwiej, tylko nie mogę znaleźć sposobu żeby obliczał w mikrosekundach. Czy jest w tej bibliotece taka opcja? a może są inne...
Bardzo dziękuje za cenne podpowiedzi. Mam jeszcze kilka pytań: procedure DelayM( interwal_w_milisekundach :integer); var Start:longint; begin Start:= GetTickCount ; repeat Application.ProcessMessages; until ((GetTickCount-Start) >= Longint( interwal_w_milisekundach )); end; 1. W powyższym kodzie zastosowałeś funkcje GetTickCount mam pytanie czy ona...
Niezbyt wiem jak działa platforma, na którą programujesz – ale z czystym sercem mogę ci napisać że oba fragmenty kodu które napisałeś są błędne. W obu fragmentach kodu tworzysz pętlę, która powtarza się bardzo, bardzo wiele razy w krótkim czasie – przez co pochłania całą moc obliczeniową procesora – co zapewne zostaje wykryte i przez...
timer mikrosekunda funkcja delay przerwanie delay
prasa prędkość komunikaty avast sharp migające podświetlenie
babcia komputer sterownik movera
Luzy zaworowe Honda PCX 125 2023 eSP: wartości i regulacja System zapłonowy w Hondzie 1.6: przewody WN czy cewki COP?