{"id":160,"date":"2013-03-11T22:13:17","date_gmt":"2013-03-12T06:13:17","guid":{"rendered":"http:\/\/schminktronics.com\/blog\/?p=160"},"modified":"2013-03-27T14:39:17","modified_gmt":"2013-03-27T22:39:17","slug":"counter-test-2","status":"publish","type":"post","link":"http:\/\/schminktronics.com\/blog\/archives\/160","title":{"rendered":"Counter Test 2"},"content":{"rendered":"<p>Counter Test 2 works, but not quite right. For some reason, I have to set the prescaler on timer 2 to \/64. At first, that worked quite well and gave me exactly what I expected, but by the time I got the camera out, the lines were no longer at 3, 6, 9, and 12:<\/p>\n<div id=\"attachment_164\" style=\"width: 594px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/schminktronics.com\/blog\/wp-content\/uploads\/2013\/03\/IMG_0810.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-164\" class=\"size-large wp-image-164\" alt=\"Those lines should be at 3, 6, 9, 12 o'clock. Something's not quite right...\" src=\"http:\/\/schminktronics.com\/blog\/wp-content\/uploads\/2013\/03\/IMG_0810-1024x768.jpg\" width=\"584\" height=\"438\" srcset=\"http:\/\/schminktronics.com\/blog\/wp-content\/uploads\/2013\/03\/IMG_0810-1024x768.jpg 1024w, http:\/\/schminktronics.com\/blog\/wp-content\/uploads\/2013\/03\/IMG_0810-300x225.jpg 300w, http:\/\/schminktronics.com\/blog\/wp-content\/uploads\/2013\/03\/IMG_0810-400x300.jpg 400w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><p id=\"caption-attachment-164\" class=\"wp-caption-text\">Those lines should be at 3, 6, 9, 12 o&#8217;clock. Something&#8217;s not quite right&#8230;<\/p><\/div>\n<p>I suspect my problem here is that I should really be adjusting the prescalers on the fly instead of using the hardcoded values I designed in. My guess is that I&#8217;m overflowing what will fit into the 8 bit timer. I wish I could tell what I was writing in there. I may need to write the binary value again.<\/p>\n<p>The code I used for this is:<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"line_numbers\"><pre>1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n<\/pre><\/td><td class=\"code\"><pre class=\"c\" style=\"font-family:monospace;\"><span style=\"color: #666666; font-style: italic;\">\/\/ Using the spinner board to test 328 counters<\/span>\n&nbsp;\n<span style=\"color: #339933;\">#include &lt;SPI.h&gt;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">const<\/span> <span style=\"color: #993333;\">int<\/span> HALL  <span style=\"color: #339933;\">=<\/span>  <span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/ PD2<\/span>\n<span style=\"color: #993333;\">const<\/span> <span style=\"color: #993333;\">int<\/span> BLANK <span style=\"color: #339933;\">=<\/span>  <span style=\"color: #0000dd;\">8<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/ PB0<\/span>\n<span style=\"color: #993333;\">const<\/span> <span style=\"color: #993333;\">int<\/span> LAT   <span style=\"color: #339933;\">=<\/span>  <span style=\"color: #0000dd;\">9<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/ PB1<\/span>\n&nbsp;\n<span style=\"color: #993333;\">const<\/span> <span style=\"color: #993333;\">int<\/span> HALL_INT <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/ Hall effect interrupt 0 on PD2 (INT0)<\/span>\n&nbsp;\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> savedCounter <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> slice <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> hallStart<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">void<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #009900;\">&#123;<\/span>\n  <span style=\"color: #666666; font-style: italic;\">\/\/ TCNT1 is counts per full revolution<\/span>\n  savedCounter <span style=\"color: #339933;\">=<\/span> TCNT1<span style=\"color: #339933;\">;<\/span>\n  TCNT1 <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Also reset TCNt2 (slice counter) so we always start in a known<\/span>\n  <span style=\"color: #666666; font-style: italic;\">\/\/ state<\/span>\n  TCNT2 <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Calculate a new compare value for timer 2 based on how fast our last revolution was.<\/span>\n  <span style=\"color: #666666; font-style: italic;\">\/\/ 512 angle slices, so divide the savedCounter by 512 to get the count per slice<\/span>\n  <span style=\"color: #666666; font-style: italic;\">\/\/ But we also have a \/8 prescaler, so instead divide by 4096<\/span>\n  <span style=\"color: #993333;\">int<\/span> sliceCount <span style=\"color: #339933;\">=<\/span> savedCounter <span style=\"color: #339933;\">\/<\/span> <span style=\"color: #0000dd;\">4096<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Saved the new slice counter<\/span>\n  OCR2A <span style=\"color: #339933;\">=<\/span> sliceCount<span style=\"color: #339933;\">;<\/span>  \n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Reset the slice number<\/span>\n  slice <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Now start the 8 bit counter 2<\/span>\n  TCCR2B <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">6<\/span><span style=\"color: #339933;\">;<\/span>                   <span style=\"color: #666666; font-style: italic;\">\/\/ Set \/256 prescaler<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #666666; font-style: italic;\">\/\/ ISR for the timer to switch the LEDs<\/span>\nISR<span style=\"color: #009900;\">&#40;<\/span>TIMER2_COMPA_vect<span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n  <span style=\"color: #b1b100;\">if<\/span> <span style=\"color: #009900;\">&#40;<\/span>slice <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">0<\/span> <span style=\"color: #339933;\">||<\/span> slice <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">128<\/span> <span style=\"color: #339933;\">||<\/span> slice <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">256<\/span> <span style=\"color: #339933;\">||<\/span> slice <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">384<\/span><span style=\"color: #009900;\">&#41;<\/span>\n  <span style=\"color: #009900;\">&#123;<\/span>\n    setLeds<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0xFFFF<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  <span style=\"color: #009900;\">&#125;<\/span>\n  <span style=\"color: #b1b100;\">else<\/span> <span style=\"color: #b1b100;\">if<\/span> <span style=\"color: #009900;\">&#40;<\/span>slice <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">1<\/span> <span style=\"color: #339933;\">||<\/span> slice <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">129<\/span> <span style=\"color: #339933;\">||<\/span> slice <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">257<\/span> <span style=\"color: #339933;\">||<\/span> slice <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">385<\/span><span style=\"color: #009900;\">&#41;<\/span>\n  <span style=\"color: #009900;\">&#123;<\/span>\n    setLeds<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0001<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  <span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n  slice<span style=\"color: #339933;\">++;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> setup<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #009900;\">&#123;<\/span>\n  digitalWrite<span style=\"color: #009900;\">&#40;<\/span>LAT<span style=\"color: #339933;\">,<\/span> LOW<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  pinMode<span style=\"color: #009900;\">&#40;<\/span>LAT<span style=\"color: #339933;\">,<\/span> OUTPUT<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>     \n&nbsp;\n  digitalWrite<span style=\"color: #009900;\">&#40;<\/span>BLANK<span style=\"color: #339933;\">,<\/span> HIGH<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  pinMode<span style=\"color: #009900;\">&#40;<\/span>BLANK<span style=\"color: #339933;\">,<\/span> OUTPUT<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>     \n&nbsp;\n  pinMode<span style=\"color: #009900;\">&#40;<\/span>HALL<span style=\"color: #339933;\">,<\/span> INPUT_PULLUP<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Setup the 16 bit counter counter 1<\/span>\n  TCCR1A <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>                   <span style=\"color: #666666; font-style: italic;\">\/\/ Turn off output compare modes<\/span>\n  TCCR1B <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">;<\/span>                   <span style=\"color: #666666; font-style: italic;\">\/\/ Turn on clk\/8 prescaler<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Setup 8 bit counter 2<\/span>\n  TCCR2A <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">;<\/span>                   <span style=\"color: #666666; font-style: italic;\">\/\/ CTC mode<\/span>\n  TCCR2B <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>                   <span style=\"color: #666666; font-style: italic;\">\/\/ Start with timer off<\/span>\n  TIMSK2 <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">;<\/span>                   <span style=\"color: #666666; font-style: italic;\">\/\/ Enable Output Compare A interrupt<\/span>\n&nbsp;\n  attachInterrupt<span style=\"color: #009900;\">&#40;<\/span>HALL_INT<span style=\"color: #339933;\">,<\/span> hallStart<span style=\"color: #339933;\">,<\/span> FALLING<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  SPI.<span style=\"color: #202020;\">begin<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  SPI.<span style=\"color: #202020;\">setDataMode<\/span><span style=\"color: #009900;\">&#40;<\/span>SPI_MODE0<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  SPI.<span style=\"color: #202020;\">setBitOrder<\/span><span style=\"color: #009900;\">&#40;<\/span>LSBFIRST<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  SPI.<span style=\"color: #202020;\">setClockDivider<\/span><span style=\"color: #009900;\">&#40;<\/span>SPI_CLOCK_DIV2<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/ Datasheet says 35 MHz max, so 8 MHz is fine<\/span>\n&nbsp;\n  TCNT1 <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> setLeds<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> pattern<span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #009900;\">&#123;<\/span>\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Blank the LEDS<\/span>\n  digitalWrite<span style=\"color: #009900;\">&#40;<\/span>BLANK<span style=\"color: #339933;\">,<\/span> HIGH<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Transfer the data<\/span>\n  SPI.<span style=\"color: #202020;\">transfer<\/span><span style=\"color: #009900;\">&#40;<\/span>pattern <span style=\"color: #339933;\">&amp;<\/span> <span style=\"color: #208080;\">0xFF<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  SPI.<span style=\"color: #202020;\">transfer<\/span><span style=\"color: #009900;\">&#40;<\/span>pattern <span style=\"color: #339933;\">&gt;&gt;<\/span> <span style=\"color: #0000dd;\">8<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Latch the data<\/span>\n  digitalWrite<span style=\"color: #009900;\">&#40;<\/span>LAT<span style=\"color: #339933;\">,<\/span> HIGH<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  digitalWrite<span style=\"color: #009900;\">&#40;<\/span>LAT<span style=\"color: #339933;\">,<\/span> LOW<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Unblank the LEDS<\/span>\n  digitalWrite<span style=\"color: #009900;\">&#40;<\/span>BLANK<span style=\"color: #339933;\">,<\/span> LOW<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> loop<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #009900;\">&#123;<\/span>\n  <span style=\"color: #666666; font-style: italic;\">\/\/ That's right--nothing to do here<\/span>\n<span style=\"color: #009900;\">&#125;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Counter Test 2 works, but not quite right. For some reason, I have to set the prescaler on timer 2 to \/64. At first, that worked quite well and gave me exactly what I expected, but by the time I &hellip; <a href=\"http:\/\/schminktronics.com\/blog\/archives\/160\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-160","post","type-post","status-publish","format-standard","hentry","category-spinnerhd"],"_links":{"self":[{"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/posts\/160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/comments?post=160"}],"version-history":[{"count":4,"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/posts\/160\/revisions"}],"predecessor-version":[{"id":176,"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/posts\/160\/revisions\/176"}],"wp:attachment":[{"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/media?parent=160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/categories?post=160"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/schminktronics.com\/blog\/wp-json\/wp\/v2\/tags?post=160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}