www.mikrocontroller.net

Forum: Compiler & IDEs Probleme bei der Abfrage von einem Eingang


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem mit dem Einlesen von einem Eingang an meinem Atmel.
Es ist so, dass der Eingang (pin0) über ein Relais nach VCC verbunden 
ist.

Meine Erwartung war nun, dass ich in der Schleife des Hauptprogramms 
einfach den Pin abfragen kann und nun mitbekomme wenn das Relais 
angezogen hat und dann per Seriell einen Buchstaben ausgebe.

Leider gibt es nun mit dem folgenden Code unentwegt den Buchstaben aus. 
Stoppen kann ich es indem ich das Relais anziehen lasse. Hatte schon 
versucht die Negation umzudrehen also statt
if (!(PINA & 0x01 ))
 folgendes
if (PINA & 0x01 )
Leider auch ohne Erfolg.
Kann mir jemand sagen woran es liegt?

Ich habe einmal beide IF-Statemens in den Code eingefügt mit denen ich 
es schon probiert habe. Als ich es getestet habe war immer nur ein 
Statement zur Zeit drin.
    DDRA  = 0xFE;    //Alles an PortA als Ausgang nur Pin 0 als Eingang
    DDRA  &= ~(1<<PA0);    //Noch einmal explizit für pin 0
    PORTA = 0x00;    //Pullup an Pin 0 ausschalten und alle Ausgänge auf 0 setzen

//Code der in der Main-Schleife steht:
if (!(PINA & 0x01 ))    //  <--War mir hier nicht sicher, tun aber beide das selbe oder?
if (!(PINA & (1<<PINA0)))  //  <------------|
        {
    hwuart_putc('k');
        }

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 if (!(PINA & 0x01 ))
   hwuart_putc('k');
Wenn der Eingang 0 ist, wird das 'k' ausgegeben.
So ist das programmiert.

Wenn ein 'k' ausgegeben werden soll, solange der Eingang 1 ist, dann 
solltest du so schreiben:
 if (PINA & 0x01)
   hwuart_putc('k');

EDIT:
> Leider auch ohne Erfolg.
Ist das Relais wirklich am PinA0 angeschlossen?
Hast du irgenwelche Pullups für definierte Pegel eingebaut (oder 
eingeschaltet)?
Was passiert, wenn du an dem Pin definierte Pegel anlegst?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas wrote:

> ich habe ein Problem mit dem Einlesen von einem Eingang an meinem Atmel.
> Es ist so, dass der Eingang (pin0) über ein Relais nach VCC verbunden
> ist.

OK.
Wenn das Relais angezogen ist, dann hast du also Vcc, also 5V am Pin 
anliegen.
Und wie ist das, wenn das Relais nicht angezogen ist? Gibt es einen 
Mechanismus, der den Pin dann definiert auf 0 zieht?
Ein offener Eingang ist nicht automatisch 0!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK.
Gibt es soetwas wie pulldown-Widerstände die man softwaremässig 
einschalten kann?
Ansonsten bleibt bei mir noch die Frage offen, wie groß der widerstand 
sein muss. Würden 2KOHM ok sein?

Grüße
Thomas

Autor: VonNixNeAhnung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Würden 2KOHM ok sein?

Vermulich tut's auch 'nen 1M-Widerstand, kommt halt dann auch auf Speed 
an.

mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.