wie in code zu realisieren?

Gast #145897
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
Gast #145898
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
Gast #145900
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?
Gast #145901
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
Gast #145902
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
Gast #145903
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.