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


von Thomas (Gast)


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
        }

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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?

von Karl H. (kbuchegg)


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!

von Thomas (Gast)


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

von VonNixNeAhnung (Gast)


Lesenswert?

>> Würden 2KOHM ok sein?

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

mfg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.