Czołem!
Mam taki problem. W projekcie używam prostej klawiatury sześciu przycisków, którą podłączam do najstarszych linii PORTC. Fragment schematu połączeń gniazda klawiatury do proca:
...a tu schemat tej prostej klawy:
Wejścia/wyjścia inicjuję taką funkcją:
Stan klawiatury sprawdzałem, kopiując przemaskowaną wartość portu do struktury:
Kiedy każdy odczyt zwracał wartość zero, zacząłem sprawdzać wartości nie w strukturze, a bezpośrednio z portu To samo.
Pomierzyłem wartości na używanych liniach Portu C (7...2), które są ustawione jako podciągnięte wejścia. I kolejno, na liniach (5...2) jest oczekiwany stan wysoki. natomiast na liniach (7) i (6) jest stan niski... :/ Oczywiste jest, że nie używam tych linii jako wejść oscylatora.
Kiedy przestawię linie (7...2) Portu C na wyjścia (oczywiście po odpięciu klawiatury), zachowują się OK: wpisanie 0 lub 1 zwraca odpowiednią wartość napięcia na liniach.
W pierwszej kolejności nasuwa się wniosek: utrzaskany port C. Ale nie jestem ekspertem jeśli chodzi o AVRy, więc może coś przeoczyłem? Proszę osoby bardziej obeznane o rzucenie okiem na wyżej przedstawione materiały i wszelkie sugestie. Przelutowanie scalaka SMD z płytki wykonanej ręcznie przy użyciu ręcznej lutownicy nie uśmiecha mi się za bardzo...
Pozdrawiam
Mam taki problem. W projekcie używam prostej klawiatury sześciu przycisków, którą podłączam do najstarszych linii PORTC. Fragment schematu połączeń gniazda klawiatury do proca:
...a tu schemat tej prostej klawy:
Wejścia/wyjścia inicjuję taką funkcją:
void io_init(void)
{
DDRA = 0x00;
PORTA = 0x00;
DDRB = (0 << DD7) | (0 << DD6) | (0 << DD5) | (0 << DD4) | (1 << DD3) | (1 << DD2) | (1 << DD1) | (1 << DD0);
PORTB = 0x00;
DDRC = (0 << DD7) | (0 << DD6) | (0 << DD5) | (0 << DD4) | (0 << DD3) | (0 << DD2) | (1 << DD1) | (1 << DD0);
PORTC = (1 << PC7) | (1 << PC6) | (1 << PC5) | (1 << PC4) | (1 << PC3) | (1 << PC2) | (1 << PC1) | (1 << PC0); // TO nas interesuje...
DDRD = (1 << DD7) | (1 << DD6) | (1 << DD5) | (1 << DD4) | (0 << DD3) | (0 << DD2) | (0 << DD1) | (0 << DD0);
PORTD = 1 << 4;
SFIOR &= ~(1 << PUD); // Niby tak jest domyślnie, ale...
ASSR &= ~(1 << AS2); // j/w
}Stan klawiatury sprawdzałem, kopiując przemaskowaną wartość portu do struktury:
Keyboard.Byte = PORTC & 0xFC;Kiedy każdy odczyt zwracał wartość zero, zacząłem sprawdzać wartości nie w strukturze, a bezpośrednio z portu To samo.
Pomierzyłem wartości na używanych liniach Portu C (7...2), które są ustawione jako podciągnięte wejścia. I kolejno, na liniach (5...2) jest oczekiwany stan wysoki. natomiast na liniach (7) i (6) jest stan niski... :/ Oczywiste jest, że nie używam tych linii jako wejść oscylatora.
Kiedy przestawię linie (7...2) Portu C na wyjścia (oczywiście po odpięciu klawiatury), zachowują się OK: wpisanie 0 lub 1 zwraca odpowiednią wartość napięcia na liniach.
W pierwszej kolejności nasuwa się wniosek: utrzaskany port C. Ale nie jestem ekspertem jeśli chodzi o AVRy, więc może coś przeoczyłem? Proszę osoby bardziej obeznane o rzucenie okiem na wyżej przedstawione materiały i wszelkie sugestie. Przelutowanie scalaka SMD z płytki wykonanej ręcznie przy użyciu ręcznej lutownicy nie uśmiecha mi się za bardzo...
Pozdrawiam