PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger: Port lässt sich nicht auslesen?



Christian_D
14.05.2007, 23:27
Hallo,

ich bin Anfänger in der uC-Programmierung (zumindest, was Mega8 betrifft) und möchte mit folgendem Programm den Pin 7 auslesen und diesen auf Pin 1 "ausgeben".

(1) Leider messe ich eine Leerlaufspannung von 1.5 V, obwohl lt. Datenblatt mit internem Vorwiderstand 5 V an Pin 7 anliegen sollten. Was kann falsch sein?

(2) Kann ich aus diesem Grund den Taster ("Schalten" = auf Masse ziehen) nicht detektieren?

Hier das Programm:

int main()
{
// LED-Port auf IN und OUT
DDR_LED = 0x0F ; // Port 7 = Eingang, Port 1 = Ausgang //
PORT_LED = 0xF0 ; // Pull-up Widerstand Port 7 = EIN //

// Endlosschleife
while (1)
{
if (PIN_LED & 0x80) // Taster nicht gedrückt --> Port 7 = High //
{
PORT_LED &= ~(0x02) ; // Port 1 = nicht gesetzt (LED off) //
}
else // Taster gedrückt --> Port 7 = Low (Gnd) //
{
PORT_LED |= 0x02; // Port 1 = gesetzt (LED on)
}
}
// main braucht keine return-Anweisung, weil wir nie hier hin kommen
}


Vielen Dank für Antworten!

Christian

vklaffehn
15.05.2007, 00:22
Hallo!
'Blöde' Frage : an welchen Port hast Du denn Deine LED und Deinen Taster angeschlossen? Ich kenne DDR_LED, PORT_LED und PIN_LED nämlich nicht... Ansonsten sieht es aber richtig aus, da werden die unteren vier Bit als Ausgang geschaltet, die oberen als Eingang und dann die Pullups für die oberen vier Bits angeschaltet. Allerdings schaltest Du Deine LED über Bit2 vom Port, da 0x02 binär 00000010 ist. Ich hoffe, Du hast nicht tatsächlich Pin 1 und Pin 7 gemeint, das ist nämlich Vcc und Reset :-)

MfG Volker

RIFMAN
15.05.2007, 09:16
hallo!

du übst bestimmt auf einen Evoluation-Board, ist das etwa die von POLLIN?
dann mußt du den Schaltplan genau angucken wie die pull up's gesetzt sind wenn der Taster nicht gedruckt ist,denn in solche Boards sind sie meistens auf low gesetzt.

Christian_D
15.05.2007, 21:15
Hallo,

vielen Dank für die schnellen Antworten! Jetzt noch einige Infos:

Die Ports habe ich folgendermaßen definiert:

#define PORT_LED PORTB
#define DDR_LED DDRB
#define PIN_LED PINB

Das sind die normalen digitalen 8 Pins (1 Port). Auch fange ich bei 0 an zu zählen, daher 0x02 als Pin 1 (entspricht nicht dem Standard?) und 0x80 als Pin 7.

Das Entwicklungsboard ist von Embedit und hat keinen speziellen Namen. Die Ports sind direkt aus dem uC geführt, sind also nicht auf low gesetzt. Auch sind Reset und Vcc andere Anschlüsse.

Über weitere Vorschläge würde ich mich sehr freuen!

Viele Grüße

Christian