Forum: Mikrocontroller und Digitale Elektronik ansteuerung eines Tasters mit AVR Controller in C


von amateur (Gast)


Lesenswert?

Hallo!
Wir haben ein Problem mit der Ansteuerung unseres Tasters. Eigentlich 
wollten wir nur ein einfaches programm zum testen schreiben, was jedoch 
nicht funktioniert hat:

#include <avr/io.h>

int main(void)
{
DDRB=0b11111111;
DDRD=0b00000000;

 while(1)
  {
    if (PORTD==0b00000001) // Taster zu
    {
    PORTB=0b00000111; //LEDs an
    }
  }
}

Als wir das Programm auf unseren Mirokontroller gebrannte hatten, war 
zwischen dem PORTD und hight noch nicht mal eine Spannung. Die LEDs 
haben dementsprechend auch nicht geleuchtet,auch wenn man den tTaster 
gedrückt hat.
Wäre super, wenn uns das jemand vertsänlich erklären könnte, weil wir 
noch wirklich wenig Erfahrungen mit programmieren haben.
Danke schon mal
und LG

von Karl H. (kbuchegg)


Lesenswert?

amateur schrieb:

> Als wir das Programm auf unseren Mirokontroller gebrannte hatten, war
> zwischen dem PORTD und hight noch nicht mal eine Spannung.

Logisch.
WOher soll sie auch kommen?
Von einem Pin, der auf Eingang geschaltet ist sicher nicht. Der gibt 
keine Spannung ab, sondern 'erfühlt' den Spannungspegel, der ihm 
vorgegeben wird. Deswegen ist das ja auch ein Eingang und kein Ausgang.


Lies dir das mal durch.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

Die Assembler Anweisungen lässt du links liegen. Es geht darum, wie sich 
Portpins verhalten.

von amateur (Gast)


Lesenswert?

OK Danke!
Dann ist das schonmal geklärt. Aber was haben wir im Programm falsch 
gemacht bzw. was müssen wir machen?

von Michael (Gast)


Lesenswert?

amateur schrieb:
> Aber was haben wir im Programm falsch gemacht bzw. was müssen wir machen?

Das kommt drauf an, wie und wo ihr den Taster angeschlossen habt und ob 
ein Pull-up/-down Widerstand aktiviert bzw. vorhanden ist.

von Blumenpol (Gast)


Lesenswert?

Nicht gleich die Führung abgeben wollen,
wenn mal jemand einen Hinweis gibt. ;-)

Lies nochmal den Abschnitt: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

und vergleiche ihn mit Deinem Programm. Stück für Stück. Wort für Wort.
Du findest es bestimmt selbst. Und das "Aha" ist es wert.

von Karl H. (kbuchegg)


Lesenswert?

amateur schrieb:
> OK Danke!
> Dann ist das schonmal geklärt. Aber was haben wir im Programm falsch
> gemacht bzw. was müssen wir machen?

Ihr müsst vor allen Dingen erst mal wissen, wie eure Taster 
angeschlossen sind.

Ein Eingang darf nie ohne eine definierten Spannungspegel bleiben. 
Entweder der Taster gibt das in beiden Fällen (gedrückt oder nicht 
gedrückt) vor oder aber er sorgt nur dann, wenn er gedrückt ist für 
einen definierten Pegel. Dann muss man durch geeignete sonstige 
Beschaltung dafür sorgen, dass es auch im nicht gedrückten Zustand eine 
definierte Spannung gibt.

Und dazu muzss man wissen, wie die Taster eigentlich genau angeschaltet 
sind und was passiert, wenn man den Tatser drückt.

von Carneval (Gast)


Lesenswert?

"ansteuerung eines Tasters mit AVR Controller in C" ist das Thema, nicht 
etwa umgekehrt.

Stellt sich also die Frage, unter welchen Bedingungen der Taster seinen 
Zustand ändert. Alles andere geht am Thema vorbei.

von amateur (Gast)


Lesenswert?

Michael schrieb:
"Das kommt drauf an, wie und wo ihr den Taster angeschlossen habt und ob
ein Pull-up/-down Widerstand aktiviert bzw. vorhanden ist."

Wir haben einen Pull-up widerstand aktiviert und den Taster an Masse 
angschossen. Solange der Taster nicht gedrückt ist, hat er eine Spannung 
von 5 Volt. Eigentlich müsste das so richtig sein, aber wir sind uns 
nicht ganz sicher. Deshalb hier nochmal unser Programm:

#include <avr/io.h>

int main(void)
{
DDRB=0b11111111;
PORTD=0b00000001;  //Pull up widerstand aktivieren
DDRD=0b00000000;

while(1)
  {
    PORTD=0b00000100; // Pin2 auf 1 ??
    if (PIND==0b00000100)
  {
         PORTB=0b00000111;
        }
  }
}

von Carneval (Gast)


Lesenswert?

"Das kommt drauf an, wie und wo ihr den Taster angeschlossen habt"

Stimmt. Es macht einen Unterschied, ob der Taster im Bad oder in der 
Küche ist. Ebenfalls ist es maßgeblich, wieviele Anschlüsse des Tasters 
Verwendung finden.

von D. Sieber (Gast)


Lesenswert?

Gerade frage ich mich ein weiteres mal nach dem Sinn dieses Forums ... 
Kinder, lasst doch einfach die Finger von Elektronik!


Mein Name ist Dieter Sieber, und ich bin ein Ingeneur bei Exxon Mobil in 
Deutschland.

von C. Wulff (Gast)


Lesenswert?

Da ich jetzt viel Freizeit habe, ist die Sinnfrage zunehmend wichtig 
geworden. Umsomehr verdient es unser aller Achtung, wenn sich ein 
"Ingeneur" (sic!" sich outet, dass er seinen Titel nicht mal richtig 
schreiben kann.

von Karl H. (kbuchegg)


Lesenswert?

amateur schrieb:

> von 5 Volt. Eigentlich müsste das so richtig sein,

Nö.
Das ist kompletter Quatsch.

Werdet euch doch mal darüber einig, an welchem Pin ihr was angeschlossen 
habt.

Und dann leg diese bescheuerte Bitschreibweise ab, wenn du damit nicht 
klarkommst.

Ein Pin wird mit

   PORTx |= ( 1 << Pinnummer );

auf 1 gesetzt.

Ein Pin wird mittels

  PORTx &= ~( 1 << Pinnummer );

auf 0 gesetzt,

Ein Pin wird mittels

  if( PIN & ( 1 << Pinnummer ) )

darauf hin abgefragt, ob er 1 ist.

DDR Register: Für einen Pin muss das Bit mit seiner Pinnummer auf 0 
sein, dann ist der Pin Eingang.
Ist selbiger Pin auf 1, dann ist der Pin Ausgang.

Bei einem Eingangspin bekommt das PORT Register (nicht PIN, PIN ist mit 
dem physikalischen Pin verknüpft) für diesen Pin eine Sonderrolle: es 
schaltet den Pullup an diesem Pin ein bzw. aus. ( 1 ist ein)

Und das zieht ihr jetzt durch! Das ist doch nicht schwer!

von Stromer (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> amateur schrieb:
>
>> von 5 Volt. Eigentlich müsste das so richtig sein,
>
> Nö.
> Das ist kompletter Quatsch.
>

Stimmt. Der "angesteuerte Taster" dürfte erst ab 2,5 kV leitend werden.

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.