Uruchom przerwanie od Countera (najlepiej od porównania wartości zliczonej z ustawioną) i zmień stan portu w podprogramie obsługi przerwania lub prościej, ale mało elegancko zmień [syntax=basic4gl]If Counter1 = 100 Then ...[/syntax] na [syntax=basic4gl]If Counter1 >= 100 Then ...[/syntax] Nie tak jest to, że w chwili zliczenia setki nasz if może się...
Poza zmianą nazwy portów będziesz musiał odpowiednio skonfigurować obsługę timera bo z pewnością on jest wykorzystany do liczenia czasu i obsługi wyświetlacza led .
W PICach rozne przerwania wywoluja jedna funkcje w ktorej musisz sprawdzic zrodlo wywolania przerwania czyli sprawdzic np flage czy timer sie przekrecil lub czy nastapila zmiana na porcie B. Powinno to wygladac tak: void interrupt() { if ( T0IF == 1 ) // czy timer sie przekrecil ? { if( T0IE == 1 ) // czy jest wlaczone...
Wiem że zaraz mi się oberwie od innych ale na szybko to pokombinuj z wartością OCR0 - zwiększ ją np do 150 , po drugie możesz przełączyć na inny preskaler mniejszy niż 256. Lecz nie spodziewał bym się wielkiego efektu. Aby otrzymać pożądany efekt musisz zmienić plik ds18b20.c i zamiast wyłączać i włączać przerwania w funkcji temperatura musisz je włączać...
Przerwanie od INT0 powinno aktywować przerwania od timera, które co 50ms będą zmieniać stan portu c: INT0: - blokuj przerwania INT0 - licznik sekwencji na portc = 0 - aktywuj przerwanie timera INT TIMERA: - switch (licznik sekwencji) ..... w ostatnik case czy default: 1) blokuj przerwania timera 2) kasuj flagę INT0 3) włącz przerwania int0
Co zrealizować? Programowe zliczanie impulsów? Ustawiasz timer tak, żeby generował przerwanie co 100 us, sprawdzasz stan portu, robisz xor z poprzednim stanem i testujesz, które bity są ustawione - ustawiony, znaczy zaszła zmiana stanu, czyli inkrementujesz odpowiednią zmienną.
Myrek1: DMA wyzwalasz timerem, nie zmianą stanu portu Tim9 nie ma możliwości wyzwalania, o czym już pisałem 2 razy, więc nic z tego (uprzedzam, że zmiana timera nie wchodzi w grę z różnych przyczyn). A jeśli chodzi o DMA, to tak jak pisałem chyba nie ma dostępu do BB.
Taki spsoob z czasem jest oczywisty jednak nie chodzilo mi o zwolnienie czasu pracy petli glowqnej tylko w trakcje jej pracy aby cos wykonywala co jakis czas i teraz juz to wlasnie zrealizowalem na timerach :]
Nadużywasz |= - tak, jak byś nie wiedział, co jest w rejestrze po resecie i bałbyś się to zmienić. Po prostu zapisz do rejestru to, ca ma tam być, np. TCCR0 = 1 << WGM01 | 1 << CS0; W ten sposób oglądając kod za pół roku będziesz wiedział dokładnie, co jest w rejestrze i nie będziesz szukał po całym programie, w którym miejscu wpisałeś który...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
Opóźnienie - zatrzymanie timera na określoną ilość cyklów zegara. Zanegowanie - zmiana wartości w rejestrze porównywania(chyba OCRx). Zamiast 10 dajesz 255-10=245. Wystawić na innym wyjściu - zmienić timer. Pomyliłeś pojęcia myśląc, że układ sprzętowego PWM steruje na rejestrze PORTx. Takie rozwiązanie nie pozwalało by użytkownikowi na korzystanie z...
Więc pozostało zamiast waitów uruchomić następny timer.
Jaki konkretnie procesor? ATMEL to dość ogólnie napisane :) Wysłanie sekwencji 0 na port B? Co to znaczy? Czy przy starcie wartość wysyłąna na port B to ff i co jakiś czas jest dekrementowana aż do wartości 0? Klawisze podłączone są do jakiego portu? D? Całego programu ci nie napiszę ale coś spróbuje pomóc. Dodano po 7 Treść zadania ;Silnik krokowy...
Czy może jest jakieś oczywiste rozwiązanie, które zrobi to czego oczekuję na atmedze328, tylko go nie dostrzegam? Tak, zwiekszyc długość timera software'owym licznikiem, przy takich częstotliwościach możesz zmieniać stany na portach programowo, w przerwaniu timera, jeśli nie przeszkadza ci związany z tym jitter. Prawdopodobnie że dało by się użyć hardware'owego...
Nie umiem arduino i zrobiłem na rejestrach dla UNO z megą 328/328p. Powinno działać. Dla mega wystarczy zmienić nazwy rejestrów w funkcjach startujących i zatrzymujących timer. Obsługa opóźnienia zrealizowana na timerze pierwszym. [syntax=c]#include <avr/interrupt.h> volatile int timer_cnt=0; // tutaj definiujesz co po jakim czasie przekaznik...
Witam sprawdź ten kod co prawda są inne numery portów i inny procek ale jak zmienisz powinno działać. Problem jest jeden w momencie jak naciskasz przycisk i zmieniasz końcówkę na WYJŚCIE to stan tego pinu Musi być (0) Niski , żeby nie zrobić zwarcia. '$sim $regfile = "attiny2313.dat" $crystal = 11059200 $baud = 9600 enable interrupts 'włącz...
Będzie ciężko to zrobić :( Najprostsza możliwość, to włączanie i wyłączanie timer-a, przyciśnięciem tego samego Buttona. Rozumiem To zadam pytanie inaczej Chcę wysyłać zmienną o wartości od 0 od 255 + $13 "Enter" jako string na COM port i wypisywać wartość odebraną na "Panel1" chcę by jeden Button jak trzymamy , zwiększał wartość zmiennej co 250ms...
niestety mój programik to jednokanałowy PWM. Generalnie zasada działania jest taka: Wartosc wypelnienia wpisywana jest do rejestru R3. W moim przypadku odbywa się to w konfiguracji wstepnej ukladow mikroprocka. Jenak umieszczajac w petli glownej fragment kodu powodujacy inkrementację lub dekrementację R3 w reakcji na dzialanie uzytkownika (wcisniecie...
Zacznij od tego: http://www.nongnu.org/avr-libc/user-manu... Oczywiście jeśli ma to być AVR. W main trzeba skonfigurować rejestry timera-w każdym z procesorów są to nieco inne rejestry- ale dość podobne. W tych rejestrach ustawiasz prescaler, tryb pracy timera- jest ich sporo- zacznij od najprostrzego- i zezwolenie na obsługę...
Pod ten drugi procek podpięte jest wyjście USART z XMEGA, dzięki czemu masz je widoczne w systemie jako wirtualny port szeregowy. W ten sposób możesz łatwo komunikować się z XMEGA za pomocą USART. Co do zmiany bitów portów IO - w XMEGA masz rejestry SET, CLR i TGL związane z portem, jeden ustawia bity, drugi kasuje, a trzeci zmienia na przeciwne. Dzięki...
Na początku zrobiłem to co już umiem...póki co do testów ustawiłem przerwanie od zmiany stanu wejsciowego. Działa i z każdą zmiana portu wejsciowego licznik się ikrementuje. Ok. Jednkaże taka kwestia...Timer 0 w ogóle niezlicza...obserwuję w Debugerze rejestr TCNT0 i w nim nic się niedzieje... Ustawiłem tryb CCC, tak jak podpowiedział kolega michalko12...doczytałem...
Rozpisałeś i zmieniłeś obsługę wspólnych elektrod, a co z segmentami, które tworzą obrazy cyfr? Też trzeba wszystko zanegować. Gołym okiem widać, że obsługa wyświetlacza jest napisana fatalnie i z błędami - bardzo długi i nieczytelny kod, odświeżanie na opóźnieniach, zamiast w przerwaniu timera. Jak masz podłączony ten wyświetlacz? Które linie portów...
Zależy jakie odcinki czasu chcesz odliczać i z jaką dokładnością. Ogólnie system Windows nie nadaje do odmierzania dokładnych odcinków czasu rzędu kilku ms i mniej. Wynika to z występowania w systemie wielu procesów, które są cyklicznie przełączane. Kiedyś pisałem bibliotekę do programowania mikrokontrolerów poprzez port LPT i tam do odmierzania krótkich...
biezacy= port(we) zmiana= bie & poprzedni //bit w zmiana =1 kiedy na wej było 0 a teraz jest 1 poprzedni=not biezacy for i=1 to 8 ....if zmiana>127 ........okres[i]= timer - timers[i] ........timers[i]= timer ....end ....zmiana= zmiana*2 end timer to odpowiednio długi i szybki metronom timers pomocnicza tablica a w okres[] mamy, no okres ;-)
Rejestr TIM->SR nie reaguje na zapis jedynek. Zapis zera kasuje znacznik. Wykonanie operacji logicznej kasuje wybrany znacznik i wszystkie znaczniki, które zostały ustawione przez sprzęt po odczycie rejestru SR i przed jego zapisem, czyli w ogólnym przypadku spowoduje skasowania znacznika przerwania bez zauważenia, że był on ustawiony. Zmiana stanu...
Witam! Nie mam takiego doświadczenia jak inni doradzający na tym forum, ale ja bym to rozwiązał tak: W obsłudze przerwania timera if(PORTC==1){PORTC=2;}... Oczywiście nie będzie to na portach OC1x, ale może zmiana tego jest niewielkim problemem. Pozdrawiam
Witam! Chciałem wykorzystać timer0 do dokładnego odmierzania czasu, jednak coś powoduje zawieszenie całego programu. Dzieje się tak gdy próbuję odczytać wartość zmiennej w obsłudze przerwania lub w pętli głównej programu. Przerwania od timera są na pewno obsługiwane ponieważ działa zmiana stanu portu w obsłudze przerwania. Kod wygląda następująco: //ZMIENNE...
Witam :) Czy ktos programuje moze w asemblerze i moze podpowiedziec w jaki sposob obslugiwac przerwania od TMR0. Probowalem zrobic prosty timer (po zalaczeniu zasilania liczy sekundy) z wyswietlaczem LCD korzystajac z przerwan od timera. Niestety nigdy nie udalo mi sie osiagnac takiego efektu, ktory sobie zalozylem. Zmiana wartosci poczatkowych dla...
Co do nazewnictwa to są pewne rozbieżności ,ale warto sie ich nauczyć np zamiast akumulatora masz 32 rejestry od R0 do R31 w tym te od 16-31 z możliwością wpisywania zmiennej jako wartości (ldi r16,0x12 ) Zmiana w portach też niewielka miałeś np P1 tu masz PA doszedł rejestr DDRA który odpowiada za kierunek portu we/wy. Za to rozkazy nasz wykonywane...
moze pomogłoby połaczenie kilku programowanych równolegle liczników i na tej podstawie (przy odpowiedniej częstotliwości zegara) programować go wartością przy której liczniki zgłaszałyby przerwanie (przeniesienia albo pożyczki w zależności w którą stronę by liczył) wówczas może by można było mówić o nieco płynniejszej regulacji częstotliwości. Tylko...
Co ty opowiadasz... Mamy enkoder, który generuje max kilka impulsów na sekundę i to ma być problem? No właśnie zależy od enkodera. Dlatego zapytałem się w pierwszym moim poście. Ja kiedyś trafiłem na taki enkoder z jakiejś wieży albo wzmacniacza, że miał bardzo dużo impulsów na obrót. To miało chyba symulować 'analogowosc'. Jak zrobiłem odczytując...
Chciałem pobawić się z RC5. W helpie bascoma podane jest że odbiornik musi być podłączony do pinu "Config Rc5 = Pind.2" ... wszystko gitara tylko na porcie d.2 pracuje końcówka "E" od wyświetlacza LCD. Pytanie czy moge zmienić podłączenie tej końcówki LCD na inny port np b.2? Bascom nie pokazuje wtedy błędu ale czy wyświetlacz LCD podczas pracy nie...
LPT jet dośc powolny jeśli chodzi o odczyt impulsów, sprawdza się przy przesyłaniu pakietów bajtowych - prawdopodobnie "przegapia" sporo z tych impulsów. Do tego jeśli aplikacja "nie wyrabia" to będzie kolejna porcja impulsów ominięta, prawdopodobnie korzystasz z API które wprowadza kolejne opóźnienia. Oparcie się na timerze (kontrolce odliczająej czas...
ok, próbowałem odpalić timer0 i wielkie nico mi z tego wyszło :) Może ktoś znajdzie błąd w kodzie. Sprawdzałem pod symulatorem AVR Simulator i w ogóle zegar nie startuje. #include <avr/io.h> #include <avr/interrupt.h> #define TIMER0_INIT0x00 unsigned char flag; int main(void) { DDRB = 0x04; //PIN 2 portu B na output TCNT0 =...
Witam Napisałem poniższy prosty program który po 6 zmianach stanu na nóżce int0 (PB2) wykonuje przerwanie. include "tn15def.inc" .def acc = r16 ;nadanie rejestrowi r16 nazwy symbolicznej .def licz1 = r20 .def licz2 = r21 .def licz3 = r22 .org 0x00 rjmp pocz .org 0x06 rjmp timer0 .org 0x0B ; -- POCZĄTKOWE USTAWIENIA SPRZĘTOWE -- pocz: ldi...
Albert: dość mocno mijasz się z prawdą. Niektóre uC z rdzeniami Cortex mają sprzętowy mechanizm gwarantujący czas odpowiedzi na przerwanie, który umożliwia redukcję drżenia (jitter) przerwania o najwyższym priotrytecie do zera również wtedy, kiedy mamy w systemie inne przerwania. Jeśli użyjesz tego mechanizmu, to sam decydujesz jawnie o czasie od przerwaia...
Oto kod dot. sterowania PWM. Jak łatwo zauwazyc ma on zmieniać wartość timera w zależności o wejścia na pinach 4 i 5 portu B. Programik działa ale mam co do niego pytanie. Dlaczego zmiana obrotów czasami następuje natychmiast po podlaczeniu masy do jednego z pinow a czasem trzeba odczekac dosc znaczny okres czasu (ok.3 sek)? Czy jest to zależne od czestotliwosci...
Tu też nie trzeba nic robić w przerwaniach - wystarczy zaprogramować timer. Jeśli trzeby wygenerować określoną liczbę impulsów - trzeba odliczyć je w przerwaniu timera i po kolejnym przerwaniu wyłączyć timer albo ustawić wypełnienie na 0. Dokladnie nie pamietam jak to bylo w lpc (2148) ale bylo prosciej, moze dlatego ze rdzen 'prostszy'. Na pwm juz...
Mam wrażenie, że PORTB ^= (255)|(170); i PORTD ^= (255)|(170); działają tak samo, jakbyś użył PORTB ^= 255; PORTD ^= 255; - kompilator i tak zrobi to samo. To powinno dać równo 50%, zmiana sposobu odmierzania 128 sekund może co najwyżej pomóc ustawić równo 128 s, a nie np. coś w stylu 128 000 032 us. Dla 50% istotne jest, że _te same_ instrukcje odmierzają...
a wiec tak zakładamy że przy up pracuje kwarc 12MHz. jeśli nie wymagasz dużej dokładnośći to timer ustawiasz w tryb 1 ( 16 bit ) tak aby generował przerwanie np: co 10ms; przy 12MHz cykl wynośi 1us czyli przerwanie będzie co 10000 cykli ( 10000 us = 10ms ). wartość po której następuje przerwanie to zmiana z 65535 na 0000. czyli do rejestrów licznika...
12-kanałowy PWM realizowany programowo praktycznie nie zabiera czasu. Zrób tablicę o typie uint16_t, każdy bit to jeden kanał PWM - będzie ich więc 16, ale tak prościej. Interesuje cię powiedzmy 6-bitowy PWM (chyba wystarczy?), więc robisz tablicę 64-elementową. W przerwaniu timera inkrementujesz zmienną będącą indeksem do tablicy i na dwa porty wywalasz...
Pytanie jak w temacie czy da się przenieść program z at89c2051 na stc11f04. stc11f04 jest no niby chińska podróbka at89c4051. Trochę pisałem w bascomie na atmegi, a asemblera i tych procesorów nie ogarniam. Łatwiej mi przerobić gotowca niż napisać program do obsługi pwm i dmx dla tego procesora(nie umiem napisać dla tego procka obsługi portu pod dmxa)....
Pomysł wydaje się być dobry, ale nie do końca. Teraz reakcja na kręcenie potencjometrem jest widoczna na oscyloskopie w postaci zmiany częstotliwości, także podczas przytrzymywania przycisku, ale obecnie nie da się sterować klawiszami. Tzn, teoretycznie się da, ale czas reakcji od naciśnięcia przycisku sw na wykonanie instrukcji wewnątrz pętli trwa...
hej probuję wysterować serwo przy pomocy dwóch timerow, napisałem coś takiego ale dostaję tylko jakieś drgania serwa mogłby ktoś mi rozjaśnić co robię źle dzięki #include <io.h> #include <signal.h> #definetau10x83 //tau1 = 131, 1ms #definetau20x06 //tau2 = 6 , 2ms #definetau2064910 // 20 ms long licznik=0; unsigned int tau15=0x45; //tau15...
Witam. Staram się zrobić program który będzie reagował na wyzwalanie poprzez przycisk (w przyszłości klaskanie). Wejście, do którego podłączony jest przycisk to Port C na wejściu 0x01. Cały problem jest następujący: - gdy na wejściu podany jest sygnał, zmienna Licznik zwiększa się o jeden. - gdy zmienna jest równa 1, to następuje włączenie timera z...
Wkradła się pewna nieścisłość. Racja: nie "gdzie" tylko "kiedy" występuje przerwanie. Niestety to nadal nie rozwiązuje mojego problemu, dlatego że rozumiem przerwanie tak jak to opisałeś a mimo wszystko zachowuje się to wszystko nieco inaczej... Jeszcze raz: [syntax=c] //definicja LED1 (do którego pinu podłączony LED1) #define LED1 PC0 //definicja LED2...
Witam, Piszę program na ATtiny13A, aby działał jak licznik mod 4 (piny PB0 i PB1), zmiana wyzwalana zboczem opadającym na PB3. Rozwiązanie opiera się na przerwaniach. PCINT3 to obsługa "przycisku" -> naciśnięcie powoduje uruchomienie timera (ustawienie adekwatnego przerwania). Obsługa przerwania timera zwiększa licznik przepełnień - po ok2 sek wyłącza...
No to moze tak. Robisz tak jak pisalem wczesniej, ta czesc bedzie odpowiadala za zmiane obrazka. Teraz wstawiasz drugi komponent TTimer i w nim robisz "Wyslij dane port". W OnClick przycisku "GO" uruchamiasz sobie oba Timery (jeden od obrazka drugi od wysylania danych czyli Timer1->Enabled=true; Timer2->Enabled=true; Musisz pamietac tylko aby...
Jeżeli to zainstaluję to wystarczy, że zmienię numery pinów czy muszę coś jeszcze zrobić? Dodano po 2 Ok, zainstalowałem to rozszerzenie i po modyfikacjach kod wygląda tak(w komentarzach napisałem zmiany): [syntax=c]int timer = 800; //zwiększenie czasu int U18 = 10; //zmiana pinu int State = 0; int lastState = 0; void setup() { for (int Pin = 26; Pin...
[syntax=csharp]#include <avr/io.h> #include <avr/interrupt.h> //definicja LED1 (do którego pinu podłączony LED1) #define LED1 PB0 //definicja LED2 (do którego pinu podłączony LED2) #define LED2 PB1 //definicja początkowej wartości timera #define timer_start 6 //zmienna pomocnicza-licznik używana w przerwaniu volatile uint8_t cnt=0; void...
Twój program - po poprawkach - działa :) #include <avr/io.h> #define F_CPU 16000000UL #define _0_0125ms ( ( 0.0125 * ( F_CPU / 8000UL ) ) - 1 ) //polowa okresu 40kHz int main(void) { DDRB|=(1<<3); // ustawienie portu PB3 (OC2) jako wyjscie TCCR2|=(1<<CS21)|(1<...
Co tutaj przekombinowałem? Atmega32. Tryb Licznika. Celem było zapalenie i gaszenie diod co sekundę. Preskaler = 256. Przerwanie tak wyliczone aby wykonywało się co sekundę. Timer 16bitowy [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> ISR (TIMER1_OVF_vect) { PORTC ^= ~0xFF; //zmiana stanu portu C...
Dzień dobry! Mam taki o to problem, przerzuciłem notę ale nie mogę jakoś ogarnąć jak uruchomić drugi timer 8 bitowy, przykładowo: Proszę pamiętać o używaniu znaczników syntax . Opcja Listing kodu . - arnoldziq
jeśli flaga przepełnienia licznika jest ustawiona wynik należy odpowiednio skorygować nio właśnie ale jak ... bo prawdopodobnie na tym etapie się wyłożyłem :/ gdyż przy maksymalnym wychyleniu potencjometru tuż przed końcem zakresu zapala się led1 gasząc diodę 3 :P ale mimo tego małymi krokami udało się uruchomić timer, przerwanie INT1 wyzwalane zboczem...
Możecie rzucić okiem na ten kod: [syntax=c] include <stdlib.h> #include <avr/io.h> #include <util/delay.h> # include <math.h> #include <avr/interrupt.h> #include "HD44780.h" int a; ISR(TIMER1_OVF_vect) { PORTB|=(1<<PB1); // podciągnięcie do VCC } int main(void) { TCCR1A |= (1<<COM1A1)|(1<<WGM11)|(1<...
Po konsultacji z kilkoma znajomymi doszliśmy do wniosku że prościej będzie wykorzystać timery a nie ADC do czytania dynamiki. Pomysł jest taki, żeby w momencie oderwania młoteczka (czyli wciśnięcia klawisza) załączać timer, a w momencie uderzenia w piezo podłączonego do portu (uderzenie wymusi krótką zmianę stanu na porcie - już przetestowane) wyłączać...
1. Uruchomiłem timer z przerwaniem i liczę nim do przepełnienia, czy włączam zmianę czy nie częstotliwość generowana na pinie portu jest ta sama - pomiar oscyloskopem. 2. No tak, to sprawdzę. 3. Czyli jeśli sygnał zegarowy pobieram z zegara RC2MHz to mam taktowanie 2MHz z PLL a jeśli taktuję RC32MHz to z PLL mam 8MHz? W każdym razie sygnał przepełnienia...
Napisałem program do obsługi dwóch serw taki: [syntax=c]#define F_CPU 1000000 //częstotliowość pracy uP #include <avr/io.h> #include <inttypes.h> //biblioteka zmiennych int main (void) { DDRD=0xFF; //port d jako wyjscia DDRB=0x00; //port b jako wejscie TCCR1B=0x01; // bez preskalera (1mhz) int servo[24]={1000,2000,3000,4000,0,0,0,0,0...
Napisałem program który generuje impulsy (40kHz) na porcie za pomocą timera0. Mam pytanie czy i w jaki sposób moża zrobić żeby ciąg impulsów podzielić na "paczki" po 5 impulsów z odstępami ok. 100Hz. Jezeli bym zaprzągł do tego licznik 16bitowy to by mi sie przepełniał co 122Hz i odpalał timer 0 na jakiś czas i to by mi w sumie wystarczało ale nie mam...
Atmega88 nie ma takich w ogole rejestrow: TIMSK, TCCR0! Ten kod jest poprawny. #include <avr/io.h> #include <avr/interrupt.h> #define TIMER0_INIT 175 char i; // procedura obsługi przerwania od timera TC0 SIGNAL (SIG_OVERFLOW0) { TCNT0 = TIMER0_INIT; // załadowanie do licznika wartosci poczštkowej PORTB ^= (1<<PB1);...
A czy mógł bym prosić o fragment kodu abym mógł to jakoś załapać bo nie wiem jak to za bardzo to napisać? Dostałeś przecież ode mnie link, a w nim dokładnie opisany przykład: http://www.elektroda.pl/rtvforum/viewtop... Czytam to co jest tam napisane, analizuje i kombinuje na kodzie ale nie mam pojęcia jak za pomocą Timera zdefiniować...
masz tutaj moj kod, ktory robi dokladnie to co chcesz... ogolnie sprawa jest prostsza niz sie moze wydawac /* +—————R...
Żeby pisać na mikrokontrolery w C++ trzeba znać ten język bardzo dobrze. Niestety mikrokontroler to nie PC i nie "wybacza" nieprzemyślanych konstrukcji, które kończą się alokacją ogromnych ilości pamięci. Tak konkretniej to chodzi mi o nieprzemyślane używanie klas. C na mikrokontrolery jest znacznie łatwiejszy. A mógłby ktoś napisać w C++ i w C program...
Hejka. Jest w configuration bits Power Up Timer = Disabled. Zmiana wersji MPLABa 7.50 lub 7.40 (nic nie pomaga). Kurcze strasznie to dziwne :( Może to wina samego kompilatora Hi-Tech, bo nie zapuszczałem projektu pisząc program w asmie (nie jestem na tyle biegły w tym) może koś ma jakieś któtkie źródło w .asm na 18F4520 ?? np. zapalające diody na porcie...
Zrobiłem kod z przerwaniem i również nie działa tak jak powinien [syntax=c]#include <avr/io.h> #include <util/delay.h> #include<stdio.h> #include<hd44780.c> #include<avr/interrupt.h> #define TRIG PC1 #define ECHO PD2 volatile int echo_flag =0; volatile int time =0; char ekran[6]; int main(){ DDRD = 0x00; // ustawienie portu...
hardwarowo nie da się. Możesz natomiast użyć licznika do generowania sygnału PWM: np na przerwaniu od Timera ustawić ustawianie stanu zerowego na porcie, a w pętli głównej programu ustawić warunek porównujący stan licznika z jakąś stałą i jako warunek wyjsciowy dać ustawianie portu w stan wysoki. Jest to jednak dość karkołomne rozwiązanie, w którym...
Były to programy na Windowsa Podn Windę nie odwołujesz się bezpośrednio do układów peryferyjnych. Robisz to za pośrednictwem sterowników. Otwierając COM nie interesuje Cie czy to VCOM na USB, port na PCI itp. Nie konfigurujesz rejestrów układu, np SPI czy I2C. Inaczej było pod DOS. Myślę że dał bym radę zaprogramować zamiennik. Kwestia czasu. Arduino...
Witam...Dlaczego przerwania z Timera0 generowane nie sa zgodnie z dokumentacja? chciałbym zrealizować generator sterujący pinami portu PC0-7...w taki sposób aby wartości z tabeli --- unsigned char GenTab DDRC = 0xFF; // port C jako wyjscie 11111111 CLI(); //disable all interrupts TIMSK = 0x01; //timer interrupt sources TCCR0 = 0x00; //stop OCR0...
Ja bym to zrobił jak wcześniej napisałem, ale można też powiedzmy jak ty chcesz (poniżej program pisany z palca w Builder C++, w Delphi będzie podobnie): Timer1->Interval = 200 ; int zadanie = 0 ; Timer1->Enabled = true ; i w zdarzeniu obsługi Timera: { zadanie++ switch(zadanie){ case 1: //wykonaj polecenie nr1 break; case 2: //wykonaj polecenie nr2...
Witam. 1. Umieść na formie dwie kontrolki TIMER, 1-przycisk, 1-Label 2. Przedstawiam przykladowego proga do obslugi Timerow na zmiane napis na Labelu zmienia sie w zaleznosci od tego ktory timer liczy 3. Duzo inormacji na temat VB znajdziesz na www.vb4all.canpol.pl Option Explicit ' wlaczenie kontroli wystepowania zmiennych Private Sub Command1_Click()...
Tego nie widziałem. Znalazłem za to informację że dotyczy to rezonatora pracującego jako generator wytwarzający główny sygnał zegarowy: http://obrazki.elektroda.net/9_123515576... A po drugie, akurat w ATMega8 jest błąd w krzemie i te wewnętrzne kondensatory nie działają (tzn. FuseBit ich nie włącza). Użycie rezonatora jako źródła sygnału dla...
pubus, wkleiłem Twój przykład i program się skompilował, a więc sukces. Ale niestety tu nastąpił koniec radości. Jak wspomniałem chcę uruchomić timer, który przy przepełnieniu wywoła obsługę przerwania. Aby było najprościej jak się da niech jedyną instrukcją w tej obsłudze będzie zmiana stanu całego portu C czyli: PORTC != PORTC; Do któregoś tam pinu...
Nie wiem, jak chciałeś osiągnąć detekcję zmiany kierunku odczytując stan jednego pinu. Żeby to osiągnąć, potrzebujesz co najmniej 2 bity w kodzie Greya, czyli na wejście należy podać sekwencję 00, 01, 11, 10, 00, 01 itd. Wtedy zmiana kodu z 01 na 00, z 11 na 01, z 10 na 11, z 00 na 10 będzie oznaczać np. lewe obroty, a zmiana kodu z 00 na 01, z 01 na...
A po kilku zamyśleniach urodził się program do pomiaru częstotliwości CPU u PC: (chociaż prawie za każdym razem podaje troszeczkę inne wartości, ale z małym błędem) W tym Basicu też jest zmienna TIMER, zwiększa się co 1ms, ale dopiero teraz zwróciłem uwagę na ten szczegół: PROCEDURE wait(ms) INC ms DO qq = TIMER DO LOOP UNTIL TIMER > qq DEC ms LOOP...
Mam sprawdzać stan bieżący czy ilość przepełnień? To już zależy od Ciebie i od tego jak szybko chcesz puścić timer (z jakim preskalerem). Ale przy takiej precyzji wystarczy liczyć przepełnienia w procedurze obsługi przerwania. Jak wskazano wcześniej najrozsądniej jest użyć 3 zmiennych inkrementując wartość każdej z nich po przepełnieniu. Wciśnięcie...
https://obrazki.elektroda.pl/3227491500_... https://filmy.elektroda.pl/98_1514068986... Właściwie mamy już Święta i świąteczny konkurs w DIY. A w nim sporo konstrukcji opartych na programowalnych diodach WS2812B. Stąd też, aby ułatwić innym realizację świątecznych projektów oświetleniowych, postanowiłem podzielić się rozwiązaniem...
Mój problem jest taki, że PWM na TIM1 nie reaguje na zmianę CCRx w trakcie działania programu. Wszystko pozostałe działa poprawnie (nawet zmiana CCRx w trakcie działania dla TIM3 i TIM4). Kod od inicjalizacji: void timer_pwm_setup() { //struktury konfiguracyjne TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure;...
Hmmm. teoretycznie masz racje... ale przy zalozeniu, ze sterujemy jednym serwem.... bo teraz, jak zechcesz aby dlugosc wysokiego impulsu na pinie 1 wynosila 0.7, a na pinie drugim 1 (nie mowiac juz o pozostaluch pinach) to sie sprawa komplikuje... Masz racje, dla jednego serwa, bedzie dzialac, ale niezaleznego sterowania kilkoma serwami raczej na tym...
Takie proste, a takie skuteczne, problem rozwiązany, podziękowanie poszło. Dodano po 59 Problem rozwiązany przez zmianę timera.
Witam. Na zlecenie piszę pewien projekt, którego częścią jest dekodowanie sygnału z pilota Rc5. Z początku zrobiłem to na mojej eksperymentalnej płytce z układem ATmega32, gdzie dolutowałem czujnik w powietrzu. Ustawiłem procka na wewnętrzny rezonator 4 MHz, gdyż taki udało mi się znaleźć na internecie działający przykład dekodowania Rc5, no i ruszyło,...
8051 ma 0kB (zero) pamięci programu :P A poważnie, to ma tyle, ile się do niego podłączy pamięci zewnętrznej, max. 64kB To już archaizm - pierwsze procki z rodziny '51 Wtedy słowo Flash kojarzyło się z niejakim Gordonem Flashem :d Przed 8051 były jeszcze 8031, a przed nimi był chaos :D A chcesz te wyjścia wykorzystać jak wyjścia normalnego licznika?...
Bardziej się boje zakłóceń na taśmie do wyświetlacza :/ Dodano po 21 Jak dobrze ogarniam temat Pcf8583 to należy go podpiąć pod uC przez I2C, potem go skonfigurować w programie i poprzez wyście INT podłączone do timera w uC zliczać impulsy. Można by też podpiąć INT z Pcf8583 do np. INT0 w uC i też zliczać impulsy. Dodano po 1 Problem ze zliczaniem biegów...
Witam. Pisze programi obsługi sonara na AT90S2313 w C. Do generowania sygnalu 40Khz uzywam wstawki assemblerowej by miec pewnosc co do czasow generowanego przebiegu. Na portach PORTB.0 i PORTB.1 w każdym półokresie sygnalu 40KHz pojawiaja sie przeciwne stany, które sterują układem MAX232 pracującym w nietypowej roli wzmacniacza sygnału. ... Chodzi...
Jeśli potrzebujesz krótkich czasów to wystarczy timer 8-mio bitowy do dłuższych czasów 16-to bitowy. No zgadza się - małe wartości można przechowywać na 8-bitach. Taktowanie masz z tego co sobie ustawisz jako źródło zegara w fusebitach. Może to być kwarc podpięty pod uC, zewnętrzny generator podpięty pod uC, wbudowany generator RC. Im mniejsze czasy...
Witam, proszę o pomoc, mam sprawę z którą walczę już długo i nie mogę zrozumieć czemu tak jest. Steruję silnikiem krokowym - zmianę stanów taktuję timerem - cewki silnika podpięte są pod porty C0-3. Podłączyłem 2 przyciski pod port PB0-1 - chcę mini zmieniać prędkość silniczka wpisując do rejestru OCR1A wymaganą wartość do przerwania. Problem jest w...
mam jeszce jeden problem, według kodu z linku dondu #include <avr/io.h> #include <avr/interrupt.h> //definicja LED1 (do którego pinu podłączony LED1) #define LED1 PB0 //definicja LED2 (do którego pinu podłączony LED2) #define LED2 PB1 //definicja KLAWISZ (do którego pinu podłączony KLAWISZ) #define KLAWISZ PC0 //definicja...
Wykorzystując mikrokontroler 8051 napisz program sterujący światłami na przejściu dla pieszych w stanie spoczynku świeci światło zielone dla samochodu czyli czerwone dla pieszych, po przeciśnięciu przycisku przez pieszego po 3 sec następuje zmiana świateł: zapala sie zielone dla pieszego a czerwone dla samochodu. Stan ten trwa przez 15 sec. po tym czasie...
Założyłem ten temat, bo chciałbym (i prawdę mówiąc muszę) zrozumieć program znaleziony, nawet chyba u Was na forum, dekodujący sygnał rc5. Historia jest typowa: "projekt, którego nie chcę, a który muszę." Dzięki z góry za pomoc. Nie besztajcie mnie zbyt mocno. Wspomniany kod: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h>...
a zapis rej = (rej & NegMaska) | BityUstawiane zabezpiecza przed problemami i dziwnym zachowaniem. A mister mirekk36 niech dokładniej zerknie co robi ta mała poprawka którą klepnąłem zanim zacznie cokolwiek udowadniać. Ja wiem dokładnie co robi ta maska, tyle, że jeszcze raz powiem, że w przypadku ustawiania rejestru konfiguracyjnego to jest takie...
Myslalem, ze to kwestia konfiguracji: [syntax=c] #include <avr/io.h> #include <util/delay.h> #include "LCD/lcd44780.h" #include <stdlib.h> // konwersja z int na char, funkcja itoa #include <avr/interrupt.h> #define CLK (1<<PD5)//wyjscie PWM //########### I/O ########### DDRD |= (1<<CLK_LED) ; PORTD |= (1<<CLK_LED);...
Faktycznie zapomniałem dodać kilku rzeczy. Pomyłka z rejestrem - wipsałem rejestr z 2313. Chciałem zobaczyć czy dobrze wpisuje wartości do rejestrów (TCNT1H i TCNT1L dla T1 i TCNT0 dla T0) - czy odmierzany czas zgadza się z czasem który zadałem. Napisałem prosty program który jeśli nadejdzie przerwanie od przepełnienia timera zmienia stan na wyjściu...
https://obrazki.elektroda.pl/6848039300_... Ogranicznik czasu pracy to dość banalne urządzenie włączane pomiędzy mechanicznym włącznikiem ciśnieniowym a pompą, mające ochronić ją przed przegrzaniem (skutkiem suchobiegu). Zasada działania: 1. Po włączeniu zasilania przekaźnik jest włączony i zaczyna się odliczanie 100 sekund (w normalnej...
Na podstawie informacji zawartych tutaj: http://diycenter.acid19.linuxpl.com/read... oraz zgodnie z sugestiami w poprzednich wypowiedziach zrobiłem sobie w celu przetestowania taki oto program: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> int time=0, flaga=0; int main (void) { DDRB |= (1 << 0); //...
Proszę jeszcze o kilka porad jak można sterować zmianą godziny za pomocą przycisków (rozwiązanie programowe) Najprościej, jak w zegarkach samochodowych. Jeden przycisk zwiększa godziny, drugi minuty. Zmodyfikowany czas zapisywany jest w DS1307. Dodano po 2 Sekcja sterowania wyświetlaczami odpięta od VCC i wszystkie cztery tranzystory podpięte przez...
utaj poprawiłbym kolegę R-MIK bo wydaje mi się, że nie zrozumieliśmy się w kwestii aktualizacji wartości wypełnienia - aktualizując wartość w przerwaniu od porównania możemy dość do sytuacji, kiedy nowa wpisywana wartość będzie większa od aktualnej a to spowoduje kilkukrotne negowanie portu i zaburzy pracę całego przebiegu. Rejestr OCR jest buforowany....
Piszę z głowy, więc mogą wystąpić błędy :) Zapalanie diod przy założeniu, pojawieniu się na pinie stanu niskiego. Mruganie diody na P1.2: asembler język maszynowy procesora filetype:pdf Tutaj masz przetestowany program w kompilatorze :) aktualnie nie ma jak sprawdzić na 51-ce: [syntax=asm] sekunda equ 20h org 0h ljmp start org 0Bh przerwanieT0: mov...
Witajcie Jednak poproszę o radę. Poprawiłem kod dodając na samym początku obsługi przerwania GICR &= ~(1<<INT1); Ale program dalej źle działa. Nie ma już problemu drgania styku, ale układ zachowuje się tak jakby w chwili ponownego załączenia GICR czyli po iluś tam ms : if(LP_timer0 > 50) GICR |= (1<<INT1); // (500 ms) wchodził od...
Błędy są wszędzie. Pierwszy - to użycie przerwania zmiany portu zamiast sprawdzania stanu przycisków w przerwaniu timera. Drugi - to użycie delay w przerwaniu. Trzeci - to źle napisane if else w przerwaniu timera. Czwarty - użycie własnego bool zamiast standardowego _Bool. To tak na początek.
Witam. Szukam pomocy w napisaniu kodu do wydaje mi się prostego układu, chodzi o sterowanie 20 diodami led. ............ Czy dało by się zmodyfikować całość żeby działało by to na atmega8? Pozdrawiam. W zasadzie to ta modyfikacja sprowadzi sie praktycznie do napisania nowego programu - w całości. Możesz wykorzystac tylko pewne elementy z programu dla...
"i" jest typu int. Dzięki za kod, ale nie jestem biegły w assemblerze... [syntax=c] int main () { int i = 0; //wartości RED //TIMER 1 - No prescaling, PWM 8 bit Phase Corrected TCCR1A = 0b10101001; // czerwony (1<<COM1A1)|(0<<COM1A0)|(1&l... TCCR1B...
zmiana portu nasłuchiwania bluetooth zmiana portu adres portu zmiana
amplituner pioneer kolumna instrukcja sterownik sprężarka znajduje filtr oleju
Renault Kangoo 2 – czujnik otwartych drzwi nie działa, naprawa mikrowyłącznika i przewodów Nissan Qashqai – mrugająca kontrolka poduszki, błąd poduszki fotela kierowcy, diagnostyka SRS