-
Alias und For-Schleifen
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
Code:
Lampe.1 alias Portb.1
Lampe.2 alias Portc.1
...
Lampe.22 alias Portb.0
Um diese dann per FOR durchlaufen zu lassen.
Code:
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
-
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
-
Was meinst du mit 22 PWM Ausgängen?
Kein AVR hat 22 PWM`s.
MFG
Bertl
-
Hallo Bertl100,
Lampe.(i) = 1 geht leider auch nicht.
PWM wird in dem Fall per Software generiert.
Auch so geht es nicht:
Code:
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
-
Probiers mal so
Code:
Dim Lampe(22) As Byte
Lampe(1) Alias Portb.1
Lampe(2) Alias Portc.1
For i = 1 to 22
Lampe(i) = 1
Next
-
Poste mal den ganzen code
-
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
-
Dann wäre eine case Anweisung besser.
-
Mir der case kannst du sicher mit den Aliassen arbeiten.
eine Schleife darüber und es geht sicher
MFG
Bertl
-
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!