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: 1570

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 a blog post
19 hours ago
Donnie Rose replied to Donnie Rose's discussion Building an auto-boat to keep ducks out of the pool!
"Correction, sorry.  RC receiver is not used with this set up.   Battery & motor hooks…"
yesterday
Donnie Rose posted a discussion
yesterday
Profile IconDonnie Rose and Ransona Company joined GarageLab (arduino, electronics, robotics, hacking)
yesterday
GarageLab posted a blog post
yesterday
Jim Kelley commented on GarageLab's blog post HemaVision Smart Thermal Imager Actually Tells You What that Cool (or Hot) Image Means
"This could be a valuable tool for diagnosing temperature and humidity problems in locations where…"
Thursday
Anthony Parker updated their profile
Wednesday
David Braithwaite added a discussion to the group Raspberry Pi
Tuesday
David Braithwaite joined David's group
Thumbnail

Raspberry Pi

This is a place to discuss all things Raspberry Pi.See More
Tuesday
GarageLab posted a blog post

Artificial bee brain used for vision system of a drone

The Green Brain Project is located in Sheffield, England, and it has one key focus: to simulate a…See More
Tuesday
Profile Iconabraham chemweno, Hetcher, Dan Calef and 1 more joined GarageLab (arduino, electronics, robotics, hacking)
Tuesday
Robbie McCreath commented on GarageLab's blog post Tutorial: Stepper Motor + Easy Driver + Arduino
"Hi there, ive been woking on this tutorial and it is exactly what i need, with use of the serial…"
Monday
daniel gabriel left a comment for daniel gabriel
"stop this, i know what is next to, you scammer"
Apr 10
GarageLab posted a blog post

HemaVision Smart Thermal Imager Actually Tells You What that Cool (or Hot) Image Means

HemaImaging it’s working on the HemaVision, a standalone thermal imager that will be able to give…See More
Apr 9
Profile Iconfidel, Mauro Pompetti, FRANK KWABENA and 1 more joined GarageLab (arduino, electronics, robotics, hacking)
Apr 9
Anuradha Ranasinghe is now a member of GarageLab (arduino, electronics, robotics, hacking)
Apr 8
GarageLab posted blog posts
Apr 8
Juan Luis is now a member of GarageLab (arduino, electronics, robotics, hacking)
Apr 7
Profile IconArduino Aficionado and Ilyass Renswoude joined Harold Krueger IV's group
Thumbnail

Makerspace

A group for discussing local makerspaces.See More
Apr 6
teknotellal posted a discussion

How to control 3 led via ESP8266-01?

I want to control 3 led but with ESP8266-01 I can control just 2 led. Each led has a D Flip-Flop.…See More
Apr 6

© 2015   Created by Marcelo Rodrigues.

Badges  |  Report an Issue  |  Terms of Service