ciao a tutti, diciamo che avrei finito la meta' del programma, ho collegato un semplice schema con il cd4511 e il 74138 per il multiplex dei display, ma il risultato visivo e' alquanto scadente, mi spiego; ogni display visualizza in numero esatto, pero' i segmenti che dovrebbero essere spenti rimango leggermente accesi e il risultato visivo e' brutto,cosa potrebbe essere?
grazie.
// Arduino pins connected to the 74LS138
const uint8_t LedA1 = 6;
const uint8_t LedA2 = 7;
const uint8_t LedA3 = 8;
// Arduino pins connected to the 4511
const uint8_t LedA = 2;
const uint8_t LedB = 3;
const uint8_t LedC = 4;
const uint8_t LedD = 5;
void setup()
{
// Let the Arduino know which pins go where
pinMode(LedA, OUTPUT);
pinMode(LedB, OUTPUT);
pinMode(LedC, OUTPUT);
pinMode(LedD, OUTPUT);
pinMode(LedA1, OUTPUT);
pinMode(LedA2, OUTPUT);
pinMode(LedA3, OUTPUT);
digitalWrite(LedA1, LOW);
digitalWrite(LedA2, LOW);
digitalWrite(LedA3, LOW);
//Serial.begin(9600);
}
void loop()
{
print_number(724513);
}
void print_number(unsigned long int n) {
static int d = 2;
set_digit(d, n/100000);
set_digit(d, n/10000);
set_digit(d, n/1000);
set_digit(d, n/100);
set_digit(d, n/10);
set_digit(d, n/1);
}
void set_digit(const unsigned d, const unsigned long value) {
set_number_4511(value);
delay(d);
set_number_74138(value);
}
void set_number_4511(const unsigned long n) {
static const struct number {
uint8_t d;
uint8_t c;
uint8_t b;
uint8_t a;
} numbers[] = {
{ LOW, LOW, LOW, LOW}, /* 0 */
{ LOW, LOW, LOW, HIGH}, /* 1 */
{ LOW, LOW, HIGH, LOW}, /* 2 */
{ LOW, LOW, HIGH, HIGH}, /* 3 */
{ LOW, HIGH, LOW, LOW}, /* 4 */
{ LOW, HIGH, LOW, HIGH}, /* 5 */
{ LOW, HIGH, HIGH, LOW}, /* 6 */
{ LOW, HIGH, HIGH, HIGH}, /* 7 */
{HIGH, LOW, LOW, LOW}, /* 8 */
{HIGH, LOW, LOW, HIGH}, /* 9 */
};
digitalWrite(LedA, numbers[n%10].a);
digitalWrite(LedB, numbers[n%10].b);
digitalWrite(LedC, numbers[n%10].c);
digitalWrite(LedD, numbers[n%10].d);
}
void set_number_74138(const unsigned long int nx) {
static int tmp1,tmp2;
tmp1=tmp2;
static const struct numberx {
uint8_t cc;
uint8_t bb;
uint8_t aa;
} numbers1[] = { /* Mappa 74138 */
{ LOW, LOW, LOW}, /* 0 */
{ LOW, LOW, HIGH}, /* 1 */
{ LOW, HIGH, LOW}, /* 2 */
{ LOW, HIGH, HIGH}, /* 3 */
{ HIGH, LOW, LOW}, /* 4 */
{ HIGH, LOW, HIGH}, /* 5 */
};
digitalWrite(LedA1, numbers1[tmp1%10].aa);
digitalWrite(LedA2, numbers1[tmp1%10].bb);
digitalWrite(LedA3, numbers1[tmp1%10].cc);
tmp1++;
tmp2=tmp1;
if (tmp1>5)
{
tmp1=0;
tmp2=0;
}
}