Forum: Mikrocontroller und Digitale Elektronik LTC TimeCode Decoder bauen


von Simon S. (simschmid)


Lesenswert?

Hallo
Professionelle Broadcastvideokameras (abder auch DAT- und andere
Bandgeräte) bieten einen TimeCode Ausgang, an dem ein LTC oder VTC
TimeCode anliegt. Dieser ist Analog und im hörbarenbereich. Somit
einfach übertragbar.

Ich möchte nun einen Leser bauen, der mir diesen TimeCode anzeigen
kann. Stunden:Minuten:Sekunden:Frames.

Im Internet konnte ich diverse Infos finden. So zum Beispiel das
Protokoll:
http://www.ebu.ch/CMSimages/en/tec_doc_t3097_tcm6-10504.pdf
http://www.poynton.com/notes/video/Timecode/

Sogar einen C-Code für die decodierung per Computersoundkarte habe ich
gefunden:
http://www.lurkertech.com/lg/ltc.c
Dadurch kam ich auf die Idee, dass die decodierung auch per AVR möglich
sein müsste.

Was ich nun realisierne moechte, ist eine AVR Schaltung, der ich an
einem AD Eingang den LTC TimeCode einspeisen kann und die mir dann den
TimeCode als rs232 oder direkt auf eine Ledanzeige ausspuckt.

Nur leider kann ich mit dem oben angefuehrten C-Code nicht viel
anfangen.

Hoffe, hier jemanden zu finden.

von Magnus Müller (Gast)


Lesenswert?

Hi Simon,

bin gerade damit beschäftigt, mir nochmal einen Timecodereader zu
programmieren (hatte ich vor einigen Monaten bereits realisiert - aber
leider hat sich wenige Wochen später meine Festplatte verabschiedet).

Den AD-Wandler brauchst du nicht. Der TC steht ja im Prinzip als
digitales Signal zur Verfügung (wenn auch i.d.R. nicht mit
TTL-Pegeln).

Mein Programm hat im Prinzip nur einen der Hardwaretimer und den dazu
gehörigen Input Capture benutzt... Werde dieses Prinzip wohl auch bei
der "Wiederauferstehung" meines TC-Readers verwenden.

Falls du noch Interesse hast, können wir ja weiter in Kontakt bleiben
;)

Gruß
Magnetus

von Simon S. (simschmid)


Lesenswert?

Hallo Magnetus

Ja, klar bin immer noch dran interessiert.
Welchen AVR hast du da verwendet?

Lass uns ind Kontakt bleiben!

Gruess Simon

von Magnus Müller (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Simon,

hier bin ich wieder ;)

Ich verwende bisher einen ATmega128 (Crumb128 von www.chip45.com). Das
Ganze lässt sich aber auch mit kleineren AVRs mit InputCapture
realisieren.

Welchen AVR verwendest Du?

Habe in den letzten Tagen noch einmal einen LTC-Leser programmiert. Die
ersten Tests in AVRStudio hat das Programm bereits bestanden. Der
Praxistest steht noch aus.

Im Anhang sind die ersten Früchte zu finden (hier für nen ATmega128
@16MHz) Das Signal wird auf PD4 (IC1) zugeführt. Das Einlesen geschieht
Interruptgesteuert.

tc[0] enthält die Frames   als Ganzzahl (0 bis 24)
tc[1] enthält die Sekunden als Ganzzahl (0 bis 59)
tc[2] enthält die Minuten  als Ganzzahl (0 bis 59)
tc[3] enthält die Stunden  als Ganzzahl (0 bis 23)

tc[4]  enthält die Frames   Einer  (0 bis 9) als ASCII
tc[5]  enthält die Frames   Zehner (0 bis 2) als ASCII
tc[6]  enthält die Sekunden Einer  (0 bis 9) als ASCII
tc[7]  enthält die Sekunden Zehner (0 bis 5) als ASCII
tc[8]  enthält die Minuten  Einer  (0 bis 9) als ASCII
tc[9]  enthält die Minuten  Zehner (0 bis 5) als ASCII
tc[10] enthält die Stunden  Einer  (0 bis 9) als ASCII
tc[11] enthält die Stunden  Zehner (0 bis 2) als ASCII

ub[0..7] enthalten die Userbits

Der Programmierstil ist vielleicht nicht der Beste (und es fehlen noch
einige Kommentare), aber es scheint zu funktionieren ;)

Gruß
Magnetus

von Simon S. (simschmid)


Lesenswert?

Hallo Magnetus

Ich habe bisher nur den 2313 und den 8515 programmiert.
Und dies direkt in Assembler mit dem STK500.
Dein Programm sieht aber ganz ordentlich aus.
Leider bin ich an meinem Projekt immer noch nicht weiter.

Bitte halte mich auf dem Laufenden.

Simschmid

von Magnus Müller (Gast)


Lesenswert?

Hmm... ich glaube, es ist bestimmt nicht verkehrt, den (ATtiny oder
AT90S)2313 in Assembler zu programmieren (hat ja nicht gerade viel
Flash). Ich habe erst vor ca. 1 Jahr mit den AVRs und mit C
angefangen.

Ich warte gerade auf die Lieferung meines STK500... muss ich zwar erst
reparieren (weil angeblich defekt), aber das wird hoffentlich nicht
lange dauern (so kompliziert kann ein STK500 ja nicht sein ;) )

Muss gleich mal gucken, welche Features der 8515 hat...

Bis denne,
Magnetus

von Magnus Müller (Gast)


Lesenswert?

grübel ...

2313 und 8515....

Welche AVRs meinst Du eigentlich?

--> AT90S2313 (alt) oder ATtiny2313 (neu) ?
--> AT90S8515 (alt) oder ATmega8515 (neu) ?

Sowohl Mit dem tiny2313 als auch mit dem mega8515 sollte es machbar
sein (beide haben genug Flash und nen Input Capture).

von Simon S. (simschmid)


Lesenswert?

Ja, genau die AT90S.
Was verwendest du um vom C zu simulieren und programmieren?
Ich habe eben nur die STK500 AVR Studio Software.

von Magnus Müller (Gast)


Lesenswert?

Zum Simulieren / Debuggen verwende ich auch AVRStudio.
Zum Programmieren (Schreiben/compilieren) verwende ich WinAVR.
Zum Flashen benutze ich bis jetzt noch PonyProg.

Habe gerade noch mal nachgesehen... Auch der AT90S2313 und der
ATmega8515 haben ausreichend Flash sowie einen Input Capture. Mit
diesen sollte das Ganze also auch (leicht) machbar sein.

Gruß,
Magnetus

von Markus Mueller (Gast)


Lesenswert?

Hallo zusammen,

ich möchte auch ein LTC reader bauen.
wurde das projekt fertiggestellt? falls ja, würde mich freuen wenn 
jemand den schaltplan und den code online stellen könnte :-)

mfg
MM

von Andy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

habe hier einen LTC Timecode Decoder/Reader gebaut, mit dem ATMega8 
damals noch. Der ATMega8 decodiert das Timecode Signal (Manchester 
II/differential Manchester ist das glaube ich) in ein TC Sync und TC 
Data Signal mit dem ich dann die 10 Schieberegister 4015 (80 bit) auf 
der Leiterplatte füttere und auf 8x 4511 7-Segment Treiber gebe und 
anzeige. Denn FrameSync, der den LE Latch enable auf den 4511 steuert 
habe ich damals noch Hard-wired mit diskreter UND/ODER Logik auf der 
Leiterplatte zusammenklamüsert. Programm ist in Assembler, bei interesse 
bitte melden.

Schöne Grüße

Andy

von Simon S. (simschmid)


Lesenswert?

Hey Andy
Danke für deinen Beitrag, darauf habe ich 15 Jahre gewartet. Nu. Ist es 
soweit!
Unterdessen wurde ja auch Arduino erfunden, leider habe ich das Projekt 
leider nie mehr weiter verfolgt.
Ich finde es toll, wie das Thema jetzt wieder zum Leben erweckt wurde 
und du damals wirklich eine eigene Lösung gebaut hast. Hast du den TC 
Reader noch im aktiven Einsatz?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Andy schrieb:
> mit dem ich dann die 10 Schieberegister 4015 (80 bit) auf
> der Leiterplatte füttere und auf 8x 4511 7-Segment Treiber gebe und
> anzeige.

Huh? Aber das kann der Mega doch so nebenbei gleich mit machen.

von Der Zahn der Zeit (🦷⏳) (Gast)


Lesenswert?

Hat sich tatsächlich noch nicht erledigt? Dann vielleicht das hier?:
https://www.beis.de/Elektronik/LTC-Disp/LTC-Disp-de.html

von Pandur S. (jetztnicht)


Lesenswert?

Ich bin grad am Planen eines Lesers & Schreibers. Mein Problem ist die 
Synchronisierung zweier Geraete die zu weit voneinander weg sind. Das 
waer dann mit einem Mega644.

von Andy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Simon,

ja ich habe den Reader noch im Einsatz für meine Kameras.
Habe mir auch dazu die passenden Time Code Generatoren gebaut.

@ Matthias S.: Ja stimmt, das würde ich jetzt auch anders machen. Ich 
hatte nur damals noch nicht so genaue Kenntnisse von den gegenwärtigen 
Mikrocontrollern. Ich habe vor ca. 30 Jahren mal mit Assembler coding 
angefangen auf diesem schönen Einplatinen Lerncomputer von Signetics und 
habe erst wieder die letzten 2 Jahre angefangen das Wissen auf einen 
neueren Stand zu bringen.

Schöne Grüße

Andy

von Andy (Gast)


Lesenswert?

Hallo Pandur S.,

ich verwende den ATTiny2313.
Ich synchronisiere meine zwei TimeCode Generatoren folgendermaßen:
Zuerst starte ich den ersten TC Generator. Dann lese ich den TC am 
zweiten TC Generator über den INT0 ein.
1
 
2
ldi temp1, ( 0<<ISC01 | 1<<ISC00 ) ; set INT0 to rising and falling Edge
3
out MCUCR, temp1

Interrupt sense control auf steigende und fallende Flanke setzen.
Jetzt prüfe ich Bit für Bit auf das SyncWord '0x3FFD'. Es reicht 
eigentlich schon die Bit-Kombination '0xFD', da dieses Bit-Muster im 
Code sonst normal nicht vorkommt.
1
TestSyncWd:  ; find sync word and store TC to buffer
2
cpi  FndSyncWd, 1; check for second Byte 'BF' of Sync Word 'BFFC'
3
breq UpdBuffer
4
lsr  currentByte
5
or  currentByte, DataBit
6
cpi  currentByte, 0xbf    ;0xBF
7
breq FndSyncWord
8
rjmp cont

Bei mir ist die Kombination '0xBF', weil ich mein Register andersherum 
beschreibe. Wenn ich das SyncWord habe, lese ich den TC in den Speicher.
Danach schalte ich sofort den Timer ein und lasse den zweiten, jetzt 
synchronisierten TC Generator starten.
Ob mein Generator TC einliest oder ausgibt lege ich mit dem INT1 fest. 
Den habe ich an eine 3,5mm Klinkenbuchse mit eingebautem Schalter 
gelegt. Somit erkennt der 2313 ob sich ein Stecker in der Buchse 
befindet, oder nicht.

Schöne Grüße

Andy

Beitrag #6981963 wurde von einem Moderator gelöscht.
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.