PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Alias und For-Schleifen



Warhawky
18.12.2005, 14:35
Hallo!

Ich versuche jetzt schon seit Stunden ein Problem zu lösen.
Ich möchte bei einem Mega16 auf 22 Ausgänge eine PWM legen. Und zusätzlich bei den 22 Ausgängen ein Lauflicht laufenlassen.
Ist Grundsätzlich kein Problem. Die Lampen (1-22) sind allerdings kreuz und quer mit den Ports verbunden (Layout).
Jetzt dachte ich mir Folgendes:

Aliasse anlegen in der Form


Lampe.1 alias Portb.1
Lampe.2 alias Portc.1
...
Lampe.22 alias Portb.0


Um diese dann per FOR durchlaufen zu lassen.


For i = 1 to 22
Lampe.i = 1
next


Leider gibt Bascom "Invalid Datatype" aus. Ich habe es auch schon mit Lampe(1) und Lampe(i) versucht. Geht leider auch nicht. Wenn ich dann noch Lampe(22) als array deklariere gibt Bascom zwar keinen Fehler mehr aus aber das "Lampe(1)" ist nicht mehr mit den Ports verbunden obwohl der Alias noch drinsteht.
Wären die nicht kreuz und quer mit den Ports verbunden könnte ich in der Schleife Portb.i schreiben. Das geht vom syntax her. Geht aber leider in meinem Fall nicht.

Hat sowas schon jemand gemacht?
Die Ports alle einzelnd zu schalten geht zwar. Wäre aber unschön.

Danke
Gruß
Matze

bertl100
18.12.2005, 15:29
Lampe.i = 1 kann nicht funktionieren.

eventuell so

Lampe.(i)=1

Lampe.i wäre eine undefinierte Variable
Du musst den compiler schon sagen , dass "i" der Zähler ist.

MFG

Bertl

bertl100
18.12.2005, 15:31
Was meinst du mit 22 PWM Ausgängen?
Kein AVR hat 22 PWM`s.

MFG

Bertl

Warhawky
18.12.2005, 15:41
Hallo Bertl100,

Lampe.(i) = 1 geht leider auch nicht.
PWM wird in dem Fall per Software generiert.

Auch so geht es nicht:


Lampe(1) Alias Portb.0
Lampe(2) Alias Portc.0
...
Lampe(22) Alias Portb.1

...
For i = 1 to 22
Lampe(i) = 1
next


Gruß
Matze

bertl100
18.12.2005, 15:53
Probiers mal so






Dim Lampe(22) As Byte


Lampe(1) Alias Portb.1
Lampe(2) Alias Portc.1



For i = 1 to 22
Lampe(i) = 1
Next

bertl100
18.12.2005, 15:54
Poste mal den ganzen code

Warhawky
18.12.2005, 16:03
Hatte ich ganz am Anfang so Probiert.

Sobald ich das "Dim Lampe(22) as byte" drin habe:
Geht fehlerlos durch den Check aber er "verliert" die Alias Anbindung an den Port. Sprich an den Ports kommt nix mehr an.

Nehm ich das "Dim Lampe(22) as byte" wieder raus kommt wieder die Fahlermeldung bei "Lampe(i) = 1"...

Keine Ahnung wie das geht... Ich nehm jetzt die Aliasse alle raus und schreib mir eine Funktion die das dann per If Then auswertet.

Sonst fällt mir nichts ein.

Gruß
Matze

bertl100
18.12.2005, 16:09
Dann wäre eine case Anweisung besser.

bertl100
18.12.2005, 16:10
Mir der case kannst du sicher mit den Aliassen arbeiten.

eine Schleife darüber und es geht sicher

MFG

Bertl

Warhawky
18.12.2005, 16:14
Stimmt...
Case ist besser.
Allerdings kann ich mir die alliasses dann sparen.
Dann kann ich auch gleich die Ports angeben im Case.

Danke erstmal Bertl100!