display22 - Labor für Interaktion

Archive for the 'TVout' Category

FBAS (PAL) Composite Signalerzeugung

Montag, Dezember 4th, 2006

Wie sollte ein FBAS Signal aussehen?

http://de.wikipedia.org/wiki/FBAS

http://del.icio.us/display22/tvout

Tips zur Signalerzeugung, Timingfragen, Interrupts

JAVA:
  1. /* Delay for the given number of microseconds.
  2. * From D.Mellis for Arduino
  3. * Assumes a 16 MHz clock.
  4. * Disables interrupts, disrupts millis() if used frequently
  5. * note: digitalWrite() executes in 2.5 microseconds
  6. */
  7. void delayMicroseconds(unsigned int us) {
  8.     // calling avrlib's delay_us() function with low values (e.g. 1 or
  9.     // 2 microseconds) gives delays longer than desired.
  10.     //delay_us(us);
  11.  
  12.     // for a one-microsecond delay, simply return.  the overhead
  13.     // of the function call yields a delay of approximately 1 1/8 us.
  14.     if (--us == 0)
  15.     return;
  16.  
  17.     // the following loop takes a quarter of a microsecond (4 cycles)
  18.     // per iteration, so execute it four times for each microsecond of
  19.     // delay requested.
  20.     us <<= 2;
  21.  
  22.     // account for the time taken in the preceeding commands.
  23.     us -= 2;
  24.  
  25.     // disable interrupts, otherwise the timer 0 overflow interrupt that
  26.     // tracks milliseconds will make us delay longer than we want.
  27.     cli();
  28.  
  29.     // busy wait
  30.     __asm__ __volatile__ (
  31.         "1: sbiw %0,1" "\n\t" // 2 cycles
  32.         "brne 1b" : "=w" (us) : "0" (us) // 2 cycles
  33.     );
  34.  
  35.     // reenable interrupts.
  36.     sei();
  37. }


das Problem beim Timing von Interupts beim AVR ist, das der beim Interupt gerade laufende Befehl noch zu Ende abgearbeitet wird. Das kann dann 1, 2 oder 3 Takte dauern. Das habe ich in einem Video-Projekt mal folgendermassen gelöst. -- http://www.mikrocontroller.net/topic/27194#206416

@willi: Dein Ansatz ist schon fast perfekt, die Unsauberkeit mit den verdrehten Rücksprungadressen hast du ja selbst erwähnt. Ich habe das Problem dadurch gelöst dass ich den avr kurz (ca. 1us) vor dem nächsten Zeilenbeginn schlafen schicke, damit kommt der nächste Int. bzw. Syncbeginn mit einer konstanten Verzögerung. -- http://www.mikrocontroller.net/topic/27194#206419

Die Vor, Haup und Nachtrabanten sind ja nun sequenziell immer gleich bei der V-Sync. Diese müssen nun auch immer genau 1024 takte ergeben. das sieht so aus: -- http://www.4freeboard.to/board/thread.php?postid=165811#post165811 -- http://www.4freeboard.to/board/thread.php?postid=165845#post165845