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
@kurt: Damit ist die letzte Antwort auch noch gegeben :-)
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.
Und bitte. Wir schreiben 'Programme' und keine 'Skripts'.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.