da się, da. choć na AT89C2051 to nie najlepiej działa (i zresztą wszystkich 51 bez PWM), ale ja (kiedyś) napisałem procedurki które pozwalają na płynną regulację silnika SPS: W C: unsigned char licz,predkosc; #define silnikP10 #define wlacz 1 #define wylacz 0 void pwm (void) interrupt 1 { if (licz<predkosc) silnik=wlacz; else silnik=wylacz; if (++licz>64)...
problem jest nastepujacy. dosc czesto wiesza sie router Asmax i odcina mi dostep do internetu. wystarczy potem wylaczyc, wlaczyc spowrotem do kontaktu i wszystko dziala. niestety jest on u sasiada i nie zawsze moge ta procedure wykonac. widzialem kiedys na allegro urzadzanie ktore na krotki czas resetuje sieciowe urzadzenie bez zrywania polaczenia....
(...)Mam jednak pytanie, czy można to zrobić w jakiś inny sposób, aby zmiana tempa zależała tylko od zmiennej speed ? Ten sposób jest jak najbardziej odpowiedni. Mam tu następujące sugestie: - poprawić dokładność ustawiania tempa poprzez zwiększenie częstotliwości przerwań (ustawienie preskalera na 1), - przeliczać zadaną wartość tempa w bpm na wartość...
Trochę długo to trwało, bo miałem na głowie parę innych spraw, ale w końcu coś wyszło :) Po paru próbach przeróbki rzeczonej funkcji stwierdziłem, że nie ma co :D Zrobiłem przerwanie od timera co 0.5 sekundy, w najgorszym przypadku sterowany silnik będzie w zwarciu przez 0.5 sekundy, co raczej nie powinno mu wyrządzić krzywdy, ewentualnie później zmniejszę...
Masz w avr-gcc. Dla innego kwarcu, lub innej czestotliwosci przerwan inny preskaler lub wartość OCR1A. #include <avr/interrupt.h> #include <avr/io.h> ISR(SIG_OUTPUT_COMPARE1A) { /* Kod przerwania Timera 1. Wywolywane co 10ms */ } void init(void) { /* Timer 1: ** Tryb CTC (zliczanie do wartosci TOP i...
;Program realizujacy 6 PWM 8-bit na liniach PB50 ;Licznik T2 generuje stala czestotliwosc przerwan, ;w ktorych obslugiwane sa PWM-y ;W programie glownym mozna robic cokolwiek, ;np. obslugiwac ADC lub RS ;Rejestry R1 do R6 zawieraja wartosci 0..255 dla PWM1 do PWM6 .ORG0 RJMPRESET ;---------------------------------------...
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...
Prosze bardzo o to progrma #include <avr/interrupt.h> #include <avr/delay.h> volatile int counter=0; int serwo1, serwo2, serwo3, serwo4, serwo5, serwo6, serwo7, serwo8; //volatile unit8_t flagi; unsigned char liczt0; ISR(SIG_OVERFLOW0) { TIMSK |= _BV(TOIE2); TCNT0=200; counter++; } int main(void) {...
Po pierwsze, możesz jak najbardziej korzystać z timera (a właściwie to powinieneś, jeżeli chcesz pomniejszyć koszta o zakup zewnętrznego RTC). Po drugie - możesz kalibrować, możesz to robić długo i bezskutecznie. Po drugie i ćwierć - Wewnętrzny oscylator nie za bardzo nadaje się do tego celu. "Nieco" mu się zmienia częstotliwość wraz z temperaturą i...
ATmega48 ma o polowe mniejsza pamiec SRAM, FLASH i EEPROM, 48 obsluguje do 5 przerwan zewnetrznych a 8 do 2. ATmega8 ma max czestotliwosc 16MHz a ATmega48 do 20MHz, co jeszcze... ATmega48 obsluguje DebugWire co jest na prawde fajnym bajerem bo do programowania potrzebny ci jest tylko pin RESET ale tez taki programator kosztuje swoje;) okolo 1500zl.
Musisz zliczyc 60000000/4 impulsow, standardowo perfyeria dzialaja wlasnie z czestotliwoscia systemu/4, mozesz to oczywiscie zmienic w odpowiednim rejestrze.
Dziekuje bardzo za odpowiedzi. Zdaje sobie sprawe ze z samym potencjometrm moglbym miec problemy z ustaleniem czestotliwosci dltego chce to zrobic tak ze za pomoca potencjometru bedzie zmienialo sie czestotliwosc o pewien krok np. co 10Hz natomiast za pomoca dwoch klawiszy bedzie mozna zmieniac czestotliwosc w gore lub dol o 1Hz. Konwersje chce zrobic...
Oczywiście, że lepiej procesor poradzi sobie (bez dodatkowych przetworników) z sygnałem częstotliwościowym. '51 ma w sobie dwa timery 16-bitowe które mogą pracować jako liczniki lub czasomierze. Do zliczania impulsów użyj jednego timera pracującego jako licznik, a drugiego użyj jako czasomierza do generowania przerwań w których odczytywana będzie wartość...
Można, a w BASCOM-ie przerwanie od portu szeregowego nazywa się "serial" i to jego obsługą musisz się zainteresować. Przykładowy kod w BASCOM-ie 51: $crystal = 11059200 ' czestotliwosc kwarcu $baud = 2400 ' predkosc transmisji Dim X As Byte ' deklaracja zmiennych Enable Interrupts ' wlaczenie przerwan Enable Serial ' wlaczenie przerwania portu RS232...
Witam, w czym jest problem? moze pokaz co i jak obslugujesz, jaki to enkoder, quadraturowy? jak czestotliwosc impulsow? Ten mikrokontroler bez problemu obsluzy ekoder nawet quadraturowy przy sporej predkosci. Gubienie impulsow moze wynikaz z tego ze "czekasz" na zmiane stanu a nie wykrywasz zmiane stanu, rozwaz uzycie przerwan. Opisz dokladnie twoj...
Strasznie mieszasz, zmieniając te systemy liczbowe. Powinno być: [syntax=basic4gl] 'Wyjscie 1Hz I2cstart I2cwbyte &HD0 I2cwbyte &H07 ' zapis do adresu 07H I2cwbyte &H10 ' ustawienie czestotliwosci SQW/OUT I2cstop [/syntax]
Zastanów się ile rzeczy robisz w przerwaniu a ręcznie generujesz PWM. Kupa warunków, czytanie ADC i inne głupoty - setki jeśli nie więcej taktów + wolne pomiary ADC. Tak że w życiu się nie wyrobisz. Dodatkowo startujesz konwersję, ale nie czeksz na jej koniec - tak że wynik jest całkowicie losowy. A jak byś czekał to byłoby to jeszcze wolniej. Zrób...
Witaj , najpierw musisz podać kompilatorowi z jakiego mikrokontrolera bedziesz korzystał. tj. attiny26. .include "tn26def.inc" ;nastepnie okreslasz wektroy przerwan .cseg .org0x00 rjmpstart ; skok do startu .org0x01 reti .org0x02 reti .org0x03 reti .org0x04 reti .org0x05 reti .org0x06 reti .org0x07 reti .org0x08 reti .org0x09 reti .org0x0a reti .org0x0b...
Nie mam takiego sprzętu. Napisałem coś takiego: [syntax=c] volatile uint8_t i=0; // LICZBA PRZERWAN volatile uint8_t freq=0; // CZESTOTLIWOSC volatile uint8_t pr=0; // ZMIENNA USTAWIANA CO PODSTAWE CZASU 0,025 S int main(void) { lcd_init(); // INICJALIZACJA WYSW. sei();// GLOBALNE PRZERWANIA TCCR2=(1<<WGM21)|(1<<CS22)|(...
Witam. Dzieki uzytkownikom tego forum zdążyłem, w moim odczuciu, zrobić postępy w zrozumieniu przerwań. Wiem już o tym dlaczego nie stosować funkcji delay w przerwaniu ze względu na niedokładność odliczanego przez nią czasu i ryzyko gubienia przerwań i zamiast tego używać timera do opóźnień. Próbuję jeszcze zapanować nad jedną rzeczą ale mi się nie...
0,000032s czyli 31250 Hz Dokładnie kolego niveasoft . Przy preskalerze ustawionym na 1 i w przerwaniu timer1=39729 przerwanie wystąpi co 0,00819200 s czyli tyle ile wyliczył sobie dla timera0 w pierwszym poście ( urzywając polecenia load) czyli skoro przerwanie bedzie co 0,008 to przy pwm 100 krokow daje .. czestotliwosc 1Hz. Sami nie wiecie co piszecie....
rozne serwa roznie moga dzialac. Nigdzie nie widzialem, zeby ktos okreslil dokladna czestotliwosc z jaka to ma byc robione.. zazwyczaj jest ok. 50Hz. Drobne roznice typu kilka Hz (czyli kilka ms wywolywanie przerwania) nie powinny miec zadnego wplywu na serwo. Problem moze sie zaczac jak bedziesz mial dlugie funkcje wywolywane przerwaniami... ale na...
Kilka pytań i spraw, ktore być mogą okazać się pomocne: Z wartości przeładowania T0 (D8EF) i faktu że przerwanie chodzi 100 razy/sek domyślam sie ze używasz kwarcu 12MHz . Jednak jesli ma to byc równo 100Hz to zauważ że podana u ciebie wartosć początkowa jest za mała o 1, bo powinno byc: T0pocz = FFFFh - (Fxtal / 12 / Fto) + 1 = D8F0h (a nie D8EFh)...
Eh ten rs-232 + przerwania to juz mnie o bóle głowy przyprawia. Mam programik: $crystal = 11059200 ' czestotliwosc kwarcu $baud = 1200 ' predkosc transmisji Dim X As Byte , Znak As Byte Enable Interrupts ' wlaczenie przerwan Enable Serial ' wlaczenie przerwania portu RS232 On Serial Port ' na przerwanie z portu wykonaj procedure "port" Do ' poczatek...
Próbuję zrozumieć zasadę działania timera0 w normalnym trybie pracy, ale niestety mój kod i sposób rozumowania najprawdopodobniej jest zły, ponieważ dioda nie miga. W związku z tym chciałbym poprosić kogoś o weryfikację kodu oraz mojego rozumowania, bo może coś robię źle. W kodzie zamieściłem stosowne komentarze więc nie będę ich dublował. Częstotliwość...
ten program caly cas pracuje, ale zalezy mi na czasie po zgloszeniu przerwania musze odczytac dane z potu1 ktore sa adresem w mojej tablicy a nastepnie na port2 wystawic dane z tablicy potem mam czas na ustawianie flag aby procesor sie nie zrestartowal tylko oczekiwal na nastepne przerwanie , ktore jest ze stala czestotliwoscia wiec moge wszystko dokladnie...
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
witam. od kilku dni probuje rozwiazac pewien problem. mianowicie ucze sie programowac avr'y i postanowilem zrobic budzik. jednak problem zaczal sie gdy zaczalem dzialac na przerwaniach. na wejscie int2 podany mam sygnal o czestotliwosci 1Hz. ma on co sekunde powodowac przerwanie w ktorym jest odczyt zegara oraz wyswietlenie go na wyswietlaczu 2x20 znakow....
program zaczyna nabierać formy :) cały czas jednak nie mogę przebić tematu taktowania, zastosowałem takie rozwiązanie: // 10000 to ilość taktów na 1 milisekundę, 500 to liczba milisekund w sekundzie podzielona przez 2 bo stosujemy 2 przerwania na 1 krok int czestotliwosc_0 = 10000 * 500 / Convert.ToInt32(czestotliwosc.Text); TimeSpan czestotliwosc_1...
Cel instrukcji while(1); na końcu programu głównego rozumiem. Co myślisz na temat kodu poniżej, który ma zmieniać częstotliwości na poszczególnych pinach na skutek "1" na P1.0 ? Czestotliwosc zegarow dla wykonania przerwan nie jest jeszcze dobrana. #include <intrinsics.h> #include <msp430x20x3.h> unsigned int counter1, counter2, counter3,...
Dzieki za propozycje Pawle. Nie wiem czy dobrze rozumuje ... Ta talblice sinusa tworze w pamieci RAM i kazda faza ma inny wskaznik w danym przerwaniu. Jakbym chcial uzyskac wzor na regulowana czestotliwosc to moze on miec postac: ? czestotliwosc_wy=240/fw*okres_przerwan przy czym fw-deklarowana wartosc czestotliwosci z klawiatury Dlaczego poczatkowe...
gummis: kolega pisał wyraźnie o uC AVR, a nie o '51 ;-D. przeciez wyraznie napisalem ze moze sobie przetlumaczyc. jedna transmisja i2c w przerwaniu zostala wyeleminowana ta gdy nastepuje zmiana 1s. jesli nic wiecej nie musisz obslugiwac w i2c poza tym exponderem wprzerwaniu to juz nie bedzie sie to klocic.w przeciwnym wypadku proponuje ustawiac w glownym...
eeee.... ale to wciaz jest mocno bezsensowne. przeciez nie wygenerujesz trojkata o czestotliwosci 500MHz tak czy siak, bo porty tyle nie wyrabiaja. tak naprawde to prosciej wygenerowac jeden okres sygnalu do RAMu, a w przerwaniu po prostu wyrzucac kolejne probki. przerwanie wtedy po prostu realizuje 3 operacje: 1. wystawienie i-tej probki z tablicy...
Osiągalne, ja miałem podobny problem niedawno na STM. Zegar tam jest za szybki :P minimalna częstotliwość próbkowania to coś ponad 30kHz. Gdzie potrzebowałem coś w okolicach 2kHz. Nie pisałem nic na dsPICa ale z tego co widzę to konwersja nie jest możliwa na zewnętrzny event. Jeżeli chcesz zmarnować timer (i możesz) to pozostaje uruchomienie na nim...
Te noty to nr 335 i 131. Przejrzalem je jeszcze raz i nie widze zeby pisali o dwoch licznikach. Pisales ze: "Jak co 1ms zmienisz wpis w OCR1A na inny a potem znowu na ten sam to otrzymasz 500Hz prostokąt." Niestety nie mam czym zmierzyc czestotliwosci na wyjsciu, ale wydaje mi sie ze czestotliwosc zalezy tylko od zegara pwm i wpisu w OCR1C. 500kHz mozna...
nie znam dokladnie bascoma i nie wczytywalem sie w listnig a bardzo. Uzywasz przerwania wyzwalanego nozka 7 (1Hz) ? Jesli tak to moze chodzic o bledne ustawienie wyzwalania przerwania -> oba zbocza wyzwalaja przerwanie tym samym co "2Hz" a nie 1. Kolega wyzej dobrze sugeruje, moze byc diodka (powinien pociagnac bez tranzystora chyba, tam jest otwarty...
Przerwania maja to do siebie, ze od sygnalu wyzwalajacego do wykonania pierwszej instrukcji handlera mija sporo czasu. Zwykle jest to kilka us. Aby tego uniknac sugeruje bys linie zegarowa monitorowal w ciasnej petli na okolicznosc zmiany poziomu, i w momencie wykrycia takiej zmiany rejestrowal stan linii danych. To powinno Ci umozliwic Ci monitorowanie...
SETB P3_2 wykonuje sie w 12cykli, a wiec teoretycznie mozna wykonac 2 takie instrukcje na mikrosekunde. Jesli pierwsza ustawia bit, to droga go kasuje i to zajmuje 1 mikrosekunde. Stad ( i tu korekta ) max. czestotliwosc przebiegu bedzie 1MHz a nie 2Mhz. Przepraszam za przeoczenie i dzieki za wskazanie pomylki. Oczywiscie dla MOV P1,#0FFH bedzie to...
aja mam inny pomysl, robilismy cos takiego w szkole, dziala swietnie, otoz zrob sobie jakis generatorek RC, najlepiej na bramce negujacej schmitta(nie wiem czy tak sie to dokladnie pisze), i podlacz sobie do to jakiejs nozki w scalaku(najlepiej pod jendo z przerwan), teraz wewnatrz uruchom sobie licznik(jakis timer badz tez wlasny program) i jak przyjdzie...
Poprawiłem błędy, w tym ten związany z częstotliwością a nie z okresem sygnału. Dodałem zmienną typu Single Czestotliwosc, do obliczeń zmiennoprzecinkowych. W Timer0 wpisuję na starcie 131, Config Int0=Rising. Czy dobrze to robię, czy we właściwych miejscach kodu? Pytania: Jak zaokrąglić wynik ze zmiennej Czestotliwosc do dwóch miejsc po przecinku?...
Witam Pisalem kiedys program do sterowania robotem (manipulatorem ) w bascomie. Zliczal on miedzy innymi impulsy z 3 enkoderow. i wszystko ladnie chodzilo: Fragment kody ktory zlicza impulsy z 3 enkoderow: //enkoder 1 Enk1_a Alias Pinb.0 Enk1_b Alias Pinb.1 //enkoder 2 Enk2_a Alias Pinb.2 Enk2_b Alias Pinb.3 //enkoder 3 Enk3_a Alias Pinb.4 Enk3_b Alias...
Początek zabawy, i bliski jestem stwierdzenia, że to nie dla mnie. A więc, albo ktoś podpowie, albo pogryzę tego procka. Problem jest następujący: Po przerwaniu, program zapala leda i wychodzi z pętli WHILE (zaczyna main()) czyli mój LED zgaszony. Lub bez przerwania, prog. wchodzi do petli WHILE opuszcza ją i zaczyna od main(). czyli na terminalu widzę...
Sprobuj jeszcze od timera0 obsluge przerwania w petli glownej, a Krotki kod generujacy tego prostokata, mozesz zorbic: -przeliczajac ile z danym kwarcem wynosi okres danej czestotliwosci wpisac do licznika timera1 polowe tej wartosci, aby co pol okresu zmienial stan wyjscia na przeciwnym, przerwanie od Timera1 oczywsice ze wzgledu na prostote zrob w...
Moze lepiej uzyc przerwania od przepelnienia Timera. Ustawic tam taka wartosc poczatkową, żeby przepelnial sie co 5 sekund, a jak sie nie da tak duzo, to co 1 sekunde i zwiekszać jakiś licznik. Jak licznik osiagnie wartość 5 to wywołać podpogram Dim Licznik As Integer On Timer1 Co_sekunde Enable Interrupts ' Wlaczenie przerwan Enable Timer1 ' Aktywowanie...
z ta kalibracjo to ciekawy temat ,ale jak podepne czujnik do termometru zrobionego na rs232 to temperature pokazuje idealnie,a ten kwarc to faktycznie 12.902400 ,tylko zmieniłem go na 11,059 oczywiscie tez zmieniając w kompilatorze. Wybacz kolego , ale Cię troszkę "obsztorcuje" :D 1)Twierdzisz , że używasz DS1820 (9-bit) , a temperaturę obliczasz jak...
na poczatku przepraszam za pomylke zamiast czestotliwosc ma byc okres A czemu nie wykorzystasz jednak przerwań?przerwania to duże udogodnienie w uC chce je wykorzystac, ale nie za bardzo potrafie sobie poukladac ten program w glowie :( w zasadzie nie mam koncepcji na strukture programu.... :( myslalem zeby zrobic w petli glownej wyswietlanie: do wyswietl...
Witam,. Wytrawiłem taką płytkę jak na załączonym schemacie. Używam kwarcu zewnętrznego 8Mhz, z przerwaniami co 10ms. Miernik był sprawdzany z częstotliwościomierzem i jego wskazania są poprawne. Nawet jeśli nie mam nic podłączonego do licznika to na LCD ma wartości od 100-200Hz. W momencie gdy podłączone czujnik natężenia światła, który ma na wyjściu...
Witam. Napisałem program do pomiaru napięcia i pradu zmiennego, sygnaly doprowadzone na nozki ADC6 i ADC7, następnie chcęje spróbkować w przerwaniach z timera w trybie CTC (po64 próbki każdy), zatrzymaćna chwile przerwania, dokonać obliczeń, wyświetlić na lcd i "od nowa". Napisałem program, lecz nic nie oblicza prosiłbym o pomoc. Przepraszam z góry...
Jesli korzystasz rowniez z mplab to wlacz symulator: menu Debugger>>Select Tool>> MPLAB SIM W tym samym menu wejdz w opcje debuggera i ustaw z jaka czestotliwoscia pracuje procesor. Znowu to samo menu i wybierz StopWatch, nastepnie 2 breakepointy przed i po wywolaniu DelayUs(xx); na pierwszym zerujesz StopWatch a na drugim odczytujesz ile czasu zajmuje...
Głównie chodziło mi o sposób wysyłania poleceń 1 wire: Disable Int0 'wyłączenie przeszkadzającego przerwania 1wreset 1wwrite &HCC 1wwrite &H44 Capture = 1 Enable Int0 'załączenie przerwania po wszystkim Jeśli nie wiesz, które przerwanie może powodować u Ciebie problemy z 1 wire to możesz wyłączyć globalną obsługę przerwań. Czas po rozkazie odczytu temperatury...
Dokladnie tak jak piszesz. 100% clean czy jak tam wolisz. Masz ochote, to sobie potestuj. Jednak bedziesz musial zbudowac prototypowe urzadzenie. Symulator typu Keil uVision2 pracuje prawidlowo. Nie bede zamieszczal schematu, gdyz na razie jest on w mojej glowie. Ale jak zobaczysz program, to mozesz sobie interesujace linie dobudowac. T0 pracuje z czestotliwoscia...
Witam, Mam problem z którym już chwilę się borykam. Do STMa mam podłączony czujnik BAR180 z którym już się komunikuje po I2C. Dodatkowo skonfigurowałem ADC w trybie pomiaru jednokrotnego wyzwalanego przez Timer1 co 500µs. Dane z ADC chcę przerzucić do bufora przez DMA. Utworzyłem bufor jako tablicę o 256 pozycjach, ponieważ tyle chciałbym pomiarów....
gmp wrote: Procek obsluguje poprawnie 4xmnijesze czestotliwosci od zegara. Dziwne, ale z dokumentacji wynika coś zupełnie innego. Mikrokontroler poprawnie rozpoznaje zmianę stanu (przy reakcji na zbocze) o ile stan ten trwa dłużej niż jeden cykl zegarowy. Przy czasach krótszych może wykryć albo nie. Pan Arkadiusz Krysiak w swojej książce o AT90S2313...
Dawno Bascoma nie używałem ale to będzie coś takiego: On int0 czas 'przerwanie zewnetrze (wejście impulsów) do czestotliwosc=1/czas 'obliczenie czestotliwosci z czasu pomiedzy impulasmi loop czas: stop timer0 'zatrzymaj timer czas=timer0 'odczyt z timera timer0=0 'wyzerowanie timera start timer0 'ponowne uruchomienie timera return Oczywiście...
No tak........ Rozumiem ze chcesz mierzyc element C wpiety do U1. Jak w temacie to miernik konduktancji nie impedancji. w zlacze BNC bedzie wpieta sonda platynowa do pomiaru konduktancji cieczy pojemnosci tej sondy nie uwzgledniam. Odrazu powiem ze to nie wypali. Lepszy by byl techniczny pomiar impedancji. Tz. Generator przed opampem wpiety na stala...
Khmmm, po pierwsze to niech kolega docelowo zrobi obsluge odbioru na przerwaniu, ale narazie to nie ma znaczenia. Po drugie :> zalezy z jaka czestotliwoscia wysylasz znaki. Bo jesli z komputera kazesz mu wyslac od razu caly ciag, a w programie kazesz mu po kazdym odebranym znaku odczekac 200+200ms to kazdy znak ktory przyjdzie w tym czasie zostanie...
Witam serdecznie. Jak poradzić sobie z SysTickiem i przerwaniem, ponieważ po kompilacji środowisko zwraca taki błąd: [syntax=bash]D:\workspaceAtolic\Cortexy\... multiple definition of `SysTick_Handler' src\main.o:D:\workspaceAtolic\Cortexy\De... first defined here [/syntax] [syntax=c] #include "stm32f10x.h"...
Witam Probuje zmienic satan pinu z okresem 1Mhz. Niestety maksymalnie co uda mi sie wyciagnac to 526kHz przy preskaler=1 okres=1. Jak moge szybciej przemiatac pinem? zegar rozbujany do 72Mhz , pin ustawiony na 50MHz. reszta ustawien : [syntax=c] TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //Konfiguracja licznika TIM 1 //Ustawienia taktowania i trybu...
Na wejsciu INT0 podlaczony jest kontaktron z masa z wiatromierza, jak dopisac w programie zeby procek zliczal impulsy i przeliczyl na predkosc wiatru.Do procesora na porty P1.6 i P1.7 jest tez podlaczony czujnik temperatury na DS1621, zeby mozna bylo obliczyc teperature odczuwalna z tych dwoch parametrow i gdzie to obliczyc ? wszystko jest wyswietlane...
UART, 2xAtmega8 jak to zdzielac ?? Witam serdecznie i prosze o pomoc Pracuje nad moja praca inżynierska tj robotem czteronoznym kroczącym. Posiadam zakupiony serwokontroler SK18 schemat poniżej http://obrazki.elektroda.net/31_11995688... teraz na schemacie widac zlacze serial i ono łaczy sie z RxD i masą ( nie ma polaczenia z Txd ) Chcialbym...
fox525 przepraszam bardzo, ale zle przeczytalem. Bylem swiecie przekonany ze nacisniecie ma rozpoczac zliczanie od nowa. Ups. Wielka pmylka. W takim razie w miejscu przerwania powinno byc tylko: P3_2_int: Incr Ilosc_sek Return Co do Load timer to mi sie wydaje ze ma byc 250. Czestotliwosc 12000000Hz dzielona jest sprzetowo na 12 co daje wynik 1000000Hz....
W mim projekcie używałem przerwań IRQ z timera0 i wszystko ładnie działało. Jako, że tych przerwań jest naprawdę sporo, procesor traci dużo czasu na wywołanie przerwania, dlatego postanowiłem zrobić przerwania FIQ. Moim przewodnikiem jest książka luciana bryndza. przerwanie wygląda tak: void FiqTimerHandler(void) __attribute__ ((interrupt("FIQ"&...
Bardzo bym sie zdziwil gdyby ten program w jego oryginalnej postaci lub nawet z pozniejszymi poprawkami mogl funkcjoniwac! Po pierwsze: Jest on nie pelny, nie tylko brak jak juz ktoz zauwazyl, deklaracji rodzaju, typu uC i jego cyklu pracy (czestotliwosci). Pomimo faktu ze nie ma w programie pomiarow czasu to ta informacja nie moze byc pominieta. W...
To nie moze byc to. Dane chcialem odbierac z predkoscia 19,2kbps, czestotliwosc procesora to 8MHz co daje mozliwosc wykonania 416 cykli na bit zeby nie bylo opoznien. Moje funkcje potrzebuja 40-80 operacji na bit wiec bedzie sie wyrabial i jeszcze mu zostanie mocy przerobowych. Cala operacja odbioru 20B po SPI trwa 1,5ms a transmisji RF 8ms. Co wiecej,...
Witam, Probuje potestować przerwania IRQ dla TImera. Podbralem sobie przyklady Bryndzy i po malych przerobkach nie za bardzo o dziala. Po samych ustawianiach Timera wchodzac do petli while flaga T0IR jest ustawiana, czyli funkcjonalnie jako tak śmiaga. Ale niestety nie działa jeśli probuje czy zostalo to zhandlowane jako IRQ ( iniclajlizacja parametrow...
Witam, mam problem z ustawieniem dłuższych przerwań ...np co 1 albo 2 sec. Gdy wybieram licznik pierwszy (16bitów, pojemność 65535) to jesli zegar zewnetrzny ma 12MHz to bede miał przerwania mniej wiecej co 65mS (ustwiająć rejestry TH0 i TL0 na wartosci zerowe) i chyba nic wiecej tu nie wycisne Nie pomogło nawet zmniejszenie czestotliwosci zegara taktujacego...
20ms wzięło się z wzoru F=fuc/(2*preskaler*ICR1) znalezionego na tym forum, mam nadzieje że go dobrze używam.... Co do reszty, chciałbym Delay-ami sterować wypełnieniem, natomiast timer ma mi służyć jako źródło wysyłania okresowego co 20ms sygnału do serwa. Dodano po 1 Co do programu wygląda on narazie tak: [syntax=c]#define F_CPU 1000000 //częstotliowość...
Swój poprzedni post skasowałem bo szkoda dyskutować: 1. Prescaler 8 jest ok jako ze czestotliwosc ADC miesci sie w zakresie 50-200kHz, 2. Ja bym wynik (przeliczony) w tablicy zachowywał. 3. Jak zastosujesz metodę kolegi BlueDraco to bedziesz miala kilka korzysci - nagle zmiany na adc beda "odfiltrowane". Nie musisz wyniku dzielic przez np 8 bo wystarczy...
Tutaj masz kod programu, u mnie działa, dioda miga. #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/signal.h> // definicje SIGNAL, INTERRUPT #define F_CPU 8000000UL //definicja czestotliwosci w moim wypadku 8Mhz void delay(unsigned int mstime) {...
Witam Przerobilem program w nastepujacy sposob. Licznik T0 odmierza czas 1s a w tym samym czasie licznik T1 zlicza impulsy. W momencie odmierzenia 1s zostaje wyswietlona wartość licznika T1 na wyswietlaczu LCD. Nie wiem tylko czemu wartość nie jest wyświetlana. Moze Będziecie wiedzieli dlaczego nie działa bo mi wydaje się ze jest to dobrze. Prosze o...
Widzę że wywiązała się bardzo ciekawa debata. Skoro mój wątek przybrał takie wielotematyczne formy to może pomożecie mi z czymś innym. Po co zakładać nowy temat i śmiecić na forum. Otóż ogarniam sobie przerwania teraz i kombinuje. Napotkałem na mały opór i prosiłbym Was o wytłumaczenie mi dlaczego myślę źle. Mam kod który za pomocą przerwania teoretycznie...
wiem, chodzi mi oto, zeby jak najszybciej sygnał do aparatu!A ten czujnik to chodzi Ci o czujnik swiatło? I czy on o drazu przesle sygnał do aparatu!? I ile moze takie cudo kosztowac? jaki protokoł? - kolego, ja wogole sie nie znam na elektronice;( przykro mi nie wiem! Dodano po 4 chodzi mi o taki pilot http://obrazki.elektroda.net/1_125675802...
Witam wszystkich. Problem na pierwszy rzut oka wydaje sie błachy, ale spotkałem sie z bardzo dziwnym zachowaniem mikrokontrolera. Chodzi tu programowanie jego peryferii a mianowicie o timer 32bitowy. Co chciałem zrobić: Chciałem uruchomic timer z czestotliwoscia równą częstotliwości PCLK. Po odpowiednim skonfigurowaniu pętli PLL i odpowiednich rejestrów...
:arrow: sieciech, znajac czestotliwosc taktowania uC wiesz tez ile dokladnie trwa jeden cykl maszynowy. Tak? Wiesz wiec tez ile cykli maszynowych potrzeba na Twoje opoznienie (niech bedzie to n). Musisz tak sobie zaladowac TMR1 aby przepelnienie zachodzilo dokladnie co n cykli maszynowych. Nie zliczasz wiec od 0x0000 do 0xFFFF tylko od powiedzmy 0x120A...
Witam wszystkich, mam problem z przerwaniem od przepelnienia, timer1. Siedze nad ta prosta rzecza któryś dzień z kolei i nie moge sobię poradzić. Prosiłbym o sprawdzenie kodu. [syntax=jezyk_C] #include<avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000 // czestotliwosc zegara 1MHz #include<util/delay.h> int main() { DDRA =...
Witam Z jaką częstotliwością pobierasz dane ? Wysyłanie odbywa się sprzętowo i trwa bardzo krótko (choć zalezy to od ustawionej prędkości transmisji). Pomiar napięcia trwa około 260us więc bardzo krótko. dane pobierane sa co 5ms czyli czestotliwosc probkowania wynosi 200Hz. problem w tym ze ja chce chce w sposob ciagly zapisywac te dane a w odpowiedniej...
WItam. Jesli chcesz zliczac sygnaly z taka czestotliwoscia wykorzystaj do tego celu jeden z timerow w SAM7S! Sygnal podlaczasz pod nozke np TIOA, ustawiasz timer do zliczania zewnetrznych impulsow i po sprawie. Jesli chodzi o rodzaje przerwan, to w zasadzie powinno sie je przy konfiguracji ustawiac na "Level sensitive" . A to czy przerwanie jest external...
Mozna przez petle for, mozna zrobic funkcje w ktorej jest okreslona liczba nop`ow, jesli chcesz dokladnie odmierzac czas (dla 1w to konieczne) to musisz podejrzec kod w asemblerze i policzyc dokladnie cykle. Ze swojej strony moge dorzucic procedury opoznien dla 24MHz i procka gdzie czestotliwosc oscylatora nie jest dzielona przez 12 tylko przez 1. ///////////PROCEDURY...
Witam, mam pytanie, jak zaznacza się by odbiornik był w trybie master, a jak by w trybie Slave? Póki co myślę, że jak się wygeneruje Start, to automatycznie traktowany jest jako master, ale nie jest to dla mnie jasne. Tu jest fragment struktury inicjalizacyjnej, czy tutaj się ustawia Master/Slave? // Konfiguracja I2C1 I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;...
Próbowałem ustawiłem tam np wyświetlenie częstotliwości z funkcji przelicz i działa. Z moich obserwacji i testów wynika że przed wysłanie ramki częstotliwości układ przyjmuje wszystkie dane a po odebraniu częstotliwości i wyświetleniu jej na LCD już nie przyjmuje. Dodano po 1 Kolejne spostrzeżenie - po wykonaniu metody ustaw_timer() przerwanie USART_RXC_vect...
Znalazlem takie podlaczenie: http://obrazki.elektroda.net/2_115677810... Teraz powinno byc chyba ok, czyż nie? Teraz obwod chyba nie powinien byc widziany przez samochod, a do uC dotrze 5V gdy bedzie impuls na A lub B? Zastanawia mnie jeszcze pare spraw, a mianowicie jak poprawnie mierzyc spalanie z sygnalu wtrysku. Wyczytalem, ze stan niski odpowiada...
Witam. Mam takie o to zagadnienie, potrzebuje zrobić regulowany generator 0-15hz. Na wyjściu sygnał prostokątny, albo tylko same impulsy mogą być. Wszystko było by fajnie, ale muszę do tego użyć Timera i przerwania. A nie mam w ogóle pomysłu od czego zacząć i jak to zorganizować. Potrzebuję zrealizować coś takiego aby nie zależnie od głównej pętli...
Jak bys zobaczyl ile trwa wejscie do procedury obslugi przerwania i wyjscie to bys sie nie zdziwl. Z tego co pamietam to taka operacja w przypadku timera zajmuje okolo 100 cykli teraz podziel 1MHz na 100 i wyjdzie ci 10KHz. Wiec calkiem podobna wartosc do twojej ;) Takze wykorzystaj asma a dobijesz do 40KHz spokojnie. EDIT: Cos mnie sie pomieszalo albo...
Mam 16MHz OK, ja przeczytałem to co pisze w komentarzach. 16000000/128 = 125000 125000*13=1625000 (1/16Mhz)*162500 = 0.10075 sec ? Nie używasz jednostek i dlatego się gubisz: Czestotliwosc zegara ADC = 16000000Hz/128 = 125000Hz OK, ale poniżej jest błąd. Co tutaj obliczyłeś?: 125000*13=1625000 W drugim kroku miałeś obliczyć: Następnie oblicz ile czasu...
Mala korekta (REN=1) i juz wchodzi do przerwania ale co dziwne, tylko raz. Nastepnie aby znow wszedl, reset i jest ok. Aktualnie kod wyglada tak: #include <AT89X52.H> #include <stdio.h> #define FREQ 3686400UL //czestotliwosc Rezonatora //#define AdresR 0xD0; //#define AdresW 0xD1; sbit przek2=P2^0; sbit przek1=P2^1; sbit dioda3=P2^5; sbit...
Pytanie jak szybko kręci się koło. Jeżeli nawet będzie to 3000 obr/min, to jeden obrót zajmie 20 ms. Przerwanie od timera możesz uruchomić co 5 ms, a przy krótkim programie to nawet znacznie częściej. Czyli w najgorszym przypadku będziesz miał cztery odczyty licznika na jeden obrót koła. To będzie jeszcze mało? Z obrotami nie bedzie az takiego problemu...
Architektura nie ma tu wiele do gadania jezeli chodzi o machanie jedna nozka. Ciezko bedzie z ta najwyzsza czestotliwoscia. No i krok 100 Hz utrudnia tez sprawe. Jesli zastosowac kwarc 10 MHz to najprostszym sposobem byloby zastosowac petle skladajaca sie z instrukcji NOP. Obsluga menu koniecznie powiazana z przerwaniem zewnetrznym. Niesty w momencie...
A jaki jest czas pomiedzy tymi impulsami ktore podajesz na int0? prawdopodobnie zanim zdazysz wylaczyc przerwanie od int0 to jeszcze wylapie drugi impuls, wtedy konczy obsluge tego przerwania i zaczyna drugi raz to samo. Pierwszym poleceniem w podprogramie obslugi przerwania poinno byc wylaczenie int0,od chwili wystapienia przerwania do chwili wylaczenia...
// edit: fak, 3 minuty za pozno <: no zdecydowanie troche sie mylisz *2 musi byc w jakichs tam granicach - chyba 156MHz - 320MHz, czyli wybierasz sobie dzielnik 2 , dzieki czemu masz czestotliwosc wewnetrzna PLLa rowna 240MHz. co do czestotliwosci SPI, to zasadniczo musisz tez pamietac o tym, ze SSP jest na magistrali APB, ktorej zegar domyslnie...
może Timer2.initialize Nie można tak, nie ma klasy Timer2. Poza tym od razu radzę zrezygnować z biblioteki TimerOne przy używaniu więcej niż jednego timera. Zamiast tego samemu można napisać konfiguracje timerów i wektory ich przerwań. Oto kod demonstrujący jak to zrobić. Powinno migać diodą i niezależnie wysyłać napis. Twoim zadaniem jest teraz dobrać...
Witam. Tak jak w temacie podłączyłem Atmege8.Pod PB0 podpiąłem LED,a do PC0, PC1 i PC2 przyciski zwierające wejście do masy. Układ ma generować miganie diody w następujący sposób: -wciskam PC2 uruchamia się generowanie częstotliwości co widać na diodzie LED -za pomocą przycisków PC0 i PC1 zwiększam lub zmniejszam częstotliwość migania diody. Kod napisany...
Zmodyfikowałem listing ze strony http://mikrokontrolery.net/avr_c_07.htm. Przerobiłem go, żeby odliczał do 2 min do tyłu.Przy 1 minucie zaczyna pokazywać od 59 sek w dół.W debugerze AVR studio wszystko działa, a na Atmega8 nie.Pomóżcie co robię nie tak.Do tego LED mruga :( Dodam jeszcze ,że chodzi mi to na 1Mhz wewnętrznym atmegi. //#define F_CPU 1000000L...
Miganie wyświetlaczy - to zła organizacja kodu, a nie problem wydajności. Coś jest źle z tymi przerwaniami i przyspieszenie zegara tu nie pomoże, a tylko zamaskuje problem, ktry ponownie wypłynie przy kolejnej modyfikacji kodu.
Algorytm nie jest idealny, poprostu dla wartości feedback poniżej ustawionego napiecia dodaje 1 do wartości pwm (0-255) Z jaką częstotliwością to sie wykonuje? Robisz to w przerwaniach czy pętli głównego programu? Zmiana wartosci duty dzieje sie w petli loop. Czestotliwosc jest ustawiona na 31460Hz na pinie 1 przez zmiane timera0 w attiny. Dodano po...
Witam. Próbuje uruchomić program testowy, który polega na tym, że po wysłaniu na RS-a liczby 2 dioda zapala się na okres 1 sekundy i na ten sam czas również gaśnie przez okres 30 s. Wysyłanie na port szeregowy wykonuje za pomocą przerwania z USART. Odmierzanie sekund z przerwania Timera w trybie asynchronicznym(RTC). Program nie działa, bo mam problem...
A oto działający kod dla bufora 128 bajtów (można zrobic mniejszy, 64 dziala ale tylko przy Clockrate = 4 , Spsr.0 = 1 i samplu do 16kHz) zależny od prędkości z jaką odczytujemy dane po Spi z karty, im wolniej tym bufor musi byc wiekszy, zależy też od częstotliwości próbkowania pliku dźwiękowego, im szybsze tym bufor większy. Wzorowałem sie na przykładzie...
Obawiam sie, ze zaden typowy mikrokontroler nie da tu rady. Gdy tylko czestotliwosc sygnalu wyjsciowego wzrosnie powyzej kilkunastu (kilkudziesieciu kHz) nie bardzo widze mozliwosc zmian czestotliwosci z krokiem max 10Hz jak chcialby bindaz . Czy probowales zrobic dla czestotliwosci kilkuset kHz? (np gdy f=1MHz tzn okres T= 1µs) Prosze wtedy tylko...
Utworz sobie tabele z probkami. Bedzie ich 1024. Teraz w zaleznosci od wybranej czestotliwosci w przerwaniu czasowym wysylaj je do przetwornika. dla 10kHz probke bedziesz musial wysylac co niecale 100 ns. Ciezka proba dla procesora. Chyba odpada. Jezeli czestotliwosci nie musza byc zmieniane plynnie to nalezy rozwazyc wykorzystanie pamieci RAM oraz...
No to już mam jasnosc. Jezeli podzielimy 20hz- 30khz na podzakresy to w niskich czestotliwosciach mozna bedzie spokojnie osiągnąc skok 0.05 natomiast w wysokim zakresie bedzie musiala byc o wiel wieksz czyli skok około 100hz Program bedzie banalny jezlie chodzi o samo wyliczanie. wystarczy dzielic czest zegara przez wymaganą czestotliwosc i ten wspołczynnik...
Wszystko sprawdzone i działa. Dziękuję za pomoc. Przy okazji mam jeszcze jedno pytanie/problem. Mam ATmege644 z kwarcem 20MHz, napisałem program do obsługi przycisku, ale mam problem z preskalerem timera (tryb CTC). Przy 1Mhz nie byłoby problemu, wartość OCR2A = 195. Tak sobie przyjąłem dla przycisku. Ale przy 20Mhz już robi się problem, gdyż OCR2A...
priorytet przerwan przycisk przerwan wektory przerwan
skutera elektryczny zakładanie nowych tematów gasnące żarówki
Korg Pa500 - brak dźwięku, możliwe przyczyny i rozwiązania Jak sprawdzić MMS w Nokii 3510i - instrukcja krok po kroku