atemega Pulldown Widerstand erfüllt seine Funktion nicht

Gast #4118792
Lesenswert?

Ich hoffe ihr könnt mir helfen. Es ist eigentlich ganz Einfach aber ich 
bekomme es nicht hin.

Ich möchte mit meine ATmega einen PIN so beschalten, dass der nur HIGH 
ist wenn er mit Vcc verbunden ist.
Schaltung ist wie im Anhang mit 10k. Mein Code sieht wie folgt aus:

#include <avr/io.h>



int main(void)
{
  initOnBoardLed(); // Funktion geht
  DDRD  = 0b00000000;  // Input
  PORTD = 0b00000100;  //interne Pullup nein

  while(1)
  {
    if(PIND & (1<<PD2))
    {
      LED_RT_OFF();// Funktion geht
      LED_GR_ON();// Funktion geht
    }
    else
    {
      LED_GR_OFF();// Funktion geht
      LED_RT_ON();// Funktion geht
    }
  }
}

Meine Erwartung ist das die Grüne LED leuchtet wenn der Schalter 
geschlossen ist sonst die Rote. Die Rote LED löchte leider nur wenn ich 
den Pin direkt mit Masse verbinde.

Ich finde meine Fehler einfach nicht. Sieht Ihn wer von euch?
Angehängte Dateien:
Gast #4118809
Lesenswert?

Dussel schrieb:
> Wenn ich mich richtig erinnere, schaltest du den internen
> Pullupwiderstand an PD2 ein. Damit hast du einen Spannungsteiler
> zwischen Pullup und Pulldown.

Ja du hast recht, Pullupo war an.

npn schrieb:
> Wozu hast du den internen Pullup aktiviert?
> Mach den mal aus...

Kommt aus dem letzten test. Nach dem Ausmachen gleiche Bild.
Gast #4118810
Lesenswert?

npn schrieb:
> Wozu hast du den internen Pullup aktiviert?
> Mach den mal aus...

Die andere Möglichkeit ist, den internen Pullup eingeschaltet zu lassen 
und dafür den Taster vom Pin gegen GND zu schalten. Dann ist der 
Low-aktiv, also im offenen Zustand liegen ca. 5V am Pin an und beim 
Schließen des Tasters dann ca. 0V. Damit sparst du einen Widerstand.
Gast #4119535
Lesenswert?

Ich habe mir jetzt erstmal mit einem Transitor als Schalter gegen Masse 
+ internen Pullup beholfen. Muss aber eigentlich nur mit pulldown gehen. 
Jetzt ist zwar die Logic invertiert, aber ich kann activ high schalten.

Hat wer eine Idee warum die als Ausgang gesetzen Pins 3,3V haben, wenn 
sie nicht direkt auf Masse liegen?
Gast #4119577
Lesenswert?

HansWurst schrieb:
> Hat wer eine Idee warum die als Ausgang gesetzen Pins 3,3V haben, wenn
> sie nicht direkt auf Masse liegen?

Warum sollte man, auf Ausgang gesetzte Pins, auf Masse legen?

Wenn du das auch nur mit einem Pin machst, wundert mich nix mehr....
Selbst austretender Rauch, würde mich nicht verwundern...
Gast #4119598
Lesenswert?

Ulrich F. schrieb:
> HansWurst schrieb:
>> Hat wer eine Idee warum die als Ausgang gesetzen Pins 3,3V haben, wenn
>> sie nicht direkt auf Masse liegen?
>
> Warum sollte man, auf Ausgang gesetzte Pins, auf Masse legen?
>
> Wenn du das auch nur mit einem Pin machst, wundert mich nix mehr....
> Selbst austretender Rauch, würde mich nicht verwundern...

EINGANG sorry mein Fehler aber es ist definitiv ein Eingang.

Also noch mal die Frage:
Hat wer eine Idee warum die als EINGANG gesetzen Pins 3,3V haben, wenn
sie nicht direkt auf Masse liegen?
Gast #4119602
Lesenswert?

Unbeschaltete Inputs schweben.
Es ist Zufall, welche Spannung da anliegt.
u.a. abhängig von Temperatur, Exemplarstreuung, Störeinstreuung, usw.



Ist da allerdings ein Pulldown dran, Dann ist entweder der Pulldown 
unterbrochen, oder der Portpin gebraten.

Also, ein Defekt, oder das Schaltbild oben stimmt nicht.
Gast #4119626
Lesenswert?

Ulrich F. schrieb:
> Ist da allerdings ein Pulldown dran, Dann ist entweder der Pulldown
> unterbrochen, oder der Portpin gebraten.
>
> Also, ein Defekt, oder das Schaltbild oben stimmt nicht.

Also der Pulldown(10k) steckt wie folgt:

GND-- 10k -- Pin -- Schalter -- Vcc

Das Problem mit den Pulldowns habe ich an allen Pins und die Löstellen 
sehen gut aus.

Ein Disablen der Pullups im SFIOR blieb auch ohne Erfolg. Was kann es 
sein?
Gast #4119722
Lesenswert?

Ingo Less schrieb:
> Beleuchteter Schalter?

Drahtbrücke im Steckbrett.

Felix Pflaum schrieb:
> Wo ist der Code der anderen Funktionen, die du in der main-Funktion
> aufrufst? Ohne den kompletten Quellcode ist das hier nur Raterei, da
> einzelne Funktionen für sich wunderbar laufen können, im Zusammenspiel
> mit anderen aber nicht.

Hier sind die Funktionen aber an dennen liegt es nicht.

// The LED is connected to Port G3 and GND.
#define LED_RT_ON()  {PORTG |= 8; }
#define LED_RT_OFF() { PORTG &= ~8; }

// The LED is connected to Port G4 and GND.
#define LED_GR_ON()  { PORTG |= 16; }
#define LED_GR_OFF() { PORTG &= ~16; }


void initOnBoardLed()
{
  DDRG |= 8;
  DDRG |= 16;
}
Gast #4119776
Lesenswert?

HansWurst schrieb:
> wie bekomme ich heraus ob der atmega zerbraten ist?

Indem du ihn durch einen neuen ersetzt und prüfst, ob der sich anders 
verhält.

Amateur schrieb:
>> DDRG |= 8;
>> DDRG |= 16;
> ... geht auch kürzer.

Vor allem lesbarer. Im Eingangsposting stand da noch PORTD. Warum ist 
das auf einmal PORTG?
Ansonsten gilt beim Mega128 immer die erste Frage: 
Mega103-Compatibility-Fuse ausgeschaltet? JTAG ausgeschaltet? Alle 
Masse- und VCC-Pins korrekt beschaltet?
Gast #4119829
Lesenswert?

Mal ganz blöd gefragt, ich kenne deinen Wissensstand ja nicht: Bist du 
sicher, dass das Board mit 5V läuft und nicht mit 3,3V? Ein 5V-Netzteil 
heißt noch nicht, dass der Controller auch mit 5V läuft.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren