{"id":146,"date":"2012-05-05T23:24:44","date_gmt":"2012-05-05T21:24:44","guid":{"rendered":"http:\/\/vps\/?page_id=146"},"modified":"2020-12-20T12:10:54","modified_gmt":"2020-12-20T11:10:54","slug":"jota-osd","status":"publish","type":"page","link":"https:\/\/www.pe1br.nl\/?page_id=146","title":{"rendered":"Jota OSD"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>At the scouting Pakaweversgroep Neede we are doing A game called Labyrinth for some time now. We use A camera high in A tree and A monitor with A labyrinth sheet over it. 1 of the players sits behind the monitor and gives directions over A PMR porto to the other player.<\/p>\n<p>Be-course I want to be able to transmit the video on Amateur television I had to figure out A way to overlay the labyrinth on my video signal.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2012\/05\/shield1.jpg\"><img loading=\"lazy\" class=\"size-medium wp-image-150\" title=\"shield\" src=\"\/wp-content\/uploads\/2012\/05\/shield1-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/shield1-300x225.jpg 300w, https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/shield1.jpg 320w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>I&#8217;ve been using the <a href=\"http:\/\/www.arduino.cc\/\">Arduino<\/a> for sometime and found there was A video overlay\u00a0 shield called the video experimenter shield.<\/p>\n<p>It was an opensource shield and the schematics where available at the. <a href=\"http:\/\/nootropicdesign.com\/\">Nootropic Design website<\/a>.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2012\/05\/print.jpg\"><img loading=\"lazy\" class=\"size-medium wp-image-155\" title=\"print\" src=\"\/wp-content\/uploads\/2012\/05\/print-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/print-300x225.jpg 300w, https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/print-400x300.jpg 400w, https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/print.jpg 640w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>I used the same chip together with an Arduino UNO rom chip and made A pcb on experiment circuit board.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2013\/04\/arduino-osd-1024x672.png\"><img loading=\"lazy\" class=\"size-medium wp-image-157\" title=\"schema\" src=\"\/wp-content\/uploads\/2012\/05\/schema-300x207.jpg\" alt=\"\" width=\"300\" height=\"207\" srcset=\"https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/schema-300x207.jpg 300w, https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/schema-433x300.jpg 433w, https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/schema.jpg 800w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>The schematic of the board:Note. the lm1881 is not in the Eagle lib so I used A op-amp picture instead, the numbers 1 til 8 are right\u00a0 but the picture isn&#8217;t.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2012\/05\/box.jpg\"><img loading=\"lazy\" class=\"size-medium wp-image-160\" title=\"box\" src=\"\/wp-content\/uploads\/2012\/05\/box-300x164.jpg\" alt=\"\" width=\"300\" height=\"164\" srcset=\"https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/box-300x164.jpg 300w, https:\/\/www.pe1br.nl\/wp-content\/uploads\/2012\/05\/box.jpg 448w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>I build everything together in A nice little box and its ready to use for the next Jota event.<\/p>\n<p>Off course I had to write some software for the arduino. I used A programming interface but you can also program the chip in your arduino and then put it in your own pcb. The arduino code I used uses the tv out library and has 4 options which I can switch with the button on the front of the box. (this way I don&#8217;t have to reprogram the device every time I want to do something els) :<\/p>\n<ol>\n<li>labyrinth 1<\/li>\n<li>labyrinth 2<\/li>\n<li>my callsign<\/li>\n<li>my callsign with frequency<\/li>\n<\/ol>\n<p>The code is included at the end of this page.<\/p>\n<p>Some pictures of my TV screen with my amateur TV camera in the background and the osd over it:<\/p>\n<p><a href=\"\/wp-content\/uploads\/2012\/05\/labyrint12.jpg\"><img loading=\"lazy\" class=\"size-full wp-image-165 \" title=\"labyrint1\" src=\"\/wp-content\/uploads\/2012\/05\/labyrint12.jpg\" alt=\"\" width=\"250\" height=\"188\" \/><\/a><a href=\"\/wp-content\/uploads\/2012\/05\/labyrint21.jpg\"><img loading=\"lazy\" class=\"size-full wp-image-166\" title=\"labyrint2\" src=\"\/wp-content\/uploads\/2012\/05\/labyrint21.jpg\" alt=\"\" width=\"250\" height=\"188\" \/><\/a><br \/>\n<a href=\"\/wp-content\/uploads\/2012\/05\/videocall.jpg\"><img loading=\"lazy\" class=\"size-full wp-image-170\" title=\"videocall\" src=\"\/wp-content\/uploads\/2012\/05\/videocall.jpg\" alt=\"\" width=\"250\" height=\"188\" \/><\/a><a href=\"\/wp-content\/uploads\/2012\/05\/videocallfrequency.jpg\"><img loading=\"lazy\" class=\"size-full wp-image-171\" title=\"videocallfrequency\" src=\"\/wp-content\/uploads\/2012\/05\/videocallfrequency.jpg\" alt=\"\" width=\"250\" height=\"188\" \/><\/a><\/p>\n<p>The arduino code:<\/p>\n<pre><code>#include &lt;TVout.h&gt; \r\n#include &lt;fontALL.h&gt; \r\nTVout TV; \/\/unsigned char x,y; \r\nint zOff = 150; \r\nint xOff = 0; \r\nint yOff = 0; \r\nint cSize = 50; \r\nint view_plane = 64; \r\nfloat angle = PI\/60; \r\nconst int buttonPin = 11; \/\/ the pin that the pushbutton is attached to \r\nint buttonPushCounter = 0; \/\/ counter for the number of button presses \r\nint buttonState = 1; \/\/ current state of the button \r\nint lastButtonState = 0; \/\/ previous state of the button \r\n\r\nvoid setup() \r\n{ TV.begin(PAL, 136,96); \r\ninitOverlay(); \r\nTV.select_font(font6x8); \r\nTV.fill(0); \r\npinMode(buttonPin, INPUT); \r\nSerial.begin(9600); } \r\nvoid initOverlay() { TCCR1A = 0; \/\/ Enable timer1. ICES0 is set to 0 for falling edge detection on input capture pin. \r\nTCCR1B = _BV(CS10); \/\/ Enable input capture interrupt \r\nTIMSK1 |= _BV(ICIE1); \/\/ Enable external interrupt INT0 on pin 2 with falling edge. \r\nEIMSK = _BV(INT0); EICRA = _BV(ISC11); } \/\/ Required to reset the scan line when the vertical sync occurs \r\nISR(INT0_vect) { display.scanLine = 0; \r\n} \r\n\r\nvoid loop() { buttonState = digitalRead(buttonPin);\r\nif (buttonState != lastButtonState) { \r\nif (buttonState == HIGH) { buttonPushCounter++; \r\nSerial.print(\"number of button pushes: \"); \r\nSerial.println(buttonPushCounter, DEC); } \r\n} \r\nlastButtonState = buttonState; \r\nif (buttonPushCounter == 4) { buttonPushCounter = 0; } \r\nif (buttonPushCounter == 0) { TV.print(0, 87, \" PE1BR\"); }\r\nif (buttonPushCounter == 1) { TV.print(0, 87, \"144.700Mhz PE1BR\"); } \r\n\r\nif (buttonPushCounter == 2) \r\n{ TV.draw_line(0,0,0,95,WHITE); \/\/links boven links onder \r\nTV.draw_line(13.6,0,134,0,WHITE); \/\/links boven recht boven \r\nTV.draw_line(134,0,134,95,WHITE); \/\/rechts boven rechts onder \r\nTV.draw_line(0,95,27.2,95,WHITE); \/\/links onder rechts onder \r\nTV.draw_line(0,13.6,27.2,13.6,WHITE); \r\nTV.draw_line(40.8,13.6,134,13.6,WHITE); \r\nTV.draw_line(40.8,0,40.8,13.6,WHITE); \r\nTV.draw_line(13.6,27.2,120.4,27.2,WHITE); \r\nTV.draw_line(120.4,40.8,120.4,27.2,WHITE); \r\nTV.draw_line(106.8,40.8,120.4,40.8,WHITE); \r\nTV.draw_line(0,40.8,93.2,40.8,WHITE); \r\nTV.draw_line(93.2,27.2,93.2,40.8,WHITE); \r\nTV.draw_line(13.6,54.4,120.4,54.4,WHITE); \r\nTV.draw_line(13.6,54.4,13.6,81.6,WHITE); \r\nTV.draw_line(27.2,68,120.4,68,WHITE); \r\nTV.draw_line(120.4,68,120.4,81.6,WHITE); \r\nTV.draw_line(120.4,81.6,134,81.6,WHITE); \r\nTV.draw_line(27.2,81.6,27.2,95,WHITE); \r\nTV.draw_line(0,81.6,106.8,81.6,WHITE); \r\nTV.draw_line(40.8,95,134,95,WHITE); } \r\n\r\nif (buttonPushCounter == 3) \r\n{ TV.draw_line(0,0,0,95,WHITE); \/\/links boven links onder \r\nTV.draw_line(13.6,0,134,0,WHITE); \/\/links boven recht boven \r\nTV.draw_line(134,0,134,95,WHITE); \/\/rechts boven rechts onder \r\nTV.draw_line(0,95,27.2,95,WHITE); \/\/links onder rechts onder \r\nTV.draw_line(0,13.6,27.2,13.6,WHITE); \r\nTV.draw_line(40.8,13.6,134,13.6,WHITE); \r\nTV.draw_line(40.8,0,40.8,13.6,WHITE); \r\nTV.draw_line(13.6,27.2,120.4,27.2,WHITE); \r\nTV.draw_line(120.4,40.8,120.4,27.2,WHITE); \r\nTV.draw_line(106.8,40.8,120.4,40.8,WHITE); \r\nTV.draw_line(0,40.8,79.6,40.8,WHITE); \r\nTV.draw_line(93.2,27.2,93.2,54.4,WHITE); \r\nTV.draw_line(13.6,54.4,134,54.4,WHITE); \r\nTV.draw_line(13.6,54.4,13.6,81.6,WHITE); \r\nTV.draw_line(27.2,68,120.4,68,WHITE); \r\nTV.draw_line(120.4,68,120.4,81.6,WHITE); \r\nTV.draw_line(27.2,81.6,120.4,81.6,WHITE); \r\nTV.draw_line(27.2,81.6,27.2,95,WHITE);\r\nTV.draw_line(40.8,95,134,95,WHITE); } \r\ndelay (100); \r\nTV.clear_screen(); \r\n} <\/code><\/pre>\n<p>&nbsp;<\/p>\n<h1>Copyrights:<\/h1>\n<p>All software is distributed under the <a href=\"http:\/\/www.gnu.org\/copyleft\/gpl.html\">GNU\/GPL licence.<\/a><br \/>\nAll hardware and designs are distributed under a Creative Commons license <a href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/2.5\/\">Attribution-ShareAlike 2.5.<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; At the scouting Pakaweversgroep Neede we are doing A game called Labyrinth for some time now. We use A camera high in A tree and A monitor with A labyrinth sheet over it. 1 of the players sits behind the monitor and gives directions over A PMR porto to the other player. Be-course I&hellip; <a class=\"more-link\" href=\"https:\/\/www.pe1br.nl\/?page_id=146\">Continue reading <span class=\"screen-reader-text\">Jota OSD<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":32,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=\/wp\/v2\/pages\/146"}],"collection":[{"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=146"}],"version-history":[{"count":43,"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=\/wp\/v2\/pages\/146\/revisions"}],"predecessor-version":[{"id":768,"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=\/wp\/v2\/pages\/146\/revisions\/768"}],"up":[{"embeddable":true,"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=\/wp\/v2\/pages\/32"}],"wp:attachment":[{"href":"https:\/\/www.pe1br.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}