www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Video PAL-Signal erzeugen


Autor: Marcel Holle (multiholle)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche gerade nach diesen Beschreibungen ein PAL-Signal für meinen 
Fernseher zu erzeugen: 
http://www.rickard.gunee.com/projects/video/pic/howto.php

Leider bekomme ich mit folgendem Code an meinem LCD-Fernseher nur ein 
schwarzes Bild. Ich habe leider kein Oszilloskop um das Signal zu 
prüfen, aber es sollte der Beschreibung entsprechen um drei horizontale 
Streifen zu erzeugen.

Könnt ihr einen Fehler im Code erkennen?
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 20000000UL

#define S_SYNC PORTD = 0
#define S_BLACK PORTD = 1 << PD6
#define S_GREY PORTD = 1 << PD5
#define S_WHITE PORTD = 1 << PD5 | 1 << PD6

int main(void) {
  // init output
  DDRD = 1 << PD5 | 1 << PD6;
  // timer prescaler 1
  TCCR1B |= 1 << CS10;
  // timer
  OCR1A = 1280;
  // timer
  TIMSK1 |= (1 << OCIE1A);
  // enable interrupts
  sei();

  while (1);
}

ISR(TIMER1_COMPA_vect) {
  /* hsync start (12 µs) */
  // 4 µs
  S_SYNC;
  while (TCNT1 < 80);
  // 8 µs
  S_BLACK;
  while (TCNT1 < 240);
  /* hsync end */
  
  /* data start (52 µs) */
  // 4 µs
  S_GREY;
  while (TCNT1 < 320);
  // 20 µs
  S_BLACK;
  while (TCNT1 < 720);
  // 4 µs
  S_WHITE;
  while (TCNT1 < 800);
  // 20 µs
  S_BLACK;  
  while (TCNT1 < 1200);
  // 4 µs
  S_GREY;
  /* data end */
}

Autor: FullSync (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moderne TV-Geräte, und ganz speziell diejenigen, bei denen die 
Eingangssignale nicht lange analog bleiben, sondern der größte Teil der 
internen Verarbeitung erst nach der Digitalisierung stattfindet, sind 
hinsichtlich der Signale nicht mehr so anspruchslos wie alte 
Röhrengeräte.

Üblicherweise werden nur "vollständige" Signale akzeptiert, in denen 
neben dem horiziontalen Frame auch ein vertikales durch entsprechende 
Synchronsignale definiert ist. Ganz ohne Grund ist diese 
"Empfindlichkeit" nicht - diese Rahmendefinitionen werden bspw. oft 
benötigt, um die digitalisierte Bildinformation passend in einem 
Zwischenspeicher abzulegen.

Allzu große Abweichungen bei der Horizontal- und Vertikalfrequenz werden 
auch nicht immer toleriert. Und schlimmer geht immer. Ich fernsehe 
gerade nebenbei auf einem ca. 10 Jahre alten IIYama 17-Zoll-TFT - damals 
die eierlegende Wollmilchsau mit FBAS, S-Video, VGA und DVI-Eingang - 
aber mit besonders feinem Geschmack für korrekte Signale: Falls am 
S-Video Eingang lediglich ein (normgerechtes) Schwarzweiss-Signal 
anliegt, aber am C-Pin die Farbinformation fehlt (bei einem reinen 
schwarzweiss-Signal also zumindest der Burst), wird das 
schwarzweiss-Bild ein zwei Sekunden korrekt angezeigt, aber dann geht 
das Gerät einfach auf Standby...

MfG

Autor: Mark Leyer (m2k10) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab da auch gewisse Zweifel, dass das so ohne Vertical-Sync auf 
einem LCD überhaupt funktioniert, alte Fernseher sind da für die ersten 
Versuche besser. Ob deine ISR so überhaupt funktionieren kann weiß ich 
nicht genau, zumindest dürfte es kein scharfes Bild ergeben.

Direkt aufgefallen ist mir, dass du den Timer offensichtlich nicht im 
CTC-Modus betreibst und damit auch nur ab und an mal überhaupt eine 
Zeile gesendet wird. Die hintere Schwarzschulter fehlt auch. Bei 
Wikipedia gibt's da eine etwas detailiertere Beschreibung als bei 
Rickard Gunee.

Als ich mich mal mit dem Thema BAS beschäftigt hatte, habe ich den 
Simulator verwendet und mir den Port ausgeben lassen, da braucht man 
nicht unbedingt ein Oszi.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ich versuche gerade nach diesen Beschreibungen ein PAL-Signal für meinen
>Fernseher zu erzeugen:
>http://www.rickard.gunee.com/projects/video/pic/howto.php

Dir ist aber aufgefallen, das das Programm dort in Assembler geschrieben 
ist?
Ich bezweifle, das du mit C ein exaktes Timing hin bekommst.

MfG Spess

Autor: Marcel Holle (multiholle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich bezweifle, das du mit C ein exaktes Timing hin bekommst.
Ich habe ein Beispiel gefunden, welches in C implementiert wurde. 
Anscheinend ist es machbar.

> Direkt aufgefallen ist mir, dass du den Timer offensichtlich nicht im
> CTC-Modus betreibst und damit auch nur ab und an mal überhaupt eine
> Zeile gesendet wird.
Stimmt. Habe es durch ein TCNT1 = 0; zu Beginn der ISR korrigiert.

> Die hintere Schwarzschulter fehlt auch. Bei
> Wikipedia gibt's da eine etwas detailiertere Beschreibung als bei
> Rickard Gunee.
Ich habe ein Sync-Signal für 4 µs und anschließend eine hintere 
Schwarzschulter von 8 µs. Ist das nicht in Ordnung?

>Als ich mich mal mit dem Thema BAS beschäftigt hatte, habe ich den
>Simulator verwendet und mir den Port ausgeben lassen, da braucht man
>nicht unbedingt ein Oszi.
Gibt es einen brauchbaren Simulator für Linux (Ubuntu)? Ich kenne leider 
keinen :/


Ich werde dann mal versuchen das VSync Signal zu implementieren und so 
hoffentlich ein Bild zu erhalten.

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.