hats denn geholfen ? und vor allem was ?Zitat von RIFMAN
Danke für eure Hilfe!
hats denn geholfen ? und vor allem was ?Zitat von RIFMAN
Ja, jetzt gehen die LED's an und aus auf Tastendruck, nur das Problem ist,
solange ich auf Taste 1 bzw. Taste 2 drücke ist der Processor totol mit der entsprechenden Led beschäftigt er kann nichts anders machen, woran kann das denn liegen?
der Code lautet:
Code:#include <avr/io.h> //#define F_CPU 16000000 //#include <avr/delay.h> //extern void wait(uint8_t T); #define T1 0x04 #define T2 0x08 #define LED1 0x20 #define LED2 0x40 int main() { DDRD |= 0x60;//PD5 und PD6 als Ausgänge setzen DDRD &= ~(0x0c); PORTD &= 0x00; while(1) { if(PIND & T1) { while(PIND & T1) if(PORTD & LED1) { PORTD &= ~LED1; } else { PORTD |= LED1; } } if(PIND & T2) { while(PIND & T2) if(PORTD & LED2) { PORTD &= ~LED2; } else { PORTD |= LED2; } } } return 0; }
Sag mal, verendest du nicht das AVR-Studio? Das ist genau für solche kleine Progs zum simulieren geeignet, aber auch für größere Prog.
Was glaubst du was der µC hier macht "while(PIND & T1) " solange du auf die Taste drückst.
Hubert
Doch, aber was hat das mit meinem Problem zu Tun?Sag mal, verendest du nicht das AVR-Studio? Das ist genau für solche kleine Progs zum simulieren geeignet, aber auch für größere Prog.
while(PIND&T1) : damit bleibt die Led an- bzw. ausgeschaltet wenn ich auf die Taste drücke.Was glaubst du was der µC hier macht "while(PIND & T1) " solange du auf die Taste drückst.
Hubert
MfG
Und wenn du das simuliert hättest dann müsstest du auch wissen das solange du die Taste drückst das dieser Teil:
while(PIND & T1)
if(PORTD & LED1)
{
PORTD &= ~LED1;
}
else
{
PORTD |= LED1;
}
nicht verlassen wird solange du die Taste gedrückt hältst und somit sich auch im Rest des Progs nichts tut.
Ausserdem flimmert die LED in der Zeit.
Hubert
Danke Hubert!
ich habe es jetzt so gelöst:
kann noch eine bessere Lösung?Code:#include <avr/io.h> //#define F_CPU 16000000 //#include <avr/delay.h> //extern void wait(uint8_t T); #define T1 0x04 #define T2 0x08 #define LED1 0x20 #define LED2 0x40 #define SUM 0x80; int main() { uint8_t release1; uint8_t release2; DDRD |= 0xE0;//PD5,PD6,PD7 als Ausgänge setzen DDRD &= ~(0x0c); PORTD &= 0x00; release1 = 0x01; release2 = 0x01; while(1) { if((PIND & T1) && (release1 == 0x01)) { release1 = 0x00; if(PORTD & LED1) { PORTD &= ~LED1; PORTD &= ~SUM; } else { PORTD |= LED1; PORTD |= SUM; } } else { if (!(PIND & T1)) { release1 = 0x01; } } if ((PIND & T2) && (release2 == 0x01)) { release2 = 0x00; if(PORTD & LED2) { PORTD &= ~LED2; PORTD &= ~SUM; } else { PORTD |= LED2; PORTD |= SUM; } } else { if (!(PIND & T2)) { release2 = 0x01; } } } return 0; }
MfG
Hier ist was interessantes über Tasten entprellen:
http://www.mikrocontroller.net/articles/Entprellung
hab mir deine nicht angesehen, aber es gibt doch so nette definesZitat von RIFMAN
#include <avr/sfr_defs.h>
#define _TASTER1_PC PC4
#define _TASTER2_PC PC5
dazu das obligatorische
DDRC &=~ (1 << _TASTER1_PC); // Pin PC4 input TASTER
DDRC &=~ (1 << _TASTER2_PC); // Pin PC5 input TASTER
PORTC |= (1 << _TASTER1_PC); // Pin PC4 pull-up enabled
PORTC |= (1 << _TASTER2_PC); // Pin PC5 pull-up enabled
if(bit_is_clear(PINC, _TASTER1_PC))
{ lcd_gotoxy(10,0); lcd_puts("T1"); }
else
{ lcd_gotoxy(10,0); lcd_puts(" "); }
if(bit_is_clear(PINC, _TASTER2_PC))
{ lcd_gotoxy(14,0); lcd_puts("T2"); }
else
{ lcd_gotoxy(14,0); lcd_puts(" "); }
das bit_is_clear(
gibt es für den der mag auch als bit_is_set(
Lesezeichen