PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : array+config



mechatronikilm
02.10.2012, 16:50
Hallo Community,
mal ne Frage. Also wenn ich ein Array erstelle und möchte eine Konfiguration vornehmen mit for-Schleife... besser ich schreibe mal einfach auf was ich meine:

Dim ebene(4) As Integer, Dim I as Integer
ebene(1) = Portc.3
ebene(2) = Portc.2
ebene(3) = Portc.1
ebene(4) = Portc.0

For I=1 to 4
Config ebene(i) = Output
next I

Als Fehler Wird die Config-Zeile angezeigt. Mein Ansatz stammt aus dem Arduino Sketch wo man C basiert programmiert und Konfigurationen im void setup() mit For etc schleifen schnell vornehmen kann. Geht so etwas überhaupt auch in Bascom. Wenn ja welche Befehlskombination muss ich nehmen wenn nicht dann wohl immer einzeln als z.b. output definieren. Ja?

peterfido
02.10.2012, 18:01
Wie oft möchtest Du im Programm die Richtung für wie viele Pins ändern?

Ich schreibe meist die DDRs auf. Für Dein Beispiel wäre das


ddrc = &b00001111

Im Betrieb schalte ich normal nur einzelne Pins um, z.B. wenn ich eine Matrixtastatur einlese. Dabei ist zu beachten, dass es von Vorteil sein kann, da ein paar NOPs einzubauen.

Ein Port ist normal ein Byte breit. Ein Integer ist breiter. Du sagst also sozusagen nimm Integer namens ebene(1) und weise ihr den Wert des Bit Portc.3 zu. Also wird der Integer entweder 0 oder 1.

In der Schleife wird dann bei config wieder ein Integer übergeben. Das kann ja so nicht klappen.

Sauerbruch
02.10.2012, 18:25
Was man in Bascom manchmal sieht (und was so ähnlich aussieht wie Dein Code-Versuch), ist die Alias-Funktion:



LED alias PORTC.0
SUMMER alias PORTC.1
RELAIS alias PORTC.2
...
...

RELAIS = 0
LED = 1
SUMMER = ...


Dabei sind die Alias-Parameter aber keine dimensionierten Variablen, sondern einfach nur frei wählbare Namen, damit man im Code den Überblick besser behalten kann, was welchem Port (oder Pin, wenn man Eingänge abfragt) denn zugeordnet ist.

Die einfachste Lösung wäre in der Tat (wie schon von Peterfido vorgeschlagen), das DDR-Register zu setzen. Ein Befehl - fertig.

Wenn Du aber tatsächlich im Code eine Reihe von I/O-Ports nacheinander als Ausgang konfigurieren möchtest, gäbe es eine Lösung, wenn die entsprechenden Ports aufeinander folgen, also wie bei Dir z.B. PORTC.0, C1, C2 und C3:




Dim I as Byte

For I = 0 to 3
DDRC.I = 1
Next I

mechatronikilm
03.10.2012, 12:17
vielen vielen Dank für eure Tipps:)