-
        

Ergebnis 1 bis 9 von 9

Thema: TV Textausgabe in Bascom

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282

    TV Textausgabe in Bascom

    Anzeige

    Hallo,
    ich habe für ein bestehendes Projekt in Bascom, nach einer Möglichkeit gesucht, statisch Text auf dem TV darzustellen. Das ganze sollte erstens ohne Interrupts auskommen, da sonst nicht genügend Zeit für die andere Aufgaben bleibt und zweitens mit 4 MHz zurecht kommen.
    Mit Hilfe von JanB's ASM - Terminalquellcode ist es mir gelungen, eine für meine Zwecke ausreichende Lösung in Form einer ASM Subroutine zu finden. (Assembler Freak's mögen mir meinen Programmierstil verzeihen.)
    Ich stelle den Quellcode mal hier rein, vielleicht ist ja dem einen oder anderen mit dieser Möglichkeit geholfen.
    Code:
    '*******************************************************************************
    '*     Versuchsobjekt für TV Ausgabe in Bascom           W.Krüger (c) 2005     *
    '*     für ein fertiges Projekt mit 4 MHz Quarz                                *
    '*                                                                             *
    '*     bei 4 MHz 12 Zeichen pro Zeile (Ausgabezeit pro Pixel 0,5 µs)           *
    '*     Jeder Buchstabe besteht aus 5*12 Bit, da die Buchstaben sonst           *
    '*     sehr gestaucht sind.                                                    *
    '*******************************************************************************     .
    $regfile = "m8535.dat"                  'ATmega8535
    $crystal = 4000000
    
    Dim Txt_nr As Byte
    Declare Sub Ausgabe
    Ddra = 128
    Ddrb = 0                                'Portb.1 Taster gegen GND
    Portb = 2                               'Pullup für Taster ein
    Ddrc = 255
    Const Syn = 7
    Const Sync = Porta                      'Porta.7 = Sync ---[1,2K]---
    Const Video = Portc                     'Portc.7 = BAS  ---[560 ]---
    
    Do
    If Pinb.1 = 0 Then
    If Txt_nr = 3 Then Txt_nr = 0
    Call Ausgabe
    Incr Txt_nr
    End If
    Loop
    
    Sub Ausgabe
    $asm
     lds r18,{Txt_nr}                       'Txt_nr 0 = Text1
     ldi r19,156                            '156 Byte = Textblocklänge
     ldi zh,high(Text1*2)
     ldi zl,low(Text1*2)
     mov r0,r19
     mul r0,r18
     add zl,r0
     adc zh,r1
     cli                                    'alle Interrupts sperren
     ldi r17,255                            'Framezähler R17 * 312 Zeilen * je 64µs
    Main:                                   'bei R17=255 etwa 5 Sekunden Ausgabezeit
     ldi r16,5
    V_sync1:
     cbi sync,syn                           '5 Zeilen V-Sync + Nachtrabanten
     ldi r23,36
    V_sync2:
     dec r23
     brne V_sync2
     sbi sync,syn
     ldi r23,4
    V_sync3:
     dec r23
     brne V_sync3
     nop
     dec r16
     brne V_sync1
     ldi r16,5
    V_sync4:
     cbi sync,syn
     ldi r23,2
    V_sync5:
     dec r23
     brne V_sync5
     nop
     sbi sync,syn
     ldi r23,38
    V_sync6:
     dec r23
     brne V_sync6
     dec r16
     brne V_sync4
    '*********************** Zeile 6-55 ********************************************
     ldi r16,49
    H_sync1:
     cbi sync,syn
     ldi r23,5
    H_sync2:
     dec r23
     brne H_sync2
     nop
     sbi sync,syn                           'Schwarzzeilen
     ldi r23,77
    H_sync3:
     dec r23
     brne H_sync3
     nop
     nop
     dec r16
     brne H_sync1
    '*********************** Zeile 56-68 *******************************************
     ldi r16,12
    H_sync4:
     cbi sync,syn
     ldi r23,5
    H_sync5:
     dec r23
     brne H_sync5
     nop
     sbi sync,syn
     ldi r23,65
    H_sync6:
     dec r23
     brne H_sync6
     lpm r24,z+                             'Ausgabe der Ziffer oben rechts
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     ldi r23,8
    H_sync7:
     dec r23
     brne H_sync7
     dec r16
     brne H_sync4
    '*********************** Zeile 69-150 ******************************************
     ldi r16,83
    H_sync8:
     cbi sync,syn
     ldi r23,5
    H_sync9:
     dec r23
     brne H_sync9
     nop
     sbi sync,syn                           'Schwarzzeilen
     ldi r23,77
    H_sync10:
     dec r23
     brne H_sync10
     nop
     nop
     dec r16
     brne H_sync8
    '*********************** Zeile 151-163 *****************************************
     ldi r16,12
    H_sync11:
     cbi sync,syn
     ldi r23,5
    H_sync12:
     dec r23
     brne H_sync12
     nop
     sbi sync,syn
     ldi r23,5
    H_sync13:
     dec r23
     brne H_sync13
     ldi r23,9
    H_sync14:
     dec r23
     brne H_sync14
     lpm r24,z+
     Out Video , R24                        'Textausgabe (12 Zeichen)
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lpm r24,z+
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     lsl r24
     Out Video , R24
     ldi r23,7
    H_sync15:
     dec r23
     brne H_sync15
     dec r16
     breq H_sync16
     nop
     jmp H_sync11
    '*********************** Zeile 164-312 *****************************************
    H_sync16:
     nop
     ldi r16,150
    H_sync17:
     cbi sync,syn
     ldi r23,5
    H_sync18:
     dec r23
     brne H_sync18
     nop
     sbi sync,syn                           'Schwarzzeilen
     ldi r23,73
    H_sync19:
     dec r23
     brne H_sync19
     dec r16
     breq Frame_end
     ldi r23,4
    H_sync20:
     dec r23
     brne H_sync20
     nop
     jmp H_sync17
    '********************* ENDE ****************************************************
    Frame_end:
     ldi zh,high(Text1*2)                   'für jeden Frame Textadresse
     ldi zl,low(Text1*2)                    'neu laden
     mov r0,r19
     mul r0,r18
     add zl,r0
     adc zh,r1
     dec r17                                'Framezähler herunterzählen
     breq Sub_end
     nop
     nop
     jmp  main
    Sub_end:
     cbi sync,syn                           'Syncport auf "0"
     sei                                    'Interrupt freigeben
    $end Asm
    End Sub
    
    '----------------------------------------------------------------------------
    
    Text1:
    Data 32 , 96 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 112       '1 oben rechts
    
    Data 112 , 32 , 248 , 0 , 240 , 248 , 112 , 112 , 136 , 248 , 240 , 0
    Data 112 , 112 , 248 , 0 , 248 , 248 , 112 , 32 , 136 , 248 , 248 , 0
    Data 136 , 216 , 32 , 0 , 136 , 128 , 136 , 32 , 136 , 128 , 136 , 0
    Data 128 , 136 , 32 , 0 , 136 , 128 , 128 , 32 , 136 , 128 , 136 , 0
    Data 128 , 136 , 32 , 0 , 136 , 128 , 128 , 32 , 136 , 128 , 136 , 0
    Data 112 , 136 , 32 , 112 , 248 , 240 , 128 , 32 , 136 , 240 , 248 , 0
    Data 112 , 248 , 32 , 112 , 240 , 240 , 128 , 32 , 136 , 240 , 240 , 0
    Data 8 , 248 , 32 , 0 , 192 , 128 , 128 , 32 , 136 , 128 , 192 , 0
    Data 8 , 136 , 32 , 0 , 160 , 128 , 128 , 32 , 80 , 128 , 160 , 0
    Data 136 , 136 , 32 , 0 , 176 , 128 , 136 , 32 , 80 , 128 , 176 , 0
    Data 112 , 136 , 32 , 0 , 152 , 248 , 112 , 32 , 32 , 248 , 152 , 0
    Data 112 , 136 , 32 , 0 , 136 , 248 , 112 , 112 , 32 , 248 , 136 , 0
    '     S   A   T  -   R   E   C   I   V   E   R
    Text2:
    Data 112 , 248 , 136 , 8 , 24 , 48 , 96 , 192 , 128 , 128 , 248 , 248       '2 oben rechts
    
    Data 0 , 224 , 136 , 224 , 0 , 240 , 128 , 32 , 136 , 248 , 240 , 0
    Data 0 , 240 , 136 , 240 , 0 , 248 , 128 , 112 , 136 , 248 , 248 , 0
    Data 0 , 88 , 136 , 88 , 0 , 136 , 128 , 216 , 136 , 128 , 136 , 0
    Data 0 , 72 , 136 , 72 , 0 , 136 , 128 , 136 , 80 , 128 , 136 , 0
    Data 0 , 72 , 136 , 72 , 0 , 136 , 128 , 136 , 80 , 128 , 136 , 0
    Data 0 , 72 , 136 , 72 , 112 , 248 , 128 , 136 , 80 , 240 , 248 , 0
    Data 0 , 72 , 136 , 72 , 112 , 240 , 128 , 248 , 32 , 240 , 240 , 0
    Data 0 , 72 , 136 , 72 , 0 , 128 , 128 , 248 , 32 , 128 , 192 , 0
    Data 0 , 72 , 80 , 72 , 0 , 128 , 128 , 136 , 32 , 128 , 160 , 0
    Data 0 , 88 , 80 , 88 , 0 , 128 , 128 , 136 , 32 , 128 , 176 , 0
    Data 0 , 240 , 32 , 240 , 0 , 128 , 240 , 136 , 32 , 248 , 152 , 0
    Data 0 , 224 , 32 , 224 , 0 , 128 , 240 , 136 , 32 , 248 , 136 , 0
    '       D   V   D   -   P   L   A   Y   E   R
    Text3:
    Data 112 , 248 , 136 , 8 , 8 , 48 , 48 , 8 , 8 , 136 , 248 , 112       '3 oben rechts
    
    Data 136 , 112 , 224 , 248 , 112 , 0 , 240 , 248 , 112 , 112 , 240 , 224
    Data 136 , 32 , 240 , 248 , 112 , 0 , 248 , 248 , 112 , 112 , 248 , 240
    Data 136 , 32 , 88 , 128 , 136 , 0 , 136 , 128 , 136 , 136 , 136 , 88
    Data 136 , 32 , 72 , 128 , 136 , 0 , 136 , 128 , 128 , 136 , 136 , 72
    Data 136 , 32 , 72 , 128 , 136 , 0 , 136 , 128 , 128 , 136 , 136 , 72
    Data 136 , 32 , 72 , 240 , 136 , 112 , 248 , 240 , 128 , 136 , 248 , 72
    Data 136 , 32 , 72 , 240 , 136 , 112 , 240 , 240 , 128 , 136 , 240 , 72
    Data 136 , 32 , 72 , 128 , 136 , 0 , 192 , 128 , 128 , 136 , 192 , 72
    Data 80 , 32 , 72 , 128 , 136 , 0 , 160 , 128 , 128 , 136 , 160 , 72
    Data 80 , 32 , 88 , 128 , 136 , 0 , 176 , 128 , 136 , 136 , 176 , 88
    Data 32 , 32 , 240 , 248 , 112 , 0 , 152 , 248 , 112 , 112 , 152 , 240
    Data 32 , 112 , 224 , 248 , 112 , 0 , 136 , 248 , 112 , 112 , 136 , 224
    '     V   I   D   E   O   -   R   E   C   O   R   D
    Hier noch ein Foto.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken tv_bascom.jpg  

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Hallo,
    Ja Super !!
    Mach weiter dran !

    Aber einen Punkt verstehe ich nicht.
    ..sollte ohne Interrupts auskommen, da sonst nicht genügend Zeit für die andere Aufgaben bleibt..
    Das sehe ich genau anders rum.
    Nur wenn es im Interrupt läuft bleibt noch Zeit für andere Bascom-Aufgaben.
    Sonst bricht doch das BIld zusammen, wenn du was anderes machst.
    Oder wie meinst du das ?

    Gruß Jan

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, hast du gut hinbekommen. ich habe bei mir noch fehler drin, klappt nicht so.
    schaffst du es auch für 8mhz, oder was muss man da ändern.
    mfg pebisoft

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Hallo Jan,
    Nur wenn es im Interrupt läuft bleibt noch Zeit für andere Bascom-Aufgaben.
    Sonst bricht doch das BIld zusammen, wenn du was anderes machst.
    Kann es ja auch.
    Mein Ziel war es nur, für eine bestimmte Zeit einige vordefinierte Texte auf den Bildschirm zu bringen. Dafür ist es doch am einfachsten, ein Frame mit genau 312*64 µs zu erzeugen und es eine bestimmte Zeit anzuzeigen. Wozu sollte ich dafür einen Interrupt erzeugen.

    Hallo Peter,
    schaffst du es auch für 8mhz, oder was muss man da ändern.
    Sicher geht es auch mit 8 MHz, war aber nicht mein Ziel.
    Nimm dir mal nur den Assemblercode aus der Subroutine und lass ihn im AVR Studio Simulator laufen. (Der ist komfortabler als der in Bascom)
    Dann wirst du sehen, dass der V-Sync mit Nachtrabanten genau 5 Zeilen (320 µs) lang ist. Und dann kommen noch 307 Zeilen mit je 64 µs.
    wenn du das dann ändern willst, musst du die Pausenzeiten (r23) entsprechend anpassen. Aber Vorsicht, 1 Takt zuviel oder zuwenig reicht und das Bild läuft durch.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, habe es auf dem AVR16 mit intern 4mhz getestet und läuft stabil ohne bildwanderung. die zeilen "$prog ...." wo hast du die her, habe sie ausgeklammert und läuft trotzdem wie gehabt.
    mfg pebisoft

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Hallo,
    die zeilen "$prog ...." wo hast du die her
    die kann ich bei mir nicht finden, oder meinst du $asm ?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Hallo,
    Mein Ziel war es nur, für eine bestimmte Zeit einige vordefinierte Texte auf den Bildschirm zu bringen
    Ah so, du willst das sowieso nur eine Weile lang anzeigen,
    und dann machst du was anderes, und brauchst das Bild dann nicht mehr.
    Dann verstehe ich, was du meinst, dann brauchst du das nicht
    im Hintergrund laufen lassen.

    Gruß Jan

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Hallo Jan,
    Das ganze ist ein Videoquellen Umschalter mit RC5 und noch anderem Schnickschnack.
    Wäre ja blöd, wenn der Bildschirmtext stehen bliebe, nachdem ich den Eingang umgeschaltet habe.
    Ich will nur kurz sehen können, welche Quelle gerade aktiv ist.
    Schön wäre allerdings noch, wenn man Text in ein vorhandenes Bild blenden könnte. (z.B. Datum / Uhrzeit)
    Ich habe mich auch schon theoretisch mit dem LM 1881 beschäftigt.
    Mittels diesem kann man aus einem vorhandenem FBAS Signal den V-Sync und H-Sync als TTL Signal herausnehmen.
    Man braucht dann nur noch die Position abzählen und an geeigneter Stelle entsprechende Informationen in das Bild einfügen.
    Um den ausgehenden V und H-Sync kümmert sich der IC allein.
    Aber wie gesagt, alles noch Theorie.

  9. #9
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.366
    Vielen Dank für das schöne Beispiel.
    Meine Anwendung ist sicher noch weniger komplex, ich komme nur im Moment nicht dazu sie umzusetzen.
    Ich komme bestimmt noch mal darauf zurück.

    Manfred

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •