Gast
#3130877
Hallo zusammen, ich bin am verzewifeln.
Für den AT90USBKey2 habe ich mir eine Adapterplatine gemacht, damit mal
die Ports des µC auch anständig nutzen kann. Ich selber bin ziemlicher
Neuling auf dem ganzen Gebiet. Und habe nun folgedes Problem:
Zum Test ob alle Pins ordnungsgemäß funktionieren habe ich zunächst ein
kleines Lauflicht-Programm geschrieben. Es ist kein guter
Programmierstil, aber es sollte auch nur zu Testzwecken sein.
[c]#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
void watchdog_off() {
MCUSR &= ~(1<<WDRF); //Ack_wdt_reset();
WDTCSR |= (1<<WDCE) | (1<<WDE); //Wdt_change_enable();
WDTCSR = 0x00; //Wdt_stop();
}
void Init(void){
// Alle Pins als Ausgang schalten
DDRB = 0xFF;
}
int main(void)
{
watchdog_off();
Init();
while(1)
{
//Alle Pins 5V ausgeben
PORTB = 0x01;
_delay_ms(100);
PORTB = 0x02;
_delay_ms(100);
PORTB = 0x04;
_delay_ms(100);
PORTB = 0x08;
_delay_ms(100);
PORTB = 0x10;
_delay_ms(100);
PORTB = 0x20;
_delay_ms(100);
PORTB = 0x40;
_delay_ms(100);
PORTB = 0x80;
_delay_ms(100);
} // while (1)
} // main[\c]
Leider tut sich an Port B aber 'null' (an den anderen Ports auch nicht).
Da ich mir bei dem Programm nicht sicher war, habe ich anschließend
versucht Spannung auf allen Pins auszugeben. Ergebnis ist entsprechend,
die LEDs bleiben dunkel. Angeschlossen sind sie jeweils vom Pin zu
Masse/GND, wobei das kurze Bein jeweils an GND liegt.
[c]int main(void)
{
watchdog_off();
Init();
while(1)
{
//Alle Pins 5V ausgeben
PORTB = 0xFF;
} // while (1)
} // main[\]
Mit einem Durchgangsprüfer habe ich zunächst getestet ob ich beim löten
Mist gebaut habe, aber da hat alles einen richtigen Eindruck gemacht.
Zum Schluss bin ich hingegangen und habe einfach mal eine LED
andersherum angeschlossen, von Vcc zum PortPin tut sich was. Was läuft
fa schief?
DDRX = 0b00001111 sollte doch die oberen vier auf Eingang setzen und die
unteren auf Ausgang. In meinem Programm demnach alle auf Ausgang. Mit
PORTX = 0b00001111 sollten doch die oberen vier 0V führen und die
unteren vier ~5V ausgeben. In meinem Programm demnach alle 5V ausgeben.
Habe ich hier etwas falsch verstanden?
Ich hoffe jemand kann mir erklären was ich falsch mache.
Gruß
T. St.