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));...
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...
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,...
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...
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...
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...
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...
(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,...
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;...
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...
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, 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
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"...
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.
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ć,...
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...
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...
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...
1. Czy wiesz, że Twój programowy timer liczy do 2001? 2. timerFlag źle zadeklarowane. Powinno być static volatile _Bool. Reszta zmiennych też dość radosna. 3. Kod, który wkleiłeś nie zawiera niczego, co odnosiłoby się do inicjowania portów dla wyświetlacza ani samego wyświetlacza, a problem masz podobno z wyświetlaczem, a nie z diodami LED. Mogą to...
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...
Po pierwsze powinieneś pisać kod bardziej po bożemu czyli stosować rzutowania. Po drugie Atmega 8 domyślnie pracuje na 8 znakach i nie trzeba tego ustawiać. Upewnij się że masz wyłączoną w komputerze kontrole przepływu. Funkcja _delay_ms przeznaczona jest do pisania własnych opóźnień bo sama jest ograniczona i 2000 jako argument nie przyjmie. Według...
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...
Co do zasilania - jest stabilizator 5V z kondensatorami, ale to naniosę na schemat później. Dodałem przerwanie co 0.5 ms i poprawiłem liczenie czasu - teraz nawet po 15 minutach pracy "łeb w łeb" z prawdziwym stoperem nie widać różnic czasu. Na ten moment w przerwaniu mam liczenie czasu - jedno przerwanie wykonuje się co 0.5ms. Odświeżanie wyświetlacza...
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ć...
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;...
volatile przerwać typedef volatile static volatile
arduino bufor bieżnia kalibracja schemat kombajn bizon
reflektometr kablowy luparka pionowa
Gdzie kupić procesor Zilog Z180? MapFactor Navigator Free, Mapy Windows, Navit – darmowa nawigacja offline na Windows 10/11/CE