Bascom Ports und Alias

Fragen oder Tipps & Tricks über Software

Moderatoren: Tim Sasdrich, Sebi

Bascom Ports und Alias

Beitragvon Max346 » 12.10.2014, 18:17

Hallo Leute!

Nach längerer Pause, wollte ich wieder mal ein bißchen programmieren.
Nur eine ganz einfaches Lauflicht auf dem Arduinoboard mit dem Blinkenshield.
Leider bringt mich diese einfache Aufgabe sehr ins schwitzen da ich nicht draufkomme, wo der Fehler liegt.

Hier mal der Code:

Spoiler: show
Code: Alles auswählen
$regfile = "m328pdef.dat"
$crystal = 16000000



'Configs
Config Portd = Output
Config Portb = Output
Config Portc = Output


'Variable
Dim Z As Byte
Dim Led As Long



Led.0 Alias Portd.0
Led.1 Alias Portd.1
Led.2 Alias Portd.2
Led.3 Alias Portd.3
Led.4 Alias Portd.4
Led.5 Alias Portd.5
Led.6 Alias Portd.6
Led.7 Alias Portd.7

Led.8 Alias Portb.0
Led.9 Alias Portb.1
Led.10 Alias Portb.2
Led.11 Alias Portb.3
Led.12 Alias Portb.4
Led.13 Alias Portb.5

Led.14 Alias Portc.0
Led.15 Alias Portc.1
Led.16 Alias Portc.2
Led.17 Alias Portc.3
Led.18 Alias Portc.4
Led.19 Alias Portc.5


Do

  For Z = 0 To 19

    Led.z = 1
    Waitms 100
    Led.z = 0
    Waitms 100

  Next

Loop



Ich bekomm einfach nichts raus aus dem Ding. Alle Leds bleiben dunkel. Auch der Simulator von Bascom zeigt bei den Ports keine aktivität.
Warum?
Hat jemand von euch nen Tip für mich? Welchen Fehler übersehe ich hier? Die Argumente bei den Aliases hatte ich auch schon umgedreht,
brachte aber den selben Erfolg. Irgendwie steh ich auf der Leitung......

Lg Markus
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: Bascom Ports und Alias

Beitragvon Chef » 12.10.2014, 18:27

Er weist der Variable Led.z den Wert 1 bzw. 0 zu. Aber sendet den Wert nicht an den Port, wie du es wünscht.

Würde es anders machen:

Code: Alles auswählen
Dim V As Byte

For Z = 0 To 19
  If Z < 8 Then
    Portd = Z^2
  Elseif Z < 16 Then
    V = Z - 8 : Portb = V ^ 2
  Else
    V = Z - 16 : Portc = V ^ 2
  Endif
Next
Ohne Garantie. Bin schon etwas raus aus Bascom.

Chef :D
Wenn es die Elektronik nicht gäbe, müsste man sie erfinden.
Benutzeravatar
Chef
Site Admin
 
Beiträge: 2941
Registriert: 04.11.2008, 17:56
Wohnort: Hamburg

Re: Bascom Ports und Alias

Beitragvon Max346 » 12.10.2014, 18:37

Aber wofür sind dann die Aliases da, wenn das dann doch nicht funktioniert?
Is das nur ausgelegt für einen Port mit ner Byte Variable?
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: Bascom Ports und Alias

Beitragvon Chef » 12.10.2014, 18:45

Die Aliases sind schon sinnvoll. Aber nur für die Kohlenstoffeinheit vor der Siliziumverarbeitungseinheit :wink:

Beispiel: Es ist für uns ja besser lesbar wenn da im Quellcode steht 'Absaugpumpe = An' als 'Portb.3 = 1'.

Chef :D
Wenn es die Elektronik nicht gäbe, müsste man sie erfinden.
Benutzeravatar
Chef
Site Admin
 
Beiträge: 2941
Registriert: 04.11.2008, 17:56
Wohnort: Hamburg

Re: Bascom Ports und Alias

Beitragvon Max346 » 12.10.2014, 19:07

Das is mir schon klar, dass es dann leichter lesbar wird.
Aber ich versteh die Aliases als Zuweisung.

wenn da im Quellcode steht 'Absaugpumpe = An' als 'Portb.3 = 1'.


In dem Beispiel geht ja auch Portb.3 auf 1. Und in der Bascom Hilfe steht das selbe.
Dort gehts halt mit nem Relais. Sobald irgendwo im Code Relais = 0 kommt macht
der Port doch das gleiche und geht auf 0 und umgekehrt. Oder irre ich mich da?
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: Bascom Ports und Alias

Beitragvon Chef » 12.10.2014, 19:13

Ja. Aber du kannst keine Aliase indizieren. Also mit einer Variable hochzählen. In deinem Beispiel würde dann nur gehen Led.0=1, Led.1=1. Ersetzt du 0, 1, 2 ... durch die Zählveriable. Erkennt Bascom dieses als Variable. Programmtechnisch geht es auch gar nicht die Ports per Variable zu adressieren.

Chef :D
Wenn es die Elektronik nicht gäbe, müsste man sie erfinden.
Benutzeravatar
Chef
Site Admin
 
Beiträge: 2941
Registriert: 04.11.2008, 17:56
Wohnort: Hamburg

Re: Bascom Ports und Alias

Beitragvon Berger » 12.10.2014, 23:09

Hallo,
Chef hats schon gesagt, ein Alias ist nur für einen Pin.

Du musst ein paar Zeilen mehr schreiben:

Dim Z AS Byte

For Z is 0 to 7
Portb.z = 1
Waitms 100
Port.z = 0
Waitms 100
Next Z


Und das ganze halt für jeden Port.

MfG
Berger
Berger
 
Beiträge: 52
Registriert: 27.04.2010, 15:10

Re: Bascom Ports und Alias

Beitragvon topas » 13.10.2014, 04:27

Eine Variable als Alias geht wohl nicht.
led1 alias portd
led2 alias portb
led3 alias portc

dim n as byte
for.....
led1.n = 1
led2.n = 1
led3.n = 1
topas
 
Beiträge: 3796
Registriert: 16.08.2010, 12:47

Re: Bascom Ports und Alias

Beitragvon Max346 » 14.10.2014, 10:19

Ich hab gestern etwas in einem Buch von Kühnel gefunden. Da gehts um Portsplitting. Mit dem funktionierts jetzt. Läuft aber auch über eine Variable.

Spoiler: show
Code: Alles auswählen
$regfile = "m328pdef.dat"
$crystal = 16000000



'Configs
Config Portd = Output
Config Portb = Output
Config Portc = Output


'Variable
Dim Z As Byte
Dim Led As Long


Declare Sub Write_port(x As Long)


Led = 1

Do



For Z = 0 To 18
  Shift Led , Left
  Write_port Led
  Waitms 20
Next

For Z = 18 To 0 Step -1
  Shift Led , Right
  Write_port Led
  Waitms 20
Next



Loop


Sub Write_port(x As Long)
Portd.0 = X.0
Portd.1 = x.1
Portd.2 = x.2
Portd.3 = x.3
Portd.4 = x.4
Portd.5 = x.5
Portd.6 = x.6
Portd.7 = x.7

Portb.0 = x.8
Portb.1 = x.9
Portb.2 = x.10
Portb.3 = x.11
Portb.4 = x.12
Portb.5 = x.13

Portc.0 = x.14
Portc.1 = x.15
Portc.2 = x.16
Portc.3 = x.17
Portc.4 = x.18
Portc.5 = X.19
End Sub
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: Bascom Ports und Alias

Beitragvon topas » 14.10.2014, 15:50

Läuft über eine Prozedur. Man hätte auch eine Prozedur LED_on(x) und eine LED_off(x) machen können. Wobei x die Bit-Nr. ist, die ein- bzw ausgeschaltet wird. Oder eine Prozedur LED(x,y), wobei y = 0 oder 1.
Es führen viele Wege nach Bielefeld.
Die Bits einzelnd umzukopieren, ist sicherlich die langsamste Methode. Für LEDs ists aber egal.
topas
 
Beiträge: 3796
Registriert: 16.08.2010, 12:47


Zurück zu Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast