getkbd dla avr-gcc

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
brass
-
Posty: 5
Rejestracja: 18 wrz 2005, 17:43

getkbd dla avr-gcc

Post autor: brass » 17 kwie 2009, 17:18

Pisze sobie obsługę klawiatury 16 przyciskowej podpiętej do portu B. Działa to na płytce komputerka PECEL czyli układ to Atmega8535. Napisałem taka funkcję:

Kod: Zaznacz cały


unsigned char getkey()
{

	DDRB=0x0F;
	PORTB=14;	//ustawiam pierwszy rząd
	
	
	if((PINB & 16)==0) { delay_100ms(); return 1; }
	if((PINB & 32)==0) { delay_100ms(); return 2; }
	if((PINB & 64)==0) { delay_100ms(); return 3; }
	if((PINB & 128)==0) { delay_100ms(); return 4; }


	PORTB=13;	//ustawiam kolejny rząd
	if((PINB & 16)==0) { delay_100ms(); return 5; }
	if((PINB & 32)==0) { delay_100ms(); return 6; }
	if((PINB & 64)==0) { delay_100ms(); return 7; }
	if((PINB & 128)==0) { delay_100ms(); return 8; }

	
	PORTB=11;	
	if((PINB & 16)==0) { delay_100ms(); return 9; }
	if((PINB & 32)==0) { delay_100ms(); return 10; }
	if((PINB & 64)==0) { delay_100ms(); return 11; }
	if((PINB & 128)==0) { delay_100ms(); return 12; }


	PORTB=7;	
	if((PINB & 16)==0) { delay_100ms(); return 13; }
	if((PINB & 32)==0) { delay_100ms(); return 14; }
	if((PINB & 64)==0) { delay_100ms(); return 15; }
	if((PINB & 128)==0) { delay_100ms(); return 16; }
	
	return 0;
}
Wyniki funkcji są nie przewidywalne. Niby odczytuje dobrze ale często powraca z bezsensownymi wynikami. Czytałem o rezystorach ściągających do masy ale gdy załaduje oryginalny hex z PECEL'a to bascomowa getkbd działa dobrze. Co robię źle?

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 18 kwie 2009, 12:03

Z programu wynika że musisz miec podciągnięte wejścia do plusa, tak więc zamiast PORTB=14 napisz PORTB=254, i do pozostałych przypisań także pododawaj po 240.

brass
-
Posty: 5
Rejestracja: 18 wrz 2005, 17:43

Post autor: brass » 19 kwie 2009, 10:42

Tak, to było to, Dzieki

ODPOWIEDZ