Se afișează postările cu eticheta 74hc164. Afișați toate postările
Se afișează postările cu eticheta 74hc164. Afișați toate postările

sâmbătă, 21 aprilie 2018

Display 7 segmente/8digiti cu 74HC164

Aveam luat de test un display cu 7 segmente 8 digiti, cu 74HC164, serial pe 2 fire, si mi-am facut un pic de timp pentru teste.
Acesta arata  ca mai jos:


Dupa ceva studiu, m-am oprit pe 2 articole cu tematica similara de aici si de aici, iar dupa citeva incercari am reusit sa-l aprind cum vreau eu. De mare ajutor a fost datasheet-ul circuitului.
Am definit cei 2 pini:

const int clock = 3; //CP
const int data = 2;  //DAT

iar logica de comanda este:

shiftOut(data,clock,LSBFIRST,B10011101); // 1SEGMENT STINS //ABCDEFGdp
shiftOut(data,clock,LSBFIRST,B00000010);// 1 DIGIT ACTIV
delay(1); //necesar pentru transfer (daca este mai mare de 10 devine evident transferul datelor)

curatarea display-ului 

shiftOut(data,clock,MSBFIRST,B11111111);
shiftOut(data,clock,MSBFIRST,B00000000);

Dupa ce am verificat aprinderea fiecarui digit cu numarul dorit, am atasat doua bucati LM35 ca sa vad cum se misca. Codul de test este pe github.


 Pentru teste am folosit un arduino nano:



Dar apare un flicker foarte obositor ce nu se vede in poza. Afisarea unor informatii statice este ok, in sensul ca nu deranjeaza ochiul, insa citind cele doaua intrari analogice flicker-ul este deranjant, problema ce ramine in studiu.
Tinta lui este sa-l leg la un ATTINY85 ce urmeaza sa soseasca si voi face un voltmetru/ampermetru iar atunci voi mai lucra la reducerea tremuratului.

La sugestia lui Nicu Florica, pentru diminuarea tremuratului am incercat sa micsorez delay-ul de transfer folosind functia delayMicroseconds(j); insa timpul era prea scurt ca sa reuseasca sa aprinda LED-ul, acesta fiind mai mult stins. Cum tremuratul apare doar in cazul citirii intrarilor analogice, am pus partea de afisare intr-o bucla ca sa-l fortez sa citeasca mai rar cele 2 intrari:

int i;
 for (i=50;i>0;--i)
 {
shiftOut(data,clock, LSBFIRST, value[second_digit]); //delay(5);//NR
  shiftOut(data,clock, LSBFIRST, digit[3]);
  delay(2);
// delayMicroseconds(4000);
  shiftOut(data,clock, LSBFIRST, value[third_digit]); //delay(5);//NR
  shiftOut(data,clock, LSBFIRST, digit[2]);
  delay(2);
................................etc..................
  }

delay(2); reuseste sa asigure o luminozitate decenta, iar i=50 reduce semnificativ tremuratul fara a afecta valoarea citita si afisata.
Am facut si un filmulet cu telefonul iar in prima parte apare un tremurat datorita lampii cu neon, in realitate este insesizabil, insa ceea ce se vede era vizibil inainte de a pune bucla in cod. Spre finalul filmului am stins neonul, in film apare un usor tremurat dar este cauzat de camera video a telefonului. 

Amplificator ultra simplu cu MOS 40W/8Ohm la 2x30V

 Am început construcția unui amplificator cu tranzistori MOS după o schemă proiectată de Ionel Epure , care se împacă foarte bine cu boxele ...