PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bein Einlesen von Taster



Darki89
07.02.2009, 15:47
Hi, mein Problem mag wohl simpel erscheinen, aber ich bekomms echt nicht auf die Reihe einen Taster richtig einzulesen!
Sobald ich 5V an den Eingang lege, geht die LED zwar an, jedoch wird sie sehr dunkel oder der AVR (ist ein Mega16) Resettet sogar. Eine Strommessung hat über 500mA ergeben, die fließen wenn ich den Taster drück. Ich hab auch schon versucht die Pullups über PORTC = 0b11111111; zu aktivieren und in der if Abfrage dann nach 0b11111110; zu fragen, aber da geht die LED garnicht an. Hab auch schon die Forensuche bemüht und in den Tutorials gelesen, aber ich bin mir recht sicher das ich es richtig gemacht hab.
Was mich immer verwirrt, ist diese Zuordnung Bitweise. Mal steht da dann DDRB &= ~(1 << PB0) und dann wieder PORTB |= (1 << PB0), warum wird hier nicht beide male | (oder) verwendet? Bei dem ersten wird die Zahl ja sogar noch invertiert, was hat das für einen Sinn? Und warum dann ein &? Das ist vllt auch das, warum es bei mir nicht geht, weil mir da noch das Verständnis fehlt, kann das vllt wer erläutern?
Hier mal noch mien Code:

#define F_CPU 1000000

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB = 0b11111111;
DDRC = 0b00000000;
PORTC = 0b00000000;

while (1)
{
if (PINC == 0b00000001)
{
_delay_ms(50);
PORTB = 0b11111111;
}

}
return 0;
}
Danke schonmal für jede Antwort!

McJenso
07.02.2009, 16:16
Hallo,

riecht nach Hardwareproblem. 500mA ist zu viel! Poste mal den Schaltplan und kontrolliere alle Verbindungen.

PORTB |= (1 << PB0) Hier wird das 0-Bit von PORTB gesetzt.
DDRB &= ~(1 << PB0) Hier wird (nur) das 0-Bit von DDRB gelöscht
Schau dir das hier (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports) sonst mal an.

Gruß

Jens

Hubert.G
07.02.2009, 16:39
LED mit Vorwiderstand?

Darki89
07.02.2009, 17:11
Naja, Schaltplan gestaltet sich als schwierig ;) Ich steck die Verbindungen auf einer selbst geätzten Platine.
Verbunden zum µC sind VCC, 2 mal GND und natürlich RESET. MUSS ARef und AVCC auch noch verbunden werden? Weil bis jetzt hats immer so geklapt, wollts hier aber grade nochmal erwähnen.
Am Taster liegen 5V an, ein 22k Widerstand zieht das ganze auf masse. Widerstand ist ok. Sind auch keine Brücken oder ähnliches auf der Platine - hab ich gemessen.
LED hat natürlich einen Vorwiderstand.

Hubert.G
07.02.2009, 17:22
AVCC brauchst du wenn du PORTA verwenden willst.
Tasten sicher an PORTC, denn wenn du 5V über die Tasten an einen als Ausgang geschalteten Port legst der auf low ist, dann ist das so viel wie kurzschluss.

Darki89
07.02.2009, 17:26
Jap, 100% sicher, sonst würde ja auch die LED nicht angehen, oder?
Aber am Programm ist soweit nichts falsch? Damit ich das für mich ausschließen kann.

Hubert.G
07.02.2009, 17:40
Das Programm ist richtig, auch wenn das delay sinnlos ist.
Wie schaltest du die LED wieder aus?

McJenso
07.02.2009, 17:42
Hallo,

AVCC hat Hubert ja schon geschrieben, sonnst muss deine Belegung nur noch zum Programm passen. Da ist sonst nichts falsch. Ist der Controller ein DIP und gesockelt? Zieh ihn mal raus und schalte die LED mit einer Drahtbrücke. Dann drück den Taster.

Gruß

Jens

Darki89
07.02.2009, 17:48
Die LED bleibt einfach an, ich hab den Code einfach komplett runter gekürzt, weils nicht richtig klapte, sodass die LED einfach nur angeht. Aus geht sie erst wenn ich Reset drücke oder den µC vom Strom trenne.
Ja, der Controller ist DIP und ruht in einem Nullkraft Sockel.
Ich versuch das mal mit der Drahtbrücke.