PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie werden Variablen in Bascom definiert?



ThomasKopsch
13.04.2007, 15:50
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:

$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

Sommer
13.04.2007, 16:01
Hi,

mach mal aus den Strin ein Bit
Dim A as Bit

ThomasKopsch
13.04.2007, 19:06
Okay, danke. Das funktioniert jetzt.

Aber ich habe auch eine neue Sache, die mir aufgefallen ist:



$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!






$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

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!

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?

gomaman
13.04.2007, 19:26
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

ThomasKopsch
13.04.2007, 19:37
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?

gomaman
13.04.2007, 19:47
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

Sauerbruch
14.04.2007, 11:09
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?


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.

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.