Forum: Mikrocontroller und Digitale Elektronik Charlieplex 20 LED mit Arduino Uno\AVR; Interrupt langsam


von Ralf W. (Firma: RW Electronics Inc.) (ralfwerner71)



Lesenswert?

Frohe Ostern allen Foristen,

ich will mein aktuelles Projekt vorstellen. Ich möchte ca. 20 LED 
charlieplexen, mit dem Arduino Uno.
Desweiteren soll der Uno 6 Schalter und 3 Taster auswerten und 6 Servos 
steuern.
Brauchen werde ich das für ein Gleisbildstellwerk auf der Modellbahn.

Im Moment habe ich Probleme die Interruptroutine zu optimieren. Diese 
verbraucht zuviel Rechenzeit. Die
Grenze liegt bei 66666 Hz. Vielleicht stellt dies ja schon das Optimum 
dar? Aber, vielleicht hat ja
jemand Interesse und hilft mir auf die Sprünge mit Tips.

Diese Codestelle gefällt mit nicht sonderlich:
1
    //Column0
2
    if(column0_desired_pwm_value == pwm_tick){
3
      ddrByte &= ~column0;
4
      portByte &= ~column0;
5
    }else if(column_on){            //Dieser Code wiederholt sich in jeder Column
6
      ddrByte |= column0 | controlLine;    //
7
      portByte |= column0;          //
8
      portByte &= ~controlLine;        //
9
    }

Ich habe schon versucht diese Bedingung extra zu schreiben, aber ohne 
Erfolg. Entweder es leuchten
immer alle LED oder es werden andere LED mit angesteuert. Das liegt 
sicher daran, dass diese Bedingung
im else Zweige abhängig von der Vorbedingung ist.

Ich hänge mal den Code, Bilder, Schaltplan und Verdrahtungsplan mit an.
Wenn es mir nicht hilft, vielleicht anderen.

von Ralf W. (Firma: RW Electronics Inc.) (ralfwerner71)


Angehängte Dateien:

Lesenswert?

Hallo,

sorry, ich hatte den Quellcode im Anhang vergessen.

von MaWin (Gast)


Lesenswert?

Ralf W. schrieb:
> Die Grenze liegt bei 66666 Hz.

Scheint mir jetzt zum multiplexen zu reichen.

Du willst dimmen ?

Da braucht man nur doppelt so viele Aufrufe, gesteuert z.B. durch 
compare und overflow interrupt eines timers, du könntest aber das 
100-fache schaffen. Wo ist also dein Problem ?

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.