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);...
Wystarczy policzyć. 19200 bps = 1920 znaków na sekundę, czyli znak co ~0,5 ms. Przy taktowaniu 4MHz masz +/- 2080 cykli procesora pomiędzy przerwaniami od UARTa, czyli duuużo czasu na wykonywanie instrukcji w pętli głównej. Na Twoim miejscu skupiłbym się na przetwarzaniu tekstu np. linia po linii - przerwanie wypełnia bufor, a po wykryciu sekwencji...
Po co Ci zerowanie semafora ? Semafor binarny liczy do 1, więc nie musisz w nim niczego zerować. Generalnie najprostszy semafor działa mniej więcej tak: [syntax=c] static volatile int semCount; Take(){ while(count > 5); count++; } Give(){ count--; }[/syntax] Jest to bardzo prymitywna konstrukcja, ale tak to mniej więcej działa. Binarny poprostu liczy...
Nie znam Atmel Studio, ale jako że korzysta ono z klasycznego make-a... Wygląda, że "grzebnąłeś" sobie gdzieś w opcjach projektu, ewentualnie w automatycznie wygenerowanym pliku Makefile. Najlepiej wklej ten plik tutaj. No chyba, że włączona jest opcja "treat warnings as errors" (czego nie widzę). Aby zlikwidować to ostrzeżenie po prostu dodaj brakujący...
Wydaje mi się że to zależy od kompilatora. Taka deklaracja nie zeruje zmiennej, czy kompilator ją niejawnie wyzeruje to zależy od niego. Nawet jeżeli ja zeruje to lepiej zawsze napisać; volatile uint8_t accel_decel_counter = 0; Wtedy program jest jaśniejszy, a dobry kompilator i tak to przypisanie zrobi tylko raz. Standard języka C tego nie definiuje...
U mnie (Katowice) z DCF77 nie ma problemu, oczywiście zdarza się, że przez jakiś czas nie działa, ale przecież nie musi - wystarczy że złapie sygnał od czasu do czasu. Z tego co zauważyłem, to strasznie przeszkadza w odbiorze DCF77 komputer. Kiedy miałem zasilane układy przez USB to generalnie był problem, gdy je zasilałem osobno - z sieci lub z baterii...
Faktycznie, masz rację. Przepraszam, źle pamiętałem logikę, której po włączeniu prądu wystarczy raz "powiedzieć", kiedy roleta zjechała do dołu (endstop). Modyfikując lekko jeden warunek można doprowadzić do tego, aby osiągnąć to, czego potrzebujesz. Oto kod: [syntax=c]/* Author: gps79 * Date: 2024.01.13 */ const int encoderInputAPin = 2; // don't change...
Zrób to sobie programowo np. weź timer0 i ustaw podstawę czasu tak aby co określony czas timer zgłaszał przerwanie czy to przepełnienia czy porównania w tym przerwaniu umieść np. taki kod [syntax=c] //gl_OCR1 to zmienna globalna pełni funkcje identyczną jak OCR1 uint16_t volatile gl_OCR1 ; ISR(wektor) { static uint16_t zm; if(zm<gl_OCR0) PORTA&=~(1<<PA0);...
janbernat ---> eeej no co ty opowiadasz że traktuję cię jak początkującego czy jeszcze gorzej jak piszesz - bzdura! Po prostu wiem też że zaczynasz chyba pisać w C i stąd może jakieś dziwne czy nieoczekiwane dla ciebie rzeczy się dzieją. Np dodawanie przydomka volatile do zmiennej static test w przerwaniu nie ma najmniejszego sensu, skoro jest ona wykorzytywana...
Czasem Arduino do czegoś się przyda Dodano po 2 Możesz dać przykład takiej krytycznej czasowo operacji? Problem jest a raczej był związany z buforem nadawczym uarta. Mam funkcję: Blokuj tylko przerwania od UART.
Niestety pokazałeś zły kod - jak wpłynie na poprawność działania pokazanego przez Ciebie kodu: [syntax=c]RxCount=0x00;[/syntax] umieszczone w pętli głównej? Prawidłowo powinno być na przykład tak: [syntax=c]#include <avr/io.h> ... volatile uint8_t flaga; // liczba odczytanych bajtow volatile uint8_t temp[2]; // odczytana temp ISR(USART_RXC_vect)...
Może coś takiego: [syntax=C]//****************************... // +--+ // | ++----+ // +-++ | // | | // +-+--+ | // | +--+--+ // +----+ Copyright (c) 2009 Code Red Technologies Ltd. // // Microcontroller Startup code for use with Red Suite // // Software License Agreement // // The software is owned by Code...
ustaw sobie przerwanie od np. TIMER2 co 10ms i sprawdzaj 4 ostatnie stany przycisku. teoria: http://mikrokontrolery.blogspot.com/2011... powyższe zaadoptowane do A8: [syntax=c] //**************definicja przycisku************** #define _Key _BV(PD7) #define Key_PIN PIND #define Key_DDR DDRD #define Key_PORTPORTD...
Uff, ale narobiliście bałaganu ;-) Tak po chłopsku: volatile - obojętnie gdzie to tylko wskazówka dla kompilatora, aby nie optymalizować static ma 2 różne znaczenia w zależności gdzie jest użyte: 1. w funkcji - powoduje, że zmienna jest jak pisze atom1477 "nieulotna" czyli jej wartość jest zachowywana pomiędzy kolejnymi wywołaniami. Dlatego, że pamięć...
Interesuje mnie jak napisać kod korzystając z makra RAMEND które od razu uzupełni rejestr Y. No przecież już go napisałeś: static void __start(void){ asm volatile ( "out __SP_L__, %A0" "\n\t" "out __SP_H__, %B0" "\n\t" "clr __zero_reg__" "\n\t" "out __SREG__, __zero_reg__"...
DDRB, PORTB i inne są rejestrami, ale co znaczące można uzyskać ich adres. Utwórz sobie strukturę, w której będziesz przechowywał wskaźniki na rejestry oraz jakąś maskę bitu nad którym chcesz operować. [syntax=C]#include <avr/io.h> #include <macro.h> #include <stdint.h> struct ow_pin { volatile uint8_t* pin; volatile uint8_t* port;...
Kod funkcji włączania i wyłączania np. diody Ten kod będzie powodował, że po pełnym zapaleniu dioda z powrotem zgaśnie i zacznie się rozjaśniać. Linijka z ifem nic nie robi, bo wartość byte nie może być mniejsza od zera ani większa od 255. Poza tym po wciśnięciu przycisku będzie dodawana nowa funkcja przerwania onLamp() bez usuwania starej i będą ze...
[syntax=c] #define Button (1<<PB0) #define Button_PORT PORTB #define Button_PIN PINB #define Button_DDR DDRB volatile _Bool Key_Pressed = 0; // flaga wciśniętego przycisku [/syntax] [syntax=c] Button_DDR &= ~(Button); //port - wejście Button_PORT |= (Button); //włącz pull up [/syntax] [syntax=c] ISR(TIMER0_OVF_vect)//przerwanie wywoływane...
Wskazany w linku debugger to zapewne JLink ale za cenę niespełna 10 $ to napewno nielegalny klon :) Jeżeli chcesz poznać LPC'ki i mieć debugger to wejściami . Kiedyś zapomniałem o tym fakcie i dziwiłem się dlaczego program nie działa tak jakbym się tego spodziewał.
Dzięki wielkie- ale to nie do mnie pisałeś. O Atomic_Block dowiedziałem się w czwartek- sprawdziłem- od czwartku jest to pierwsza wiadomość na ten temat. A wracając do tematu Fir3man- wymyśliłem taki schemat programu: #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> volatile uint8_t dol;...
Strasznie namieszałeś. Może tak: #include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> enum { max_counts = 4 }; enum { timer1_prescale = 1024 }; volatile uint16_t old_capture; volatile uint16_t counts[max_counts]; volatile uint8_t count_num; ISR(TIMER1_CAPT_vect) { uint16_t new_capture...
Najprościej to chyba tak: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define TIMERSTART 6 volatile uint8_t FLAGA_50 = 0; volatile uint8_t FLAGA_1000 = 0; // funkcja obslugi przerwania TIMER0_OVF 8MHz / 64 * 250 wychodzi co 2ms // dla innego taktowania nalezy ustawic inny preskaler i/lub inne liczniki stawiania flag ISR(TIMER0_OVF_vect)...
Przykładowy program realizujący przedstawiony przeze mnie sposób. [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "LCD.h" volatile unsigned int adcon = 0; ISR(TIMER0_OVF_vect) { static char st; if((st++)%2) { PORTB |= 1<<0; //pb0=0 PORTB &= ~(1<<1); //pb1=1 adcon = ADC; //odczyt...
Żyje temat 😊 bo tak zależy jak mam czas to coś się bawię. Skoro w tamtym temacie już działasz w Arduino, to tak się szczęśliwie składa że możesz użyć lepszej, dokładniejszej metody niż to proste liczenie w ciągu pięciu sekund. A jeszcze tak się składa że, używając tego przykładu z kursu, tak właściwie masz już co trzeba. Chodzi o to że po każdym...
static uint8_t onewire_0_reset(void) ; static void onewire_0_WriteByte(uint8_t data); static uint8_t onewire_0_ReadByte(void); #define WIRE_PORT_0 PORTC #define WIRE_DIR_0 DDRC #define WIRE_PIN_0 PINC #define WIRE_CON_0 3 union int16_t_LSB_MSB { struct { uint8_t LSB; uint8_t MSB; }; int16_t XSB; }; union...
Zademonstruję Ci: Nowy projekt w Atollic for STM32: Bez modyfikowania skryptu linkera: https://obrazki.elektroda.pl/4714547300_... A teraz Twoje przezroczyste przypisanie: https://obrazki.elektroda.pl/8906289200_... Dopiero po dodaniu do skryptu linkera: https://obrazki.elektroda.pl/4995382700_...
Odpowiednie typedefy są w nagłówku stdint.h Co do podziału pomiędzy przerwanie a program główny to pewnie zapomniałeś modyfikatora volatile przy deklaracji zmiennych, które są dzielone pomiędzy przerwaniem a main(). Co do "tablicy czujników": struct czujnik { uint8_t adres; /* do wyboru czujnika na szynie */ uint8_t ileProbek; uint16_t probki[ROZMIAR];...
Tu masz kod który korzysta z przerwań i co 1 sekundę ustawią zmienną s1_flag na 1. Musisz pamiętać, aby ją w funkcji głównej zerować, bo tak cały czas będzie ona usttawiona na 1. Ten kod jest tylko poglądowy, ma ci tylko przybliżyć co i jak z przerwaniami. [syntax=c]int main(void){ volatile uint8_t s1_flag, /********** KONFIGURACJA TIMERA2 do wygenerowania...
Zmień myślenie o przerwaniach [syntax=c] volatile uint8_t BuforLED[4];// bufor wyswietlacza LED // konfiguracja przerwania tak jak miałeś // obsługa przerwania bez delayow ISR(TIMER1_COMPA_vect) { static uint8_t BiezacyLED = 0; PORTD|=0XeF; // zagas wszystko if(BiezacyLED) BiezacyLED--; else BiezacyLED = 3; // zaladuj do portu odpowiedzialnego za cyfrę...
Drogi kolego , popełniłeś szkolny błąd :D W procedurze obsługi przerwania Timer0 masz ... SIGNAL(SIG_OVERFLOW0) //obsługa multipleksowania wyswietlaczy { //extern unsigned char wyswietl[7]; unsigned char licznik;//<-- ********** błąd !!!!!!!!!!! ... zmienną licznik , tyle że jest to zmienna lokalna , czyli istnieje w pamięci...
Napisz coś podobnego jak poniżej: [syntax=c] // zmienne globalne dostepne rowniez w przerwaniu volatile uint32_t PulseWidth; volatile uint8_t zakonczono_pomiar = 0; // obsluga przerwania TMR32B0 void TIMER32_0_IRQHandler(void) { static uint32_t LastCapture = 0; if ( LPC_TMR32B0->IR & (0x1<<4) ) // sprawdzenie czy przerwanie od kanalu zliczajacego...
Witam, Kolego atom1477 z ciekawości uruchomiłem Twój projekt, z tym że zmodyfikowałem tak main-a, że najpierw wypełniam ALGO_TAB jakimiś tam danymi, a później jednorazowo kasuję sektor i te dane zapisuję do FLASH-a i u mnie działa zawsze ok, niezależnie od poziomu optymalizacji. Nie chciało mi się już robić jakiegoś porównywania danych, to co zapisuję...
No to próbuję: [syntax=c] //* \section OA Original author //* Andy Gayne is the original author of this application note. //*/ //program z noty Atmela 136 //przerobiony na ATMega8, kwarc 11059200 i okrojony program #include <avr/io.h> #include <avr/interrupt.h> //! Pin mappings #define CHMAX 6 // maximum number of PWM channels #define PWMDEFAULT...
Witam, minęło parę lat od przedstawienia ostatniej wersji lampek choinkowych, https://obrazki.elektroda.pl/8870847100_... https://obrazki.elektroda.pl/7289463300_... https://obrazki.elektroda.pl/1796239200_... https://obrazki.elektroda.pl/6426875800_... https://obrazki.elektroda.pl/1476179700_...
Niestety nie mam żadnego filmiku. Sprawuje się REWELACYJNIE. Za to podrzucę Ci gotowca bo ten na stronie wymaga sporo poprawek i domysłów co gdzie jest. Jest to wersja pierwotna która przechowuje w tablicy RAM. Funkcje których tutaj nie ma robią: LCDINIT - inicjalizacja wyświetlacza LCD_POS - ustawia pozycję: wiersz, kolumna LCD_CLS - czyści ekran LCD_PSTR...
A co na to woltomierz? Widzi jakieś zmiany? I skoro ustawiłeś wzmocnienie na tysiąc, czyli zmiana o 1mV da zmianą na wyjściu o 1V. To dlaczego ustawiłeś Vref na 1.024V? I z twoich kodów przetestowałem to: https://obrazki.elektroda.pl/4276604500_...
Spróbuj tego kodu : #define F_CPU 4000000 #include <avr/io.h> #include <stdlib.h> #include <avr/io.h> #define DDR_DB4 DDRD #define PORT_DB4 PORTD #define DB4 PD3 #define DDR_DB5 DDRD #define PORT_DB5 PORTD #define DB5 PD4 #define DDR_DB6 DDRD #define PORT_DB6 PORTD #define DB6 PD5 #define DDR_DB7 DDRD #define PORT_DB7 PORTD #define...
dziwna sprawa bo sprawdziłem multimetrem i SM2135Eh jest podlaczony dokladnie na tych pinach - pierwszy z nich to data (p24), drugi to clk (p26) https://obrazki.elektroda.pl/4413920400_... czy istnieje mozliwość zainicjowania i2c nawet bez drivera dla danego urzadzenia aby sprawdzic czy coś sie "odzywa" po drugiej stronie? Mam wrażenie,...
Witam ponownie, Poszedłem o krok dalej i moim planem jest podłączenie każdego z czterech wtryskiwaczy do osobnego pinu Arduino Uno/Nano z Atmega 328p. Pozwoliło mi to na skonstruowanie programu aby sterować każdym wtryskiwaczem z osobna z tą samą częstotliwością i wypełnieniem, ale sygnał do ich wysterowania jest przesunięty około 90° (problem z rozdzielczością...
Karta SD też jest dobrym pomysłem, ale ja wybrałem na początek układy SPI Flash, bo po prostu mam ich sporo z różnych złomowanych urządzeń i są też dla mnie łatwiejsze w instalacji - nie trzeba kupować adaptera, wystarczy kawałek płytki proto (przykład: https://www.elektroda.pl/rtvforum/topic3... ). Moim osobistym zastosowaniem końcowym dla...
Udało się zrobić obsługę pilota IR bez żadnych dodatkowych bibliotek na podstawie badania impulsów, zwracane ciągi są na tyle powtarzane, że mogę je traktować jako prawidłowe, choć pewnie jak później podłączę analizator logiczny to wyjdą błędy, ale to na później do dopracowania. Do głównej pętli wstawiłem nowa funkcję: analyzePulseFromIR(); // Analizuje...
https://obrazki.elektroda.pl/3570276400_... Pokażę tutaj jak przyśpieszyłem programową komunikację SPI służącą do obsługi pamięci Flash. Sprawdzę jak dużo kodu może kryć się za warstwą abstrakcji GPIO BK7231 a potem spróbuję operacje na pinach zredukować tak, by działały bezpośrednio na rejestrach. Ile cykli procesora tracone jest...
(at)ElektrodaBot Ta wersja wygląda najlepiej. Zweryfikuj jej użycie pod kątem pracy w środowisku ESP-IDF/FreeRTOS, w tym ISR. Bezpośrednia odpowiedź Funkcja `atomic_swap_relaxed()` (zamiana za pomocą `exchange + store`) jest: • poprawna i wystarczająco szybka w zwykłych wątkach FreeRTOS na ESP32 (dla typów ≤ 32 bit), • niewskazana do uruchamiania bezpośrednio...
(at)ElektrodaBot - Chciałbym mieć jakiś kawałek programu, dla którego czas wykonywania przez procesor w architekturze Haswell wyraźnie zależałby od tego, czy dwa zadania, które go wykonują, używają tego samego rdzenia, czy różnych rdzeni. Jak na razie mam raczej niewielkie różnice - wygląda na to, że rdzeń całkiem dobrze sobie radzi w jednoczesnym...
Trochę się zeszło ze znalezieniem odpowiednio "czystego" kodu, bo wprowadzałem jeszcze sporo zmian związanych z przeniesieniem kodu na Arduion Yun i wprowadzeniem dodatkowego sterowania przez wifi za pomocą telefonu, czy komputera. Wtedy potencjometry mają wyższy priorytet, ale jeżeli nie są ruszane, to ustawienia są pobierane poprzez wifi. Póki co...
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>...
Witam wszystkich, projekt powstał na przełomie marca/kwietnia tego roku w wyniku zapotrzebowania na pompkę perystaltyczną potrzebną przy realizacji pracy magisterskiej. Nigdy wcześniej nie miałem do czynienia z elektroniką (nie licząc podłączania diod z rezystorem i prostych zasilaczy na LM7812) a tym bardziej z mikrokontrolerami. http://obrazki.elektroda.pl/2272591900_1...
Z drugiej strony nie wiem, czy zamiast rozdawać czwartoklasistom badziewiaste laptopy, takie Pi500 by nie miało więcej sensu Napewno miało by więcej sensu, czegoś innego niż x86, zapoznania z Linuxem. Wszyscy nie będą programistami, połowa dzieciaków przehandluje toto na allegro. A farbkek na plastykę, instrumentów w klasach brak, byle szafek na książki...
https://obrazki.elektroda.pl/2123084800_... Przedstawię tu cztery praktyczne sytuacje w których ChatGPT rzeczywiście pomogło mi w programowaniu. Sytuacje będą obejmować różne języki i tematyki, będzie C i wyświetlacz 7-segmentowy, będzie Javascript, trochę HTML, a również Winsock i wysyłanie żądania HTTP. Nie zapomnę też o prostej...
http://obrazki.elektroda.pl/4039432800_1... Główną motywacją do stworzenia tego projektu była, jak mówi autor, chęć nauki programowania interfejsu USB w mikrokontrolerach z rodziny PIC. Dodatkowo autor ciekaw był, jak mocno uprościć można funkcjonalne urządzenie z interfejsem USB. Okazało się, że bardzo! zaprezentowany poniżej termometr...
volatile static volatile przerwać typedef volatile
manta sterownik laptop peugeot zapala kontrolka zapowietrzenie silnika mercedes
bateria macallister śruba spluczki
Naprawa starego domofonu w bloku - porady i wskazówki Pobór energii w HDR10 na Vectra Smart TV Box