{"id":337,"date":"2010-05-16T17:05:30","date_gmt":"2010-05-16T15:05:30","guid":{"rendered":"http:\/\/www.sciencetronics.com\/greenphotons\/?p=337"},"modified":"2025-06-16T18:38:27","modified_gmt":"2025-06-16T16:38:27","slug":"knight-rider-is-back","status":"publish","type":"post","link":"https:\/\/www.sciencetronics.com\/greenphotons\/?p=337","title":{"rendered":"Knight Rider is back"},"content":{"rendered":"<p>Now I am completely sold to AVR microcontrollers. ATMEL&#8217;s free software seamlessly interfaces to the also free AVR-GCC C compiler and it is really easy to get started with the AVR microcontrollers &#8211; both in assembler and in C.<\/p>\n<p>Today I first rewrote yesterday&#8217;s assembler code into C in order to get the same effect. I even dared to spice it up a bit with a timed delay instead of 16-bit count down between steps:<\/p>\n<div class=\"codecolorer-container c default\" style=\"overflow:auto;white-space:nowrap;width:435px;\"><div class=\"c codecolorer\"><span class=\"co1\">\/\/ my very first C-code for AVR<\/span><br \/>\n<span class=\"co1\">\/\/ UZ 2010-05-16<\/span><br \/>\n<span class=\"co2\">#define F_CPU 1000000UL &nbsp;\/\/ 1 MHz<\/span><br \/>\n<br \/>\n<span class=\"co2\">#include &lt;avr\/io.h&gt;<\/span><br \/>\n<span class=\"co2\">#include &lt;util\/delay.h&gt;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">uint8_t<\/span> count<span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">int<\/span> main<span class=\"br0\">&#40;<\/span><span class=\"kw4\">void<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; DDRB &nbsp;<span class=\"sy0\">=<\/span> <span class=\"nu12\">0xff<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; count <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">while<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> &nbsp; <br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; PORTB <span class=\"sy0\">=<\/span> count<span class=\"sy0\">;<\/span> &nbsp; <br \/>\n&nbsp; &nbsp; _delay_ms<span class=\"br0\">&#40;<\/span><span class=\"nu0\">1000<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; count <span class=\"sy0\">++;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>The I played around a bit &#8211; and my second code to test was the infamous scanning LED lights from the engine hood of KITT (ie the sapient car) in <em>Knight Rider<\/em>.<\/p>\n<div class=\"codecolorer-container c default\" style=\"overflow:auto;white-space:nowrap;width:435px;height:300px;\"><div class=\"c codecolorer\"><span class=\"co1\">\/\/ my second C-code for AVR<\/span><br \/>\n<span class=\"co1\">\/\/ UZ 2010-05-16<\/span><br \/>\n<span class=\"co2\">#define F_CPU 1000000UL &nbsp;\/\/ 1 MHz<\/span><br \/>\n<br \/>\n<span class=\"co2\">#include &lt;avr\/io.h&gt;<\/span><br \/>\n<span class=\"co2\">#include &lt;util\/delay.h&gt;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">uint8_t<\/span> count<span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw4\">uint8_t<\/span> up<span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw4\">int<\/span> main<span class=\"br0\">&#40;<\/span><span class=\"kw4\">void<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; DDRB &nbsp;<span class=\"sy0\">=<\/span> <span class=\"nu12\">0xff<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; count <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; up &nbsp; &nbsp;<span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">while<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> &nbsp; <br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; PORTB <span class=\"sy0\">=<\/span> count <span class=\"sy0\">^<\/span> <span class=\"nu12\">0xff<\/span><span class=\"sy0\">;<\/span> &nbsp; <br \/>\n&nbsp; &nbsp; _delay_ms<span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>up<span class=\"sy0\">==<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>count <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">128<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; count <span class=\"sy0\">=<\/span> count <span class=\"sy0\">&lt;&lt;<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; up <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span> <br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>count <span class=\"sy0\">&gt;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; count <span class=\"sy0\">=<\/span> count <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; up <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>[flashvideo file=http:\/\/www.sciencetronics.com\/greenphotons\/wp-content\/uploads\/2010\/05\/IMGP9283.mp4  title=&#8221;Knight Rider is back&#8221;  \/]<\/p>\n<p>These code examples are by no means optimized or meant as <em>good<\/em> examples. I just want to point out that after years of waiting and hesitating getting started form zero to something is just a matter of a few hours with AVR microcontrollers.<\/p>\n<p>I recently <em>found<\/em> four character LCD displays Seiko L1614 in the electronics trash. Never thought I would be able to use these for something &#8211; but with 4 lines 16 characters each I also thought they were to precious to just be thrown away.<\/p>\n<p>It took me a while (let&#8217;s say the better part of two hours) to get my AVR to speak to an LCD display. There are several LCD code libraries around, but sadly most of those lack documentation. So if you want to get your LCD running on an AVR I can only recommend <a href=\"http:\/\/jump.to\/fleury\">Peter Fleury&#8217;s<\/a> lcdlibrary. <\/p>\n<p>Since this might also not be trivial to get running, here is how it is done:<\/p>\n<ol>\n<li>connect your LCD to one port of your microcontroller. In order to do this on an STK500 I used the 10-wire flat ribbon cable including pin-head connector from an old RS232 port connector &#8211; these were very common when RS232 ports were found on mulit-IO cards for PCs. I still have a couple of those lying around&#8230; Connect the control lines (RS, R\/W, E) of the LCD and the upper 4 data bits (DB4-7). Also connect the power supply GND and VTG and the contrast voltage with an adjustable resistor between GND and VTG. You can choose a different wiring, but this is the one which I use:<br \/>\n<table>\n<tr>\n<th colspan=\"2\">LCD terminal<\/th>\n<th colspan=\"2\">STK500<\/th>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>GND<\/td>\n<td>9<\/td>\n<td>GND<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>Vcc<\/td>\n<td>10<\/td>\n<td>VTG<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Vcontrast<\/td>\n<td colspan=\"2\">wiper of 10k variable resistor<br \/> between VTG and GND<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>RS<\/td>\n<td>1<\/td>\n<td>Px0<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>R\/W<\/td>\n<td>2<\/td>\n<td>Px1<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>E<\/td>\n<td>3<\/td>\n<td>Px2<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">nc<\/td>\n<td>4<\/td>\n<td>Px3<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>DB0<\/td>\n<td colspan=\"2\">nc<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>DB1<\/td>\n<td colspan=\"2\">nc<\/td>\n<\/tr>\n<tr>\n<td>9<\/td>\n<td>DB2<\/td>\n<td colspan=\"2\">nc<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td>DB3<\/td>\n<td colspan=\"2\">nc<\/td>\n<\/tr>\n<tr>\n<td>11<\/td>\n<td>DB4<\/td>\n<td>5<\/td>\n<td>Px4<\/td>\n<\/tr>\n<tr>\n<td>12<\/td>\n<td>DB5<\/td>\n<td>6<\/td>\n<td>Px5<\/td>\n<\/tr>\n<tr>\n<td>13<\/td>\n<td>DB6<\/td>\n<td>7<\/td>\n<td>Px6<\/td>\n<\/tr>\n<tr>\n<td>14<\/td>\n<td>DB7<\/td>\n<td>8<\/td>\n<td>Px7<\/td>\n<\/tr>\n<\/table>\n<\/li>\n<li>download and unpack the file <em>lcdlibrary.zip<\/em> from Peter Fleury&#8217;s hoempage to some archive directory on your system, since you will probably need it more than once<\/li>\n<li>copy the files <em>lcd.c<\/em> and <em>lcd.h<\/em> to your current AVRStudio-project&#8217;s main directory<\/li>\n<li>edit the file <em>lcd.h<\/em> to reflect your hardware setup. In my case I had to make some changes:\n<div class=\"codecolorer-container c default\" style=\"overflow:auto;white-space:nowrap;width:435px;height:300px;\"><div class=\"c codecolorer\"><span class=\"co1\">\/\/ for the clock frequency I currently use<\/span><br \/>\n<span class=\"co2\">#define XTAL 1000000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; clock frequency in Hz, used to calculate delay timer *\/<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ for the Seiko L1614 4x16 display<\/span><br \/>\n<span class=\"co2\">#define LCD_LINES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4 &nbsp; &nbsp; \/**&lt; number of visible lines of the display *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DISP_LENGTH &nbsp; &nbsp;16 &nbsp; &nbsp; \/**&lt; visibles characters per line of the display *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_LINE_LENGTH &nbsp;0x40 &nbsp; &nbsp; \/**&lt; internal line length of the display &nbsp; &nbsp;*\/<\/span><br \/>\n<span class=\"co2\">#define LCD_START_LINE1 &nbsp;0x00 &nbsp; &nbsp; \/**&lt; DDRAM address of first char of line 1 *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_START_LINE2 &nbsp;0x40 &nbsp; &nbsp; \/**&lt; DDRAM address of first char of line 2 *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_START_LINE3 &nbsp;0x10 &nbsp; &nbsp; \/**&lt; DDRAM address of first char of line 3 *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_START_LINE4 &nbsp;0x50 &nbsp; &nbsp; \/**&lt; DDRAM address of first char of line 4 *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_WRAP_LINES &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; \/**&lt; 0: no wrap, 1: wrap at end of visibile line *\/<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/for my wiring<\/span><br \/>\n<span class=\"co2\">#define LCD_PORT &nbsp; &nbsp; &nbsp; &nbsp; PORTC &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; port for the LCD lines &nbsp; *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DATA0_PORT &nbsp; LCD_PORT &nbsp; &nbsp; \/**&lt; port for 4bit data bit 0 *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DATA1_PORT &nbsp; LCD_PORT &nbsp; &nbsp; \/**&lt; port for 4bit data bit 1 *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DATA2_PORT &nbsp; LCD_PORT &nbsp; &nbsp; \/**&lt; port for 4bit data bit 2 *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DATA3_PORT &nbsp; LCD_PORT &nbsp; &nbsp; \/**&lt; port for 4bit data bit 3 *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DATA0_PIN &nbsp; &nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; pin for 4bit data bit 0 &nbsp;*\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DATA1_PIN &nbsp; &nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; pin for 4bit data bit 1 &nbsp;*\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DATA2_PIN &nbsp; &nbsp;6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; pin for 4bit data bit 2 &nbsp;*\/<\/span><br \/>\n<span class=\"co2\">#define LCD_DATA3_PIN &nbsp; &nbsp;7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; pin for 4bit data bit 3 &nbsp;*\/<\/span><br \/>\n<span class=\"co2\">#define LCD_RS_PORT &nbsp; &nbsp; &nbsp;LCD_PORT &nbsp; &nbsp; \/**&lt; port for RS line &nbsp; &nbsp; &nbsp; &nbsp; *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_RS_PIN &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; pin &nbsp;for RS line &nbsp; &nbsp; &nbsp; &nbsp; *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_RW_PORT &nbsp; &nbsp; &nbsp;LCD_PORT &nbsp; &nbsp; \/**&lt; port for RW line &nbsp; &nbsp; &nbsp; &nbsp; *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_RW_PIN &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; pin &nbsp;for RW line &nbsp; &nbsp; &nbsp; &nbsp; *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_E_PORT &nbsp; &nbsp; &nbsp; LCD_PORT &nbsp; &nbsp; \/**&lt; port for Enable line &nbsp; &nbsp; *\/<\/span><br \/>\n<span class=\"co2\">#define LCD_E_PIN &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/**&lt; pin &nbsp;for Enable line &nbsp; &nbsp; *\/<\/span><\/div><\/div>\n<\/li>\n<li>then you have to add <em>lcd.c<\/em> as additional source file to your AVRStudio project. This is done in the left panel of the standard work space in AVRStudio under &#8220;Source files&#8221;<\/li>\n<li>in your own source code you will have to add the line\n<div class=\"codecolorer-container c default\" style=\"overflow:auto;white-space:nowrap;width:435px;\"><div class=\"c codecolorer\"><span class=\"co2\">#include &quot;lcd.h&quot;<\/span><\/div><\/div>\n<\/li>\n<\/ol>\n<figure id=\"attachment_368\" aria-describedby=\"caption-attachment-368\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.sciencetronics.com\/greenphotons\/wp-content\/uploads\/2010\/05\/IMGP9284_800.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.sciencetronics.com\/greenphotons\/wp-content\/uploads\/2010\/05\/IMGP9284_800.jpg\" alt=\"\" title=\"LCD on STK500\" width=\"800\" height=\"477\" class=\"size-full wp-image-368\" srcset=\"https:\/\/www.sciencetronics.com\/greenphotons\/wp-content\/uploads\/2010\/05\/IMGP9284_800.jpg 800w, https:\/\/www.sciencetronics.com\/greenphotons\/wp-content\/uploads\/2010\/05\/IMGP9284_800-300x178.jpg 300w, https:\/\/www.sciencetronics.com\/greenphotons\/wp-content\/uploads\/2010\/05\/IMGP9284_800-150x89.jpg 150w, https:\/\/www.sciencetronics.com\/greenphotons\/wp-content\/uploads\/2010\/05\/IMGP9284_800-400x238.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><figcaption id=\"caption-attachment-368\" class=\"wp-caption-text\">getting control over an LCD from an AVR<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Now I am completely sold to AVR microcontrollers. ATMEL&#8217;s free software seamlessly interfaces to the also free AVR-GCC C compiler and it is really easy to get started with the AVR microcontrollers &#8211; both in assembler and in C. Today I first rewrote yesterday&#8217;s assembler code into C in order to get the same effect. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":351,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2}},"categories":[46,11,8,40],"tags":[],"class_list":["post-337","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avr","category-electronics_en","category-everything_en","category-leds","entry","has-media"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.sciencetronics.com\/greenphotons\/wp-content\/uploads\/2010\/05\/IMGP9283.jpg","jetpack_shortlink":"https:\/\/wp.me\/p48grL-5r","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=\/wp\/v2\/posts\/337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=337"}],"version-history":[{"count":36,"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=\/wp\/v2\/posts\/337\/revisions"}],"predecessor-version":[{"id":2552,"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=\/wp\/v2\/posts\/337\/revisions\/2552"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=\/wp\/v2\/media\/351"}],"wp:attachment":[{"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=337"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sciencetronics.com\/greenphotons\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}