Forum: Markt LC74776


von Netbandit (Gast)


Lesenswert?

Hallo,

ich plane ein kleines Projekt mit OSD Anzeige. Dazu würde ich gerne den
LC74776 verwenden. Den kann man bei http://www.elektronik-fundgrube.de
für 5 EUR (bzw. 2,50 EUR) bestellen. Allerdings haben die einen
Mindestversandwert von 25 EUR. Da die sonnst nicht interessantes für
mich haben fällt das erstmal aus. Hat jemand von euch diesen vielleicht
1 oder 2 mal rumzuliegen oder weiß jemand wo man ihn noch bekommen kann
für einen geringeren Mindestversandwert?

Danke im Vorraus

von Thorsten (Gast)


Lesenswert?

[OFFTOPIC]

Hi Netbandit,

lange nichts mehr von dir gehört, wie gehts?

[/OFFTOPIC]

von Netbandit (Gast)


Lesenswert?

@Thorsten: ja stimmt mir gehts recht gut, habe den Umzug hinter mir und
es gefällt mir hier in Tübingen sehr gut. Inzwischen habe ich auch mit
meinem Zivildienst angefangen und ne total genialen Platz abbekommen.
Und zwar in der Uniklinik Tübingen. Die haben eine Funkwerkstatt wo
Telefone, Pieper u.s.w. repariert werden, sowie die komplette
Kommunikationsanlage gewartet wird. Das sind alles tolle Kollegen und
die Arveit macht mir Spaß. Da es nicht ganz mein Lehrberuf ist, kann
ich dabei sogar noch was lernen und dieser Zivi wird sich später wohl
sehr gut im Lebenslauf machen.
Leider ist es finanziell etwas schwieriger geworden. Ich muß nun warten
bis die Unterhaltssicherungsbehörde meine Miete übernimmt (während des
Zivis) und dann habe ich vielleicht wieder etwas Geld zum basteln.
Daher möchte ich mir ja auch nicht 5 oder 10 Stück von diesem IC
kaufen, wenn ich nur 1 oder 2 brauche :)

von Mark D. (mark_de_jong)


Lesenswert?

Hallo Netbandit,

Wenn Du eine sammelbestellung machen möchtest ich hätte von
http://www.elektronik-fundgrube.de
noch ein paar sachen die haben möchte.

Grüße Mark de Jong,

von Netbandit (Gast)


Lesenswert?

@Mark:

wieviele Sachen hast du zu bestellen? Kommen wir da schon über 25 EUR
oder wollen wir warten?

von Netbandit (Gast)


Lesenswert?

So ein mist. Ich habe heute nochmal etwas genauer ins Datenblatt gesehen
und dabei herausgefunden, daß der Text nur eine Farbe haben kann (weiß).
Ich hatte gedacht, daß der LC74776 relativ ähnlich zum stv5730a ist.

Nun gut, jetzt muß ich erstmal überlegen, ob ich lieber den teuren und
selten vorhandenen stv nehme oder ob ich dann doch beim billigen lc
bleibe.

von Mark D. (mark_de_jong)


Lesenswert?

Hallo Netbandit,

Siehe mal nach denn LM1246 von national.

Grüße Mark,

von Netbandit (Gast)


Lesenswert?

Hi Mark,

der sieht an sich nicht schlecht aus, doch ist das zugleich ein RGB
Vorverstärker, zur Ansteuerung einer CRT Röhre. Grundsätzlich bekommt
man da wieder tolle Ideen, was man damit im zusammenhang mit dem
heimischen TV so alles anstellen kann, aber für meinen
Anwendungsbereich scheint er overkill zu sein.
Ich habe leider keine anderen simplen OSD Chips gefunden als eben den
stv oder den lc. Von Philips gab (gibt) es auch einen, doch der hat
wieder ein RGB Out. Um damit was anfangen zu können müßte ich das
Signal in FBAS wandeln, was dann wieder den Preis steigern würde.

Trotzdem danke für den Tip, vielleicht kann ich den später mal
verwenden :)

von Netbandit (Gast)


Lesenswert?

Also ich habe mir beide Datenblätter nochmal durchgelesen und schreibe
mal die unterschiede auf:

STV5730A:
+ "hohe" Auflösung (11x28 Zeichen)
+ Hintergrundfarbe  Zeichenfarbe  Blinken
+ 128 Zeichen welche jedoch alle selbst definiert werden können
+ leicht anzusteuern / viele Schaltpläne im Netz zu finden

- schwer zu bekommen (bei ELV als Bausatz oder bei RS)
- Teuer (ca. 15 EUR)
- SMD

LC74776:

+ billig (2,50 - 5 EUR)
+ DIP

- Auflösung 12x24 Zeichen
- nur blinken und Hintergrundfarbe
- 256 Zeichen, jedoch alle fest und nicht defnierbar
- kein Übersicht aller Zeichen gefunden
- keine Zeichenfarbe

So nun bin ich hin und her gerissen ;)

Einerseits reizt mich der STV, weil man mit dem realativ einfach ne
ganze Menge machen kann und die 8 Farben für die Zeichen sind auch ganz
nett.
Leider ist er eben teuer und nur in SMD verfügbar. Normalerweise habe
ich kein Problem mit SMD, doch vor meinem Umzug habe ich Ätzmittel und
Entwickler zum Müllhof gebracht und müsste mir das nun neu kaufen, was
eine zusätzliche finanzielle belastung darstellt.
Den LC kann ich mal nebenbei schnell auf eine Lochrasterplatte
aufbauen.. dazu ist der LC eben auch schön billig :)

Naja ich habe im Keller noch 2 alte VCRs zu stehen, vieleicht finde ich
da zufällig einen der beiden ICs drinn und dann währe das Problem
vielleicht gelöst.

Aber vielleicht bestellt demnächst doch jemand bei dem Versandhaus
welches oben angegeben ist, dann würde ich die 2,50 einfach investiren
und das Teil mal ausprobieren.
Wenn jemand soetwas noch rumzuliegen hat, oder sogar einen STV, dann
einfach melden.

Andere "einfache" OSD Chips habe ich im I Net leider nicht mehr
gefunden :(

von Netbandit (Gast)


Lesenswert?

Na wer sagts denn... ich habe in einem alten Videorecoder tatsächlich
einen OSD Chip gefunden. Den LC74781, welcher zwar noch schlechter ist
als der LC74776 (weniger Zeichen) aber vielleicht bekomme ich da für
die ersten Tests etwas hin :)

Bin trotzdem noch an den besseren LC oder sogar den STV interessiert.

von Thorsten (Gast)


Lesenswert?

Bei uns im Sperrmüll steht auch gerade ein älterer VHS Videorekorder.
Ich kann ja mal aufschrauben und gucken, was da drin ist :)

von Netbandit (Gast)


Lesenswert?

ja das wär dufte :)

von Thorsten (Gast)


Lesenswert?

Mist, ich kam leider zu spät. Der Rekorder dürfte schon auf der
Müllhalde liegen :(

von Netbandit (Gast)


Lesenswert?

naja nicht so schlimm, danke dir aber trotzdem.

Ich hba eine Entscheidung getroffen. Ich werde demnächst einen Plan +
Layout für einen STV5730A entwickeln und bei der Gelegenheit auch
meinen noch unbenutzten Atmega32 einsetzen. So kann ich mich mal mit
AVRs beschäftigen :)

von Mark D. (mark_de_jong)


Lesenswert?

Hallo Netbandit,

Wenn Du einen LM1246 haben möchtest, ich habe 5 stück rumliegen.

Grüße Mark,

von Netbandit (Gast)


Lesenswert?

Hi Mark,

der LM1246 ist für meinen Anwendungsbereich leider schlecht geeignet,
da ich ja kein RGB Signal erzeugen möchte sondern ein FBAS. Allerdings
währe das später interessant, man könnte damit so wie ich das sehe
einen TV durch ein zusätzlich eigenes OSD im RGB Weg ergänzen und somit
informationen im Bild anzeigen (Für E Mail überwachung,
Hausbusüberwachung etc.)

Aber trotzdem danke für dein Angebot, für mein derzeitiges Projekt
benötige ich einen anderen OSD Chip.

von Netbandit (Gast)


Lesenswert?

Es ist doch kaum zu glauben: Im Datenblatt des STV steht drinne, daß
alle Character außer 00H vom Nutzer definiert werden können. Allerdings
wird nirgendwo erwähnt wie das geschehen soll. Nach etwas
Google-befragung lese ich in einem englischen Forum, daß es wohl ein
Fehler im Datenblatt sein muß, denn die chracter sind fest und lassen
sich nur ab Werk ändern.
Das ist wirklich ärgerlich :(
Aber was solls.

Ich habe übrings noch einen anderen guten OSD Chip ausfindig machen
können: M35060 von Mitsubishi. Dieser hat mehr Zeichen und mehr Zeilen
und soll generell besser und neuer sein. Leider habe ich keine
Möglichkeut gefunden den in Deutschland zu bestellen.

Also muß ich wohl oder übel beim stv bleiben.

von Wolfgang (Gast)


Lesenswert?

Hallo Thorsten,

ich habe einen LC74475 (SMD-Variante des LC74776) in Betireb bekommen.
Allerdings habe ich Probleme bei der Initialisierung des Bausteins und
nur vereinzelt verschobenen Text hinbekommen (in Schwarz, nicht wie
angegeben in Weiß).

Ich steuere den IC mit PAL-Signal an und gebe auch PAL wieder aus. Als
Quarz habe ich einen Quarz bei 4 mal PAL-Träger genommen mit 17,734MHz.
DIe Parametrierung der Register habe ich über einen AtMega8 mit drei
Leitungen realisiert. Wenn ich mal nach viel Spielen mal wieder Text im
Display habe kann ich frei schreiben wie ich Lust habe. Aber das läßt
sich öfters nicht reproduzieren udn geht mit einem Mal nicht mehr. Hab
schon laut Datenblatt an allen Registern Bit für Bit herumgeschraubt
und versucht mich heranzutasten. Aber komme mit der
Grundinitialisierung auf keine brauchbare Lösung.

Den letzen Stand meiner Parameter habe ich noch kurz einkopiert,
vieleicht weiß auch jemand noch eine Lösung.
                    '|byte 1||byte 2|
                    '7654321076543210
  Call SendDataOSD(&b1100000000000000)  ' Command 4   Display=off
  Call SendDataOSD(&b1100000001010111)  ' Command 4   Display=on
  Call SendDataOSD(&b1010000001000000)  ' Command 2   Freq=4xosc
  Call SendDataOSD(&b1011000001000000)  ' Command 3
  Call SendDataOSD(&b1101100010000000)  ' Command 5   PAL-Signal
  Call SendDataOSD(&b1110000000000000)  ' Command 6
  Call SendDataOSD(&b1111000001100000)  ' Command 7
  Call SendDataOSD(&b1111000100000000)  ' Command 8   ColorLine=1
  Call SendDataOSD(&b1111001000000000)  ' Command 9   ColorLine=2
  Call SendDataOSD(&b1111001100000000)  ' Command 10  ColorLine=3
  Call SendDataOSD(&b1111010000000111)  ' Command 11
  Call SendDataOSD(&b1111010100010001)  ' Command 12
  Call SendDataOSD(&b1111101100000000)  ' Command 18

Falls es interessiert, ic hhabe noch Bilder des Testmonitors gemacht
auf dem man etwas sehen kann was der IC so produziert.

http://www.mds-5.de/webinfo/data/images/RIMG0584.jpg
http://www.mds-5.de/webinfo/data/images/RIMG0585.jpg

Und eben der IC selbst den ich verwende

http://www.mds-5.de/temp/RIMG0571.JPG

Grüße Wolfgang

von Netbandit (Gast)


Lesenswert?

Hi,

ich habe meinen Typen (den ich in einem VCR gefunden habe) gar nicht
erst zum laufen bekommen... meiner sagt gar nichts :) Deswegen versuche
ich jetzt wieder an den STV zu kommen.

Du benutz aber schon die SPI Schnittstelle zur Übertragung der Daten
oder?

von Dirk M. (avr-nix)


Lesenswert?

abo

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Servus Netbandit

Ich habe es nur über SPI um Laufen gebracht über die Pins /CS, SCLK und
SIN (Pins 9 bis 11 am OSD/VPS-Chip. Ich habe nur ein Problem mit dem
Rastermaß des SMD der leider ein Rastermaß von 1mm besitzt udn einfach
die Platine aus dem Videorecorder herausesägt und dann noch etwas
modifiziert mit einem Quarz. Der Quarz ist wichtig gewesen da die
Buchstaben sonst horizontal zerrissen waren. Die Dot-Clock (foscx4) ist
dann sehr stabil und die Schrift sehr scharf. Das Foto stammt leider von
einem total alten Fernseher (Bj. vor 1980) und damit ist die Qualität
nicht sonderlich gut, aber zum Test nehme ich den immer.

Ich habe einfach noch en Schaltplan gezeichnet nach dem
Schaltungsbeispiel im PDF-Datenblatt. Habe die Schaltung soweit
umgezeichnet und mit Werten versehen wie sie meiner Anordnung nun
entspricht

Grüße Wolfgang

von Wolfgang (Gast)


Lesenswert?

Hi @ All,

Ich habe nun einigermaßen die Initialisierung herausgefunden. Es ist im
Grunde nur eine Reihe von 16-Bit Werten die gesendet werden müssen. Dann
kann man direkt per SPI auf dem OSD schreiben. Der zu den Initialdaten
passende Anzeigetext ist der folgende:

http://www.mds-5.de/webinfo/data/images/RIMG0585.jpg

Die Sequenz ist wie folgt (Bit 8 bis 15 und Bit 0 bis 7) Einfach rechts
rotierend über Bit 8 ausgeben im angegebenen Protokoll im Datenblatt des
LC74775.

 Byte 1  Byte 2
7654321076543210
----------------
1100000100000000
1100000000000111
1010010100001010
1011010101011111
1101000000000000
1110000000000000
1111000001100000
1111010100000001
1100000000000111

Damit werden jetzt die ersten beiden Zeilen in doppelter Größe
dargestellt und die nachfolgenden Zeilen in normaler Größe, Die unten
befindlichen Zeilen dürfen normal nicht beschrieben werden da ein
doppelt so großes Zeichen zwei Zeilen benötigt. Somit ist Zeile 1 =
Zeile 1+2 und Zeile 2 = Zeile 3 und 4. die nachfolgende kleine 3. Zeile
ist die Zeile 5 usw. Damit sind es nun 2 Große Zeilen und 12 - 4 Zeilen
= 8 kleine Zeilen.

Zum obrigne Schaltplaan von mir noch eine Abänderung. Quarz ist mit dem
Gehäude an GND angelötet und die Bürdekondensatoren sind entfernt. Dann
ist der Text sehr stabil.

Grüße Wolfgang

von Netbandit (Gast)


Lesenswert?

Glückwunsch, daß du es geschafft hast :)

Meiner sagt wie gesagt garnicht... der Quarz schwingt und auch die PLL,
aber aus dem Ausgang kommen nichtmal Syncronsignale raus. Wenn ich ein
Signal in den Eingang gebe, dann kommt aus dem Ausgang was raus,
allerdings ohne Text.

Nun frage ich mich, ob ich ihn falsch initialisiert habe oder ob er
eventuell zerschossen ist.

Wie sieht es bei dir aus, wenn du den LC nicht initialisierst.. hast du
dann was am Ausgang?

Du schreibst, daß wenn du die Daten nach "rechts rotierend über Bit 8
heraus gibst" also ich habe es bis jetzt immer mit der Hardware SPI
meines PICs versucht...

von Wolfgang (Gast)


Lesenswert?

Hallo Netbandit,

Das ein Bild vom Eingang am Ausgang kommt ist richtig. Von sich aus
macht er vorerst keine Bildsignale.

Du hast den OSD sicher falsch initialisiert. Ich habe an diesem IC fast
alles kurzgeschlossen bei den Tests und er hat alles überlebt ohne
Probleme.

Ich hbae eine eigene Routine programmiert die das 16-Bit Wort richtig
mit /CS, SIN und CLK übergibt mit den im Datenblatt angegebenen Zeiten.
Das Ganze Timing ist wie folgt:

  OsdWert = 16-Bit Zahl
  ...
  Cs = 0
  2µs Pause
  Schleife 16x
    Clk = 0
    Sin = OsdWert(Bit 8)
    2µs Pause
    Clk = 1
    2µs Pause
    OsdWert rechts rotieren (16-Bit)
  4 µs Pause
  Cs = 1
  2µs Pause
  ...

Das war im Prinzip übersichtlich dargestellt meine Routine die das
versorgt. Ich selbst benutze drei ganz normale digitale Ports als
Ausgänge und steuere diese einfach an mit dem oben angedeuteten
Prinzip. die Zeiten in den Pegeln habe ich relativ kurz dimensioniert
soweit es gieng und die Übertragung noch erfolgreich war. Müßten also
auch bei dir soweit funktionieren.

Noch eine Frage, vieleicht weiß einer eine Lösung, ich habe nach einem
Bauteil für Eagle in der Bibliothek gesucht das ein solches
DIL30SD-Gehäuse besitzt. Bin jedoch nicht fündig geworden, auch nicht
im Downloadbereich von CAD-Soft. Wenn jemand so etwas verfügbar hat
würde ich mich freuen wenn er es mir zusenden könnte.

Grüße Wolfgang

von Netbandit (Gast)


Lesenswert?

Hi Wolfgang,

hmm ich habe mich schon totgefummelt an dem Teil :) Aber ich werde
nochmal ein Versuch starten. was ist die absolut minimale
Konfiguration, damit irgendetwas aus dem Ausgang rauskommt was
irgendwie messbar ist?

Mal gucken wie es bei mir läuft.. ürbings verwende ich den LC74781 das
ist an sich der gleiche IC nur mit weniger Pins und weniger
Funktionen...

von Wolfgang (Gast)


Lesenswert?

Servus Netbandit!

Es fehlt nach der von mir beschriebenen Initialisierungssequenz nur
noch ein Text der angezeigt werden soll. Das geschieht im einfachsten
Fall mit einem Positionieren an Zeile 1 und Spalte 1 mit einem ABC. Die
Codefolge würde dafür nach der Initialisierung wie folgt aussehen damit
du etwas sehen kannst:

 Byte 1  Byte 2
7654321076543210
----------------
1000000000000000   Positionieren auf Zeile 1 und Spalte 1
1001000001000001   Ausgabe "A"
1001000001000010   Ausgabe "B"
1001000001000011   Ausgabe "C"


Wen du in der 3. Zeile und 3. Spalte auch einen Text ausgeben willst
mit "ABC", dann würde es folgendermaßen aussehen:

 Byte 1  Byte 2
7654321076543210
----------------
1000000100000010   Positionieren auf Zeile 3 und Spalte 3
1001000001000001   Ausgabe "A"
1001000001000010   Ausgabe "B"
1001000001000011   Ausgabe "C"

Bitte darauf achten das die Bits zuerst von Byte 1 von Bit 0 nach 7 und
dann von Byte 2 von 0 nach 7 geschickt werden. Ist genau die Folge die
im Datenblatt zu lesen ist (Seite 10, 11 und 7).

Grüße Wolfgang

von Netbandit (Gast)


Angehängte Dateien:

Lesenswert?

Hi Wolfgang,

hab mich lange nicht mehr gemeldet. Ich habe mir einen STV5730A besorgt
und mit dem etwas herumexperimentiert. Der geht wirklich ganz gut, ist
aber ähnlich wie der LC qualitativ nicht allzu dolle. Aber er reicht.

Habe dir ein Bild von den ersten Testergebnissen angehangen :)

von Lerner (Gast)


Lesenswert?

@Netbandit: Ist die Qualität der Zeichen nicht so gut, oder die Qualität
des durchgeschliffenen Videosignals?
Ich will nämlich auch sowas bauen, aber wenn die Qualität des
Videosignals nicht so berauschend ist, dann eher nicht.
Es kann aber auch an deinem Schaltungsaufbau liegen, da Video ja recht
hochfrequent ist.

von Netbandit (Gast)


Lesenswert?

@Lerner

naja 5,5MHz sind in der Fernsehtechnik noch NF :)

Also das mit dem durchgeschliffenen Bild weiß ich leider nicht, da ich
den STV5730A nur als Bilderzeugenden Baustein nutze.
Am Schaltungsaufbau wird es wohl auch nciht liegen.
Der Fehler tritt auf, wenn in einer Zeile sehr viel Text ist und der
dann auch noch möglichst hell.
Dann fangen die Buchstaben an langsam kursiev zu werden und der
Zeichenhintergrund bekommt einen leich anderen Farbton (etwas dunkler
oder heller)

Solange du nur ein paar Buchstaben in einer Zeile darstellst hält sich
der Fehler in Grenzen, wenn du dieses Klötzchentextzeichen in der Zeile
oft drinne hast, dann ist der Fehler sehr stark.

Ich denke er reicht aus um eben etwas Text auf ein Videobild zu bringen
aber keine großen "Textgrafiken".

Du mußt unbedingt die Pins LESCREEN (23) und LECHAR (22) mit Potis
versehen um dort nachzuregeln. Je nach Einstellung ist der Fehler
nämlich stärker oder schwächer :)

Viel Spaß

von Lerner (Gast)


Lesenswert?

Danke. Werd mich wohl mal ranmachen und selber testen müssen.

von Netbandit (Gast)


Lesenswert?

wenn du willst kannst du meinen schaltplan haben :)

Sag mir mal wie stark bei dir der Fehler ausgeprägt ist, würde mich ja
mal interessieren...

von Lerner (Gast)


Lesenswert?

Gerne, kannst ihn ja mal posten.

Sag mal, geht mit dem Ding auch folgendes?
An Eingang liegt ein Signal an, der 74776 synct zum Eingangssignal,
stellt aber trotzdem die Zeichen auf einem dunklen Hintergrund da. Man
kann dann zwischen Videosignal und dem Text umschalten, ohne das er den
Sync zwischendurch verliert.

von Lerner (Gast)


Lesenswert?

Ach, mein Fehler, geht ja um den STV5730A.

von Netbandit (Gast)


Lesenswert?

Also die Zeichen können schon auf einen nicht farbigen Hintergrund
dargestellt werden, wenn man im VideoIn Modus arbeitet. Aber ob das Hin
und her Schalten ohne Syncverlust funktioniert... hmm da bin ich etwas
skeptisch. Frag mal Uli ( http://www.ulrichradig.de/ ) der hat auch ein
Projekt mit dem STV5730A realisiert.

Grundsätzlich ist der STV5730A ein sehr einfacher Chip.

Was aber gehen dürfte: Du schaltest den VideoIn Modus (Mixedmode) ein
und schaltet gleichzeitig das Display aus. Schreibst dann deine Zeichen
in den Speicher des STVs und machst dann das Display an und wieder aus.
Das dürfte dann ohne Syncverlust laufen, da der STV das Zeichendisplay
im Hintergrund syncronisiert.
Falls es doch nicht so geht mußt du so ein umschalten per software
realisieren. Aber eben leider ohne Farbe (im Mixed Mode)

von Netbandit (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmal der Plan :)

von Lerner (Gast)


Lesenswert?

Vielen Dank!

von c2h6 (Gast)


Lesenswert?

@netbandit: Wo hast Du den STV5730A nun herbekommen? Ich würd auch gern
damit etwas spielen.

@Wolfgang: Kann der LC74776 nur schwarzen Text oder auch weißen?

Gruß,
Ethan

von Wolfgang (Gast)


Lesenswert?

Servus Ethan!

Der LC74776 kann im Grundzustand schwarz und weiß darstellen. Das hängt
von der Hintergrund-Helligkeit im Bildsignal ab. Wird es dunkel, dann
schaltet es auf Weiß udn und bei Hellem Bild eben entsprechend auf
Schwarz.

Allgemein können aber Farben dargestellt werden. Schau mal im
Datenblatt. Unter PAL kann nur das Blau nicht angewählt werden. Bei
SECAM geht das mit Blau eben auch noch.

Grüße Wolfgang

von Netbandit (Gast)


Lesenswert?

Den STV5730A habe ich bei RS-Components.de bestellt für ca. 15 EUR

von c2h6 (Gast)


Lesenswert?

Ich hab mittlerweile entdeckt daß ELV einen Bausatz mit dem STV anbietet
für 29 EUR incl. MwSt, da hab ich auch gleich alle weiteren benötigten
Teile für die Außenbeschaltung dabei, und einen MAX232 kann man immer
gebrauchen :-) also wenn ich das wirklich anfange, dann werd ichs wohl
dort holen.

Trotzdem wäre der billige 74776 interessant für
extrem-low-cost-anwendungen, wenn die Außenbeschaltung und die
Programmierung nicht aufwändiger sind... Kann man diese automatische
Farb-Umschaltung notfalls auch abschalten? Das wäre für meine Anwendung
nicht angebracht. Hat jemand schon mal mit einem PIC (evtl. sogar einem
18Fxxxx) den 74776 angesteuert und würde mich seinen Code benutzen
lassen?

Auch Code für den STV auf einem PIC18Fxxxx würd mich interessieren,
aber ich hab noch gar nicht richtig danach gesucht, vielleciht liegts
schon überall rum ;-)

von Netbandit (Gast)


Lesenswert?

Hallo, durch den Bausatz von ELV bin ich damals erst auf den STV5730A
gestoßen...
Leider besteht der Bausatz aus zwei Teilen. Der eine Teil für 30 EUR
beinhaltet nur den STV5730A und einen AT89C4051 (fertig programmiert
und geschützt) sowie ein 24C16 und ein paar kleine Bauelemente.
Ich glaube du kommst günstiger, wenn du dir das alles separat bestellt
+ 15 EUR für den STV5730A.
Ich habe bei RS Components auch gleich den Quarz mit 17,734MHz
mitbestellt, da es den bei Reichelt nicht gab.

Code für einen ATMega32 könnte ich dir geben (wenn ich mit meinem
Projekt fertig bin).

von Andreas Jakob (Gast)


Lesenswert?

http://www.dl1ie.de/

-> Produkte -> OSD Modul

von Netbandit (Gast)


Lesenswert?

Ja soetwas in der Art habe ich ja selbst gemacht. Nur das mein Programm
etwas umfangreicher mit einem wesendlich höheren Befehlssatz ist (ca.
53 Befehle)

von Ethan Arnold (Gast)


Lesenswert?

Ich bau zurzeit (also momentan sitz ich am Layout, Programmierung folgt
wohl nächste Woche, Teile hab ich schon alle hier) etwas ähnliches wie
das hier (http://www.u-nav.com/osd-gps.htm) aber als SMD (viel
kleiner+leichter) und mit dem 18F2550, der auch gleich diverse andere
Sachen in Zukunft mit anzeigen/steuern soll (Akkuspannung, evtl.
Magnetkompass, evtl. gewisse Autopilot-Funktionen durch
Servoansteuerung, etc.). Gewählt hab ich den 18F2550 weil er mit 28pins
noch kompakt ist, trotzdem sauviele Möglichkeiten hat (USB, I²C, PWM,
LV-ICSP, etc...).

von Ethan Arnold (Gast)


Lesenswert?

Achja, einen eingebauten 2.4Ghz Videosender wirds auch haben, und
trotzdem noch billiger als 150$ sein.

von Lerner (Gast)


Lesenswert?

Hallo Wolfgang, ich hab inzwischen den 74776 verbaut, bekomme aber kein
Display.
Wenn ein Signal anliegt, bekomme ich es auch wieder raus. Ich hab mal
deine Initialisierungssequenz probiert, aber es tut sich nichts.
Leider ist im Datenblatt des IC nichts erklärt, sondern nur die Befehle
aufgelistet. Hat sich an deinen Werten noch was geändert? Ich hab sie
mal etwas analysiert und du setzt an einer STelle den Oszi auf 2x,
obwohl du wie ich einen 4x verwendest.
Ich hab mir im Analyser auch angeschaut, was ich hinschicke und es
sieht richtig aus. Als Timing sind ja nur Mindestwerte angegeben, also
sollte es auch mit ewig langen Taktzyklen funktionieren. Ich hab jetzt
10µs pro Halbwelle.
Jemand einen Tip?

von Netbandit (Gast)


Lesenswert?

Oh je, das gleiche Problem hatte ich ja auch mit einem 74776 kompatiblen
Chip.. ich habe dann irgendwann aufgegeben :)

von Lerner (Gast)


Lesenswert?

Du machst mir ja Hoffnung. :-)

von Wolfgang (Gast)


Lesenswert?

Servus Lerner!

Hast du das SPI-Prozokoll auch mal wirklich von Hand progmmiert? Also
ohen Harware-Register? ICh habe es extra mit einer eigenen Routine
komplett so programmiert wie ich es schon am Anfang angegeben hatte mit
der Schleife und den Calls. Die funktionierende Version habe ich
wirklich mit 2x osc ansprechen müssen, ich habe alerdings 4x
PAL-Frequenz als Quarz drin, also ca. 17MHz. Ist mir zwar unklar warum,
aber es hat so funktioniert. Und die Codesequenzen funktionieren wie ich
sie angegeben hatte, hab es mehrfach nach Power-On der kompletten
Hardware getestet, bei mir tat sich auch lange nichts.

Grüße Wolfgang

von Lerner (Gast)


Lesenswert?

So, ich hab jetzt was hinbekommen. Ich hatte ein Problem mit meinem
Taktgenerator. Ich hab jetzt auch einen Text auf dem Bildschirm. Nach
dem aktivieren des Textes hab ich nur wilden Zeichensalat auf dem
Bildschirm, den ich aber durch Zeichen überschreiben kann.
Muß man den Chip generell beim Initialisieren löschen?

Ich mußte übrigens 4x für den Takt einstellen, damit es geht. Liegt
aber vielleicht daran, daß ich einen externen Oszillator verwende.

von Lerner (Gast)


Lesenswert?

So Selbstgespräch. Mit command 4 Bit 2 kann man den kompletten RAM
löschen.

von Lerner (Gast)


Lesenswert?

Nach dem alles im durchscheinenden Modus alles gut funktioniert, hab ich
jetzt mal versucht, weiße Schrift auf schwarzen Hintergrund
hinzubekommen. Der Hintergrund wurde bei mir aber nur grau. Kann ich
den Level der Hintergrundfarbe irgendwie beeinflußen? Mit Command4 hab
ich schon ein bischen rumgespielt, aber nichts erreicht. Vielleicht
elektrisch? Beim STV5730 gibts ja da was entsprechendes, beim LC74776
wüßte ich jetzt nicht.

von Ethan Arnold (Gast)


Lesenswert?

Ich hab ein ähnliches Problem mit dem STV5730A:
Ich will weiße Schrift, schwarz umrandet, ins laufende Videosignal
einblenden. Das funzt zwar im Grunde, aber die Schrift ist grau und
halbtransparent, statt weiß. Alles andere ist ok. Ich such noch
passende Parameter aber die Doku ist nicht gerade die am leichtesten zu
verstehende... Als Schaltung hab ich, wie im Datenblatt bzw. einer
anderen Beispielschaltung vorgeschlagen, beide Videoausgänge (1+2)
mittels je 470R zusammengeführt.

von Ethan Arnold (Gast)


Angehängte Dateien:

Lesenswert?

Muß dazu sagen, ich hab die Pins LESCREEN und LECHAR auf Masse gelegt,
und Bit 10 des ControlReg auf 0 gesetzt, dachte eigentlich das Ding
wird schon weiß darstellen wenn er es können soll... Vielleicht sollte
ich auch die Pins von Masse befreien, vielleicht zieht das die
helligkeit runter?

Im Bild die Kissenförmigen Linien sind nur im Foto, keine Ahnung woher
das nun kommt. Die Bildqualität ist an sich recht gut, ich bin ganz
zufrieden. Das Kamerabild (Hintergrund) zeigt den Blick aus dem Chaos
meines Bastelplatzes, die 4 LEDs hängen an dem Bus zwischen OSD und
PIC.

von Netbandit (Gast)


Lesenswert?

Also bei mir gab es mit Bit 10 im Cntrl Reg. auf 0 nur massive Probleme.
Ich war sehr glücklich, daß ich einfach zwei Potis damals mit in das
Layout eingeplant habe. Das würde den "Grau"-Fehler sicher gut
erklären.

Bei mir ist die Schrift übrings auch grau und nicht weiß, wenn ich mit
LESCREEN und LECHAR versuche die Schrift weiß zu regeln, dann kommt es
zu sehr unschönen Fehlern (schräge Schrift, ausreißen am Anfang und am
Ende der Zeile, abhänig von der Buchstabenzahl auf der Zeile).

Daher hatte ich schon oben erwähnt, daß ich die Qualität des STV5370A
für Textgrafikanwendungen als unzureichend empfinde. Um wenige Infos in
einem Videosignal oder auf einen farbigen Hintergrund darzustellen
reicht sie allerdings aus.

Der Fehler mit der Halbtransparenz scheint woanders zu liegen. Wie hast
du VOUT1 und VOUT2 beschaltet? Bei mir ist VOUT1 an der Basis des
Transistors dran und VOUT2 unbeschaltet. Allerdings gibt es Pläne im
Netz und auch im Datenblatt wo VOUT2 über einen Widerstand zu VOUT1
eingekoppelt wurde. Dies ruft dann eine Halbtransparenz hervor in
Abhänigkeit des Widerstandverhältnisses. Vielleicht ist dies bei dir
der Fall.

von Ethan Arnold (Gast)


Lesenswert?

Das mit der Transparenz hab ich hinbekommen, wenn man den einen Bit im
Control entsprechend setzt (auf high impedance). Aber das mit der
Textfarbe will mir nicht in den Kopf, es gibt einige Bilder im Netz von
Projektem mit diesem Chip die richtig schöne weiße Schrift haben. Da muß
es doch einen Weg geben...

Hab zufällig beim Rumbasteln entdeckt, wenn man die Leitung zwischen
Pins 1+28 mit dem Videoausgang versehentlich kurzschließt, ist dei
schrift plötzlich knallweiß :-) (allerdings ohne Rand, also offenbar
jedes erzeugte Pixel wird weiß). Vielleicht ist das irgendein
Hinweis...?

Momentan hab ich auch das Problem, daß ich ungefähr 20 Mal resetten
(programm neustarten) muß bevor mein Testbild auf dem STV erscheint, es
sieht fast so aus als wären datenfehler bei der übertragung, aber ich
hab nun schon die geschwindigkeit runtergedrosselt ohne Ende (mehrere
µS Pulslänge, auch im ms-Bereich schon probiert) und das scheint nicht
zu helfen... Vielleicht irgendwelche anderen Störungen, die die
Übertragung stören? Ich hab mich ziemlich genau an den Plan im
Datenblatt gehalten.

von Netbandit (Gast)


Lesenswert?

Regel die Abstände zwischen den SPI Übertragungen runter da muß eine
Pause von mehreren ms rein soweit ich weiß.

von Ethan Arnold (Gast)


Lesenswert?

Laut spezifikation 4*maxHZ in µs, das sind bei mir (da ich kein Zoom
verwende) 4 µs. Bei 12 MIPS muß ich dafür also 48 NOPs machen, das tue
ich auch. (Hab sogar momentan testweise 125µs Pause drin).
Interessanterweise hatte ich bei den ersten Versuchen keine Pausen
drin, also kamen die Datenbits in etwa 100ns Takt, das hat auch noch
(fast) so gut funktioniert wie jetzt...

von Netbandit (Gast)


Lesenswert?

Ah ja stimmt, bei mir sind es 16µs (hab gerade noch mal nachgeschaut).
Wie resettest du den STV? Genau wie im Datenblatt?
$3000,$3000,$00db,$1000?

Vielleicht simmt irgend ein anderes Timing nicht? (keine 100ns Pause
zwischen /CS und Datenanfang etc.)

von Ethan Arnold (Gast)


Angehängte Dateien:

Lesenswert?

Ich bin alle timings mehrfach sorgfältig durchgegangen (die meisten sind
100ns oder 200ns lang, bei 12 MIPS hat jeder Befehl 83ns (wenn ich
richtig gerechnet hab?), also sollte es immer reichen solange 3 Befehle
pro Pegelwechsel verarbeitet werden), hier und da ein NOP eingefügt,
hilft nix... Ich bin relativ überzeugt daß es kein timingproblem mehr
ist... Ich hab zwei Code-Varianten, eins von heute früh, umständlich
und schlecht programmiert, aber funktioniert (zumindest nach 3-5
resets). Dann das zweite, etwas besser optimierte, das aber heute
nachmittag irgendwann aufgehört hat zu funktionieren und nun krieg ich
es nicht mehr hin, obwohl ich teilweise bei JEDEM pegelwechsel eine
125µs pause gemacht hab :-( vielleicht mag jemand ja mal reinschauen
und sieht den fehler (ist für den PIC18F2550, nicht Atmel, aber
vielleicht ist der Code trotzdem verständlich genug?)

von Netbandit (Gast)


Lesenswert?

Hi,

ich habe lange nicht mehr mit PIC Assembler gearbeitet und kenne auch
nur die PIC16 Typen... aber folgendes ist mir aufgefallen:

Wai2    nop                    ; 83 cycles = 10µs (assuming 12 MIPS)

Also bei 12 MIPS ist ein Zyklus 83ns lang. 83ns * 83 = 6,9µs
Darauf baust du dann auf und wartest diese Zeit 249 mal und hoffst
dabei auf 2,5ms zu kommen. Das sind in Wirklichkeit aber nur 1,7ms. Die
wartest du am Anfang 200mal = 344ms anstatt der erwarteten 500ms.

Ich warte am Anfang aber nur 250ms bevor ich den STV resette, also
daran liegt es nicht. Dafür arbeite ich mit einem SPI Takt von nur
125KHz = 8µs pro Taktzyklus. Das ist also wesendlich langsamer als du
:)

genauso wartest du unten bei wait125 nicht 125µs sondern maximal 42µs
Ich rechne jetzt für den decfz und den bra Befehl je 83ns = 166ns * 256
= 42,4µs

Was aber laut Datenblatt auch ausreichend ist.

Ansonnsten habe ich zumindest in der Senderoutine keine Fehler
gefunden. Sie scheint ja auch sehr identisch zu sein zu Version 1 und
die ging ja.

Kannst du mal gucken was passiert wenn du die Senderoutine von Version2
in Version1 verwendest? Vielleicht liegt der Fehler auch im Reset bzw.
in der Initialisierung selbst?

Ich führe das Reset aus, dann springe ich zum Statusregister (12) und
schicke die 5 Datenwords rüber. Danach schicke ich die 11 Zeilenwords
(so ein standartwert)rüber und danach springe und danach die Restlichen
308 Zeichenwords (Zeichen $0B).

Und nun fange ich eifach an mit ihm zu arbeiten...

von Netbandit (Gast)


Lesenswert?

Ach so was ich vergessen habe: Wie kommst du auf 12MIPS?
Soweit ich weiß arbeiten die PIC18 maximal nur mit 40MHz und das sind
dann nur 10MIPS oder?

von Ethan Arnold (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

vielen Dank für die Analyse :-)

Mein PIC läuft mit 24Mhz Taktgeber (Quarzoszi) und wird intern
verdoppelt, also 48 Mhz (wenn ich alles richtig gemacht hab). Die 125µs
Zeitschleife hab ich mit einem Oszi getimt, also scheint das zu passen,
wenigstens auf 10% genau. Vielleicht ist meine Taktung dann nicht so
wie ich es gern hätte, aber hauptsache die Timings stimmen
einigermaßen, und das tun sie, ich hab mal alle NOPs rausgenommen aus
der Senderoutine und  am Oszi hatte ich immer noch keine Pulse unter
100ns.

Mittlerweile hab ich eine andere Vermutung, vielleicht ist mein PCB
design schuld, ich hab nämlich etwa 6cm lange Leitungen für den Bus
liegen, CSN/CLK/DATA dicht nebeneinander, evtl. kommen die Signale
nicht sauber beim STV an, ich mess gleich mal direkt an den STV pins.
Obwohl auch dann, bei mehreren ms Pause beim Takt, sollten kaum noch
störungen auftreten... oder?

von Netbandit (Gast)


Lesenswert?

Also man kann einen PIC theoretisch mit 80MHz laufen lassen (Intern
20MIPS) wenn man einen 40MHz Quarz nimmt und ihn intern verdoppelt?
Das wäre ein Grund wieder auf PIC umzusteigen ;)

Also an der leitungslänge liegt es wohl nicht, meine Leitungen sind
ähnlich angeordnet und ungefähr genauso lang.
Versuche mal die CLK ebenfalls auf 125KHz zu reduzieren... (4µs low und
4µs high) vielleicht gibt es deswegen bei mir keine Störung?

von Ethan Arnold (Gast)


Angehängte Dateien:

Lesenswert?

ok, das war's nicht, das data-signal kommt noch wunderbar scharf an,
sooo hoch sind die frequenzen offenbar doch nicht (siehe foto,
timebase=10µs, also etwa 1µs pro Puls)

hmmm... jetzt bin ich langsam mit meinem latein am ende... bei der
osd.asm bekomme ich nach etwa 5-10 resets das gewünschte bild, beim
osd2.asm (und weitere versionen) vielleicht nach 100 resets oder so,
obwohl da kaum änderungen drin sind...

von Ethan Arnold (Gast)


Lesenswert?

Ich glaube 24Mhz externer takt (48 mhz intern) ist maximum, guck sonst
mal bei microchip.com ins datenblatt der 18fxxxx serie.

ich hab gleich mit diesem recht großen Modell angefangen, damit ich bei
einem modell bleiben kann und noch luft für viel rechenzeugs hab.
dewegen bleib ich auch bei assembler, auch weil ich früher viel mit dem
6502 in maschinencode gemacht hab (hatte damals (1988 oder so) keinen
assembler, hab alles auf papier in opcodes umgerechnet) und es mich
gereizt hat, mal wieder richtig minimaliustisch-effizient zu
programmieren, wie in den guten alten zeiten (als man gar keine andere
wahl hatte g)

allerdings muß ich nach etwas Einarbeitung sagen, es wär für manche
sachen fast einfacher, mehrere kleine pics für mehrere zwecke
einzusetzen, die dann miteinander sprechen, so muß man nicht so sehr
drauf achten daß man mit timings für mehrere devices parallel
durcheinanderkommt... oder vielleicht ein RTOS (real-time OS /
multitasking) probieren :-) gibts ja auch für den PIC

von Netbandit (Gast)


Lesenswert?

Hat dieser PIC den du da verwendest kein Hardware SPI? Selbst mein
damaliger PIC16F877 hatte das schon.
Versuche es mal darüber, dann wird dir der großteil des Timings
abgenommen.

Ich bin auch ein Assemblerfan, weil es eben so direkt ist und ohne
Umwege :)
Auch ich vertrete die Theorie, daß es manchmal besser ist mehrere
kleinere Prozessoren einzusetzen als einen großen :)

von Ethan Arnold (Gast)


Lesenswert?

was ist "spi" :-)
ser/par interface? i²c? ich hab mal im datenblatt rumgelesen aber
soweit ich es verstanden habe, unterstützen die interfaces nur 8-bit
transfers, keine 16/8/0 bit... aber vielleicht täusch ich mich auch...

von Netbandit (Gast)


Lesenswert?

Serial Peripheral Interface also Serielle Datenübertragung, jedoch nicht
I2C. Beim SPI werden immer 8bit auf einmal übertragen. Das ist aber
nicht schlimm, denn das /CS Signal schaltest du weiterhin manuell. Also
wenn du zwischen zwei Übertragungen das /CS Signal nicht ausschaltest
wirkt das wie eine 16bit Übertragung.
Im Datenblatt meines PIC16 war das unter der Bezeichnung "MASTER
SYNCHRONOUS SERIAL PORT (MSSP) MODULE" zusammengefasst und
funktioniert auch gleichzeitig als I2C Schnitstelle (wird über ein Bit
umgeschaltet). Wie das beim PIC18 weiß ich leider nicht.

von Ethan Arnold (Gast)


Lesenswert?

Hmmm, ja der PIC18F hat auch SPI, ich hatte es noch nicht näher
betrachtet, u.a. weil die meisten Beispiele die ich gefunden hab, das
nicht benutzen sondern "manuell" fahren, also hab ich das auch so
gemacht... Ich werd mich mal einlesen und es damit probieren...

Mal was anderes, der PIC18F hat ja auch USB, allerdings wohl nur als
Endgerät gedacht, nicht als Master/Host/wie auch immer man den PC im
USB-Bus nennt. Mich würd interessieren ob ich mit dem PIC auch ein
USB-Master realisieren kann, der z.B. von einer USB-GPS-Maus die Daten
empfangen kann, oder einen USB-WLAN-Stick (oder Speicherstick, oder
etc...) ansprechen kann.

von Ethan Arnold (Gast)


Lesenswert?

Das haben die ja toll gemacht :-( die SPI pins sind fast alle auf PORTB,
die UART (RS232) fast alle auf PORTC... Fast alles unabhängig
voneinander nutzbar... ABER: UART RxD ist auf demselben Pin wie SSI
TxD, genau die beiden Funktionen, die ich getrennt bräuchte.

Grummel!!!

von Netbandit (Gast)


Lesenswert?

Also das ist ein kompliziertes Thema. Ich habe mich noch nicht in die
USB Materie eingearbeitet, aber soweit ich weiß ist das USB vom PIC18F
nur auf Slave ausgelegt. Dafür ist eben die Ansteuerung recht einfach,
da vieles per Hardware gemacht wird.

Es gibt allerdings auch Controller die USB Master haben, jedoch spielen
die in einer anderen Liga (32Bit). Darüber hinaus gibt es von einigen
Herstellern spezielle USB Copntroller. Eventuell haben die auch welche
im Angebot die USB Master bewältigen können.

USB Slave ist schon kompliztiert genug, USB Master ist eben nochmal ein
anderes Thema. Allerdings würde ich auch bei diesem Thema sagen:
Grundsätzlich ist es nicht unmöglich, nur mit der vom PIC18F gebotenen
Hardware alleine ist es sicher nicht möglich.

von Netbandit (Gast)


Lesenswert?

Tatsächlich, beide auf dem Pin 18. Na das ist aber ein grober Fehler von
Microchip...
Naja das kommt eben bei raus, wenn man versucht viele Funktionen in ein
kleines Gehäuse zu bringen.
Aber zum Glück ist es der RXD (Recived Data) also meiner Meinung nach
der Pin der RS232 Empfängt. Du mußt dann eben nur über die
Kontroll-Leitungen des RS232 während einer SPI Übertragung den RS232
Sender aufhalten, damit er dir nicht dazwischen funkt.

von Ethan Arnold (Gast)


Lesenswert?

Das Problem daran ist nur, daß die RS232 Daten zeitkritisch sind, und
möglichst ohne jede Verzögerung zur Verfügung stehen sollen, und es
wird auch noch recht viel /ständig übertragen (was somit auch
ausschließt, den rs232-empfang manuell zu machen). Nun könnte ich im
Datenstrom regelmäßige Lücken abwarten (das Format ist bekannt, also
wären die Lücken vorhersehbar) und dann schnell den OSD updaten. Aber
das macht die Sache wieder komplizierter. Also muß ich wohl entweder
die SPI von Hand machen (wie bisher jetzt auch, nur daß da leider noch
ein Bug drin ist) oder doch einen kleinen µC extra für den OSD
nehmen... bah. Ich hatte mich so drauf gefreut alles wunderbar
praktisch in einem zu machen...

von Ethan Arnold (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab grad gesehen, daß ich nirgends den bank selector benutzt hab,
laut Datenblatt verwendet jeder Speicherzugriff defaultmäßig den BSR,
den ich nie gesetzt hab. Wenn man aber überall ",0" dranhängt wird
immer die access bank benutzt, bei der die untere hälfte aus nutzbaren
ram (GPR) und die obere aus den steuerregistern (SPR) besteht.
Allerdings tut sich jetzt auch nicht mehr als vorher, also hab ich
entweder nix verbessert, oder sogar verschlimmert...

von Netbandit (Gast)


Lesenswert?

Ich kenne mich zu schlecht mit dem inneren Aufbau der PIC18 aus, als daß
ich dir da eine Hilfe sein könnte :)

Aber versuche die ganze Ansteuerung einfach nochmal per Hardware SPI
und wenn das hinhaut, dann weißt du ja schonmal woran an liegt :)

von Ethan Arnold (Gast)


Angehängte Dateien:

Lesenswert?

Also ich bin jetzt überzeugt daß es nicht primär am code oder
steuerzeiten liegt. Wenn der chip mal nen richtigen init macht, dann
läufts auch minutenlang fehlerfrei mit scrollendem text, also an der
reinen datenübertragung liegts nicht. aber ich muß manchmal bis zu 100
mal (!) resetten bis es mal geht, zwischendurch werden immer wieder mal
effekte von fehlern sichtbar (zwischen 2 resets wird die verstärkung auf
+6db raufgesetzt, dann wieder runter, dann wird der hsync gestört
(störzeilen im 1cm abstand im bild), dann verliert sich der vsync, dann
passt wieder alles, und irgendwann mal kommt dann der richtige text.
resette ich dann nochmal, fängt alles wieder von vorne an. kann es
nicht irgendwas an der schaltung sein, irgendein kondensator vergessen
oder so? eigtnlich hab ich alles nach datenblatt gebaut... siehe
schaltplan, ist zwar noch nicht ganz die fertige version, aber die
peripheriebeschaltung des STV wurde genau so umgesetzt.

ich hab auch schon versucht, 1/2 sekunde (!) pause zwischen jedem
übertragen byte zu machen, hilft auch nix...

von Ethan Arnold (Gast)


Angehängte Dateien:

Lesenswert?

endlich hab ich reproduzierbare ergebnisse!
hab beim rumprobieren festgestellt, daß irgendein write zum control
register NACH dem screenlöschen und zoomsetzen etc. sofort wirkung
zeigt, es funktioniert zwar immer noch nicht alles ganz
erwartungsgemäß, aber wenigstens tut es das was es tut jedesmal gleich
und nicht erst nach tausend reset-versuchen freu so komm ich ja
wenigstens mal weiter...

von Netbandit (Gast)


Lesenswert?

Hi,

Also das erste was mir auffällt ist, daß du einen 17.754MHz Quarz hast
und ich einen 17.734MHz Quarz (wie im Datenblatt beschrieben).
Ich weiß zwar nicht genau wie sich eine Abweichung auswirkt (sollte ja
immerhin ein vielfaches der PAL Farbträgerfrequenz sein) aber ich hatte
mit einem anderen Quarz der leicht daneben lag einige Probleme (Bilder
nur noch s/w etc.).

Dann ist dein CSN Pin in der Schaltung auf GND. Das kann aber in deinem
Aufbau nicht sein, da du ihn ja in deinem Programm schaltest und falls
er doch auf GND sein sollte dürfte der STV gar keine Daten verarbeiten
(da er nie weiß wann das Ende erreicht ist).

Außerdem sind BAR, LESCREEN, LECHAR auf GND. Dagegen spricht zwar an
sich nichts, aber eventuell belastet das den STV. Also vielleicht mal
über einen PULL Down auf GND oder über einen PULL UP auf HIGH.

Abgesehen von diesen wohl eher optischen Fehlern kann ich auf die
schnelle nicht wirklich einen groben Fehler entdecken (bis auf den mit
CSN der aber wohl in deinem Aufbau nicht drin ist)

von Netbandit (Gast)


Lesenswert?

Hmm die Resetabfolge für ich so gestalten:

-> Pointer auf Zoomregister(12) setzen
-> Zoomregister übertragen (12)
-> Colorregister übertragen (13)
-> Controlregister übertragen (14)
-> Positionregister übertragen (15)
-> Moderegister übertragen (16)
-> Zeilenstatus für Zeile 0 übertragen
-> Zeilenstatus für Zeile 1 übertragen
...
-> Zeilenstatus für Zeile 9 übertragen
-> Zeilenstatus für Zeile 10 übertragen
-> Buchstabe 0 übertragen
-> Buchstabe 1 übertragen
...
-> Buchstabe 306 übertragen
-> Buchstabe 307 übertragen

Also ohne zwischendurch den Pointer neu zu setzen...

von Ethan Arnold (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

richtig, den CSN hatte ich nur im ersten Entwurf drin weil ich da noch
nciht gesehen hatte daß er wirklich angesteuert werden muß (dachte
zuerst an eine CS leitung aus den alten tagen, wo Bausteine noch
parallel angesteuert wurden (Datenbus) :-) und hab gedacht, wenn die
Datenleitungen eh dediziert für den STV sind, brauch ich das nicht.
Aber egal, ist ja korrigiert, wie du vermutest, weil sonst würd ja gar
nix gehen.

Das mit der Quartzfrequenz ist ein Tippfehler von mir, es ist
tatsächlich ein 17.73447MHz (zusammen mit dem STV bei RS gekauft, genau
wie Du, andere Frequenzen haben die kaum, haben die wohl nur wegen dem
STV überhaupt im Angebot (und bin froh drum!)

Wozu ist BAR überhaupt da? Ich werd daraus nicht schlau. In irgendeiner
Beispielschaltung hab ich gesehen daß man alle unbenutzten Inputs auf
GND legen kann, also hab ich das getan. Hab allerdings mittlerwiele
LECHAR wieder hochgebogen und stattdessen über 4.7k nach GND, 3.3K nach
+5V auf 2.9V gelegt und damit sind nun meine weißen zeichen richtig
schön weiß :-) (siehe Foto)

Das mit den Timings war tatsächlich nie das wirkliche Problem, ich hab
jetzt wirklich alles auf die 100-200ns laut Spezifikation getrimmt und
es funzt auch (leider manchmal erst nach 2-3 resets, aber es hält sich
nun im Rahmen, bei weiteren Resets gehts immer sofort).

Die Schlüsselentdeckung war: Nach dem Reset, Init, Beschreiben aller
Zeilenregister und Löschen des Screenbuffers, muß aus irgendeinem Grund
mal kurz auf Fullscreen geschaltet werden, bevor MixedMode funktioniert.
Das hat mich jetzt echt die 3 Tage gekostet, weil ich nie Fullscreen
probiert hab, ich brauchs ja nicht, wollte nur mixed mode benutzen.
Seit ich jetzt in der Init Sequenz auf Fullscreen (C0=1) schalte und
später nach dem Schirmlöschen wieder auf Mixed (C0=0) gehe,
funktionierts endlich.

Einerseits bin ich froh es entdeckt zu haben, andererseits ärgert mich
das nun wirklich sehr, so ein scheiss bug.. Und daß nach 10-jähriger
Lebensdauer dieses Chips im Netz kein Wort davon erwähnt wird, obwohl
schon soviele Leute dafür Projekte gebaut haben... versteh ich nicht...
aber vielleicht ist es nur in der Revision, die ich erwischt hab...

tx_osd  movwf  count
  bsf     PORTB,OSD_CLK  ; make sure clk is high
  nop      ; for safe timing
  bcf  PORTB,OSD_CSN  ; set csn low (selected)
  nop      ; for safe timing

loop1  bcf  PORTB,OSD_CLK  ; clk output low
  rlcf  OSD_L    ; rotate low byte left into carry
  rlcf  OSD_H    ; rotate high byte left into carry
  bc  hi    ; branch if carry
  bcf  PORTB,OSD_DATA  ; set OSD data out low
  bra  end1
hi  bsf  PORTB,OSD_DATA  ; set OSD data out high
end1  nop      ; for safe timing (CLK low = 200ns)
  bsf  PORTB,OSD_CLK  ; CLK high --> data valid
  decfsz  count    ; skip next cmd if count is now zero
  bra  loop1    ; process next bit
  bsf  PORTB,OSD_CSN  ; csn high (deselected)

von Ethan Arnold (Gast)


Lesenswert?

Regsiter und Seiteninhalt so in einem Rutsch übertragen dürfte nicht
gehen, da STRU[7:6] bei den Registern 11 ist, und DEPL[4:0] geht von
12-16 aber muß bei dem Row Attribute auf 0 sein, oder schreibst Du
einfach 17...31 mit Müll voll, bis Bit 5 auf 1 springt? Anschließend
würde zwar irgendwann DEPL und STRU auf 0 springen aber BUF wär dann
auf 1, Du würdest dann in Reihe 1 (nicht 0) anfangen zu schreiben. Also
zwischendurch den Pointer neu setzen muß schon sein...

von Netbandit (Gast)


Lesenswert?

Oh ich sehe gerade, ich habe doch tatsächlich die Zeilenregister und
Zeichenregister zwischendurch adressiert. Sorry, ist schon ne Weile
her, daß ich den Code geschrieben habe.

Mixed Mode habe ich nie ausprobiert ich arbeite nur im FullMode.
Du sagst, daß bei dir alles schön weiß ist etc. Könntest du mal in den
FullMode schalten, einen blauen Hintergrund nehmen und das Zeichen $77
auf eine ganze Zeile schreiben?

Bei mir kommt dann ein häßlicher Fehler. Die Zeichen werden kursiev und
es kommt zum Ausreißen am Zeilenende und Anfang.
Ich vermute, daß es sich dabei um noch einen unprotokollierten Fehler
des STV hanelt.

von Ethan Arnold (Gast)


Lesenswert?

Hi,
mit blau hab ichs noch nicht probiert, aber wenn ich das im mixed mode
mache sieht es relativ sauber aus, bis auf leichte helle schlieren
rechts am rand (verlängerte zeile sozusagen), das liegt aber sehr
wahrscheinlich daran daß mein videofunkempfänger noch nicht abgestimmt
ist (ich hab gleich nen sender mit eingebaut). als ich zu testzwecken
den monitor noch direkt dran hatte, war es absolut sauber. mit
schwarzem hintergrund ist der effekt etwas stärker. ich hoffe ich krieg
das mit besserer filterung (spannung/signal) am empfänger noch hin.
momentan hab ich das problem, daß im fullscreen mode die zeilen
zerpixelt werden, die buchstaben sehen aus wie aus lego und jemand hat
jedes einzelne halb zertrümmert...
Das GPS(NMEA)-parsen ist ein mega code geworden... andere Leute
(http://www.vermontficks.org/gpsd.htm) haben hier 4kB an code
gebraucht, weil sie es in C programmiert haben, das ist natürlich
bequem aber ich machs lieber in asm... es paßt jetzt auch in 300bytes
:-) (zumindest soweit wie ich momentan bin) was halt echt nervig ist,
ist das Fehlen einer indizierten adressmethode... selbst der nun 25
jahre alte 6502 im Atari 800XL (auch als 6510 bekannt im C64) hatte
einen LDA(addr,y) befehl (beim PIC wäre das wie "movf F+offset,W"
aber beim PIC gibts das höchstens im erweiterten PIC18F befehlssatz...
Macht also eine Pufferung sehr schwer, muß alles in Echtzeit verrechnet
und abgelegt werden.

von Netbandit (Gast)


Lesenswert?

Hi, vielleicht hast du noch die Möglichkeit das ganze im Fullscreenmode
zu testen. Diese Schlieren stellen bei mir die Vorstufe für das von mir
beschriebe Verfahren da.
Je mehr Zeichen in der Zeile geschrieben werden, desto stärker werden
die Schlieren, die Zeichen fangen langsam an kursiv zu werden und
irgendwann reißt der Zeilenanfang und das Ende komplett aus. Mit den
LESCREEN und LECHAR Reglern kann ich das etwas nachbesern, wobei
dadurch die Zeichen sehr dunkel werden. Also habe ich einen Kompromiss
gefunden zwischen diesem Fehler und der Zeichenhelligkeit.
Natürlich könnte dies auch an einem Defekt am STV oder an einer
fehlerhaften Außenbeschaltung oder sogar fehlerhaften Einstellung
liegen, jedoch habe ich nach sehr intensiven Suchen keine Möglichkeit
gefunden diesen Fehler zu umgehen. Den Mixed Mode habe ich nie
getestet, da ich hier in meiner Werkstatt kein Videosignal zur
Verfügung habe.

Mein Code ist jetzt inzwischen sehr groß (ca. 8KByte) und ebenfalls in
Assembler. Sicher sind noch viele Teile nicht besonders effektiv, dafür
ist auch der Funktionsumfang sehr groß. Ich habe zwei Unabhänig laufende
Laufschriften, welche in verschiedener Geschwindigkeit und Laufrichtung
laufen können und maximal 256 Zeichen je Laufschrift enthalten können.
Außerdem speicher ich im RAM (2KByte) die kompletten Einstellungen und
Zeichen zwischen (quasi parallel) was es mir ermöglichst das komplette
Bild mit allen Einstellungen in einem externen EEPROM abzulegen und
später wieder einzuladen. Bei diesem EEPROM (128kbit) passen dann 9
Bilder rein.

Alle Einstellungen sowie Servicefunktionen können über RS232 oder einem
8bit Datenbus (da bin ich gerade bei) an den µC übertragen werden.
Insgesammt sind es über 50 Befehle die ich dem µC senden kann.

Das ganze soll als so eine Art Grafikkarte ein OSD für einen HDD MP3
Player funktionieren. So kann ich dann über den TV durch die
Verzeichnisse der HDD gehen, Playlisten bearbeiten und Einstellungen
vornehmen.

Also mit anderen Worten habe ich noch eine ganze Menge vor mir :)

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.