Bardziej pokręconego kodu na delay to chyba nie widziałem. Ten delay to widzę, że ma być "nieblokujący" chyba, że taki skomplikowany :D bo jeśli nie to nie można poprostu czegoś takiego: [Psuedokod] [syntax=c] volatile int counter; delay(x) { counter = 0 while(counter<x){/* waits */} } ISR() { count++; } [/syntax]
Nie bardzo mi się chce wnikać w przyczyny , więc wrzucę Twój zmodyfikowany kod: #include <avr/io.h> #include <avr/interrupt.h> #define PWM_out(value) OCR0 = value void delay(void){ volatile unsigned int i; for(i=5000;i;i--); } unsigned char pwm=127; int main(void) { DDRD = 0x00; PORTD = 0xFF;...
Zmienną używaną w przerwaniu deklaruje się jako volatile (wykluczona z optymalizacji), inaczej będzie cyrk... volatile unsigned char licznik Ładniej by to wyglądało scalone... tzn... void czekaj(void) { licznik = 30; TCCR0 = 0x05; do{}while(licznik); } ISR(TIMER0_OVF_VECT) { licznik--; TCCR0 = 0; //wypadałoby...
Tak, jest zerowane w przerwaniu, ale zmienna nie jest oznaczona jako volatile - w takim przypadku kod zostanie zoptymalizowany do jednego sprawdzenia i pętli nieskończonej. Dodano po 6 unsigned char DELAY; void myfunc() { DELAY = 1; while(DELAY); } kompiluje się do: myfunc: ldi r24,lo8(1) sts DELAY,r24 /* ustawienie...
Coś takiego znalazłem. Co prawda na Atiny ale można przerobić. [syntax=c]// // Talking to ultrasonic sensor HC-SR04 with an ATtiny84, and // sending distance data using serial communications. // // electronut.in // #include <avr/io.h> #include <string.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 8000000...
Ad 1: [syntax=c]// bitfield definitions typedef union { struct { unsigned T2CKPS :2; unsigned TMR2ON :1; unsigned TOUTPS :4; }; struct { unsigned T2CKPS0 :1; unsigned T2CKPS1 :1; unsigned :1; unsigned TOUTPS0 :1; unsigned TOUTPS1 :1; unsigned TOUTPS2 :1; unsigned TOUTPS3 :1; }; } T2CONbits_t; extern volatile T2CONbits_t T2CONbits (at) 0x012;[/syntax]...
W zasadzie program działa, ale... to wszystko. Można to zrobić o wiele lepiej. podobno nie powinno stosować się funkcji delay w celu realizacji opóźnienia. Tak. O wiele lepiej jest to zrobić na przerwaniu timera. Poza tym, lepiej jest zadeklarować tablicę z której będziemy wczytywać wartości portów, a w funkcji obsługującej to wszystko tylko przesuwać...
Teraz wiem ze ten przykład mi działa to zaraz się przekonam czy faktycznie to MCO2 się do tego lepiej nada. Spróbuj może tego: [syntax=c] void mco2enable() { volatile uint32_t tmpreg = 0x00U; // set mco2 port clock RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; // delay after an RCC peripheral clock enabling tmpreg = RCC->AHB1ENR & RCC_AHB1ENR_GPIOCEN; (void)(tmpreg);...
Interfejs CobraSPI wstępnie uruchomiony. Wysyła znaki oraz odbiera swoją transmisję. https://obrazki.elektroda.pl/4256100500_... Filmik. Na ekranie są dwa znaki. Pierwszy od lewej to znak wysłany, drugi to znak odebrany. W środku filmiku następuje rozsynchronizowanie nadany/odebrany ponieważ na chwilę została odłączona zwora między...
http://obrazki.elektroda.pl/9209500600_1... O tym, że większość padów do PEGASUSa często ulega uszkodzeniu, nie trzeba nikogo informować. I nie chodzi tu o uszkodzenia kabla czy też wtyczki, ale układu scalonego będącego w padzie. Zwykle uszkodzenie objawia się: * całkowitym brakiem reakcji na wciśnięcia klawiszy, * niedziałaniem niektórych...
Ciągle walczę i właśnie pobrałem sobie CubeIDE i teraz ta: 1. stworzyłem nowy projekt bez bibliotek zaznaczając m.in. Target projekt type na empty: https://obrazki.elektroda.pl/9699499800_... 2. w projekcie zobaczyłem pliki: - main.c - syscalls.c - sysmem.c 3. wrzuciłem sobie do projektu kolejne pliki: - stm32f103xb.h - core_cm3.h -...
https://obrazki.elektroda.pl/3153730500_... Witajcie moi drodzy W tym temacie najpierw szczegółowo pokażę wnętrze drukarki HP Deskjet D1360 , a potem przedstawię jak można wykorzystać jej części z Arduino. Określę pinout enkodera ze środka, napiszę kod pozwalający określić pozycję karetki dzięki użyciu enkodera, oraz też oczywiście...
#include <util/delay.h> #include <avr/io.h> void TWI_start(void); void TWI_repeated_start(void); void TWI_init_master(void); void TWI_write_address(unsigned char); void TWI_read_address(unsigned char); void TWI_write_data(uint8_t); void TWI_read_data(void); void TWI_stop(void);...
Witam. Chciałbym zasięgnąć porady odnośnie funkcji przesyłającej string poprzez UART, gdzie z jakiegoś powodu ciąg znaków przechowywany jest w pamięci RAM procesora AVR, a nie w pamięci FLASH. Dla przykładu poniższa funkcja działa jak należy i rozmiar zajętości pamięci RAM pozostaje bez zmian a więc string przechowywany musi być w pamięci FLASH. [syntax=c]uart_puts("NAPIS...
Remzibi dziękuję bardzo. Już trafiłem. Ale teraz mam tylko raspberryPi i staram się nagrać to na kość. Ale mam problem z ustawieniem CMP na 1 i nie mogę tego obejść. Jak by to ładnie ująć w słowa, tak żeby i nie obrazić i nie zniechęcić. Polecam kupić/zdobyć/pożyczyć/wynająć/zlecić/oga... programator do kości SPI i nie zawracać du.y. Niestety, dzisiejsza...
Wybacz, że nie rozumiem wielu rzeczy. To pierwsze w sumie spotkanie z arduino. Tak, potrzebuje dwa kierunki, bo walek do ktorego będzie przylorzony enkoder potrafi (na postoju) minimalnie sie cofnac i jesli nie zmniejsze tego licznika w tedy, to po ruszeniu do przodu, przekaznik bedzie w innym "miejscu" się załaczać. Co do wałka do ktorego bedzie przyłożony...
A co z kompilatorem? Napisałem do IAR. Jest wbudowany w Delay. #define XTAL 7372800ul u8_t Onewire_Reset(u8_t reader) { volatile u16_t i; u8_t err; err = 0; //****** ONEWIRE_DDR |= (1<<(TP0 + reader)); __delay_cycles((unsigned)... ONEWIRE_DDR &= ~(1<<(TP0 + reader));...
Nie ma czego szukać w necie, trzeba usiąść chwilę na rękach by nie robić niepotrzebnego wiatru i pomyśleć. Jak masz niebieską to miałeś cały czas taki przykład, 19_ProjektWielozadaniowy. Umiesz zamigać led co 1s bez delay, to umiesz zamiast słowa ledON/OFF użyć w tym miejscu, zmienna++. Czyli umiesz zliczać upływ sekund, umiesz zmienić 1000ms na 10ms,...
to while wyrzucony nie będzie (bo to statement with no effect, więc kwalifikowałby się). Tylko widzisz jeśli by taki while był wyrzucany nie ważne czy dana zmienna jest volatile czy też nie, to by nie miało by wtedy sensu, a tak to możemy powiedzieć kompilatorowi, że nie chcemy wyrzucać pętli dodając volatile. W końcu takie konstrukcje są często stosowane...
Zamieścileś kod tp dpbrze :) Musisz zrobic zmienna globalna volatile int f = jaks wartosc poczatkowa; poniewaz f dajesz delay w ms to aby zobaczyc jakas zmianę to bedziesz musial sie naklikac (do 1 sekundy 1000 razy) zrób sobie dodawanie jakiejs wiekszej wartosci no 200 lub 500, albo zamiast mydelay(f) zrób madelay(f * mnoznik)
Przerwania mogę obsługiwać na INT0 i INT1 a potrzebuję jeszcze trzeciego ^ To jest tylko jeden rodzaj przerwań - od zmiany stanów zewnętrznych cna odpowiednio oznaczonych wyprowadzeniach (zajrzyj do noty katalogowej... ;) ), nie ma nic wspólnego z przerwaniem Timera, które wystarczy jedno... Proszę bardzo, oto dramat w wielu "wątkach" do testów - wiem...
Witam, do użytkownika TMF, u mnie taka procedura typu (wartość jest przystosowana do moich potrzeb) volatile unsigned int delay = 0xFE; while(delay--); działa poprawnie zgodnie z zamierzeniami myślę że gdybym nie dał volatile to może to by działało jak ty myślisz. Definicja volatile: Indicates that a variable can be changed by a background routine....
W przypadku AVR delay używający zmiennej kompiluje się poprawnie: Ten temat nie dotyczy ARM. Dodano po 1 i o jaka implementację delay_ms. Fakt. Dla AVR autor napisałby "_delay_ms(x)". Nie chodzi też o Arduino - "delay(x)" a może "Delay(x)".
Kolego Chivo ja korzystam obecnie z enkodera dfrobot df400 ma 400 impulsów na obrót, czasem bywały problemy z nim ale znacznie przewyższa tanie impulsatory. Wracając do tematu opracowałem kod który działa mniej więcej tak jak bym chciał. Czujnik odległości optyczny odbiciowy działa na pinie 12, na pinie 2 korzystam z impulsów enkodera. Podczas gdy obiekt...
Witam, zastanów się co się dzieje w switch (OPCJA) dla PRZEL == 1. Jak będziesz wiedział jak działa switch...case, możesz wykorzystać go do migania diodami bez ciągłego delay między nimi i blokowania całego programu. PRZEL==1 jest chyba niepotrzebne bo z case... wychodzi po zakończeniu instrukcji tak ?? a w każdego case'a powinno wejść w zależności...
dopiero zobaczyłem że skasowałem, w wyniku prób kasowania części kodu , volatile już jest dalej to samo , o dziwo bez volatile też osiągałem poprawną wartość delayms(). Volatile powinno być. Teraz Ci działa ale jak włączysz optymalizację to już niekoniecznie. Jednak w Twoim przypadku bez volatile i z optymalizacją, funkcja delay_ms może zacząć generować...
Witam. Chciałbym zrozumieć dokładnie linia po linii kod który zamieszczam poniżej. Jest to funkcja wysyłająca znak poprzez programowy UART. Działa, ale chciałbym dodać tam opcję wyboru odwróconej logiki oraz możliwości zmiany sprawdzania parzystości (NONE, EVEN, ODD): Tutaj deklarowane stałe w pliku nagłówkowym: [syntax=c]/* User setting -> Output...
Witajcie. Zbudowałem matrycę LED złożoną z 5 matryc 8x8. Wiersze przełączam układem 74LS259 w kombinacji demultipleksera, połączonego do 8 układów darilngtona npn ULN2803. Kolumnami steruje za pomocą rejestrów przesuwnych 74HC595 połączonych ze sobą w sposób jak na schemacie. http://obrazki.elektroda.pl/2715185800_1... http://obrazki.elektroda.pl/9971862900_1...
(at)marek-czarny Programowanie nie jest dla osób szybko się irytujących. Rozwiązując problem, rozwiązuje się go po kolei. Obsługa LCD wprowadza znaczące opóźnienia, zapewne w kodzie tych funkcji masz delay lub oczekiwanie na jakiś stan. Efektywnie odpowiada to sytuacji w której delay, w dodatku losowy, wpakowałbyś do pętli głównej. Może tego nie dostrzegasz,...
Musze to przemyśleć ( Piti dosyc fajny programator mi pokazał ) Mam prosty program w C : #include <io.h> void wait(void); //prototype for wait() int main(void) { P1DIR=0xFF; //port 1 = output P1OUT=0x01; //set bit 0 in port 1 for(;;) { //infinite loop P1OUT=~P1OUT; //invert port 1 wait(); //call...
Witam. Mam krótkie pytanie odnośnie funkcji realizującej opóźnienie zawartej w pliku nagłówkowym delay.h w AVR GCC. /** \ingroup util_delay Delay loop using an 8-bit counter \c __count, so up to 256 iterations are possible. (The value 256 would have to be passed as 0.) The loop executes three CPU cycles per iteration, not including the overhead...
Witam, faktycznie komenda asm volatile ("nop") działa. Jednak ten delay trochę mi przeszkadza w funkcjonowaniu programu. Mógłbym prosić o podpowiedź jak zrobić to na tych przerwaniach?
po pierwsze nie licznik_led nie jest volatile a dalej nie sprawszalem
Co do opóźnienia to wygodniejsze w użyciu są poniższe funkcje... #define F_CPU 16000000 #define CYCLES_PER_US ((F_CPU+500000)/1000000) /****** Funkcje delay ****************************************... void delay(unsigned int us) { unsigned int delay_loops; register unsigned int i; delay_loops = (us+3)/5*CYCLES_PER_US;...
Chciałbym podzielić się swoim tworem DS18B20 + STM32F4 Discovery po niecałych 2 miesiącach obcowania z poradnikiem. Zaczynając od zera jeśli chodzi o znajomość mikrokontrolerów z podstawową znajomością C. [syntax=c]#include "stm32f407xx.h" void delay(uint16_t time) { TIM2->CNT = 1; while (TIM2->CNT<= time); } static void reset (void) { GPIOB->MODER...
Może i działa, ale parę bzdur masz w tym kodzie. volatile w deklaracji argumentu funkcji jest bez sensu. Nikt tego argumentu nie ma szans zmienić. ATmega pracuje z zegarem max. 20 MHz, czyli okres 50 ns. Co ma niby robić ten delay ze ZMIENNOPOZYCYJNYM argumentem? Wykonanie jednej instrukcji przez ATmegę zajmie więcej czasu niż ma wynosić to opóźnienie....
Obsługę przerwań mam w innym pliku #include <avr\interrupt.h> #include <avr\io.h> #include <inttypes.h> #include <stdio.h> #include <avr\pgmspace.h> #include <util\delay.h> #include <math.h> #include "onewire.h" #include "makra.h" #include "harddef.h" #include "lcd.h"...
Dodałem volatile - niestety nie pomogło :( Silnikiem kręcę na czuja - przy użyciu _delay_ms i _delay_us - co ciekawe udało mi się go rozpędzić do 6000 obr/min ;) EDIT: Tak właśnie stąd wiem, że obrotomierz źle działa. A będzie mi bardzo potrzebny, jeśli będę chciał przejść na BEMF, a będę, i w ogóle to przydatna rzecz jest. EDIT2: Udało mi się ustalić,...
a) delay de facto w pętli przerwania (bo w showTimeOnLEDS() ), to może/musi miec głębokie skutki b) volatile jest użyte w sposób który myli, to nie działa tak, jak myślisz.
Na oscylogramie widać podstawę czasu przypadającą na działkę więc wrzuciłem aby ktoś porównał to z tym jak ma być, więc dlaczego twierdzisz że nie jesteś w stanie odczytać zależności czasowych? Co mi da wrzucenie przez kogoś swojego oscylogramu z działającej komunikacji? Ano to że wówczas dokonam właśnie porównania z timingami które ja mam u siebie...
dodałem nową funkcję procedurkę opóźniającą: void __delay(int x) { volatile int i=1; for (i=1; i<=x; i++) { _delay_loop_2(1000); } } jednak po takim zabiegu procek jest jakby martwy - 0 odpowiedzi. Zmieniłem w niej _delay_loop_2(1000) na _delay_loop_2(1) i tak samo żadnej odpowiedzi od układu. coraz bardziej wydaje mi się, że procek jest uwalony...
Witam znalazłem w internecie niezależną ładowarkę do Pada PS3. która bazuje na ATtiny24A . Zastanawiam się czy jest możliwość przepisania tego kodu na ESP2866 lub na jego wzorcu napisania wersji na ESP? USB ma dostarczać zasilanie tylko urządzeniom, które zostały poprawnie wyliczone. W szczególności urządzenia nie mogą pobierać maksymalnej wartości...
Napisałem coś takiego (kod poniżej) i prawie działa. Problem był w deklaracji: volatile int LICZNIK (miałem double zamiast int i nie chciało działać). Jak przepisać cały licznik do zmiennej (jaką zmienną zadeklarować)? #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> //Definicje i markodeklaracje //Definicje do...
Pijopic : A ja proponuję czytać dokumentację od avr-libc, ten temat oraz temat, którego link dałem (opisałem tam problemy z _delay_ms). _delay_ms(500) nie będzie działać - przy zegarze 1MHz maksymalne opóźnienie wstawiane przez _delay_ms wynosi 262.14ms. The maximal possible delay is 262.14 ms / F_CPU in MHz. . Nie wprowadzaj znów w błąd. rrata : równie...
ciekawi mnie to, że obojętnie co [/quote] Coz... njaprawdopodobnije kompilator mysli za Ciebie i pusta petle po prostu pomija. Rozwiazanie: Albo napisz petle w asemblerze, albo przed dekalracja zmiennych w funkcji: void delay(unsigned int us) wstaw magiczne slowo volatile np: volatile unsigned int delay_loops; Poza tym jak cos nie dzial to zajrzyj...
Witam, Mam problem z obsługą wyświetlacza 128x64 zgodnie z ks0108 na mikrokontrolerze STM32F4 . Po poprawnym przyłączeniu do układu wyświetlacza, zabrałem się za oprogramowanie tego mikrokontrolera. Mój schemat podłączenia wyświetlacza wygląda tak : RS (Di) - PB1 R/W - PE7 E - PE9 CS1 - PB2 CS2 - PE8 RST - PE10 Data - PA0 do PA7 I mam sterownik: [syntax=c]...
Cześć. Nie wiem dlaczego uc zawiesza się na czekaniu na zakonczenie generowania startu chodzi o I2C 3 https://obrazki.elektroda.pl/9115828100_... Inicjalizacja I2C [syntax=c]void i2c_init(void){ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOCEN; RCC->APB1ENR |= RCC_APB1ENR_SPI3EN; GPIOA->MODER |= GPIO_MODER_MODE8_1;...
Witam. Programuje uC AtTiny48. Czujnik DS18B20 podpiąłem na trzech kablach i odczyt jest na pewno dobry. Problem polega na wyświetlaniu wyniku. Dokładnie chodzi o moment wywołania funkcji pomiaru temperatury. W czasie jej wykonywania na ekranie wyświetlana wartość znika i natychmiast się pojawia. Jest to spowodowane opóźnieniami które muszą się wykonać...
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()....
Witam. Oto mój kod: while (!(ADC1->SR & ADC_SR_EOC)); Zgodnie z moimi wyszukiwaniami na temat bitu ADC_SR_EOC : This bit is set by hardware at the end of the conversion of a regular group of channels. It is cleared by software or by reading the ADC_DR register. Czyli DMA w momencie odczytania wartości z rejestru DR także kasuje...
volatile przerwać typedef volatile volatile struct
zabezpieczenie termiczne pompa serwery poczty wychodzącej thunderbird wyciszyć silnik
calormatic ustawienia zmywarka siemens suszenie
Jak uruchomić nagrywanie na dysku Cyfrowego Polsatu? Diagnostyka sterownika silnika Bosch, Opel Z19DTH – jak sprawdzić sprawność ECU?