Tak a PCINT to pin przerwan zewnętrznych.
Bascom moze tego nie obslugiwac. I ile recznie mozna wpisac do rejestru wlaczenie tego przerwania, to podanie wektora przerwania pewnie bedzie juz problemem - moze edycja pliku z danymi o ukontrolerze. Przerwania zmiany stanu na PCINT przypisane sa do portów, i dodatkowo mozna zdefiniowac które piny maja byc monitorowane (nie musza byc wszystkie).
Można włączyć przerwanie od zmiany stanu na PB3 (to chyba PCINT3) i w obsłudze przerwania zrównać jakąś zmienną czekania. Czyli jak czekasz aż coś spadnie do zera to piszesz w przerwaniu "Ta_zmienna = 1" Wtedy po wyjściu z przerwania Decr spowoduje że warunek "If Ta_zmienna = 0 Then" Analogicznie w górę możesz w przerwaniu napisać "Czekaj = 34" A teraz...
Niestety nie jestem bascomowy. Piszę tu o algorytmie i rozwiązaniach ale konkretnej implementacji w bascom ci nie podam. Pogooglaj temat pin change interrupt może znajdziesz jakiś kod w bascom. Znalazłem coś takiego wprawdzie na PCINT z detekcją na jednym pinie ale można to dorobić na pozostałe wg specyfikacji procesora ale przykład jest w C [url=http://www.insidegadgets.com/2011/0...
Jak masz jakiś procek z PCINT to na każdym pinie w połączeniu z Timerem będzie chyba najmniej zajmować uC. ICP w zależności od uC trzeba przekonfigurowywać na Rising/Falling a z PCINT by to już odpadło. Timer z jakimś dobranym preskalerem mógłby niekoniecznie liczyć us. Po wstępnych obliczeniach wiedziałbyś np. że 80 ticków to 64us albo coś w ten deseń...
Pierwsza wstawka chodzi ale dałem 25MHz do testów przy 20MHz gubi, druga też gubi nawet z 25MHz ale dzięki narazie mi to wystarczy do testów. A czy jak w tej pierwszej wstawce zamiast pinB całego czytał maskę z 1 pinu to też dochodzi cykl zegarowy na maskę ? albo pewnie z 3 cykle ? Pisałeś też o PCINT że potrzeba dodatkowych cykli? w przypadku przerwania...
Jest jeszcze przerwanie PCINT wyzwalane dowolnym zboczem. Wejść PCINT jest zdecydowanie dużo, zatem można reagować nie tylko na dwa przerwania INT0/1. Fakt, nie wszystkie AVRy to mają. Co do programowej obsługi to trzeba skanować klawiaturę w krótkich odstępach czasu i porównywać stan bieżący z poprzednim odczytem. Niestety czas musi być dość krótki...
Hmm. Niektóre zagadnienia można rozwiązać na wiele sposobów. W przypadku mojego przykładu pin INT układu PCF można podłączyć do dowolnego pinu uC. W przypadku Twojego rozwiązania trzeba się podłączyć do INT0 albo INT1 i z samego opisu wynika że takich punktów w tym uC jest tylko dwa. Co jeśli komuś komplikuje to układ? Można by rozważyć ocję zmiany...
A może znasz jakiś jeszcze inny sposób (PROSTY) żeby jak najszybciej sprawdzić zmianę stanu na 18 wejściach do uC? Najprościej byłoby zastosowac inny processor np: ATMega48/88/168, które mają PCINT co najmnjej na 20 'użytecznych' pinach wejściowych. W subrutynie do każdego PCINT wstawisz instrukcje wyłączającą przekaźnik na którymś tam porcie wyjściowym,...
Przerwania PCINTx wykonują się przy każdej zmianie stanu logicznego, niema możliwości konfiguracji np. tylko dla zbocz narastającego lub opadającego. Stan zbocza na poszczególnym pinie sprawdzasz w przerwaniu. Attiny13 ma 6 pinów PB.0-PB.5 (PCINT0 do PCINT5) które mogą wywołać przerwanie. I tu jest jedna myląca rzecz :) dla tych pinów jest tylko jeden...
Rozwiązaniem jest obsługa przycisku na przerwaniu bądź to INT bądź PCINT
Witam.Osobiście nie piszę w bascomie ale przerwanie (przerwania) PCINT wyzwalane są zmianą stanu na pinie a ty natomiast próbujesz konfigurować aby wyzwalane było niskim poziomem.
Sprawdziłem ten kod przed chwilą i jeśli na PD6 jest przycisk.. to jego kolejne naciskanie włącza lub wyłacza naprzemiennie diode LED na pinie PORTD.7 100% tested [syntax=vbnet]$regfile = "m644pdef.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 Pcmsk3 = &B01000000 Enable Pcint3 : On Pcint3 Pcint3_isr Config Portd.6 = Input : Set...
Jednym słowem pcint to nie to samo co int0 ;) A dla potomnych int 0 w m2560 pin43 i o ile się nie mylę to to zabrakło opisu że program jest napisany w Bascomie ... Popraw temat zgodnie z normami ;)
Timer1 do zliczania czasu sygnału podanego na INT lub PCINT. To najprostsze rozwiązanie.
Można wykorzystać układ AT90PWM3. Ma wszystko co potrzebne(6 kanałów PWM z opcją dead-time to aż nadto). Cena również jest przystępna. Zgadzam się. |Tylko jak to działa - są 2 timery, "Two or three 12-bit High Speed PSC (Power Stage Controllers) with 4-bit Resolution Enhancement" i sześć kanałów PWM? Potrzebuje jeszcze 1 wolny timer do odmierzania...
Bo bascom nie obsługuje prawie żadnych nowości w AVRach, jak choćby tych nieszczęsnych PCINT, niektórych opcji timerów czy interfejsów, pozostaje tylko na piechotkę, dokumentacja w rękę i rejestr po rejestrze...
Te procesory się aż tak nie różnią. Dodatkowe funkcjonalności pinów nie przeszkadzają w niczym dopóki ich nie uruchomisz. (PCINT - Pin Change Interrupt trzeba wiedzieć jak włączyć). Jest duża różnica jeśli chodzi o Timery właśnie. Mega8 ma na przykład tylko jeden rejestr Compare dla Timer2 dlatego inaczej się nazywają. Opisałem to u siebie na stronie...
Jak nie włączyłeś przerwań, to powinny być wyłączone... no, chyba, że bascom to zrobił za Ciebie... Dodano po 46 A skąd wiesz, że się odpalają przerwania PCINT?
Ostatnio czytałem o PCINT na Twojej stronie-muszę się temu dokładniej przyjrzeć :-)
Próbowałeś "ręcznie" napisać obsługę tych przerwań? Czasami trzeba troszkę wyręczyć bascoma. Odpowiedni wpis w rejestrach PCICR i PCMSK0 powinien załatwić sprawę ;)
Nieporozumienie w sensie dużo roboty, a do projektu który zakłada minimalizację ilości elementów i maksymalizację prostoty jest to jedno z lepszych rozwiązań, jeżeli zaś chcemy robić jakiś duży projekt to takie modułowe podejście jakie prezentujesz jest jak najbardziej na miejscu. Dlatego napisałem, że inne posiadają PCINT;) Pozdrawiam, GSM
Przenieś Enable Pcint0 i Enable Pcint3 zaraz przed Enable interrupts, albo zobacz co sie stanie jak skasujesz flagi tych przerwań. PCIFR.PCIF0 = 1 PCIFR.PCIF3 = 1
Z tym, że tablice musiałbym wcześniej wpisać w program, a mi chodzi o to, by "uczyć" tego robota danego zadania. Jeśli zmieniłbym odległośc punktu A od B i znowu postawił przeszkode, w którą by robot uderzył, to wtedy ponownie musiałby zapamiętać nową trase. Przy czym jeśli działałbym w obrębie pamięci RAM, kasowałbym ją po prostu resetem zasilania....
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
Przykładowo możesz wykorzystać dwa liczniki. Jeden do regulacji częstotliwości, a drugi do regulacji wypełnienia. - licznik pierwszy odlicza czas pomiędzy okresami od 1 sek dla 1Hz do 50 ms przy 20Hz. - licznik drugi oblicza czas trwania impulsu. Powiedzmy że zmiana stanu pinu X generuje przerwanie uruchamiające licznik drugi który po upływie zaprogramowanego...
Witam. 1 - Stosuj aliasy. Np: drzwi alias portd.0 Później w kodzie po prostu drzwi = 1 lub drzwi = 0. bardzo poprawia czytelność kodu. 2 - Odczyt z przetwornika ADC powinien być do zmiennej WORD (przetwornik jest 10 bit). 3 - w pętli głównej masz instrukcje Wait. Powstaje problem ze sprawdzaniem stanu wejść, pętla może się wykonywać bardzo długo, w...
Trochę mi rozjaśniłeś sprawę. Chodź jeszcze nie do końca wiem jak to zrobić. Mianowicie z powyższych informacji znam długość impulsu w stanie niskim dla zera i jedynki, ale nic nie wiem jak długo będzie trwał impuls w stanie wysokim. Jakoś kompletnie nie mogę pojąć jak to robić przy pomocy timera w capure mode. Jedynie po głowie mi chodzi taka myśl:...
Cały problem jest w tym żeby te dwie ATmegi się zsynchronizowały. Przerwanie od SPI występuje po zakończenia transmisji pierwszego bajtu. Zanim nastąpi obsługa przerwania to pierwszy bajt zostanie utracony. Nie mamy też gwarancji że dwie Atmegi "wystrzeliły" :) równocześnie i Slave nie czyta np. 4 bajtu nadanego przez Mastera. Jeżeli to by była np....
Po pierwsze musisz ustawić piny INT0 oraz INT1 jako wejscia (nie masz tego zrobionego) a samo aktywowanie przerwań nie ustawi tych pinów jako wejść czyli PINB.0 = Input PINB.1 = Input ........... pozdrawiam Obawam sie ze i to moze nie pracowac ! INT0 jest na wejsciu PD.2 INT1 ----------------- PD.3 Owszem port PB.0:7 jest/sa obslugiwane przez PCINT...
Nie mam już siły do tego przerwania INT0. Co bym nie wpisywał aby go wyłączyć ono i tak jest aktywne. Teraz mam taki program: [syntax=basic4gl] $regfile = "attiny44.dat" Config Pinb.2 = Input 'przycisk Portb.2 = 1 Config Portb.0 = Output 'dioda zielona Config Portb.1 = Output 'dioda czerwona Config Porta.1 = Output 'xpg Config Porta.2 = Output 'xml...
"The pin change interrupt PCI2 will trigger if any enabled PCINT23..16 pin toggles. The pin change interrupt PCI1 will trigger if any enabled PCINT14..8 pin toggles. The pin change interrupt PCI0 will trigger if any enabled PCINT7..0 pin toggles. The PCMSK2, PCMSK1 and PCMSK0 Regis- ters control which pins contribute to the pin change interrupts. Pin...
Chwilę mnie nie było, a tu wrze :D Jeśli chodzi o wyświetlanie czasu po wybudzeniu procesora, to działa ta procedura od nieveasoft , którą przedstawił wcześniej. Co do samej biblioteki, to wolałem zastosować gotową. Po prostu jest mi wygodniej a to dla tego że nie jestem Bascom-owcem :). Włączanie i wyłączanie oleda jest opanowane. Teraz borykam się...
Ten pomysł z takim wykorzytaniem diod wydaje mi się bardzo mało szczęśliwy - tym bardziej, że nie będziesz miał na procku 0V tylko tyle co na spadku napięcia na diodzie a w tym momencie na wejście portu będzie podawane dla procka niższe napięcie niż jego GND ... Diody to można byłoby próbować zastosować do wybudzania procka ze stanu uśpienia którymś...
Oczywiście że procesor z dwoma portami UART może spokojnie obsłużyć/używać ESP i BT. Właśnie pisałem taki program połączony z dedykowana aplikacją na Android przez Wifi albo BT. Kwestia jest raczej w tym by od razu mieć projekt/schemat co z czym będzie połączone a nie najpierw pisać program a potem dopiero się drapać w głowę jak to połączyć. Chyba że...
Witam. Byłem zmuszony wykożystać programowy UART w ATtinny13 i podczas moich prac okazało się że najwyrażniej autorzy (budowniczowie) Bascoma zapomnieli napisać procedury buforowania transmisji programowego UARTa O niczym nie zapomnieli , bo taka jest filozofia programowego UART-a. Odbiera i/lub wysyła dane tylko w tym momencie , kiedy programista...
Zadklarowalem w ATTINY13 Rf_nsel Alias Portb.3 jako wyjscie czy moge tak zrobic jak to jest PB3/PCINT3/CLKI/ADC3 ? Czy to bedzie mi dzialalo poprawnie? Bo kompilacja jest 100% poprawna. A dlaczego miał byś nie móc?
Docelowo będą jeszcze pin change (PCINTx), ale w tym momencie nie ma nic więcej. Wkleiłem cały program....
Więc potrzebuje rozwiązania na tym PCINT7...0, ponieważ chciał bym wyświetlić wszystkie wentyle na raz.
Witam Przy próbie skompilowania pokazuje się taki błąd: http://obrazki.elektroda.pl/3448979900_1... [syntax=vbnet] $regfile = "attiny24.dat" $crystal = 1000000 Config Pina.0 = Input Set Porta.0 Config Pina.1 = Input Config Pina.2 = Input Config Pinb.0 = Input Set Portb.0 Config Pinb.1 = Input Set Portb.1 Config Pinb.2 = Output Config...
To teraz przed Powerdown wstaw "Stop AC" i "Stop ADC" Po wyjściu z Powerdown oczywiście musisz "Start ADC" Jeśli ładowarka jest na PD1 to dopisz w kodzie gdzieś u góry a na pewno się obudzi :P PCMSK2 = &B00000010 Enable PCINT2
Niestety... Zawsze jednak możesz testować w programie stan PINA.0 np. w przerwaniach z licznika. Albo wymienić układ na ATMega162 i skorzystać z przerwania PCINT0.
(at)dondu Twoje artykuły czytałem dokładnie ;-) Z kodu poniżej wycięte ustawianie portów (bonie widziałem żadnej różnicy w zużyciu prądu). Procek ustawione fusami na 8MHz wewnętrzny z podziałem przez 8 [syntax=vbnet] $crystal = 1000000 ' ustawiamy prędkość zegara $baud = 9600 ' ustawiamy prędkość transmisji $hwstack = 220 ' ustawiamy wielkość stosu...
Witam Potrzebuję zrobić regulator do silnika komutatorowego DC ze sprzężeniem zwrotnym w postaci enkodera optycznego (ENC, PA.0). Rozdzielczość enkodera to 32 imp/obr. Napisałem program w Bascomie, ale ten zdaje się nie działać. Założenia są takie: W zależności od tego, który pin uC (PB.0, PB.1) są aktywne, silnik ma kręcić się z dwoma różnymi prędkościami....
Witam Piszę sobie prosty program do sterowania triakiem. Na jednym pinie na przerwaniu PCINT0 jest zrobiony zero-crossing Program ma odpalić Triak z zadanym opóźnieniem na pół milisekundy. Przetwornik sobie chodzi w trybie free i ze starszych 8 bitów chce sobie wyliczyć opóźnienie od 0 do 9000 mikrosekund (9 mili). Problem mam z samym przeliczeniem...
Dodam że alias Sprzeglo oznacza port PC5 Atmegi 328 która nie ma tam wyjść OC (ma tylko ADC5/SCL/PCINT13). Reszta kodu nie ma nic wspólnego z przerwaniami. Jest wyświetlacz lcd, przyciski i diody. Działające w pętli głównej. Zresztą wszystko pozostałe jest wykomentowane a załączony kod można uważać za kompletny. Dodano po 4 Czy masz coś konkretnego...
co do bascoma to powiem Ci tak, na początku niby łatwiej i fajniej się programuje wszystko w bascomie, ale nietypowych rzeczy w nim nie zrobisz tak prosto (choćby np. obsługa dwóch lcd...) a ma on swoje ukryte "atuty" - bugi, które skutecznie zatruwają życie (np. skopana obsługa timerów na niektórych uP, błędy przy niektórych operacjach porównywania,...
Dzięki wielkie !! Pomogło , aczkolwiek nie rozumiem dlaczego bez tego też czasem działało zależnie od kolejności wpisów ? Teraz działa OK bez względu na kolejność wpisów, i reszty (czyli początku programu w którym pewnie jest mnóstwo innych błędów :-) ) [syntax=vbnet] $regfile = "m2560def.dat" ' specify the used micro $crystal = 16000000 ' used crystal...
Zmontowałem Programator i Adapter wedle linka z pierwszego postu, lecz coś nie działa z procesorem ATTiny2313 [url=http://www.ajd.czest.pl/~pawel.bork... Adapter: VCC mam pod nózką Nr 20 MOSI pod 17 PB5 (MOSI/DI/SDA/PCINT5) RST pod 1 SCK pod 19 PB7 (UCSK/SCL/PCINT7 MISO pod 18 PB6 (MISO/DO/PCINT6) GND pod 10 W BASCOM-AVR...
Chciałbym się upewnić - czy dobrze rozumiem, że chcąc skorzystać z odbioru po RC5 ( http://avrhelp.mcselec.com/index.html?ge... ) przy konfiguracji BACKGROUND mode ( http://avrhelp.mcselec.com/index.html?co... ) muszę mieć odbiornik podłączony do ICP (czy to w tym wypadku noga (PCINT30/OC2B/ICP) PD6) czyli pin 20 mikrokontrolera Atmega...
bascom pcint przerwania pcint pcint attiny
tempo defro multimetr pomiar rezystancji matryce klejone
Kosiarka Honda, Briggs, AL-KO – gaśnie po wejściu na obroty, czyszczenie gaźnika, filtr paliwa Satel ETHM-1 Plus, INT-GSM – brak logowania do serwera Satel, błąd połączenia TCP/TLS