Shift Register e Arduino Mega 2560

Salve, premetto che sono un principiante e che ultimamente sto riscontrando un problema di cui non ho trovato soluzione su internet, spero possiate aiutarmi

Mi sto occupando del classico progettino dell'ascensore e sto usando Arduino Mega 2560:

Ad ogni piano ho pensato di inserire un display a 7 segmenti per mostrare il piano in cui si trova la cabina, per farlo ho pensato di usare il 74HC595, un registro a scorrimento che comandato da arduino mi segnalasse il numero occupando solo 3 pin sulla scheda, fin qui tutto facile e sopratutto funzionante, sulla scheda Arduino UNO, che ho usato per testare il circuito e il codice su un singolo display.
Arrivato al corretto funzionamento del circuito sono passato a collegarlo ad Arduino Mega, e qui sono iniziati i problemi. Vi mostro comunque il codice:

int dataPin = 6;
int latchPin = 8;
int clockPin = 10;
const byte numero[4] = {
                    0b11111100, // 0
                    0b01100000, // 1
                    0b11011010, // 2
  		            0b00000000, // 4
};

void setup(){
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

void loop(){
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, numero[0]);
    digitalWrite(latchPin, HIGH);
    delay(2000);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, numero[1]);
    digitalWrite(latchPin, HIGH);
    delay(2000);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, numero[2]);
    digitalWrite(latchPin, HIGH);
    delay(2000);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, numero[4]);
    digitalWrite(latchPin, HIGH);
    delay(2000);
  
}

Data, Latch e Clock come per il circuito di prova su Arduino UNO sono collegati a dei pin digitali, ma mentre sul primo sembra funzionare con il MEGA il display non cambia e rimane fisso con tutti i segmenti illuminati.

Mi chiedo quindi se sia dovuto a qualche problema hardware della mia scheda (che vorrei escludere visto che con altri codici sembra funzionare normalmente), oppure se non ho tenuto conto di qualche differenza tra le due schede che deve portarmi a cambiare codice o collegamenti.

Buongiorno e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

Ti ringrazio, mi sono appena presentato!

Occhio che questo è sbagliato. 4 elementi vanno da 0 a 3 !!
Non so se è per questo che non funziona su Mega. Ma il tuo codice è sbagliato

Lo so, in realtà seguendo un tutorial avevo inteso che non fosse nemmeno necessario mettere i numeri in ordine, forse mi sarò confuso però a funzionare funziona quindi l'ho lasciato in questo modo
Fatto sta che ho provato in passato a riscrivere il codice anche nel modo in cui mi hai suggerito, ho anche provato a inviare manualmente i byte invece che richiamare la costante, ma niente.

Riguardando meglio c'e' un "doppio errore". Se hai 4 elementi, tu in elenco dopo 0b000000 metti vigola, quindi hai dato 5 elementi. Probabilmente il compilatore ha 5 elementi di cui il quinto (indice 4) è a valore 0 (forse).
Probabilmente il problema non è in questo errore del sw.
Magari è un problema hw, quindi aspetta consigli da un elettronico.

Probabile che il problema non sia SW

Perché pur essendo sbagliata l'inizializzazione dell' Array non dovrebbe sporcare la memoria, essendo l'ultima allocazione globale

Se realmente andava con la uno e se realmente il programma è stato riportato correttamente non dovrebbe essere un problema SW

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.