Witam, mam problem z pwm, otóż niezależnie co wpiszę w OCR1A i OCR1B (wsp. wypełnienia) to i tak na wyjściu OC1B pojawia się to samo co na OC1A. Chyba że te dwa kanały nie są niezależne od siebie tylko działają równolegle. Kawałek kodu który steruje diodami [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000L int...
Witam ponownie, Nie pokazałem całego kodu nie ze względu na to że ktoś mi go może ukraść jak to napisał kolega ale właśnie z racji tego że jest on napisany przez amatora. Jest to mój pierwszy projekt z mikro kontrolerem oraz językiem C. Wcześniej trochę bawiłem się z PHP oraz HTML i nić po za tym. Dlatego nie chciałem abyście po mnie pojechali... Wracając...
Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
próbowałem róznych metod, te strony znałem już wcześniej, mimo to nie udało mi sie uzyskac zadowalających efektów. najbardziej sensowna chyba była by metoda np co ok 800 us sprawdzac stan wejscie do któego jest podpiety odbiornik ale nie wiem czemu mi sie to zapętla i jak odbierze kod z pilota to leci bez końca. oto kod $regfile = "m16def.dat"...
Witam. Z definicji liczba instrukcji w obsłudze przerwania powinna być minimalna, by mogło się ono maksymalnie szybko wykonać. Tymczasem w przypadku mojego programu liczba instrukcji w obsłudze przerwania była stosunkowo duża. By wybrnąć z tego problemu zamierzam w przerwaniu ustawić flagę która oznacza, że przerwanie zostało wygenerowane, natomiast...
Sygnał taktujący podawany jest na pin XTAL1 AT90CAN128. Generowany jest przez ATmega16 (TIMER1 wyjście OC1A) więc mogę go sobie zmienić. Myślałem że to przez ten sygnał komunikacja nie działa dlatego jest taka mała częstotliwość. Dodano po 1 Wróciłem do wcześniejszych ustawień: AT90CAN128: taktowany z wewnętrznego kwarcu 8MHz, BAUD = 600 ATmega16: taktowana...
Witam. Zająłem sie tworzeniem prostego generatora DDS na ATmega16. Przetwornik to drabinka R-2R. Rozdzielczość 8 bitów, kwarc 8MHz (oczywiście możliwa zamiana na 16MHz). W pamięci mikroprocesora przechowuje 256 próbek sygnałów (np. sinus, piła). Poprzez tryb CTC Timer1 (preskaler ustawiony na 1) obsługuje przerwanie. Niestety napotkałem na problem -...
Na podstawie artykułu: chciałem spróbować nastawić timer1 (16 bitowy) w ATmega16. Robię to w ten sposób: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define LED1 PC0 #define LED2 PC1 volatile uint8_t cnt=0; void main(void) { DDRC |= (1<<LED1) | (1<<LED2); PORTC |= (1<<LED1); TCCR1A |= (1<<CS12) | (1<<CS10);...
Używam Timera1 z Atmega164P w trybie CTC, Atmega ma kwarc 16MHz, interesujący kawałek programu wygląda tak: Konfiguracja Timera: void Timer1_Init(void) { DDRD |= (1<<PD7); // PD7 wyjście PORTD |= (1<<PD7); // PD7 <= 1 TCCR1B = (1<<WGM12)|(1<<C...
Witam serdecznie. Z racji chwili wolnego czasu piszę sobie kod do odbiornika IR na ATmega16. Korzystam ze scalonego odbiornika TSOP1736. O tym jak wygląda kodowanie sygnału w przypadku pilota do telewizora firmy Philips dowiedziałem się ze strony #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdint.h>...
Witam,. Mam następujący problem: Przetwornik analogowy na ADC pin 1 Przetwornik częstotliwość na Timer0 max232 1uF Kwarc 8Mhz i atmega16L Na kablu ze złączkami BNC mam połączenie atmega -> przetwornik czestotliwosci (2 kolumna). Wydaje mi się, że wszystko dobrze zlutowane oraz nie ma przerw w kablu BNC. Kabel mam 50 Ohm. Podczas wysyłania danych na...
Witam, podczas budowania dalmierza ultradźwiękowego natrafiłem na problem którego nie potrafię rozwiązać, a nawet lokalizować jego przyczyny. Sama procedura pomiarowa, tj, generacja fali i odebranie wygląda dobrze. Problemem jest, że np. mierząc wciąż jedną i tą samą odległość dostaję wyniki typu 43cm, 43cm, 38cm, 39cm, 43cm, itd. [syntax=c]#define...
Mam prosty program licznika oparty na wyświetlaczu led. Program nie dokonuje przerwań z timerów. Czy może ktoś jest w stanie rozjaśnić co jest nie tak? Czy jest możliwość, że fuse bit'y od przerwań są źle ustawione? Ten sam program wgrywając do M16 za pomocą STK500 działa sprawnie tylko wtedy, gdy w bascomie ustawie zamiast M16-90S2313 (oczywiście należy...
Witam Jak w temacie,sprawdzałem kod kilka razy i wszystko wydaje się w porządku a jednak nie działa tak jak powinno. ziel_on to włączenie wskazówki sekund w zegarze widmowym. Według mnie powinno działać,mam 10 000 przerwań na sekundę,wynik mnożę razy 100 i dzielę przez 60 tak by wstawić do pętli z _delay_us. Działa tak że wskazówka mignie od czasu do...
Timer1 = Wynik tak sie wpisuje daną do timera1 a tak powinno być Wynik = Timer1 teraz Timer1 bedzie wpisywał wartość do zmiennej Wynik bedzie działać
Witam Ostatnio zacząłem też zabawę z wyświetlaczem od s65. Wyświetlacz mam ze sterownikiem l2f50. Steruję nim przy pomocy atmegi128. Udało mi się wyświetlić obrazki (oczywiście z pamięci w procesorze), jednak jak chcę wyświetlić jakiś tekst, to mi nic się nie wyświetla. Oczywiście programuję w bascomie (właściwie to się uczę). Więc prośba do was, czy...
Witam ! Tworzę projekt stacji pogodowej za pomocą ATMEGI16 + LCD 2x16. Tworzę licznik impulsów który zliczałby mi czas pomiędzy zboczami impulsów (prędkość obrotowa wiatru) Znalazłem w sieci program który działa na Atmega8 + 16MHZ kwarc. [url=]Link Chciałbym go przerobić na Atmega16 na wewnętrznym zegarze plus hallotron. Czujnik halla podłączyłem pod...
Witam Buduję komputer pokładowy, którego jedną z funkcji będzie zegarek. Przeglądając forum i inne źródła natrafiłem na wiele postów podnoszących kwestię nawet 7805 jako bardzo prądożernego (4mA). Obecnie mój układ pobiera 28mA, więc sporo, a w zimę wiadomo.... Podczas postoju samochodu wyświetlacz 2x16 i jego dioda będą wyłączone. W jaki sposób powinno...
Do zrealizowania na zaliczenie kursu był program wykorzystujący timery i przerwania do pomiaru czasu. W skrócie wprowadzamy czas w void start(void)//rozpoczecie odliczania { sprintf(message,"Odliczanie "); message[15]=' '; LCD2x16_clear(); display(message, false); //konfiguracja timerow TCCR1B |=...
Witam. Tworzę sobie programik do sterowania 16 serwami. wykorzystuję 2 timery timer2 generuje przez przerwanie odstępy 2.2ms. każdy impuls to obsługa 2 serwów, więc aby odsłużyć wszystkie mamy 8 impulsów(18.4ms) więc impulsy na serwo powtarzają się częściej niż te 20ms. więc tu jest dobrze. Timer 2 steruje timerem1, blok A obsługuje pierwszą 8 serw,...
Witam: Mam problem, potrzebuję odczyt z pilota w przerwaniu a nie chce działać. Poniższy kod nie działa, natomiast to samo w pętli głównej działa: [syntax=basic4gl] $regfile = "m168pdef.dat" 'deklaracja rodzaju procesora (tutaj Atmega168p) $lib "mcsbyte.lbx" $crystal = 8000000 'taktowanie Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down ,...
Witam Szanownych kolegów. Nie dawno zacząłem przygode z programowaniem. Zapoznałem się z kursami na wkrętaku, oraz z kursem na Hobby Robot. Narazie wszystko opiera się na symulacji w proteusie, umiem już multipleksować cyfry na wyświetlaczu, lecz nie rozumiem funkcji bin2bcd, i nie umiem tego połączyć z następującym kodem tak, aby to jakoś działało....
Witam. Jak zaczynalem pracowac nad hexapodem ciezko bylo mi znalezc jakis krotki i w miare przejrzysty kontroler serwomechanizmow. Napisalem taki, plus mozliwosc sterwania serwami przez RS232. Wklejam je tutaj i mam nadzieje ze sie komus keidys przyda:) Algorytmy sa dosyc proste, jak by ktos chcial to moge wytlumaczyc jak co dziala zeby mozna bylo przystosowac...
(...) Więc pytanie- zastosujesz rezonator kwarcowy w tym rozwiązaniu czy będziesz dalej próbował coś działać z generatorem RC? Zdecydowanie kwarc. Czym większa stabilność pomiaru częstotliwości tym większy zasięg wykrywacza. Pozdrawiam Dodano po 3 Dla uzupełnienia tematu działający prototyp: Filmik: I cały program: [syntax=c]#include <avr/io.h>...
Witam, poniżej zamieszczam kod z Bascoma mojego sterownika BMS, w tej chwili kontroluje temperaturę, czas, Rs232, LCD 2x16. Obsługa z klawiatury lub pilota RC5, w obecnej chwili rozwiajm go o dostęp przez internet. zajmuje ok 8kb pamięci więc w A162 będziesz miał jeszcze drugie tyle pamięci. Ja kożystam z A32 Pozdrawiam. PS. daj znać jak zakończysz...
Witam mam taki problem gdy uruchomię ten program to żarówka bardzo miga. Zliczyłem ilość wywoływanych przerwań i wyszło że na 400 detekcji zera jest 100 przerwań od timera w czasie 4 sekund. Więc detekcja zera działa prawidłowo. Używam Atmega168, kwarc 16Mhz. F_CPU ustawiłem w kompilatorze i działa napewno 16Mhz
Witam Wykorzystałem do odbioru kod podany przez Kolegę Mirka [syntax=basic4gl] $regfile = "m168def.dat" $crystal = 10000000 'taktowanie procesora $hwstack = 32 ' rozmiar stosu sprzętowego $swstack = 10 ' rozmiar stosu $framesize = 40 ' rozmiar ramki $baud = 9600 ' predkość transmisji Config Debounce = 30 '********************* konfiguracja UART Config...
Reflektując się.. jesli kogoś uraziłem to wybaczcie ale już mnie trafia jak można zmarnować pół dnia na uruchomienie timera. Poniżej program który napisałem tylko po to żeby uruchomić timer. Kod ten jest bez ustawiania portów in/out jak i bez definicji zmiennych. Jedynej zmiennej "Czas" używam do przechwycenia wartości timera. Dodano po 25 Dodano......
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...
Witam Mam następujący problem, działający program obsługi jest taki: ISR(TIMER1_OVF_vect){ UDR0= Buff[rd]; rd = (rd + 1) % 256; UDR0= Buff[rd]; rd = (rd + 1) % 256; } program działa, ale jest za wolny, te kilka instrukcji kompilator zmienia na 122 linie w asm. Najlepiej byłoby napisać tę funkcję w asemblerze, niestety do tej pory pisaałem tylko w C....
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...
Witam. Otóż mam taki problem ;) Dwa czujniki DS18b20 podłączone są do osobnych pinów Atmegi168, PINB0, PINB1. Chciałem to zrobić w ten sposób aby w przerwaniu ustawiana była flaga (co sekundę) która realizowana była w pętli głównej while(1), w ten sposób, aby co sekundę na zmianę wykonywany został convert oraz odczyt. Wydaje mi się, że wszystko zrobiłem...
Aby uzyskać efekt jakiego oczekujesz (z użyciem jednego timera) musiałbyś modyfikować wartość OCR1B w procedurze obsługi przerwania TIMER1_COMPB We funkcji Init_Timer1() pozostaw tak jak było: OCR1B=7812. Linijkę, którą zaproponowałem dodaj na końcu procedury ISR(TIMER1_COMPB_vect) . Scenariusz jest prosty. Licznik zlicza do wartości OCR1B, występuje...
A w jaki sposób mogę wygenerować 2 sygnały PWM za pomocą jednego timera? Korzystając z Timer1, który posiada dwa wyjścia OC1A i OC1B. Oba można ustawić za pomocą bitów COM1A1+COM1A0 oraz COM1B1+COM1B0 tak by pracowały w przeciwfazie. Warunek jest jeden: oba rejestry OCR1A i OCR1B ładujesz tą samą wartością. Myślę jednak, że idea takiego sterowania...
Kurcze nie wiedziałam, że tak nie można...:/ Poniżej wersja ostatnia schematu. Jeśli chodzi o program i tryb CTC, to trochę poczytałam i jak widać poniżej próbowałam zastosować. Mimo wszystko mam problem z tym programem. Okazuje się,że dioda wreszcie miga, ale nie w takim czasie którego oczekiwałam. Chciałam,żeby świeciła przez 1s,a gasła na 2s i odwrotnie....
Witam! Dopiero zaczynam i nie mogę sobie poradzić z poprawnym zliczaniem w przerwaniu pochodzącym od Timera2 w trybie CTC. Chciałem wykorzystać programowe Timery, które są pomysłem Pana Kardasia (korzystam z jego książki) do tego aby jeden z nich tykał co 1sek. Zacząłem, więc tak: 16MHz/1024/125/125 daje teoretycznie "cyknięcie" co sekundę, a u mnie...
Witam, uczę się języka C na płytce kursu AVT3505 z atmegą162 i wyświetlaczem LED. Moim celem jest stworzenie programu który zlicza od pierwotnej wartości i do zera, a następnie przerywa program i zmienia stan czwartego pinu portu D na przeciwny. [syntax=c] #include <avr/io.h> #define F_CPU 8000000 #include <util/delay.h> #include <avr/interrupt.h>...
Może coś takiego $crystal = 11059200 Dim Czestotliwosc As Long 'w twoim przypadku może być Byte Const Licznik = 22336 ' aby Timer1 przepelniał sie co sekundę Config Timer1 = Timer , Prescale = 256 Config Timer0 = Counter , Edge = Falling On Timer1 Czas 'On Timer0 Zlicz Enable Interrupts Enable Timer1 'Enable Timer0 'Pomiar czasu Counter1 = Licznik Cls...
Witam Procesor jak w temacie. Podłączyłem sygnał zmienny (fala prostokątna) do obu nóżek PortB0 (T0) i PortB1 (T1). Napisałem program w celu sprawdzenia czy oba liczniki działają: $regfile = "M16def.dat" 'Wybór kontrolera ATMega16 $crystal = 8000000 'Kwarc 16MHz Config Lcd = 20 * 2 'Rodzaj wyświetlacza Config Lcdpin = Pin , Db4 = Portc.1 ,...
Mówisz masz na timerze. $regfile = "m16def.dat" $crystal = 1000000 $hwstack = 32 $swstack = 8 $framesize = 16 Config Timer1 = Timer , Prescale = 1024 Enable Interrupts Enable Timer1 Start Timer1 On Timer1 Odmierz_czas Const T = 6942 Config Portb.1 = Output : Portb.1 = 1 : Led Alias Portb.1 Config Portb.2 = Input : Portb.2 = 1 :...
$regfile = "m16def.dat" $crystal = 8000000 Config Pinb.0 = Input Config Pinb.2 = Input P1 Alias Pinb.0 P2 Alias Pinb.2 Set Portb.0 Set Portb.2 Config Timer1 = Timer , Prescale = 256 On Timer1 1_sekunda Enable Timer1 Enable Interrupts Counter1 = 34286 Declare Sub Alarm Declare Sub Sys_off Dim Sekundy As Byte Dim Flaga1 As Bit Dim Flaga2 As...
Mam problem z działaniem poniższego programu. Części programu odpowiedzialne za multipleksowanie i wyświetlanie znaków na 7-segmentowych wyświetlaczach led działają prawidłowo. Problem pojawia się podczas pomiaru częstotliwości. Tuż po włączeniu, na wyświetlaczu przez chwilę ukazuje się prawidłowy wynik; sytuacja powtarza się mniej więcej co 1 sekundę...
Zwarcie Vcc do GND pomogło, ale dopiero takie dłuższe zwarcie ( 5 sek). Wyświetlacz ocnkął się, wyświetla dane, ale !!! ciekawostka, zegar stoi. Załaczam kod, taki wprost z Eclipsa, bez bibliotek. Jestem w trakcie przeróbki z innego projektu, proszę o wyrozumiałość. /* * main.c * * Created on: 2010-09-25 * * * PD7 - 1WIRE * PA0..PA7 - LD0..LD7 -...
Witam proszę o wyrozumiałość gdyż dopiero zaczynam przygodę z mikro-kontrolerami. Znalazłem gdzieś na elektrodzie kilka projektów próbowałem coś z tego sklecić niestety nie ma za dużo tego na Atmege16 Dlatego próbowałem przerobić coś z programów gotowych dla inny Cu A więc chcę zrobić zegarek oparty na wyświetlaczach siedmio-segmentowych Mam dwa programy...
Witam wszystkich! Pewnie pomyślicie "znowu to samo", no ale zlitujcie się w Wigilię i przeczytajcie te kilka zdań :D Walczę z problemem od kilku dni. Nie potrafię skonfigurować Timera by konwertował dane z 1wire poza główną pętlą. Nie mogę sobie pozwolić na waitms, bo wtedy mam problemy z poruszaniem się w menu. Mam już działający Timer1 odliczający...
Cześć. Wiecie, zamotałem się. Mam ATMega162, XTAL=16MHz. Potrzebuję aby Timer1 w trybie CTC zgłaszał przerwania co 1 sekundę. Mam ustawiony preskaler na 256, więc 16000000/256/1=62500 Więc czy do OCR1A (tryb 4) lub ICR1 (tryb 12) mam wpisać wartość 62500 czy 62500-1. Doczytałem że zerowanie licznika następuje w następnym takcie zegara po zrównaniu obu...
Witam, chciałbym przerobić zegarek z tego projektu na Atmega8. Chciałbym również usunąć odliczanie sekund ponieważ dysponuję tylko wyświetlaczem czterocyfrowym. Po skromnych przeróbkach mój kod wygląda tak: [syntax=c] #define F_CPU4000000UL #include <avr/delay.h> #include <avr/io.h> #include <avr/interrupt.h> #define SegDataPort PORTB...
Witam! Od kilku dni siedze i nie mogę nic wymyśleć :( Bez ogrudek - podaje źródło: $regfile = "m16def.dat" $crystal = 8000000 'definiowanie zmiennych i stałych Dim T As Integer Dim Licznik_przerwan As Byte Dim Dioda As Bit 'konfigurowanie interfejsu 1Wire Config 1wire = Portd.1 'konfiguracja wyświetlacza Config Lcdpin = Pin , Db4 = Portc.6...
Witam. Robię sobie komputerek spalania do samochodu. Wszystko ładnie wychodzi poza czasem wtrysku a co za tym idzie - spalaniem. Występują jakieś zakłócenia i nie wiem dlaczego. Może ktoś pomoże....:) Kod: $regfile = "m168def.dat" $crystal = 16000000 ''''''''''''''''''''''''''konfiguracja portów'''''''''''''''''''''''''''''''''' Config Portd...
Oto i on Config Portc = &B00000000 Portc = &B11111111 Config Portd = &B11111111 Portd = &B1001100 Config Watchdog = 2048 Config Adc = Single , Prescaler = Auto , Reference = Internal Config Timer1 = Timer , Prescale = 64 Dim Formatowany1 As String * Dim Wart_ac As Word Dim V As Single Dim Pomp As Bit Dim Grz As Bit Dim Pomp1 As Bit Dim...
Witam Przekopałem całe forum manuala i mam kłopot bo nie znalazłem odpowiedzi na moje pytania. Polecam Ci , jeszcze jeden manual : [url=]Atmega16_PL Opis i zasada działania TIMER1 w ATMega16 , rozpoczyna sie od strony 23.Jeśli zrozumiesz - a powinieneś , bo jest w języku polskim - to cel który zamierzasz osiągnąć , wyda Ci się prosty jak ... "małe...
Witam, Pracuję na ATmega16 taktowanym wewnętrznym oscylatorem RC. Chciałem wykorzystać Timer1 do odmierzania czasu np. 1s lub 1min (po zastosowaniu preskalera 1024), a Timer2 razem z przerwaniem zewnętrznym do wykonania regulacji fazowej. Kiedy chce tylko odmierzać czas, albo tylko regulować fazowo to wszystko działa poprawnie. Jednak kiedy chcę połączyć...
"Buforowany CTC" bo wartość OCR0 po zmianie nie daje efektu natychmiast (jak w normalnym CTC) ale czeka do końca cyklu. W efekcie nie powstaje zaburzenie (swing) przy zmianie wartości OCR0 (czyli czestotliwości). Z tego powodu ten tryb bardziej nadaje się do jakiś wobuloskopo podobnych zastosowań czy do sterowania np przetwornicy. Prawdę mówiąc nie...
Wiem że atmega16 ma tryb CTC który próbowałem bezskutecznie włączyć. Kolega Zumek napisał że bascom ma w tym miejscu błąd i nawet po zastosowaniu jego wskazówek nie mogłem tego trybu uruchomić a było by to najlepsze rozwiązanie. Męczę się już z tym przebiegiem strasznie i nic mi nie wychodzi. Może ktoś by mi napisał gotowca do bascoma jak skonfigurować...
Witam buduje taką mini stacje pogodową i zatrzymałem się z obsługą ds-a co w tym może być nie tak ? W książce którą posiadam jest tylko obsluga 1820. Docelowo mają być 2 czujniki na 2 liniach. Zrobie to dublując kod . Jednak przy jednym nic nie działa wyświetlacz zostaje cały czarny bez czujnika , i z nim też . Oto kod: '###STACJA POGODOWA BY GEGE97##################################...
Witam, pracuję na atmedze16A i wewnętrznym clocku 4Mhz. Próbuję wygenerować przerwanie z częstotliwością 80kHz, które spowoduje negacje jednego z bitów portu B(PORTB 0). Rozumiem, że dzięki takiej operacji wygeneruję sygnał o częstotliwości 40kHz, który pozwoli mi generować ultradźwięki w nadajniku. Napisałem taka obsługę przerwania, ale coś mi nie...
Witam serdecznie. Konstruuje coś co może kiedyś będzie centralką alarmu i mam problem z obsłużeniem czujników ultradźwiękowych. Zakupiłem jedne z najtanśzych para odbrionik nadajnik. Wszystko podłączone wg. schematu. Ponizej kod programu: $regfile = "m16def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 8 $framesize = 8 Enable Interrupts...
Witam, Przesiadłem się właśnie z procka ATmega 16 na Atmegę 162 z powodu nie wystarczającej liczby portów. Napisałem program który ma za zadanie włączyć TIMER1 w tryb licznika z sygnałem taktującym na porcie PB1(T1). [syntax=asm].include "m162def.inc" .cseg .org 0 rjmp reset reset: cli ldi R16, low(ramend) out SPL, R16 ldi R16, high(ramend) out SPH,...
Witam Chciałem zrealizować program do odmierzania czasu na kwarcu zegarowym. Podłączyłem go do pinów portu B (t1, t0). Program wyglada następująco: [syntax=basic4gl]$regfile = "m16def.dat" $crystal = 8000000 Config Timer1 = Timer 'Oscylator wewnętrzny Enable Interrupts Enable Timer1 Dim Czas As Byte 'On Timer1 Odmierz Do On Timer1 Odmierz Locate 1 ,...
Właśnie zrobiłem sobie trzy efekty na mega16. Efekt zaprzęgany poprzez obsługę przerwania(przepełnienie) z tablic. Efekty przełączam jednym przyciskiem, pomaga mi w tym zmienna "m". Zaś zmienne w przerwaniu pomagają mi manipulować prędkością przesuwania diod. Ustawiłem uC na 4Mhz. Jeśli ktoś ma jakieś propozycje poprawienia kodu to proszę pisać. Film;...
Ustawiasz CTC na bardzo szybki, czas pomiędzy przerwaniami to będzie rozdzielczość regulacji. Reszta to wartości w pamięci(zmienne) odliczające programową syntezę częstotliwości. Aha..oki, dzięki, spróbujemy narazie coś wycisnąć z Bascoma ale czarno to widzę nawet w asemblerze, bo zależy mi na bardzo dokładnej częstotliwości, a przecież już przerwanie...
Witam. W pewnym sofcie dla Atmega16 wykorzystałem już: - Timer1 (16 bit) do odliczania 0,0001s odcinków czasu - Timer2 (8 bit) jest wykorzystywany przez odbiornik podczerwieni (instrukcja getrc5) Timer 0 niby jest wolny, ale nie wiem / nie jestem pewien czy nie jest on wykorzystywany przez jakieś używane przeze mnie instrukcje (np. print dla sprzętowego...
Witam, chciałbym zrobić robocika z silniczkami DC sterowane poprzez PWM. Niestety nie bardzo mam pojęcie jak to przerzucić na kod. Napisałem program, ale nie jestem pewny czy jest poprawny i czy moje myślenie w ogóle jest poprawne. Poniżej zamieszczam kod: [syntax=c] #define F_CPU 1000000L #include <avr/io.h> #define PRZOD 0x02 // (1<<PA1)...
jedyne co mi przychodzi do głowy to jakaś "szpilka" w momencie konfliktu, gdy OCR0=0 I tak jest! Przy wartości 0 w rejestrze OCR0 odpowiedzialnym za wypełnienie sygnału PWM na wyjściu pojawia się szpilka -już nie pamiętam ile trwa w stosunku do wartości 1 w tymże rejestrze (ale dużo krócej-chyba około 1/5 czasu dla wartości 1 w OCR0). Problem jest...
Mam do Was pytanie dotyczące fragmentu programu, w szczególności pętli for, która wykonuje się 16 razy i każde kolejne wykonanie trwa dłużej niż poprzednie. Czas trwania ostatniej pętli jest kilkanaście razy dłuższy niż pierwszej i przyrost czasu wykonania każdej pętli jest z grubsza liniowy. fragment programu: [syntax=c] void send_frequency(void) {...
Tak,zgadza się,po prostu z rozpędu wpisałem Timer3,bo pisałem wcześniej na Atmega128. Poprawiłem nieco kod,ale nadal mam problem z zatrzymaniem stopera. Czy może tryb CTC będzie tutaj lepiej współgrał? [syntax=c] #define F_CPU 16000000uL #include <AVR/io.h> //biblioteka we/wy #include <AVR/interrupt.h> //obsluga przerwan #include <util/delay.h>...
No ok brzmi fajnie ale jak już napisałem w pierwszym poście, jeśli dobrze zrozumiałem dokumentację to sprzętową kontrolę wypełnienia ma tylko jeden z timerów, którego zresztą już używam w innym celu. Już na pierwszej stronie dokumentacji jest informacja: Four PWM Channels a konkretnie: - Timer0 1x PWM - Timer1 2x PWM - Timer2 1x PWM BTW:
Witam Testując kod Kolegi pusiek1974 do odbioru czasu i daty NTP, chciałem go rozbudować i dostosować do swoich potrzeb. Na początek jako, że kod używa Wait'ów, których chciałem się pozbyć, chciałem dodać wywołanie przez flagę od Timer'a. [syntax=vbnet]$regfile = "m16def.dat" $crystal = 8000000 $hwstack = 64 $swstack = 64 $framesize = 64 Baud = 19200...
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...
Witam, mam problem ze stworzeniem w języku C generatora, który będzie mi zmieniał stan niski na wysoki (stan niski 10ms, stan wysoki 0.32ms) przez czały czas działania programu niezależnie od pętli głównej programu. Czy jest to wogóle możliwe? Liczę na pomoc w dojściu do rozwiązania tego zagadnienia. ATmega 168 taktowana wewnętrzym oscylatorem 8MHz....
witam jest zrodełko w bascom z obsługą Timer1 ale niepotrzebuję aby timer1 obsługiwał mi port zewnetrzny T1 (portb.1) w atmega16 ,jak mozna wyłaczyć go z obsługi przez timer1 w Bascom ? poniewarz potrzebuję go do sterowania lcd i chce go z tego powodu wykluczyć :(
Po pierwsze aby jakieś przeerwanie zostało obsłużone musisz odblokować źródło tego przerwania w odpowiednim rejestrze, oraz odblokować przerwania globalnie w rejestrze SREG (ustawić najstarszy bit w tym rejestrze). Z tego co się dopatrzyłem to tylko odblokowałeś przerwania globalnie a zapomniałeś o odblokowaniu przerwania od porównania, chodzi o rejestr...
Tu masz przykład: #include <avr/io.h> #ifndef F_CPU #define F_CPU 16000000 //zdefiniowanie w razie potrzeby wartości kwarcu #endif #ifndef _BV #define _BV(bit) (1 << (bit)) #endif const unsigned int _freq_time = F_CPU/64000 - 1; //połówka okresu przebiegu int main(void) { DDRD = _BV(PD5); //ustawienie...
Problem w pewien sposob rozwiazany, moze komus sie przyda Dodano linie: $initmicro ........ _init_micro: Config Watchdog = 1024 Start Watchdog Return W tej postaci watchdog poprawnie resetuje uP: $crystal = 7372800 $regfile = "m168def.dat" $initmicro Config Aci = Off Config Lcd = 40 * 2 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3...
emulator ruszył błędnie obliczyłem sume crc8 crc = crc8(mytemp(1),8) a miałem mytemp 8 na 8 master nie odbierał danych bo suma kontrolna sie nie zgadzała wrzucam kod prosze paniętać że autorem jest Vladimir I. Yershov Program jest jeszcze do poprawek to tylko prowizorka jest 1:08 w nocy i chciałem sie podzielić radoscią $regfile = "M8DEF.DAT" $crystal...
Witam :) Po kilku dniach zabawy udało mi się zbudować układ składający się z ATMEGA16 (kwarc zewnętrzny 8 MHZ, rs232) i: - czujnika podającego na pin A1 napięcie 0.2-4.7V - czujinka podającego częstotliwość 4-40kHz na pin PBO. Po przestudiowaniu podstaw BASCOMu i lekturze forum udało mi się napisać oddzielne programy do obsługi tych czujników. Jednak...
Witam, Chciałem zrobić nadajnik RC5. Chciałem sprawdzić na moim TV. Jako ramkę wysyłam polecenie wyłączenia TV. Niestety TV nie chce się wyłączyć. Problem chyba jest z częstotliwością. //ATmega 16 F_CPU = 16000000 #include <avr/io.h> #include <avr/interrupt.h> volatile uint16_t g_licznik = 0; ISR(TIMER1_COMPA_vect) { g_licznik++;...
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...
Jestem początkujący w dziedzinie programowania Atmelków. Mam zamiar zrobić licznik impulsów , który w pierwszej linii wyświetlacza LCD 2*16 , będzie wyświetlał ilość impulsów , zaś w drugiej ma pokazywać ilość obrotów na minutę. Generalnie ma to rejestrować przebiegi wolnozmienne ok 1Hz nawet ciut mniej. Zaczerpnąłem kawałek kodu oczywiście z netu ,...
Witam, dziękuję bardzo za cenne wskazówki jak rozwiązać mój problem. Stworzyłem kod i proszę o sprawdzenie czy takie coś ma szansę zadziałać. Pozdrawiam serdecznie #include <avr/io.h> #include <avr/interrupt.h> ISR(TIMER1_COMPA_vect) { ///dowolna akcja } int main (void) { TCCR1B |= (1 << WGM12);...
Odsyłam do aplikacji ;) Strona 88 i dalej. Ja to robię np tak: #define TIMER0_ONTCCR0 = 0x02; #define TIMER0_OFFTCCR0 = 0x00; #define TIMER1_ONTCCR1B = 0x02; #define TIMER1_OFFTCCR1B = 0x00;
Tutaj kod programu: #define ROZMIAR_TAB 185 #define ILOSC_KOLUMN 8 #include <avr/io.h> #include <avr/interrupt.h> #include "dane.h" volatile uint8_t licznik = 0; volatile uint16_t licznik_czas = 0; volatile char licznik_zbocze=1; //uint8_t tablica[9] = {0b11111111, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,...
Prace daleko posunięte ale mam już nowy problem, programy i pliki podzieliłem tak: -program1 do pomiaru temperatury na dallasie ds18b20 -program2 do pomiaru napięcia na ADC (wykorzystuje TIMER0 jako przerwanie) -program3 do obsługi PWM za pomocą mostka L298 (wykorzystuje TIMER1) Program 1 jest autonomiczy, pomiar na 2 czujnikach może później jakieś...
nie bardzo rozumiem:/ Chodziło o to że, poprzednio błędnie wstawiłem wykorzystanie OVF1. Jeżeli Timer1 pracuje w CTC mode, to wcześniej się wyzeruje przy Compare ustawionej wartości i nie dojdzie do OVF1. Odnośnie fragmentu codu: W jakim celu w ogóle zatrzymujesz licznik0 ? Zatrzymanie, odczytanie zawartości, zerowanie stanu i ponowne uruchomienie...
witam:) mam problem z programem dotyczącym pomiaru częstotliwości i napięcia oraz transmisji pomiędzy AVR po SPI, chciałbym się poradzić i uzyskać wskazówki w jaki sposób sprawnie to zrobić, dysponuję następującymi przerwaniami pomiar częstotliwości [syntax=cpp] ISR(TIMER1_COMPA_vect) //obsługa przerwania po zliczeniu ustawionej liczby { impulsy=licznik;...
Dodałem: [syntax=c]ISR(TIMER1_COMPA_vect) { }[/syntax]Teraz chociaż funkcja Test() wykonuje się raz, tak jak powinna. Zmieniłem tryb ADC na pojedynczy: [syntax=c]void InitADCSingle(void) { ADMUX = _BV(REFS0) | _BV(REFS1) ;// Napięcie odniesienia wewnętrzne, AREF podłączony z GND przez 100n //| _BV(MUX0); // Kanał ADC1 ADCSRA = _BV(ADEN) // Aktywacja...
Mam już gotową płytkę, impulsy z obrotomierza kieruję na ICP tak jak zasugerował tmf. I teraz pytanie do Was czy pomożecie w pisaniu programu, żeby odpalić obsługę tego ICP ? Obecnie mój program wyglada tak: [syntax=vb]'--------------------KONFIGUR... $regfile = "m16def.dat" 'informuje kompilator o pliku...
Sygnał podaję na nóżkę PORTD.6, mam go skonfigurowanego tak: [syntax=basic4gl]Config Portd.6 = Input[/syntax] Timer konfiguruje jako timer, ponieważ chcę mierzyć czas trwania zbocza: -konfiguruję za zbocze opadające -przepisuję wartość timer1 do zmiennej A -przełączam na zbocze narastające -przepisuję wartość timer1 do zmiennej B -od zmiennej B odejmuję...
Mikrokontroler ATMEGA16, oscylator wewnętrzny 8 MHz, wykorzystany timer1 (16 bit). Dzielę połówkę sinusoidy na 100 części. 10ms / 100 = 0,1 ms = 0,0001s. Odcinki czasu 0,1 ms generuje mi timer1 Takt zegarowy t = 1 / 8000000 Hz = 0,125 ms Dla uzyskania 0,0001s muszę zliczyć 800 taktów ( 800 x 0,125 us = 100 us = 0,1 ms = 0,0001 s ). Aby licznik się przepełnił...
Nie wiem na które pcb patrzysz , to ostatnie do pełnej wersji z pomiarem prądu i napięcia ,patrzę i widzę że jest OK . pin40 i pin39 są podpięte do dzielnika kondensator żeby nie pływał pomiar zbytnio. nie widzę tego o czym piszesz . Wieczorem sprawdzę jeszcze raz i podam zaktualizowane . Ok jest wieczór więc zamieściłem na 2 str. schemat i pcb w eagle...
Witam Napisałem prosty program używający timera1 i timera 2 do zliczania częstotliwości, Chciałbym użyć dodatkowo serwa do mojego projektu ale używając intrukcji Servo coś nie tak dzieje się z serwem . Po włączeniu zasilania ciągle pracuje i próbuje przekręcić się o 360 stopni "ciągle pracuje". Kiedy w kodzie spełniony jest warunek i uruchamia się komenda...
Witam Siedzę już drugą noc nad samymi timerami, a termin końcowy oddania projektu się zbliża. Problem wygląda tak, że gdy załączę zezwolenie na przerwanie od timera2 zawiesza się cały program (kratki na wyświetlaczu). Potrzebuje drugiego timera do obliczeń a Timer1 generuje przerwanie co 0,5s w trybie CTC. Kwarc 8MHz. [syntax=cpp] #include "board.h"...
The Fuse Bits has nothing to do with a PWM. but in this page write Procesor taktowany jest kwarcem 16MHz. Odtwarzanie stereo obsługiwane jest za pomocą dwóch wyjść PWM od Timera1 czyli OC1A oraz OC1B. Na wyjściach pinów podłączyłem kondensatory 100uF. And whats meaning in this quote terms timer1 OC1A and OC1B, what is timer1 ?
A wiec pwm masz na oc1a i oc1b to jest timer1 (jak sie nie myle). Poza tym masz 3 pwm oc2 na timerze2. Wiec jak bys chcial jeszcze czas liczyc lepiej uzyj jakis zew. ukladu, bo zostal ci tylko timer0, na ktorym bedzie ciezko to osiagnac. Na timerze1 i 2 mozesz zrobic sterowanie diodami rgb. Wlasnie widze ze ten czujnik wilgotnosci nie ma mozliwosci...
Pozwalam sobie zamieścić 'żyjący' przykład korzystający z przerwań: Zakładam że zegar w mojej atmedze ma 16MHz :) Program na przerwaniach timera0 robi 'pracę' programu, konkretnie konwersję A/D z portu A0, i robi to około 60 razy na sekundę Na przerwaniach timer1 odświeżany jest ekran LCD (przerwanie wywoływane 30 razy na sekundę) Na porcie A znajduje...
Witam serdecznie forumowiczów. Jestem w trakcie budowy generatora sygnału PWM o zmiennym wypełnieniu oraz częstotliwości. Wypełnienie 0-100% co 5%, częstotliwość 1-50 kHz co 1 kHz (plus kilka częstotliwości poniżej 1k). Generator będzie częścią nieco większego projektu. Całość ma działać mniej więcej w taki sposób: odpalam timer1 w trybie PWM z korekcją...
Witam... To będzie sporo pisania więc trzymajcie się... ;) #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> #include <stdlib.h> #define F_CPU 8000000 //wewnętrzny generato na 8Mhz #define PARITY_NONE 0 #define PARITY_EVEN (1<<UPM1) #define PARITY_ODD ((1<<UPM1)|(1<&...
Nie tak nerwowo, na stronie 94 z ATmega16 jest fajny rysuneczek Timera1 z układem przechwytywania oraz co może być źródłem przechwytywania. Jak widać są dwa, jedno to komparator a drugie to wejście ICP. Co do wektora przerwania od przechwytywania to jest chyba adres $ooA a nie $00C ! Ten jest wektorem od układu porównania A z licznikiem Timer1
Config Timer2 = Pwm , Prescale = 1 , Compare Pwm = Clear Up Config Timer1 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Pwm = 8 Config Timer0 = Pwm , Prescale = 1 , Compare Pwm = Clear Up , Pwm = 8 Ocr2 = wart Ocr0 = wart Pwm1a = wart Pwm1b = wart
Witam ponowne, Kupiłem LCD i mam z nim problem ciągle świeci. Nie wyświetla mi nic co mu puszcze z BASCOM'a. Już wyczytałem aby wyłączyć JTAG'a i też nic. Domyślam się że może być coś z kontrastem ale nie wiem na 100%. Może zrobiłem błąd podczas projektowania płytki z uC tam gdzie jest bramka która steruje kontrastem poprzez sygnał PWM... Nie wiem...