Relais, Spannung am IO-Port bricht zusammen

Gast #1944134
Hallo zusammen,

ich möchte mit einem Atmega eine Reihe von Reedrelais ansteuern. An den 
offenen IO-Pins messe ich korrekt 4.89V bei High und ein paar Millivolt, 
wenn der Ausgang auf Low steht. Soweit alles ok.

Wenn ich nun ein Relais an den Ausgang hänge, bricht die 
Ausgangsspannung bei High  ein auf ca. 60mV, das Relais zieht jedoch 
nicht an. Ich habe die Relais schon mit den Labornetzteil angesteuert 
und den Strom gemessen, 10mA - wie zu erwarten bei 5V und 500 Ohm 
Spulenwiderstand.

Warum ist der AVR nicht in der Lage, die 10mA zu treiben? Lt. Datenblatt 
kann er ja "DC Current per I/O ... Pin 40mA" und 200mA insgesamt 
treiben...

Beste Grüße,

Alfred
Gast #1944209
So, ich habe jetzt alles nochmal mit einem einzelnen Relais 
durchgespielt. Mit Netzteil schaltet das Relais fein durch und zieht 
dabei 10mA. Der Ausgang des AVR bricht sowohl nach beim Anschießen eines 
Relais als auch bei einem 560Ohm Widerstand zusammen.

Der Port ist als Output konfiguriert, kein JTAG stört den PORTC und 
unbelastet stimmen die High/Low-Pegel. Hat noch jemand eine Idee?

Ratlos,

Alfred
#1944222
also nehmen wir mal 50kOhm Pullup an (lt. DB sinds 20-50kOhm), dann 
wären das 100µA, und die über 500Ohm würden 50mV machen - das ist das 
mindeste. Deine 66mV weisen also rel. eindeutig auf den Betrieb mit 
Pullup hin.
Kaputt ist also vermutlich nix, nur programtechnisch hapert es noch 
etwas bei der IO-Geschichte. Was - das können die Egschbärtn hier nur 
mit Sourcecode herausfinden.
(Firma: TravelRec.) Persönliche Seite #1944246
Simon, guck mal weiter oben ;-)

Alfred, macht Dein Programm noch etwas anderes als den Code, den Du 
vorhin gepostet hast? Führt Dein Programm eine Hauptschleife aus? Wenn 
Du keine Schleife programmiert hast, werden die Ports zwar gesetzt, der 
Controller rennt aber durch den Speicher auf RESET und löscht die Ports 
wieder, woraufhin sie wieder gesetzt werden. Ein unkonfigurierter 
Watchdog könnte ebenfalls zuschlagen und den Controller permanent 
rücksetzen. Am besten postest Du mal Deinen kompletten Code.
Gast #1944317
Ohje, ohje!

Ich habs gefunden: Port-Initialisierung in eine Funktion ausgelagert und 
diese nicht aufgerufen. Asche auf mein Haupt!

Und danke an alle, die geantwortet haben :-)

Beste Grüße

Alfred

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.