Dodatkową niedogodnością jest to że Atmega2560 ma wspólny układ prescalera dla Timerów 0 1 3 4 5. a to nie wystarczy?: Timer/Counter 0, 1, 3, 4, and 5 share the same prescaler module, but the Timer/Counters can have different prescaler settings . Pytam bez analizy kodu. Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011...
Ze względu na to że wujek google mi nie pomaga zwracam się do was. Tylko na Ciebie się obraził? http://avr-mcu.dxp.pl/rc5+remote+control... http://www.gjlay.de/pub/c-code/rc5.html http://mikrocontroller.com/php/counter/c... http://homepage.hispeed.ch/peterfleury/a... Itd., itd...
Witam, Wyczytałem w nocie katalogowej procesorów ATMEGA, że posiadają "Real Time Counter with Separate Oscillator". W związku z tym czy owa możliwość uC może zastąpić zegar np. PCF8583 albo DS1307, stosując kwarc 32768 na wyjściu TOSC i będzie dość precyzyjne?
Witaj, Ja też walczę z SPI od pewnego czasu, ale używam SPI w Atmega8515 jako Slave. Jeśli dobrze zrozumiałem, to masz problem z USI w Attiny26. Z tego co wyczytałem w pdf'ie i z tego co pamiętam jak się bawiłem tym prockiem, to USI można skonfigurować jako normalny SPI. Musisz tylko odpowiednio ustawić bity rejestru USICR. Nie wiem po co liczysz impulsy...
Coś takiego znalazłem. Co prawda na Atiny ale można przerobić. [syntax=c]// // Talking to ultrasonic sensor HC-SR04 with an ATtiny84, and // sending distance data using serial communications. // // electronut.in // #include <avr/io.h> #include <string.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 8000000...
Po co podłączasz rezonator kwarcowy, skoro działasz na wewnętrznym RC? Proszę skojarzyć z Real Time Counter with Separate Oscillator
(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
Kod piszę "na sucho", więc lepiej sprawdź czy działa.[syntax=c] #include <avr/interrupts.h> void timer0_init(void){ TCCR0 = _BV(CS02); //Mode 0, normal operation, prescaler 64 TIMSK |= _BV(TOIE0); //Timer/Counter0 Overflow Interrupt Enable } volatile unsigned long millis=0; volatile unsigned int okresy_migania_ledow[4] = {100,200,300,400}; ISR(TIMER0_OVF_vect)...
To ten kod, w bibliotece nic nie zmieniałem #include <SPI.h> #include <max7456.h> #define MAX7456_TABLE_ASCII #include "max7456registers.h" Max7456 osd; byte tab[]={0xC8,0xC9}; void setup() { // put your setup code here, to run once; SPI.begin(); osd.init(6); //Max7456(6); osd.setDisplayOffsets(60,15); osd.setBlinkParams(_8fields, _BT_2BT);...
Masz poniżej zawartość dwóch plików, które trzeba podmienić: [syntax=c] #include <util\atomic.h> #include <util\delay.h> #include <avr\io.h> #include "1wire_basic.h" uint8_t Error; uint8_t PinMask; void OW_SendBit(bool bit) { ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { DDRB |= PinMask; _delay_us(3); if(bit) DDRB &= ~PinMask; _delay_us(60);...
nie no to jasne ... jak coś komuś nie wychodzi to na bank wina Bascoma ... tylko ze jak ma liczyć impulsy to ma być skonfigurowany jako licznik COUNTER a nie jako czasomierz TIMER czyli nie CONFIG TIMER0 = TIMER , PRESCALE= 1 | 8 | 64 | 256 | 1024 tylko CONFIG TIMER0 = COUNTER , EDGE= RISING | FALLING
Dzięki Wam ślicznie, dokładnie o to mi chodziło, czyli przy np counterze 100, przy funkcji analogWrite(pin, dutycycle) podaję dutycycle 0-99 czy 0-255, a atmega już się tam martwi jak to przeliczyć na mniejszą rozdzielczość? - jedno z pytań teoretycznych. Nie chcesz żeby to Ciebie pisać jak do laika ale się nie da :D Chciałeś użyć sprzętowego PWMa...
ciekawe jak go zaprogramujesz przy stałym potencjale zasilania na linii RESET ? rezystor musi być może był 100 k a nie 10k ? :)
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...
Problem nie koniecznie musi być związany z tą tablicą. Jak deklarujesz większą tablicę to część zmiennych przesuwana jest na dalsze pozycje i to po nich coś może mazać, może coś ze stosem się dzieje. Może opisz dokładniej na czym polegają te przeróżne rzeczy. Kolejna sprawa to przy tej operacji powinieneś zablokować przerwanie od uarta. rx_counter--;...
Usunąłem kod obsługujący drugi kanał, bo była jakaś interferencja pomiędzy kanałami w wyświetlaniu. Powinno działać w miarę dobrze (sprawdzane na symulatorze): [syntax=c]#include <Adafruit_NeoPixel.h> //#define DEBUG_TEST_LEDS #define nonLinearLogAudio //#define DEBUG_PRINT_ANALOGVALUES //#define DEBUG_NO_PEAK_SWITCH const int useSensorValues...
Witam Mój problem wygląda następująco: -układ na jakim pracuje to atmega 8 a srodowisko programowania Bascom Po zalaczeniu i skonfigurowaniu countera w sposob następujący Config Timer1 = Counter , Edge = Rising , Noise_cancel = 1 Enable Interrupts Enable Timer1 Podczas odczytu wartości countera licznik szaleje (sam nalicza jakies nie stałe wartości)...
Witam:) mam pytanie do forumowiczów w sprawie pomiaru częstotliwości, sprawa przedstawia się następująco: chciałbym zrealizować pomiar częstotliwości .............. wiem ze należy postąpić w poniższy sposób: 1. zatrzymanie zliczania impulsow z T0 2. zatrzymanie odmierzania czasu bramkowania T1 3. przepisanie zliczonych impulsów do rejestru głównego...
Jest jedna rzecz której nie do końca rozumiem. Jeżeli nie odblokuję globalnych przerwań w SREG, a odblokuję sobie OCIE0A: Timer/Counter0 Output Compare Match A Interrupt Enable w trybie CTC: Clear Timer on Compare Match (CTC) mode. to mogę sprawdzić czy nastąpiło porównanie w ten sposób: https://obrazki.elektroda.pl/6663605100_... The...
na żadnym - poczytaj datasheet Snow, Ty mało jeszcze wiesz. Jak ty za takie odpowiedzi zbierasz punkty to się nie dziwię twej wiedzy. Co bym sie tak rzucał jak kolega dobrze podpowiada: A jak chcesz wiedzieć jakie to są piny to proszę bardzo to jest przecież wyraźnie w Datasheecie napisane: TOSC1, TOSC2. Napisane jest też że należy tam podłączać tylko...
Witam mam prosty program. Timer zlicza naciśnięcia przycisku. Problem polega na tym że po jednokrotnym naciśnięciu wartość zwiększa się o jakąś ilość (nie zawsze o 1). Jak temu zaradzić? np. żeby zmiana stanu licznika była możliwa tylko co określony odcinek czasu. [syntax=basic4gl]Config Pinb.0 = Input Set Portb.0 Config Timer0 = Counter , Edge = Falling...
W takim razie nie twórz tablic (i nie używaj tablic stworzonych wcześniej, czyli statycznych) tylko licz sinusa na żywo. counter += period; if (counter >= 2_pi) counter = counter - 2_pi; TCF0.CCABUF = roundf(sinf(counter) * amplitude) + 2048; //Żeby zakres był od 2048 w obie strony Oczywiście to tylko przykład. Pasuje to jakoś...
Wpisując wartość 100 do ICR1 powodujesz, że licznik będzie zliczał do 100, po czym się wyzeruje. Jeżeli w rejestrze OCR1A masz wartość większą od 100 to warunek porównania nigdy nie zastąpi. Ustaw ICR1 np. na 255, OCR1A na 100 WGM13 i WGM12 na 1 oraz WGM11 i WGM10 na 0, czyli: TCCR1A = &B10000000 TCCR1B = &B00011011 ICR1 = 255 OCR1A = 100 Dla ścisłości...
zrób to mniej więcej tak: .INCLUDE "m8def.inc" .cseg ; początek segmentu pamięci programu .org 0 rjmp RESET ; wektor ZEROWY (po resecie) .org OVF0addr ; wektor przerwania od przepełnienia Timera0 rjmp Przerwanie_T0 ; i tu właśnie skok do obsługi tego przerwania RESET: LDI R16, HIGH( RAMEND) OUT SPH, R16 LDI R16, LOW( RAMEND) OUT SPL, R16 ; porządek...
16 bitowe timery w tym modelu mają trzy rejestry OCRxA/B/C i są dostępne trzy przerwania w trybie CTC nazywające się ISR(TIMER4_COMPA/B/C_vect){ Ale z noty katalogowej wynika że tryb CTC porównuje liczbę zliczeń z wartością zapisaną w OCRxA i tego nie da się zmienić więc jak wykorzystać pozostałe dwie funkcje wywołujące przerwanie (TIMER4_COMPB_vect...
Jeśli przerwanie jest tylko przy zmianie A, to traci się połowę rozdzielczości, za to algorytm jest prostszy:[syntax=c]A = read_A(); if (A != old_A) { B = read_B(); counter += (A==B) ? +1 : -1; old_A = A; } [/syntax] Do tego oczywiście old_A = read_A() na początku; i analogiczny kod dla drugiego enkodera.
"Od samego początku mam problem ze sterownikiem."...."A jeszcze jedno w kontrolerze jest włączony timer jako counter do zliczania impulsów ślimaka podajnika Przerywasz w programie procedurę wyświetlania na LCD przerwaniem od Timera.
Nie,ma liczyć litry tak jak dystrybutor . Dodano po 2 Nie wiem w jaki sposób dodawac litry do zmiennej po przekroczeniu okreslonej liczby impulsów z przepływomierza to co znalazłem to liczone wszystkie w czasie a tu chyba chodzi o przepełnienie licznika Czas tu nie ma znaczenia! Użyj dowolny timer w charakterze licznika (Counter), i tak jak sugerowano...
Witam Masz rację, Twój układ nie odwraca fazy, tak się kończą analizy rysunków zapamiętanych we wspólnym katalogu :). Do Twojego rysunku miałbym inne pytanie, w emiterze transoptora masz w szereg włączonego LEDa i rezystor... upraszczając, dla napięć poniżej zaświecenia diody emiter praktycznie wisi w powietrzu co daje nam zmniejszoną odporność na zakłócenia....
Rzutować operacje na unsigned long! counter_temp += ((unsigned long)(*(Table_temp + 1) - '0')) * multiTable32[1];
ale z tego co się już dowiedziałem nie będzie działać na mojej płytce Nie prawda, będzie działał po zmianie kilku linijek kodu. [syntax=basic4gl]$regfile = "8515def.dat" $crystal = 10000000 [/syntax] To zmień na swojego procka i częstotliwość oscylatora, jaki Masz. Na przykład [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 8000000 [/syntax] Tą...
Raz są zgodne raz są w przeciwfazie. A nie zależy to przypadkiem od stanu początkowego pinu? Config Timer1 = Counter , Prescale = 1 , Compare_A = Toggle , Compare_B = Toggle , Clear_Timer = 1 Nie znam baskoma ale toggle o tym mówi.
Czy zmienną counter (inkrementowaną prawdopodobnie w przerwaniu) masz zadeklarowaną jako volatile ? Jeśli nie, to kompilator najprawdopodobniej zoptymalizuje porównanie (counter<=nr) jako warunek zawsze spełniony lub zawsze nie spełniony do momentu zakończenia pętli, w której przecież żadna ze zmiennych porównywanych się nie zmienia.
a ustawiłeś Fuse Bity?? Bo jeśli nie masz ustawionych to ATmega pracuje z częstotliwością 1MHz. Musisz ustawić Fusy na albo 8MHz na wewnętrznym generatorze albo ustawić Fusy na zewnętrzny kwarc. i mniej więcej kod by tak wyglądał: $regfile = "m8def.dat" $crystal = 8000000 Cursor Off Dim Czestotliwosc As Long Const Licznik = 22336 Config Timer1...
[syntax=asm] .device ATmega32 .include "m32def.inc" .def temp= r16 .def counter= r17 .org 0 RJMP start .org $016 ;wektor przerwania dla przepełnienia timera RJMP przerwanie start: ldi temp, high(RAMEND) out SPH, temp ldi temp, (1<<CS00) | (1<<CS02) ;konfiguracja preskalera i zegara out TCCR0, temp ;w rejestrze TCCR0 (ustawienia główne timera)...
Co do programu przedstawionego w załączniku. Strasznie marnujesz czas procesora, powinienes w przerwaniu wykonac kilka instrukcji a ty wykonujesz wszystko. Uboczną stroną jest jescze to ze musisz zapisywac wykorzystywane rejestry na stosie i "uziemiasz sobie licznk 0" Proponowałbym taki sposób: czujnik dołaczasz do wejscia into lub int1 ustawiasz na...
Przejrzyj m.in. te strony: ATMEGA: 2, 97, 98,99,101 ATTINY: 2, 108, 109,110,112 tam są opisy rejestrów TCCR(timer counter register) Dodano po 49 w datasheecie oczywiście
jak nie odp ...wystarczy spojrzec na kod ... asembler jest tak szerokosc impulsu faktycznie zalezy od zadanej pozycji czyli od impulsow zliczanych prze counter to logiczne... ale nie w tym tkwi problem lecz w TCNT0=200... jak zmienic aby wychylenia serw byly bardziej dokladne czyli jak zmienic program aby atmega sie wyrabiala??
Witam, jestem początkujący, chciałem zaimplementować w swoim układzie (dodatkowo) funkcję pokazującą czas, czyli generalnie zegarek. Układ będzie oparty na procesorze ATmega*. Poczytałem trochę na forum o kwarcach i chciałem uporządkować wiadomości. Jeżeli chcę by nie było dysproporcji między aktualnym czasem a wskazaniem układu, to rozumiem, że potrzebuję...
Chyba znalazłem choć może mi się wydawać, proszę o opinie fachowca :) jak w AVR Studio odpalę debugowanie i run, to po lewej w okienku "Procesor" jest wartość CYCLE COUNTER. Czy ta wartość podaje ile cykli procesor machnął od początku do aktualnego momentu? Jeśli tak to 8 ifów jest szybsze 282 cycle kontra 414 cykli przy użyciu pętli for i przesuwaniu...
W jakim środowisku działasz? Jesteś pewny nazwy tego wektora? Nie ma żadnych ostrzeżeń? Bo mnie się tu coś nie zgadza: [syntax=c]ISR(TIMER0_COMPA_vect){}[/synt... Tak chyba powinno być prawidłowo: [syntax=c]/* Timer/Counter0 Compare Match */ #define TIMER0_COMP_vect_num19 #define TIMER0_COMP_vect _VECTOR(19) #define SIG_OUTPUT_COMPARE0 _VECTOR(19)[/syntax]
Dzieki za pomoc. Wykonalem projekt jednak swoim sposobem tj. uzywajac czujnika pojemnosciowego, ktory jest podpiery do ne555. Czestotliowsc generowana przez ne555 jest zalezna od pojemnosci. Impulsy sa zliczane counterem w atmedze przez czas 1 sekundy ktory jest z kolei odliczany przez timer.
Czy to poprawny zapis do uśredienia wyniku z 60 pomiarów kodu co wyżej podawałem (*) pytam z czystej ciekawości czy to poprawna forma To nie jest 'uśrednienie',- to jest zbyteczne rozszerzenie rachunku wydajności, które jest równoznaczne z pomiarem impulsów w czasie 60 sec. Inaczej, zamiast odczytywać zawartość Countera1 po zliczeniu 250 4-milisekundowych...
Najprościej na przerwaniu. Nie pamiętam jak to przeliczać ale kiedyś potrzeba mi było odmierzanie czasu co 1s (bodaj na ATmega16 z kwarcem 8MHz). Da się przeliczyć (czytaj notę katalogową do procka) ale przy okrągłych herzach jakieś farfocle zostają ;) Mi wystarczyła dokładność +/- 1 sek. na 10-12 godzin :) Dodano po 3 I jeszcze jedno RTC nie zawsze...
Dlatego, że podczas symulacji Atmel Studio symuluje procesor, w efekcie wie ile wykonał instrukcji i jakich - program jest wykonywany instrukcja po instrukcji, nawet jeśli dajesz mu run. W trybie debugowania sprzętowego pomiędzy pułapkami sprzętowymi może minąć dowolna liczba, dowolnych instrukcji. W efekcie nie ma jak ich policzyć i cycle counter nie...
Witam Chcę wykorzystać bootloader który minimalnie zmodyfikowałem. Oryginalnie może działać ze wszystkimi mikrokontrolerami które mają nie więcej niż 128kB flasha. To istotny fragment kodu: [syntax=c]static void try_start_app(void) { uint16_t crc = 0xffff; uint16_t addr; /* check in-flash CRC */ #if BINARY_LENGTH < 64*1024 for (addr=0; addr<BINARY_LENGTH;...
Bardziej pokręconego kodu na delay to chyba nie widziałem. Ten delay to widzę, że ma być "nieblokujący" chyba, że taki skomplikowany :D bo jeśli nie to nie można poprostu czegoś takiego: [Psuedokod] [syntax=c] volatile int counter; delay(x) { counter = 0 while(counter<x){/* waits */} } ISR() { count++; } [/syntax]
Po przepełnieniu licznika on się zeruje automatycznie? W większości trybów licznik zeruje się podczas przepełnienia. Wyjątkiem są niektóre tryby PWM, np. Phase Correct PWM Mode: The phase correct PWM mode is based on a dual-slope operation. The counter counts repeatedly from BOTTOM to MAX and then from MAX to BOTTOM.
In CTC mode the counter is cleared to zero when the counter value (TCNT2) matches the OCR2A. The OCR2A defines the top value for the counter, hence also its resolution.
Witam, Nie odpisałem wcześniej bo nie byłem dyspozycyjny. Mogę powtórzyc, tak jak wcześniej ze ja odblokowałem moją atmega(128L) dzięki generatorowi, który zrobiłem na atmedze16(wczesniej pisałem ze na atmie8 ale to nie ma różnicy!!!) ok.2MHz. Na atmedze16 miałem kwarc zew.12MHz. Korzystałem z funkcji OC i trybie generacji fali CTC(z zerującym zegarem),...
Zamieszczam przyklad programu napisanego na kolanie, zmienia stan lini PC3 co okolo (LicznikMax*10ms ) - wychodzi co ok. 100 ms Gdybyś miał wątpliwości to podniosłem moje kości z krzesła przed komputerem po płytkę z AtMega32 i sprawdziłem w ukladzie - DZIAŁA! Kompilowany pod ICC626, polecam "Wizarda" ,pomaga w minute ustawić co potrzeba bez sięgania...
Jeśli chcesz podmienić adres powrotu to praktycznie procedura musi być naked, bo musisz napisać swój epilog - adres powrotu jest najniżej, więc trzeba najpierw wszystko pozdejmować, ew. w prologu zapamiętać gdzie jest adres powrotu. Żeby móc całą procedurę ciągle napisać w C najłatwiej jest wtedy na stos odłożyć wszystkie rejestry mogące być zmodyfikowane...
dobra mam, rozumiem już wszystko, chociaż te diody dziwnie się zachowują, w pierwszym cyklu pali się pierwsza, następnie podczas świecenia pierwszej zapala się na sekundę trzecia, potem trzecia gaśnie i pierwsza pali się przez sekundę, gaśnie, zapala się druga, gaśnie, zapala się trzecia, potem normalnie pierwsza, druga trzecia zapalają się i gasną...
] 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...
Źle zrozumiałeś ten zapis. Część odpowiedzialna za taktowanie co 10us wygląda tak: ... _pulse_in5: (at)genus(9) ; THIS FOR 10 US UNITS but approx. depends on XTAL ; you can remove the above call and tailor this routine ; when remarked 10 cycles/loop are needed and for 1 Mhz this is 10 uS ; for 4 MHz you need additional 30 cycles and the...
(at)excray On timer1 impulsuj znaczy: wywołaj przerwanie przy przepełnieniu Wpisując do rejestru timera określone wartości SKUTECZNIE steruję przebiegiem wyjściowym. Więc wybór rodzaju przerwania jest OK. Recz w tym że OPRÓCZ oczekiwanych przerwań wskakują mi jakieś obce (at)nowyARM Czytałem, a po Twojej wskazówce przeczytałem jeszcze raz. Pomijając...
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...
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...
Rzut oka na datasheet, na pierwszej stronie: "Four 16-bit Timer/Counter with Separate Prescaler, Compare- and Capture Mode" Powinieneś więc dać radę zmierzyć nawet cztery takie sygnały i niekoniecznie zaczynające się w tym samym momencie. Trzeba wykorzystać tryb capture liczników. Chyba że chcesz się tak męczyć dalej to jeśli faktycznie oba sygnały...
Jaką funkcję spełni rezystor na tym pinie? Reset pin w AVR jest aktywowany stanem niskim i spełnia dwie funkcje. Podłączając Reset pin do GND powoduje reset wszystkich rejestrów do 0 oraz ustawia Program Counter na zero oraz przełącza wszyskie linie wejściowe i wyjściowe w stan HiZ . Drugą funkcją jest przełączenie processora w tryb programowania....
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 rozdziale 13 pisze: 13. 8-bit Timer/Counter 0 with PWM Wyżej Ci wstawiłem kod do przetestowania.
witam. bawię się od początku tygodnia z procesorem atmega328p. do tej pory wszytsko szło ok, dziś chciałem wziąć się za timery. znalazłem najprostszy program dot. timera0, jedna nie działa on u mnie :) pozmienialem nazwy rejestrów tak, by pasowaly do mojej wersji atmegi. dioda zapala się i tak już zostaje - żadnych zmian. zegar wew. mam ustawiony na...
regfile = "2313def.DAT" $crystal = 11059200 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.6 , Rs = Portb.7 'Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.1 , Db6 = Portb.0 , Db7 = Portd.6 , E = Portb.3 , Rs = Portb.4 Cursor Off Config Pind.6 = 1 Config Pind.0 = 0 Portd.0...
Ja wolę przerwania: Dim Sekunda as byte Config Timer1 = Timer , Prescale = 256 On Timer1 Odmierz_1s Enable Interrupts Enable Timer1 do loop end Odmierz_1s: Counter1 = Counter1 + 34286 Incr Sekunda Return Podałem ci "szkielet" programu do odmierzania 1 sekundy za pomocą timera1. Pamiętaj że procek musi go posiadać i musi być taktowany przez oscylator...
Być może jest tak jak piszesz TMF ale to nie to. Teraz dodałem zmienną timer z wartościa 600 żeby uC wyrzucał po RS dane co 10 minut. Niestety nie ma pełnych 10 minut, jest raz mniej, raz więcej. Wynik dla TIMER1_OCR 10799 22:17:55.187> START 22:27:04.500> ON Wynik dla TIMER1_OCR 10801 22:29:09.860> START 22:38:19.547> ON 22:47:29.917>...
Preskaler znaczy taki mnożnik (ze max rozdzielczość to us(mikrosekundy) ale stosując ten preskaler można ją zmniejszyć np do sekund)? Jeśli tak to moj problem został rozwiązany. Poniżej zamieszczam kod który znalazłem na stronie #include <avr/io.h> #include <avr/interrupt.h> //Counts overflovs volatile uint16_t T1Ovs1, T1Ovs2; //Variables...
Witam jestem tu nowy aczkolwiek zaawansowany w bascomie AVR Musisz ustawić prescaler i wpisać wartość counter0 lub timer0 żeby przerwanie przychodziło co określony czas. Osobiście się z ty nie zgadzam bo jeśli INT0 to nie timer tylko podanie standardowo zera na jedno z wejść w 8515 jest to PD2 lub INT1 PD3. Ja osobiście dałbym waita pod koniec przerwania...
Nie chcę jakoś tego mocno używać. Też tak patrzyłem że idealna ta charakterystyka :) W układzie pseudo liniowym działa to mniej więcej akceptowalnie. W impulsowym z rezystorem, muszę coś zrobić z pomiarem prądu. W tym pseudo liniowym też mam tętnienia prądu. Odczyt mocno się waha. Algorytm nadrabia szybkością sterowania PWM, przez co prąd zadany jest...
Witajcie! Robię bibliotekę mającą w zamyśle być modułem do I2C slave, z użyciem atmegi 128A. Wyizolowałem najmniejszą możliwą część błędu który doświadczyłem, może ktoś z Was będzie miał pomysł co może być przyczyną. Żebyśmy wiedzieli o czym dyskusja, kod programu: avr-g++ -O0 -std=gnu++1y -Wall -Wextra -Winline -mmcu=atmega128a Testowałem również z...
Do drasmen: jeżeli chcesz aby układ zadziałał musisz przestawić fuse bity na wew. generator np. 8MHz a do pinów gdzie podłączasz kwarc musisz wpiąć kwarc zegarkowy 32.768kHz. Program dla autora tematu: 'Program wykorzystujący przerwanie od timera0(8 bitowego) generowane co 8ms 'jeżeli przerwanie zostanie wywołane 125 razy, otrzymamy 1 sekundę...
Dzięki za tak szybkie odpowiedzi :-) Rozumiem, ze zmienne zadeklarowales jako volatile, czy zapomniales o tym?:) Druga sprawa - komplikujesz. Ustaw 16-bitowy timer tak, zeby np. mial impuls co 1us, albo czesciej, w zaleznosci jaka potrzebujesz rozdzielczosc. Tak, zmienne mam jako volatile, ale rzeczywiście nie policzyłem, że counter tak szybko się przepełnia...
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...
P.S. To nie są '#define .....' Fakt, chyba przysnąłem :D Lecz jest jednak pewien problem w definicjach: #define COUNTER_EVENT (!signal_counter & signal_counter_copy) mieszasz operatory logiczne z bitowymi. Spróbuj zastąpić iloczyn bitowy [&] iloczynem logicznym [&&].
Wiesz co? Zanim zacznę konfigurować rejestry spójrz na stronę 136 PDF ATmegi 1281. Jest tam wymienionych kilka źródeł przerwań Timera4 ale nie ma takiego jak ty używasz czyli :"On Oc4a Timer4_int". Może najpierw wybierzesz sobie właściwą nazwę przerwania? Może potrzebujesz przerwania : "On OcF4a Timer4_int"? NIe wiem jakich pdf-ów TY używasz, ale ja...
No to koledzy mnie uspokoili trochę :) Tak sobie czytam datasheeta od atmegi 162 i nie mogę się połapać z tymi PWM-ami... Bo widzę tak : timer/counter0 z PWM timer/counter2 z PWM i co dalej ? Gdzie te pozostałe PWM ? Może któryś kolega byłby tak miły i mógłby w miarę łopatologicznie wyłożyć - jak to się je :) Czy Bascom wspiera sprzętowy PWM w ogóle...
Help > Config serialin The following internal variables will be generated for UART0: _RS_HEAD_PTR0 , a byte counter that stores the head of the buffer _RS_TAIL_PTR0 , a byte counter that stores the tail of the buffer. _RS232INBUF0 , an array of bytes that serves as a ring buffer for the received characters. _RS_BUFCOUNTR0, a byte that holds the number...
Witam, Już od dość długiego czasu mam problem ze sterowaniem silnika używając mikrokontrolera Atmega16A. Myślałem, że wina leży w kodzie programu, ale wysłałem zapytanie do AvrFreaks i tam nic złego nie znaleźli. Wniosek: Najprawdopodobniej wina leży w elektronice. Konfiguracja: Atmega16A, 8MHz kwarc, FUSE: wyłączony JTAG, CKSEL3..0=1111, CKOPT=0,SUT10=11...
Jeśli chodzi o soft, to powstał szkielet programu. Na razie odmierza to czas, i powinno obsługiwać pilot RC5. W polach „A:” – powinien wyświetlić się adres pilota, „C:” – numer przycisku z pilota. W symulacji programowej poszło, ale na razie nie mogę przeprowadzić prób z braku modelu. Ale żeby stworzyć wersje BETA...
Witam! Wrzuciłem niedawno temat odnośnie driverków do mosfet. Tamten problem został już rozwiązany, zatem dziękuję :) Udało się ruszyć silnik. Po podaniu kolejnych kroków na poszczególne fazy(z odstępem czasowym przełączania ok 2ms) i zdrowym zakręceniu silnika- obraca się sam, dopóki się go nie zatrzyma. Czyli klucze działają. jest to silnik synchroniczny,...
Witam, pisze program w assemblerze który pozwarciu INT0, będzie wykonywać określoną czynność(łączyć się z innym urządzeniem), Ale narazie utknąłem w martwym punkcie, napisałem program który po zwarciu INT0 wywołuje przerwanie które zapala diodę podpiętą do lini PC0 5 razy i gasi(zapalenie uzyskuje poprzez ustawienie PC0 w stan wysoki). Całość funkcjonuje...
Pin konfigurowany jest na początku, przed konfiguracją SPI. Dodano po 2 I jeszcze tradycyjne pytanie - chciałem mieć więcej wyjść Zrobiłem tak: [syntax=basic4gl] If Mid(tempstring2 , 6 , 6) = "LED1ON" Then Reset Led1 End If If Mid(tempstring2 , 6 , 7) = "LED1OFF" Then Set Led1 End If If Mid(tempstring2 , 6 , 6) = "LED2ON" Then Reset Led2 End If If Mid(tempstring2...
Zainstalowałem AVR Studio4 i lecę od początku z google i pdf na temat ASM i AVR Powiedzcie chociaż czy w dobrym kierunku zmierzam? Bo jak w złym to odpuszczam i daje sobie spokój, pobawię się migającymi diodami w Bascomie. Tam gdzie nie ma komentarza to nie wiem co to znaczy i co robi ale było w pdf lub innych opisach, jeżeli ktoś może mi wyjaśnić instrukcje...
A nie powinieneś czasem użyć bitu OCF1 i przerwania "0x006 TIMER1 COMPA Timer/Counter1 Compare Match A"?
witam, czy moglby mi ktos pomoc w przerobieniu tego kodu tak aby mozna bylo sterowac serwami. Nie wiem jak osiagnac czestotliwosc 50Hz [syntax=c]#include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> #define GSCLK_DDR DDRB #define GSCLK_PORT PORTB #define GSCLK_PIN PB0 #define SIN_DDR DDRB #define SIN_PORT PORTB #define...
1. Nie widzę deklaracji zegara systemowego więc skod kompilator będzie wiedział jak zrobić delay_100 ms W CodeVision ustawia sie to we wlasciwosciach projektu 2 Jesteś szybki jak zobaczysz na diodzie jak sie zapala i gaśnie co 0,1s Jak zmienie na 0,25s to i tak nic to nie zmienia, i tak nie działa /***************************************...
A czy nie powinna być skasowana flaga przerwania? Bo być może Ty z tego przerwania nigdy nie wychodzisz. W "starych" AVR flaga kasuje się automatycznie: The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0. TOV0 is cleared by hardware when executing the corresponding interrupt handling vector
Witam. Ten kawałek kodu ręcznie przepisałem z przykładu pana CEZARY KLIMASZ kod jest na atmegę8 ale zdefiniowałem odpowiednie porty mojej atmegi32 chcąc zapoznać się na tym przykładzie jak napisać program obsługi ADC wprowadzając następnie dwa stałe progi napięć w celu włączanie i wyłączania np; prostownika ładującego akumulator. Niestety, gdzieś jest...
Zaglądając do dokumentacji mikrokontrolera i wybierając jedną z dwóch możliwości: 1. preskaler timera - jedno z ustawień preskalera powoduje zatrzymanie timera czyli "No clock source (Timer/Counter stopped)." 2. zerując bit TOIE0 (jeśli użyjesz timer0), czyli Timer/Counter0 Overflow Interrupt Enable
Witajcie, Problem powinien być trywialny a nie jest. Dotychczas stosowałem auto trigger ADC na ATtiny13 i działało to przewidywalnie według datasheeta, ale kod przeniosłem na ATmege168 i działać przestało, mimo że wszystko ustawione według dokumentacji. Po krótce: - uruchamiam timer0 w trybie CTC by zdarzenie Compare Match A zachodziło co 250us (4kHz),...
faktycznie - jedyny błąd to było że przerwanie bylo uruchamiane zboczem a nie poziomem. Działający kod zamieszczam poniżej, może komuś się przyda ;) #include<avr/io.h> #include<avr/interrupt.h> #include<stdint.h> #define xISC01 1 << 0 #define xINT0 1 << 6 #define xCS11 1 << 1 #define xOCIE1A 1 << 4 uint16_t...
Witam! Mam problem z popranym odbiorem danych. Kod wygenerowany przez kreatora jest przedstawiony na listingu. I teraz pytanie. Mam odebrać z odbiornika widomość o długości 154 bajtów. Wiadomość ta przychodzi co 1 sekundę i zaczyna się zawsze czterama takimi samymi znakami : (at)(at)Ha Próbowałem już robić to z pętlą, by odbierać 154 znaki, i potem...
Dla kwarcu 4MHz jest to prescaler 64 i początkowa wartość licznika: 193 Dla kwarcu 8MHz prescaler to: 64 i początkowa wartość licznika: 131 To pokazuje kalkulator. Chciałoby się zakrzyknąć : a nie mówiłem :-P Aby wpisać do Timer2 początkową wartość, to używamy poleceń: TCNT2=początkowa_wartosc Timer2= początkowa_wartosc Counter2=początkowa_wartosc...
Witam, Jestem w trakcie budowy sferycznego wyświetlacza widmowego. Globus składa się z 40 diod LED RGB sterowanych procesorem ATmega328P. Pozostał do rozwiązana ostatni problem a mianowicie wykrywanie położenia pierścienia, na którym są umieszczone diody LED. Pierwsze, co przyszło mi na myśl to zastosowanie diody emitującej promieniowanie podczerwone...
Na pinach któregoś z portów masz wyjścia Timer/Counter (nie pamiętam na których - musisz sprawdzić w dokumentacji). Timer/Counter ustawiasz tak, aby generował ciągły przebieg prostokątny o częstotliwości, której potrzebujesz - i już masz sygnał zegarowy. Oczywiście maskymalna częstotliwość tego sygnału będzie mniejsza niż częstotliwośc kwarca - o ile,...
Witam Mam probem z JAFem. Podłączyłem telefon, zgasła zielona dioda. Od tej pory już wogóle ta dioda się nie pali (pozostale RX, TX, PWR zachowuja się normalnie). Program odpala ,widzi boxa - moge sprawdzić countery. Przy probie zczytania info próbuje znaleźć telefon - widać ze resetuje zasilanie. W menadzeze urzadzen jest widoczny jako JAF... Raczej...
Wreszcie zadziałało. Kolega Dondu słusznie zwrócił uwagę na warunek w pętli, ale ponieważ ten fragment kodu skopiowałem artykułu [url=http://www.embedds.com/avr-timer2-a... założyłem że jest poprawny i nie wdawałem się w analizę. Problem polegał na tym że program od razu wyskakiwał z...
Zmodyfikowałem troche kod, teraz mierze czas pomiędzy poszczególnymi sygnałami (wyniki powinny być dokładniejsze) Prosiłbym o wskazówki co można wyżucić z przerwań by przyspieszyć ich wykonywanie? [syntax=c] //read RPM PCINT by Asica10 //-----Define variable for measure RPM----- volatile unsigned long timeLast_1 = 0; volatile unsigned long timeLast_2...
Ten program robi chyba coś innego, niż Ci się wydaje ;) Licznik nr 1 generuje PWM o współczynniku wypełnienia zależnym od OCR1B. Licznik nr 0 generuje przerwania zegarowe (TIMER0_OVF_vect). Program nie jest kompletny - brakuje definicji zmiennej "kierunek". Załóżmy że na starcie kierunek=1: - OCR1B ma wartość 800 - pojawia się przerwanie od TIMER0 -...
Makefile # Hey Emacs, this is a -*- makefile -*- #---------------------------------------... # WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. # # Released to the Public Domain # # Additional material for this makefile was written by: # Peter Fleury # Tim Henigan # Colin O'Flynn # Reiner...
atmega counter atmega bascom counter atmega timer counter
cewka briggs iskra sterowanie wycieraczek astra schemat rozrząd toyota
silnik kohler teltonika konfiguracja
Objawy zużytego sprzęgła w skuterze – szarpanie, poślizg paska, Malossi, Polini, Stage6 TCL 283N20 PWM IC Equivalent: OB2268, AU501, NCP1200A, FAN7602, Pinout and Replacement Guide