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. 

luni, 9 aprilie 2018

Ceas cu raspberry pi zero si TM1637

Pentru a ma obisnui cu programarea in python pe raspberry pi am inceput cu ceva simplu, un ceas sincronizat pe internet care afiseaza pe un display cu 7 segmente comandat cu TM1637.
Am folosit un raspberry pi zero cu un adaptor WIFI pe care am instalat raspbian. i-am facut update-urile si am instalat wiringpi si wirinpi2 conform datelor din link. Celelalte pachete erau deja instalate.
Cautind exemple mi-a atras atentia codul de aici pentru simplitatea lui. 
Am modificat codul anulind partea de afisare IP care nu ma interesa, si am redefinit pinii pentru DIO si CLK ai lui TM1637 iar dupa executare mi-a afisat imediat ora sistemului


Insa la acest exemplu nu m-am prins cum sa modific luminozitatea, asa ca am mai "sapat" un pic si am ajuns aici unde aveam posibilitatea de a umbla la luminozitate. In cod am redefinit  din nou pinii pentru a nu mai umbla la conexiuni. Astfel dupa citeva incercari am reusit sa gasesc luminozitatea dorita.
Pentru a porni la start am editat /etc/rc.local adaugind linia de mai jos:

python /home/pi/clock/clock-zero.py

Am dat reboot si ceasul a pornit automat. Astfel, atita timp cit va fi conectat la internet va arata tot timpul ora sistemului
Display-ul folosit s-a nimerit sa aiba aceasi dimensiune cu placuta de raspberry pi zero si s-a potrivit perfect si la gauri.


Fake ATX cu WT7520

Zilele astea am fost solicitat sa repar si apoi sa modific sursa de mai jos la tensiunea maxima ce o poate scoate. Cred ca e cea mai "...