Forum: Mikrocontroller und Digitale Elektronik Wie schnell schaltet denn jetzt der LED cube?


von Toni E. (blackx)


Lesenswert?

1
void cube_show_init( void )
2
{
3
  TCCR0 |= (1 << CS02) | (0 << CS00); 
4
  TIMSK |= (1 << TOIE0);
5
}
6
7
8
ISR( TIMER0_OVF_vect )
9
{
10
  TCNT0 = 0xB0; /*at least 0xA0 */
11
  /* cli() not neccessary atm */
12
  PORTC = 0x0;
13
  static uint8_t cube_show_layer = 0;
14
  asm volatile("nop"); /* wait longer to avoid unintentionally lighting bottom leds */
15
  asm volatile("nop");
16
  asm volatile("nop");
17
  asm volatile("nop");
18
  asm volatile("nop");
19
  for(uint8_t j = 0; j < 8; j++){
20
    PORTD = cube[cube_show_layer][j];
21
    asm volatile("nop");
22
    PORTA |= (1 << j);
23
    asm volatile("nop");
24
    PORTA = 0;
25
    asm volatile("nop");
26
  }
27
  PORTC |= (1 << cube_show_layer);
28
  asm volatile("nop");
29
  if (cube_show_layer < 7) {
30
    cube_show_layer++;
31
  } else {
32
    cube_show_layer = 0;
33
  }
34
}

Ich wollte mal rechnen mit wie viel FPS der fornax LED cube läuft
also 16000000/256/265 = 244 interrupts per second
244/8 = 30,5 frames per second ist aber falsch
weil ich nicht weis wie ich
1
TCNT0 = 0xB0;
 interpretieren soll.
Heißt das jetzt das er immer von 176 anstatt von 0 bist 255 zählt?
Die
1
asm volatile("nop");
 haben bestimmt keine große Auswirkung?
Wenn man die FPS erhöht werden die Animationen langsamer oder schneller?
Danke!

von Karl H. (kbuchegg)


Lesenswert?

Toni Eder schrieb:

> weil ich nicht weis wie ich
1
TCNT0 = 0xB0;
 interpretieren soll.
> Heißt das jetzt das er immer von 176 anstatt von 0 bist 255 zählt?

Ganz genau so

> Die
1
asm volatile("nop");
 haben bestimmt keine große Auswirkung?

Ja und nein. Für die FPS sind sie erst mal egal. Die FPS werden im 
wesentlichen dadurch bestimmt in welchen Abständen die ISR aufgerufen 
wird. Und die kann nicht beliebig schnell aufgerufen werden, weil ja ein 
ISR Durchgang abgeschlossen sein muss, ehe der nächste kommt. So gesehen 
haben dann die nop dann doch wieder eine Auswirkung. Aber da gibt es in 
diesem Code noch andere Ansatzpunkte, wenn man die ISR insgesamt 
schneller machen will.

von Karl H. (kbuchegg)


Lesenswert?

Toni Eder schrieb:

> Wenn man die FPS erhöht werden die Animationen langsamer oder schneller?

Weder noch.

Die Ablaufgeschwindigkeit von Animationen hat mit dem Code nichts zu 
tun. Diese ISR zeigt nur das aktuelle Bild im Cube an. Wie schnell sich 
dieses ändert ist davon unabhängig.
Und genau so soll es ja auch sein.

von Toni E. (blackx)


Lesenswert?

Alles klar dann komm ich auf 98 FPS

Ich habe das Problem das die Effekte vom Instructables Cube 
http://www.instructables.com/id/Led-Cube-8x8x8/
zu schnell ablaufen.
Die benutzen diesen Timer:
1
  // Timer 2
2
  // Frame buffer interrupt
3
  // 14745600/128/11 = 10472.72 interrupts per second
4
  // 10472.72/8 = 1309 frames per second
5
  OCR2 = 10;   // interrupt at counter = 10
6
    TCCR2 |= (1 << CS20) | (1 << CS22); // Prescaler = 128.
7
  TCCR2 |= (1 << WGM21); // CTC mode. Reset counter when OCR2 is reached.
8
  TCNT2 = 0x00;  // initial counter value = 0;
9
  TIMSK |= (1 << OCIE2); // Enable CTC interrupt
Das sind 1421 FPS bei 16 Mhz. Kommt wohl duch den extremen unterschied.

Ich habe jetzt den original durch diesen ersetzt.
Jetzt ist die Geschwindigkeit der fornax und Instructables Animationen 
ganz gut.
Nur leuchten jetzt bei einigen Effekten, ganz leicht, LEDs die nicht 
leuchten sollen.
Entweder ich nehme den fornax timer und schraube an den delays rum ober 
ich mach noch paar nop's rein.

Also Danke erstmal.

von Wolfgang (Gast)


Lesenswert?

Toni Eder schrieb:
> Entweder ich nehme den fornax timer und schraube an den delays rum ober
> ich mach noch paar nop's rein.
Besser ist wohl, wenn du verstehst, was da abläuft. Wildes Rumschrauben 
an den Zeiten kann zu merkwürdigen Effekten führen.

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.