und was genau tut nicht?
Hallo zusamen!
ich bin ein neuling in der AVR C-programierung,kann mir jemandem vielleicht sagen was ich hier falsch habe
#include <avr/io.h>
#include <avr/iom16.h>
int main()
{
DDRD |= 0x60;//PD5 und PD6 als Ausgänge setzen
DDRD &=~(0x0c);//PD2 und PD3 als Eingänge
PORTD |= 0x0c;//die Eingänge auf high
while(1)
{
switch(PIND & 0x0c)
{
case 0x08://wenn Taster1 gedrückt wird..
{
PORTD |= 0x40;//dann LED1 geht an
break;
}
case 0x04://wenn Taster2 gedrückt wird..
{
PORTD |= 0x20;//dann LED2 geht an
break;
}
default:
{
PORTD &= ~(0x60);//sonst LED1 und LED2 gehen aus
}
}
};
return 0;
}
und was genau tut nicht?
Wie man Fragen richtig stellt:
http://www.lugbz.org/documents/smart-questions_de.html
normalerweise sollen die Led1 bzw. Led2 leuchten wenn ich die Taster1 bzw Taster2 drücke.
es tut sich aber gar nichts am Board (ATmega16)!
Wie sieht denn Deine Schaltung aus. Die Taster müssen nach GND schalten, sonst passiert mit Deinem Programm nichts.
und woher soll ich denn das wissen, im Montageanleitung ist jedenfalls nichts darüber!
du hast recht die Taster sind auf High geschaltet, ich habe mein Programm folgendermaßen geändert es passiert trotzdem nichts!
#include <avr/io.h>
#include <avr/iom16.h>
int main()
{
DDRD |= 0x60;//PD5 und PD6 als Ausgänge setzen
DDRD &= 0xf3;//PD2 und PD3 als Eingänge
PORTD &= 0xf3;//die Eingänge auf low
while(1)
{
switch(PIND | 0x0c)
{
case 0x04://wenn Taster1 gedrückt wird..
{
PORTD |= 0x20;//dann leuchtet die LED1
break;
}
case 0x08://wenn Taster2 gedrückt wird..
{
PORTD |= 0x40;//dann leuchtet die LED2
break;
}
default:
{
PORTD &= 0x9f;//sonst LED1 und LED2 bleiben ausgeschaltet
}
}
}
return 0;
}
kann jemanden bitte mal sagen woran es liegen kann!
wie gesagt, das ist eine Evaluation Board mit Atmega16-Processor.
Danke
Wenn du auf ein Port eine 1 schreibst das vorher als Eingang definiert wurde, setzt du nur den Internen PullUp sonst ändert sich nichts.
http://www.mikrocontroller.net/artic...f_auf_Register
www.roboternetz.de/wissen/index.php/Avr-gcc
Das sind zwei sehr gute Tutorials, ich würde dir raten die mal durchzuarbeiten.
Hubert
ich verstehe nicht was du damit meinst, kannst du mal bitte weitereklären!Wenn du auf ein Port eine 1 schreibst das vorher als Eingang definiert wurde, setzt du nur den Internen PullUp sonst ändert sich nichts.
Du definierst ein Port als Eingang indem du z.B. DDRD=0x00 für alle 8 Ports schreibst. Schreibst du nun PORTD=0xff sind für alle Eingänge des Port D die internen PullUp aktiv.
Danke für deine erklärung, aber wo habe Fehler gemacht was Port Definition angeht ?
Lesezeichen