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!!!
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.
Five-bit counter with auto wrap around to 0
counter++ & B00011111;
If your output pins are on the same port and in a row then something like this
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
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"
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 );
}