11 Transistoren mit dem Arduino ansteuern

Gast #4487600
Lesenswert?
• ▲
▼
Hallo,

wie im Titel bereits steht, möchte ich 11 Transistoren mit meinem 
Arduino Uno ansteuern.
Prinzipiell wären ja 2^11 verschiedene Zustände Möglich. Davon 
itneressieren mich jedoch nur etwa 100.
Ich dachte zuerst, ein KV-Diagramm zu füttern, und daraus eine Gleichung 
zu formen, welche ich im Arduino IDE implementiere. Leider finde ich 
kein Programm, welches mit sovielen Variablen umgehen kann.

Gibt es hierfür eine einfacherere Lösung? Muss ja.

Anwendungsfall ist eine Widerstandsdekade.


Vielen Dank und Gruß :)
#4487606
Lesenswert?
• ▲
▼
Ein Arduino Uno hat 14 digital I/O Pins, also kein Problem, 11 
Transistoren direkt anzusteuern.

Ob es sinnvoll ist, Widerstandsdekaden mit Transistoren anzusteuern, die 
eher einen Massebezug sehen wollen, sei dahingestellt, Analogschalter 
klingen passender, aber du hast dir das sicher gut überlegt und andere 
Lösungen nachgeschlagen und verstanden.
Gast #4487960
Lesenswert?
• ▲
▼
Die Anzahl der Ports reicht ja, wie bereits laberkopp geschrieben hat, 
aus.

Es geht mir darum, dass ich Funktion der Digitaltechnik vereinfachen 
möchte. Bis zu 4 Variablen geht das ja noch per Hand, ab da wirds dann 
aber schon sehr zeitaufwendig. Für 11 variablen unmöglich. Daher fällt 
das Karopapier auch raus.
Klar, könnte ich alle 2048 Zustände in den arduino Code schreiben, das 
wäre allerdings nicht wirklich fachmännisch in meinen Augen.

Und um diese 100 Zustände mit einem 100fachen Switch-case anzusteuern, 
ist auch die frage :D
#4487973
Lesenswert?
• ▲
▼
Blumerika schrieb:
> Es geht mir darum, dass ich Funktion der Digitaltechnik vereinfachen
> möchte. Bis zu 4 Variablen geht das ja noch per Hand, ab da wirds dann
> aber schon sehr zeitaufwendig. Für 11 variablen unmöglich.

Blumerika schrieb:
> Und um diese 100 Zustände mit einem 100fachen Switch-case anzusteuern,
> ist auch die frage :D

Erkläre doch bitte mal Dein Problem.
Du hast dich ganz sicher in irgend einer Gedanken-Sackgasse verlaufen.
#4487983
Lesenswert?
• ▲
▼
Blumerika schrieb:
> Und um diese 100 Zustände mit einem 100fachen Switch-case anzusteuern,
> ist auch die frage :D

Wie wäre es mit einer 16Bit-Array mit den 100 Einträgen? Da stehen dann 
die 11-Bit-Kombinationen drin.
Je nachdem was Du machen willst, kannst Du
- mit dem Array-Index die zugehörigen 11 Bit auslesen
- mit den 11 Bit die Liste durchsuchen, um den Index zu finden.

Gruß Dietrich
Gast #4487986
Lesenswert?
• ▲
▼
Blumerika schrieb:
> Und um diese 100 Zustände mit einem 100fachen Switch-case anzusteuern,
> ist auch die frage

Keine Frage. Das liest man einfach aus der Tabelle aus.

Du redest aber bisher nur von 11 Ausgängen - aber wovon sollen diese 
denn abhängig sein?

Bei z.B. 10 Eingangsvariablen und 11 Ausgangsvariablen ist eine 10 x 11 
Tabelle die allgemeinste Lösung, es ist ja nicht gesagt dass es 
überhaupt logische Zusammenhänge gibt, die eine Vereinfachung zulassen. 
Und eine einfache Lösung ist es auch - Tabelle schreiben und fertig. 
Deine 100 switch-Anweisungen werden durch einen einzigen Befehl ersetzt:

Ausgangsvektor = Tabelle [Eingangsvektor];

Da fehlen nicht nur Erklärungen, was das ganze soll, sondern zuerst mal 
die einfachsten Programmiergrundlagen.

Georg
#4488011
Lesenswert?
• ▲
▼
Blumerika schrieb:
> Klar, könnte ich alle 2048 Zustände in den arduino Code schreiben, das
> wäre allerdings nicht wirklich fachmännisch in meinen Augen.
> Und um diese 100 Zustände mit einem 100fachen Switch-case anzusteuern,
> ist auch die frage :D

Möglicherweise ist die Zuordnung ja nicht rein zufällig, sondern 
unterliegt logischen Gedanken. Dann könnte man die Logik als Programm 
nachbilden, das wäre sicher wesentlich schlauer.
Gast #4488024
Lesenswert?
• ▲
▼
Komm drauf an, wie disjunkt diese 100 Zustände sind?
Wenn sie gar keine gemeinsamen Zustände haben, dann kann auch das beste 
Minimierungs-Programm nichts machen.
Wenn du einen numerischen Widerstandswert als Bitmuster für dein 
Widerstandsnetzwerk umrechnen willst, hilft das "iterative durch 
2-Teilen"

Pseudocode
1
wert = eingabewert  // 0 ... 4095
2
bits = 11
3

4
for n = bits to 0
5
{
6
 if (wert / 2^n >= 1)
7
 {
8
  port(n) = 1  
9
 }
10
 else
11
 {
12
  port(n) = 0
13
 }
14
 n = n-1 
15
}

In anderen Fällen macht man eine Look-Up-Table, z.B. für 
Segment-Anzeigen oder Character-ROM für ASCII-Zeichen.
Also, alles halb so wild.
Gast #4488033
Lesenswert?
• ▲
▼
Eine Tabelle wäre da wahrscheinlich das Sinnvollste. Für die elf 
Transistoren braucht man jeweils zwei Byte, wenn man nicht tricksen 
will. Das sind dann für 100 Zustände 200 Byte, also selbst für einen 
kleinen Mikrocontroller nicht viel.
Elf Ausgänge zu berechnen, halte ich für deutlich aufwändiger.
Gast #4489391
Lesenswert?
• ▲
▼
Blumerika schrieb:
> Es geht mir darum, dass ich Funktion der Digitaltechnik vereinfachen
> möchte. Bis zu 4 Variablen geht das ja noch per Hand, ab da wirds dann
> aber schon sehr zeitaufwendig. Für 11 variablen unmöglich. Daher fällt
> das Karopapier auch raus.
> Klar, könnte ich alle 2048 Zustände in den arduino Code schreiben, das
> wäre allerdings nicht wirklich fachmännisch in meinen Augen.
braucht man auch nicht, Du brauchst nur Deine 100 Zustände, da frägst Du 
dann die 11 Werte der Transistoren ab und dann schaltest Du entsprechend 
dem Wert die Ausgaberegister. Fertig.

> Und um diese 100 Zustände mit einem 100fachen Switch-case anzusteuern,
> ist auch die frage :D
Ja das ist auch nicht gut. Da macht man eine indizierte Datenabfrage.


ca. so hab es nicht im Compiler getestet:
static const int transistors = { 0b11111000001, 0b11111000011, 
0b11111000101, ... ,};

int get_transistors(int nValue)
{
  return transistors[nValue];
}

extreme schnell, speicherplatzsparend und simple

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren