Cha[@PortD,0] : bit; als Array?

  • 1
  • 2
  • 3
  • Page 1 of 3
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Cha[@PortD,0] : bit; als Array?

 · 
Posted: 04.03.2018 - 16:00  ·  #1
Hallo @ all,

das hier kennt vermutlich jeder und hat es auch schon benutzt:
Cha[@PortD,0]:Bit;

Ist es möglich, sowas als Array über 2 Ports zu machen? Ich habe eine Schaltung bei der 2 Ports als Eingänge benutzt werden, jedoch je Port 4 Bits für unterschiedliche Zwecke. Nennen wir den Zweck mal A und B.

Ich möchte nun die Bit-Variablen so organisieren, daß ich die 8 Bits als Array hoch zählen kann, obwohl unterschiedliche Ports angesprochen werden.

Die Ports sind z.B. PortC und der Zweck ist %ABABABAB sowie PortD %BABABABA.

Die Variablen sollen als A[1..8] und B[1..8] lesbar sein. D.h.A[1] wäre PortD,0 ... A[2] PortD,2 ... A[5] PortC,1 ... A[8] PortC,7 ... ebeso bei B.

Geht das irgendwie?

Gruss
Harry

[Edit]Ganz klasse wäre es noch, wenn das Ergebnis der Bits invertiert ist, d.h. eine 1 oder true bei Port 0 bzw. low :)
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Cha[@PortD,0] : bit; als Array?

 · 
Posted: 04.03.2018 - 20:35  ·  #2
Hallo Harry,

eine vogel-wilde Konstruktion. Ich bezweifele sehr dass sich sowas
realisieren lässt :angry7:

rolf
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: Cha[@PortD,0] : bit; als Array?

 · 
Posted: 05.03.2018 - 10:22  ·  #3
Hi Harry

You can obviously achieve what you want via a function (round brackets rather than square) which is how I would do it. But I guess you are looking for something else...
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Cha[@PortD,0] : bit; als Array?

 · 
Posted: 05.03.2018 - 14:49  ·  #4
Hallo Rolf,

sorry aber das Layout war so viiiiiiiiiiiiiel einfacher :D. Ich muß irgendwie und so verdreht 2x8 Bit lesen (am µC direkt) und 2x 8 Bit schreiben (PCA9555).


@Merlin: Of course I can write a procedure with a transfer value, but as a countable variable, without if-then or case of, it would be better.

Gruss
Harry
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: Cha[@PortD,0] : bit; als Array?

 · 
Posted: 05.03.2018 - 15:55  ·  #5
@Harry

As I thought, but case is inevitable, I think. Just a case of whether you do it or compiler does ;-)
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Cha[@PortD,0] : bit; als Array?

 · 
Posted: 05.03.2018 - 16:26  ·  #6
Hallo Harry,

meinst Du sowas ähnliches wie SwitchPort_G ?

rolf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Cha[@PortD,0] : bit; als Array?

 · 
Posted: 05.03.2018 - 17:56  ·  #7
Hallo Rolf,

ja im Prinzip schon .... eigentlich eine super Idee, wenn der Switchport 16 Eingänge könnte. Obwohl das müßte doch gehen, wenn ich den Switchport und den Switchport-G nehme. Die Ausgänge sind kein Problem, da kann ich mit and/or arbeiten.

Gruss
Harry

[Edit] Hab grad noch im Treibermanual Switchport duch gelesen. Ideal wären 2 SwitchPort_G gleichzeitig, bei denen ich alle Eingänge manuell konfigurieren kann und so alle zusammengehörigen Eingänge in ein Byte bekomme. Aber mir ist grad noch eine andere Idee gekommen, da muß ich aber mal drüber nachdenken ;)
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Cha[@PortD,0] : bit; als Array?

 · 
Posted: 05.03.2018 - 19:13  ·  #8
Zwar nicht als Array, aber in einem Byte:

Wie schon erwähnt: A und B sind verschiedene Verwendungszwecke. Nennen wir es mal beim Namen: A heißt der IC läd einen Akku, B er ist fertig mit laden.
PortD %A7B7A6B6A5B5A4B4
PortC %B3A3B2A2B1A1B0A0

A=Charge
B=Charge ready
Code

ChargeTemp1:=PinD and %10101010;
ChargeTemp2:=PinC and %01010101;
Charge:=ChargeTemp1 or ChargeTemp2;

ChRdyTemp1:=PinD and %01010101;
DisRdyTemp2:=PinC and %10101010;
ChargeRdy:=DisChTemp1 or DisChTemp2;

Das ganz leider lo-aktiv, aber so sollte es doch funktionieren? Sobald ein Bit 0 ist, ist der IC-Ausgang aktiv.

Die Ausgänge sind dann für laden bzw. entladen aktiv, diesmal high-aktiv. Ich muß nur dafür sorgen, daß niemals laden und entladen gleichzeitig aktiv sein können. Das alles wird ein Akkutester für gebrauchte LiIon-Zellen der Bauform 18650. Die Akkus werden (bis zu 8 gleichzeitig) geladen, über eine Konstantstromquelle entladen (Kapazitiätsmessung) und wieder geladen.

Gruss
Harry
  • 1
  • 2
  • 3
  • Page 1 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   135   149 · Page-Gen-Time: 0.058593s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI