Sari la conținut
ELFORUM - Forumul electronistilor

Ajutor cu un volt-termometru cu display OLED


fratello

Postări Recomandate

Am epuizat toate variantele (si rabdarea).

 

Invariabil se blocheaza Arduino cu displayul de 1.3", dupa un timp nedefinit.

Nu mai am decat aceste solutii :

-folosesc displayul mic  (hm...)

-incerc cu ESP32 ??? Dar asta inseamna sa o iau de la inceput, nu am mai folosit aceasta placa si imi e teama ca nu cumva, din cauza displayului, rezultatul final sa fie acelasi...

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

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Folosesti acelasi program pentru ambele afisaje OLED?

Daca da, e clar ca e din display.

Poti incerca sa adaugi rezistentele pe liniile SCL si SDA ca in schema postata de tine la pagina 2, normal displayul le are incluse, dar e posibil ca una dintre ele sa nu fie lipita bine si nu face contact continuu

ESP32 nu masoara foarte bine semnale analogice.

Link spre comentariu

Multumesc.

1. Acum ma duc sa lipesc niste rezistente de pull-up (desi, daca sunt ok ca valoare si bine lipite, nu le cresc valoarea punand altele in serie )?

2.Da, am citit ca rezolutia ADC pe 12 biti la ESP32 este mai proasta ca rezolutia pe 10 biti la Arduino ...

 

Ce noroc de bataie de cap am eu :(.

 

LE : Nicio schimbare. Intepeneste afisarea, intepeneste si serial monitorul...

Editat de fratello
Link spre comentariu

Toate versiunile de soft se blocheaza cu display de 1.3"

Schema este in postul #1

Acum folosesc softul din postul #1, cu adaugirile lui Nico (pentru monitorizare pe serial a temperaturii).

#include "U8glib.h"           
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
           
#define ONE_WIRE_BUS 2 //  pin of DS senzor DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;

//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // this is for SSD1306
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);    // this is for SH1106

const int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // resistance of R1 (100K)
float R2 =  10000.0; // resistance of R2 (10K) 
int value = 0;

double temp;



void setup()
{
  Serial.begin(38400);
  pinMode(analogInput, INPUT);
  sensors.begin();
  sensors.setResolution(tempDeviceAddress, 12);
}

void loop(){
   // read the value at analog input
   value = analogRead(analogInput);
   vout = (value * 5.0) / 1024.0; 
   vin = vout / (R2/(R1+R2)); 

if (vin<0.09) {
  vin=0.0;//statement to quash undesired reading !
  }
  
  // read the temperature
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  if (tempC != DEVICE_DISCONNECTED_C)
  {
    temp=tempC;
  }
  else
  {
    temp= 99.9;  //here error for no sensor !!!!
  }

  // prepare to display
  u8g.firstPage();  
  do 
    {
     draw();      
    }
  while( u8g.nextPage() );
  Serial.println(tempC);
delay(800);
}

//-----------------------------------------------
void draw(void) 
{
    u8g.setFont(u8g_font_helvB24r);          // select font
//  u8g.setFont(u8g_font_profont29r);        // another font
//  u8g.setFont(u8g_font_fub20r);			 // idem
//  u8g.setFont(u8g_font_fur20r);			 // ibidem
    u8g.drawRFrame(0, 30, 128, 32, 10);      // draw frame with rounded edges


if (vin>9.99) {
  u8g.setPrintPos(20,25);
  }
  else {
  u8g.setPrintPos(38,25); 
} 


  u8g.println(vin,1);                        //Print the voltage
  u8g.setPrintPos(84,25); 
  u8g.println(" V");


if ((temp<0)&& (abs(temp)<9.9)){
  u8g.setPrintPos(28,60);  
  u8g.println(temp,1);                       //Print the temperature
  u8g.drawCircle(87,40,4);
  u8g.drawCircle(87,40,3);
  u8g.println(" C ");  
  }
  else if (temp<0) {
  u8g.setPrintPos(10,60);   
  }
  else if (temp>9.99){
  u8g.setPrintPos(20,60);
  }
  else{
  u8g.setPrintPos(38,60);  
  }
  u8g.println(temp,1);                      //Print the temperature     
  u8g.drawCircle(88,40,4);
  u8g.drawCircle(88,40,3);
  u8g.println(" C");
}

 

 

Intre timp am primit si raspuns de la Olikraus

 

olikraus.thumb.jpg.0f245a0b7f58616b7f6e6304d8dee9d5.jpg

Editat de fratello
Link spre comentariu

Un display nu trebuie mai întâi inițializat? Dacă îi oprești alimentarea, fără inițializare cum mai pornește?

Iar inițializarea de obicei se face o singură dată la începutul programului. Asta înseamnă că numai resetul microcontrolerului poate să inițializeze displayul.

 

Programul a ieșit enorm de mare pentru un simplu voltmetru și un termometru. Încă un pic, și se ajunge la Windows :rade:  Un microcontroler cu 2K de flash și 128 octeți SRAM ar fi fost mai mult decât suficient pentru un protocol 1-wire și un display grafic micuț.

Link spre comentariu

Of...Am crezut ca s-a rezolvat, prin adaugarea rezistentelor de pull-up...L-am pornit aseara, pe la ora 7 ; la 2 inca functiona. Dar dimineata era intepenit :( ; a functionat deci cateva ore.

 

Urmatorul display il voi primi mai la primavara (comandat pe Ali, acum e sarbatoare la ei).

@Nico : are 4 pini, voi posta dupa-amiaza poze cu el, dar este exact acesta (de aici l-am luat).

@Antemir : displayul nu are pin reset (doar SCK si SDA).

@Cimitavita : ai dreptate ; am si o versiune muuult mai mica (in topic mai in urma), dar vreau eu musai cu aceste cifre mari, frumoase

 

Va multumesc tuturor pentru implicare si suport ! O zi frumoasa !

 

Link spre comentariu

Update :

-am mutat alimentarea displayului, de la 3v3 de pe placa Arduino, direct la 5v din sursa cu 7805

-am pus rezistente de pull-up de 10k direct pe pinii displayului

-am programat, din nou, cu codul postat putin mai sus

Montajul a functionat, fara sa se mai blocheze, de aseara, de la orele 19, pana dimineata, la ora 7 (cand am oprit alimentarea). Voi relua testele in acest weekend.

Multumesc pentru implicare si suport ! Sa aveti o zi placuta !

Editat de fratello
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