www.mikrocontroller.net

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


Autor: tüddel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: tüddel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.