Hello everyone, 

Going forward on my study about VGA signal, now I could generate the sync signals (horizontal and vertical), and also play with the RGB ones. Now I can generate vertical color bars and rectangles. :)

I am still facing some problems, like to fill the entire screen area (it still shows an empty bar on the right), but I think I can solve this with a better adjust on horizontal timing.

Besides, not all kind of monitors can recognize my signal, some LCDs are not ok (no problem for CRT). I believe the solution is a better adjust on timing and/or impedance coupling.

Take a look what I got so far:

This was the first step: generate a solid stable rectangle on screen. It is white because I put all the RGB bits to HIGH, but the important was the sync signals worked very well (I think). 

The ugly/terrible picture above (the camera and my photographic skills didn't help), shows the colored vertical bars I could get from my Arduino UNO, changing the RGB bits. Actually, it would be possible to generate many more colors using some tricks or simply changing the analog levels of the RGB bits (0 to 0.7V), but I think Arduino wouldn't have speed enough on DAC. Well, for me, there is A LOT to learn yet.  

Below you can check the code, which I am not very proud of, but i works!!! :)). I think it can be useful for somebody: 

#define NOP asm("nop")
#define BLACK PORTB = B00000000;
#define BLUE PORTB = B00000001;
#define GREEN PORTB = B00000010;
#define CYAN PORTB = B00000011;
#define RED PORTB = B00000100;
#define MAGENTA PORTB = B00000101;
#define YELLOW PORTB = B00000110;
#define WHITE PORTB = B00000111;

unsigned int linecount = 1;

void setup()
{
//Set pins 5, 6 e 7 as output
// 7 - HSYNC
// 6 - VSYNC
// 10 - R
// 9 - G
// 8 - B

DDRD |= B11100000;

DDRB |= B11100111;
PORTD |= B11000000;

//set timer
TCCR2A = 0x02; // WGM22=0 + WGM21=1 + WGM20=0 = Mode2 (CTC)
TCCR2B |= (1 CS20); //
TCCR2B |= (1 CS21); // Set prescaler
TCCR2B &= ~(1 CS22); //

TCNT2 = 0; // clear counter
OCR2A = 0x0f; // set counter for comparison

TIMSK2 |= (1OCIE2A); // set interrupt by comparison
}

 

void loop()
{
do{
}while(1);

}

 

ISR(TIMER2_COMPA_vect){
PORTD &= ~(1 7);
if (++linecount == 525){ //525 lines
linecount = 1;
}
PORTD |= (1 7);

NOP;NOP;NOP;NOP;NOP;NOP;
if (linecount == 492){
PORTD &= ~(1 6);
} else {
PORTD |= (1 6);


if ((linecount >= 2) && (linecount <= 480)){

//Print a vertical rainbow on screen 
for (int j=0; j<6; j++){
BLACK;NOP;
BLUE;
BLACK;NOP;
GREEN;
BLACK;NOP;
CYAN;
BLACK;NOP;
RED;
BLACK;NOP;
MAGENTA;
BLACK;NOP;
YELLOW;
BLACK;NOP;
WHITE;
BLACK;NOP;
}
}

}

NOP; //small time adjust, it may or may not be necessary depending on your board

}

 

That's it! This was the first step for understand the basics about VGA, specially the SYNC signals. Now it's time for a better understanding about sizes and times. Also, the impedance coupling must be adjusted between the Arduino and the monitor (it could be the reason for some LCDs not understand my signal).

And more precision on timing is still possible.

Then, I will try to create some time windows for data acquiring, allowing the Arduino to get info to plot.

If, everything goes fine, maybe we can create a library for everyone use with any Arduino and any monitor, including TFTs. Too much maybe?? :)) 

Let's see what we gonna get! 

I will post every step, maybe they can help our friends here in GarageLab...

Thanks for reading this post! :)

Views: 1095

Tags: arduino, generator, signal, vga

Comment by Ryadh on April 2, 2012 at 4:10pm

Great hope that will work on my board i will try it tomorrow thanks a lot !!

Comment

You need to be a member of GarageLab (arduino, electronics, robotics, hacking) to add comments!

Join GarageLab (arduino, electronics, robotics, hacking)

Latest Activity

GarageLab posted blog posts
4 hours ago
Javier Nogueras is now a member of GarageLab (arduino, electronics, robotics, hacking)
6 hours ago
GarageLab commented on GarageLab's blog post Tutorial: Using GPS Shield as an Anti-Theft Device
"Hello Pierre, Yes, You can do it. Use a GPS module like one…"
yesterday
Amy Ciesielka posted a blog post
yesterday
Dam Srasquasz commented on GarageLab's blog post Tutorial: Using GPS Shield as an Anti-Theft Device
"@up you can buy any shield you want for example: click sending text messase is easy and…"
Tuesday
Profile IconMarek Florianczyk, Amy Ciesielka and Dam Srasquasz joined GarageLab (arduino, electronics, robotics, hacking)
Tuesday
David Braithwaite posted a discussion

Robot, motor, relay kits

Hi,I have been playing around with bots for a few years now, I have found these guys that sell a…See More
Tuesday
David Braithwaite replied to derrrick wiltshire's discussion dc motor (small 5v) reverse direction control circuit
" Hi, Check these guys out for these kits, Rk Online Store Laters "
Tuesday
Chas Stearns updated their profile
Monday
GarageLab posted a blog post

Real-life Spider-Man webshooter uses a coil gun instead of web fluid

In honor of The Amazing Spider-Man 2 opening tomorrow in Germany (among other places), German laser…See More
Apr 17
Shannon Bradley and Marcelo Rodrigues are now friends
Apr 16
Terry Renner is now a member of GarageLab (arduino, electronics, robotics, hacking)
Apr 16
Andy S posted a discussion

Arduino MEGA boolean?

Hi everyone,been banging my head against the wall a few days now.i have a small project, where i…See More
Apr 16
Bobby Marshall posted a video

SELFIE Mirror

Meet the S.E.L.F.I.E., the "The Self Enhancing Live Feed Image Engine". Find out how it works: http://istrategylabs.com/2014/04/take-an-instant-selfie-with-t...
Apr 15
GarageLab posted a blog post
Apr 15
pj jones posted a status
"Designing an Home Automation Project"
Apr 14
Profile Iconpj jones, Robert Kribel and Lars Goldschlager joined GarageLab (arduino, electronics, robotics, hacking)
Apr 14
Fontaine Pierre commented on GarageLab's blog post Tutorial: Using GPS Shield as an Anti-Theft Device
"Hi, Is it possible to make a car tracker with this GPS + GSM shield to send a message if limits…"
Apr 11
GarageLab posted a blog post
Apr 11

© 2014   Created by Marcelo Rodrigues.

Badges  |  Report an Issue  |  Terms of Service