PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BAS/FBAS mit Bascom



colindrovin
01.04.2013, 20:38
Hallo.
Momantan arbeite ich an einer Möglichkeit ein BAS, also ein Fernsehsignal, mit einem Mega32 zu generieren.
Ich habe momentan nur schwarz (0,3V) und weiß (1V) als Farben am Ausgang, die ich an 2 Ausgängen mit Spannungsteilern mache.
Hier ist mein Programm:

$regfile = "m32def.dat"
$crystal = 1000000

Config Porta.4 = Output
Config Porta.5 = Output

Weiß Alias Porta.4
Schwarz Alias Porta.5

Dim X As Long
Dim Y As Long

Do

X = X + 1

If X = 12 Then
Weiß = 1
End If

If X = 25 Then
Weiß = 0
Schwarz = 1
End If

If X = 38 Then
Schwarz = 0
Weiß = 1
End If

If X = 51 Then
Weiß = 0
Schwarz = 1
End If

If X = 64 Then
Schwarz = 0
X = 0
End If

Y = Y + 1

Loop

Y hat hier noch keine Verwendung. Es wird später der Anzahl der Zeilen entsprechen und somit anzeigen, wann ein komplettes Bild generiert wurde.
Mein Problem ist jetzt, dass der Fernseher (Philips Röhrenfernseher) das Signal nicht als Signal erkennt.
Hier sind noch meine Quellen:
http://de.wikipedia.org/wiki/Fernsehsignal#BAS-Signal
http://azubi.vision-tools.com/media/Dokumente/Videosignale/Videosignale.htm#BAS-Signal

Was habe ich falsch gemacht?

Beste Grüße
Colindrovin

radbruch
01.04.2013, 21:31
Hallo

Auch wenn dein Kontroller mit 1MHz getaktet wird, und deshalb ein Takt eine Mikrosekunde dauert, heißt das nicht, dass nach "If X = 64 Then" genau 64µs vergangen sind. Pro Schleifendurchgang vergeht die Zeit für die If-Abfragen, dem Code für eine erfüllte Abfrage oder der Sprung zur nächsten Abfrage und zusätzlich die Zeit für die Inkrementierungen von x und y sowie der Rücksprung der Do-Loop-Schleife. Alles zusammen dauert einige viele Kontrollertakte und schmeißt dein Timing so über den Haufen, dass der Röhrenfernseher kein Bildsignal erkennen kann.

Gruß

mic

colindrovin
01.04.2013, 23:24
Danke für deine schnelle Antwort. Kann ich an dem Port vom Timer 0 einen Oszillator anschließen und mit dem Signal die Variablen hoch zählen? Wenn ja, wie mach ich das?
Ich habe es schon einmal ausprobiert aber es hat nicht funktioniert.

- - - Aktualisiert - - -

Ich habe jetzt ein Programm geschrieben um zu testen ob ich einen 1 MHz Signal verarbeiten kann. Ich bekomme aber nicht 1.000.000 Signale in der Sekunde sondern nur wenige tausend.
Hier ist das Programm:

$regfile = "m32def.dat"
$crystal = 10000000
$baud = 9600

Const Interval = 1

Config Pinb.0 = Input

Dim X As Long

Config Timer0 = Counter , Edge = Falling
On Timer0 On_timer0

Load Timer0 , Interval

Enable Timer0
Enable Interrupts


Do

Print X

Loop

END


On_timer0:

Load Timer0 , Interval

X = X + Interval

Return

Wieso ist das so?