Zmienna count powinna być volatile .
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...
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;...
W tej pętli w opóźnieniu zrób volatile int i, bo kompilator wywala pewno pętlę i dioda mruga tylko Ty nie nadążasz patrzeć. Albo dołóż jeszcze jedna zmienną. int Delay( int delay) volatile int i; int j = 0; for( i=0; i < 4000* delay; ++i ) { j+=i; } return j; } I uważaj na zakres liczb całkowitych bo 32 bity to dużo, ale dzielone przez 4000 to już...
Witaj, ja zazwyczaj robię to tak. void delay(volatile unsigned int i) { while(i--) { asm volatile("nop"); }; } To zdaje się zdawać egzamin. określenia volatile używa się w stosunku do zmiennych które mogą sie zmieniać w nieprzewidywalnym momencie np. przy wystąpieniu przerwania. Zmiennn po dodaniu...
Wyświetlacz po podłączeniu zasilania powinien zapalić kwadraciki w górnej linijce, po inicjalizacji te kwadraciki gasną. Mam prawie identyczny kod przy czym niepoprawnie działały mi funkcje _delay_ms(100); nie wiem dlaczego dlatego zastosowałem swoje, kwarc mam wewn, 8MHz: // Piszemy procedury opóźnienia czasowego //======================================...
Witam... Najprościej chyba będzie użyć gotowych funkcji opuźnienia czasowego... Raczej nie ma sensu w tym przypadku pchać się w timer... #define F_CPU 1000000 /* Tu wpisujesz częstotliwość zegara z jakim pracuje uC #define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */ void delay(unsigned int us) {...
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 */ /***************************************...
Witam Probuje skompilowac gotowy przyklad z ksiazki (dokladnie miganie diod), wszystkie pliki , headery itd sa wlaczone do projektu, lecz wyskakuje mi nastepujacy blad kompilacji target CPU does not support ARM mode zawartosc pliku util_delay.c: [syntax=c]#include <util_delay.h> void Delay(volatile unsigned count) { while(count--); } [/syntax]...
Sprawdź co z [syntax=c] void delay(int time) { int i; for (i = 0; i < time * 4000; i++) {} } [/syntax] zrobił kompilator. Powinieneś użyć timera. Jeśli już robisz pętle opóźniającą rodem z AVR to [syntax=c] void delay(int time) { volatile int i; for (i = 0; i < time * 4000; i++) {} } [/syntax] nie wiedząc jednak co zrobi optymalizator, dałbym...
asm na pewno jest taki sam (szczegolnie ten ktorego uzywalem, bo to same podstawy), gorzej z timerami na ktorych opieraja sie dluzsze opoznienia (od ms w gore). nigdy nie zajmowalem sie dspic30, wiec... nie wiem jak to tam jest z tymi timerami. najwyzej dostosujesz sobie <: __________________________ modul sklada sie standardowo z pliku c i h. ponizej...
1. Jaki jest cel stosowania: [syntax=c]#define PRZEBIEG_PETLI 8 #define us(num) (num/(PRZEBIEG_PETLI*(1/(F_CPU/1000000.0... inline void therm_delay(uint16_t delay) { while(delay--) { asm volatile("nop"); } } ... therm_delay(us(45));[/syntax] 2. Masz jakieś warningi?
Niekoniecznie. Może wystarczy dodać po while(--delay) np. asm volatile ("nop")
No i nie udało mi się tego zrobić na Timer0- on sie kręci bez przerwy a ja potrzebuję włączyć i wyłączyć timer. Tak że na razie na Timer1- szkoda bo 16 bitów- ale zrobię na Timer2. Spokojnie użyj Timer0, który będzie zgłaszał przerwanie np. co 1ms. W procedurze obsługi tego timera dekrementuj zmienną, jeśli osiągnie 0 to należy zatrzymać dekrementowanie,...
Wygląda na to ze nawet delay ci nie działa poprawnie. VOLATILE??
Konfiguruję ADC do pracy w STM32L152. Tradycyjnie, problem jest taki, że nie działa. Kod programu wygląda następująco: [syntax=c] int main(void) { RCC->AHBENR = RCC_AHBENR_GPIOAEN;//taktowanie portu A RCC->APB2ENR = RCC_APB2ENR_ADC1EN;//taktowanie ADC GPIOA->MODER |= GPIO_MODER_MODER0;//PA0 jako wejscie analogowe ADC1->CR2 = ADC_CR2_ADON;//wybudzenie...
Może jest problem z czasami? 1-Wire jest bardzo na to wrażliwy. Ja zastosowałem własną funkcję: inline __attribute__((gnu_inline)... void therm_delay(uint16_t delay) { while(delay--) asm volatile("nop"); } Oczywiście musisz zadeklarować częstotliwość, z jaką CPU pracuje, np: #define F_CPU 8000000UL...
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));...
Ten delay bez asm_volatile to dziala w ogóle, czy kompilator to pomija i wyrzuca?
Hey. Zajmowaliście się kiedyś takim zagadnieniem jak w temacie pisze... Mam swój sprawdzony program, który stosowałem w MSP430 jak i AVR i C51. Niestety nie wszystko pięknie wygląda... Czarna linia na wyświetlaczu jest tak samo jak i była zaraz po walczeniu LCD. Po drugie, znalazłem w necie notę aplikacyjna http://www.analog.com/UploadedFiles/Appl...
Umieść cały kod. Fragment, który przysłałeś na PW [syntax=c] void loop() { digitalWrite( napiecie, HIGH); // wyjscie na pinie 5v dla testu digitalWrite( niskie, LOW); // wyjscie na pinie 0v dla testu static volatile int stan; if (stan != digitalRead(przeslona)) // jesli pin ma 5v stan = digitalRead(przeslona); { stepper.moveDegreesCW (180); delay(1000);...
Niestety program sie nie kompiluje bo wyskakuje mi błąd "Type 'RCC_APB2Periph_GPIOB' undeclared (first use in this function)" Tam był przykład dla STM32F1 dlatego zmień na: RCC_AHBPeriph_GPIOB Najprościej opóźnienie realizuje się tak: [syntax=c]for (volatile uint32_t i = 0; i < 0xFFFFF; i++);[/syntax]
spróbuj zrobić tego delay'a na liczbie typu volatile int zamiast int. Może optymalizator to wycina?
Witam podłącze się pod temat. A jak odmierzasz czas ? Ja stosuję 2 sposoby. #define LOOP_CYCLES 8 //Number of cycles that the loop takes #define us(num) (num/(LOOP_CYCLES*(1/(F_... inline __attribute__((gnu_inline)... void delay_us(unsigned int delay) { while(delay--)...
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...
Wywala błąd gdyż kompilator nie rozumie polecenia "nop();". Zastąp powyższe przez "asm volatile("nop")" albo dodaj include do pliku system.h w pliku delaya. W pliku system.h masz właśnie definicje nop() jako to co wyżej podałem, zajżyj do tego pliku.
Tia z WGK. Fałsz wynika z tego, że podaje sie prostokąt. Nie ma to jak 3 i 5 harmoniczna... Przynajmniej tak mi się wydaje... No i może troche niedokładnie są częstotliwości. #include <avr/io.h> #include <compat/deprecated.h> #define SPP cbi(PORTA,PA3);sbi(PORTA,PA2... #define SPM cbi(PORTA,PA2);sbi(PORTA,PA3...
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....
Proponowałby napisać program od nowa, małymi krokami, bez delay. Zmiana w kodzie [syntax=c]volatile int zmienna[/syntax]nic nie da gdy program bedzie wisiał 5 minut na delay. W tym czasie zadział tylko reset. Ponadto, dlaczego typ int ()16-bit a nie 8-bit?
#include <avr/io.h> #define F_CPU 1000000 /* 1MHz zegar procesora */ #define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */ /*zdefiniowanie Pinu wyjściowego*/ #define OUT_ON DDRC|=_BV(5); PORTC|=_BV(5); #define OUT_OFF DDRC=_BV(5); PORTC&=~_BV(5); /*zdefiniowanie pinów...
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...
O to kod, to jest prosty przykładowy, który miał się skompilować bez problemów :) [syntax=c] #include <stm32f4xx_rcc.h> #include <stm32f4xx_gpio.h> void Delay(void) { volatile uint32_t i; for (i = 0; i != 0xFFFFF; i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; // Wlaczenie sygnalu taktujacego port D RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GP...
Najprostszy program do zliczania impulsów pojawiających się na pinie 2 (Arduino Uno): [syntax=c] constexpr uint8_t pin = 2; volatile uint32_t pulse = 0; void setup() { Serial.begin(115200); pinMode(pin, INPUT_PULLUP); attachInterrupt( digitalPinToInterrupt(pin), []() { pulse++; }, RISING); } void loop() { delay(1000); Serial.print("Pulses per second:...
A flaga jest zadeklarowana jako volatile ?
Pierwsza sprawa jest taka, że zmienna odczytywana/zapisywana przez przerwanie i kod główny powinna być volatile. Druga zaś - 1ms delay w przerwaniu to nie jest szczególnie dobry pomysł... 4\/3!!
Witam, Pozmieniałem trochę ten domyślny program. Moja część zawarta jest w linijkach "moj program" reszte kodu wyłączyłem. Proszę o sprawdzenie, bo jeszcze czekam na kuriera z moim zestawem STM32F0 Discovery. ****************************************... ** ** File : main.c ** ** Abstract : main function. ** **...
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;...
(at)Gunis-92: Możesz wykorzystać do odmierzania czasu np. SysTick [syntax=c] volatile uint32_t licznik_tykniec;// zmienna globalna /* obsluga przerwania od licznika/timera SysTick */ void SysTick_Handler(void) { licznik_tykniec++;// inkrementacja licznika } void delay(uint32_t czas) { uint32_t aktaualny_licznik_tykniec; aktaualny_licznik_tykniec = licznik_tykniec;...
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...
Podaję ładniejszą formę obsługi opóźnienia na SysTick: [syntax=c] #include "LPC17xx.h" #include "lpc17xx_gpio.h" volatile uint32_t licznik_tykniec; /* obsluga przerwania od licznika/timera SysTick */ void SysTick_Handler(void) { licznik_tykniec++;// inkrementacja licznika } void delay(uint32_t czas) { uint32_t aktaualny_licznik_tykniec; aktaualny_licznik_tykniec...
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...
(at)matti0010 Jeżeli już chcesz robić opóźnienia typu: [syntax=c] delay=0; while(delay<(50*MHz))//50us { delay++; } [/syntax] to zmienna delay powinna być zadeklarowana jako volatile. Fajnie byłoby wydzielić to do osobnej funkcji bo używasz tego samego kodu w wielu miejscach. Przetestuj, że tego typu funkcja generuje opóźnienia o zadanej wartości...
Sam dawno temu popełniłem podobny projekt ;) W Bascom jeszcze ;) http://www.elektroda.pl/rtvforum/topic16... Heh, z pewną dozą nostalgii sobie przypomniałem te zabawy sprzed 6 lat ;) Wartości elementów można wywnioskować z tego co napisałeś - poczytaj o oznaczeniach ;) Parę uwag dot. programu. 1. nie definiuj F_CPU w kodzie - zawsze w definicjach...
Ktory kod bedzie dokladniej opoznial wykonywanie programu #define F_CPU 1000000 #define CYCLES_PER_US ((F_CPU+500000)/1000000) void delay(unsigned int us) { unsigned int delay_loops; register unsigned int i; delay_loops = (us+3)/5*CYCLES_PER_US; for (i=0; i < delay_loops; i++) {}; } void...
znaczy masz napisac program, ktory robi cokolwiek?? cos mi tu nieladnie pachnie lenistwem i ogolna olewka szkoly :D... ale mozesz sprobowac w ten sposob... nie wiem co ta instrukcja rr robi, ale pewnie to jest przesuwanie, a program ma migac diodami ;)... void delay(int value) { volatile int i; for (i=0;i<value;i++); } int...
Naskorbałem coś takiego: #include <avr/io.h> #define F_CPU 11059200 /* 1MHz zegar procesora */ #define CYCLES_PER_US ((F_CPU+500000)/1000000) char a; void delay(unsigned int us) { unsigned int delay_loops; register unsigned int i; delay_loops = (us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty) for...
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)
Te opóźnienia są na moje oko za małe. Spróbuj tego: void Delayms(unsigned int _ms) { unsigned int delay, delay_ms; for(delay=0; delay<_ms; delay++) { for(delay_ms=0; delay_ms<2665; delay_ms++) { asm volatile ("WDR"::); } } } Jest skalibrowane dla ATmegi 16MHz, jak...
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...
To może ze względu na mniej doświadczonych kolegów (...), zrobiłbyś instrukcję krok po kroku jak taki projekt w Keilu stworzyć 1. Pobrać i zainstalować MDK-Arm w wersji najbardziej aktualnej. 2. Przy pierwszym uruchomieniu od razu przejść do Pack Installer -a - ostatnia ikonka na niższym pasku narzędzi. 3. Tam powinna się samoczynnie zaktualizować...
Nie na pewno nie. [syntax=c] #include <STM32F1xx.h> int main(void) { RCC-> APB2ENR = RCC_APB2ENR_IOPBEN; RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; AFIO->MAPR |= (0b010 << 24); GPIOB->CRL |= GPIO_CRL_MODE3_1; GPIOB->CRL &= ~GPIO_CRL_CNF3_0; GPIOB->CRL |= GPIO_CRL_MODE4_1; GPIOB->CRL &= ~GPIO_CRL_CNF4_0; GPIOB->CRL...
W końcu doszedłem do tego co było nie tak z tym testem na diodzie. pętla dla atmegi musi wyglądać tak: [syntax=c]void delay(unsigned int t) { volatile unsigned char i,j,k,z=0; for(k=0; k<t; k++) { for (i=0; i<200; i++) { for (j=0; j<200; j++) { z= z+1; z= z-1; } } } }[/syntax] a dla STM: [syntax=c]void delay(unsigned int t) { volatile unsigned...
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...
ok, a ma ktos jakas biblioteke do lcd ale na arma? mecze sie z tym pare dni i lipa ... Nie moje ale działa, trzeba tylko opóźnienia po swojemu doszlifować. #include "lcd.h" #define SHORT_DELAY 1000 #define LONG_DELAY 5 #define IN0 #define OUT1 #define LCDD4(arg) if(arg==1) IO0SET=0x010000; else if(arg==0) IO0CLR=0x010000...
po pierwsze nie licznik_led nie jest volatile a dalej nie sprawszalem
Po nic niewnoszących dyskusjach, sprawdzona funkcja odmierzająca us [syntax=c] __STATIC_INLINE void Delay_us(volatile uint16_t microseconds) { TIM10->CNT = 0; while ( TIM10->CNT < microseconds); } [/syntax] Wymaga oczywiście inicjalizacji timera na 1MHz (dla zegara 96MHz): [syntax=c] static void MX_TIM10_Init(void) { htim10.Instance = TIM10;...
A może zrobić funkcję _delyms(1000) i wywołać ją w pętli 180 razy? NIe trzeba wtedy przerwań. Ja tak ostatnio odmierzałem minutę. Pozdr. Tomgart #define F_CPU 1000000 /* 1MHz zegar procesora */ #define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */ void delay(unsigned int us) { unsigned int delay_loops;...
No tak, te funkcje wyglądają w ten sposób: #define F_CPU 1000000 //1MHz zegar procesora #define CYCLES_PER_US ((F_CPU+500000)/1000000) //cpu cycles per microsecond void delay(unsigned int us) { unsigned int delay_loops; register unsigned int i; delay_loops = (us+3)/5*CYCLES_PER_US; for (i=0; i < delay_loops;...
Funkcja _delay_ms() [syntax=c] volatile uint32_t usTick; volatile void _delay_us(uint32_t us){ usTick = us; while(usTick); } volatile void _delay_ms(uint16_t ms){ _delay_us(ms*1000); } void SysTick_Handler(void){ if(usTick != 0)usTick--; } [/syntax] I w funkcji main() jeszcze to: SysTick_Config(72000000/1000000);
Skorzystaj z dobrodziejstwa, zwanego przerwaniem. Kilka dni temu coś podobnego napisałem na tym forum. Wystarczy trochę poszukać. [syntax=cpp] // Int0 przez rezystor do masy, a przycisk do Int0 i do +5V int ledOut = 13; // (oczywiście możesz wybrać inny pin) volatile int state = LOW; void setup() { pinMode(ledOut, OUTPUT); attachInterrupt(0, zapal,...
z tego co ostatnio liczyłem to taka pętla: Dodano po 1 A no i bez nop'a kompilator przy pewnych ustawieniach wytnie Tobie całą pętlę.
Nie wiedzę inicjalizacji delayflag. The C language guarantees that all uninitialized global variables will be initialized to zero. Sprawdź tak: [syntax=c]volatile int delayFlag = 1;[/syntax] Twój pierwszy delay trwa tyle co kilka cykli procesora. Prześlij mi cały projekt, to sprawdzę w wolnej chwili u siebie.
Dzięki za podpowiedź, w dzień spróbuję napisać ten licznik i wstawię kod. A do do delay to jak teraz patrzę to chyba coś pomyliłem. Czy było by dobrze gdybym napisał: [syntax=c]volatile uint32_t a=0; void SysTick_Handler (void) { if(a) { a--; } } void delay(int time) { a=time; while(a); }[/syntax] I jeszcze pytanie, jak mógłbym napisać tą funkcję opóźniającą...
Jak wykombinować aby na PC5 taż migała dioda tyleże szybciej? Jak zdefiniować wejścia. #define LED_ON sbi(DDRB,PC5);sbi(PORTB,PC5&... #define LED_OFF sbi(DDRB,PC5);cbi(PORTB,PC5&... #include <avr/io.h> /***************************************... Definicje stałych ****************************************...
Piszę w C. Na PORTB ustawiam kolejno liczby 0,1,2,3,4,5,6,7,8,9, jednak na porcie (piny PB0-PB3) pojawiają się liczby 0,1,2,3,4,7,6,7,8,9 - 5 zmienia się w 7. Czy należy przełączyć jakąś funkcję portu, czy może mikrokontroler jest uszkodzony? Wykluczam uszkodzenie czy błędne podłączenie urządzenia wyjściowego. To pierwszy program, który piszę (pętli...
Koledzy może ktoś mi wytłumczy dlaczego miga tylko 1 dioda //definiujemy stany portu sterującego diodą LED #define LED_ON sbi(DDRD,PD1);sbi(PORTD,PD1&... #define LED_OFF sbi(DDRD,PD1);cbi(PORTD,PD1&... #define LED_ON1 sbi(DDRD,PD3);sbi(PORTD,PD3&... #define LED_OFF1 sbi(DDRD,PD3);cbi(PORTD,PD3&...
Hmmm.. Ale przy fusach nic nie kombinowalem, nawet tego nie umiem :-) Chyba ze cos przez przypadkowe zwarcie koncowek... Nabardziej skomplikowany program, jaki wgralem, to taki: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <avr/delay.h> #include <inttypes.h> #define F_CPU 1000000 #define...
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 -...
Zastanawiam się jak przerobić ten program aby LED zaczęła migać kiedy zbliżę rękę a zgasła gdy oddalę pozdr. #include <avr/io.h> /***************************************... Definicje stałych ****************************************... #define F_CPU 1000000 /* 1MHz zegar procesora */ #define CYCLES_PER_US ((F_CPU+500000)/1000000)...
#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, Wczoraj przyszedł mój niedawno zakupiony STM32F4Discovery. Do programowania wybrałem CooCoxa 1.7.5 (ToolChaina oczywiście załadowałem). Zabawę zacząłem od napisania prostego programu migającym naprzemiennie diodami: #include <stm32f4xx_rcc.h> #include <stm32f4xx_gpio.h> void Delay(void) { volatile uint32_t i; for (i...
no tak :) ale gafa z tym 21 ze tez nie zauwazylem..... Dodano po 10 Mam tak ale i tak nie chce ten pin generowac sygnalu zegarowego..... Jakby wisi w powietrzu p_pPio->PIO_PDR=(1<<21); p_pPMC->PMC_SCER=((1<<9)); p_pPio->PIO_BSR=((1<<21)); Mozesz mi napisac jak to ma byc ? Dodano po 16 Ok dziala .... Bynajmniej na slowclock...
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"...
Z volatile ma to prawo dzialac, bez - nie. Kompilator taka petle powinien wyrzucic bo jest pusta i nic nie robi. Nie wiem skad ten upor i zabawa z petlami, skoro jest od tego funkcja delay. No i w prawdziwym procesorze przy petli do 10000 to migania nie zobaczysz, nawet jesli go popedzisz w wewnetrznego RC to masz w zaleznosci od proce 1,2-8MHz, czyli...
Wszystko zalezy od tego jak inteligentny jest kompilator, jeśli jest bardzo dobry to ta pętla zostanie usunięta. Jedyne co możesz spróbować to zrobić wstawke w asemblerze albo spróbować ustawić zmienną licznika pętli jako volatile (być może optymalizacje wtedy jej nie ruszy).
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.
Obiecałem działający programik. Działa na 100%. Jest to progrtam, który wysyła stan temperatury z DS18B20 do kompa, ale dla Ciebie najistotniejszy jest sposób komunikacji. Jest wysyłane zapytanie i uC zwraca odpowiedź. Jak uporasz się z krzaczkami, to program Ci się przyda. Można zrobić bardzo prosty protokół wymiany informacji. #include <avr/io.h>...
HD44780 pin RW stale = 0. A dane są rejestrowane tylko w LCD. Nie czytaj. SystemInit() prawdopodobnie zdecydowany w startupe. Prowadzi zegar systemowy. Można to zrobić dla Delay //:::::::...
Spokojnie nic nie ruszaj w board.c jest to plik dostarczony przez nxp_lpcxpresso_11c24_board_lib na potrzeby płytki lpcxpresso zawierający m. in. funkcje inicjalizacyjne elementów wyposazenia tej płytki. Możesz spokojnie nic nie ruszać, bo fragment kodu NO_BOARD_LIB . W środowisku programistycznym LPCXpresso powinieneś mieć kod, który nie będzie włączony...
Dzień dobry! Przycisk podpięty do płytki mam w/g schematu: http://arduino.cc/en/uploads/Tutorial/bu... Kod mojego maina: #include <stm32f10x_gpio.h> #include <stm32f10x_rcc.h> #include "stm32f10x_flash.h" #include "misc.h" /* Scheduler includes. */ #include <stdio.h> #include "FreeRTOS.h" #include...
Jak ustawiasz wartości początkowe jak np. wyjścia portu w rejestrze DDR to nie musisz robić |=, wystarczy =. Dobry zwyczaj to także robienie tabulacji (Tab) w funkcjach, czyli: [syntax=c]if(...) { for(...;...;...) { ... } }[/syntax] Jest kod bardziej czytelny, ale to takie spostrzeżenia :wink: A Twój problem to wpisanie przerwania do głównej funkcji...
#include <avr/interrupt.h> #include <inttypes.h> #include <stdlib.h> #include <math.h> #include <avr/io.h> #define F_CPU 7372800 //20000000 //18432000 //11059200 //3686400 //18432000 //14745600 #define CYCLES_PER_US (F_CPU/1000000) /****** Funkcje delay ****************************************... void delay(unsigned...
Witam serdecznie, próbuję skonfigurować SysTick do generowania przerwania co 1us. O ile 10us działa prawidlowo (sprawdzam to poprzez świecenie diodkami) to już dla 1us nie działa. Poniżej kod: [syntax=c]#ifdef __USE_CMSIS #include "LPC11xx.h" #endif #include <cr_section_macros.h> #include "driver_config.h" #include "target_config.h" #include "gpio.h"...
Mam wspaniałe dzieła stm32f103 1-ware slave na takich delay //:::::::... // Прогрk...
Już rozumiem. Robiłem wskaźnik na zmienną typu volatile char a sam wskaźnik nie był volatile. Tylko dalej nie wiem czemu działało to jak się dało delay. Powinno wtedy też nie działać. heh. Jest to troche dziwne. Na razie nie zamykam, może ktoś będzie w stanie wytłumaczyć to zjawisko.
NIe umiem odczytac stanu pinu PA4 w ww. procku. Mam taki kod : #include "Board.h" void delay(void) { volatile unsigned long int i; for(i = 0; i < 1000000; i++) ; } int main(void) { //AT91PS_PMC pPMC = AT91C_BASE_PMC; AT91PS_PIO p_pPio = AT91C_BASE_PIOA; //AT91PS_PMC p_pPMC = AT91C_BASE_PMC; AT91PS_USART...
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)".
Tak sobie próbuje odpalic banalne mruganie diodą wg przykładu: #include "stm32f10x.h" int main(void) { RCC->APB2ENR = RCC_APB2ENR_IOPBEN; GPIOB->CRL |= GPIO_CRL_MODE1_1; GPIOB->CRL &= ~GPIO_CRL_CNF1_0; [b]volatile uint32_t delay;[/b] //(13) while(1){ //(15) GPIOB->ODR |=...
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);...
Witam koledzy Przerobiłem program na atmegę tak aby mi świeciła dioda led ok 3 minut Jak zrobić aby tym samym przyciskiem w razie konieczności wcześniej ją wyłączyć. /*zdefiniowanie Pinu wyjściowego*/ #define OUT_ON DDRB|=_BV(1); PORTB|=_BV(1); #define OUT_OFF DDRB=_BV(1); PORTB&=~_BV(1); /*zdefiniowanie pinów B0...
ok mam AVR Studio 4 i podczas kompilacji takiego kodu: #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...
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...
Poznałem trochę podstaw o programowaniu ale nie mogę sobie dać rady nad właśnie ta instrukcja bo nie wiem jak ona powinna wyglądać. O to mój program ale nie działa :( #include <avr/io.h> #define F_CPU 1000000 #define CYCLES_PER_US ((F_CPU+500000)/1000000) #define SM_ON sbi(DDRB,PB1);cbi(PORTB,PB1) #define SP_ON sbi(DDRB,PB2);cbi(PORTB,PB2) #define...
Witam, niestety muszę prosić o pomoc u podstaw, bo poległem. Problem jest taki: chciałem skompilować testowy program za pomocą arm-none-eabi-gcc z biblioteką CMSIS, bez żadnych eclipse, bez żadnych płytek rozwojowych - po prostu dioda podłączona do wyjścia procesora. Biblioteka chyba nie przewiduje bycia używanym przez arm-none-eabi-gcc więc: 1. utworzyłęm...
(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,...
Funkcje delay muszą być wywoływane z parametrem będącym stałą. Użycie w wywołaniu zmiennej jest błędne, prowadzi do wzrostu objętości kodu i błędnego czasu opóźnienia. Twój przykład na to również wskazuje - zmienna int z przypisaną wartością użyta jako argument wywołania delay powoduje, że optymalizator to skraca do stałej i jest ok. Jeśli użyjesz modyfikatora...
Witam, Mam prosbe, czy moze ktos mi podeslac kawalek kodu w C implementujacego PWM w Atmega8. Sa informacje na ten temat na forum, ale sa na tyle niescisle, ze nie moge sobie poradzic z tym problemem. Z gory dzieki! Dolaczam moj kod. Moze ktos zorientuje sie, gdzie jest blad? #include <avr/io.h> #include <avr/sleep.h> #define F_CPU 1000000...
Witam. Na wstępie przepraszam za może głupie pytanie i problem, ale jestem początkujący. Chciałbym móc sterować jasnością świecenia diody LED za pomocą PWM. W późniejszych próbach różne jasności ustawić pod różne przyciski itp, a na końcu sterować programowo. Program nie jest całkowicie mój, wzorowałem się na wielu kodach znalezionych w internecie......
Cześć, Napisałem poniższy program do obsługi zegara elektronicznego, w zaprogramowanym czasie wyświetla kolejno czas (hh:mm) oraz temperaturę na wyświetlaczu 7-segmentowym. [syntax=c]#include <Adafruit_BMP280.h> #include <Wire.h> #include <TimeLib.h> #include <DS1307RTC.h> #include <avr/io.h> #include <avr/interrupt.h>...
volatile przerwać typedef volatile volatile struct
termistor oznaczenie sekretarka sprzedać lexmark czarny wydruk
philips senseo prestigio firmware update
Golarka Shav nie działa i nie ładuje się - co robić? Wieża stereo Sony, Philips – radio buczy, przydźwięk 50 Hz, diagnoza i naprawa