Odpowiedzią na twoje kłopoty jest instrukcja DEBOUNCE, gdyż: 1. Potrafi wywoływać podprogramy przy dowolnym stanie linii portu, 2. Przycisk raz naciśnięty i puszczony wywołuje podprogram tylko jednorazowo, 3. Filtruje drgania styków przycisków które potrafią narobić niełego bigosu początkującym, 4. Jest elegancka, pewna i uszyta "na miarę". PS. Atmega...
Do wejścia PB2 dolutowałem 1uF (ceramik) plus kilka zmian w algorytmie. Wydaje się że problem drgania styków jest opanowany. [syntax=c] #define F_CPU 16000000UL // Atmega644 #include <avr/io.h> /*biblioteka avr*/ #include <string.h> /*biblioteka napisy*/ #include <stdio.h> /*biblioteka podstawowa C*/ #include <stdlib.h> /*biblioteka...
jak już koledzy wyżej wymienili: #F_CPU deklaruj w projekcie a poniżej moja drobna wariacja na temat:[syntax=c]#ifdef __TINYC__ // mod by: penknife <penknife1+wyswietlacz[at]gmail.com&g... 30 XII 2015 // Tiny C Compiler http://bellard.org/tcc/ // żeby przetestować uruchom: tcc -run "nazwa tego pliku.c" #include <stdio.h> #include <stdlib.h>...
https://obrazki.elektroda.pl/9337556500_... Pewna wyjątkowa osoba zasługiwała na równie wyjątkowy prezent, a że nie jestem fanem kupowania niespodzianek, postanowiłem "zrobić" coś własnym rękami. 1. Wstęp, motywacja 2. Zarys konstrukcji 3. Płytka z diodami - projekt (łączenie diod) 4. Płytka z diodami - projekt (zatrzaski) 5. Eagle...
Na temat debouncingu poczytaj [url=http://www.elektroda.pl/rtvforum/to... temat. Warto.
A w zwykłym mikroprzełączniku "podpalcowym" nie mamy tego efektu ?? Może też wystąpić. Daj dwa dodatkowe kondensatory, 2×10nF po obu stronach zestyku. Ale najlepiej zastosuj scalone bramki NAND w układzie przerzutnika eliminującego efekt drgania styków (jeden scalak).
Witam, Dzięki za wsparcie, już sobie poradziłem, trochę na około, bo z użyciem goto. Delay w przerwaniu po to, aby wyeliminować drgania styków. Nie wiem jak to inaczej obejść. Z goto raczej sobie nie poradziłeś. Drgań styków nie wyeliminujesz. Najprościej, to nie reagować na drgania tych styków. Standardowa i nudna odpowiedź: zacznij od algorytmu, bo...
Panowie ale jaja. Wstępnie przyczynami były sam stycznik oraz wyswietlacz lcd hd44780, a procesor wcale się nie zawieszał. Dzięki Panowie, gasiki próbowałem na cewkę i na styki, sterowanie zmieniałem 3021/3041. O ferrytach nie pomyślałem. nie mam, kupię. W każdym razie, dwa jakie mam, styczniki lovato bgp0910a, lutowane do druku maja dosyć silne drgania...
http://obrazki.elektroda.pl/5431448900_1... 74HC74 bramkuje sygnał wejściowy tak aby jego impulsy nie były krótsze niż impulsy taktowania licznika 74HC590(już samo to wyfiltrowuje część krótkich szpilek) - blokuje to możliwość wyzwalania przerwania ICR1 z nadmierną częstotliwością. W układzie jak na rysunku 74HC590 zlicza gdy sygnał...
Atmega 328P -z tego co widze to ma pull-up'y na każdym porcie, w każdym razie jak dawałem kondensator 100n to nic to nie dawało
Dzięki. Stokrotne dzięki. Jak będę miał oporniki to podłącze drugi. Do 13 ,12,4,1,0 i digital też można?Te mam wolne. PS. Przycisk też musi mieć rezystor?Przycisk do 13 i 2 pina ale ja mam 2 zajęty. Jaki inny można?Z wolnych do przycisku. W zasadzie wszystkie piny są po to by z nich korzystać :-)Wystarczy deklarować kolejny wolny pin cyfrowy np. #define...
Czy na płytce są sprzętowo wyeliminowane drgania styków ? A jak obsługujesz ten enkoder ? Masz jakiś przykładowy kod ?
Straszny ten kod jest. Przykładowo - po co jest coś takiego: [syntax=c]for(;;) while(1)[/syntax] albo to: [syntax=c]if( ! (PIND & (1<<PD3)) ) //tutaj sprawdzam trzeci bit z portu D { _delay_ms(200); //czekam, aż drgania styków ustaną n=n+1;[/syntax] Zastanów sie czy ten delay ma jakiś wpływ na drgania. Czy nie lepiej po tym delayu raz jeszcze...
uu teraz gdy odłączyłem zasilanie samego silnika to zauważyłem, że gdy zadziała jedna krańcówka (w postaci kontaktronu) to efekt jest podobny do resetu. Więc może to być wina programu, ale nie koniecznie. Możliwe ze podczas startu kontaktrony się zwierają, ale w poprzednim układzie takie coś nie występowało. Poprzednio sterowanie miałem na bazie przerzutników...
Witam! Jeśli chodzi o tego typu połączenia z uC, to w praktyce stosuje się rozwiązanie "a)", czyli przycisk jest aktywny niskim stanem. Jesto to pewniejsze rozwiązanie. Rezystory podciągające w ATmega mogą płatać różne figle, o czym się już kiedyś przekonałem. Koniecznie dołóż zewnętrzne podciąganie do Vcc, np. przez rezystor 4,7kΩ. Pamiętaj także...
A tu zalecałeś blokowanie przerwania, w celu likwidacji drgań styków i zabezpieczenia się przed ponownym wywołaniem przerwania. http://obrazki.elektroda.pl/7094155700_1... Tam omawialiśmy przypadek podłączenia przycisku do pinu INT0 i wykorzystaniu przerwań: http://www.elektroda.pl/rtvforum/viewtop... Jeśli przycisk podłączasz...
Witaj 1. stosuj tabulator bo kod jest mało czytelny. 2. nie pokazałeś funkcji przerwań stąd zapytam: Drgania styków przycisków eliminujesz?: http://mikrokontrolery.blogspot.com/2011... 3. ode mnie masz 25 pkt za stosowanie C - boś biedny (2.88pkt), a mogą Ci się przydać :)
dobra zakonczmy ta bezsensowna dyskusje, nie chce sie klocic o glupoty. Tym bardziej, że podejrzewam, iż w tym projekcie zastanawianie się nad rzeczami typu szybkość przełączenia nie ma w ogóle znaczenia Jeżeli wyeliminowane są drgania ze styków (o ile na styku się to opiera) i nie będa występowały żadne przeszkadzające stany nieustalone to wystarczy...
Stosując interfejs JTAG mamy właśnie sprzętowy dostęp do wszystkich rejestrów, jakie by one nie były. Można np. załączyć debuggowanie, potem wymusić 0 (sprzętowo - zwierając tą linię do masy) na jakieś linii portu. Będzie to widać w AVR Studio - zmieni się stan PINn. Można też zmieniać wartości pszczególnych rejestrów, flag np. słowa stanu (odpowiednik...
Myślę, że nie sieje. Moje przypuszczenia opieram na tym, że najpierw zacząłem od uruchomienia poprawnego tych lamp. Program działający jako prosty licznik, który tylko dodawał i odejmował do liczby "minuty" wartość 1 i potem pokazywał to na wyświetlacz działał poprawnie. I nie wieszał się nawet po wielu minutach od włączenia. Sprawdzałem to też pod...
Prosiłem o więcej informacji :( Wypróbuj coś takiego: #include <avr/io.h> //#include <avr/interrupt.h> #include <interrupt.h> #include <signal.h> SIGNAL (SIG_INTERRUPT0) { unsigned int i=1; PORTC^=_BV(PC0); // zmieniamy stanu na przeciwny while(i++); //eliminacja skutków drgań styków (~393000...
Witam, czy ktoś ma doświadczenia z podłączaniem przełączników do oświetlenia 220V ( typowych przełączników które są zamontowanie do włączania oświetlenia w pomieszczeniach ) bezposrednio do portów mikrokontrolera ( do ATmega). Oczywiście mówimy o całkiem nowych przełącznikach, które nie przełączały jeszcze żadnych obciążeń podłączonych do 220V. Moje...
Rpal (at) wiadomo jaki czujnik bo napisałem w temacie że UGN3120.Schemat jest taki ze + do + - na gnd a wyjście bezpośrednio na wejście procka. Emarcus(at) 1. Czujnik to tak jak napisałem ugn3120 właśnie nie wiem na jakie zachowanie pola powinien reagować 2. wyjście czujnika mam podpięte pod wejście w uC. całość jest zasilana z tego samego źródła. całość...
Napisałem program do obsługi klawiatury matrycowej. Podłączone diody LED wskazują binarnie wartość wciśniętego przycisku, a wyświetlacz LCD pokazuje szesnastkowo wciśnięty przycisk. Klawiatura podłączona do PORTD mikrokontrolera. http://obrazki.elektroda.pl/1733933700_1... Problem w tym że wszystkie przyciski działają poprawnie oprócz jednego...
Jestem początkującym z programowaniu w C.Opiszę problem : Zbudowałem licznik zwojów do nawijarki na ATMEGA 8 . Licznik liczy zwoje przy pomocy optobariery szczelinowej i tarczy z dziurką(czyli zliczanie gdy na wejściu stan niski) liczy w przód i w tył(przy odwijaniu). Jedno wejście ATMEGi zlicza impulsy (PULSELOW) , drugie to wejście sterujące aby zmieniać...
Jak chcesz za pomocą 10-bitowego ADC obsłużyć więcej niż 10 przycisków? Jeśli przycisk przyjmuje dwa stany, to do ich reprezentacji potrzebujesz 1 bita, masz 14 przycisków, czyli potrzebujesz co najmniej 14 bitów z ADC, a tylu nie masz. Oczywiście problem nie istnieje, jeśli na raz można nacisnąć tylko jeden przycisk... Kolejna sprawa - po co oddzielne...
hmm.. jednak nie tutaj droga pojawiło się jeszcze kilka innych problemów - np ukłądy nowej serii są strasznie wrażliwe na co ? nie wiem na co. np od "wieków" przy nogach wejściowych gdzie sygnały pochodzą np z przycisków stosuję kondensator 100nF do masy dla eliminacji drgania styków i ogólnie dla wygładzenia przebiegu. ukazuje się że zwarcie takiego...
Nie wytrzymałem :| Można ten program napisać na 100 sposobów... Poniżej chyba najprostsza wersja, bez kontroli drgania styków i blokujący (użycie Bitwait) ale ma robić dokładnie to co napisałeś i nic więcej. To Cię powinno przynajmniej naprowadzić na właściwe tory. [syntax=vb]$regfile = "m8def.dat" $crystal = 1000000 Config Portb = Input '--- konfiguracja...
-nobile- --> To nie ATmega nie ustawia prawidłowo portów, to TY je nieprawidłowo ustawiasz i hmmm program piszesz trochę nie teges ;) DDRA = 0xFF; //port D na wyjście PORTA = 0x00; //stan niski na porcie D to w końcu port A czy port D ??? zastanów się czy przez tą literówkę już coś ci się nie miesza, to po pierwsze. Po drugie, raz sprawdzasz wejście...
Dzięki wszystkim za opinie. Oddałem dziś projekt został oceniony na 5;] Dokonałem kilku zmian w programie więc wrzucam nową wersję: http://obrazki.elektroda.pl/8149391200_1... Jeśli już eliminujesz drgania styków programowo i w dodatku z użyciem timera, to mogłeś się pokusić o tak samo zrealizowane opóźnienia. Mnóstwo pamięci pożera...
Jest to normalne w przypadku przycisków... Drganie styków powoduje pojawienie się więcej niż jednego zbocza... Poczytaj na forum o niwelacji drgań styków...
DRGANIA STYKÓW!!
Enkoder to mechanicznie zwykły przycisk. Ma też wszystkie wady przycisku, czyli np. drgania styków. Wiele enkoderów na jeden "przeskok" generuje 2-4 impulsów i oczywiście czasy trwania poszczególnych faz zależą od szybkości kręcenia. Przejrzyj darmowe przykłady do książek w mojej stopce - masz tam przykłady obsługi enkoderów w oparciu o ATMega i XMEGA.
Rezystory podciągające ATMega ma wbudowane - trzeba tylko włączyć. Jeśli to praca inżynierska to pora zacząć od podstaw pracy z AVRami... A do eliminacji drgań styków czasem same kondki nie starczają - owszem, pomagają, ale nie niwelują problemu do 0
Pierwszy schemat nie pokazuje jak przyciski są podłączone (nieopisane połączenia z lewej strony schematu). Na dolnym opisałeś je jako +5V i masa. Czy tak mamy rozumieć pierwszy schemat? Jeżeli tak, to nie trzeba żadnych tranzystorów, a jedynie napisać odpowiednio program dla pierwszego schematu. Ale musisz poznać zjawisko zwane drganiem styków i jak...
Po pierwsze aby zwiekszyc predkosc pulsowania diodek powinienes zmniejszac z a nie zwiekszac (czyli dzielic przez dwa a nie mnozyc razy 2). Po drugie dwukrotne sprawdzanie if ((PINA&0x01)!=0x01) nie ma sensu, chyba, ze miedzy nimi wprowadzisz opoznienie. Po trzecie po odczekaniu Twoich 300ms masz tylko ultrakrótki czas na sprawdzenie if((PINA&0x01)!=0x00)....
A Twój program nie chce działać? Jaki jest problem. To co w programie masz nieprawidłowo to odczyt stanu przycisku. Procedura odczytu przycisku powinna przewidywać takie sytuacje jak drgania styków lub przypadkowe zakłócenia na linii przycisku. Jedną z możliwość odczytu przycisku jest: [syntax=basic4gl]If Wejscie = 0 Then Waitms 100 If Wejscie = 0 Then...
Zmienna liczba musi być typu volatile, to tak na szybko. ;) Dodano po 13 No zrób jakieś opóźnienia, żeby wyeliminować drgania styków.
Właściwym wektorem jest INT0_vect. Teraz już działa? Jeżeli wymuszasz przyciskiem, to o problemie drgań styków wiesz?
Proszę o pomoc. Ustawiłem fusbity zgodnie z notą katalogową (CKSEL3..0 = 1111, CKOPT = 1) ale układ pracuje z częstotliwością około 1.5MHz przy kwarcu 16MHz. Zmiana CKOPT na 0 nie ma wpływu na częstotliwość. Odnoszę wrażenie, że kwarc nie prauje (przy pomocy oscyloskopu stwierdziłem brak drgań na stykach XTAL1i2 jak w przypadku ATMEGA 16 LUB 32). Z...
Diodę gaś tak jak ją zapalasz. [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 1000000 Config Portb.0 = Input Config Portb.1 = Input Config Portd.5 = Output Przycisk1 Alias Pinb.0 Dioda Alias Portd.5 Przycisk2 Alias Pinb.1 PORTB.0 = 1' to jest podciąganie do Vdd - działaj w tym celu na rejestrze 'PORTX lub PORTX.Y PORTB.1 = 1 Reset Dioda Do If Przycisk1...
Załóżmy, że to też błąd przy wklejaniu kodu (inaczej asembler zgłosiłby błąd). Powinno być R21 , a nie R121 . Być może to też błąd przy wklejaniu. Bity WGM12 , CS12 oraz CS10 nie znajdują się w rejestrze TCCR1A tylko w TCCR1B . Istotne jest jednak to, że ustawiając tylko bit WGM12 ustawiasz TIMER1 w tryb 4, czyli tryb CTC, w którym timer liczy od 0...
A co zrobić żeby kolejne kliknięcie zmieniło x na zero? To nie zadziała zbyt dobrze, bo przytrzymanie przycisku będzie ciągle zmieniać stan x na przeciwny. Zresztą taką zmianę szybciej można zrealizować za pomocą x^=1; Stąd też najlepiej PINC przypisać do jakiejść zmiennej tymczasowej i sprawdzać czy od ostatniego sprawdzenia stan przycisku uległ zmianie....
Aaa w ten sposób, przy takiej klawiaturze jest potrzebna eliminacja drgań styków?
1. Do których linii i w jaki sposób są podłączone przycisk i dioda? Schemat! 2. Masz dwa proste błędy - w ATmega rezystory podciągające wejścia włącza się poprzez ustawienie linii portu jako wejścia ORAZ zapis jedynki do rejestru PORTx, czyli: DDRB=0x00; PORTB=0xFF; No i sprawdzanie wciśnięcia przycisku: pojedynczy & zamiast podwójnego! 3. Nieprawdziwych...
[syntax=c]If ((!(PIND &0x03)) | (!(PIND & 0x06)) | ((!(PIND & 0x05))) { PORTA = 0x00;}[/syntax] to jest złe. a przerwanie? troszkę później się ty zajmij. przy przyciskach występują drgania styków. A to sprawi ci klopot
W takim razie nie trzeba żadnych rezystorów. Jeden koniec przycisku podłączasz do wybranego portu mikrokontrolera, a drugi do masy. W programie musisz dać "0" zamiast "1", ale to chyba wiesz sam. Przykładowo przycisk dołączony do PB1 ma zrobić podniesienie wartości I o jeden: $REGFILE="m8def.dat" $CRYSTAL=8000000 Config Pinb.4 = Output Config...
Jeżeli chodzi o ten transoptor z dwoma diodami, to rozumiem, że chodzi o jakiś dwukierunkowy typu PC814? Tak. Będzie to też tańsze i nie będzie wprowadzało szpilek z drgań styków jakie są przy przekaźniku.
Np. to http://mikrokontrolery.blogspot.com/2011... i z 1000 innych rozwiązań. A po co te przekaźniki? W celu zwiększenia zakłóceń? Do sterowania światłami b. dobrze nadają się tranzystory MOSFET. Jeśli masz wspólny minus, to potrzebujesz par npn małej mocy + PMOSFET do załączania plusa. http://mikrokontrolery.blogspot.com/2011...
Witaj Adamie. ... i niestety nie wychodzi. Na jakiej podstawie tak uważasz? Dodam, że pracuję na Atmel Studio 6, które bardzo nie lubi funkcji SIGNAL(SIG_INTERRUPT0) Ponieważ SIGNAL jest przestarzałe: http://www.nongnu.org/avr-libc/user-manu... Atrybut NOBLOCK dodałem na końcu, więc można się nim nie sugerować. W jakim celu?...
drgania styków atmega drgania styków drgania styków przekaźnika
normstahl odbiornik obsada pierścień zwrotnice basową
moduł otwierania szyby moduł otwierania szyby
Wymiana paska alternatora Renault Megane 1.9 dTi 1999 Zasilanie silnika RF-310T-11400: prąd i napięcie