Forum: Mikrocontroller und Digitale Elektronik Einfaches Taster.skript funktioniert falsch


von mikro-noob (Gast)


Lesenswert?

Hi!

Ich bin gerade dabei in die Welt der Mikrocontroller einzutauchen und 
habe mich schon einigermaßen eingelesen. Bin gerade dabei ein Beispiel 
zum Thema Taster zu programmieren, aber entweder ich habe einen dummen 
fehler drin, den ich einfach nicht finde oder ich habe das ganze falsch 
verstanden... (sry wenn diese Frage vielleicht zu noobig ist, aber jeder 
beginnt mal klein^^)

Link: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen
unter dem Punkt: Pullup-widerstand...

Laut tutorial kann man den pullup-wiederstand am eingang aktivieren und 
dann den taster direkt an minus schalten.. wenn man drückt, leuchtet der 
entsprechende Pin beim ausgangsport... bei mir ist es aber genau 
umgekehrt.. es leuchten alle außer der gedrückte...

Meine Beschaltung ist folgendermaßen:
PortB hat Taster an minus verbunden
Port D hat leds+widerstände an minus verbunden.

Es würde genauso wie im tutorial funktionieren, wenn ich die LEDs statt 
an minus an plus schalte, aber das ergibt für mich irgendwie keinen 
sinn.. Wenn ich den taster PortB1 drücke, hat doch PINB1 den wert 1... 
und somit PORTD1 auch den wert 1... und 1 bedeutet doch pluspol am 
Pin-ausgang, der an minus angeschlossen werden muss, oder?

Also ich gebe zu, dass ich jetzt etwas verwirrt bin und hoffe, dass 
jemand mir dabei helfen kann das besser zu verstehen... danke schon mal 
;-)

Hier der code (Atmega8):

.include "m8def.inc"
 .CSEG
 .ORG 0000

 .def temp=r16

 ldi temp, 0x00
 out DDRB, temp
 ldi temp, 0xFF
 out PORTB, temp

 out DDRD, temp
 ldi temp, 0x00
 out PORTD, temp

 rjmp main

 main:
 in temp, PINB
 out PORTD, temp
 rjmp main

von Thomas (Gast)


Lesenswert?

mikro-noob schrieb:
> wenn man drückt, leuchtet der entsprechende Pin beim ausgangsport...

Der Pin vom Ausgangsport leuchtet gar nicht. Dort wird nur ein 
Spannungspegel ausgegeben. Und je nach dem, wie die LED angeschlossen 
ist, geht sie an oder aus.

von EGS (Gast)


Lesenswert?

Hi,

Also der Zaubertrick heißt Hugh oder Löw aktive portpins. Je nach 
Kontroller liegen die Pins entweder bei logisch 1 Ansteuerung Vcc oder 
Vss Pegel.

Also muss man da nen bisseln Bits umschubsen...

MfG

von Bernd S. (bernds1)


Lesenswert?

> sinn.. Wenn ich den taster PortB1 drücke, hat doch PINB1 den wert 1...
> und somit PORTD1 auch den wert 1... und 1 bedeutet doch pluspol am
> Pin-ausgang, der an minus angeschlossen werden muss, oder?
>
>  main:
>  in temp, PINB
>  out PORTD, temp
>  rjmp main

Schau doch mal, ob dein Text und der Programm-Ausschnitt zusammen
passen.
Du hast geschrieben, daß die Taster gegen Masse geschaltet
sind.
Dann schreibst du, wenn du den Taster drückst, hat PINB den
Wert 1.
Was ist denn Masse? 0 oder 1?
Und was steht im Programm? Da wird an PORTD das ausgegeben, was
an PINB eingelesen wurde.
Jetzt denk nochmal ganz in Ruhe über alles nach. Anschließend
will ich deine flache Hand an deiner Stirn sehen :-)

von Kurt B. (kurt-b)


Lesenswert?

mikro-noob schrieb:
>
> sinn.. Wenn ich den taster PortB1 drücke, hat doch PINB1 den wert 1...
> und somit PORTD1 auch den wert 1... und 1 bedeutet doch pluspol am
> Pin-ausgang, der an minus angeschlossen werden muss, oder?

Wenn du den Taster drückst dann hat dein Pin 0

(der Taster ist ja an Masse geschaltet)

Kurt

von Bernd S. (bernds1)


Lesenswert?

@kurt: Damit ist die letzte Antwort auch noch gegeben :-)

von Karl H. (kbuchegg)


Lesenswert?

mikro-noob schrieb:

> an minus an plus schalte, aber das ergibt für mich irgendwie keinen
> sinn.. Wenn ich den taster PortB1 drücke, hat doch PINB1 den wert 1...

Wenn die Taster so verschaltet sind, wie du beschrieben hast, dann: Nein


   Der Taster ist offen

                  -+----Vcc
                   |
                  +-+
                  | | Pullup-Widerstand
                  +-+
                   |
            +------+---> A
            o
           \
            o
          --+----------- GND

Welcher Pegel ergibt sich an A?
F: Gibt es eine Verbindung zu GND?
A: Da der Taster offen ist, gibt es keine Verbindung zu GND
F: Gibt es eine Verbindung zu Vcc?
A: Ja, die gibt es. Wenn auch indirekt - über den Widerstand
F: Welcher Pegel ergibt sich daher an A
A: Der Pegel wird durch Vcc über den Widerstand auf 1 gezogen
   GND kann nicht 'wirken', weil ja der Taster nicht geschlossen ist
F: Was wäre, wenn man in diesem Fall den Widerstand weglässt?
A: Dann gibt es weder eine direkte/indirekte Verbdinung zu GND
   noch gibt es eine direkte/indirekte Verbindung zu Vcc
   Die Leitung A hängt in der Luft und hat keinen definierten
   Pegel.

   Der Taster ist geschlossen

                  -+----Vcc
                   |
                  +-+
                  | | Pullup-Widerstand
                  +-+
                   |
            +------+---> A
            o
            |
            o
          --+----------- GND

Welcher Pegel ergibt sich jetzt an A?
F: gibt es eine Verbindung zu GND?
A: Ja, die gibt es. Und zwar eine direkt.
F: Gibt es eine Verbindung zu Vcc?
A: AUch die gibt es. Indirekt über den Widerstand
F: WElcher Pegel ergibt sich dann an A
A: Da es eine direkte Verbindung zu GND gibt, nimmt A
   ebenfalls GND Pegel, also 0, an.
   Vcc kann diesmal nicht wirken, weil die komplette Spannungs-
   different Vcc-GND am Widerstand abfällt.
F: Was wäre, wenn man in diesem Fall den Widerstand weglässt?
A: Nichts. Dann gäbe es auch keine Verbindung zu Vcc und an A
   wäre immer noch 0-Pegel
F: Was ist, wenn man den Widerstand überbrückt?
A: Das nennt man dann einen Kurzschluss, weil es dann daher eine
   direkte Verbindung Vcc-GND gibt.

von Karl H. (kbuchegg)


Lesenswert?

Und bitte.
Wir schreiben 'Programme' und keine 'Skripts'.

von mikro-noob (Gast)


Lesenswert?

Vielen Dank für die Beiträge.. ich wusste, dass ich da irgendwas 
essentielles nicht ganz bedacht bzw. verstanden habe^^

@Bernd: Meine Hand bleibt jetzt die nächsten Tage auf meiner Stirn^^

Es liegt noch ein weiter Weg vor mir, aber obwohl ich noch ein blutiger 
Anfänger bin, hat mich die Programmierung von Mikrocontrollern in ihren 
Bann gezogen. Will auf jeden Fall weiter machen :-)

Nochmals danke an alle, die sich die zeit genommen haben hier zu 
antworten ;-)

von Kurt B. (kurt-b)


Lesenswert?

mikro-noob schrieb:
> Will auf jeden Fall weiter machen :-)
>
> Nochmals danke an alle, die sich die zeit genommen haben hier zu
> antworten ;-)

Wir, ich meine im Sinn aller zu posten, erwarten/erhoffen noch mehr 
Beiträge von dir.
Das erinnert an die eigene Anfangszeit, auch an die Realzeit jetzt!!

Es geht nichts über eigene Erfahrungen, und je -tiefer- die sind desto 
besser, desto leichter/selbstverständlicher werden die 
Schlüsse/Erfahrungen/Ergebnisse daraus.
Alle gute!


Kurt

von Bernd S. (bernds1)


Lesenswert?

> Vielen Dank für die Beiträge.. ich wusste, dass ich da irgendwas
> essentielles nicht ganz bedacht bzw. verstanden habe^^
>
Ja, so ist das. Manchmal sieht man die naheliegendsten Sachen nicht.
Also in Zukunft ganz in Ruhe nochmal über alles nachdenken, dann
kommst du auf viele "Eigentümlichkeiten" selbst. Oder warum etwas
nicht so funktioniert, wie man gerne will. Zur Not auch die einzelnen
Schritte auf Papier aufmalen und Schritt für Schritt durchgehen. Auch
Datenblätter lesen. Mit jedem Erfolg gewinnt man an Erfahrung.

> @Bernd: Meine Hand bleibt jetzt die nächsten Tage auf meiner Stirn^^
>
Laß sie nicht zu lange dort, mit einer Hand lötet sich schlecht.
Die Erkenntnis ist nur wichtig.

> Es liegt noch ein weiter Weg vor mir, aber obwohl ich noch ein blutiger
> Anfänger bin, hat mich die Programmierung von Mikrocontrollern in ihren
> Bann gezogen. Will auf jeden Fall weiter machen :-)
>
Das ist gut so. Nicht entmutigen lassen. Es werden auch noch andere
Sachen auf dich zukommen, die viel schwieriger sind. Aber auch diese
kann man mit einem systematischen Nachdenken lösen.

> Nochmals danke an alle, die sich die zeit genommen haben hier zu
> antworten ;-)
Gern geschehen. Und jetzt nimm die Hand von der Stirn und geh das
nächste Projekt an!

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.