Sari la conținut
ELFORUM - Forumul electronistilor

Termometru cu DS18B20 si Digiti LED


GeoMar

Postări Recomandate

Am incercat sa realizez si eu un termometru cu senzor DS18B20 cu afisare multiplexata pe un afisaj cu 4 digiti LED, Anod Comun.
Am cautat informatii pe net si am reusit sa scriu un mic cod pentru Arduino UNO, functioneaza ok, afiseaza ok temperatura pe digiti, dar am un licarit (palpait) suparator la afisaj.
Nu am mai lucrat cu multiplexare digiti LED si cred ca asta este si cauza, gresesc eu undeva fiind primul proiect cu multiplexare digiti LED.
As dori, daca se poate, o solutie ca sa scap de acel licarit suparator al afisajului.
Mentionez ca sunt incepator cu Arduino.

Multumesc anticipat pentru ajutor.

 

Codul testat de mine:

#include <SevenSeg.h>
#include <OneWire.h>
#include <DallasTemperature.h>

SevenSeg disp (8, 10, 6, 4, 3, 9, 7);
const int numOfDigits = 4;
int digitPins [ numOfDigits ] = { A2, A3, A4, A5};

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  disp . setDigitPins ( numOfDigits , digitPins );
  disp . setDPPin (5) ;
  sensors.begin();
  disp.setDutyCycle(80);

}

void loop() {
  sensors.requestTemperatures();
  disp . write (sensors.getTempCByIndex(0), 1) ;
  disp.setRefreshRate(100);
}

 

Link spre comentariu
  • Răspunsuri 45
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Un prim pas ar fi acela de a muta instructiunea 

 disp.setRefreshRate(100);

 in functia void setup(), iar in loc de valoarea 100 sa incercati si valori mai mari.
Cel mai bun mod de a comanda afisoare cu 7 segmente esta acela in care se foloseste o intrerupere generata de unul din timere.
Vedeti acest exemplu de afisare bazat pe folosirea unei intreruperi.

 

Link spre comentariu
Acum 5 minute, costi002 a spus:

Valoarea de aici


disp.setDutyCycle(80);

ai incercat sa o modifici?

Da am incercat, daca micsorez (30) scade luminozitatea afisaj, o cresc ( pana la 100) creste luminozitatea.

De aceea am si apelat pe forum, nu stiu cum sa elimin acel licarit.
Am ceasul contruit de @GanMark cel cu 8 digiti LED, de la rusi, acela merge super, nu licare, cand afiseaza temp se modifica cifra dupa punct (zecimala) fara licarit.

Editat de GeoMar
Link spre comentariu

DS18B20 necestia timpi destul de precisi la citire. Din cauza asta rutina de citire a lui DS18B20 blocheaza tot microcontrolerul. Ca sa nu mai clipeasca afisajul, trebuie sa amesteci rutina de citire a lui DS18B20 cu cea de afisare, respectand in acelasi timp toti timpii pentru DS18B20. Ceea ce e imposibil in C...

Eventual poti face citiri mai rare a lui DS18B20 si mai multe afisari. Dar afisajul tot o sa clipeasca in timpul citirii lui DS18B20.

Link spre comentariu

Nu ma pricep prea bine dar e clar ca ai un delay aiurea ce nu este facut cu intreruperi, posibil chiar sa fie ceva din biblioteca.

Incearca sa afisezi ceva dar fara a avea legatura cu citirea / biblioteca DS-ului. E normal ca atunci cand pui un factor de umplere mic sa ai o scadere a luminozitatii cum e normal sa se intample cand ai o rata foarte mare de actulizare / frecveta.

l.e: cimitavita a dat un raspunt complet si a fost mai rapid.

Am o problema oarecum similara la citirea / trimiterea valorilor unui DS18B20 pe MODBUS TCP/IP, trebuie sa asptept cel putin 750ms pana am rezultatul de la senzor.

 

Link spre comentariu

Ok, am inteles, NU se poate fara acel licarit.
Ca sa "camuflam" acel licarit ca sa nu mai fie vizibil, cum modific in soft ca sa faca ceva asemnator ca in clipul atasat si sa pot citi mai multi senzori DS (4-5)?

 

L.E.

Se vede in clip ca atunci cand afiseaza temperatura senzorului 4 si 6 se actualizeaza fara licarit digitul 3, cel dupa virgula. Cum se poate face acest lucru fara acel licarit al afisajului?

 

Editat de GeoMar
Link spre comentariu

Se poate face fara sa licare, dar numai cel ce a facut biblioteca stie ce e de facut. De aceea imi place sa imi fac singur anumite rutinele, sa stii exact ce se intampla acolo. DS-ul face relativ greu conversia, dar nu e nevoie sa stai dupa el. Ii dai comanda de conversie, apoi il lasi sa isi faca treba, intre timp, afisezi valoarea anterioara.

Link spre comentariu

Ciao

In principiu acel licarit vine de la frecventa de afisare! In trecut am studiat in Bascom AVR problema asta si mi-am dat seama ca acest licarit vine de la frecventa de afisare! Nu intru in detalii ca presupun  ca sa studiat cum se face multiplexarea, dar trebuie cautat in rutine cat timp ii ia sa se mute de pe digit-ul 1 la digit 2 si respectiv 3! Daca acolo este frecventa mare atunci e clarca este de la rutina DS-ului care, cum spune cineva mai sus, poate dura conversia si atunci blocheaza mcu-ul respectiv apare acel licarit!

Nu cunosc codul Arduino, ca m-am jucat/ma joc in Bascom avr dar poti sa incerci sa verifice 1 data la 30 de secunde, temperatura si atunci acel licarit va avea loc doar la 30 sec. dar am eu impresia ca nici nu-l vei observa! 

O alta idee ar mai putea fi sa tatonezi un condesator de cativa nano in baza tranzistorilor multiplexori dupa rezistorul limitator!

O alta problema poate fi insusi tranzistorii, care pot fi o idee mai lenti si sa comute mai greoi, si spun asta deoarece am folosit in trecut pentru anod comun (sau catod...ca astea le tot incurc fara datasheet)  ceva pnp-uri si nu imi licarea dar in schimb unii digiti imi luminau mai tare, altii mai incet si treaba era random , se tot muta de la un digit la altul, pana cand am schimbat pnp-urile cu bc516 si ceasul a finctionat foarte ok! Tot de aici trebuie verificat daca acesti tranzistori furnizeaza curentul necesar ledurilor cand sunt toate aprinse!

O zi faina!

Link spre comentariu

Momentan pe breadboard NU am montati tranzistori.
Atat digitii cat si segmentele sunt comandate direct de arduino.
Am sa arunc o privire si prin librarie, dar sunt incepator, sa vad ce este pe acolo.

Editat de GeoMar
Link spre comentariu

Salut, GeoMar ! Eu m-am chinuit in zadar sa rezolv exact aceasta problema, dar cu program scris in PicBasicPro. Dupa luni de teste si muuulte sfaturi primite pe forumul de profil, am renuntat ! Pur si simplu nu am putut scapa de acel flicker ...

In alte limbaje de programare se poate scrie un soft perfect, fara niciun flicker ! Dar in PBP nu !

Sper ca tu sa gasesti totusi o rezolvare ! Bafta !

In atasament ai un model de termometru, FARA FLICKER (testat). Nu stiu exact in ce limbaj e scris...dar poate te ajuta cumva.

vnnik.zip

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări