Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Generovani VGA signalu

Zdravim

Potreboval bych od vas pomoc s mou maturitni praci ktera je na tema generovani VGA signalu.
Bude to pomoci mikroprocessoru ATmega88 v jazyce C

nechcu od vas aby jste za mne psali program jenom jestli by jste mi neposlali odkazy na nejakou literaturu ohledne VGA signalu
je jich stovky na googlu nevim kterou vybrat nemusi byt v cestine i kdyz by to s vyhodou :)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
tak jsem nejak postoupil a mam dotaz jestli mi na to casovani bude stacit <util/delay.h> nekde jse…
Boboo 30.11.2013 14:34
Boboo
Ja osobne by som bud nastavil casovac na HW generovanie HSYNC frekvencie (nastavis to ako periodicke…
MM.. 30.11.2013 17:56
MM..
BTW. za predpokladu ze sa pixel clock blizi uC clocku, napr. ak je pixel clock vyssi jak desatina uC…
MM.. 30.11.2013 18:34
MM..
animaci nepotrebuju. jenom barevne pruhy zatim je pro mne dulezite co musim stihnout do 12 prosince…
Boboo 30.11.2013 18:43
Boboo
Este nieco, tie RGB by si mal nastavit naraz, vsetky 3 vystupy jednym pristupom na I/O register. Leb…
MM.. 30.11.2013 21:10
MM..
dekuju zatim za tvou pomoc velmi si mi pomohl precetl jsem si cely ten clanek a po par konzulatci s…
Boboo 10.12.2013 15:27
Boboo
vsetko to mas nakreslene aj s presnymi hodnotami (zaujima ta C a E u riadku, a Q a S u VSYNC) na tom…
MM.. 10.12.2013 16:54
MM..
takze 1. nastrel programu bych mel problem je v tom ze 3-5 pixelu jsou posunuty to bude nejspis kvul… nový
Boboo 12.12.2013 15:49
Boboo
nechapem co mas kde jak posunute ale to ze musis ratat s dobou vykonavania kazdej instrukcie som uz… nový
MM.. 12.12.2013 18:01
MM..
lamu si hlavu nad posledni veci a nemam tuseni jak udelat vodorovny pruh nema nekdo nejaky tip ? nový
Boboo 27.01.2014 23:54
Boboo
Vidím céčko, tak zkusím tipnout.. Pomocí počítadla řádků? Že bys počítal řádky a třeba dal podmínku,… nový
Niko Bellic 28.01.2014 00:39
Niko Bellic
ale jo tipnul si spravne stacilo X=480 rozdelit po dvou na 240 a v kazdem zmenit barvu diky moc. je… poslední
Boboo 28.01.2014 12:06
Boboo

tak jsem nejak postoupil a mam dotaz jestli mi na to casovani bude stacit

<util/delay.h>

nekde jsem cetl ze to pujde ale bude obraz zvlneny nekde ze to nepujde vubec ? jak to teda je ?

Ja osobne by som bud nastavil casovac na HW generovanie HSYNC frekvencie (nastavis to ako periodicke PWM a priamo na HSYNC vystup), a potom pixely generoval tak ze by som v slucke cital hodnotu casovaca a pri urcitej hodnote zmenil RGB vystupy. Sucasne by som pocital pocet HSYNC a po patricnom pocte by som generoval VSYNC. Trvanie VSYNC je presny pocet HSYNC.

Druha moznost je nastavit si HW casovac na generovanie IRQ pre kazdy pixel, za predpokladu ze uC bezi na dostatocnej frekvencii aby to stihal. A v IRQ handleri generoval R,G,B, stavy a po urcitom pocte pixelov (v IRQ handleri si ratas pocet pixelov) generoval HSYNC, a po urcitom pocte HSYNCov generoval VSYNC.
Generovat R,G,B, stavy musis velmi optimalne (co najmenej instrukcii), ptz pixel clock je spravidla dost vysoky (ked chces len pruhy tak to mas trochu ulahcene ale na optimalnost treba mysliet).

Tymito uvahami si mal zacat uplne na zaciatku, az potom sa robi schema napr. aby si vystup HSYNC dal na spravny vystup ktory moze byt PWM apod.

Tieto dve metody su podla mna normalne (ta druha je lepsia - presnejsia). Cokolvek ostatne by bolo podla mna totoalna polonefukcna sracka a keby som bol Prof. tak by som nejake delaye neakceptoval.

BTW. za predpokladu ze sa pixel clock blizi uC clocku, napr. ak je pixel clock vyssi jak desatina uC clocku, tak vyssieuvedene sposoby su problem (uC to nestiha), tak je akceptovatelne aj casovanie poctom vykonanych instrukcii. uC vykonava instrukcie v pevne stanovenom pocte clock cyklov, je to v datasheete (pocet cyklov moze zavisiet od instrukcie). Takze ak urobis vystup R,G,B, tak ze je vzdy na stejny pocet instrukcii t.j. stejny pocet clock cyklov (t.j. nemas tam ziadne if a skoky ktore by zaviseli od hodnot farieb, ale mas predpripravene hodnoty kdesi v RAM, a len ich ladujes na vystup, pomocou indexu do nejakeho pola) tak potom je to casovanie vykonanymi instrukciami velmi presne a je pouzitelne. Nic sa potom nebude vlnit.
Ak su tie tvoje delaye deterministicke (trvaju vzdy presny pocet cyklov) tak mozes pouzit aj delaye, ale za normalnych okolnosti su delaye v tomto pripade samozrejme len na skodu, ptz predpokald bol predsa ze uC nestiha.
No a predpoklad v tomto pripade je aj ten ze vsetky IRQ musia byt zakazane samozrejme, inac to casovanie nebude presne a pixely budu skakat po obrazovke sem a tam.

Menit data v RAM (ak chces animaciu apod) si mozes potom pocas HSYNC a VSYNC, tam sa da pouzit potom HW casovac a robit nieco ine pocas sync signalov.

animaci nepotrebuju. jenom barevne pruhy zatim je pro mne dulezite co musim stihnout do 12 prosince aby monitor zjistil ze v ze ma zobrazovat ve VGA tj trefit tu Frekvenci +/- 60Hz takze v case pro zapis RGB dat necham momentalne prazdny. jde o to ze jsem pres ty Citace/casovace nebyl moc zbehly ale asi mas pravdu bude to treba dostudovat.
zitra se pustim do toho at mam aspon uz nejaky nastrel zatim diky za tvuj cas

dekuju zatim za tvou pomoc velmi si mi pomohl precetl jsem si cely ten clanek a po par konzulatci s ucitelem mam v tom sice jasno ale mam jeste par dotazu

1.Zacnina se s HSYNC to vim ale nevim jestli po zapisu posledniho radku je nejaka jina prodleva nez ta bezna mezi radky
2.Nekde jsem se jeste docetl ze pry sice rozliseni je 640*480 ale jsou tam tzv skryte pixely ktere se sice nevykreslujou ale musim je do programu zapsat (klidne jako prazdne misto)
3. do VSYNC zapisuju data Log. 0

mohl by jsi mi jeste s temi 2. problemy pomoct ?
dekuju moc za tvuj cas

vsetko to mas nakreslene aj s presnymi hodnotami (zaujima ta C a E u riadku, a Q a S u VSYNC) na tom linku co som dal uplne v prvej odpovedi.

... hodnoty v ms si prepocitaj na pocet pixelov resp. riadkov podla rozlisenia napr. z prveho stlpca, z toho sa zas nestriela.

P.S: sync rob obe negativne (t.j. aktivne v log.0) ptz robis relativne pomale rozlisenie (frekvenciou ekvivalent 640x480 60Hz apod).

takze 1. nastrel programu bych mel
problem je v tom ze 3-5 pixelu jsou posunuty to bude nejspis kvuli doby na zpracovani instrukci (?) .

#include <avr/io.h>
#define F_CPU 20000000 // 20 MHz
#include <util/delay.h>

// PB4 = VSYNC

uint16_t x=0  ;   //Promenna x (8 bit cislo) 

int main()
{
	DDRB = (1<<PB4) + (1<<PB2);
	PORTB = (1<<PB4) + (1<<PB2);
	DDRC = 0b00000111;	

	while(1)
	{
		// viditelná oblast
		x = 480;
		while(x--)
		{
			// vykreslení jednoho řádku
			PORTB = (1<<PB4) + (0<<PB2);	
			_delay_us(3.8);
			PORTB = (1<<PB4) + (1<<PB2);	
			_delay_us(1.9);

			PORTC=0b00000111;
			_delay_us(20);
			PORTC=0b00000101;
			_delay_us(5.4);
			PORTC=0b00000000;


			_delay_us(0.6);


		}

		// neviditelné řádky
		x=10;
		while(x--)
		{
			// vykreslení jednoho řádku
			PORTB = (1<<PB4) + (0<<PB2);	
			_delay_us(3.8);
			PORTB = (1<<PB4) + (1<<PB2);	
			_delay_us(1.9);

			_delay_us(25.4);

			_delay_us(0.6);

		}

		// vertikální synchronizace
		x=2;
		PORTB = (0<<PB4) + (1<<PB2);
		while(x--)
		{
			// vykreslení jednoho řádku
			PORTB = (0<<PB4) + (0<<PB2);	
			_delay_us(3.8);
			PORTB = (0<<PB4) + (1<<PB2);	
			_delay_us(1.9);
			
			_delay_us(25.4);

			_delay_us(0.6);
		
		}

		// neviditelné řádky
		x=33;
		while(x--)
		{
			// vykreslení jednoho řádku

lamu si hlavu nad posledni veci a nemam tuseni jak udelat vodorovny pruh nema nekdo nejaky tip ?

ale jo tipnul si spravne stacilo X=480 rozdelit po dvou na 240 a v kazdem zmenit barvu diky moc.

jeste jedna posledni vec ze to obcas problikne ale to jenom na mojem monitoru doma kdyz to skusim jinde funguje to normalne.muzu to nejak ovlivnit nebo je to kvuli elektroniky monitoru a nepresnosti mojeho signalu ? (doba trvani prikazu a nepresne casovani)

Zpět do poradny Odpovědět na původní otázku Nahoru