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
>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
@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?
//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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.