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]
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...
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 */ /***************************************...
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.
delayMicroseconds() wprowadza opóźnienia w mikrosekundach, a nie milisekundach. Powinieneś użyć delay() zamiast delayMicroseconds().
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 <<...
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...
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...
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...
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...
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ę...
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.
Nie pomija tylko zapala ją a później w kilka mikrosekund gasi. Przenieś drugi delay wyżej.
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...
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,...
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...
A co to jest to "poprawne zachowanie"? Wciśnięty UP zapala diodę. Zwolniony DOWN po jakiejś mikrosekundzie ją gasi.
[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.
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...
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...
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...
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...
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 ;)
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...
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?...
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ż.
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...
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...
#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
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).
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...
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);...
#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...
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)...
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...
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: ****************************************...
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...
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,...
Witam. Mam taki problem, wyświetlacz lcd 1602,po zainicjowaniu,ustawi kursor na 00(dotąd działa jak należy,jedna linia ,dwie ,migający kursor). Po wysłaniu bajtu 'litera' przestawi kursor do tego adresu np 48 i dalej nic. Co robię nie tak gdzie jest błąd. Dzięki wszystkim za pomoc. [syntax=avrasm] ;***************************************...
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...
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;...
__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...
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()....
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...
#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 */ /***************************************...
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...
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...
timer mikrosekunda amper mikrosekunda impuls mikrosekunda
schemat instalacja elektryczny bosch lodówka amica naprawa przykręcić tranzystor
defro k1pv4 plyta glowna sharp
Regulator balansu lewy/prawy głośnik - nazwa urządzenia Moment dokręcania panewek głównych wału korbowego BMW N63B44B