To właśnie zostało uruchomione - musi działać. Pisane pod WinAVR [syntax=c] #define SET(port, bit) port|=(1<<bit) #define RESET(port, bit) port&=~(1<<bit) #define NOT(port, bit) port^=(1<<bit) //Przerwanie wywolywane 100 razy na sekunde ISR(TIMER1_COMPA_vect)// == SIG_OUTPUT_COMPARE1A { NOT(PORTD,PD6); } int main (void) { SET(DDRD,PD6);...
Do obsługi Timera1 są 4 wektory i nie wiem, które aktywować, co wpisać w procedurze odwołującej się, czy w ogóle jest taka potrzebna. Czy wystarczy tylko uruchomić te przerwanie i sygnał będzie generowany automatycznie ? Tabelka jest prosta: TIMER1 CAPT Timer/Counter1 Capture Event Zdarzenie z przechwycenia licznika (zwykle przez zmianę na pinie...
Różnica będzie taka że w trybie 14 nie uzyskasz zerowego wypełnienia, a w trybie 15 nie uzyskasz maksymalnego wypełnienia. Jakiś czas temu sam się na to naciąłem The procedure for updating ICR1 differs from updating OCR1A when used for defining the TOP value. The ICR1 Register is not double buffered. This means that if ICR1 is changed to a low value...
Dlatego, że nie używasz AS masz problem z ustaleniem przyczyny. Wystarczy uruchomić symulator, by zobaczyć, że Twój program wpada w zabezpieczenie dodawane przez kompilator polegające na wyłączeniu przerwań globalnych i zapętleniu się w specjalnie dodanej pętli. Symulator na początku zabawy z mikrokontrolerami, to podstawowe i bezpłatne narzędzie -...
http://obrazki.elektroda.pl/7995180000_1... Witam! Jakiś czas temu rozpocząłem naukę pisania programów na mikrokontrolery AVR w języku C++. Przeczytałem wiele tutoriali, poradników, itp., aż w końcu doszedłem do pisania własnych, prostych programów. Po kilku takich „pseudoprogramach” zdecydowałem, że teraz czas napisać coś...
Witam ponownie, Poszedłem o krok dalej i moim planem jest podłączenie każdego z czterech wtryskiwaczy do osobnego pinu Arduino Uno/Nano z Atmega 328p. Pozwoliło mi to na skonstruowanie programu aby sterować każdym wtryskiwaczem z osobna z tą samą częstotliwością i wypełnieniem, ale sygnał do ich wysterowania jest przesunięty około 90° (problem z rozdzielczością...
Nie bardzo wiem, gdzie to umieścić, a sądzę że kilku osobom może się przydać. Niby to nic ambitnego, schematu nawet nie rysuję - wyjście przebiegu jest na pinie 8 Arduino (Duemilanove, UNO lub cokolwiek z ATMegą 8/88/168/328 taktowaną 16MHz) i wystarczy go podpiąć przez kondensator 47-100nF na wejście czujnika położenia wału korbowego (CKP/CPS) w sterowniku...
[syntax=c] #include <avr/io.h> //#include <EEPROM.h> #include <avr/eeprom.h> //#include <Wire.h> //#include <LiquidCrystal_I2C.h> //LiquidCrystal_I2C lcd(0x20, 16, 2); // Ustawienie adresu ukladu na 0x27 #include "HystFilter.h" HystFilter potA( 1024, 128, 3 ) ; // 10 bit ADC = 1024, 64 discrete output values required, margin...
Ok, działa. [syntax=asm]OCR1C = &HFF TCCR1 = &b01100110 ' bit7 - TCNT1 nie jest resetowany po osiągnięciu wartości z OCR1C ' bit6 - włączenie PWM z porównanie OCR1A, reset TCNT1 do $00 poosiągnięciu OCR1C ' bit5:4 - OC1x cleared on compare match. Set when TCNT1 = $00. ' bit3:0 - CLK/32 GTCCR = &b01100000 'bit6 - włączenie PWM z porównanie OCR1B, reset...
Tak na szybko ... Dlaczego odczytując otrzymujesz zero - może chodzi o problem odczytu, a nie zapisu: The OCR1x register access may seem complex, but this is not case. When the double buffering is enabled, the CPU has access to the OCR1x buffer register, and if double buffering is disabled the CPU will access the OCR1x directly. The content of the OCR1x...
Witajcie, Jako, że nie zgłębiałem tematu chciałem się upewnić. Uruchamiam ADC z automatycznym wyzwalaniem a jako źródło wyzwalacza ustawiam: Timer/Counter1 Compare Match B, bo tylko taki wyzwalacz mam dostępny dla Timera1 pracującego w trybie CTC (nie liczę wyzwalacza Overflow). No i właśnie, tryb CTC Timera1 uruchamiam wpisując między innymi do rejestru...
Cześć, dziękuję wszystkim za odpowiedzi. Generalnie problem rozwiązany, aczkolwiek muszę jeszcze zobaczyć do kodu asemblera bo wydaje mi się, że poprzedni kompilator coś nachrzanił i dlatego był taki cyrk, a w sumie ciekawy jestem. Korzystałem wcześniej z kompilatora dołączonego do CodeBlocks, jednak po tym co działo się w opisywanym wątku zmieniłem...
W końcu znalazłem przyczynę problemów - dzięki sugestii Andrzej__S zweryfikowałem jeszcze raz układ by się na 100% upewnić czy mam wszystko dobrze podłączone i wszystko było OK tylko ja zapomniałem o jednej oczywistej rzeczy - sterowanie oświetleniem odbywa się za pomocą TRIAKA :) Gdy załączałem triaka w obsłudze przerwania z timera to jego wyłączenie...
Generalnie wszystko co tam było, nie znam tej składni. #define PIN_PRI_A 9 // OCR1A - high-active primary drive #define PIN_PRI_B 10 // OCR1B - low-active primary drive #define PUSH_PULL true // false = OCR1A only, true = OCR1A + OCR1B #define TIMER1_PRESCALE 1 // clock prescaler value #define TCCR1B_CS20 0x01 // CS2:0 bits = prescaler selection...
po ustawieniu rejestrów podanych wyzej nic sie nie zmienia [syntax=c]void timer_init() { TCCR1A |= (1 << WGM12)|(1 << CS12)|(1<<COM1A0);//CTC ,preskaler256 TCNT1 = 0; //wartosc poczatkowa timera TIMSK |= (1<<OCIE1A); // przerwanie Compare Match A OCR1A = 31250;//porównanie wartosci (około 1s) }[/syntax]
Witam... Po pierwsze to jaki to uC...?.?.? Po nazwach rejestrów strzelałbym, że to któraś mega albo tiny ale dobrze by było gdybyś to napisał... Jak jest zadeklarowana "zmienna" którą wstawiasz do TCNT0...?.?.? Powinna być volatile... Czyli np tak volatile uint16_t pwm=10; Zobacz do dokumentacji bo może masz odwrotnie ustawione wyjście... Są dwie możliwości...
Spróbuj wpisać bezpośrednio do rejestru TCNT1 jeżeli ma to działać to trzeba oczywiście przeładować w każdym przerwaniu wartość w tym rejestrze. Zdecydowanie lepiej wykorzystać tryb CTC i rejestr compare OCR1C. Timer1 w tiny26 jest dość specyficzny polecam przejrzeć notę.
Timery (...) Wystarczy włączyć nieużywane. Właśnie tak powinno się to zrobić, ale biblioteka TimerOne blokuje taką możliwość. Dlaczego blokuje? W bibliotece zadeklarowane są wektory Dodano po 3 może Timer2.initialize Zamiast wpisywać w każdym przerwaniu do CNT (jeśli już to sie robi, to na początku obsługi przerwania), co może wprowadzać niedokładności,...
Heh, na początek widzę błąd banalny. Otóż OCR1A wyznacza TOP dla licznika, stąd dla OCR1B to też jest wartość szczytowa, str. 107 manuala: When changing the TOP value the program must ensure that the new TOP value is higher or equal to the value of all of the Compare Registers. If the TOP value is lower than any of the Compare Registers, a compare match...
Witam, ja mam pytanie odnośnie PWM na Timerze1: Phase and Frequency Correct (TOP OCR1A). Chciałem sobie sterować silniczkiem za pomocą właśnie tej opcji PWM na nóżce OC1A. Żeby nie wyszło, że jestem lese0r, nadmienię, że Fast PWM w trybie 10bitowym (tzn z określoną częstotliwościa) udało mi się uruchomić. Wówczas wypełnieniem PWM sterowałem za pomocą...
Poszukałem, poczytałem, wypociłem coś takiego: [syntax=c] ... ISR(TIMER1_COMPA_vect) { if(ssek == 124) { sek = sek + 1; ssek = 0; } ssek = ssek + 1; TCNT1 = 0; } int main(void) { OCR1A = 0x7C; // do 124 TCNT1 = 0x00; TCCR1A = 0x00; TCCR1B |= _BV(CS12); // preskaler 1024 TCCR1B |= _BV(CS10); // preskaler 1024 TCCR1B |= _BV(WGM12); // tryb ctc TIMSK |=...
Podaję więc te fragmenty gdzie używam timera1 i pinów PD0,PD1,PA6,PA7: #define MOTOR1_DDR DDRA #define MOTOR1_LEFT_DDR_PIN DDA6 #define MOTOR1_RIGHT_DDR_PIN DDA7 #define MOTOR2_DDR DDRD #define MOTOR2_LEFT_DDR_PIN DDD0 #define MOTOR2_RIGHT_DDR_PIN DDD1 /*PORT*/ #define MOTOR1_PORT PORTA #define MOTOR1_LEFT_PORT_PIN PA6 #define MOTOR1_RIGHT_PORT_PIN...
ok działa podobny program jest w książce. Ale jak teraz "przenieść" to zliczanie w inne miejsce żeby diody zaczeły sie zapalać tak jak che i to jeszcze z multipleksowaniem. A co do keawcu to miałem go podłączonego i w fusach też ustawiony był ok. Jak narazie dzieki za pomoc. Chwile sie pobawiłem i zastanawiałem sie czemu mi zle działa dioda podpięta...
Dzień dobry, Chciał bym zrobić sobie prosty oscyloskop tyle że z wykorzystaniem uC Atmega8. Czy mógł by mi ktoś przetłumaczyć poniższy kod na język Bascom, lub chociaż objaśnić jego działanie? Kompletnie nic z tego nie rozumiem... Za przetłumaczenie na język Bascom oferuję 500pkt
Mam następujący kod programu. Moje pytanie brzmi: Dlaczego program nigdy nie wchodzi do przerwania, a przynajmniej tak pokazuje VMLab, w którym to symuluję. Czy trzeba jeszcze coś w jakimś rejestrze ustawić. Program ma wchodzić do przerwania w momencie kiedy licznik zrówna się z OCR1A. #include<avr/io.h> #include<avr/interrupt.h> #include<avr/signal.h>...
Jeżeli chodzi o pierwszy warning w tej bibliotece dotyczy SIG_USART_TRANS w sekcji __AVR_ATmega169__ [syntax=c] /* * FreeModbus Libary: AVR Port * Copyright (C) 2006 Christian Walter <wolti(at)sil.at> * - Initial version + ATmega168 support * Modfications Copyright (C) 2006 Tran Minh Hoang: * - ATmega8, ATmega16, ATmega32 support * - RS485 support...
Czesc, No niestety nie hula... probowałem tego. Myśle ze atmega jest zryta jakos... Mimo tego, ze mam obsługe przerwań i tak, wiem ze to musi działać bo skopiowałem to z mojego poprzedniego projektu, to mi się restartuje atmega. Zwrać na płytce nie ma. [syntax=c] #include <avr/io.h> // Załaduj bibliotekę input/output #include <avr/interrupt.h>...
Witam! Napisalem program do obslugi ściemniacza na atmega16. Korzystamy z portu d. PD5 to pin wyjściowy sterujący triakiem. Impuls podany na PD3 lub PD4 zwieksza lub zmniejsza wartość zmiennej 'sel' regulując sterowaniem fazowym. PD2(INT0) tu pojawia sie przerwanie zboczem opadajacym od ukladu detekcji zera. Program ten prawie w ogole nie dziala. Napisalem...
Witam! Udało mi się zrobić prototypowy falownik trójfazowy na Arduino UNO Rev3 i wszystko pięknie działa poza jednym - wyraźnie słyszalny jest z silnika dźwięk sygnału PWM o częstotliwości niecałego 1kHz (piny 5, 6 i 9)... Znalazłem działający sposób na zmianę częstotliwości PWM na pinie 9 na forum Arduino: [url=http://forum.arduino.cc/index.php?t...
Wrzucam moją wersję programu do obsługi 4 serw. W ostatnim tygodniu zakupiłem swoje pierwsze dwa serwa, więc mogłem się pobawić problemem ich sterowania. Z powodu, że mam tylko dwa, jedynie dwa kanały są sterowane z przetworników ADC. Pozostałe są obsługiwane przez przerwania, ale nie ustawiane. Wartości dla serw wpisuje się w tablicy serwa_val[]. Doświadczalnie...
Witam. Kłopot mam następujacy... walczylem dziś z modelarskim servo. Znalazłem program "gotowca" na AVRFreaks. kod poniżej: #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> /**************** Globale variable **************/ static enum {av1,paa1} servo1=paa1; static enum {av2,paa2} servo2=av2; unsigned...
A wiec co już wypróbowałem: [syntax=c] #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // define some values used by the panel and buttons int lcd_key = 0; int adc_key_in = 0; int rpm = 800; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 #define ledPin 3 // read the...
Moim celem jest regulowanie prędkości obrotowej wiatraczków podłączonych do wyjść PB1 i PB2 za pomocą trybu PWM. Napisałem taki kod jednak coś nie gra. #include <avr\io.h> #include <avr\interrupt.h> #include <avr\signal.h> //ustawienie pinow na wyjscia wiatraczkow #define SET_FAN_OUTPUTDDRB|=(1<<PB1)|(1<... //wlaczenie...
Dokumentacja Atmela nie opisuje bardzo precyzyjnie działania bloku "Waveform generator". Sugerując się jednak fragmentem: setting the COMnx1:0 = 0 tells the Waveform Generator that no action on the OCnx Register is to be performed on the next compare match można przypuszczać, że jeśli ustawisz bity COMnx1:0 na zero w momencie, gdy rejestr OCnx jest...
Oczywiście, że tak nie mogłoby działać. Fakt, że dobrze myślałem, ale za szybko pisałem i mogłem wprowadzić Cię w błąd, przepraszam. Miałem na myśli coś takiego (bardziej pseudokod): #define TIMER_LEN2048 //albo 4096 #define SHIFT_REG_BIT0 #define TIMER_PRESCALER ... uint8_t servo_id; uint8_t pulse_low; uint16_t next_pulse; uin16_t servo[8];...
ZbeeGin, ale przepełnienie nie nastąpi, podobnie jak Compare nie (chyba, ze będzie wcześniej niż ctc)... Wystąpi, wystąpi. Gdyby rejestr porównania nie działał w tym trybie to licznik by się sam nie skasował w trybie CTC, bo niby skąd miałby wiedzieć kiedy ma to zrobić... :) An interrupt can be generated at each time the counter value reaches the TOP...
Jeśli jeszcze aktualne :) W ten sposób to obliczasz częstotliwość sygnału, a nie wypełnienie. Powinno być raczej: ts zawiera (bez konieczności przeliczania) czas trwania impulsu w mikrosekundach.
Witam. Jestem emerytem (64l.) i zaczynam dopiero przygodę z Arduino. Znalazłem ciekawy projekt miernika kondensatorów (w dziale DIY zagranica) i chciałem go wykonać. Jednak przy wgrywaniu programu wyskakuje błąd kompilacji. Czy może z kodem jest co nie tak? Proszę o pomoc. Pozdrawiam. JN W załączeniu podaję kod: [syntax=c] #include #include #include...
Witam wszystkich bardzo serdecznie. Mam problem z obsługą timera, nie wiem czy dobrze mam napisany kod, bo działa nie tak jakbym chciał. Mianowicie chciałbym generować przerwanie co 100ms i wykonywać pomiary na dwóch kanałach ADC i wyświetlać wyniki na ekranie terminala w PC.. Na początku udało mi się obsłużyć timer0 i wszystko działało prawidłowo,...
ale one mówią na jaki mikrokontoler skompilowano program. doprawdy? Kolega jak zwykle "ciekawe" rzeczy pisze https://obrazki.elektroda.pl/2928104400_... Ciekawe skąd microchip wiedział jak będziesz kompilować i wgrać to do uC w fabryce Sprawdzałeśs co zwróci np to ? [syntax=c]sprintf_P( txt, PSTR( "AVR %02%02X%02X" ), SIGNATURE_0,...
PWM skonfigurowałem w oparciu datasheet Atmegi32 oraz o kalkulator (http://www.et06.dk/atmega_timers/), który mi wyliczył takie wartości : http://obrazki.elektroda.pl/1205671500_1... PWM zostało więc ustawione następująco : Deklaracja buforów Przerwanie Funckja do zmiany flag buforow Czytanie danych Liczba próbek wprowadzona na stałe...
Witam Serdecznie, wykonałem schemat oto taki : http://obrazki.elektroda.pl/8280478200_1... Jest to timer na mikrokontrolerze Attiny 2313 ale problem tkwi w enkoderze. Mianowicie cały czas nie chce działać a ja szukam przyczyny juz trzeci dzień. Przepisałem kod z ksiązki Tomasza francuza i szukałem na elektrodzie różnych podobnych artykułów...
załączam program, ale to nie jest problem napewno tego.: spark2_nowy.h ioinit.h enkoder.h spi.c [syntax=c] static inline void SPI_SET_SS() { PORTB|=(1<<PB2); } static inline void SPI_RESET_SS() { PORTB&=~(1<<PB2);// SS -> PB2 } void SPI_master_init() { SPI_SET_SS(); SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPI2X);// (SPE) SPI Enable, (MSTR)Master...
Chciałbym jednak użyć CTC, ale kompletnie nie wiem jak się za to zabrać w Bascomie. Nie znalazłem na forum żadnych przykładów. Jak by ktoś poczęstował przykładem kodu dla z CTC w Bascom to byłbym niezmiernie wdzięczny :) Jakieś kilka dni temu, nie dłużej jednak niż tydzień, ‘gaskoin’ podal dokładną procedurę konfiguracji CTC. Jeżeli przeoczyłeś...
dobra, obiecany gotowiec i przy okazji manual pt "jak korzystać z manuala". W naszej przeglądarce wpisujemy adres www.google.pl Wpisujemy tam Atmega8, po załadowaniu się strony z rezultatami klikamy w link posiadający w tytule "datasheet" i sprawdzamy czy jest on z atmela. Po pomyślnym otwarciu się datasheetu z indeksu po lewej stronie wybieramy 16-bit...
Witam, niestety ale chyba coś jest nie tak? Na wstępie należałoby wyjaśnić że nie ma czegoś takiego jak "automatyczne przeładowanie timera" (reload/load timer1 powiedzmy). Termin ten jest związany z procedurą konfiguracji timerów występującą tylko w trybie "Normal", gdzie każdorazowo początkowa wartość timera musi być wpisana przez processor. Taka...
A change of the COM1x1:0 bits state will have effect at the first compare match after the bits are written. For non-PWM modes, the action can be forced to have immediate effect by using the FOC1x strobe bits. Być może w tym jest problem. OC1A jest prawdopodobnie inicjowane z wartością 0 do momentu wystąpienia pierwszego "compare match". W trybach "set...
Hmm, czy ATmega32 na pewno ma timer3? Rzecz w tym, że mam już gotowy układ, w którym są wykorzystane nóżki procka OCR1A i OCR1B (outputy timera1) - gdybym teraz do PWM wykorzystał inny timer, musiałbym wprowadzać zmiany w układzie, czego chciałbym uniknąć (a do tego timer2 też mam zajęty, a silniki są dwa). Mówisz, że logiczne jest, że praca timera...
Z dokumentacji: "In CTC mode the counter is cleared to zero when the counter value (TCNT1) matches ... the ICR1", a więc nie wtedy, gdy zajdzie zdarzenie ICP tylko później i za każdym razem nie wiadomo dokładnie kiedy. Poza tym: "ICR1 define the top value for the counter, hence also its resolution..."However, changing the TOP to a value close to BOTTOM...
Zumek -- dzięki za wskazówki ale niestety w moim procesorze nawet po ustawieniu Timer1 na 65492 max. częstotliwość jaką udaje mi się osiągnąć to ~16KhZ. Może tak: (Nadal w Bascomie , choć nie całkiem w Basicu) $crystal = 4000000 Config Portb = Output Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle On Compare1a Introc1a Nosave Timer1 = 0 Compare1a...
compare timer0 licznik tcnt1 capture compare
zelmer wymiana szczotka uprawnienia pytania odpowiedzi rezystancja czujnik pralka whirlpool
Opel Astra Bertone - Niedziałająca lewa tylna lampa stopu i pozycyjna Opel Astra 1.6d 2015 - Utrata mocy po przyspieszeniu