Hi,
mach mal aus den Strin ein Bit
Dim A as Bit
Hallo,
ich habe jetzt meine Schaltung aus einem ATMEGA32 und 2 LEDs zusammengebaut und wollte den Controlle jetzt so programmieren, dass die beiden LEDs abwechselnd jede Sekunde ein und aus gehen!
Das ist auch kein Problem, ich wollte dann aber auch noch ausprobieren, wie das mit dem Variablen definieren geht, und habe den Code deshalb so umgeschrieben, dass ich mit einer Variable arbeite. Das geht aber aus irgendwelchen Gründen nicht, denn es kommen mehrere Fehler, die ich aber alle nicht verstehe!
Das ist der Code, den ich mir ausgedacht habe:
Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Config Portc.0 = Output Config Portc.1 = Output Dim A As String * 1 A = 1 Do If A = 1 Then Portc.0 = 1 Portc.1 = 0 A = 0 Waitms 1000 Else: Portc.0 = 0 Portc.1 = 1 A = 1 Waitms 1000 End If Loop End
Vielen Dank für eure Hilfe.
Thomas
Hi,
mach mal aus den Strin ein Bit
Dim A as Bit
Okay, danke. Das funktioniert jetzt.
Aber ich habe auch eine neue Sache, die mir aufgefallen ist:
Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Config Portc.0 = Output Config Portc.1 = Output Config Pina.7 = Input Porta.7 = 1 Portc.0 = 0 Portc.1 = 0 End
Wenn ich diesen Code verwende, werden anscheinend beide Outputs auf 5V gesetzt, denn die LEDs, die ich dran gehängt habe, leuchten!
Wenn ich diesen Code nehme, lässt sich die LED an Portc.0 mit dem angeschlossenem Taster ein und ausschalten, die andere LED brennt die ganze Zeit!Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Config Portc.0 = Output Config Portc.1 = Output Config Pina.7 = Input Porta.7 = 1 Do If Pina.7 = 1 Then Portc.0 = 1 Else Portc.0 = 0 End If Loop
So meine Frage:
Warum wird in der If-Schleife, wenn man den Pin auf 1 setzt die LED eingeschaltet, außerhalb der If-Schleife aber genau umgekehrt?
Normalerweise sollte man doch denken, dass "1" immer "LED eingeschaltet" bedeutet, oder?
Kommt darauf an wie die LED angeschlossen ist. Wenn diese mit der Anode an 5V hängt und mit der Kathode am Pin des µC (natürlich mir Widerstand) dann erhälst du dieses Ergebnis.
Gruß
Udo
Mh, scheint so. Ich habe das nämlich so nachgebaut wie im Wiki unter AVR-Einstig leicht gemacht erklärt ist.
Welche andere Möglichkeit gibt es denn noch?
Mann könnte die LED mit der Anode mit dem µC-Pin verbinden und die Kathode der LED mit Masse (ebenfalls wieder mit Vorwiderstand).
Der µC-Pin kann 3 verschiedene Zustände annehmen, einmal als Quelle, d.h. es kommen 5V aus dem Controller, einmal als Senke, d.h. der Pin wird intern gegen Masse geschalten und dann kann der Pin noch hochohmig geschalten werden (als Eingang).
Diese Erklärung ist nur sehr oberflächlich also bitte nicht gleich hauen.
Udo
Also - Deine LED´s scheinen ja schon mal so geschaltet zu sein, dass sie mit dem "Pluspol" (Anode) zum Controller gehen, und mit dem "Minuspol" (Kathode) nach Masse. Damit sie leuchten, muss der Ausgang also High sein.So meine Frage:
Warum wird in der If-Schleife, wenn man den Pin auf 1 setzt die LED eingeschaltet, außerhalb der If-Schleife aber genau umgekehrt?
Oft gehen die Taster aber nach Masse und nicht zur Versorgungsspannung, so dass damit angesteuerte Eingänge beim Tastendruck LOW werden. Ist auch ganz sinnvoll, denn die Pins der Controller haben idR halt nur PullUP-Widerstände, die den Eingang auf ein saubers HIGH legen, wenn sie nach außen "in der Luft" hängen.
Check´doch mal, ob das bei Deinem Board auch so ist. Dann wäre Dein Pina.7 nämlich 0, wenn Du den Taster drückst, und beim Loslassen wäre er 1. Das erfordert zwar ein gewisses Umdenken, erklärt aber das Verhalten Deiner Schaltung.
Lesezeichen