Ezalo
24.10.2010, 17:35
Hallo,
ich weiß absolut nicht mehr weiter.
Seit gestern Versuche ich über einen Mega32 eine LED einzuschalten mithilfe eines Tasters.
Belegung:
Masse -> Taster -> PA1
Masse -> Vorwiderstand -> LED -> PA0
Dazu folgendes Programm:
#ifndef MCU // Welcher AVR genutzt wird, wird i.A. im Makefile definiert
#define MCU atmega32
#endif
#ifndef F_CPU // kann auch im Makefile definiert sein
#define F_CPU 16000000UL // Takt als LONG definieren, da zu groß für Integer
#endif
#include <avr/io.h> // Namen der IO Register
#include <util/delay.h> // Funktionen zum warten
// Achtung, damit delay richtig funktioniert muß mit Optimierung compiliert werden
int main(void){
DDRA |= 0b00000001; //PA0 als Ausgang definieren
PORTA &= ~(1<<PA0); //PA0 auf Low schalten (LED aus)
PORTA &= ~(1<<PA1); //PA1 auf High setzen
while(1){
if(PINA&(1<<PIN1)){ //Wenn Taste gedrückt...
PORTA |= (1<<PA0); //... schalte LED ein
}
}
while(1);
return 0;
}
Die LED leuchtet immer, egal ob ich dne Taster betätigt habe oder nicht. Eigentlich müsste sie doch erstmal aus sein oder?
Hab schon google befragt aber nichts gefunden was mein Problem löst.
MfG
Ezalo
Edit:
Quellcode geändert:
int main(void){
DDRA |= 0b00000001; //PA0 als Ausgang definieren
PORTA &= ~(1<<PA0); //PA0 auf Low schalten (LED aus)
PORTA &= ~(1<<PA1); //PA1 auf High setzen
while(1){
if(PINA&(1<<PIN1)){ //Wenn Taste gedrückt...
PORTA |= (1<<PA0); //... schalte LED ein
}
else{
PORTA &= ~(1<<PA0);
}
}
while(1);
return 0;
}
Erklärung was jetzt passiert:
- LED an
- Wenn Taster mit GND verbundne LED aus > egal ob Taster gedrückt oder nicht... < versteh ich nicht wieso...
- Wenn GND wieder entfernt von Taster und Taster betätigt geht die LED wieder an
- GND von Taster wieder angeschlossen -> LED aus
ich weiß absolut nicht mehr weiter.
Seit gestern Versuche ich über einen Mega32 eine LED einzuschalten mithilfe eines Tasters.
Belegung:
Masse -> Taster -> PA1
Masse -> Vorwiderstand -> LED -> PA0
Dazu folgendes Programm:
#ifndef MCU // Welcher AVR genutzt wird, wird i.A. im Makefile definiert
#define MCU atmega32
#endif
#ifndef F_CPU // kann auch im Makefile definiert sein
#define F_CPU 16000000UL // Takt als LONG definieren, da zu groß für Integer
#endif
#include <avr/io.h> // Namen der IO Register
#include <util/delay.h> // Funktionen zum warten
// Achtung, damit delay richtig funktioniert muß mit Optimierung compiliert werden
int main(void){
DDRA |= 0b00000001; //PA0 als Ausgang definieren
PORTA &= ~(1<<PA0); //PA0 auf Low schalten (LED aus)
PORTA &= ~(1<<PA1); //PA1 auf High setzen
while(1){
if(PINA&(1<<PIN1)){ //Wenn Taste gedrückt...
PORTA |= (1<<PA0); //... schalte LED ein
}
}
while(1);
return 0;
}
Die LED leuchtet immer, egal ob ich dne Taster betätigt habe oder nicht. Eigentlich müsste sie doch erstmal aus sein oder?
Hab schon google befragt aber nichts gefunden was mein Problem löst.
MfG
Ezalo
Edit:
Quellcode geändert:
int main(void){
DDRA |= 0b00000001; //PA0 als Ausgang definieren
PORTA &= ~(1<<PA0); //PA0 auf Low schalten (LED aus)
PORTA &= ~(1<<PA1); //PA1 auf High setzen
while(1){
if(PINA&(1<<PIN1)){ //Wenn Taste gedrückt...
PORTA |= (1<<PA0); //... schalte LED ein
}
else{
PORTA &= ~(1<<PA0);
}
}
while(1);
return 0;
}
Erklärung was jetzt passiert:
- LED an
- Wenn Taster mit GND verbundne LED aus > egal ob Taster gedrückt oder nicht... < versteh ich nicht wieso...
- Wenn GND wieder entfernt von Taster und Taster betätigt geht die LED wieder an
- GND von Taster wieder angeschlossen -> LED aus