Fórum témák

» Több friss téma
Fórum » OSD célkereszt
 
Témaindító: nagyg80, idő: Dec 29, 2009
Témakörök:
Lapozás: OK   1 / 1
(#) nagyg80 hozzászólása Dec 29, 2009 /
 
Sziasztok!

Egy OSD célkeresztett kellene csináljak speciális felhasználásra,de sehol nem találtam megfelelő megoldást.
Adott egy 640*480 pixel felbontású lcd kijelző ami kap egy külső PAL analóg videó jelet.Ezen a kijelzőn kellene megjelenítenem egy piros célkeresztet ami lehet akár csak egy sima + is.Eddig nem is lenne nagy gond,mert számtalan megoldás kering a neten. pl: Bővebben: Link Ami igazándiból a problémát okozza az az,hogy ezt a keresztet 1 pixel pontosággal mozgatni kell és az általam fellelt kütyük csak karakter szinten voltak képesek a mozgatásra plusz az elektronikának rá kell férnie egy cirka 5*5 centis panelre.

Ebben kérném a segítségeteket.

üdv.:Nagyg
(#) pici válasza nagyg80 hozzászólására (») Dec 29, 2009 / 4
 
A linken amit irtál, ott a megoldás.
Át lehet írni full szálkeresztre a forrást, de ha csak egy + jelet mozgatsz, mint a videón is mozgatják a betűket, akkor is megfelelő.
Persze a gond lehet a színnel (nem piros). Mivel az OSD úgy működik, hogy a megfelelő időpontban fel vagy lehúzza a jelet (feket vagy fehér)
TV-n jól is kezelhető, de LCD-n már gond lehet.
Mivel a PAL analóg jel nem natív 640x480, így nem tudod pixelenként mozgatni...
(#) nagyg80 válasza pici hozzászólására (») Jan 26, 2010 /
 
köszi a választ.majd megpróbálok ezen a vonalon mozogni
(#) krnl hozzászólása Márc 5, 2010 /
 
Sziasztok, hasonlo OSD jellegu kerdesem lenne:

ha a monitor nem kap jelet, eloszor kikapcsolja a hattervilagitast, majd visszakapcsolja nehany masodpercre es kiirja hogy "no signal".

Azt kell megoldanom, hogy ne kapcsoljon vissza a hattervilagitas (es ne jelenjen meg a szoveg, de ha nincs hattervilagitas ez nem fontos). A cel, hogyha nem kap jelet, egybol menjen el a hattervilagitas es ne jojjon vissza.

Van otletetek?

Koszi, krnl
(#) pici hozzászólása Feb 28, 2012 /
 
Ha nem is szálkereszt, de egy OSD-s project
40" LED TV-n jól néz ki élőben.
(#) vzoole válasza pici hozzászólására (») Feb 29, 2012 /
 
Grat...
Szerintem én már sose fejezem be a célkereszt megvalósítását.
(#) pici válasza vzoole hozzászólására (») Márc 1, 2012 /
 
Ha nincs rá szükséged, akkor hagyd, van más szép project is.
Ha pedig nem hagy nyugodni, akkor azért elég hamar össze lehet rakni.
De akkor már érdemes VGA porton bizgálni a cuccot, szerintem könyebb is, mint AV-n 640x480 VGA-t.
(#) mzozo95 hozzászólása Aug 27, 2012 /
 
HI!
nem találtam más OSD-s tipokot, így ide legkézenfekvőbb írnom.

Adott egy rca jel(420 soros kamera képe), és én szeretném, ha erre a képre ki tudnám írni az adc által mért értékeket.

Valaki tudna egy kapcsolást, és proogramot (esetleg cikket) ajánlani avr-re minél kevesebb alkatrésszel? Fontos lenne, hogy Magyarországon is beszerezhetőek legyenek, mert pl a MAX7456 -ot nem találtam meg egy magyar boltban sem..

Üdv.: Zoltán
(#) GPeti1977 válasza mzozo95 hozzászólására (») Aug 28, 2012 /
 
Itt egy hasonló ami kell:
http://www.rcgroups.com/forums/showthread.php?t=1473207

LM1881 szinkronjel leválaszt, int1, int0 lábakra megszakítást generál a szinkronjel, és az spi port mosi lába feliratozza a képernyőt, Aruino-ban íródott ha megérted át tudod írni.

MAX7456-ot a Sparkfun-tól vehetsz breakout borddal.
Van mintaprogram hozzá, illetve Visual basic-ben írtam egy karakterfeltöltő programot, ami a karakter szerkesztő által generált .mcm file-t tölti fel a soros porton egy avr- segítségével, így nem kell a hardvert megvenni a Maximtól.
(#) mzozo95 válasza GPeti1977 hozzászólására (») Aug 28, 2012 /
 
Azta..., ez az arduino-s dolog átírása avr re nekem kicsit magas...
Úgylátszik nekem, mezei avr-esnek marad a sparkfun max7456 board... Valaki rendelt már a sparkfuntól MO-ra? Hogyan megy a redelés menete, és a fizetési mód? Mennyi idő alatt jön meg?
(#) pici válasza mzozo95 hozzászólására (») Aug 28, 2012 /
 
Arduino is AVR
Az LM1881-el jobban jársz. Lomiban kapható és olcsó.
Én is ilyet használok atmega88 vagy atmega168-al.
Kép csatolva
(#) mzozo95 válasza pici hozzászólására (») Aug 28, 2012 /
 
Az lm1881 tényleg olcsó és nálunk is lehet kapni..

Találtam egy érdekes cikket: Bővebben: Link

Csak még nem igazán értem, hogy mikor generál interrutot az lm1882... Minden sor végén vagy mikor? És a TV képernyőjét akkor soronként tölti fel ez az rca adatvonal? Sajnos még az alap dolgokkal sem vagyok tisztában... pl a tv honnan tudja hogy ez a kép bal felső sarka, vagy jobb alja?
És a betűket hogy lehet kirajzolni? Soronként, pixelenként? Tehát az arduinos projektben ezért van annyi adat?(minden betű binárisan leírva).
Arra már rájöttem, ha felhúzza a jelet az avr, akkor fehér lesz az adott képpont, ha lehúzza akkor fekete...
(#) GPeti1977 válasza mzozo95 hozzászólására (») Aug 28, 2012 /
 
Minden sor elején az egyik interrupt, minden félképváltáskor a másik interrupt, ez után számolja a sorokat, a páros páratlan nincs megkülönböztetve, így fele a felbontás (pal 576/2 ntsc 480/2)
Ha L szint nem fekete mert ki van diódázva, egy másik láb L szintre húzásával ellenálláson keresztül lehet sötét hátteret csinálni.
Ebben van +-1 pixel jitter, illetve nem lehet fekete keretet rajzolni, a MAX IC vel nincs jitter, van fekete és fehér szín is.
A sparkfun regisztrálni kell és paypal keresztül lehet fizetni, 2 hét és megérkezik a csomag.

Van egy egyszerűsített változatom ez csak két analóg értéket ír ki. Később felteszem a kódot.

Még lm1181 szynkron leválasztó sem kell mert egy rc kapcsolással az avr komparátorával meg egy timer modullal lehet detektálni a két szinkronjelet.
(#) mzozo95 válasza GPeti1977 hozzászólására (») Aug 28, 2012 /
 
Hűű, a kód nagyon jó lenne, karakterekkel iratsz ki 2 értéket, amit az adc-ről olvasol be? Pont ilyen kell nekem(majd testre szabom a kiírást.. )
Majd valami kapcsolási rajz szerűséget is tudnál feltenni?

PICI, a te megoldásod is érdekelne!

Am nem gondoltatok arra, hogy egy cikket írni erről ide a fórumra? Sztem nagyon jó téma az OSD, és ha tényleg ilyen olcsón meg lehet csinálni, sokakat érdekelne is...
(#) sargarigo válasza mzozo95 hozzászólására (») Aug 28, 2012 /
 
Az biztos!
Többek között engem is, ugyanilyen célból!
(#) GPeti1977 válasza mzozo95 hozzászólására (») Aug 28, 2012 /
 
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include <avr/delay.h>
  4. //#define offset 0
  5. #define current_cal 0.5234
  6.  
  7. #define little_delay _delay_loop_1(13);
  8. int current_num=0;
  9. int buttext[10] = {'T','V','V','E','R','S','S','B','A','T'};
  10.  
  11. // Buffer to store the bytes temporarely.
  12. unsigned char buffer[10];
  13. int a=0;
  14.  
  15. // Standard integers to use with for/while loops
  16. int i=0;
  17. int k=0;
  18.  
  19. // Count linenumber;
  20. int line = 0;
  21.  
  22. // When writing text/numbers, used to store the linecount of the letter/number  
  23. int temp =0;
  24.  
  25. int loopcount=0;
  26. int loopcount2=0;
  27.  
  28. int current=0;
  29. unsigned char currentr[] = {3,3,3,3,3};
  30. int currentRAW=0;
  31. long mah =0;
  32. int mahtemp=0;
  33. unsigned char mahr[]={3,3,3,3,3,3};
  34. int w;
  35.  
  36.  int ADCreal=0;
  37.  int rssi=0;
  38.  
  39. void setup () {
  40.  
  41.  pinMode(6,INPUT);  // Analog comparator AIN0
  42.  pinMode(7,INPUT);  // Analog comparator AIN1
  43.  
  44.  // Test pin
  45.  pinMode(4,OUTPUT);
  46.  
  47.  
  48. // Init SPI output (will just set all as output)
  49.   pinMode(10,OUTPUT);
  50.   pinMode(11,OUTPUT);  
  51.   pinMode(12,OUTPUT);
  52.   pinMode(13,OUTPUT);
  53.  
  54. // Set ADC's as input
  55.   pinMode(5,INPUT);
  56.   pinMode(4,INPUT);
  57.   pinMode(3,INPUT);
  58.   pinMode(2,INPUT);
  59.   pinMode(1,INPUT);
  60.  
  61.  
  62. // Set SPI;  
  63.   SPCR =
  64.   (1<<SPE) | //Enable SPI
  65.   (1<<MSTR)| // Set as master
  66.   (0<<SPR1)| // Max speed
  67.   (0<<SPR0)| // Max speed
  68.   (1<<CPOL)| // We dont want it to idle high
  69.   (1<<CPHA);
  70.  
  71.   SPSR = (1<<SPI2X); // SPI double speed - we want 8 mhz output.
  72.   SPDR = 0;
  73. // Disable interrupts - necessary when using Arduino ide to avoid default
  74. // interrupts used for the delay(), millis() etc.
  75. TIMSK0=0;
  76. TIMSK1=0;
  77. TIMSK2=0;
  78.  attachInterrupt(0,detectline,FALLING);
  79.  attachInterrupt(1,detectframe,RISING);  
  80.  
  81.  
  82.  ADMUX = (0<<MUX3) | (1<<MUX2) | (0<<MUX1) | (1<<MUX0) |
  83.  (1<<REFS0) |(0<<REFS1);
  84.  
  85. // Setup timer 1 with max speed. Used to detect if it's a new line or frame.
  86.   TCCR1B =
  87.   (0<<CS12) | //Prescale 1
  88.   (0<<CS11) | //Prescale 1
  89.   (1<<CS10) | //Prescale 1
  90.   (0<<WGM12); // CTC mode
  91.  
  92.   //Clear timer (not really necessary)
  93.   TCNT1=0;
  94.  
  95. // Start timer 2 used to count time (page 164)
  96.   TCCR2B =
  97.   (1<<CS22) | //Prescale 1024
  98.   (1<<CS21) | //Prescale 1024
  99.   (1<<CS20) | //Prescale 1024
  100.   (1<<WGM22); // CTC mode (Clear timer on compare match)
  101.  
  102.   TCCR2A = (1<< WGM21); // CTC mode
  103.   OCR2A = 0b11111111; // Set compare register to max;
  104.  
  105.   // Enable interrupts - not needed
  106.  // sei();
  107.  
  108. }
  109.  
  110. // Numbers and letters - a single array is used for now.
  111.  
  112. // As each letter/number
  113. // contains 8 lines, the entire ASCII table can't be implemented this way,  
  114. // due to the fact that in int want be large enough.
  115. // Using a long as index is too slow.
  116.  
  117. // A 2D array might work, but for now I will just use it this way;
  118.  
  119. unsigned char letters[] = {
  120.  
  121. // Blank - 0  
  122. 0b00000000,
  123. 0b00000000,
  124. 0b00000000,
  125. 0b00000000,
  126. 0b00000000,
  127. 0b00000000,
  128. 0b00000000,
  129. 0b00000000,
  130.  
  131. // A - 1
  132. 0b00000000,
  133. 0b01111110,
  134. 0b01000010,
  135. 0b01000010,
  136. 0b01111110,
  137. 0b01000010,
  138. 0b01000010,
  139. 0b01000010,
  140.  
  141. // B - 2
  142. 0b00000000,
  143. 0b01111110,
  144. 0b01000010,
  145. 0b01000010,
  146. 0b01111110,
  147. 0b01000010,
  148. 0b01000010,
  149. 0b01111110,
  150.  
  151. // C - 3
  152. 0b00000000,
  153. 0b01111110,
  154. 0b01000000,
  155. 0b01000000,
  156. 0b01000000,
  157. 0b01000000,
  158. 0b01000000,
  159. 0b01111110,
  160.  
  161. // D - 4
  162. 0b00000000,
  163. 0b01111000,
  164. 0b01000100,
  165. 0b01000010,
  166. 0b01000010,
  167. 0b01000010,
  168. 0b01000100,
  169. 0b01111000,
  170.  
  171. // E - 5
  172. 0b00000000,
  173. 0b01111110,
  174. 0b01000000,
  175. 0b01000000,
  176. 0b01111110,
  177. 0b01000000,
  178. 0b01000000,
  179. 0b01111110,
  180.  
  181. // F - 6
  182. 0b00000000,
  183. 0b01111110,
  184. 0b01000000,
  185. 0b01000000,
  186. 0b01111110,
  187. 0b01000000,
  188. 0b01000000,
  189. 0b01000000,
  190.  
  191. // G - 7
  192. 0b00000000,
  193. 0b01111110,
  194. 0b01000010,
  195. 0b01000010,
  196. 0b01011110,
  197. 0b00000010,
  198. 0b00000010,
  199. 0b01111110,
  200.  
  201. // H - 8
  202. 0b00000000,
  203. 0b01000010,
  204. 0b01000010,
  205. 0b01000010,
  206. 0b01011110,
  207. 0b01000010,
  208. 0b01000010,
  209. 0b01000010,
  210.  
  211. // I - 9
  212. 0b00000000,
  213. 0b01111110,
  214. 0b00010000,
  215. 0b00010000,
  216. 0b00010000,
  217. 0b00010000,
  218. 0b00010000,
  219. 0b01111110,
  220.  
  221. // J - 10
  222. 0b00000000,
  223. 0b01111110,
  224. 0b00000010,
  225. 0b00000010,
  226. 0b00000010,
  227. 0b01000010,
  228. 0b01100110,
  229. 0b01111100,
  230.  
  231. //K - 11
  232. 0b00000000,
  233. 0b01000110,
  234. 0b01001000,
  235. 0b01010000,
  236. 0b01100000,
  237. 0b01010000,
  238. 0b01001000,
  239. 0b01000110,
  240.  
  241. // L - 12
  242. 0b00000000,
  243. 0b01000000,
  244. 0b01000000,
  245. 0b01000000,
  246. 0b01000000,
  247. 0b01000000,
  248. 0b01000000,
  249. 0b01111110,
  250.  
  251. // M - 13
  252. 0b00000000,
  253. 0b01000010,
  254. 0b01100110,
  255. 0b01011010,
  256. 0b01000010,
  257. 0b01000010,
  258. 0b01000010,
  259. 0b01000010,
  260.  
  261. // N - 14
  262. 0b00000000,
  263. 0b01000010,
  264. 0b01100110,
  265. 0b01010010,
  266. 0b01001010,
  267. 0b01001010,
  268. 0b01000110,
  269. 0b01000010,
  270.  
  271. // O - 15
  272. 0b00000000,
  273. 0b01111110,
  274. 0b01000010,
  275. 0b01000010,
  276. 0b01000010,
  277. 0b01000010,
  278. 0b01000010,
  279. 0b01111110,
  280.  
  281. // P - 16
  282. 0b00000000,
  283. 0b01111110,
  284. 0b01000010,
  285. 0b01000010,
  286. 0b01111110,
  287. 0b01000000,
  288. 0b01000000,
  289. 0b01000000,
  290.  
  291. // Q - 17
  292. 0b00000000,
  293. 0b01000010,
  294. 0b01100110,
  295. 0b01011010,
  296. 0b01000010,
  297. 0b01000010,
  298. 0b01000010,
  299. 0b01000010,
  300.  
  301. // R - 18
  302. 0b00000000,
  303. 0b01111110,
  304. 0b01000010,
  305. 0b01000010,
  306. 0b01111110,
  307. 0b01100000,
  308. 0b01011000,
  309. 0b01000110,
  310.  
  311. // S - 19
  312. 0b00000000,
  313. 0b01111110,
  314. 0b01000000,
  315. 0b01000000,
  316. 0b01111110,
  317. 0b00000010,
  318. 0b00000010,
  319. 0b01111110,
  320.  
  321. // T - 20
  322. 0b00000000,
  323. 0b00000010,
  324. 0b00100100,
  325. 0b00001000,
  326. 0b00010000,
  327. 0b00100100,
  328. 0b01000000,
  329. 0b00000000,
  330.  
  331. // U - 21
  332. 0b00000000,
  333. 0b01000010,
  334. 0b01000010,
  335. 0b01000010,
  336. 0b01000010,
  337. 0b01000010,
  338. 0b01000010,
  339. 0b01111110};
  340.  
  341. // Array with numbers, "-", ".", ":" and blank
  342. char numbers[] = {
  343.   // -  
  344. 0b00000000,
  345. 0b01000010,
  346. 0b01000110,
  347. 0b01000100,
  348. 0b00100100,
  349. 0b00101100,
  350. 0b00011000,
  351. 0b00011000,
  352.  
  353.  
  354. // .  
  355. 0b00000000,
  356. 0b00000000,
  357. 0b00000000,
  358. 0b00000000,
  359. 0b00000000,
  360. 0b00000000,
  361. 0b00111000,
  362. 0b00111000,  
  363.  
  364. // /
  365. 0b00000000,
  366. 0b00000010,
  367. 0b00000010,
  368. 0b00000100,
  369. 0b00001000,
  370. 0b00010000,
  371. 0b00100000,
  372. 0b01000000,
  373.  
  374. // 0  
  375. 0b00000000,
  376. 0b00111100,
  377. 0b01000010,
  378. 0b01000010,
  379. 0b01000010,
  380. 0b01000010,
  381. 0b01000010,
  382. 0b00111100,
  383.  
  384.   // 1
  385. 0b00000000,
  386. 0b00010000,
  387. 0b00110000,
  388. 0b01010000,
  389. 0b00010000,
  390. 0b00010000,
  391. 0b00010000,
  392. 0b00111100,
  393.  
  394. // 2
  395. 0b00000000,
  396. 0b01111100,
  397. 0b00000010,
  398. 0b00000010,
  399. 0b00111110,
  400. 0b01000000,
  401. 0b01000000,
  402. 0b01111110,
  403.  
  404. // 3
  405. 0b00000000,
  406. 0b01111100,
  407. 0b00000010,
  408. 0b00000010,
  409. 0b00111100,
  410. 0b00000010,
  411. 0b00000010,
  412. 0b01111100,
  413.  
  414. // 4
  415. 0b00000000,
  416. 0b01000010,
  417. 0b01000010,
  418. 0b01000010,
  419. 0b01111110,
  420. 0b00000010,
  421. 0b00000010,
  422. 0b00000010,
  423.  
  424. // 5
  425. 0b00000000,
  426. 0b01111110,
  427. 0b01000000,
  428. 0b01000000,
  429. 0b01111100,
  430. 0b00000010,
  431. 0b00000010,
  432. 0b01111110,
  433.  
  434. // 6
  435. 0b00000000,
  436. 0b00111110,
  437. 0b01000000,
  438. 0b01000000,
  439. 0b01111100,
  440. 0b01000010,
  441. 0b01000010,
  442. 0b01111100,
  443.  
  444. // 7
  445. 0b00000000,
  446. 0b01111110,
  447. 0b01000010,
  448. 0b00000100,
  449. 0b00001000,
  450. 0b00010000,
  451. 0b00100000,
  452. 0b00100000,
  453.  
  454. // 8
  455. 0b00000000,
  456. 0b00111100,
  457. 0b01000010,
  458. 0b01000010,
  459. 0b00111100,
  460. 0b01000010,
  461. 0b01000010,
  462. 0b00111100,
  463.  
  464. // 9
  465. 0b00000000,
  466. 0b00111100,
  467. 0b01000010,
  468. 0b01000010,
  469. 0b00111110,
  470. 0b00000010,
  471. 0b00000010,
  472. 0b01111110,
  473.  
  474. 0b00000000,
  475. 0b00000000,
  476. 0b00011100,
  477. 0b00011100,
  478. 0b00000000,
  479. 0b00011100,
  480. 0b00011100,
  481. 0b00000000,
  482.  
  483. 0b00000000,
  484. 0b00000000,
  485. 0b00000000,
  486. 0b00000000,
  487. 0b00000000,
  488. 0b00000000,
  489. 0b00000000,
  490. 0b00000000};
  491.  
  492. // Large numbers. Use them if you prefere.
  493. // I have used them with USART pixel generation and it
  494. // should be straight forward with SPI
  495.  
  496. unsigned char LargeNumbers[] ={
  497. 0b00000000,0b00000000,
  498. 0b00000000,0b00000000,
  499. 0b00000000,0b00000000,
  500. 0b00000000,0b00000000,
  501. 0b00000000,0b00000000,
  502. 0b00000000,0b00000000,
  503. 0b00000000,0b00000000,
  504. 0b00000000,0b00000000,
  505. 0b00000000,0b00000000,
  506. 0b00000000,0b00000000,
  507. 0b00000000,0b00000000,
  508. 0b00000000,0b00000000,
  509. 0b00000000,0b00000000,
  510. 0b00000000,0b00000000,
  511. 0b00000000,0b00000000,
  512. 0b00000000,0b00000000,  
  513.  
  514. 0b00000001,0b11000000,
  515. 0b00000111,0b11000000,
  516. 0b00001111,0b11000000,
  517. 0b00011111,0b11000000,
  518. 0b00011111,0b11000000,
  519. 0b00000011,0b11000000,
  520. 0b00000011,0b11000000,
  521. 0b00000011,0b11000000,
  522. 0b00000011,0b11000000,
  523. 0b00000011,0b11000000,
  524. 0b00000011,0b11000000,
  525. 0b00000011,0b11000000,
  526. 0b00000011,0b11000000,
  527. 0b00011111,0b11111000,
  528. 0b00111111,0b11111100,
  529. 0b00011111,0b11111000,
  530.  
  531. 0b00000000,0b00000000,
  532. 0b00001111,0b11100000,
  533. 0b00011111,0b11110000,
  534. 0b00111111,0b11111000,
  535. 0b01111000,0b00111000,
  536. 0b01110000,0b00111000,
  537. 0b00000000,0b00111000,
  538. 0b00000000,0b11111000,
  539. 0b00000001,0b11110000,
  540. 0b00000111,0b11100000,
  541. 0b00011111,0b11000000,
  542. 0b00011110,0b00000000,
  543. 0b00111100,0b00000000,
  544. 0b00111111,0b11111000,
  545. 0b01111111,0b11111100,
  546. 0b00111111,0b11111000,
  547.  
  548. 0b00000000,0b00000000,
  549. 0b00000111,0b11110000,
  550. 0b00011111,0b11111000,
  551. 0b00111111,0b11111100,
  552. 0b01111000,0b00011100,
  553. 0b01110000,0b00011100,
  554. 0b00000000,0b00111100,
  555. 0b00000011,0b11111000,
  556. 0b00000111,0b11110000,
  557. 0b00000011,0b11111000,
  558. 0b00000000,0b00111100,
  559. 0b01111000,0b00011100,
  560. 0b01111000,0b00011100,
  561. 0b00111111,0b11111100,
  562. 0b00011111,0b11111000,
  563. 0b00000111,0b11110000,
  564.  
  565. 0b00000000,0b00000000,
  566. 0b00110000,0b00011000,
  567. 0b01111000,0b00111100,
  568. 0b01111000,0b00111100,
  569. 0b01111000,0b00111100,
  570. 0b01111000,0b00111100,
  571. 0b01111000,0b00111100,
  572. 0b01111111,0b11111100,
  573. 0b01111111,0b11111100,
  574. 0b00111111,0b11111100,
  575. 0b00000000,0b00111100,
  576. 0b00000000,0b00111100,
  577. 0b00000000,0b00111100,
  578. 0b00000000,0b00111100,
  579. 0b00000000,0b00111100,
  580. 0b00000000,0b00011000,
  581.  
  582. 0b00000000,0b00000000,
  583. 0b00111111,0b11111000,
  584. 0b01111111,0b11111100,
  585. 0b01111111,0b11111000,
  586. 0b01111000,0b00000000,
  587. 0b01111000,0b00000000,
  588. 0b01111000,0b00000000,
  589. 0b01111111,0b11100000,
  590. 0b01111111,0b11111000,
  591. 0b00111111,0b11111100,
  592. 0b00000000,0b01111100,
  593. 0b00000000,0b00111100,
  594. 0b00111000,0b01111000,
  595. 0b01111111,0b11111000,
  596. 0b00111111,0b11110000,
  597. 0b00001111,0b11000000};
  598.  
  599.          
  600.      
  601.      void detectframe() {
  602.          line=0;      
  603. }
  604.  
  605.  
  606.  
  607. void detectline() {
  608.          little_delay
  609.  
  610. // ============================================================
  611. // Buttom line
  612. // ============================================================
  613.  
  614.  
  615. // Writes the text...
  616.  
  617. // Writes the numbers - first the time.          
  618.        if (line > 139 && line < 148) {  
  619.             temp = line - 140;
  620.            _delay_loop_1(12);
  621.        
  622.          // Writes the current numbers;
  623.           _delay_loop_1(15);
  624.            
  625.          buffer[0]=currentr[0]<<3;
  626.          buffer[1]=currentr[1]<<3;
  627.          buffer[2]=currentr[2]<<3;  
  628.          buffer[3]=currentr[3]<<3;
  629.          buffer[4]=buttext[2]<<3;          
  630.    
  631.          
  632.           SPDR = numbers[(buffer[0])+(temp)];
  633.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  634.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  635.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");                    
  636.            
  637.          SPDR = numbers[(buffer[1])+(temp)];
  638.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  639.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  640.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");                  
  641.          
  642.          SPDR = numbers[(buffer[2])+(temp)];
  643.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  644.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  645.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");  
  646.                   __asm__("nop\n\t""nop\n\t");                    
  647.          
  648.          SPDR = numbers[(buffer[3])+(temp)];
  649.          
  650.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  651.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  652.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");                  
  653.                   __asm__("nop\n\t""nop\n\t""nop\n\t");                    
  654.          
  655.          SPDR = letters[(buffer[4])+(temp)];
  656.                        
  657.  
  658.           _delay_loop_1(10);
  659.            
  660.          buffer[0]=mahr[0]<<3;
  661.          buffer[1]=mahr[1]<<3;
  662.          buffer[2]=mahr[2]<<3;
  663.          buffer[3]=buttext[0]<<3;
  664.          
  665.           SPDR = numbers[(buffer[0])+(temp)];
  666.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  667.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  668.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");                    
  669.            
  670.          SPDR = numbers[(buffer[1])+(temp)];
  671.          
  672.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  673.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  674.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");      
  675.      
  676.          SPDR = numbers[(buffer[2])+(temp)];
  677.          
  678.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  679.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");
  680.                   __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");                  
  681.                   __asm__("nop\n\t""nop\n\t""nop\n\t");    
  682.    
  683.          SPDR = letters[(buffer[3])+(temp)];
  684.        
  685.      }              
  686.            
  687.       // Increase line count..
  688.    line++;
  689. }
  690.  
  691.  
  692. void loop () {
  693.  
  694.  w++;
  695. if (w==0)
  696. {
  697.               ADCreal=analogRead(5);
  698.               current_num=ADCreal*0.14514;  
  699.            
  700.            // Updates currentr which will be displayed directly on the OSD;
  701.            currentr[0]= (current_num / 100)+3;
  702.            currentr[1]= ((current_num % 100) / 10)+3;
  703.            currentr[2]= 1; // Writes the dot. Should only be done once.          
  704.            currentr[3]= ((current_num % 100) % 10)+3;
  705. }
  706.  
  707. if (w==100) {
  708.        //286 573
  709.         rssi=analogRead(4);
  710.       if (rssi<286) {
  711.       rssi = 0;
  712.       }
  713.       else
  714.       {
  715.       rssi = rssi-286;
  716.       }
  717.      rssi = rssi / 3;
  718.     if (rssi>99) {
  719.      rssi = 99;
  720.     }
  721.         mahr[0]= (rssi / 10)+3;
  722.         mahr[1]= (rssi % 10)+3;
  723.         //mahr[2]=3+3;
  724. }          
  725.      
  726.  }

osd.JPG
    
(#) mzozo95 válasza GPeti1977 hozzászólására (») Aug 28, 2012 /
 
HI!
leteszteltem a programot avr-studio 4el, atmega8 ra állítva(mint a kapcs rajzban), és rengeteg hibát kaptam..:


Idézet:
„../OSD.c: In function 'setup':
../OSD.c:43: warning: implicit declaration of function 'pinMode'
../OSD.c:43: error: 'INPUT' undeclared (first use in this function)
../OSD.c:43: error: (Each undeclared identifier is reported only once
../OSD.c:43: error: for each function it appears in.)
../OSD.c:47: error: 'OUTPUT' undeclared (first use in this function)
../OSD.c:77: error: 'TIMSK0' undeclared (first use in this function)
../OSD.c:78: error: 'TIMSK1' undeclared (first use in this function)
../OSD.c:79: error: 'TIMSK2' undeclared (first use in this function)
../OSD.c:80: warning: implicit declaration of function 'attachInterrupt'
../OSD.c:80: error: 'detectline' undeclared (first use in this function)
../OSD.c:80: error: 'FALLING' undeclared (first use in this function)
../OSD.c:81: error: 'detectframe' undeclared (first use in this function)
../OSD.c:81: error: 'RISING' undeclared (first use in this function)
../OSD.c:98: error: 'TCCR2B' undeclared (first use in this function)
../OSD.c:102: error: 'WGM22' undeclared (first use in this function)
../OSD.c:104: error: 'TCCR2A' undeclared (first use in this function)
../OSD.c:105: error: 'OCR2A' undeclared (first use in this function)
../OSD.c: In function 'loop':
../OSD.c:699: warning: implicit declaration of function 'analogRead'
make: *** [OSD.o] Error 1
Build failed with 15 errors and 3 warnings...

Az elejére beszúrtam az fcpu 16mhz-t. így máris kevesebb a hiba.

Az atmega8 nál csak OCR2, TCCR2, WGM20 van, és a TIMSKX el is gondja van a fordítónak, emellett az output-al és input-al is gondja van, gondolom itt csak egy #define hiányzik az elejéről.

A video input és az output ugyanazon a vezetéken fut? és a 2es számú a gnd?(x1-2...)
A videó mérete nem lényeges? Kisebb méreten(pl 420tvl) csak nagyobbak lesznek a betűk? Ez PAL jelre ültethető OSD?
(#) mzozo95 válasza mzozo95 hozzászólására (») Aug 28, 2012 /
 
Kipróbáltam atmega 48al is a studióban, mivel ott több a timer... mégkevesebb a hiba:

Idézet:

Build started 28.8.2012 at 19:13:24
avr-gcc -mmcu=atmega48 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT osd48.o -MF dep/osd48.o.d -c ../osd48.c
../osd48.c: In function 'setup':
../osd48.c:43: warning: implicit declaration of function 'pinMode'
../osd48.c:43: error: 'INPUT' undeclared (first use in this function)
../osd48.c:43: error: (Each undeclared identifier is reported only once
../osd48.c:43: error: for each function it appears in.)
../osd48.c:47: error: 'OUTPUT' undeclared (first use in this function)
../osd48.c:80: warning: implicit declaration of function 'attachInterrupt'
../osd48.c:80: error: 'detectline' undeclared (first use in this function)
../osd48.c:80: error: 'FALLING' undeclared (first use in this function)
../osd48.c:81: error: 'detectframe' undeclared (first use in this function)
../osd48.c:81: error: 'RISING' undeclared (first use in this function)
../osd48.c: In function 'loop':
../osd48.c:699: warning: implicit declaration of function 'analogRead'
make: *** [osd48.o] Error 1
Build failed with 8 errors and 3 warnings...


De sztem a 8kb memóriája szegény atmega48nak kevés lesz ide...
A deklarációkban tudnál segítséget nyújtani? Milyen formában kell ezeket megadni?

Gondolom ezt a kettőt így:
  1. #define OUTPUT 1
  2. #define INPUT 0
(#) GPeti1977 válasza mzozo95 hozzászólására (») Aug 28, 2012 /
 
Aurino -val kell lefordítani, természetesen kell egy atmega168, 328 a megfelelő bootloaderrel.
Nem lehetetlen átírni avrstudio-ra de nem is egyszerű.

Ntsc is lehet csak a betűk nagyobbak.
A be és kimenet ugyanaz.
(#) GPeti1977 válasza GPeti1977 hozzászólására (») Aug 28, 2012 /
 
Itt van egy készen ha két bemenetről feszültséget akarsz kiírni:
http://www.hobbyking.com/hobbyking/store/__16662__HobbyKing_E_OSD.html
(#) mzozo95 válasza GPeti1977 hozzászólására (») Aug 28, 2012 /
 
Hát, az lenne jó, ha én tudnám megcsinálni az egészet, külföldről pedig sajnos nem rendeltem még soha, és annyira nem is szeretnék... Mevárom PICI hozzászólását, kíváncsi vagyok hogy ő tényleg avr re studióval készítette e az övét...
(#) pici válasza mzozo95 hozzászólására (») Aug 28, 2012 /
 
Hali
AVR studioval csináltam.
Nagyon rövid a kód, mert 3-4k között van 9x7-es karakterekkel.
Nálam még van benne egy RS422 kommunikáció a központi egységgel.
Úgy írtam meg, hogy a sötétitettháttér ki/bekapcsolható.
Jelszintek potival finomanhangolhatóak, mennyire legyen fényes és mennyire nyomja el eredeti jelet.
Pár fontos dolog:
1. PAL vagy NTSC tökmindegy, csak a sorok száma nagyobb PALban és így több karaktersort is ki lehet rakni, ellenben nem elég a 8 bites számláló.
2. külső kvarc kell, minél nagyobb. Én 22.118400MHz-est használtam, picit túlhúzva AVR-t és BAUD-os értéken.
Stabil táp és Kvarcnak kondik kellenek, minél stabilabb a jel, annál kevésbé "ziziznek" a betűpixelek
3. LM1881 2 megszakítást kezel. Sor és félképnél külön vezetéken adja a jelet. Sormegszakítást kell egy 16bites számlálóval számolni, ez adja az Y pixelértéket. Félképmegszakítás pedig nagyon egyszerű, lenullázza a számlátót.
4. Az x koordináta figyeléshez egy timert kell beállítani, ha az lejárt, akkor a kívánt oszlopnál jársz, pakolhatod folyamatosan a karaktered pixeleit.
Nem egyszerű figyelni, hányadik sorban jársz, ez a karaktered hányadik sora és ugye egymás utáni karakterek x sorát kell folyamatosan kirakni, aztán az x+1 sor 1. 2. 3. karakterének pixeleit...
5. figyelni kell az elágazásoknál (hányadik sornál jár...) ezeknek az utasításidejét is bele kell számolni az időzítésbe.
Oszlopfelbontás (x) a proci frekijétől függ.
(#) sargarigo válasza pici hozzászólására (») Aug 29, 2012 /
 
Ejha!

Így ez alapján nem is tűnik olyan bonyolultnak! Azért jobban belegondolva rá kell még szánni egy kicsit..
(#) GPeti1977 hozzászólása Aug 29, 2012 /
 
Ez sem rossz:
http://electronics-home-projects.tripod.com/
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem