<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Digital Hexadecimal timer, problem displaying bits converted to segments... in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-Hexadecimal-timer-problem-displaying-bits-converted-to/m-p/150030#M8024</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#include &amp;lt;hidef.h&amp;gt; /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#define MASK_BITS1 0xF00 //Masks bits 11-8 on#define MASK_BITS2 0x0F0 //Masks bits 7-4 on#define MASK_BITS3 0x00F //Masks bits 3-0 on #define MASK_NIBBLE 0x0F // Masks buts 7-4 off #define DIGIT_PORT&amp;nbsp; PTFD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Port F used for digits//#define DIGIT_MASK&amp;nbsp; 0xF0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used to mask bits 7,6 and 5 in Port F//#define SEG_PORT&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Port B used for segments //#define SEG_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x7F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used to mask Port B for correct output//#define Mask_Digits 0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //used to mask variable digits to 00000011// Function Prototypes //unsigned char NibbleToSegments(unsigned char);void delay(long int);void Output_Seven_Segments(unsigned char, unsigned char);void main(void);unsigned char NibbleToSegments (unsigned char nibble){&amp;nbsp; const byte Segment_Lookup[16] =&amp;nbsp;&amp;nbsp; // Lookup table for hex numbers to segments on{&amp;nbsp;&amp;nbsp;&amp;nbsp; 63,6,91,79,102,109,125,7,127,103,119,124,57,94,121,113}; nibble&amp;amp;=MASK_NIBBLE;&amp;nbsp; return Segment_Lookup[nibble];}&amp;nbsp;&amp;nbsp; void delay(long int n){ long int i; unsigned int j; for (i=0; i&amp;lt;n; i++)&amp;nbsp;&amp;nbsp; for (j=0; j&amp;lt;1000; j++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {}}&amp;nbsp; void Output_Seven_Segments (unsigned char segments ,unsigned char digit){ //Remember: segments variable is formed as: //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DP g f e d c b a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; digit &amp;amp;= Mask_Digits; //Mask variable digit to '00000011'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT &amp;amp;= ~DIGIT_MASK;&amp;nbsp; // Set all digits OFF //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEG_PORT = segments &amp;amp; SEG_MASK;&amp;nbsp; //Port B assigned vairable segments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT = (0x80 &amp;gt;&amp;gt; digit);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Turn on the proper digit}void main (void){&amp;nbsp;&amp;nbsp; unsigned char segment;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int time;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts; /* enable interrupts */&amp;nbsp; // Set DDRs for output ports&amp;nbsp;&amp;nbsp; SOPT_COPE = 0;//Disable watchdog timer&amp;nbsp;&amp;nbsp; PTADD = 0x02; // Replace XX with the hex value to set the PA2 and PA1 as outputs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTFDD = 0xE0; // Same here, setting the inputs/outputs for port F&amp;nbsp;&amp;nbsp; PTBDD = 0xFF; // Setting the input/outputs for Port B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (;;)&amp;nbsp; //Loop forever (as always!) {&amp;nbsp;&amp;nbsp; time++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; segment=(time&amp;amp;MASK_BITS1);&amp;nbsp;&amp;nbsp;&amp;nbsp; NibbleToSegments(segment);&amp;nbsp;&amp;nbsp;&amp;nbsp; Output_Seven_Segments(segment,0);&amp;nbsp; //Convert to Segments and Output bits (11:8) of time&amp;nbsp; delay(1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; segment=(time&amp;amp;MASK_BITS2);&amp;nbsp;&amp;nbsp;&amp;nbsp; NibbleToSegments(segment);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Output_Seven_Segments(segment,1);&amp;nbsp; //Convert to Segments and Output bits (7:4) of time&amp;nbsp; delay(1);&amp;nbsp;&amp;nbsp; segment=(time&amp;amp;MASK_BITS3);&amp;nbsp; NibbleToSegments(segment);&amp;nbsp;&amp;nbsp;&amp;nbsp; Output_Seven_Segments(segment,2);&amp;nbsp; //Convert ...&amp;nbsp; bits (3:0) of time&amp;nbsp; delay(1); }}&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;Ok, this is a digital hexadecimal timer I am currently working on. The code above is correct apart from one bug. The display doesn't pick up the values from the look up table. Its still just displaying each individual segment in some form of digital binary counter. Any suggestions as to what the problem is? I will also replace the delay with a timer subroutine but I know how to do that. The hex numbers are different for this as there is a manufacturing fault on the board so these are the correct values for this board.&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by karmabobby on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2008-04-24&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;11:02 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 29 Oct 2020 08:52:11 GMT</pubDate>
    <dc:creator>karmabobby</dc:creator>
    <dc:date>2020-10-29T08:52:11Z</dc:date>
    <item>
      <title>Digital Hexadecimal timer, problem displaying bits converted to segments...</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-Hexadecimal-timer-problem-displaying-bits-converted-to/m-p/150030#M8024</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#include &amp;lt;hidef.h&amp;gt; /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#define MASK_BITS1 0xF00 //Masks bits 11-8 on#define MASK_BITS2 0x0F0 //Masks bits 7-4 on#define MASK_BITS3 0x00F //Masks bits 3-0 on #define MASK_NIBBLE 0x0F // Masks buts 7-4 off #define DIGIT_PORT&amp;nbsp; PTFD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Port F used for digits//#define DIGIT_MASK&amp;nbsp; 0xF0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used to mask bits 7,6 and 5 in Port F//#define SEG_PORT&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Port B used for segments //#define SEG_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x7F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used to mask Port B for correct output//#define Mask_Digits 0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //used to mask variable digits to 00000011// Function Prototypes //unsigned char NibbleToSegments(unsigned char);void delay(long int);void Output_Seven_Segments(unsigned char, unsigned char);void main(void);unsigned char NibbleToSegments (unsigned char nibble){&amp;nbsp; const byte Segment_Lookup[16] =&amp;nbsp;&amp;nbsp; // Lookup table for hex numbers to segments on{&amp;nbsp;&amp;nbsp;&amp;nbsp; 63,6,91,79,102,109,125,7,127,103,119,124,57,94,121,113}; nibble&amp;amp;=MASK_NIBBLE;&amp;nbsp; return Segment_Lookup[nibble];}&amp;nbsp;&amp;nbsp; void delay(long int n){ long int i; unsigned int j; for (i=0; i&amp;lt;n; i++)&amp;nbsp;&amp;nbsp; for (j=0; j&amp;lt;1000; j++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {}}&amp;nbsp; void Output_Seven_Segments (unsigned char segments ,unsigned char digit){ //Remember: segments variable is formed as: //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DP g f e d c b a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; digit &amp;amp;= Mask_Digits; //Mask variable digit to '00000011'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT &amp;amp;= ~DIGIT_MASK;&amp;nbsp; // Set all digits OFF //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEG_PORT = segments &amp;amp; SEG_MASK;&amp;nbsp; //Port B assigned vairable segments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT = (0x80 &amp;gt;&amp;gt; digit);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Turn on the proper digit}void main (void){&amp;nbsp;&amp;nbsp; unsigned char segment;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int time;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts; /* enable interrupts */&amp;nbsp; // Set DDRs for output ports&amp;nbsp;&amp;nbsp; SOPT_COPE = 0;//Disable watchdog timer&amp;nbsp;&amp;nbsp; PTADD = 0x02; // Replace XX with the hex value to set the PA2 and PA1 as outputs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTFDD = 0xE0; // Same here, setting the inputs/outputs for port F&amp;nbsp;&amp;nbsp; PTBDD = 0xFF; // Setting the input/outputs for Port B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (;;)&amp;nbsp; //Loop forever (as always!) {&amp;nbsp;&amp;nbsp; time++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; segment=(time&amp;amp;MASK_BITS1);&amp;nbsp;&amp;nbsp;&amp;nbsp; NibbleToSegments(segment);&amp;nbsp;&amp;nbsp;&amp;nbsp; Output_Seven_Segments(segment,0);&amp;nbsp; //Convert to Segments and Output bits (11:8) of time&amp;nbsp; delay(1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; segment=(time&amp;amp;MASK_BITS2);&amp;nbsp;&amp;nbsp;&amp;nbsp; NibbleToSegments(segment);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Output_Seven_Segments(segment,1);&amp;nbsp; //Convert to Segments and Output bits (7:4) of time&amp;nbsp; delay(1);&amp;nbsp;&amp;nbsp; segment=(time&amp;amp;MASK_BITS3);&amp;nbsp; NibbleToSegments(segment);&amp;nbsp;&amp;nbsp;&amp;nbsp; Output_Seven_Segments(segment,2);&amp;nbsp; //Convert ...&amp;nbsp; bits (3:0) of time&amp;nbsp; delay(1); }}&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;Ok, this is a digital hexadecimal timer I am currently working on. The code above is correct apart from one bug. The display doesn't pick up the values from the look up table. Its still just displaying each individual segment in some form of digital binary counter. Any suggestions as to what the problem is? I will also replace the delay with a timer subroutine but I know how to do that. The hex numbers are different for this as there is a manufacturing fault on the board so these are the correct values for this board.&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by karmabobby on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2008-04-24&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;11:02 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 08:52:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-Hexadecimal-timer-problem-displaying-bits-converted-to/m-p/150030#M8024</guid>
      <dc:creator>karmabobby</dc:creator>
      <dc:date>2020-10-29T08:52:11Z</dc:date>
    </item>
    <item>
      <title>Re: Digital Hexadecimal timer, problem displaying bits converted to segments...</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-Hexadecimal-timer-problem-displaying-bits-converted-to/m-p/150031#M8025</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I haven't looked completely through the program but NibbleToSegments returns a value that you are not using, I think that you want to read this value into segment in,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;segment = NibbleToSegment(segment);&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 08:52:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-Hexadecimal-timer-problem-displaying-bits-converted-to/m-p/150031#M8025</guid>
      <dc:creator>allawtterb</dc:creator>
      <dc:date>2020-10-29T08:52:13Z</dc:date>
    </item>
  </channel>
</rss>

