Witajcie,
mam taki malutki (głupi) problem i nie wiem jak sobie z tym poradzić. Jako, że to co robię jest na prawdę banalne więc raczej nie będę wstawiał schematu ideowego bo mogę to łatwo opisać słowami.
Kwestia jest taka:Chcę sterować buzzerem jest podłączony do pinu PD6 uP
STANEM WYSOKIM. Za pomocą przycisku, który jest podłączony do pinu PD7. Przycisk zwierany jest do masy. Więc programowo sprawdzam
STAN NISKI na porcie PD7 właśnie.
Problem jest taki, że mam ciągle cały czas stan wysoki na pinie buzzera (PD6) nie wiem dlaczego co objawia się ciągłym wyciem bez względu na to czy klawisz jest wciśnięty czy nie. Domyślam się, że coś przekombinowałem z konfiguracją i makrodefinicjami pinów.
Prosiłbym was o rzucenie okiem na kod poniżej.
P.S kod jest w miarę skomentowany więc nie będzie raczej problemu ze zrozumieniem idei.
A idea jest taka, że chcę aby buzzer wydawał dźwięk tylko podczas gdy klawisz jest wciśniętyChciałbym nadmienić, że posługuję się płytką ATB 1.04b i korzystam z
BlueBookaWięc opierając się o BlueBook napisałem taki kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pytanie: Czy w linii 25 kodu powinno być PIND czy PORTD ?
W BlueBook jest PORTX - ale to przecież jest rejestr wyjściowy, a ja przecież sprawdzam stan na pinie.
Więc domyślnie napisałem PINX czyli w moim przypadku PIND |= KEY_PIN;
Z ksiązki dowiedziałem się, że niepotrzebna jest linia
DDRD &= ~KEY_PIN; bo bity w rejestrze DDRD po resecie są już ustawione na 0 logiczne.
Po kompilacji i załadowaniu wsadu buzzer ciągle mi wyje bez względu czy klawisz jest wciśnięty czy nie. Tak jakby od razu wykrywał mi stan niski po resecie. Nie wiem jak sobie z tym poradzić :/ próbowałem negować argumenty if'a itp.
Dzięki raz jeszcze za pomoc.