Go Down

Topic: problema shift in con 74hc165 shift out con 74hc595 (Read 1 time) previous topic - next topic

damosound

salve a tutti
volevo esporvi un problema a cui non riesco a venire a capo!
il mio intento, come da oggetto, è quello di leggere lo stato di 8 tasti con l'ausilio del 74hc165 e di verificare il loro stato con l'74hc595
vi allego il codice:
Code: [Select]

// test shift register in input 74hc165 e test shift register in out
//  scansiona 8 tasti dal 165, e riproduce il loro stato su 8 led collegati al 595
int dout=4;//data out pin 14 del 595
int clo=2;// clock pin 11 del 595
int lo=3;// latch pin 12 del 595

int din=8;//data in pin 9 del 165
int cin=2;//clock pin 2 del 165
int lin=3;//latch pin 1 del 165
 
void setup()
{ //pin 595
  pinMode(clo,OUTPUT); 
  pinMode(dout,OUTPUT);
  pinMode(lo,OUTPUT);
  //pin 165
  pinMode(cin,OUTPUT);
  pinMode(din,INPUT);
  pinMode(lin,OUTPUT);
}
int READ(int dat,int cl)  //funzione di lettura shift register
{ int val;
   val= digitalRead(dat);  //lettura dato
  digitalWrite(cl,LOW);
  digitalWrite(cl,HIGH);  //clock
  digitalWrite(cl,LOW);
  return val;             //ritorna il valore letto
}


void Stampabasso(int dat,int cl) //stampa bit basso
{ digitalWrite(dat,LOW);
  digitalWrite(cl,LOW);
  digitalWrite(cl,HIGH);
  digitalWrite(cl,LOW);
}

void Stampaalto(int dat,int cl)  //stampa pin alto
{ digitalWrite(dat,HIGH);
  digitalWrite(cl,LOW);
  digitalWrite(cl,HIGH);
  digitalWrite(cl,LOW);
}


void loop()
{
  int i=0;
  int arr[8]={0,0,0,0,0,0,0,0}; //array lettura, azzerato
  digitalWrite(lin,HIGH);
  delay(150);
  digitalWrite(lin,LOW);  //faccio entrare gli ingressi nel 165
  digitalWrite(lin,HIGH);
 
  for(i=0;i<8;i++)
  {
    arr[i]=READ(din,cin);  //inserisce nell'array il valore del dato letto
  }


 
  // scrittura
  digitalWrite(lo,LOW);
  digitalWrite(lo,HIGH);
  digitalWrite(lo,LOW);
  delay(20);

{for(i=0;i<8;i++)
{if(arr[i]==1)
   {Stampaalto(dout,clo);}
  else
   {Stampabasso(dout,clo);}
}

  }
  delay(150);

}


Nella parte di scrittura del 595 non ho problemi, ho provato separatamente le funzioni, e pare girare bene.

non riesco a far girare la parte dello shift in, ovvero anche se cambio lo stato dei tasti i led rimangono sempre e tutti accesi.
cosa sbaglio!???
grazie!





Michele Menniti

Quote
il mio intento, come da oggetto, è quello di leggere lo stato di 8 tasti con l'ausilio del 74hc165 e di verificare il loro stato con l'74hc595

scusa, per meglio capire, che differenza intendi tra "leggere" e "verificare" lo stato di 8 tasti?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

pelletta

int dout=4;//data out pin 14 del 595
int clo=2;// clock pin 11 del 595
int lo=3;// latch pin 12 del 595

int din=8;//data in pin 9 del 165
int cin=2;//clock pin 2 del 165
int lin=3;//latch pin 1 del 165

damosound

grazie pelletta! ho risolto!
mi era proprio sfuggito
buona serata!

pelletta

La distrazione fa passare brutte serate a volte  ;)

Michele Menniti

:smiley-eek:
L'importante è che la questione sia risolta, ma togliere qualche dubbio non sarebbe male. Poiché damosound ha deciso di ignorare bellamente la mia domanda (ma è un suo sacrosanto diritto), vorrei sapere almeno da BUD in che consiste il suo intervento.
Io leggo il codice postato all'inizio e le righe suggerite da te ed a me sembrano ASSOLUTAMENTE identiche, a pèarte le dimensioni ed il colore che tu hai dato a quei 2 e 3, e non credo che sia questa la soluzione.
Quindi, se non scoccia pure a te, mi spieghi perché un suggerimento identico al post originale dovrebbe risolvere un problema?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

pelletta

#6
Oct 05, 2012, 12:53 am Last Edit: Oct 05, 2012, 01:33 am by Pelletta Reason: 1
Mike, ti do un bel 3!

Ha assegnato gli stessi pin di arduino a entrambi gli shift register, ecco perchè ho evidenziato i numeri.

Come punizione mezz'ora in ginocchio sui ceci :smiley-yell:

;)

Michele Menniti

eh no caro, non ci sto! intanto credo che lui abbia sbagliato a porre la domanda, usando due verbi con lo stesso significato riferiti a due integrati con funzionamento "opposto", senza possibilità di vedere uno schema elettrico, figuriamoci se mi mettevo ad analizzare il programma, visto che la programmazione non è proprio quel che si dice il "mio forte" :D, quindi mi sono limitato a leggere il tuo suggerimento e confrontarlo con il suo firmware. Di solito si suggerisce la soluzione corretta o si fa presente l'errore; tu ti sei affidato al silenzio stampa ed allo spirito di deduzione di chi ha commesso l'errore; io una caxxata del genere, scarso come sono, non l'avrei fatta mai, semplicemente eprché non metto mai mano ad un firmware se prima non disegno uno schema elettrico e realizzo l'hardware ;)
Quindi il 3 non lo merito e non lo voglio, i ceci sì, domani finiscono in pentola con 150g di ditalini, grazie del pensiero e a buon rendere 8)
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

pelletta

#8
Oct 05, 2012, 01:14 am Last Edit: Oct 05, 2012, 01:28 am by Pelletta Reason: 1
Ecco, lo sapevo che si arrabbiava XD

Nemmeno io ho visto tutto il firmware, ho notato subito quell'errore di distrazione e l'ho evidenziato.
Non credo sia necessario lo schema elettrico quando vengono inizializzati gli stessi pin di arduino a più integrati che per altro svolgono funzioni differenti.
Poi magari il problema era altrove, intanto quella cosa era da sistemare.
Come giustamente hai detto, non avendo visto lo schema elettrico non potevo suggerire una modifica al firmware quindi mi sono limitato a segnalare l'errore.

Go Up