Gdy procesor jest w trakcie wykonywania procedury przerwania, następne przerwanie nie będzie przyjęte , gdyż procesor (nie kompilator!) zeruję flagę globalnego zezwolenia na przerwania. Tak samo flaga bieżącego przerwania (tego, którego procedura obsługi jest wykonywana) zostaje automatycznie wyzerowana. Po zakończeniu przerwania flaga globalnego zezwolenia...
Obstawiam, że się BASCOM nie wyrabia z obsługa przerwań co 13us. Ale na BASCOM-mie się nie znam. 4.3ms daje przerwanie co ca. 16us, co by się zgadzało z obserwowaną czestotliwością ok. 30kHz.
Widzę że muszę trochę sprostować. 1. Nawet kosmicznie często wywoływane przerwanie zdąży się wykonać choć by nie wiem jak długo ono trwało, bo przerwania po wejściu w obsługę jakiegoś przerwania są blokowane i odblokowywane są dopiero po zakończeniu się obsługi tego przerwania. Więc twierdzenie że przerwanie nie zdąży się wykonać w ciągu 128us bo samo...
Co zrealizować? Programowe zliczanie impulsów? Ustawiasz timer tak, żeby generował przerwanie co 100 us, sprawdzasz stan portu, robisz xor z poprzednim stanem i testujesz, które bity są ustawione - ustawiony, znaczy zaszła zmiana stanu, czyli inkrementujesz odpowiednią zmienną.
Do atmegi8mki Ci może nie wejść obsługa FATu. Poszukaj na elektrodzie FAT SD Atmega i coś znajdziesz gotowego. - Napewno nie Bascom :D Potem jakieś przerwanie i mierzyć czas i robić systematyczne opróżnianie buffora na drabinke R2R albo DAC.
jak chcesz takie duze czestotliwości mieżyć to musisz użyć timera żeby liczył zewnętrzne impulsy, wtedy drógim timerem wyzwalasz przerwanie co określony czas (im dłuższy tym lepszy bo pomiar dokładniejszy) liczysz ile było ilmpusów z zewnątrz w okreslonym czasie. wydaje mi się że tą metodą dało by sie mieżyć nawet do 100Mhz ale jest jedno zalożenie...
Zrób to tak: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 4000000 Config Timer0 = Timer , Prescale = 256 'onfiguracja timera, przescaler 256 On Timer0 Odmierz_1s 'włączamy timer0 Dim Licz_8ms As Byte 'definiujemy zmienną pomocniczą Dim Sekundy As Byte Enable Interrupts 'włączamy zezwolenie na przerwanie Enable Timer0 Load Timer0 = 125 'ładujemy...
OPIS FUNKCJI LOAD Action Load specified TIMER with a reload value. . . . It will do the calculation. (256-value) So LOAD TIMER0, 10 will load the TIMER0 with a value of 246 so that it will overflow after 10 ticks. TIMER1 is a 16 bit counter so it will be loaded with the value of 65536-value. Czyli u ciebie ładuje 65536 - 65436 = 100 Przepełnienie właśnie...
Ten sam kod, który zaprezentowałem w pierwszym poście , natomiast przerwanie wywołane już na nodze portb.0 i działa zmienna nie jest nadpisywana. Cała reszta kodu bez zmian poza zmianą przerwania. Przerwania skonfigurowane prawidłowo. Moze przerwania masz skonfigurowane prawidlowo... ale..... Czy mozesz wyjasnic w jakim celu, w obsludze przerwania...
http://obrazki.elektroda.net/94_12891659... Witam, własną konstrukcję prezentuje na elektrodzie po raz pierwszy, jestem otwarty na wasze opinie, pomysł na konstrukcję miałem już dawno temu, kupiłem wyświetlacze, jeszcze w szkole zrobiłem płytkę pod wyświetlacz (co zresztą widać) ale późnej zabrakło i wiedzy i chęci. No i ostatnio zafascynowany...
Symulator Lasera http://images49.fotosik.pl/261/c05af04e8... Fot.0 Jedno ze zdjęć prototypu symulatora lasera Jest to opis kilku symulatorów zaprojektowanych i działających przeze mnie . Zarówno tych najprostszych opartych na popularnym tajmerze 555 , jak również do konstrukcji profesjonalnych opartych na mikrokontrolerach jednoukładowych...
niezależnie kiedy odczyta powinno wyzwolić w jednym i tym samym momencie czyli na sygnał pochodządy z int Pod warunkiem, że flaga przerwania od Int0 nie jest ustawiona, w przeciwnym przypadku wykona się natychmiast. Nie wiem czy taka konstrukcja: disable int1 --->wyłącz przerwanie end if Return ---> rzeczywiście wykonuje się RETI, które kasuje flagę...
Dziwne jest to że w starszej wersji ten kod działa, a raczej nie powinien :). W helpie pisze że funkcja GetRC5 wykorzystuje timer0 i przerwanie od tego timera. Umieszczenie tej funkcji w przerwaniu INT0 wydaje się być błędne. Przerwanie od timera się nie wykona, dopóki nie zakończy się obsługa przerwanie INT0.
Witam Jestem w trakcie robienia zagara nixie ze strony http://mirley.firlej.org/zegar_nixie Mikrokontrolerem jest Atmega8 a wkład zrobiony na Bascomie. Potrzebuję dodać opcję chwilowego wyłączenia lamp, w celu zabezpieczenia lamp przed zatruciem. Bardzo proszę o pomoc. To kod: '************* Konfiguracja uC ***************** '***************************************...
Normalnie (czytaj: nie znam bascom) można to rozwiązać na kilka sposobów. Możesz na przykład wystartować pomiar ADC, a stan bitu ADSC sprawdzać gdzieś w pętli głównej (realizując inne zadania) i zareagować dopiero, gdy bit ten wskaże na zakończenie pomiaru. Możesz także ustawić przerwania ADC i wtedy po zakończeniu pomiaru przerwanie się wykona. Mogę...
czy jest mozliwe zmienienie podprogramu przerwania np z labe 11 a w innej czesci programu aby to samo przerwanie Int0 np przechodzilo do podprogramu labe 13 ? chodzi mi jezyk bascom i układ Atmega8
A co jest nie tak? Możesz opisać dokładniej problem. Load Timer0 , 1 Po tej komendzie licznik przepełni się po jednym cyklu. Czy na pewno to ma Tylko jeden cykl? Ciągle jest wykonywane przerwanie i dlatego procesor nie ma czasu na resztę operacji.
Witam. Nie używaj lookup. Zrób sobie tablicę cyferka[10], nadaj jej wartości na początku programu i będziesz miał port=cyferka[d]. Wszystkie obliczenia rób poza przerwaniem. W przerwaniu tylko wyświetlaj dane na wyświetlaczu. I to tylko jednym naraz. Mój przykładowy programik (zegarek z termometrem do motocykla) A1 A2 A3 A4 to zmienne, które program...
no tak a co bedzie jak podczas wykonywania polecen INT0 wystapi przerwanie INT1 to wtedy zostanie ono pominiete... dziala to w jedna strone
Może sie komuś przyda ... działajacy kod sprawdzałem testowalem niby wszystko działa czestotliwosc PWM = 123 Hz $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.1 = Output 'Konfiguracja 4 pinów wyjściowych PWM Config Pinb.2 = Output Config Pinb.3 = Output Config Pinb.4 = Output Dim Wyp(4) As Byte 'zmienne wypełnienia Dim Licz...
Jakie są założenia co do rozdzielczości oraz stabilności generowanej częstotliwości (jitter) ? Generacje częstotliwości kHz na AVR najlepiej zrobić przez zastosowanie DDS. jeden timer w ctc generuje przerwanie w równych odstępach, resztę załatwia się w przerwaniu (trochę tylko kiepsko bo bascom zmarnotrawi dużo czasu- najlepiej tę część napisać w asm).
Nie jestem pewny czy procesor zdąży wykonać to co masz w tym przerwaniu , zanim przyjdzie następne (mam na myśli wszystko ).Program w przerwaniu ma być krótki , chyba że pierwsza linijka jest taka " Disable timer0 " , ale w twoim programie taka instrukcja raczej odpada. I jeszcze jedno , co się dzieje jeżeli podczas transmisji po i2c lub 1Wire przyjdzie...
1. BASCOM 2.0.7.5 2. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portd.7 , Rs = Portb.0 Config Timer0 = Timer , Prescale = 256 Enable Timer0 , On Timer0 Przerwanie Stop Timer0 Config Portb.5 = Output : Set Portb.5 'podświetlenie...
Ale my tu nie mówimy o świetlówkach, LED tylko o żarówce. Świetlówki wymagają bardziej rozbudowanego sterowania. Niepotrzebny jest R5 i to R5 idzie nad ścieżkami...mam go aktualnie zwartego. Jest wiec tylko R4= 220R. Dla świętego spokoju zwarłem R4 i zostawiłem R5...i jest podobnie. Dodanie dławika 10nF X2 i R różne próbowałem 10R-22R-68R nie poprawia...
Wyjątkowo zbałaganiony program. Nie wiem czy Bascom poradzi sobie z tym gosub Przerwanie. Traktujesz to jako procedurę obsługi przerwania, więc na końcu w asm będzie reti, a jednocześnie w programie potraktowałeś to jako zwykły podprogram. Wiele kompilatorów tego nie pozwoli zrobić. Popraw to - przecież zamiast tego Gosub przerwanie wystarczy wpisać...
Witam Mam problem programuje w Bascom avr procka atmega8 zrobiłem sobie transmisje RS i mam problem ogólnie wszystko pięknie ładnie działa tylko że w momencie jak wystąpi przerwanie po przez funkcje print zostaje wysłany znak ze zmiennej po czym przechodzi do funkcji waitkey() i oczekuje na odebranie znaku no i właśnie ... oczekuje ale nic nie widzi...
hej robiw -> próbuję tę twoją procedurę powyżej ale za chiny nie chce mi się ani razu to przerwanie wywołać. Z drugiego procka próbuję do tego wysłać coś poprzez I2C w ten sposób: do I2cstart 'Start I2cwbyte 128 ' adres układu SLAVE I2cwbyte 65 ' dana do przesłania do Slave I2cstop 'Stop wait 1 loop na magistrali mam jeszcze PCF8583 i z niego odczyt...
Małe sprostowanie obliczenia były dla zegara 8MHz. Do autora tematu: nie ma możliwości abyś uzyskał przerwanie co 180s ! Chyba że użyjesz kwarcu 32.768kHz co jednak znacznie spowolni procka. Proponuję abyś zrobił tak jak radzi kolega Wojtek75.
No właśnie, odnośnie tak małej ilości cykli na przerwanie to dlatego zapytałem co będzie jeżeli przerwanie nie zdąży się wykonać i wygeneruje się nowe. Takie coś mogłoby chyba działać, jeżeli przerwanie polegałoby jedynie na zmianie stanu bitu, a tu jeszcze musi być ta przerwa po paczce impulsów. Dobrze, to czyli czas na podłączenie kwarcu, postaram...
Ten drugi pomysł jest moim zdaniem lepszy. Do tego możesz użyć końcówki przerwania INT - ma konfigurację zbocza, którym jest wyzwalane przerwanie.
"Lubię" takie pytania ogólne. Jak zwykle doszukuje się ktoś problemu nie tam gdzie trzeba i dziwi się, że coś nie działa. Stąd te pomysły o zmianie stanów na portach spowodowanych przez przerwanie. Samo przerwanie nie nie może "namieszać" i nigdy nie miesza. Zawsze powodem zamieszania jest programista i jego program czy też sam układ, który bywa totalnie...
No niestety: zajrzyj do helpa . Dokładniej tu, gdzie jest opisane jak: - skonfigurować timer - włączyć timer - wyłączyc timer - odczytać stan timera Pseudokod: SKONFIGURUJ TIMER ZRESETUJ TIMER DO WLACZ TIMER (tu kod ktory sprawdzasz) WYLACZ TIMER ODCZYTAJ TIMER (tu obsluga wartosci wzietej z timera) ZRESETUJ TIMER LOOP Zeby takie pomiary...
Od kad zmienilem bit CKOPT w fusach dziala bardzo stabilnie A więc wniosek , że program to jedno , a sprzęt to ... drugie :D za kazdym razem dostaje informacje AT+CSQ+CSQ: 19,99OK Czyli telefon wysyła echo. ... Nie rozumiem do konca czemu bez zerowania bufora tez dziala ..ale wstawielm to co podeslales ;) Jeśli odczytasz wszystkie dane w buforze ,...
Już kiedyś pisałem o błędach bascoma w obsłudze przerwań (raz wywołane jest potem cyklicznie generowane pomimo, że czynnik wywołujący przerwanie już zanikł, bo bascom zapomina przy kompilacji kodu o fladze w rejestrze przerwań). Błędów jest jak się okazuje więcej. Szkoda tylko, że siedzi się nad tym czasami kilka godzin...bo uznanie błędu kompilacji...
duzo bym nie zmienil dodal jeszcze kondensatory 100nF do kazdego ukladu scalonego. Jedyne co to bym pozmienial wyjscia np. zostawil bym sobie wolne int1 przerwanie (ostatnio doswiadczylem jaka to cenna rzecz) gdybys chcial dodac odbiornik podczerwieni itp. zostawil bym wolne wyjscia pwm i 2 podlaczyl do mostka-h l293d co by pozwolilo ci jeszcze sterowac...
Jeśli chodzi o resterty, to czy mogą one być spowodowane dużą ilością zmiennych zadeklarowanych, oraz to że wykożystuje przerwanie ( 42 zmienne i przerwanie na przepełnieniu TIMER1 co 0,2sek). Czytałem gdzieś że zmienne powinny być deklarowane w odpowiedniej kolejności. W symulatorze działa ok ( i tam się niezawiesza), chociaż działa bardzo wolno. Gdyby...
Eeeej panowie, nie trzeba wchodzić tylnymi drzwiami, nie trzeba stosować żadnych sztuczek i nie trzeba koniecznie tworzyć przerwanie, które jakoś tam "na siłę przerwie input". To przerwanie już istnieje, (jest wykonywane gdy na port obsługujący RC5 zaczynają napływać dane) więc nie jest tworzone na siłę. Oczywiście można by program napisać inaczej,...
Witam Mam za zadanie wykonać sterowanie fazowe żarówki. Wykorzystuje układ Atmega8 oraz Bascom 1.1.9.5. Poniżej przedstawiam kod: Enable Interrupts Enable Int0 Enable Timer1 Config Int0 = Falling Config Timer1 = Timer , Prescale = 1 On Int0 Przerwanie On Timer1 Opoznienie Load Timer1 6000 Do Loop : End Przerwanie: Start Timer1 Return Opoznienie:...
Szanowni Panowie! Mam prośbę, skupmy się na sednie problemu. Atmel wyraźnie wskazuje, że atmegę8 można zastąpić atmegą88. Przygotował stosowną notę, w której opisuje związane z tym problemy, link do noty został uprzejmie podany w jednym z wcześniejszych postów. Ja rozumiem, że procesory nie są idnetyczne, ale ... proszę o uwagę ... napisałem w moim...
ja ci kolego nie podam gotowca z 2 powodów, bascom mnie zupełnie nie interesuje a druga sprawa ze net jest pełen przykładów. A różnica jest zasadnicza bo sprzetowa transmisja aby wysłać znak potrzebuje takich czynności jak ustawienie interface (predkość, polaryzacja sygnału) a potem tylko trzeba ustawić pin odpowiedziałny za sygna CS urzadzenia oraz...
Tego się tak nie robi. Uruchom przerwanie timera. Zapisz wartości strowania portów dla kolejnych kroków w tablicy stałych. W przerwaniu timera testuj przycisk, a co pewną liczbę przerwań wyrzucaj na porty kolejną wartość z tablicy.Przy takim podejściu cały kod zmieści się w kilkunastu liniach, może dwudziestu paru, a jego długość nie będzie zależała...
przerwanie połączenia pomiędzy czujnikiem a procesorem spowoduje, że wartość odczytana = 0 1 - odczytaj wartość na wejściu ADC (zakres 0 ...1023) 2 - jeżeli wartość odczytana < np. od 10 to załącz LED jeżeli chcesz sprawdzić czy odległość zmieniła się z 15 cm na mniej niż 12 albo więcej niż 20 to w punkcie 2 sprawdź czy: jeżeli wartość odczytana...
Propozycja z 2 timerami może jest koncepcyjnie prostsza, ale zobaczmy - zalecana fext dla timera powinna być < fclk/2.5, czyli TOP timera generującego ustawiasz na min. 2 -> fext = fclk/3 (wypełnienie 1/3 lub 2/3). Stąd widać, że potrzebujesz 3x większej częstotliwości zegara niż w przypadku rozwiązania z pojedyńczym timerem. Poza tym z dwoma...
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
Jutro sprawdzę to wyprowadzenie INT. ale ono daje przerwanie na procesor?? Ja w tej chwili nie mam go nigdzie podłączonego! Zauważyłem jeszcze jedna rzecz, mianowicie napisałeś że kwarc ma 32,768, ja ostatnio kupiłem 30 a próbowałem na 32 i 12 ale wszystko w MHz a jak to powinno być??? Napiśz dokładnie o jaki kwarc chodzi a co będzie przy takim jakie...
Witam! Z pewnością chcesz wykorzystać mechanizm "polling" :) jak to się ładnie nazywa w dokumentacjach. Po pierwsze w ATmega8 nie ma flagi Tirf.0, jest natomiast flaga Tifr.0 o którą zapewne Ci chodzi, dlatego pewnie nie do końca che działać. ;) Pozatym aby używać przerwań w ATmega8 musisz też odblokować globalny system przerwań, ponieważ po starcie...
A skąd wytrzasnąłeś te 46875 :?: Pisano o tym setki razy , ale powtórzę ;) przyklad w Bascomie: $Crystal = 4000000 Const T1_value = 65536 - ( _xtal / 64 / 4) ... Timer1 = T1_value Zważywszy , że Bascom generuje procedury przerwania ... powiedzmy nieciekawie , to proponuję zmodyfikować stałą T1_value do postaci Const T1_value = 65536 - ( _xtal...
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Proszę o pomoc. Pierwsza zasadnicza uwaga to nie zauważyłem w programie konfiguracji interruptu0- coś np. takiego: config INT0=...
'fusebit A987 0100:0100 osc $regfile = "m8def.dat" $crystal = 8000000 Config Pind.0 = Output 'PRZEKAZNIK Config Pind.6 = Input 'KLAWISZ Klawisz Alias Pind.6 Przekaznik Alias Portd.0 'podpiecie klawisz pod "1" Portd.6 = 1 Przekaznik = 1 Do Do Loop Until Klawisz = 0 If Przekaznik = 1 Then Przekaznik = 0 Else Przekaznik = 1 End...
Dzięki, prostsze robiłem ;] Zdaję sobie sprawę, że to nie będzie łatwe, stąd założyłem ten temat. Myślałem, że ktoś może robił już coś podobnego i może poratować kodem 'wejściowym'. Mam jeszcze drugi pomysł - wydaje mi się że łatwiejszy do zrealizowania: Pozostawić stare LCD które jest elektronicznie sprawne. Podłączyć równolegle R/W, RS i D4-D7 do...
Hmm... Spróbuj regularnie migać LED, jednocześnie komunikując się z PC, obsługując pomiar temperatury za pomocą 1wire (DS18B20) i wyświetlać ją na LCD, używając waitXX... ;) Timer0 jak nic do zastosowania... Tymczasem małe co nieco w załączniku (miganie LED z użyciem timera), zarówno dla ATmega8, jak i na ATmega8515. Ponieważ ATmega8 nie posiada przerwania...
Tak właśnie to niestety wygląda :) Najpierw pomysł jest dość prosty, ot pomiar temperatury i załączenie przekaźnika lub kilku :) Potem warto byłoby to gdzieś wysłać , a potem jeszcze dobrze byłoby zmienić zdalnie tryb pracy i pętla główna zaczyna puchnąć, czynności mogą zacząć się na siebie nakładać., więc może od razu sztywno przydzielić im przestrzenie...
no teoretycznie dało by się ale ja chciałem to zrobić na diodach. jesli chciał być to przerobić na lcd to musiał być zablokować przerwanie odświeżajace diody czyli usunąc linijkę Enable Timer0 w pliku config.bas oraz dodać wyświatlanie czyli zmienić procedure save w pliku led.bas w sumie to część kodu nie będzie wtedy używana ale ale nie spowoduje to...
Start Timer1 If R = 1 Then Stop Timer1 A = Timer1 End If Locate 1 , 1 Lcd A Wait 1 Ale chyba coś ze sprzętem mam nie tak, bo ciągle A wyświetla że jest zero (nie wchodzi do IFa) Hmm... ok załączasz Timer1 i odliczasz impulsy do czasu wystąpienia impulsu na R(z odbiornika) ale nie uwzględniłeś że ten impuls jest bardzo krótki i może wystąpić podczas...
Działa błąd był w fusebitach pozdrawiam i dziękuję za owocną współpracę i cierpliwość podaje sprawny kod (prawie bo namieszałem w data) $regfile = "m8def.dat" $crystal = 1000000 Config Pind.1 = Input Config Pind.2 = Input Config Pind.3 = Input Config Pind.4 = Input Config Portc = Output Config Timer0 = Timer , Prescale = 1024 On Timer0 Przerwanie Dim...
xury dla początkującego wait czy waitms to najprostsze rozwiązanie choć już naczytałem się, że nie najlepsze i by tego unikać właśnie poprzez timery w jednym z tematów mirekk36 to nawet zademonstrował na atmega8 oraz ganił za używanie wait oraz waitms Nie poradziłem sobie w przełożeniu kodu z atmegi na attine :( Sprawdzone i działa rewelacyjnie WIELKIE...
Poczytaj conieco o RC5 RC5 mam ogarnięte, Tam występują dwa bity startu "11", toggle bit, adres i komenda. Problem polega na tym, że adres zapisany jest na 5 bitach, a komenda na 6 bitach. Na żadnej z nich nie zapiszę nawet bajta danych, musiałbym łączyć. Po drugie nie mogę powiększyć tej ramki, musiałbym złożyć ją z kilku. Po drugie to jest również...
No to może ja jeszcze się dorzucę :) Po pierwsze: Jeśli przerwanie wywoływane jest dość często, to należałoby się upewnić, że zdąży się ono wykonać jakiś czas przed zaistnieniem kolejnego jego wywołania. Najlepiej zatem aby ISR była dość zwięzła i robiła najistotniejsze operacje. Resztę można wykonać w wolnym czasie programu. Ciągnące się w nieskończoność...
Dziekuje za wytlumaczenie. Rozjaśnia mi się już bo widzę przykłady. Nie wygląda abyś rozumiał w pełni koncept przerwań. Poprzedni mój post zawierał cały, gotowy, pracujący program dla dwóch czujników (z pełnymi objaśnieniami), oparty o timer1, skonfigurowany do pracy w trybie CTC. Jeżeli tamtego nie zrozumiałeś, to naturalnie i tu masz poważne problemy....
No masz rację.. nie potrzebuję go generować.. ale to tylko gdy juz będę to miał popodłączane... Póki co aparatury nie mam. Mam jedynie serwo i mikrokontroler w takim zestawie uruchomieniowym ZL2AVR. I żeby to sprawdzić wszystko i napisać. Muszę sobie jakoś to serwo sterować. No... hmm.. Chcę efekty fizycznie widzieć :) Nie wiem dokładnie jak działa...
Mam mały problem z programem napisanym w bascomie , mianowicie założenia są takie jest to odbiornik pilota IR na atmega 8 chodzi mi o sam algorytm dekodowania sygnału , który ma dekodować wszystkie rodzaje pilotów obojętnie czy są w standardzie RC5 czy SONY na wyświetlaczu LCD mam mieć wyświetlane umownie wartość jedynek i zer i problem polega na tym...
Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma...
Witam Mam płytkę z Atmega8 połączoną z czujnikiem PIR ( wejście INT1 przez transoptor ), do tego pomiar ADC ( od wartości adc zależy czas po jakim PWM będzie zmniejszone, opcjonalnie chcę też pod INT0 podpiąć przycisk, coby włączyć światło, gdybym nie znalazł się w zasięgu czujnika. Dodatkowym "bajerem" jest to, że światło ( listwa LED ) powoli się...
Mcucr = Mcucr Or 2 W helpie wyczytałem że procesory serii Mega mają przerwanie INT0 tylko na niski poziom i wykonują się w kółko jak poziom jest niski. Z drugiej strony ATmega8 Bascom tolerował, ATmega32 już nie. Dokumentacja mnie wprowadziła w błąd. Omawiając przerwania jest odesłanie do strony z opcjami uśpienia, a powinno być dużo dalej do zegara...
Da się i własnie na flagach timera powinno się to zrobić. Samo taktowanie obniżaniem wartości to nie wszystko. Dioda zapala się już przy bardzo małej wartości PWM i potem dokładanie jej czasu intensywność świecenia zmienia coraz mniej. Dlatego przy ściemnianiu mało się dzieje i potem nagle dioda szybko gaśnie. Chciałem wiec uzyskać taki efekt by im...
Witam. Chciałbym sobie wykonać zegar z tego tematu [url=http://www.elektroda.pl/rtvforum/to... ale chciałbym dodać do tego zegar RTC. Myślałem żeby użyć DS1307 lub PCF8583, do obsługi tego drugiego znalazłem taki oto fragment kodu: [syntax=basic4gl]Config Sda = P3.5 'konfiguracja linii SDA magistrali I2C Config Scl = P3.7 'konfiguracja...
Witam! Od kilku dni nie mogę poradzić sobie z takim dziwnym problemem. Zbudowałem system z ATmega8 z podpiętym do niego (poprzez TWI) PCF8583 (generuje przerwanie na INT0 co 1s), do systemu dołączony jest wyświetlacz LCD 2x16 oraz poprzez 1-Wire (portd.0) czujnik DS18B20. System działa poprawnie, nie ma wad sprzętowych, wyświetlacz działa, RTS działa,...
Pisząc program stanąłem przed problemem odbioru kodu RC5 z pilota ale z użyciem przerwania. O ile w BASCOM 8051 GETRC5 w przerwaniu działa doskonale, to w BASCOM AVR jest to kompletna porażka. Wadą Bascomowej funkcji GETRC5 jest: 1) Dziadowskie działanie w przerwaniu (niby działa ale traci pierwszy pakiet z pilota) 2) Zastosowanie jej w programie powoduje...
1) PinB.5 poprzez rezystor 10K podłączasz do VCC. Do PinB.5 podłączasz też kondensator 100nF do GND. 2) PortB.0 INT0 podłącz przez opornik 200 omów do przycisku (druga nóżka przycisku do GND) to będzie twój przycisk do zmiany efektów 3) Pozostają ci tylko 4 wolne nóżki dla ledów. Możesz dodać ekspander I2C->8 bit PCF8574 i sterować 8 ledami lub zostawić...
Witam serdecznie Program ma obsługiwać pomiar napięcia i wyświetlić na wyświetlaczu Led wartość odpowiadająca do 1 do 6 oraz wartość n. Problem polega ze dla wartości 1 oraz 2 brak stabilności pracy. Napięcie jest mierzone na pinie 23 uP przez dzielnik napięcia. Moje pytanie czy jest możecie sprawdzić źródło pod katem błędy dlaczego tak się dzieje?...
Jak obiecałem wcześniej, zmontowałem ponownie zegar i działa bez zarzutu z rezonatorem kwarcowym jak i pod generatorem. Jak ustawić w bascom atmege żeby działał z generatorem 16mhz ? Przestaw fusebit na zewnętrzny zegar (0000:external clock) 'zegar binarny joboo $regfile = "m8def.DAT" $crystal = 16000000 Dim Sekjed As Byte , Sekdzies As Byte...
W zasadzie co ten program robi? Bascom jest wolny- ale procesor wykonuje instrukcje co 0.125us przy tym zegarze. Załóżmy 1000 cykli w pętli- zajmie mu 125us policzenie stanów 0 na wejściu i co dalej? Od wykrycia 0 powinien zblokować na jakiś czas zmianę stanu, odliczyć czas w ms a nie w us i zmienić stan wyjścia. Timer i ewentualnie przerwanie.
Gdy już usuniesz wewnętrzną pętlę do..loop to zwróć uwagę, że stan przycisku będzie sprawdzany raz na 60s. Możesz zrobić sprawdzanie np. tak (co 1 sek.): dim x as byte ... do 'sprawdź przyciski if x=60 then x=0 toggle ... end if wait1 incr x loop end Albo wykorzystać timer lub przerwanie.
A gdzie masz polecenie Start Timer0?
A pod Bascom'em tak: Set Gifr.intf0 Oczywiście trzeba wstawić tą linijkę przed 'Enable Int0'
Wywal opóźnienie z przerwania. Po za tym wygaszaj kolumny za każdym razem jak wchodzisz w przerwanie.
Mam nadzieję że inkrementujesz sobie jakąś zmienną która informuje o ilości włączeń wentylatora a potem ją resetujesz. Przerwanie od timera zakłóca ci odczyt z DS-a musisz sobie dodać flagę którą będziesz ustawiał lub resetował i będzie cię informować że właśnie zakończyło się przerwanie i masz jeszcze trochę czasu do następnego. W tym momencie musisz...
Wyobraź sobie, że przerwanie występuje co 500ms a do procka podłączona jest dioda. Co pół sekundy dioda zapala się i gaśnie. Okres przebiegu to będzie czas świecenia i wygaszenia diody czyli jedna sekunda. Jeśli przerwanie było by generowane co sekundę okres wynosił by wtedy dwie sekundy.
Po co ten rezystor. Nastepnie jak nie chcesz czekac zanim dojdzie do ifa wykorzystaj przerwanie. Jak masz duzo przyciskow, to podlacz do wszystkich switchy diody do ktoregos przerwania
Zmień doświadczalnie wartość wpisywaną do timera. Zobacz czy poprawnie wyświetla ci to co chcesz. Ważne jest także żeby przerwanie nie było za długie bo wtedy może grozić to resetem uc.
Czy da się generować przerwania od timer2 przy każdym przepełnieniu w trybie CTC? Próbuję generować częstotliwość w zależności od ustawienia potencjometru, ale timer generuje przerwanie tylko raz, cały program poniżej: OCR2 zostaje wpisana tylko pierwsza odczytana wartość zaraz po starcie programu, dalej już nie generuje przerwań. Po wrzuceniu " OCR2...
Pokaż schemat to raz. Dwa: co to jest? Set Pinb.5 Set Pinb.6 Set Pinb.7 Tak po za tym chyba brakuje ci wartości początkowej timera0... Nie obraź się ale przy tym oscylatorze i preskalerze 64 otrzymasz przerwanie co najwyżej co 2ms... Na koniec zapamiętaj że program zawsze umieszcza się w znacznikach "code".
Nie musisz czekać. Musisz zacząć trochę inaczej myśleć niż "linijka po linijce"... Dokładnie i nie jest to wcale takie proste :cry: Inaczej będzie to wyglądać dla prostego 'termometru', a zdecydowanie inaczej jeśli 'w tle' pracuje kilka przerwań, które rozwalą komunikację na 1wire na amen. Zerknij co kiedyś wykoncypowałem :D , żeby przerwanie obsługujące...
[syntax=vbnet]Automatycznie2: Locate 1 , 1 Lcd " Tryb Automat. " Locate 2 , 1 Lcd "Aktualnie: PR:2" Prog1 = 0 Prog2 = 1 Prog3 = 0 Prog4 = 0 Prog5 = 0 If Cofn = 0 Then Goto Wybor Else Dim Odlicz As Byte Odlicz = 120 Do Wait 1 Decr Odlicz If Cofn = 0 Then Goto Wybor Loop Until Odlicz = 0 Goto Automatycznie3 End If[/syntax] Możesz nawet zwiększyć czułość...
Witam ! Obliczenia źle oraz pewnie źle ustawione fusebity (pewnie default - 1Mhz internal rc). Instrukcja Load jako parametr ma po ilu impulsach ma wystąpić przerwanie, więc powinno być 625, ale że pojedyńcza połówka przebiegu sieci trwa nie 20ms a tylko 10ms więc powinno być 312,5 :D. Więc lepiej chyba prescale = 64 i load timer1, 1250. Pozdrawiam...
Czy wszystko będzie ok. trudno wyczuć. Zależy jaki zastosowałeś układ wykrywania przejścia przez zero. Jeżeli stan niski utrzymuje się przez większą część przebiegu i tylko w okolicach zera jest wysoki to dopóki jest stan niski to jest zgłaszane przerwanie. Jeżeli dodać do tego że przerwanie int0 ma najwyższy priorytet poza reset to przerwanie od timera...
Co do nadawania RC5 to ten rozrzut czasowy nie jest aż taki, żeby wyjść poza zakres tolerancji raczej, a z przysiadaniem napięcia to niech autor pokaże schemat - nie wiadomo czy i jaki wzmacniacz siedzi między procesorem i diodą IR. Niestety moim zdaniem program jest zły, bo w przerwaniu (z tego co kiedyś ostro testowałem) nie ma sensu wyłączać samego...
Przychodzi Tobie prostokąt o wypełnieniu ok. 1-2ms co kilkadziesiąt ms. Musisz podłączyć ten sygnał pod przerwanie w atmega i timerem mierzyć czas pomiędzy zmianą sygnału z "0" na "1" a zmianą z "1" na "0". Z tej informacji generujesz odpowiednie PWM. PS. Ze względu na to, że nowsze atmegi mają więcej wyjść PWM polecam np. atmega88 zamiast atmega8.
Niedokładnie przeczytałeś. W zakładce nawigator: Config Timer- uwaga! po ustawieniu prascale licznik natychmiast zaczyna zliczanie. Można użyć start Timerx i stop Timerx Np. Config timerx, prescale 'timer zaczyna liczyć stop Timerx 'timer stoi- ale już coś zliczył Timerx=y 'timer ma wartość początkową =y - np.0 Start timerx ' Timerx zaczyna liczyć od...
Hej, Jeśli chcesz płynnie regulować współczynnik wypełnienia to musisz wybrać jeden z modów PWM i wtedy będziesz skazany na jedną z kilku częstotliwości wynikających z zegara systemowego i tego jak ustawisz prescaler, Jeśli chcesz płynnie regulować częstotliwość to wybierasz mod CTC(clear timer on compare) ale będziesz miał wtedy stałe wypełnienie,...
Przeglądając Twój program mam takie małe spostrzeżenie, a mianowicie w pętli głównej masz wywołaną procedurę Gettime - ' Call Gettime' - która działa na I2C. Co się stanie gdy podczas wykonywania procedury Gettime zostanie zgłoszone przerwanie od Timer'a?? Program przerywa wykonywanie procedury Gettime i skacze do obsługi Timera a tam jest wywoływana...
Przykładów w necie jest od groma. Z częstotliwością co najmniej 50Hz musisz przełączać wyświetlacz i wartość podawana na niego. Najlepiej wykorzystać do tego przerwanie timera.
No to masz odpowiedz. Wyświetlanie zajmuje za dużo czasu i przerwanie się nie wyrabia.
Stosy to dla mnie czarna magia, wiem tylko, że każdy przeskok wymaga zapisania adresu zwrotnego, ale nic poza tym :oops: No przy takim podprogramie to 1 megabajtowy stos to za mało :D, to się chyba nazywa rekurencja: [syntax=basic4gl]Petlapomiarowa: If Impulsy < 15 Then 'Jesli nie ruszono, wyswietlaj dalej napiecie Gosub Pomiaradc If Konwersja >...
Co jest nie tak ? Delikatnie mówiąc wszystko. 1 Timer nie wiem co liczy, cały jest źle napisany i nie powinien działać, bo np: przerwanie od timera powinno być zadeklarowane przed pętlą główną i nie w warunku. Zmienna Reload nie jest zerowana i zwiększa się do maximum typu Word Zmienna M (w zamierzeniu chyba od minut) też się zwiększa do 255 Zmienna...
Ok rozumiem. Spróbuj tego. Użyte przerwanie. Można też zrobić bez zależnie od potrzeb. $regfile = "m8def.dat" $crystal = 8000000 Dim Zmienna As Word Dim A As Bit Config Pinb.1 = Output Config Pind.2 = Input Set Portd.2 '============ definicje timera ================================ Config Timer1 = Timer , Compare A = Toggle , Compare B = Disconnect...
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ę...
Musisz ustawiać znacznik, albo lepiej- odblokować przerwanie :-)
Pomysł z tym programikiem jest dobry ale lepiej zrobić tak aby wykorzystać przerwanie od uart'u od danych przychodzacych. W obsłudze tego przerwania robimy taki myk że gdy przyjdzie znak "$" to niech sie zeruje licznik (wskaźnik pozycji) i każda nastepna dana z portu niech będzie zapisywana do nastepnej zmiennej. Potem można z tych zmiennych wyciągnąć...
"Timer" odnosi się do konfiguracji pracy licznika T/C, natomiast INT0 to przerwanie zewnetrzne ! Radzę poczytać HELP'a.
atmega8 bascom przerwanie sekundę przerwanie atmega8 atmega8 przerwanie
oporność głośnik zmywarka candy serwis delonghi modele
mikrofalówka dioda mikrofalówka dioda
Iveco Stralis 2008 – lokalizacja konektora ramowego C35, opis złącza, typowe usterki Kierunek obrotu pokrętła programatora pralki