logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Generowanie sygnału PAL z mikrokontrolera PIC16F84A - jak to zrobić?

centipede 28 Lip 2004 19:49 5705 37
Najlepsze odpowiedzi

Czy da się wygenerować monochromatyczny sygnał PAL/composite z mikrokontrolera PIC16F84A i gdzie znaleźć opis sygnału wizyjnego?

Tak, do obrazu mono nie potrzebujesz pełnego PAL-a koloru — wystarczy wygenerować poprawny sygnał wizyjny z synchronizacją poziomą i pionową [#765639][#766609] Najlepiej zacząć od samej synchronizacji poziomej, a dopiero potem dodać synchronizację pionową; w praktyce można robić dwa półobrazy i co około 287 linii podać dłuższy impuls pionowy przez około 20 linii (około 1,3 ms), a oba półobrazy na początek mogą być takie same [#766609] Opis standardu PAL/composite warto rozumieć przez pryzmat 625 linii, z czego około 575 jest wyświetlanych, a reszta to impulsy synchronizacji i obszary powrotu [#766510] Synchronizacja pionowa służy do utrzymania geometrii obrazu i tworzenia przeplotu; uruchamia się ją w połowie ostatniej linii nieparzystego półobrazu, aby linie półobrazów się przeplatały [#1594285][#1594431] Jako materiały do nauki wskazano też schematy gier TV na PIC/AVR oraz projekt DVM, z których można podejrzeć, jak praktycznie generować taki sygnał [#766516][#766609]
Wygenerowane przez model językowy.
REKLAMA
  • #1 765630
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    Witam, czy jest możliwe wygenerowanie sygnału Pal ze zwykłego uP (np. PIC16F84A), chodzi mi oczywiście o obraz monochromatyczny ..
    Gdzie można znaleść opis systemu PAL ??
  • REKLAMA
  • #2 765639
    tomeko
    Poziom 14  
    Posty: 97
    Pomógł: 7
    Ocena: 4
    Jeśli obraz ma być mono to po co PAL? System przecież jest od koloru.
  • #3 765816
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    to w takim razie jak cokolwiek wyświetlić na ekranie TV( mówimy o złączu typu composite ) ??
  • REKLAMA
  • #4 766510
    tomeko
    Poziom 14  
    Posty: 97
    Pomógł: 7
    Ocena: 4
    Trzeba wytowrzyć dwa półobrazy (wyświetlane w pętli) dające w sumie 625 linii, z czego 575 przypada na linie wyświetlane, 50 na impulsy synchronizacji pionowej. Każda linia zawiera impuls synchronizacji poziomej. To tak po krótce. Trzeba po prostu poczytać o sygnale wizyjnym, z czego się składa, jakie są czasy impulsów, ich poziomy itd. Ja kiedyś robiłem taki generator jeszcze na 8031 i epromie (to było jakieś 15 lat temu), jak znajdę opis to podeślę ( z tego co pamiętam był tam jakiś drobny błąd w programie,ale chodziło).
  • #5 766516
    Bielsky
    Poziom 21  
    Posty: 333
    Pomógł: 30
    Ocena: 19
    Gdzieś na elektrodzie widziałem schematy gier telewizyjnych zrobionych na pic-ach. Może to pomoże.
  • #6 766532
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    Byłbym bardzo wdzięczny ..
    Może ktoś inny ma opis sygnału wizyjnego ??
  • #7 766609
    etedio
    Poziom 24  
    Posty: 587
    Pomógł: 45
    Ocena: 13
    ach, jak ja lubie ten temat :D

    zaczne od tego, że sam sie tym baaaardzo interesuje, ale do rzeczy:

    te wszystkie standardy - 5 impulsów, przerwa, dwa impulsy, przerwa, podskoczyć, przerwa, impuls..... to mozna wbrew pozorom sobie na początku darować - TV wyświetli wiele fajnych rzeczy nawet jak uprościsz te schematy

    idź krok po kroku - najpierw sama synchronizacja horyzontalna - tu radzę looknąć na

    https://www.elektroda.pl/rtvforum/topic155875.html

    :wink:

    potem po prostu co około 287 linii (plus minus 10 - najwyżej straci synchronizacje i zaprogramujesz wtedy znowu :) ) daj długi impuls synchronizacji po jakies 20 linii (1,3ms starczy) (synchronizacja wertykalna) i to będzie prawie wszystko (!) - oba półobrazy będą takie same

    do reszty to jest wiele gier TV na PIC i AVR, idealny do nauki jest moim zdaniem projekt:

    http://www.riccibitti.com/dvm.htm

    by wiedzieć jak odseparować półobrazy i zobaczyć kilka "chwytów" przy takich projektach po prostu przeanalizuj kilka programów i za każdym razem sprawdzaj w praktyce

    wielkie pozdro i powodzenia :wink:
  • #8 1556397
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    Witam, mam nadzieję, że po roku ktoś mi pomoże, w 2004 olałem ten projekt ..
    Ale teraz się wziąłem no i nie działa .. napisałem program w asm pod AT90S2313, a hardware mam wg. :
    http://www.rickard.gunee.com/projects/video/pic/vinfo_da00.png

    
    ;*******************************************************************************
    ; Title:	PAL test
    ; Author: 	centipede
    ; Version:	1.0.0
    ; Date:		2005-06-06
    ;*******************************************************************************
    .include "2313def.inc"
    
    ;Define regs used
    .def	temp			=R18
    
    ;#############################################################
    ;#              RESET                                        #
    ;#############################################################
    .ORG	0x00
    		rjmp	RESET				;Reset Handle
    		rjmp	RESET				;Reset Handle
    		rjmp	RESET				;Reset Handle
    		rjmp	RESET				;Reset Handle
    .ORG	0x0B	
    RESET:
    		cli					;Disable interrupts
    ;#############################################################
    ;#              INIT                                         #
    ;#############################################################
    
    		;INIT STACKPOINTER
    		ldi 	temp, low(RAMEND)
    		out 	SPL, temp
    
    		;INIT REGISTERS
    		ldi	R16, 0x7F
    		ldi	R17, 0xFF
    
    
    		;INIT PORT B
    		out	DDRB, R17
    
    
    		;INIT PORT D
    		out	DDRD, R16
    		
    		rjmp	Main
    ;#############################################################
    ;#              DELAY                                        #
    ;#############################################################
    delay:
    	dec   R19
    	nop
    	brne  delay
    	nop
    	ret
    ;#############################################################
    ;#              MAIN                                         #
    ;#############################################################
    ;***** Program Execution Starts Here **************************************
    
    Main:
    	cbi	PORTB, 0
    	cbi	PORTD, 6
    	ldi	R19, 0x01	;4us delay
    	rcall	delay
    
    	cbi	PORTB, 0
    	sbi	PORTD, 6
    	ldi	R19, 0x05	;8us delay
    	rcall	delay
    
    	cbi	PORTB, 0
    	sbi	PORTD, 6
    	ldi	R19, 0x08	;11us delay
    	rcall	delay
    
    	cbi	PORTB, 0
    	sbi	PORTD, 6
    	ldi	R19, 0x07	;10us delay
    	rcall	delay
    
    	sbi	PORTB, 0
    	sbi	PORTD, 6
    	ldi	R19, 0x07	;10us delay
    	rcall	delay
    
    	cbi	PORTB, 0
    	sbi	PORTD, 6
    	ldi	R19, 0x07	;10us delay
    	rcall	delay
    
    	cbi	PORTB, 0
    	sbi	PORTD, 6
    	ldi	R19, 0x07	;11us delay
    	nop
    	nop
    	rcall	delay
    
    	rjmp	Main
    ;#############################################################
    ;#              END                                          #
    ;#############################################################
    

    sprawdzałem w VMLAB, ramka linii ma dokładnie 64us ..
    Pozdrawiam ..
  • #9 1560314
    etedio
    Poziom 24  
    Posty: 587
    Pomógł: 45
    Ocena: 13
    Hmmm, w assemblerze AVR mistrzem nie jestem, ale nic złego nie znalazłem.
    Co to znaczy "nie działa"? Czy nie trzyma synchronizacji, czy w ogóle coś widać na ekranie? W symulacji i w rzeczywistości kwarce są takie same? Może przyda się dokładniejsze dobranie wartości tych rezystorów?
  • REKLAMA
  • #10 1561169
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    Eee .. to znaczy tak:
    zamiast rezystorów mam potencjometry montarzowe ustawione na:
    450R i 900R,
    zasilanie to jakieś 4,85 V

    no a program nie ma synchronizacji pionowej, więc nie wiem, jak może ją gubić ;), na ekranie nic się nie wyświetla ..
    Czy jest możliwość, że nowsze telewizory potrzebują tej synchronizacji ??
    Ja próbowałem na dwóch TV i nie działa ..
    Nie mam pojęcia co jest nie tak, próbowałem już wielu rzeczy ..
    Aha - rezonatory są identyczne ..

    Pozdrawiam ..
  • #11 1561196
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Spróbuj na nowocześniejszym AVR, AT90S2313 ma prawo nie wyrabiać się z utrzymywaniem napieć w stanie wysokim przy takim obciążeniu, lub zastosuj bufory stanów logicznych.
  • #13 1561653
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    centipede napisał:
    Light'I
    Szczerze mówiąc to co piszesz zdaje mi się być fikcją, zerknij na:
    http://www.serasidis.gr/circuits/colour_bar_gen/colour_bar_gen.htm
    tam jest o wiele więcej wyciągnięte z tego uC ..
    A charakterystyki w pdfie widziałeś, że wypisujesz takie widzimisię ? Pod podanym linkiem nie ma takich obciażeń stanu wysokiego, jak w twoim projekcie... 5V/(450+75)Ω=9,5mA Przy takim prądzie napięcie już nie bedzie wynosiło 5V, a około 3,5V. Nie wyssałem tego z palca, zerknij na s. 81 DOC0839.PDF... ;) Dopiero w nowszych AVR możesz się tak samo bawic jak z PIC-ami, tutaj przy prądzie 10mA napięcie będzie wynosiło ok. 4,75V - s.219, Fig.121 doc2512.pdf (ATmega8515).
  • #14 1561742
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    Przepraszam, zwracam honor, miałeś rację,
    zastosuję bufor, jakiś z 74XXX, jeszcze nie wiem jaki, jutro poszperam i coś znajdę ..
    dzięki ..
  • #15 1562249
    Kelas
    Poziom 18  
    Posty: 371
    Pomógł: 12
    Ocena: 4
    Sledze temat i bardzo mnei zainteresowal. Czy zeby w ogole cos wyswietlic, trzeba sie dokladnie trzymac czasow?

    Mam tez stary monitor, i zastanawia mnie czy transmisja VGA jest w pelni cyfrowa.. czy tak?

    Co do buforow to mozesz chyba uzyc 74xx07. Seria AC bylaby chyba odpowiednia, ale nie wiem jakie wymagania stawia generowanie sygnalu wiec nie jestem pewien.
  • REKLAMA
  • #16 1562294
    centipede
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 4
    Powinno trzymać się czasów, zdaje mi się, że granica błędu to coś około 1 us na ramkę pojedynczej linii ..

    VGA jest w pełni analogowe, są przecież przejściówki VGA -> SCART zrobione na paru elementach. Złączem cyfrowym (a właściwie cyfrowo-analogowym) w kompie jest:
    DVI

    Czemu z serii AC, nie znam takiej, czy nie chodziło Ci przypadkiem o HC ??

    Dokładniej na Twoje pytanie odnośnie czasów odpowiem w piątkek, bo teraz mam kupę nauki w szkole, a w piątek poeksperymentuję ;)

    Pozdrawiam ..
  • #17 1562964
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    TTL ...07 to raczej niechętnie, bo to jest wyjście typu otwarty kolektor, sytuacja jeszcze gorsza, niż z gołym AT90S2313. Prościej dać 74HC04, lub 74HC14 (invertery), po 2-3 bramki równolegle (silniejszy sygnał na wyjściu) i w programie zanegować oczekiwany stan wyjścia.
  • #18 1564110
    Kelas
    Poziom 18  
    Posty: 371
    Pomógł: 12
    Ocena: 4
    Faktycznie.. 74..07 to uklad typu otwarty kolektor, zapomnialem :)

    Negacja przez mikroprocesor trwa jakis czas, a moznaby przed taka baterie inwerterow dac jedna bramke, co uproscilo by program.

    edit:
    Centipede: nie, mialem na mysli AC, jest szybsza od HC a takze bardziej wydajna pradowo. Lepiej byloby jeszcze chyba zastosowac serie ACT.
  • #19 1564155
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Kelas napisał:
    Negacja przez mikroprocesor trwa jakis czas, a moznaby przed taka baterie inwerterow dac jedna bramke, co uproscilo by program.
    A ja sobie podyskutuję i podoczepiam... ;) :
    1. Wszystko zależy od algorytmu, np. zamiast sbi, dajemy cbi i niczego to czasowo nie opóźni, bo czas wykonania obu rozkazów bedzie ten sam...
    2. "Bateria inwerterów" to większe opóźnienie, niż jeden negator... ;)
  • #20 1564360
    Kelas
    Poziom 18  
    Posty: 371
    Pomógł: 12
    Ocena: 4
    Hm.. napewno przy kilku rownolegle polaczonych bramkach czas propagacji jest wiekszy?
    Zgadzam sie ze przy polaczonych szeregowo.. ale rownolegle?

    Czasy przelaczania serii ACT to max 8ns.
    Nadal sadze ze tak bedzie szybciej:
    http://img298.echo.cx/img298/2562/schem12cw.jpg
  • #21 1564409
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Wywalając 2 bramki (te szeregowo podłączone) i zmieniając lekko treść programu bedzie jeszcze szybciej... cbi - zeruj bit, sbi - ustaw bit... ;)
  • #22 1564436
    Kelas
    Poziom 18  
    Posty: 371
    Pomógł: 12
    Ocena: 4
    Nie mam pojecia o pic`ach ale skoro tak mowisz to moja koncepcja odpada.
    Ale w zamian mozna zastosowac trzy bramki rownolegle. Wydajnosc pradowa wzrosnie a przelaczanie nie potrwa wiecej niz 8ns.
  • #23 1564455
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Cały czas mam na myśli AT90S2313, a więc asembler od AVR - to, w czym zamieścił listing centipede. Wszystko OK, ale z ilością bramek równolegle też nie można przesadzić, każde wejscie stanowi jakieś obciążenie statyczne i dynamiczne. Zresztą chyba już odskoczyliśmy od tematu, ewentualne opóźnienia wprowadzane przez bramki są w ns, a sygnał CV rozpatrywany jest w µs, ew. w setkach ns. Poza tym, jeżeli sygnał bedzie opóźniony w różnych momentach o taki sam odcinek czasu, to nic nie zmieni w jego jakości, po prostu pojawi się ułamek sekundy później i nic wiecej... ;)
  • #24 1564617
    Kelas
    Poziom 18  
    Posty: 371
    Pomógł: 12
    Ocena: 4
    Tyle samo wiem o AVR`ach co o PIC`ach wiec nie rozrozniam ich asemblerow.. niewazne.

    No tak.. czasy przesuniec beda minimalne rozne i zalezne tylko od temperatury.
    Ktos wczesniej prosil, o jakis opis sygnalu PAL. Troszke znalazlem, ale najchetniej zobaczylbym przebieg sygnalu jednej linii.
  • #25 1567916
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 159
    A gdzie w programie centipede jest licznik linii i tworzenie synchronizacji pionowej?
    Coś mi sie widzi że nie ma - jest tylko generacja linii a brak ramki.
    Pozdr. N.
  • #27 1577428
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Kelas napisał:
    Mam jeszcze jedno pytanie.
    Czy mozna zastosowac taka konfiguracje ( http://www.rickard.gunee.com/projects/video/pic/vinfo_da00.png ) w przypadku portow z wewnetrznym pull-upem ('51)?
    Tylko przez bufor, napięcia są przełączane na tym rysunku od 0 do 5V przy pełnym obciążeniu rezystancją. Jak podepniesz taki rezystor na pullupa do GND w '51, to nie bedzie nawet 2V.
    ---------------------
    Obciążalność owszem 20 mA w '51, ale tylko od strony GND. Weź miernik w garść, będzie mniej pytań... ;)
  • #28 1577561
    Kelas
    Poziom 18  
    Posty: 371
    Pomógł: 12
    Ocena: 4
    Hm.. pull-upy sa przeciez do Vcc, ale to niewazne. Czyli musialbym wykorzystac port bez wewnwetrznych podciagniec, wtedy moglbym obyc sie bez bufora? Dodam ze obciazalnosc portow to ok 20mA.
  • #29 1591433
    Kelas
    Poziom 18  
    Posty: 371
    Pomógł: 12
    Ocena: 4
    No.. costam poskladalem ale niestety nic nie moge wyswietlic na ekranie.
    Nizej program ktorym probuje to zrobic:
    Hardware wg. http://www.rickard.gunee.com/projects/video/pic/vinfo_da00.png
    Procek to at89c51 @12MHz wiec jeden cykl trwa 1us.
    edit:
    Zapomnialem dodac ze w zalozeniu ekran powinien podzielic sie mniejwiecej na polowe (czarna i biala) a w efekcie uzyskuje cos jakby fakture blachy ryflowanej :)

    
    tv		equ P2
    black		equ 1h
    white		equ 3h
    sync		equ 0h
    
    
    org 00h
    
    main:
    mov tv, sync	;sync lvl (2us) 
    nop
    nop		;2us delay
    ;*****4us poziomu sync******
    mov tv, black	;black lvl (2us)
    nop
    nop
    nop
    nop
    nop
    nop		;6us delay 
    ;*****8us poziomu czarnego******
    mov tv, white   ;white lvl (2us)
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop   		;24us delay
    ;*****26us poziomu bialego******
    mov tv, black   ;black lvl (2us)
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop		;22us delay	
    sjmp main	;skok do main (2us)
    ;*****26us poziomu czarnego******
    end
    
  • #30 1592530
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 134
    Kelas napisał:

    
    tv		equ P2
    black		equ 1h
    white		equ 3h
    sync		equ 0h
    
    
    org 00h
    
    main:
    mov tv, sync	;sync lvl (2us) 
    nop
    nop		;2us delay
    ;*****4us poziomu sync******
    mov tv, black	;black lvl (2us)
    nop
    nop
    nop
    nop
    nop
    nop		;6us delay 
    ;*****8us poziomu czarnego******
    mov tv, white   ;white lvl (2us)
    
    (...)
    
    nop		;22us delay	
    sjmp main	;skok do main (2us)
    ;*****26us poziomu czarnego******
    end
    


    Na port P2 zapisujesz zawartości komórek pamięci 00h, 01h i 03h, czyli zawartość rejestrów R0, R1 i R3, a powinieneś zapisywać tam konkretne wartości, więc zamiast np:
    mov tv, white

    zrób:
    mov tv, #white

    i powinno ruszyć :), podobnie z resztą.

    I zapamiętać: ;)
    MOV adres, symbol ; zapisuje zawartość komórki pamięci o adresie symbol do komórki o adresie adres

    MOV adres, #symbol ; zapisuje wartość symbol do komórki o adresie adres

    Nie sprawdzałem, czy program sam w sobie jest poprawny, ale to na pewno był błąd, który skutecznie uniemożliwiał wyświetlanie.

Podsumowanie tematu

✨ Dyskusja dotyczy możliwości generowania sygnału PAL monochromatycznego z mikrokontrolera, np. PIC16F84A, oraz problemów z synchronizacją i poprawnym wyświetlaniem obrazu na telewizorze przez złącze composite. Omówiono podstawy sygnału PAL, w tym konieczność generowania dwóch półobrazów (625 linii, z czego 575 to linie wyświetlane, a 50 to impulsy synchronizacji pionowej) oraz znaczenie impulsów synchronizacji poziomej i pionowej dla stabilności obrazu. Poruszono kwestie techniczne dotyczące implementacji sygnału w asemblerze na mikrokontrolerach AVR (AT90S2313, AT89C51) i PIC, w tym problemy z obciążeniem portów, konieczność stosowania buforów logicznych (np. układy 74HC04, 74HC14) dla poprawnego poziomu napięć sygnału oraz precyzję czasową impulsów synchronizacji (błąd rzędu mikrosekund). Wskazano na błędy w kodzie asemblera (np. użycie niepoprawnej składni MOV) oraz na potrzebę implementacji licznika linii do generacji synchronizacji pionowej. Dyskutowano także o ograniczeniach rozdzielczości pionowej i poziomej sygnału PAL, wpływie synchronizacji pionowej na geometrię obrazu oraz o optycznych złudzeniach przy ocenie proporcji wyświetlanego obrazu. Podano linki do projektów i opisów sygnału wizyjnego oraz przykładów generowania sygnału video na mikrokontrolerach. Na koniec pojawiło się pytanie o wymaganą wartość napięcia impulsu synchronizacji (np. -0,3 V) i czy można go zastąpić 0 V.
Wygenerowane przez model językowy.
REKLAMA