Tasten abfragen mit ATMEGA32 und WinAvr

17/09/2007 - 11:15 von Andreas Koch | Report spam
Hallo zusammen,

ich habe da eine kleine Testschaltung mit einem ATMEGA32, einem LCD
und drei Tastern. Aus irgend einem Grund kriege ich die Taster nicht
eingelesen, wenn ich den Tasterstatus auf dem LCD ausgebe kriege
ich immer 0 (low) raus.

Mit dem Multimeter gemessen liegt an den entsprechenden Pins 0 V
an wenn der Taster nicht gedrückt ist, und 4.93 V wenn der Taster
gedrückt ist - ich vermute also die Beschaltung ist so ok.

Layout:

PB0+--[4k2]|
|
\o/o-+5V

PB1+--[4k2]|
|
\o/o-+5V

PB2+--[4k2]|
|
\o/o-+5V

Der Code in WINAvr dazu ist:

-
#define F_CPU 10000000

#include <avr/io.h>
#include "lcd-routines.h"
#include <util/delay.h>

int main(void)
{
unsigned char cnt,blnk,bval;

lcd_init();

lcd_data('T');
lcd_data('e');
lcd_data('s');
lcd_data('t');

DDRA = 0xFF; // Port A Ausgànge
DDRB = 0x00; // Port B Eingànge
PORTB = 0x00; // Interne Pullups deaktivieren

blnk = 0xFF;

while(1)
{
bval = PORTB;
PORTA = blnk;
for (cnt=0;cnt<50;cnt++)
_delay_ms(10); // 50x10ms = 500ms = 0.5 s warten
if ((bval == PORTB) /* &&(bval!=0) */ )
{
if (bval==7)
lcd_clear();
lcd_data(48+(bval & 7));

}
blnk = blnk ^ 0xFF;
}

return 0;
}

Das Program schreibt "Test" und anschliessend nur 0-er auf das LCD,
unabhàngig davon ob die Tasten gedrückt werden.
Wenn ich den bval!=0-Teil wieder einkommentiere, wird gar nichts
ausgegeben.

(PORTA wird zu Debugging-Zwecken immer an/aus getoggelt).

Sieht jemand den Fehler?


danke,
Andreas
 

Lesen sie die antworten

#1 Thorsten Wahn
17/09/2007 - 11:21 | Warnen spam
Andreas Koch schrieb:
if ((bval == PORTB) /* &&(bval!=0) */ )
Sieht jemand den Fehler?



Ja: "PORTB" ist für die Ausgabe, "PINB" für die Eingabe.
Es muss also
if ((bval == PINB) /* &&(bval!=0) */ )
lauten.

Gruß
Thorsten

Ähnliche fragen