Probleme bei der Abfrage von einem Eingang

Gast #1245132
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
1
if (!(PINA & 0x01 ))
 folgendes
1
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.
1
    DDRA  = 0xFE;    //Alles an PortA als Ausgang nur Pin 0 als Eingang
2
    DDRA  &= ~(1<<PA0);    //Noch einmal explizit für pin 0
3
    PORTA = 0x00;    //Pullup an Pin 0 ausschalten und alle Ausgänge auf 0 setzen
4

5
//Code der in der Main-Schleife steht:
6
if (!(PINA & 0x01 ))    //  <--War mir hier nicht sicher, tun aber beide das selbe oder?
7
if (!(PINA & (1<<PINA0)))  //  <------------|
8
        {
9
    hwuart_putc('k');
10
        }
Moderator (Firma: Titel) Persönliche Seite #1245250
Lesenswert?
• ▲
▼
1
 if (!(PINA & 0x01 ))
2
   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:
1
 if (PINA & 0x01)
2
   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?
#1245267
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!
Gast #1245942
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

Antwort schreiben

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.

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.