PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmel Tiny- Taster Problem



Sepperli
07.11.2010, 21:27
hallo zusammen,
hab n kleines problem, ich möchte einen taster auf einem board einlesen (funk avr von pollin) und damit eine led leuchten lassen.

bestückt ist es mit einem atmel tiny 2313, und ich programmiere es aus dem avr studio (win avr)

das programm sieht in etwa so aus:

#define TAST PORTB1

#define LED2 PIND5
#define LED1 PIND6

#define LED2NR 5
#define LED1NR 6


int main (void)
{
DDRD = 0xFF; // D als ausg.


PORTD = (0<<PD6) | (0<<PD5) | (1<<PD4) | (1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0);

DDRB = 0x00; // alle Pins von Port B als Eingang
PORTB = 0xFF; // alle bits des ports auf log 0

while(1)
{
PORTD |= (true << LED1NR);
PORTD |= (TAST << LED2NR);
}

return 0;
}

jetzt müsste doch led nummer eins dauerhaft leuchten und led nummer 2 bei gedrücktem taster oder?

Besserwessi
07.11.2010, 22:33
Die Schreibweise (true << LED1NR); ist nicht sehr glücklich. True ist nicht so einheitlich definiert, außer das true nicht 0 ist. Besser (1 << LED1NR) schreiben.

Bei der taste funktioniert es dann vermutlich nicht:
PORTB1 wird kaum als (PORTB & 1) definiert sein.

Selbst dann kann die Taste die LED nur anschalten. Einmal an geht sie nicht mehr aus. Wegen der Pullup-widerstände ist die Logik dann vermutlich auch noch invertiert - ein gedrückte Taste wird eine 0, sonst 1.