No to przecież program powyżej obsługuje dokładną regulację. W pętli głównej przed LOOP dopisz np WAITMS 100. Wczoraj o tym zapomniałem. Więc procesor zbyt szybko zwiększa/zmniejsza szybkość i wychodzi ci to tak, jakby silnik miał tylko 2 prędkości. Użycie waitms jest prymitywne ale nie wiem co twój program ma jeszcze robić więc idę na łatwiznę i nie...
W ATTiny timer chyba przejmuje kontrolę nad IO, więc włączenie/wyłączenie odbywa się z poziomu konfiguracji timera. CZyli robisz to tak - np. ustawiasz inny timer, aby generował przerwanie co 1s, a w obsłudze tego przerwania w zależności od potrzeby konfigurujesz timer generujący PWM. Chyba to najprostsze rozwiązanie.
Ponieważ nie pokazałeś programu na ATtiny i nie podajesz jak RPI resetuje timer watchdoga, stąd poniższe przypuszczenia. Zapewne RPI jednym z pinów jest połączony do ATtiny by resetować timer. Prawdopodobnie w programie ATtiny sprawdzasz stan tego pinu i odpowiednio reagujesz zerując timer watchdoga. Jeśli pin ten pozostawiasz jako wejście niepodłączony...
Wg http://www.nongnu.org/avr-libc/user-manu... musisz zmienić nazwę wektora przerwań na TIM0_OVF_vect Porównaj sobie datasheet attiny13 z datasheetem atmegi8 żeby skonfigurować timery. Do skonfigurowania timera w attiny służą rejestry TCCR0A i TCCR0B, w atmedze8 jest tylko TCCR0 http://www.atmel.com/images/doc2535.pdf http://www.atmel.com/Images/Atmel-2486-8...
Możesz czytać timer w przerwaniu INT lub PCINT
Megi nie miałbym czym zaprogramować .... Tym samym programatorem co masz do ATtiny - pod warunkiem że to szeregowy programator, choć równoległym też się da.
... choć nie wiem jaka jest różnica między programowy pwm a "sprzętowym" pwm. Taka jak obsługa oddziału banku przez jedną osobę (kierownika) w stosunku do obsługi przez kierownika i kilku pracowników. W pierwszym przypadku może się uda, ale na wiele więcej kierownik czasu mieć nie będzie lub nawet nie wyrobi się z pracą. W drugim przypadku na pewno...
Polecam jak najszybciej odstawić ten program - bo dzięki niemu na prawdę można sobie procka zablokować i to nawet będąc zaawansowanym ;) Może sobie kolega pobrać program MkAvrCalculator , który z tym prockiem będzie działał w 100% za free a w nim zobaczyć jak wygląda np zakładka "Fusebity uproszczone" do konfiguracji taktowania. Ale też inne zakładki....
Ewentualnie przy większej liczbie sygnałów - przerwania INT lub PCINT. Ale to już bardziej programowy pomiar, przez co mniej dokładny ale dokładniejszy niż w przerwaniu od timera.
Jeśli program wyjdzie drogo zainteresuj się BIS-404 i do tego czasówka np ASO-205 tego samego producenta.
A co ten mikrokontroler miałby robić? Jeśli tylko sterować lewo/prawo + hamowanie i odbierać IR to oba mikrokontrolery będą ok. Jeśli sterowanie silnikiem będzie jakoś bardziej skomplikowane to warto wybrać kontroler posiadający troszkę bardziej rozbudowane timery - nowsze ATTiny lub inne.
Wygląda na to, że procedura obsługi przerwania TIMER0_COMPA_vect się nie wyrabia (ma do dyspozycji 80 taktów). Innymi słowy czas pomiędzy przerwaniami jest krótszy od czasu wykonania kodu procedury obsługi przerwania. Wpisanie na początku procedury instrukcji TCNT0=0; powoduje po prostu wydłużenie czasu zliczania timera 0 o czas trwania prologu procedury...
Hej, praktycznie każdy jaki znajdziesz, będzie się nadawał (nie licząć tych, które się nie nadają). Potrzebujesz 16 bitowego timera i kilku pwm, które znajdziesz w tanim attiny. Nie używałem arduino i wybrałbym napisanie tego w C. Płytkę którą opisałeś też zaprogramujesz w C.
Szukam i potrzeba konieczna schemat lub sewisowka dla tunera /timera AT M77TL -nie wersja L. Wersja TL posiada czujnik sterowania pilotem . Bede uzupelnial zdjeciami. Wersja z czarnym panelem obslugowym L posiadala srebrny .
ATtiny13 - posiada timer i tryb CTC oraz przerwanie od INT0 oraz sześć portów I/O (wyczytałem z dokumentacji, osobiście nie miałem kontaktu). Mała poprawka rejestrów do obsługi przerwania (INT0 oraz ustawienia Timera) pod ATtiny 13 i powinno ruszyć. Jeżeli popełniłem błąd proszę mnie poprawić.
Ok. A jak się ma deklaracja na początku kodu $crystal = 1000000 . Jest to deklaracja jaki ma być wewnętrzny oscylator i tylko do niego, czy należy wpisywać także wartość kwarcu zewnętrznego? To deklaracja każdego taktowania. Niezależnie czy wewnętrznego czy zewnętrznego. Należy też uważać na to żeby wpisywać rzeczywistą częstotliwość taktowania a nie...
Nie, moduł nie ma timera. W wolnej chwili jakiegoś attiny tam wcisnę i zwiększę troszkę możliwości lampki właśnie o łatwo programowalny timer i dimmer :)
Zobacz co się dzieje: TCNT1 ma wartość 65535 i za chwilę nastąpi przerwanie, wykonywana jest instrukcja timer1_=TCNT1 i w tym momencie następuje przerwanie. TCNT1 po powrocie ma mniejszą wartość ale jest już po herbacie - licznik==1 warunek po if jest spełniony PORTB=0 i czekamy na następne przerwanie. Dlaczego 20 cykli jest dobrze? Bo przerwanie musi...
To co masz w komentarzu w tej linii to nieprawda: [syntax=c]TCCR0B |= (1 << CS01); // Start timer at Fcpu/64[/syntax] sprawdź w nocie jaki w rzeczywistości masz prescaler. Inna sprawa że przy takim dzielniku przerwanie powinno zgłaszać się częściej a nie rzadziej. Proponuje ci na spokojnie jeszcze raz wszystko sprawdzić.
http://obrazki.elektroda.pl/7214276300_1... Pilot oparty na projekcie http://www.bigmike.it/ircontrol/ jednak zbudowany na mniejszym attiny13, myślę że można by zastosować dostępny na Allegro attiny4. Zasada działania jest dość prosta. Po uruchomieniu podzespołów (timera i przerwań) attiny przechodzi w tryb power-down, w którym oczekuje...
Witam. W przerwaniu wpisałeś : Timer1 = 131 do zliczenia zostało 65536 - 131 = 65405 Przy wpisaniu do Timer0 tej samej wartości do zliczenia pozostaje : 256 - 131 = 125 impulsów. Myślę, że dobrze zrozumiałem Twój post.
A kto niby zatrzymuje i restartuje timer w Twoim programie?
[syntax=c]ISR(TIMER0_COMPA_vect){}[/synt...
Odpowiedź szukaj na stronie producenta www.atmel.com a dokładniej: http://www.atmel.com/dyn/resources/prod_... Generalnie atmel podaje sporo informacji dotyczącej wykorzystania nowych układów w zastępstwie wycofanych z produkcji i wymaganych zmian. Jedynym co trzeba zrobić to poszukać i poczytać ;) http://www.atmel.com/dyn/products/app_no...
(at)m_hauf - wymiana switchy tudzież "dłuższe" ich przytrzymywanie to sposoby walki z drganiami z góry skazane na porażkę ;) ogólna zasada działania jest zaprezentowana w programie Tylko, że taka parada ifów nie zachęca do analizowania. Kompilacja programu w takiej postaci jaką zaprezentowałem nie generuje żadnych warrningów, ani errorów. Jeśli usuniesz...
Po dalszych zmaganiach udało się wymusić 100Mb na sztywno ale nadal bez autonegocjacji. Na podobnej płytce firmy Olimex z nieco innym PHY działa bez problemu, tamtą od Kamami udało się zwrócić. Jeden problem z płytkami Olimex to grzanie się rezystora który montują jako sztuczne obciążenie MPS (Maintain Power Signature) by aktywne PoE się nie wyłączało...
Ja osobiście jestem przeciwnikiem nadużywania makr, czasmai są przydatne, ale jak pisał (at)gaskoin specyficzne hardwarowo fragmenty kodu lepiej przenieść do oddzielnego pliku i stworzyć coś na wzór prostego HAL. O ile makra jeszcze mogą się przydać np. do zmian stanu pinów IO, czy operacji, które w kodzie wykonywane są często, o tyle wydaje mi się,...
Musisz zaznaczyć cały tekst który chcesz pokazać jako kod, a następnie zaznaczyć napis Code $regfile = "attiny2313.dat" $crystal = 8000000 'kwarc 1MHz $prog &HFC , &HE4 , &H9F , &H00 ' generated. Take care that the chip supports all fuse bytes. Config Timer1 = Timer , Prescale = 64 'timer1 jako licznik 15536 Config Int0 = Rising 'detetor zera...
Do włączenia trybu CTC dla timera 0 służy bit WGM01, a nie WGM02 jak w timerze 1. Z kolei bit WGM01 jest w rejestrze TCCR0A: [syntax=asm] ; start timer in CTC mode ldi r29, (1<<WGM01) out TCCR0A, r29 ; CTC ldi r29, (1<<CS00) out TCCR0B, r29 ; no prescaling [/syntax]
Natomiast jeżeli zamienię OCR1A = 3906,25; wszystko jest ok Jesteś geniuszem jeśli robisz takie sztuczki! Myślę, że ustawienie preskalera na 36,571428571 powinno rozwiązać Twój problem. Albert
Atmel ma noty aplikacyjne poświęcone budowie ładowarki do aku z gotowymi kodami. Na stronie Atmela masz parametric table, można sobie to też wrzucić do excela i dowolnie filtrować. Zapewne najlepszym rozwiązaniem byłby ATTiny z PWM w nazwie, ale z ich zdobyciem może być problem. Każdy nowszy ATTiny ma tez poprawiony PWM i często PLL, tak, że timer może...
Regulator PWM by się przydał: code at 0000h ljmp start code at 000Bh ljmp timer code at 0100h start: mov TMOD, #00000001b mov TH0, #11101010b mov TL0, #01111001b setb TR0 setb ET0 setb EA mov R0, #0d mov R1, #85d mov R2, #170d mov P2, #11111111b mov a, #255d poczatek: inc a mov b,R0 cjne a, b, dalej1 clr P2.0 dalej1: mov b,R1 cjne a, b, dalej2 clr P2.1...
Można wywołać przerwanie TIMERA, w trybie PWM, w momencie przeładowania licznika, a więc gdy licznik przekroczy ustawioną dla danej rozdzielczości wartość maksymalną. Musisz tylko włączyć przerwania dla danego Timera. Oczywiście częstotliwość wywoływania tego przerwania jest ściśle powiązana z ustawieniami PWM (jest równa częstotliwości działania PWM)....
Skoro w przerwaniu to będziesz musiał zastosować dodatkowy kondensatorek żeby wyeliminować drgania styków. W przerwaniu albo robisz prosty licznik albo zaprzęgasz do tego timer.
No toż pewnie, że możesz używać tzn odczytywać wartości z latającego licznika. Ale jeśli zaczynasz się już nim bawić w ten sposób, że chcesz go resetować w locie (czyli zapisywać), że chcesz zmieniać preskaler na inne wartości niż ustawiony został za pomocą polecenia ConfigRC5 (a został tylko ty tego nie widzisz) to nie dziw się, że potem coś ci nie...
(...)chodziło mi o to, że po co stosować w takiej sytuacji zewnętrzny układ RTC i budzić mikrokontroler przerwaniem jak może on sam się budzić od wewnętrznego przerwania timer'a i obsługiwać (...) Zgodzę się, ale gdy mikrokontroler ma dedykowany do tego celu timer (np timer 2 w atmega) taktowany kwarcem "zegarkowym", a attiny takiego timera nie ma.
Inkrementacja jest wykonywana po obiegu pętli. Racja, chyba mi się mózg zapętlił :)
Czego oczekuje NAZE Ci niestety nie powiem. Poszukaj informacji w manualu. Po wyłączeniu nadajnika dioda przy attiny powinna zgasnąć, bo brak PWM to brak PCINT, a tam jest załączana. Możesz dopisać symulację dodatkowych kanałów i sprawdzić, czy coś to pomoże. Dodaj sobie np. drugi output compare do tego licznika, który już masz. Jak zliczysz 6 wyłączeń...
Najlepiej odpowiadalby mi gotowy uklad ktory by to realizowal. No ale jesli nie ma takiego to mysle o zaprogramowaniu jakiegos ATTiny. Pozdrawiam
Moim zdaniem błąd jest w zupełnie innym miejscu. Załącz cały kod.
Jeżeli chcesz wykorzystać Watchdog jako rodzaj timera, to w rejestrze WDTCR powinno się ustawić bit WDTIE. Ponadto za pomocą bitów WDP3...WDP0 należy ustawić prescaler Watchdog'a. Z tego wynika co jaki czas będzie przerwanie. Jeżeli np. potrzeba 8 s, to ustawić należy WDP3 i WDP0, czyli powinno być: https://obrazki.elektroda.pl/1370064900_...
Po pierwsze nie: TCCR0B |= (1<<CS00) | (1<<CS01); a : TCCR0B =(TCCR0B&0xf8) | (1<<CS00) | (1<<CS01); Kolego zastanów się na drugi raz zanim udzielisz odpowiedzi bo niestety ale bzdury piszesz na maxa i na dodatek nikt tego nie zauważa. Nie znasz i nie umiesz się w C posługiwać operatorami dwuskładnikowymi ??? toż operacja:...
Wstaw kod bo schemat blokowy wydaje sie poprawny.
GETRC5 używa licznika TIMER0. Albo TIMER2 jeśli go układ posiada i tak go skonfigurujesz w CONFIG RC5. Aby ustrzec się dziwnych błędów (z adresami linii poza programem) nie zapomnij o wpisaniu nazwy pinu w CONFIG RC5. Sam kod bazuje na dokumentach ATMELa: http://www.atmel.com/dyn/resources/prod_... I tam można całą procedurę prześledzić....
np. Nie da się. TImer0 może zliczać tylko z pinu PD4. I to z PinD.4 a nie PortD.4 ;) Można i z PinD.0, ale nawet przerwania żadnego do tego nie ma więc trzeba by programowo. A nawet jak przerwanie by było (mowa o przerwaniach INTx) to Timer tego nie zliczy. Trzeba by programowo zwiększać zawartość licznika Timera0, ale po cholerę. Jeżeli to ma być...
Zawsze możesz wysterować do testu jedną cyfrę bez używania timera . Ustawiając odpowiednie porty w stan wysoki. Jeśli cyfra świeci dobrze a dopiero podczas multipleksowania zaczyna świecić znacznie słabiej oznacza że nie bierzesz pod uwagę średniego prądu segmentów jeśli przełączasz 4 cyfry to każda z nich świeci przez 1/4 czasu więc prąd segmentów...
Pozmieniałem troche program ale nie działa prawidłowo prędkość strasznie skacze od 0 do 240 km/h -bo nie zerujesz co 1 sec. licznika impulsów (Timer0), ponadto ,masz zbyt duży błąd zaniżając zakrses zmienmnej "Licz" - as byte Porównaj: $regfile = "2313def.dat" $crystal = 8000000 Config Lcdbus = 4 Config Lcd = 16 * 2 Config Lcdpin = Pin ,...
Problem pewnie tkwi w tym ze masz żle ustawione fusebity. Jest taka opcja ze moża sygnał zegarowy dzielic prze 8 i wtedy procesor pracuje 8 razy wolniej. Zamias sie bawic w fusebitach mozesz po prostu zmienic program. Zamiast: Prescale = 64 wpisz: Prescale = 8 W załączniku są pokazene ustawienia fusebitów. Strzałką zaznaczyłem fusebi odpowiedzialny...
Na razie patrzyłem tylko w dokumentację Bascoma... dokumentacje tego procka ma coś koło 250 stron :/ Jeśli już wiesz ogólnie jak działają avr-y , to wtedy dokumentację czytaj wybiórczo , czyli tę część która Cie interesuje ;) Z dokumentacji Bascoma wynika, że stosując polecenie config timer nie da się ustawić prescalera dla trybu PWM... Między innymi...
Dlatego właśnie napisałem, że w swoim programie używasz niewłaściwego przerwania. Znajdź odpowiednik tego które podałeś wyżej, ale dla ATtiny2313: http://www.nongnu.org/avr-libc/user-manu... Do tego właściwą flagę w rejestrze TIMSK. I pokaż cały program po tych modyfikacjach. Teraz będziesz już na właściwej drodze do sukcesu...
Serwo steruje się sygnałem 50Hz. Czyli 20ms ma okres. W czasie tego okresu ma być stan wysoki zależnie od położenia od 1 do 2ms. W związku z tym ogłaszam, co następuje: 1. Twoja eliminacja drań styków niszczy całą czasówkę. 2. Żeby serwo trzymało dane położenie, musi dostawać sygnał o odpowiednim wypełnieniu cały czas. Podkreślam cały czas.
Jak użyć timera (tzn. jak wyciągnąć z niego np zmienną dodawaną, lub resetowaną co określony czas?) Boję się jeszcze TIMERów :) Nie ma się czego bać. Oto prosty programik, który na pewno pomoże. 796182 Jednak dziwię się dlaczego nie używasz sprzętowego PWM. Attiny 2313 posiada ich cztery. Na każdym z timerów po dwa. [syntax=vbnet]Dim R As Integer Dim...
Load Timer0 = 45 - jak sądzę oznacza nadanie wartości początkowej timerowi. Oznacza to, że powinieneś załadować tę wartość do rejestru TCNT0. Zakładam, że funkcja inicjująca BASOM inicjuje go w tryb normalny (czyli mode 0). W funkcji przerwania: - Incr A, Incr B - po prostu dodaj jeden do zmiennych A i B lub wykonaj inkrementację - If A = 305 Then ......
a to już zupełnie inna historia... Generalnie: nie liczyć zmiennoprzecinkowo - za mały procek - nie pomieści biblioteki. Trzeba liczyć stało pozycyjnie, np tak: x * 0.83 = (x * 849 ) / 1024; // czyli x * 0.84 = (x * 849) >> 10; jak masz zmienną a powiedzmy z zakresu (0.0 , 1.0), to mnożysz ją tak, żeby była z zakresu 0...1023 i zamiast x *a masz (x...
Nie śmiga w ten sposób, że na wyjściu (Pinb.1) nic się nie zmienia. Czy w ATTINY2313 wyjściem Pwm1a nie jest przypadkiem PB3 / 15 nóżka? Nie mam tutaj dokumentacji pod ręką. Dopisz sobie jeszcze: Set Portd.0 Set Portd.1 gdzieś przed pętlą Do..Loop. Powodzenia i wytrwałości życzę! :) Andy
Dodaj Waitms przed Loop: [...] Waitms 10 Loop
$regfile "attiny2313.dat" $crystal = 1000000 Config Portb.4 = Output Dim I As Byte Config Timer0 = Timer , Prescale = 1024 On Timer0 Przerwanie 'Start Timer0' nie potrzebne Enable Timer0' zezwolenie na przerwanie timera Enable Interrupts Do Loop Przerwanie: Incr I If I > 10 Then Toggle Portb.4 I = 0 End If Return
Dla tiny oczywiście jest: $regfile="attiny2313.dat" W funkcji czas zastosuj: Timer1 = Timer1+3036 zamiast Timer1 = 3036
Zobacz czym można wyzwalać ADC w tym procku. W wielu przypadkach można ADC wyzwalać zboczem timera. Jeśli chcesz robić większe magię przy pomocy timera i ADC, to raczej użyłbym jakiegoś nowszego ATTiny/ATMega z event system.
Witaj, Brakuje jeszcze paru informacji: 1. deklaracji zmiennej licznik 2. gdzie definiujesz zegar ? 3. czy prawidłowo masz ustawione fusebity?
ATtiny to tylko trochę odchudzony mega. Timery też ma podobne, a głównie tego potrzebujesz do OW. Z czym konkretnie masz problem?
Niestety symulacja programowa liczników w trybie FastPWM jest nieadekwatna do tego co rzeczywiście robi procesor. Trzeba uruchomić w docelowym układzie lub przez JTAG ICE (ale to są koszta).
Mam posciagane manuale i przeczytalem. SRAMu ATtiny ma 64B Flash ma 1kB. ATtiny ma 1 Timer 8-bitowy z 2 kanalami PWM wiec tez powinno byc OK. Wiec jak zrobic zeby sie zmiecilo i nie wywalal mi errorow ??
Tak obliczenia są w porządku. Wartość do TIMSKu możesz wgrać taki sposób jak napisałeś ale ładniej jest: ldi r16, (1<<TOIE1) out TIMSK, r16 Pamietaj że po wywowałniu procedury obsługi przerwania musisz odłożyć na stos wskażnik Z. W przerwaniu musisz załadować od nowa TCNT1. Procedure przerwania zawsze koczymy instrukcją reti. A co do wartości...
Jeśli mam na płytce złącze ISP to po za programowaniem piny do niego podłączone mogą również służyć jako normalne wejścia/wyjścia tak? Z góry dzięki za odpowiedzi. Tak.
Już tłumaczę. Bazując na mojej aktualnej wiedzy musiałem tak zrobić, ponieważ: 1) LCD jest fizycznie mocno oddalony od Atmegi, wykorzystanie I2C wszędzie, gdzie to możliwe upraszcza "kabelkologię". Przedstawiony układ to de facto dwa układy: pierwszy - Atmega - kontroler pomp i LED oraz drugi - podłączony poprzez I2C LCD i wspomagające Attiny, 2) Biblioteka...
O co mi dokładnie chodzi: W helpie Bascom jest napisane, że w przypadku kości 8535 mam do dyspozycji preskalery 1, 8, 32, 64, 128, 256, 1024, a dla kości M103 1, 8, 32, 64, 256, 1024. Ja zaś posiadam kość M32 i w PDF, który dotyczy tego mikrokontrolera jest tabelka na 127 stronie, która zawiera w sobie jakby wykaz dostepnych częstotliwości, ktorymi...
Spacja w linii polecenia jest traktowana jako separator. Kompilator nie może znaleźć pliku o nazwie "with" - masz to jawnym tekstem. Nie używaj nazw plików ze spacjami.
Witam Serdecznie, Chciałbym dobrać mosfet do mojego schematu. Jest to timer oparty na Attiny 2313 a mój problem brzmi mianowicie: Mam drut oporowy, o oporności 4 ohm na 1 metr. Pociąłem go na odcinki 1 cm, a wiec na odcinku 1 cm ma oporność rzedu 4/100 = 0,04 ohm. Z prawa Ohma wyliczyłem, że prąd który przepłynie przez opornik jest : I= U/R a więc I=...
Tak sobie myślę, że jak już kombinować z przerzutnikami czy timerami to najprościej zastosować np. Attiny 13. Jest malutki (w obudowie SOIC), wymaga mało elementów zewnętrznych i do tego bardzo tani.
Timer, który dodałeś generuje najwyraźniej przerwania które blokują przerwania z timera od odliczania czasu. Nie wiem czy sie da ustawić priorytety przerwań w ATtiny, ale jeśli sie da to daj temu o odliczania czasu wyższy priorytet żeby go ten drugi timer nie wykluczał czasem. Myśle że powinno pomóc. Powodzenia.
Koledzy, nie wiem jak to jest w Attiny, ale spotkałem się z dwiema rzeczami w innych uC: 1. Timery mają własne przerwania, czyli nie musisz zajmować żadnego innego przerwania, które może Ci się przydać do czegoś innego. 2. Jest coś takiego jak priorytet przerwań, zatem jeden z timerów będzie ważniejszy, jeśli obydwa naraz wygenerują przerwanie.
Spróbuj zrobić tak Co4ms: 'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms Timer0 = 6 'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów Incr Licznik If Licznik = 6 Then 'zmienna Licznik liczy do 6 aby Licznik = 0 'sprawdzanie stanu przycisku następowało If Pind.0 = 0 Then 'co ok.24ms If Pomoc = 1 Then 'jeśli zmienna Pomoc...
Pomyliłem się- to jest ATtiny 13 a nie ATtiny2313. To ma tylko jeden timer- TIMER0. I na nim musisz wszystko zrobić. Ale musisz posprawdzać ustawienia rejestrów- moga mieć inne nazwy i ustawienia.
Dlaczego nie Timer ? Obsługa przerwania TIMER0_OVR w niczym nie przeszkadza w działaniu PWM, a mamy w ten sposób jakąś podstawę czasu, który można sobie odliczać w tym przerwaniu. Dokładność co do 3 miejsc po przecinku nie jest taka istotna przy dekodowaniu RC5... Co do kodu - to nie ma prawa tak działać, obsługa przerwania powinna być jak najkrótsza,...
Witam. Na początek napiszę że to ma być mój pierwszy program napisany w tym języku i pierwszy kontakt z mikrokontrolerami. Nie mam pomysłu jak się zabrać za uruchomienie jakiegoś "zegara". Wydaje mi się że wtrącenie w pytaniu „jakiegoś zegara” wprowadza ludzi w błąd. Z dalszej części wynika że raczej potrzebujesz obsługi TIMERA wbudowanego...
Albo Config- albo str.112 pdf.- i poprzednie i następne. Polecam to drugie rozwiązanie. "tak by była możliwość dodania czasu martwego. " Nie da się z automatu. Mają to ATtiny 25/26/45/85- o ATMega nic mi nie wiadomo. W ATtiny25/45/85 znajduje się układ DTG-Dead Time Generator- to o co Ci chodzi.
To po prostu fototranzystor odbiorczy+dodatkowy, i sygnał z takiego "odbiornika" (np. post #29) wrzucasz na Timer skonfigurowany podobnie jak miernik częstotliwości. Ciebie interesuje jedynie, czy jest odbierany sygnał czy nie, czyli z odpowiednim bramkowaniem, jeśli nastąpi przepełnienie Timera to sygnał jest odbierany, jeśli nie nastąpiło to brak...
Jeśli autorowi chodzi o bardziej precyzyjny timer, to zastanawiam się nad Attiny 13 lecz z modyfikacją kodu. [url=http://www.elektroda.pl/rtvforum/to...
1. Ustawienie dzielnika częstotliwości (prescallera) włącza licznik. 2. Po wystąpieniu przepełnienia licznik automatycznie liczy od zera. 3. Tak, przerwania są globalnie wyłączane na czas obsługi któregoś z nich.
Co do kwarcu to definiujemy go zawsze, niezależnie od tego czy proc pracuje na zewnętrznym, czy na wewnętrznym, bo to jest informacja dla kompilatora, wg jakiej wartości ma wyliczyć czasy dla różnych instrukcji. Jeżeli to jest "nówka sztuka" to pracuje na wewn. 1MHz. Jak sam zauważyłeś, instrukcja "Loop" powinna znajdować się po ostatnim "Endsub", ale...
Przerwania i Timery to rozwiązanie idealne i książkowe, na początek, ale tylko do nauki możesz zrobić na Wait'ach, ale nie polecam tej metody bo prowadzi do złych nawyków...
Spróbuj może jeszcze zamiast używać funkcji beep(), w pętli głównej programu po prostu jej treść wpisać i zobaczyć co będzie. Na początek pojedyncze bipnięcie, potem dwa, a jak to będzie działać to trzy i tak do tyle ile chcesz. Zwróć też uwagę że rejestr OCR1A jest 16 bitowy, a rdzeń Twojego AVR jest 8 Bitowy. Czyli zapis tego rejestru nie odbywa się...
Może spróbuj w ten sposób : $crystal = 4000000 Config Pind.5 = Output 'ustawienie wyjścia na pinie który standardowo sygnalizuje przepełnienie timer-a Config Timer0 = Timer , Prescale = 1 'ustawienie timer1 dzielnik 1 On Timer0 Przerwanie_timer1 'wywołanie przerwania po przepełnieniu timera Timer0 = 145 'wartość początkowa od której timer bedzie zliczł...
heh w moim pliku nagłówkowym io dla tego uC (iotn2313.h) nie ma deklaracji rejestru TCCR0, jest deklaracja rejestrów TCCR0A oraz TCCR0B. Zapewne to ich należy użyć, ustawiając odpowiednie bity w A i B. W twoim wypadku, spróbuj TCCR0 zastąpić przez TCCR0B EDIT, i wywal linijke: int TCCR0 Sprawdziłem w jednym z moich projektów, wprowadzając timer1 w tryb...
Nie lepiej użyć timera w trybie pwm i wygenerować taki przebieg? Tutaj masz kalkulator do timera: http://www.et06.dk/atmega_timers/
Aż se na płytce złożyłem ten układ i program sprawdziłem. No i faktycznie świeciło na stałe. Do poprawienia były bzdety. Wklejam jeszcze raz, przetestowany i na 100% wszystko działa jak chciałeś [syntax=basic4gl] $crystal = 8000000 'Deklaracja częstotliwości kwarcu $regfile = "attiny2313.dat" Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A...
Nie możesz używać Waitms nigdzie indziej poza pętlą główną. Trzeba to obejść. Wiadomo, że w podprogramach jesteś co 4ms. Co do Portb.5 to nigdzie nie widzę zerowania i dlatego jest ustawiony non stop. [syntax=basic4gl]$regfile = "attiny2313.dat" $crystal = 1000000 Config Portb = Output Portb = &B1111111 Config Portd = &B11111000 Portd = &B1111111...
Nie bawiłem się ATtiny2313, ale jeśli ma PWM to da się zrobić jakieś odtwarzanie dźwięku z próbek. Robiłem takie coś na ATmega128. Puszczasz generator PWM na najwyższej częstotliwości i jakiś timer do generowania przerwania okresowo. Timer determinuje częstotliwość prókowania. Podczas każdego przerwania timera wpisujesz nową próbkę do rejestru generatora...
Jeśli WD ma być "tylko" do budzenia to się zgodzę. Przyzwyczaiłem się WD zostawiać sobie też dla bezpieczeństwa aplikacji. If WDE is set, the Watchdog Timer is in Interrupt and System Reset Mode. The first time-out in the Watchdog Timer will set WDIF. Executing the corresponding interrupt vector will clear WDIE and WDIF automatically by hardware (the...
Witam Musisz skonfigurować Timer i za jego pomocą odliczyć 4 minuty. $Crystal = 11059200 Config Timer1 = Timer, Prescale = 1024 Load Timer1 , 10800 On Timer1 Sekunda Config Pind.1 = Output : Wy Alias Portd.1 Config Pind.2 = Input : We Alias Portd.2 Dim Licznik_1 As Byte Dim Wsk As Bit Enable Timer1 Enable Interrupts Licznik_1=0 Wsk = 0 Do If...
Jeśli chcesz robić odliczanie w pętli głównej to zrób tak: $regfile = "attiny45.dat" $crystal = 4000000 Config Pinb.0 = Output 'wyjście Config Pinb.1 = Output 'wyjście Config Pinb.2 = Input 'przycisk Portb.0 = 1 Portb.1 = 0 Portb.2 = 1 Config Timer0 = Timer , Prescale = 1024 Enable Interrupts Enable Timer0 Start Timer0 On Timer0 Zegar Dim...
Nie wiem, czy Twoja metoda obserwacji sygnałów jest poprawna, ale podłączanie przycisku bez eliminacji drgań pod wejście przerwania jest przepisem na kłopoty. Jeśli chcesz testować tego typu układ, to musisz sobie zrobić generator czystych impulsów. Przykładowo: przycisk pod PB4, generacja impulsu na PB3, które zwierasz z PB1. W pętli głównej odczytujesz...
Poza zmianą nazwy portów będziesz musiał odpowiednio skonfigurować obsługę timera bo z pewnością on jest wykorzystany do liczenia czasu i obsługi wyświetlacza led .
..Niestety nóżki procesora ani drgną. Poczytałem wątki na forum, przeczytałem cały rozdział w nocie o Timer0 i 0 pomysłu na dalsze próby. Nie "drgają" :D , bo obie (OC0A i OC0B) są ustawione w tryb normal port operation - patrz tabela 27 i tabela 30 dokumentacji ATTiny13. Spróbuj np.: TCCR0A=(1<<WGM00)|(1&l...
Dawno Bascoma nie używałem ale to będzie coś takiego: On int0 czas 'przerwanie zewnetrze (wejście impulsów) do czestotliwosc=1/czas 'obliczenie czestotliwosci z czasu pomiedzy impulasmi loop czas: stop timer0 'zatrzymaj timer czas=timer0 'odczyt z timera timer0=0 'wyzerowanie timera start timer0 'ponowne uruchomienie timera return Oczywiście...
Potrzebuje z sieci 230v odczytywać częstotliwość, napisałem program i coś nie bardzo chce działać. Przy tych ustawieniach z kodu hz skacze miedzy 49 a 50 impulsow. Można jakoś to dokładniej mierzyć ? [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> volatile uint8_t timer0_przerwanie = 0; volatile uint8_t licznik; volatile uint8_t...
Skoro masz taktowanie 8MHz zamiast 1MHz, to dlaczego dzielisz przez 32 a nie przez 8? Bo mam prescaler 256. 256 / 8 = 32 Czyli timer tyka co 32 us.
Chwile sie pobawiłem i zastanawiałem sie czemu mi zle działa dioda podpięta do PORTB.3 a to jest związane z OCR1A dlatego zle działała. Nie dlatego, nie ma tu żadnego związku. OCR1A jest to wpis do rejestru, który służy do określenia górnej granicy (TOP) do jakiej ma liczyc Timer1 co odpowiada upływowi czasu tu akutat 1 sec., zaczym się wyzeruje. Jeżeli...
Poczytaj tematy i uzyj szukaj. Attiny2313 nie posiada adc wiec potencjometrem nie dasz rady tego sterowac. Domyslam sie ze robisz do w bascomie. Tu masz kawalek kodu jak konfigurowac timery zebys mial 4 pwm. '******* procek ******* $regfile = "attiny2313.dat" $crystal = 8000000 $hwstack = 30 $swstack = 30 $framesize = 30 '****** dioda R/G...
attiny timer timer prosty attiny timer model attiny
połączenie równoległe grzałek czujnik pozycji fotela regeneracja rozdzielaczy
Sony KDL-32S5600 - słabe podświetlenie, HDMI, pilot Brak dźwięku przez światłowód - jak rozwiązać problem?