LM1881N entegresi VGA bağlantısı

Başlatan computerboy, 30 Kasım 2020, 16:54:26

computerboy

Merhaba arkadaşlar atmega328 ile osd projesi yapmaya çalışıyorum. Analog video sinyalinin üzerine lm1881 entegresi kulanıp metin bindirip bilgisayar monitörüne vga üzerinden görüntü aktaracağım. Lm1881 entegresinden vga pinlerine gireceğim csout ve vsout pinlerine ekstradan direnç veya diyot bağlamalımıyım ? internette detaylı şema bulamadım.



OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

computerboy

Teşekkür ederim onları inceledim zaten. Aslında sormak istediğim lm1881, vga ve atmega arasında pinler direk bağlı vga dan ark oluşup atmegayı bozma ihtimali olurmu diye aklıma geliyor eski tip monitörlerde sinyal pinleri 12v sanırım.   

Carrym

#3
aynı şemayı kullanarak yaptım ama yazdırdığım text senkronize olamadı kod şu şekilde;



#include <TVout.h>
#include <fontALL.h>
#include<Wire.h>
#include "TVOlogo.h"
TVout TV;
const int MPU_addr=0x68;
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
int needle_start_x;
int needle_angle_deg;
int needle_start_y;
int needle_end_x;
int needle_end_y;
int needle_center_x= 60;
int needle_center_y= 48;
int needle_radius_big= 30;
int needle_radius_small= 30;
int zOff = 150;
int xOff = 0;
int yOff = 0;
int cSize = 50;
int view_plane = 64;
float angle = PI/60;
int minVal=265;
int maxVal=402;
double x;
double y;
double z;

unsigned char cube2d[8][2];


void setup() {



  TV.begin(_PAL,120,96);

  TV.select_font(font6x8);

  //fonts
  TV.clear_screen();
  TV.println(0,0,"Multiple fonts:");
  TV.select_font(font4x6);
  TV.println("4x6 font FONT");
  TV.select_font(font6x8);
  TV.println("6x8 font FONT");
  TV.select_font(font8x8);
  TV.println("8x8 font FONT");
  TV.select_font(font6x8);
  TV.delay(2000);
  
  TV.clear_screen();
  TV.print(9,44,"Draw Basic Shapes");
  TV.delay(2000);
  
  //circles
  TV.clear_screen();
  TV.draw_circle(TV.hres()/2,TV.vres()/2,TV.vres()/3,WHITE);
  TV.delay(500);
  TV.draw_circle(TV.hres()/2,TV.vres()/2,TV.vres()/2,WHITE,INVERT);
  TV.delay(2000);
  
  //rectangles and lines
  TV.clear_screen();
  TV.draw_rect(20,20,80,56,WHITE);
  TV.delay(500);
  TV.draw_rect(10,10,100,76,WHITE,INVERT);
  TV.delay(500);
  TV.draw_line(60,20,60,76,INVERT);
  TV.draw_line(20,48,100,48,INVERT);
  TV.delay(500);
  TV.draw_line(10,10,110,86,INVERT);
  TV.draw_line(10,86,110,10,INVERT);
  TV.delay(2000);
  
  //random cube forever.
  TV.clear_screen();
  TV.print(16,40,"Random Cube");
  TV.print(28,48,"Rotation");
  TV.delay(2000);
  TV.clear_screen();
  Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);


}


void loop() {
  Wire.beginTransmission(MPU_addr);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr,14,true);
AcX=Wire.read()<<8|Wire.read();
AcY=Wire.read()<<8|Wire.read();
AcZ=Wire.read()<<8|Wire.read();
int xAng = map(AcX,minVal,maxVal,-90,90);
int yAng = map(AcY,minVal,maxVal,-90,90);
int zAng = map(AcZ,minVal,maxVal,-90,90);
 
x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI);
y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI);
z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI);

unsigned char w,l,wb;
  int index;
  w = pgm_read_byte(TVOlogo);
  l = pgm_read_byte(TVOlogo+1);
 


  
  
  



needle_angle_deg = y;
needle_start_x = needle_radius_big * -sin(radians(needle_angle_deg))+ needle_center_x;
needle_start_y = needle_radius_big *  cos(radians(needle_angle_deg))+ needle_center_y;
needle_end_x = needle_radius_big * -sin(radians(needle_angle_deg+180))+ needle_center_x;
needle_end_y = needle_radius_big *  cos(radians(needle_angle_deg+180))+ needle_center_y;
TV.draw_line(needle_start_x,needle_start_y,needle_end_x,needle_end_y,INVERT);
TV.draw_line(0,0,0,40,INVERT);
TV.bitmap(0,y/10,TVOlogo);
delay(100);
  TV.clear_screen();
  initOverlay ();
 
}
void initOverlay() {
  TCCR1A = 0;
  // Acrive le timer1. ICES0 est mis à 0 pour detecter un front descendant sur la Pin d'entrée de capture.
  TCCR1B = _BV(CS10);

  // Active l'interruption d'entrée capture
  TIMSK1 |= _BV(ICIE1);

  // Actice l'interruption externe INT0 sur la broche pin 2 sur un front descendant.
  EIMSK = _BV(INT0);
  EICRA = _BV(ISC11);
}
// Requis pour initialiser la ligne de balayage lorsque se produit la synchronisation verticale
ISR(INT0_vect) {
  display.scanLine = 0;
}
çıkışı direkt kompozit kablosundan yaptım sizce sorun nedir yardımcı olabilirseniz sevinirim. teşekkürler.