Co muszę zrobić, aby odczytać wejście cyfrowe (przycisk) na ATmega16 ? Czy muszę włączyć rezystory podciągające, czy mogę użyć 10 kΩ? Jaki byłby jakiś prosty kod? Po prostu proste „Włącz diodę LED po naciśnięciu”.
Czy jest tutorial dla początkujących? Próbowałem google i AVR Freaks , ale wszystko ewoluuje tam do walki i nie dostaję odpowiedzi. Naprawdę nie znalazłem żadnych samouczków na ten temat. Mnóstwo konkretnych rzeczy, ale nic prostego w moim mikrokontrolerze AVR ...
Odpowiedzi:
Brazylijskie pozdrowienia!
Przede wszystkim dziękuję Joby za twój przykład. Po drugie, jego przykład zawiera tylko niewielki błąd. Liczba 0x20 jest nieprawidłowa. Powinien to być 0x04. Ponadto, jako sugestia, nie używałbym w kodzie liczb szesnastkowych, takich jak 0xFB, 0x20 lub 0x04. Sugerowałbym użycie definicji portów PIN znajdujących się w pliku io.h oraz innych, do których odwołuje się plik nagłówka. Ponownie napisałem przykład Joby'ego z kilkoma komentarzami dla początkujących.
/ *
komentarze dla początkujących
komentarz nr 1: (1 << PD2) generuje wartość binarną 00000100. Operacja „~” odwraca wszystkie cyfry, tzn. Wartość binarna wynosi teraz 11111011. W końcu & = stosuje logikę „AND” między DDRD a 11111011, a wynik jest umieszczany ponownie w pamięci DDRD. Uwaga: Operator „AND” robi dla każdego bitu w pamięci DDRD, porównuje go z powyższą liczbą binarną. Jeśli bit w DDRD ma wartość 0, a bit w pliku binarnym w tej samej pozycji zgryzu wynosi 1, to bit wynikowy ma wartość 0, jeśli DDRD ma wartość 1, a bit w pliku binarnym ma wartość 1, bit wynikowy wynosi 1, a jeśli bit w DDRD ma wartość 1 lub 0, a bit w pliku binarnym ma wartość 0, wówczas bit wynikowy ma zawsze wartość 0. Podsumowując, polecenie DDRD & = ~ (1 << PD2) zmienia tylko bit PD2 na zero i pozostawia pozostałe (zera lub jedynki) nietknięte. Wydaje się to trochę skomplikowane, ale po przyzwyczajeniu się do niego jest to najlepszy sposób na zmianę trochę w kęsie bez zmiany innych bitów.
komentarz nr 2 : (1 << PD2) generuje wartość binarną 00000100. Korzystając z tej samej logiki „AND” opisanej w komentarzu nr 1, polecenie „PIND & 0000100” sprawdza tylko, czy PIND2 (nasz pin wejściowy, do którego podłączony jest przycisk) to) jest ustawiony na wysoki lub nie. Wszystkie pozostałe piny będą NIEAKTYWNE, ponieważ binarne bity są ustawione na 0, a ponieważ bit binarny # 2 jest ustawiony na 1, instrukcja JEŻELI będzie PRAWDA tylko wtedy, gdy wejście PD2 jest ustawione na wysokie lub FAŁSZ, jeśli wejście PD2 jest ustawione na ustawiony na niski.
komentarz nr 3 : Zgodnie z logiką objaśnioną w komentarzu nr 1 to polecenie ustawia pin wyjściowy PINB2 w porcie PORTB na wysokie napięcie. Jeśli dioda LED jest prawidłowo podłączona do tego portu stykowego z rezystorem ~ 300 omów, a ten rezystor jest podłączony do ziemi, dioda LED powinna się włączyć.
komentarz nr 4 : Dioda LED powinna zgasnąć z tych samych powodów, które wyjaśniono w poprzednich komentarzach.
Uwagi końcowe:
za) Aby uniknąć oscylacji napięcia na wtyku wejściowym PD2, gdy przycisk nie jest wciśnięty (obwód otwarty), zdecydowanie zalecam umieszczenie rezystora obniżającego (1 kOhm lub wyższego), aby dioda LED nie zaświeciła się przypadkowo z powodu do tej przypadkowej oscylacji napięcia.
b) Nota zrzeczenia się odpowiedzialności: Opisane tutaj pomysły należy wykorzystywać wyłącznie w celach edukacyjnych i NIE należy ich używać w żadnym prawdziwym systemie przed skonsultowaniem się ze specjalistą w dziedzinie elektroniki.
* /
źródło
https://www.mainframe.cx/~ckuethe/avr-c-tutorial/
https://www.mainframe.cx/~ckuethe/avr-c-tutorial/#digital-in
źródło
Hackaday świetnie napisał o programowaniu AVR, ma wiele świetnych informacji, które mogą ci pomóc
http://hackaday.com/2010/11/19/avr-programming-04-writing-code-etc/
http://hackaday.com/2010/11/05/avr-programming-03-reading-and-compiling-code/
http://hackaday.com/2010/10/25/avr-programming-02-the-hardware/
http://hackaday.com/2010/10/23/avr-programming-introduction/
źródło
Cóż, to dotyczy AT90Usb1287, ATMega, ale podstawowe rzeczy dotyczące przycisków powinny być mniej więcej takie same. Po prostu zmień nazwy IO.
źródło
Kolejną kwestią do rozważenia w przypadku cyfrowego wejścia z mechanicznego przełącznika jest odbijanie styków - zmiana, co powinno być naciśnięciem jednego przycisku, na coś, co wygląda jak wielokrotne naciśnięcia.
W przypadku czegoś takiego jak włączenie diody LED, gdy przycisk jest wciśnięty, prawdopodobnie nie musisz się martwić o ogłoszenie. W przypadku czegoś nieco bardziej skomplikowanego (jak przełączanie diody LED po naciśnięciu przycisku) ogłoszenie jest koniecznością.
Jack Ganssle ma dobry Przewodnik do debugowania
źródło