Arduino Forum

Using Arduino => LEDs and Multiplexing => Topic started by: sblachh1985 on Mar 03, 2011, 09:09 pm

Title: 5 bit binary counter
Post by: sblachh1985 on Mar 03, 2011, 09:09 pm
Hello Everyone!

I am trying to control a 32 to 1 multiplexer with 5 address lines (A0-A4).  I want to create a 5-bit binary counter that outputs the bits to the pins of the arduino. 

This is just a small part of a larger test set up which has four 32to1 mux's with their outputs to the switches on a 4 to 1 mux.  In other words I am designing a 128 to 1 multiplexer using four 32to 1's and one 4 to 1. I am trying to control all of them with the Arduino UNO.  The EN (enables) are hooked up to the A0 - A5 pins on my Arduino Uno.  If the EN is set low none of the switches will work.  The idea is to enable one 32 to 1 at a time, and switch to all 32 switches.  Then enable the second etc etc....

But for now a 5-bit binary counter will be sufficient.

Any suggestions are welcome as I am new to the Arduino programming environment.

Thank you!!!
Title: Re: 5 bit binary counter
Post by: CrossRoads on Mar 03, 2011, 09:36 pm
go to ti.com and look for cmos counter.
chip like 74HC4040 will do, is 14 bits.
you can find smaller ones, like 8 bit.
or use a 4 bit and add another flip-flop for bit 5.
Title: Re: 5 bit binary counter
Post by: graynomad on Mar 04, 2011, 02:53 am
Five-bit counter with auto wrap around to 0

Code: [Select]
counter++ & B00011111;

If your output pins are on the same port and in a row then something like this

Code: [Select]

PORTB &= B11100000;
PORTB != counter;


If they are on pins all over the place then extract the bits and use a series of digitalWrites() to set the pins.

______
Rob

Title: Re: 5 bit binary counter
Post by: John_Smith on May 09, 2011, 01:09 am


I have the same requirements, and solved it as below, with 6 working lines.  The countPins output a normal binary sequence up to whatever is set by "switchbank"


Code: [Select]

int counter ;
int count0 ;
int count1 ;
int count2 ;
int count3 ;
int count4 ;

int countPin0 = 7;
int countPin1 = 8;
int countPin2 = 9;
int countPin3 = 13;
int countPin4 = 14;
  int switchbanks = 32;

void setup()
{   
  pinMode(countPin0, OUTPUT );
  pinMode(countPin1, OUTPUT );
  pinMode(countPin2, OUTPUT );
  pinMode(countPin3, OUTPUT );
  pinMode(countPin4, OUTPUT );
  counter = 0;
  Serial.begin(9600);
 
 
}
void loop ()
{
   for ( counter = 0; counter <= switchbanks ; counter ++ )  {
   if ( counter % 2 ) { count0 = HIGH; } else { count0 = LOW;   }
   if ( (counter / 2 )  % 2 ) { count1 = HIGH; } else { count1 = LOW;}
   if ( ( counter / 4 ) % 2 ) { count2 = HIGH; } else { count2 = LOW;}
   if ( (counter / 8 ) % 2 ) { count3 = HIGH; } else { count3 = LOW;}
   if ( (counter / 16 ) % 2 ) { count4 = HIGH; } else { count4 = LOW;}


   Serial.print ( "counter = "   );
  Serial.println ( counter );

    Serial.print ( "count0 = "   );
  Serial.println ( count0 );
 
  Serial.print ( "count1 = "   );
  Serial.println ( count1 );
 
  Serial.print ( "count2 = "   );
  Serial.println ( count2 );
 
    Serial.print ( "count3 = "   );
  Serial.println ( count3 );
 
    Serial.print ( "count4 = "   );
  Serial.println ( count4 );
 
  }
 
  delay ( 1000 );
}