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
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.
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
> 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 :-)
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
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.
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 ;-)
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
> 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!