Forum: Mikrocontroller und Digitale Elektronik wie in code zu realisieren?


von tüddel (Gast)


Lesenswert?

ich habe ein problem bei einem dimmer ( unter c)
ich versuche 8 lampen paralell zu dimmen.

ich lese helligkeitswerte für alle lampen ein sowie ihren zustand ob
an(gedimmt) oder aus.

jetzt muss ich die werte der helligkeit sortieren. der höchste
(dimm)wert wird als ersten angeschaltet. davon abgezogen der
zweithöchste (dimm)wert...(usw).
jetzt habe ich jedoch das prob, das ich dabei die ausgabe nicht mehr
auf der angestrebten pin rausschiebe, sondern der höchste auf den
ersten, den nächsten auf den zweiten,...

kann mir jemand bei diesem problem in allgemein gehaltenem code (egal
welcher uc) helfen? denn bei meinen recherchen habe ich gemerkt, das
nahezu alle bei denen das projekt gescheitert ist, das selbe prob
haben.

vielen dank im vorraus
mfg
tüddel

von Jochen Pernsteiner (Gast)


Lesenswert?

>jetzt muss ich die werte der helligkeit sortieren.

Aha. Und wieso?

>der höchste(dimm)wert wird als ersten angeschaltet. davon abgezogen
>der zweithöchste (dimm)wert...(usw).

Keine Ahnung was das heissen soll: "davon abgezogen ...".
Soll das jetzt der Sortieralgorithmus sein oder was?

>jetzt habe ich jedoch das prob, das ich dabei die ausgabe nicht mehr
>auf der angestrebten pin rausschiebe, sondern der höchste auf den
>ersten, den nächsten auf den zweiten,...

Wenn ich Deinen wirren Worten folgen kann, soll das heißen, nachdem Du
die Dimmwerte sortiert hast, liegt auf dem ersten Pin immer die hellste
Lampe, auf dem zweiten Pin die zweithellste, usw.
Das willst Du aber offenbar nicht. Habe ich das richtig verstanden?

Fragen:
Wie dimmst Du die Lampen eigentlich? Per PWM?
Welchen Mikrocontroller benutzt Du?
Und wieso willst Du die Helligkeitswerte sortieren?

Gib mal ein paar genauere Informationen.


Jochen

von ...HanneS... (Gast)


Lesenswert?


von tüddel (Gast)


Lesenswert?

@Jochen Pernsteiner

ich benutze eine phasenabschnittssteuerung.

ich sortiere die helligkeitswerte (da ich ja nicht parallel arbeiten
kann), da ein heller wert vor einem dunklerem wert gezündet wird.
hell = langer-, dunkler = kurzer abschnitt. ;-)

das hat zwar nichts mit dem uc zu tun, nennen tu ich ihn aber mal ;-)
msp430f1x9 oder msp430x1x1x (takung: 8MHz)

ist das besser?

von Michael Wilhelm (Gast)


Lesenswert?

//Timerroutine
static unsigned char i;

i++;

if (i < lampe_1_soll)
{
PORT_X = 0; //Lampe aus
}
else
{
PORT_X = 1; //Lampe an
}
...

wenn die Lichtwerte in einem Array vorliegen:

static unsigned char i;
unsigned char j;

i++;
for (j=0;j<8;j++)
{
if (i < lampe_soll[j])
PORT_aus;
else
PORT_ein;
dieser kleine Vergleich kann durchaus im Hauptprogramm laufen. Wenn
nicht, Timeroverflow auf ca. 10KHz stellen. Das sind immer noch ca. 50
Updates pro Sekunde.

MW

von Tom (Gast)


Lesenswert?

Hi Leute

Mein Vorschlag: Eine Struktur, die Pin und Zeit speichert. Daraus baust
du dir ein Array mit einem Element pro Dimmer.

struct Dimmer {
  unsigned int port;    // uC-Port
  unsigned int mask;    // Maske für Pin (port &= mask;)
  unsigned short time;  // Zünd-Zeitpunkt (oder was auch immer)
};

struct Dimmer aDimmer[ANZ_DIMMER];

Sortieren brauchst du das Array beim Aufstarten oder wenn sich ein
Zeit-Wert ändert.

FG

Tom

von KoF (Gast)


Lesenswert?

ich würde es auch mit einem struct machen

typedef struct dimmer
{
  byte port;               // port // byte = unsigned char
  byte data;               // wert den die dimmung erhalten soll
  byte stelle;             // 0-7 (schätze ich) um festzulegen wer als

                           // erstes , zweites, drittes,...
                           // gezündet werden soll
  unsigned int fire;       // uint zum zündzeitpunkt zu bestimmen
  BOOL aktiv;              // ist port "an" oder "aus"
}dimmer;

sind natürlich noch einige funktionen zum z.b. sortioeren uä nötig.
frage ist nur, ob der das noch von der rechenleistung her schafft

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.