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ść...
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;...
Zatem policz sobie oba czasy, na przykład w µs. Tryb, który użyłeś jest zupełnie sensowny, ma auto reload. Wydaje się, że dla TH0 = 0 maksimum to 256 taktów. Znajdź jakiś wspólny podzielnik dla obu wyliczonych czasów, tak aby dla dłuższego TH0 było mniejsze od 256, wiadomo, że dla krótszego będzie mniejsze. Ten podzielnik (na przykład w µs)...
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
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...
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?
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...
http://obrazki.elektroda.pl/7951758100_1... Przedstawiam moją prostą stację pogodową opartą na czujniku BME280 i module radiowym NRF24L01+ wysyłającym dane do RPi. Wybór czujnika Chciałem uzyskać pomiar temperatury, jak i ciśnienia i wilgotności. Często stosowane w takich konstrukcjach są czujniki wilgotności DHT11 czy ciśnienia BMP085,...
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...
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
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).
To pozostaje sprawdzić kod zawierający wszystko: [syntax=vbnet]$regfile = "m8535.dat" $crystal = 8000000 Config Clock = Soft , Gosub = Sectic Config Sda = Portd.1 Config Scl = Portd.0 Config Timer1 = Timer , Prescale = 64 ' 16-bitowy; służy do obliczenia długości impulsu sygnału DCF (1 tick timera, to 8us) Config Timer0 = Timer , Prescale = 64 ' 8-bitowy;...
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...
Przedstaw proszę obliczenia czasowe vs preskalery, czyli jak policzyłeś takie, a nie inne ustawienia timerów i algorytmu programu.
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ą...
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...
No właśnie tak to powinno działać ( u mnie to działa poprawnie w przypadku RC5 i klawiatury na PCF8574A ) Raczej nie sądzę, że to sposób zapisu odebranych danych ( jeszcze nie przerobiłem na odbiór w pętli ) do zmiennych powoduje taki problem. [syntax=basic4gl] '****************************** $regfile = "m644pdef.dat" $crystal = 16000000 $baud = 9600...
1) Dokładnie tak chciałem zrobić, czyli przerwaniem INT0 wykrycie zbocza narastającego i uruchomienie TIMER0 do obliczenia „czas” i od razu z automatu stany niskiego „czas” x 7. Czyli 4 bity poskładane w bajt synchronizacji i tym otworzyć „bramę” do odczytu pozostałych które są tworzone w ten sam sposób. Tylko za...
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?...
Dzisiaj troszkę posiedziałem nad tymi stosami, zapoznałem się nieco z tym opracowaniem. Próbowałem również rozgryźć tabelkę "SRAM" w symulatorze bascom. Z opracowania i zachowania symulatora wydedukowałem że obszar w sram na $hwstack jest na najwyższych dostępnych adresach pamięci sram i zwiększa się on do dołu(niższych adresów), więc na początku metodą...
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...
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...
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...
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 '****************************...
Pojedynczy Bit nie może być przekazywany do funkcji. Ogólnie tez działanie na Bitach powoduje małą oszczędność w zmiennych SRAM za to wymaga przyrostu kodu bo pojedynczy bit trzeba wyłuskać z całego bajtu. Przerabiałem kiedyś czyjś program na Attiny2313 i zamiana tych zapisów w całym kodzie : [syntax=vbnet]Jakis_bit = Not Jakis_bit[/syntax] na coś takiego...
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...
Witam ponownie Zrobiłem to przez Timer0. Jednak problem z aktualizacją wyświetlania dalej występuje. Jeszcze drugi problem to start, przez okres zdefiniowany zmienną Licznik ( teraz równą 300 ) nic się nie wyświetla - dopiero po czasie = 300. Próbowałem również z Enable/Disable Interrupts na czas pomiaru, ale nie było żadnego efektu. Mam takie pytanie...
Dzięki za zainteresowanie tematem. Na czasie wyświetlanie nie zależy mi bardzo. Może być co 0.5 sek. Bardziej zależy mi na szybkim sterowaniu diodą po przekroczeniu konkretnej liczby obrotów. Obecnie timer0 8 bitowy mam zaprzęgnięty do odmierzania konkretnych czasów: co 4ms, co 100ms i co 1000ms. W 4ms mam zrobioną obsługę przycisku (choć trochę niepotrzebnie...
Andrzej__S -> tak jak pisał Dondu, brakuje jeszcze (i tobie i mi) resetowanie(ustawianie na 0) timera TCNT0/TCNT2 Ja zapomniałem w kodzie o resetowaniu TCNT2, a widzę ty o TCNT0 ;-) Chyba to będzie powodowało problem ze skakaniem wyświetlacza.. Jak wrócę z pracy do domu to przetestuję i dam znac. Jeszcze raz chciałbym gorąco podziękować koledze dodnu...
Witam Używam Attiny2313 do pomiaru dwóch temperatur z DS18B20. Wynik ( Integer ) przesyłam bez żadnej obróbki przez UART przewodem 40 cm do Atmega328. Atmega rozbija odebrane dane i jest obróbka Kod Attiny2313 $regfile = "attiny2313.dat" $crystal = 8000000 $baud = 4800 '********************* Konfiguracja magistrali 1-Wire Config 1wire = Portd.5...
Biblioteka ta zakłada skrajne położenia serva o czasie trwania impulsu 544 usec i drugie skrajne 2400 usec Niezgodne z jakąkolwiek normą dla serw. Jak wszystko dla Arduino zrobione na od...... dlatego pisałem aby samemu napisać obsługę serwa. W końcu to nie szczyt możliwości uC wygenerować timerem odpowiednie impulsy. Obsługa timera w trybie PWM jest...
Witam Mam zegarek/budzik z wyświetlaczem LED ( dwukolorowy ). Zegarek generalnie działa. Ale mam problem z sterowaniem jasnością. Wiadomo, że robi się to tak, że jasność zależy od częstotliwości odświeżania. Tutaj o jasności wyświetlania ma decydować zmienna jasnosc. . jasnosc : [syntax=vbnet] '************ Timer0 1000 = 1 sekunda, 10000 = 10 sekund,...
Witam Chcę zrobić sobie termostat :) ale jak na razie udało mi się tylko napisać termometr, a termostatu nie umiem ;( http://obrazki.elektroda.pl/2811600200_1... http://obrazki.elektroda.pl/9802204300_1... Chcę zrobić tak, że jak naciśnie się trzeci przycisk to wtedy wchodzi się w ustawienia temperatury i jak już się...
Witam panowie od razu podkreślę że jeszcze uczę się bascoma więc proszę nie krzyczeć i nie usuwać tego postu do kosza Siedzę już nad tym 3 dzień i efekt mojej pracy nie najgorszy ale mam parę pytań po pewnych rzeczy nie rozumiem i nie mogę rozwiązać. Więc tak założeniem był pomiar temperatury przez ds18b20 wyświetlenie je na LCD i 4 wyświetlaczach 7...
Witam Mam 7 układów DS18B20 i chciałem dokonywać ich odczytu w kolejności. W przerwaniu od Timer0 ustawiam co 4 sekundy flagę, która ma spowodować wywołanie programu odczytu. Wywołanie od przerwania Timer0 Wywołanie programu pomiaru Podprogram pomiaru Zdefiniowałem zmienne Case nie ma chyba sensu, bo w momencie wyboru z Case, dane jeszcze nie są obliczone.
Celem jest pomiar prędkosci obrotowej. Ta czesc twojej wypowiedzi rozumiem, ale dalej jest gorzej. Z listingu programu nie mozna doszukac sie jaka metode przyjmujesz w pomiarze RPM. Czy to ma byc zwyczajny pomiar czasu jednego obrotu i przliczenie na RPM (pomiar pomiedzy dwoma 'rising edges') z uzyciem jednego z timerow i jednego interruptu, czy tez...
Jest taki sobie termometr - moduł ma BT222 podłączany przez złącze http://obrazki.elektroda.pl/1320347600_1... Wgrywam do niego kod Bascom: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 4000000 '$baud = 9600 ' predkość transmisji $hwstack = 64 ' rozmiar stosu sprzętowego $swstack = 24 ' rozmiar stosu programowego $framesize = 48...
Witam, postanowiłem zbudować sobie miernik pojemności i indukcyjności. Znalazłem w internecie kilka rozwiązań, ale swój projekt chcę oprzeć następujące rozwiązanie: http://www.avrprojects.info/avr-projects... O ile znana jest mi metoda pomiaru i obliczenia indukcyjności i pojemności w obwodzie rezonansowym,...
Zaraz dokonam kilku kosmetycznych zmian i ponownie dodam enable timer2. Dam znać o efektach Dodano po 13 Do dyspozycji mamy nastepujący kod, który generalnie już działa (z małymi wadami) Dodano po 4 Czy obecnośc obliczeń w obsłudze przerwania może dawac taki efekt? Dodano po 14 Kolejna wersja kodu z obliczeniami w pętli głównej. Nie zmieniło to działania...
Witam Mam płytkę według schematu poniżej: http://obrazki.elektroda.pl/9010020400_1... dodałem tylko "ręcznie" podłączenie CLKOUT PCF8563 z INT1 i przełączyłem przycisk na inny port. Do tego podłączona jest płytka testowa z MAX7219 i wyświetlaczami 0,36 cala. Całość działa poprawnie z kodem jak poniżej: [syntax=basic4gl] $regfile = "m32def.dat"...
No i przedobrzyłem Dokonałem optymalizacji kodu, oszczędzając kilkanaście procent pamięci FLASH, ale... sygnał z pilota NEC ( takie małe płaskie na baterie pastylkową ) przestał być odbierany - brak jakiejkolwiek reakcji na naciśnięcie przycisku w pilocie. Poniżej kod: Print Command w przerwaniu Infrared , żeby sprawdzić, czy coś odbiera - reakcji brak,...
Witam Mam problem z multipleksowaniem wyświetlaczy LED. Mam gotową płytkę bazową http://obrazki.elektroda.pl/3311050900_1... oraz płytkę wyświetlaczy http://obrazki.elektroda.pl/5528051300_1... najpierw próbowałem ustalić, które segmenty mają się zapalać, aby poprawnie wyświetlać cyfrę. No i zaczyna się problem, bo chociaż...
Sztuczki to ja mogę zrobić ze sprzętem. A nie z programem w C. To składnia i zasady pisania ze mną robią sztuczki. Ale powoli zaczyna działać jak ja chcę. A nie jak kompilator chce. Dodano po 27 Powoli zaczyna działać; #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include "HD44780.h"...
Czy pobranie wartości 3 zmiennych z pamięci rtc to skomplikowane obliczenia?
Usunąłem Wait 1 przy konwersji z DS18B20, działa, bez problemu ( na trzech przewodach ), tylko wyniki są opóźnione - tzn. wyświetlany wynik nie jest z aktualnego pomiaru, tylko z poprzedniego. Dodałem jeszcze dwa czujniki DS18B20. Ich zapis razem z godziną i datą na karcie jest jak najbardziej w porządku, tylko wyświetlanie trochę szwankuje - tzn. czasem...
Witam Mam program budzika, który jako dodatkową atrakcję miał mieć możliwość mówienie czasu na żądanie i odtwarzanie oprócz buzzera utworu jako alarmu. Atmega steruje przez jedno SPI programowe układem MAX7219, a przez konwerter poziomów i drugie SPI programowe odtwarzaczem WTV020SD. O ile sam WVT020SD + PCF8563 ( wyjście CLK do INT1 ) działają dobrze,...
Witam Po raz pierwszy ( lepiej późno niż wcale ) wykorzystałem wyjście CLKOUT układu PCF8563. Oczywiście podciągnąłem przez 10K do VCC. Dzisiaj po pierwszym kilkugodzinnym braku prądu, rano zegar był wyzerowany. Podejrzewam, że to przez podciągnięcie CLKOUT do Vcc. Jeśli to jest to, to może wystarczy włożyć diodę np. Schottky pomiędzy wyjście CLKOUT,...
Po podłączeniu rezonatora: Spróbuj w obsłudze zatrzymać timer przed jego załadowaniem, następnie uruchomić go po załadowaniu. W symulatorze Basom jest możliwość określenia ile cykli zajmuje wykonanie rozkazów wykonujących dane linie programu. Warto skorzystać z tego narzędzia aby skorygować wartość ładowaną do licznika. Tzn sprawdzić ile cyklów ucieka...
Witam Mimo, że większość proponowanych tutaj rozwiązań podłączenia RFM12 do Atmegi wykorzystuje SPI programowe, ja podłączyłem tradycyjnie, przez SPI sprzętowe - mimo, że nie miałem problemów z wgrywaniem kodu do Atmegi spiętej z RFM12, to uruchomienie ich razem jest problematyczne ( każde osobno działa bez problemu ) [syntax=basic4gl] $include "Config_AVR-DOS.BAS"...
policzy timer0 bascom timer0 attiny44 timer0
bezpieczniki volvo lusterka brotje energy błędy kondensator unipolarny
interfejs diagbox tarcza strzelecka
Pompa myjąca Whirlpool ADG 9490 PC – objawy awarii, numery części, wymiana, diagnostyka Błąd P1339 w Citroen 1.2 THP - jak naprawić?