No to daj jeszcze głebiej tj. na początku procedury wysyłania bajtu, odbierania bajtu daj cli , a na koncu tych procedur sei :P I jak wyglądają te zakłocenia?
Czy pobranie wartości 3 zmiennych z pamięci rtc to skomplikowane obliczenia?
Probowałem timer0 i timer1 ale obliczenia się nie zgadzają z rzeczywistością
Zastanawiam się tylko czy możliwym jest uzyskać zakres 1Hz-1MHz, przy niewielkiej (<10%) dokładności obliczenia częstotliwości
Aby to zrobić zawsze musisz zapisać całą liczbę w systemie szesnastkowym ale nie rozumiem dlaczego uważasz ten sposób za zły. A poza tym to dlaczego 64615 to u Ciebie FC66h a nie FC67h? Nie pomyliłeś się czasem przy obliczeniach?
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;...
Jeszcze raz muszę napisać: Nadal w przerwaniu INT1 nie zatrzymujesz i nie zerujesz preskalera Timer2. Musisz być pewien, że timer0 i timer2 zawsze rozpoczynają dokładnie od początku. czyli by być pewnym poprawnego działania powinieneś w przerwaniu INT1: - zatrzymać oba timery, - wyzerować ich preskalery, - obliczyć co ma być obliczone, - wyzerować liczniki...
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...
Twoje obliczenia są (z grubsza) OK, jednak w mikrokontrolerze ATmega328 rejestr TCCR0A nie posiada bitów CS00 oraz CS02. Bity te znajdują się w rejestrze TCCR0B. Notabene, bitów WGM0n nie musisz zerować. W trakcie Power on Reset zostają one ustawione na wartość 0. Zerowanie może być konieczne tylko wtedy, kiedy wcześniej sam ustawisz je na wartość...
Zgadza się czas 8,2ms to czas samego wystąpienia przepełnienia timer0, czas orientacyjnie obliczyłem w przybliżeniu ale to nie istotne, na zasilaniu +4,5V nie mam kondensatorów co by one miały zmienić
1) To jest twoj problem Czas = T1 T2 = T1 * 16 If Czas = T2 Then I jak ty chcesz tym uzyskać odpowiedź że odebrany bit był dobry? To równanie przecież nigdy nie będzie spełnione. Już ci pisałem, jeśli wiesz że szpilka będzie miała długość "Czas=400" to zrób porównanie ale z przedziałem np 395<x<405 - pojawia się przerwanie RISING - wystartuj timer0...
Jeżeli chodzi o sumulatory Bascoma AVR i 8051 to nie nalęży im za bardzo wierzyć w podawane czasy, jężeli przerwanie miało być wywołane np. co 10ms, Bascom mówi 15 to należy go olać i wierzyć we własne obliczenia (o ile są poprawne).
W pdf jest napisane wszystko . Może napiszesz czego oczekujesz a co wychodzi . Pewnie w obliczeniach zapomniałeś o samym liczniku i wychodzi 256 razy mniej . Wielu początkujących robi taki błąd , ze zapomina o tym ze aby licznik się przepełnił musi policzyć tyle impulsów ile ma jego pojemność a w niektórych trybach ta wartość się jeszcze zmienia . Napisz...
W przykładzie zacytowanym powyżej obliczyłeś, że Timer0 powinien odliczyć 104 impulsy. Czy tak? Jaką wartość zatem powinien przyjąć TCNT0?
Ustawiam preskaler na 8 i mam częstotliwość prawie 300 Hz a potrzebuje 2 razy tyle jak to zrobić, bo przecież nie mogę ustawić preskalera na 4? Czyli przynajmniej jedno można stwierdzic, że taktujesz processor 1,2 MHz; a nie jak twierdziłeś i zakładałeś wczwśniej; 9600 000(!)_ Twoja konfiguracja timera0: Phase Correct PWM i otrzymany wynik częstotliwości...
Heniuś wszystko gra. Fusebity były dobrze ustawione. Problem tkwił w zapisie Load Timer0 = 250 , a ma być tak jak napisałeś Load Timer0 , 250. Wtedy wystarczy od obliczeń odjąć stałą wartość ( 3,97327) i wtedy zgadza się wartość wyliczona i zmierzona. Dokładność do 0,01ms - co mi w zupełności wystarcza. Dziękuję za pomoc. :angel: Kliknąłem pomógł.
Jakieś porady, wskazówki jak to obliczyć?
Nie tylko wywołanie ale procedura obsługi przerwania zajmuje troszkę czasu. Może zdarzyć się taki przypadek że procedura obsługi przerwania trwa zbyt długo. W tedy aktualne przerwanie blokuje obsługę samego siebie. Przykład Timer0 - liczysz czar 8us. Po obliczeniu 8us następuje procedura obsługi przerwania od timera0, która trwa około 15us. W trakcie...
Witaj. TIMER0 musi działać bardzo szybko .... W takim układzie dlaczego w funkcji przerwania ISR(TIMER0_COMPA_vect) karzesz mu wykonywać czasochłonne obliczenia na float-ach w dodatku w pętli? Jeżeli więc włączasz tak napisaną funkcje przerwania: Robiłem test w którym momencie się wiesza i wyszło, że przy TIMSK |= (1 << OCIE0) to efekt już znasz....
Nadal Timer0 w symulacji pokazuje 0. Jak obliczyć Js i prescale aby zmieniał co minutę przy kwarcu 4MHz? Może z Bascom'em jest coś nie tak? Pozdrawiam
AVR 2313 preskaler 1 | 8 | 64 | 256 | 1024, timer0 ma 8 bitow
Excray właśnie nad czymś takim myślałem. I nawet poczyniłem wstępne obliczenia po których wyszło mi że timer0 przy kwarcu 8MHz i prescaler ustawiony na 1024 przepełni się po 0,03276800s. Tylko jak wyliczyć ile muszę zliczyć tych przerwań aby wyszła 1s? Moje wyliczenia są kiepskie bo cały czas wychodzą ułamki. Pewnie trzeba ładować jakąś wartość początkową...
Witam, mam dość nietypowy problem z timerem. F_CPU=16000000 preskaler 1024 przerwanie OVF timer0 -8bit z moich obliczeń wynika, że (F_CPU/1024)/256 = ~61Hz czyli aby uC wykonywał jakąś czynność co ok 1s musi zajść 61 przerwań [syntax=c] w przerwaniu OVF licznik++; if (licznik ==61){ Wykonaj_czynność(); licznik=0; } [/syntax] tyle teorii. Mój problem...
Timer0 jest 8-bitowy czyli pomiesci liczbę z zakresu 0-255, Timer1 jest 16-bitowy czyli pomiesci liczbę z zakresu 0 - 65535. Zapewne autorowi chodziło o to aby zrobić to na timerze 8-bitowym, ale Twoje obliczenia tez są dobre tylko dla Licznika/Timera1
Witam drogich forumowiczów. Mam kłopot ze zrozumieniem kilku pojęć w dziedzinie mikrokontrolerów i chyba procesorów. Pojęć takich jak: 1 takty, cykle procesora Jak czytam na forum że jakaś instrukcja w programie zajmuje "ileś taktów" lub "ileś cykli" procesora. Czasem podawane jest jeszcze ile takie cykle trwają czasu. 2 Cykl maszynowy/rozkazowy 3 Taktowanie...
Co 3.88us wywołujesz przerwanie od przepełnienia timera. A przetwarzanie ADC w pętli while trwa 0.12ms- czyli 120us. Czyli podczas tej pętli pojawi się wielokrotnie przerwanie od timera0. A jeśli się pojawi podczas sprawdzania warunków tej pętli to moga się dziać dziwne rzeczy. Jedna instrukcja przy 8Mhz trwa 0.125us. Czyli obsługa przerwania powinna...
Dziękuję za odpowiedź, ale racji tego, że nie podałem wartości rezonatora to zrobiłeś to od końca i nadal nie wiem skąd wzięły się poszczególne liczby. Muszę to w końcu zrozumieć bo inaczej nic z tego a wszelkie książki wcale mi tego nie ułatwiają. Zacznijmy od początku te obliczenia. Będę zadawał pytania na poszczególnych etapach - ok? 1. Timer0 potrafi...
Ty to jesteś krejzolka Aldoro wiesz hahahahaha Podłączył byś wyjście transoptora do wejścia INTx albo ustawił Timer jako Counter a wyzwalanie jako, na przykład Falling, Co sekundę sprawdzał byś ile impulsów nabiło przez sekundę. I to wszystko. Bez obsługi przepelnienia Timera osmiobitowego zmieścił byś 255 impulsów na sekunde. Miłego dnia. Mogłeś wcześniej...
Przede wszystkim to zastanów się dlaczego do generowania nośnej usilnie chcesz pisać jakiś kod programu i obciążać tym program główny procesora, skoro można to zrobić CZYSTO sprzętowo za pomocą timera. Tylko nie Timera0 bo ATmega8 jest biedna w porównaniu do ATmegai88 gdyż timer0 nie posiada w niej trybu CTC. Tymczasem masz jeszcze timer2 i wystarczy...
Moim celem było aby mikrokontroler odliczał w górę co sekundę i wynik pokazywał na wyświetlaczu - pierwsze podejście do timer0. Początkowo sam obliczyłem wartości preskalera dla 8MHz, jednak na wyświetlaczu liczby pojawiały się ok 100 razy za szybko. Zastąpiłem swoje obliczenia tymi z tej strony: http://www.robotyka.net.pl/mikrokontrole...
Budowa obrotomierza jest prosta.Nie ważne jakie impulsy i tak musisz stosować tranzystory. Podejrzewam że jeśli instalacja 12V to impuls do cewki też 12V. A najprostszy obrotomierz to: Timer0 = 0 Timer1 = 0 Start Timer0 Start Timer1 Wait 1 Stop Timer0 Stop Timer1
Faktycznie dziwne ze wyszedl z petli pozniej niz to wynika z dzialan. Wyciagnij z nawiasow while() obliczenia. Przy zmienionym warunku != na <= symulator zwrocil: 3598 0 3619 0 3640 0 3661 End!
Lecz zrobiłem sobie testy: Że na wyświetlaczu wyświetlam wartość B, i jak się okazało, jeśli zamienię Config Timer0 = Timer , Prescale = 1 na Config Timer0 = Timer , Prescale = 8 to wartość B zmienia się szybciej! Dlaczego tak się dzieje? Może dlatego że jest jest prescale =1 to przerwanie jest wykonywane co 32us czyli w czasie tego waitams 20 trafia...
Program z założenia jest dosyć prosty: jak sygnał na wejściu zmieni się z niskiego na wysoki to startujesz Timer0, a zatrzymujesz po zmianie sygnału na niski. Porównujesz "zawartość" Timera0 z wartościami zadanymi (obliczonymi) i odpowiednio ustawiasz dwa wyjścia, po jednym na przekaźnik. Zerujesz Timer i czekasz na kolejny impuls. I to w sumie tyle....
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?...
Jeśli nachodziłyby na siebie przerwania, to nic byśmy nie mogli odczytać na wyświetlaczu, bo dane byłyby cały czas zapisywane do driver'ów i nie dochodziłoby do końca funkcji, gdzie dane są zatrzaskiwane. Według moich obliczeń, to tak wygląda: mamy kwarc (albo oscylator wewn.) 8MHz, to mamy 8 000 000 cykli zegarowych na sekundę. Przy preskalerze /64...
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
(at)emarcus: O ile się nie mylę, przy prescalerze 64 i cżestotliwości 8MHz timer0 będzie miał skok co 8us, czyli licznik bedzie przepełniał się co 2,048ms, więc do poprawnego odliczenia 1s w obsłudze timera należy załadowywać do niego Timer0 = 6, i dodać licznik, który 500 razy zliczy przepełnienia. A co do tych parametrów, to zawsze wstawiałem domyślne...
ok, więc może być na konkretnym przykładzie: Mam płytkę AND-TECH.PL EvB 4.3 (mikroprocesor to: ATMEGA 32, 16 PU). Więc jak mogę sobie skonfigurować Timer1 i Timer0 na tym mikroprocesorze przy rezonatorze 16Mh by odmierzał mi czas (zegarek godziny:minuty:sekundy). Jak mogę dobrać preskaler i jak wygląda tok obliczeń. Informacje te są mi potrzebne na...
Witam. Przy obliczeniach nie bierzesz chyba pod uwagę prescalera. Raczej pojemności Timera0. Kolego marcin-k . Aby policzyć ilość impulsów podaną na wejście T0, powinieneś wykonać następujące obliczenie: Czestotliwosc*256+timer0 . PS "Czestotliwosc", to oczywiście nazwa Twojej zmiennej :)
] Gdybym chciał jednak mierzyć załóżmy do 1kHz to wymaga aby zliczać przepełnienia? Dlatego napisałem..."Nie znaczy to jednak..." w złym obliczeniu 1 sek wartość wynosiła 61630, przy prawidłowym obliczeniu wynosi 34 286 uwzględniając czas 1sek, częstotliwość taktowania 8MHz i prescaler 256. Przecież czas (1 sec.) odmierzasz timerem0, który jest 8-bitowy...
Konfiguracja timera '51 jest inna : [syntax=basic4gl]Składnia: CONFIG TIMERx = COUNTER | TIMER , GATE = INTERNAL | EXTERNAL , MODE = 0 | 1 | 2 | 3 gdzie: x0 – TIMER0, 1 – TIMER1, Opis: TIMER0 i TIMER1 mogą pracować jako liczniki impulsów zewnętrznych gdy pierwszy parametr jest ustawiony jako COUNTER. Impulsy zliczane muszą być dostarczane...
Zliczajcie sobie, zliczajcie jak nie znacie wartości kwarcu.. obliczy sobie autor bo poddałem mu sposób z Timer1 o ile przeczytał:)
(...) żdy zasilany z osobnego źródła i odseparowany transoptorami PC817. Ze względu na ich szybkość oraz niską wartość prądów je sterujących 1mA zegar musi być obniżony do 10KHz ma. Chcę zrezygnować z polecenia: waitus 100 w zamian zrealizować to w obsłudze timer0 a w główną pętle przeznaczyć na inne cele. Rozumiem, że chcesz optymalizować swoje oprogramowanie...
Witam wszystkich ponownie. Piny INT0 i INT1 były zewnętrznie podciągnięte przez rezystor do VCC. Myślę że z tymi przerwaniami to był zły pomysł. Poprawiłem trochę starą wersje programu. Zastosowałem badanie czy przycisk jest puszczony, i dopiero wtedy uruchamia się program: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 16000000 Config Lcd = 16...
Skąd te obliczenia? Poniżej masz kalkulator do timerów. Policz i się nie dziw. Load timer = ... nie jest równy Timer = ... http://www.elektroda.pl/rtvforum/viewtop...
korzystam z pliku startup z przykładu zagnieżdżania przerwań ze strony Keila, jest identyczny jak ten tworzony automatycznie w nowym projekcie. Co konkretnie mam w nim zmienić bo nie wiem? Czy poza optymalnością obliczeń kod jest ok i co muszę zmienić, żeby uruchomić zagnieżdżenie tych przerwań?
Licząc, że jeden impuls trwa dokładnie 1 us i przy timerze zliczającym do 10 (startuje od 246 - Timer0) to po przekręceniu się timera uzyskujemy czas 10us. Przy długości impulsów w podanym zakresie timer powinien się przekręcić od 100 do 200 razy. Niestety program zlicza mi od 12 do 24 przekręceń tylko. Gdzie robię błąd ??? Nieprawidłowe obliczenia...
A po kiego tak komplikować sobie życie ? Przecież jak zmierzysz częstotliwość przebiegu i czas trwania jednego stanu, to czas trwania drugiego obliczysz. Proste jak p.. (drut).
asm("NOP") - wykonuje się w ciągu jednego taktu, ew. drugi tak na sprawdzenie warunku pętli i trzeci na zwiększenie wartości zmiennej pomocniczej, tak przypuszczam, na pewno nie więcej niż sześć taktów. A wychodzi 150. Gdzieś muszę mieć błąd w obliczeniach, albo µP pracuje z częstotliwością < 200khz. Dla porównania zrobiłem też drugi program,...
Podłączę się pod temat ponieważ mam podobny problem. W atmega8 mam prawie identyczny program do odmierzania 1s (przepisany z książki).Do uC mam dołączony kwarc 8MHz poprzez 2 x 30 pF, żadnych fusbitów nie ustawiałem, problem polega na tym, że 1s trwa około 10 sekund. Gdzie szukać problemu?? Jezeli nie zmieniales zadnych fuse bitow wiec pracujesz na...
Witam. Mam problem ze sterowaniem multipleksowym wyświetlaczy. Konkretnie chodzi mi o obliczenia. Jak obliczyć wartość jaką należy wpisać do Timera np. dla 6 wyświetlaczy. Niby mam działający przykład gdzie wartość dla 4 jest wpisana następująco: load timer0, 15375 Jeżeli zmniejsze liczbę (czyli w tym przypadku skróce czas po którym następuje przerwanie)...
Witam. Chciałem zrobić sobie obrotomierz z wyświetlaczem led na procku AVR. Przeszukując sieć nie natrafiłem na nic takiego, jedynie na elektrodzie jest coś podobnego, tylko na wyższym modelu procka i dodatkowo skomplikowany http://www.elektroda.pl/rtvforum/topic37... Korzystając z tego i mojej nikłej umiejętności skleciłem program. Podczas pracy...
No tak, nie sprecyzowalem. Na razie efekt miał być taki że switch (PD.0) miał włączać timer. Docelowo będą dwa switche, jeden włącza (PD.0) a drugi wyłącza (PD. 1) timer. Przeanalizuj więc ten przykład: [syntax=basic4gl] 'Timer0 measures time interval betwneen two falling edges: 'input#1 - PIND.0, -START Timer0 (S1) 'Input#2 - PIND.1 -STOP Timer0 (S2)...
aaaaa, czyli 65535 - obliczona wartość ? Załadowanie timera wartością 64000 powoduje lekkie świecenie. Czyli w końcu działa to dziadostwo... Jakaś wyższość Timer0 nad Timer1 ? Rozumiem, że detekcja zera, uruchomienie przerwania 1, odliczenie czasu i koniec. To chyba nie zżera za bardzo czasu procesora ?
Witam! Po miesiącach owocnych doświadczeń z Atmegą8 przyszedł nie lada problem. Otóż chcę na jednym z pinów ustawiać (w zależności od obliczeń) odpowiednią wartość napięcia w granicach 0 do 5V (dokładność 0,1V wystarczająca) ale mam już zajęty Timer1 do odliczania sekund więc pwm odpada bo na Timer0 nie pójdzie - jest jakaś inna możliwość? Pozdrawiam
Nie bardzo pomogłeś. Zakłócenia nie są priorytetem. Po co Ci schemat? Nie jest do niczego potrzebny, wszystko w swoim czasie w dziale DIY będzie (włącznie z kodem źródłowym). A cały urządzenie wraz z zasilaczem jest w pudełku tekturowym bo na razie nie mam pieniędzy na blach do obudowy bez sensu jest takie cos pokazywać... Wracając do tematu. Kawałek...
Witam Próbuję zapoznać się z językiem C. Mam gotową płytkę z ATTiny2313. Chciałem na początek pomęczyć diodę LED. Jako, że Delay nie jest dobrym rozwiązaniem próbuję z Timerem0 [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int main(void) { //######## konfiguracja timera ############## TCCR0B |= (1...
Dzięki działa. Wyłączyłem komputer i załączyłem teraz z powrotem i teraz działa. Płytkę jaką mam to ZL2AVR. Dodano po 3 Ale jeszcze mam pytanie, jak obliczyć do ilu mam inkrementować tą zmienną licz aby osiągnąć przerwanie co 2ms?
Polski help napisany przez Z.B. jest na stronie MCS Electronics. Napisany po polsku. Możesz to ściągnąć. MCS Electronics jest w Holandii, strona jest po angielsku a różne helpy, programy, opisane książki bywają w różnych językach. Help to jest help- nie do nauki programowania ale do pomocy przy wątpliwościach. A i tak warto cały przejrzeć. Kup sobie...
Dla osób które chcą wykonać ten zegar od razu podpowiem, że smużenie to normalka. Proszę spojrzeć na program bascom autora. Prescaler 1, taktowanie wewnętrzne procesora 8Mhz. I proszę sobie obliczyć częstotliwość multipleksowania wyświetlacza. Przecież to idzie praktycznie na maksa. Powinno się zwiększyć preskaler i wpisać wartość początkowa do timera....
W końcu udało mi się pojąć ten program i mniej więcej przerwania, ale nastało kolejne pytanie z mojej strony. W jaki sposób mogę obliczyć wartość timera, żeby mógł odliczyć np 0,5 sek lub 2 sek. Chodzi mi na razie o Timer0 8 bitów. W jaki sposób mogę też liczyć przepełnienia?
Witam Proszę o pomoc. Potrzebuję wykonać okład mierzący bardzo krótkie odcinki czasu. START podanie impulsu na któryś pin, STOP podanie drugiego impulsu na kolejną nóżkę. Procesor Atmega32 język Bascom. Jaki najmniejszy odcinek czasu mogę zmierzyć ? Jak wygląda procedura pomiaru czasu miedzy Start a Stop? Bardzo proszę o podanie fragmentu kodu. A czy...
mam taki kod '**************************** 'Konfiguracja '**************************** $regfile = "attiny2313.dat" $crystal = 8000000 Config Portb = &B11111111 : Portb = &B11111111 Config Portd = &B11111011 : Portd = &B11111111 Config Timer0 = Timer , Prescale = 256 Enable Timer0 : On Timer0 Przerwanie0 Enable Interrupts '****************************...
Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma...
Przeorganizowałem twój kod z pierwszego postu bo w tym z dzieleniem i modulo to może działać ślamazarnie. Jeśli ci pasuje oczywiście. Licznik obsługuj w przerwaniu timera. A zmieniaj tylko wartość zmiennej za pomocą przycisków. To musisz sobie dopisać. Gdyby obliczenia w przerwaniu były za długie, przenieść je do głównej pętli, ale tutaj zawsze będzie...
Czytałem i niestety nie wiem co wpisać w TCCR0A oraz TCCR0B czy możesz mi podać co wpisać aby ten Timer działał tak samo jak Timer1 ? Timer1 masz skonfigurowany w trybie "Phase Correct PWM" - stąd obliczysz częstotliwośc. Więc sonfiguruj go podobnie jak Timer1 z pewnymi różnicami: Config Timer0 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare...
Witam. Mam taki problem i nie bardzo wiem czemu tak sie dzieje. Prosty programik: ________________________________________... .......... Config Portd = &B11111111 Portd = &B00000111 Config Timer0 = Timer , Prescale = 64 On Timer0 Czas Enable Interrupts Enable Timer0 Start Timer0 Do Loop End Czas: Timer0 = 254 Toggle Portd.0 Return ________________________________________...
Oczywiście, że się da jeśli chodzi o sekundy . Teoretycznie ;). Wystarczy wziąć "nierówny" kwarc. Jego wartość powinna dzielić się odpowiednio przez dwa podniesione do odpowiedniej potęgi. Tak aby np. przerwanie przepełnienia od licznika było wywoływane dokładnie co 1 sekundę, albo inną jej część (zdatną do przeprowadzania obliczeń). Dla przykładu kwarc...
Witam! Postanowiłem przetestować tryb asynchroniczny timera0 z podłączonym kwarcem 32768 Hz na płytce #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include "HD44780.h" volatile int time=0; int main (void){ TCCR0|=(1<<WGM01)|(1&l...
Czyli w sposób w jaki myślałem się nie da. ;) Dziękuję, chętnie usłyszę inne propozycje jeśli ktoś ma. Nie potrzebuję dni/miesięcy itd. a jedynie dokładne odmierzanie doby. W następnym tygodniu kupię kwarc i dam znać jakie efekty. Czy wyprzedzanie/spóźnianie będzie zawsze o taką samą wartość? Jeśli tak to może da się zastosować jakąś korekte do moich...
Witam Mam taki problem. Pierwszys raz korzystam z takiego ukladu i klawiatury pracujacej na przerwaniu. Podejrzewam, że problem pochodzi od sposobu podłączenia klawiatury do mikrokontrolera tylko nie wiem dlaczego. Klawiaturę mam podłączoną tak do Atmegi 3 kolumny do Portc.4, 5, 6 oraz 4 wiersze do Portd.0, 1, 2, 3. W programie jest zegar na PCF z ustawianiem...
Witam, Dochodzę do szału ponieważ nie mogę odliczyć 1 sekundy w BASCOM-AVR $regfile = "attiny2313.dat" $crystal = 4000000 Config Portb = Output Config Portd = Output Config Timer0 = Timer , Prescale = 1 Dim Tim As Byte Dim Sek As Byte Dim Przerw0 As Word On Timer0 Odmierz Enable Interrupts Enable Timer0 Timer0 = 0 Do If Sek = 10 Then Sek =...
Witam, Tematów jakich przeczytałem to setki lecz nadal mam problem. Timer wygląda tak: $regfile = "m8def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 32 $framesize = 32 Config Timer0 = Timer , Prescale = 1 On Timer0 Ir 'On Int0 Pierwsza Nosave 'On Int1 Druga Nosave Enable Interrupts Enable Timer0 Load Timer0 , 53 Obsługa przerwania tak:...
Wrzuć program przez syntax bo tego się czytać nie da. Obliczenia przerwanie na Timerze0 co 1 sek: 1MHz / 64 (preskaler) = 15625 imp/sek Timer1 skonfigurowany do pracy normalne czyli przerwanie będzie po przepełnieniu się rejestru TCNT0, żeby rejestr ten przepełnił się potrzeba 255 impulsów czyli przy 1MHz i preskalerze 64 przepełnienie rejestru TCNT0...
Czyli trzeba by było zliczać czas zaczynając od impulsu rosnącego kończyć zliczać na spadającym obliczyć ile to jest i w zależności od tego sterować portem (np światłami do lądowania) [syntax=basic4gl] $regfile = "attiny2313.dat" $crystal = 1000000 Config Portb = Output Portb = &B11110111 Config Portd = &B11111000 Portd = &B1111111 Dim Sygnal...
Witam, ponownie piszę z tym samym pytaniem odnośnie polecenia generacji przebiegu PWM o okresie 14 ms i współczynniku wypełnienia 24% w trybie przerwania. Robione ponownie na 8051 w symulatorze EdSim. Problem udało się rozwiązać w poprzednim poście, z wykorzystaniem następującego programu: https://obrazki.elektroda.pl/7654367000_...
Pracuje nas sterowaniem małego serwomechanizmu: http://www.rctrax.pl/product/Serwo-HXT50... Programuje w Bascom AVR i do tego celu wykorzystuję jedynie Timer0. Nie mogę wykorzystać dodatkowego timera1 bo ten będzie służył do odliczania czasu. Instrukcji Serwos() także nie chce wykorzystywać...jakoś nie mam do niego zaufania...
Witam - mam nie lada problem Atmega8, kwarc 4 MHz i przekaźniczki podłączone do pinów Atmega zlicza sobie czasy poszczególnych trybów pracy - wylicza wskaźnik OEE oraz Wykorzystania (maszyny) i wyswietla za pomocą pwm na woltomierzach. Wszystko "gra i buczy" ale chciałbym aby pokazywała mi wskaźniki tylko z ostatniej godziny a nie jak teraz "na żywo"...
Bo są timery sprzętowe- i dobrze że są. A z nich można zrobić przerwania programowe- wystarczy obliczyć ile razy timer sprzętowy się odezwie. A wstawianie Waitms albo _delay w przerwaniu- to jak napisał mirekk36- masakra. Ale wstawianie tego w główną pętlę- też.
Witam. Mam problem z przerwaniami. Chcę przerwaniem INT0 uruchomić timer0 a przerwaniem INT1 go zatrzymać. Czy jest taka możliwość? 2 czujniki podpięte pod INT0/1, za pomocą których chcę zmierzyć czas przejazdu. Jeden czujnik ma wystartować zegar (bardzo dokładny przepełnienie timer0 co 1us) a drugi ma zatrzymać pomiar. Z góry dziękuję za pomoc i pozdrawiam....
Co do szybkości - Flaga jest ustawiana co 3,21 sekundy [syntax=basic4gl] Czas: Timer0 = Timer0 + 112 ' ( 100 = 1 sekunda ) Incr Licznik_ds If Licznik_ds = 321 Then ' 3,21 sekundy Flaga_ds = 1 Licznik_ds = 0 End If Return [/syntax] czyli pierwsza flaga to wywołanie DS18B20, później znowu 3,21 sekundy i flaga, wtedy konwersja i obliczenia. Zastanawiam...
OK, myślałem że mnie ktoś wyręczy , ale ... :( Dodaję komentarze: $regfile = "attiny2313.dat" $crystal = 4000000 Config Portd.5 = Output 'musi być ustawiony jako wyjście , by można go podłączyć do przerzutnika OC0B Ocr0b = &H37 'wartość obliczyć tak:$crystal/(36000*2) 'Powyższa wartość nie musi być taka jak wychodzi z wyliczenia...
Nastąpiły niewielkie postępy. Udało się uruchomić wewnętrzny timer, ale wynik bardzo odbiega od rzeczywistego. Najczęściej pokazuje wynik 0 lub jakąś liczbę jedno czy dwu cyfrową. Bardzo rzadko jest to liczba trzycyfrowa. Program teraz wygląda tak: 'Samochodowy obrotomierz 'Marcin Wiązania 'E-mail: mwiazani(at)poczta.fm $regfile = "attiny2313.dat"...
Paavo91 - Takie zabawki robi się na Pic200 lub ATtiny4, w Twoim przypadku w zupełności wystarczy ATtiny13. Gdzie w Twoim programie jest instrukcja zakończenia porównania END IF? .Pobaw się poniższym kodem. [syntax=basic4gl] $regfile = "ATTiny13.dat" $crystal = 9600000 $hwstack = 8 $swstack = 8 $framesize = 8 Config Portb = &B00001000 ' Ustawienia pinów...
Witam, zacząłem budowę ściemniacza do "halogenów" opartego na mikrokontrolerze, narazie wybór padł na Attiny15L bo taka była pod ręką. Docelowo Attiny2313 albo coś większego. Jestem na etapie testów i niestety nie wypadły one pomyślnie. Skonstruowałem taki układ: http://obrazki.elektroda.net/24_12234045... Wiem, że Attiny15L nie jest zbyt dobrym...
Witam, mam następujący problem. Chciałem przetestować timer0 w Atmega8-16PU, aby gasił i zapalał diodkę co jedną sekundę. Obliczyłem, że przy kwarcu 8MHz i ustawieniu preskalera na CK/8 program w C powinien wyglądać następująco: #include <avr/io.h> #include <avr/sfr_defs.h> int main(void) { DDRB = 255; PORTB = 0; TCCR0 = 2;...
Da się na wewnętrznym generatorze odliczyć godzinę... Ja jak chcę odliczyć skundę to ustawiam timer0 (16-bit) na tryb fast PWM włączam przerwanie od przepełnienia i ustawiam wartość TOP tak żeby przerwanie było co sekundę... Z dokładnością przy godzinie będzie pewnie kiepsko ale można zrobić kalibrację wewnętrznego generatora i sprawdzić...
Sorry, Wiesz ja to sie z tym bawie tylko i program pisze w bascomie metoda prob i bledow. Nie ma większego znaczenia w jakim środowisku programujesz (Basic albo C). Istotny jest koncept projektu i sposób rachunkowy, reszta to tylko inna forma zapisu programu. Wybrałeś za narzędzia: Timer1 i jeden z interruptów zewnętrznych. Zatem jest tez bez znaczenia...
te instrukcje zerują bit w rejestrze Jeśli masz na myśli zerowanie bitu ICF1 w TIFR, to jest to tylko Twoje pobożne życzenie.Te 3 instrukcej , wzerują wszystkie ustawione bity w TIFR , prócz tego o który Ci chodzi , czyli ICF1. Ot taki "kaprys" Atmela :D ... ale mam teraz pytanie (problem)?-brak weny twórczej to kilka wskazówek - chce mierzyć wypełnienie...
Witam wszystkich! mam zamiar zrealizować przetwornice http://www.elportal.pl/pdf/k04/37_05b.pd... na attiny13 tzn. końcówka mocy ma pozostać ale sterowanie na mikrokontrolerze. Według obliczeń wyszło, że generator na bramkach w tym układzie z kitu AVT ma ok 2,5kHz sprzężenie zwrotne nie wchodzi w grę. Napisałem taki kod w bascomie: [syntax=basic4gl]$regfile...
Czy ten kod nadał by się do zliczania impulsów z INT0, ewentualnie co trzeba by zmienić ? Nie. Po pierwsze: Nie możesz liczyć na dokładny pomiar czasu stosując Start/Stop Timer przy użyciu prescalera o wartości różnej od jeden. Wartość timera może zostać incrementowana już po jednym ticku zegara albo nawet po 100; 150; 193 itd. tickach zegara taktującego...
witam mam pytanie odnosnie tego miernika, ostatnio na allegro kupiłem za grosze at90s2313 i chciałem wykonac ten miernik ale jest to wersja która wyciąga tylko 4 Mhz a program napisany dla miernika jest obliczony na 10Mhz chciałem zrobic przeróbki w programie ale jest tam cos dziwnego poniewaz odcinek czasu jest wyliczny na podstawie zegara zewnetrznego...
TO BEDĘ ZGADYWAŁ:-) Wyłączyłes przerwanie od timer0 jak uzywasz timere 2? moze po wrzuceniu w atmege wykonują sie obydwa przerwana wiec bedzie efeakt jakby chodził zegar dwa razy szybciej. W asemblerze nie do pomyślenia taka sytuacja nie wiem jak w C ustawia kompilator warinki poczatkowe? moze musisz zadeklaraowc wszystko? wrzuc sobie na ekran LCD...
hm Zegar = 8MHz Preskaler = 64 Obliczenia: 1 / (8MHz / 64) $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Timer0 = Timer , Prescale = 64 '8MHz/64/250/500 = 1 sekunda Config 1wire = Portd.0 On Timer0 Przerwanie...
Witam, udało mi się coś wyskrobać i zrobiłem na razie sam generator częstotliwości, właściwie jakoś tam działa ale chyba napisałem to dookoła , może ktoś spróbował by to jakoś poprawić. Nie dodałem jeszcze generatora PWM, próbowałem ale nie wychodziło mi, chciałem taktować go z wejścia T1 ale nie udało mi się to, nie wiem jak go zmusic do tego żeby...
Wiedze na temat przerwań czerpałem z poradnika : http://std2.phys.uni.lodz.pl/mikroproces... kolega raz pisze ze load timer0 250 jest nie poprawny a potem pisze że poprawny wiec od czego jest zależne jaki czas jest po jednym przepełnieniu czy to ma 8ms lub 4ms jaki jest poprawny wzór na obliczenie jle ma być przepełnień...
Witam Chcę zrobić proste menu ale mam problem Napisałem taki program ale on nie działa i nie wiem co jest źle http://obrazki.elektroda.pl/8154646300_1... http://obrazki.elektroda.pl/1040274800_1... Chcę zrobić tak, że jak nacisnę przycisk P1 to wtedy ta strzałka > przejdzie na inne menu. np. Jest tak jak na zdjęciu 1...
ok, rozumiem powiedźmy, proste. Skoro już was mecze, to może pobawię się nieco programowaniem w C :cry: Czyli tak. Chce skonfigurować Timer0 i Timer1, w ten sposób, że Timer0 liczy i po osiągnięciu np. 200, na wyjściu uP zmieni się stan 0 > 1 lub 1 > 0. I teraz po dojściu sygnału do Timer1, zapisuje on ilość swoich zliczeń po wykryciu zbocza....
Dzięki za rady. Zrobię tak jak napisał albertb czyli funkcje skanowania i wyświetlania wyrzucę z przerwania timera0, będą się wykonywały w pętli głównej programu, a funkcje odpowiedzialne za odbiór i nadawanie danych uzależnię od timera (dla zwiększenia dokładności). Tylko jest jeszcze mały problem, mianowicie jest kilka funkcji (których w listingu...
policzy timer0 bascom timer0 attiny44 timer0
iskrownik ustawić tranzystor a1266 przewod ethernet
Luzy zaworowe Honda PCX 125 2022 - wartości i regulacja Jaki laser zapali zapałkę z 200 metrów?