Pages: [1]   Go Down
Author Topic: Display HD44780 4x20 spariscono le scritte  (Read 680 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, ho recentemente realizzato un controller per il mio acquario con arduino uno, un display HD44780 4x20 green, un sensore di temperatura DS18B20 e una pcb con relè 5v autocostruita. Il controller, controlla la temperatura della vasca, accende le luci in base all'orario e accende riscaldatore e ventola in base alla temperatura.
Momentaneamente ho caricato il programma e lo sto testando a vuoto senza pcb a relè collegata e funziona tutto a meraviglia.
Ho però un piccolo problema. durante il funzionamento del programma, a volte spariscono i caratteri dal display e si presenta solamente con la retroilluminazione. Se tolgo l'alimentazione alla scheda arduino e la reinserisco tutto riprende a funzionare  e i caratteri vengono visualizzati.
Questo problema succede random cioè: a volte capita dopo 2 ore, a volte dopo 10 e altre dopo anche 20 ore.
Secondo voi a cosa può essere dovuto? Al software o all'hardware?
Preciso che arduino è alimentato solamente con un alimentatore esterno a 5v dedicato.
Potrebbe essere che il programma vada in palla quando attiva le uscite digitali che io ho collegato ma ho lasciato per il momento senza relè e cioè senza carico??
Grazie a tutti quelli che cercheranno di aiutarmi  smiley
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23122
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Riguardo al problema software, potrebbe aiutarti questa:
http://arduino.cc/forum/index.php/topic,139118.0.html
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21936
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Una sfera di cristallo per favore.  smiley-wink

simonfe come pensi che Ti potremmo aiutare se non ci dai ne il circuito ne lo sketch del Tuo progetto?

Dalle informazioni che ho a disposizione non posso valutare se é piú probabile che il problema sia SW o HW.

Ciao Uwe

Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 555
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ha ragione uwefed, però se come tu dici, alimenti l' arduino con solo 5v, allora sono troppo pochi.
Arduino deve essere alimentato con una tensione da 7 a 12. Questo per varie ragioni... poi dipende anche come alimenti tutto il resto... relè compresi.
Quindi se posti uno schema e maggiori dettagli, anche noi potremo essere più precisi.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti. Grazie per le risposte. Avete ragione. Senza schema e sketch non è sicuramente possibile aiutarmi.
Purtroppo sono alle prime armi con la programmazione e non so se tutto quello che ho scritto va bene o può creare dei conflitti.
Provo a postarvelo:  smiley-roll-sweat
Per lo schema devo buttarlo giu ma ho collegato tutto diretto ad arduino (nessuna seriale)

Code:
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>


#define ONE_WIRE_BUS 2
#define Luce1 10                              
#define Luce2 11                          
#define Risc 12                            
#define Vent 13                                    


const int Luce1oraacc = 13  ;
const int Luce1minutiacc = 30 ;
const int Luce2oraacc = 13  ;
const int Luce2minutiacc = 50 ;
const int Luce1oraspe = 23  ;
const int Luce1minutispe = 50 ;
const int Luce2oraspe = 23  ;
const int Luce2minutispe = 30 ;
const int Temprisc = 26 ;
const int Tempvent = 28 ;

//------------------------------------------------------------------------
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float temperatura;
char buffer[10];
RTC_DS1307 RTC;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

byte oldSecond =0;                  
byte richiestaTemperatura=0;        
long oldMillis;                  

void setup () {
  sensors.begin();
  Wire.begin();
  RTC.begin();
  lcd.begin(20, 4);
  
digitalWrite( Luce1,LOW );                    
digitalWrite( Luce2,LOW );                    
digitalWrite( Risc,LOW );
digitalWrite( Vent,LOW );



  if (! RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  sensors.setWaitForConversion(false);  

}

void loop () {

  DateTime now = RTC.now();
  if (oldSecond != now.second()) {
          
      if ((now.hour() >= Luce1oraacc) && (now.minute() >=Luce1minutiacc) || (now.hour() > Luce1oraacc) && (now.minute() < Luce1minutiacc)){
      lcd.setCursor(0, 2);
      lcd.print F("Luce1:");
      lcd.print F("[");
      lcd.print F("X");
      lcd.print F("]");
      digitalWrite(Luce1, HIGH);}
else
 {
      lcd.setCursor(0, 2);
      lcd.print F("Luce1:");
      lcd.print F("[");
      lcd.print F(" ");
      lcd.print F("]");
      digitalWrite(Luce1, LOW);}

      if ((now.hour() >= Luce1oraspe) && (now.minute() >=Luce1minutispe) || (now.hour() > Luce1oraspe) && (now.minute() < Luce1minutispe)){
      lcd.setCursor(0, 2);
      lcd.print F("Luce1:");
      lcd.print F("[");
      lcd.print F(" ");
      lcd.print F("]");
      digitalWrite(Luce1, LOW);}

          
      if ((now.hour() >= Luce2oraacc) && (now.minute() >=Luce2minutiacc) || (now.hour() > Luce2oraacc) && (now.minute() < Luce2minutiacc)){
      lcd.setCursor(0, 3);
      lcd.print F("Luce2:");
      lcd.print F("[");
      lcd.print F("X");
      lcd.print F("]");
      digitalWrite(Luce2, HIGH);}
else
 {
      lcd.setCursor(0, 3);
      lcd.print F("Luce2:");
      lcd.print F("[");
      lcd.print F(" ");
      lcd.print F("]");
      digitalWrite(Luce2, LOW);}

      if ((now.hour() >= Luce2oraspe) && (now.minute() >=Luce2minutispe) || (now.hour() > Luce2oraspe) && (now.minute() < Luce2minutispe)){
      lcd.setCursor(0, 3);
      lcd.print F("Luce2:");
      lcd.print F("[");
      lcd.print F(" ");
      lcd.print F("]");
      digitalWrite(Luce2, LOW);}
      
if (sensors.getTempCByIndex(0)<=Temprisc){
       lcd.setCursor(11, 2);
      lcd.print F("Risc.:");
      lcd.print F("[");
      lcd.print F("X");
      lcd.print F("]");
  digitalWrite(Risc, HIGH);}
 else {
        lcd.setCursor(11, 2);
      lcd.print F("Risc.:");
      lcd.print F("[");
      lcd.print F(" ");
      lcd.print F("]");
  digitalWrite(Risc, LOW);
}

if (sensors.getTempCByIndex(0)>=Tempvent){
       lcd.setCursor(11, 3);
      lcd.print F("Vent.:");
      lcd.print F("[");
      lcd.print F("X");
      lcd.print F("]");
  digitalWrite(Vent, HIGH);}
 else {
        lcd.setCursor(11, 3);
      lcd.print F("Vent.:");
      lcd.print F("[");
      lcd.print F(" ");
      lcd.print F("]");
  digitalWrite(Vent, LOW);
}

    if (richiestaTemperatura == 0) {
      sensors.requestTemperatures();
      richiestaTemperatura = 1;  
      oldMillis = millis();
    }
  }  

  long ciccio = millis();
  if (richiestaTemperatura == 1)
  {
    if (ciccio-oldMillis > 750) {
      {
        richiestaTemperatura = 0;
        lcd.setCursor(0, 1);
        lcd.print F("Temp. H2o:  ");
        lcd.print (sensors.getTempCByIndex(0));
        lcd.write (0b11011111);
        lcd.print F("C");
      }

  

    //stampa data ed ora
    sprintf(buffer,  "%02d/%02d/%d", now.day(), now.month(), now.year());
    lcd.setCursor(0, 0);
    lcd.print( buffer );
    char buffer[10] = "";
    sprintf(buffer,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    lcd.setCursor(12, 0);
    lcd.print( buffer );


    }
      }

    }

edit by mod: per favore includi il codice negli appositi tag, grazie
« Last Edit: March 11, 2013, 11:19:10 am by leo72 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 115
Posts: 7254
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Devi trasformare tutti i print da così:
Code:
lcd.print F("Luce1:");
a così
Code:
lcd.print(F("Luce1:"));
Hai dimenticato una coppia le parentesi.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusatemi per non aver incluso il codice negli appositi tag. Sto imparando.
Grazie infinite a tutti per gli aiuti.
Grazie anche a te PaoloP. Cambierò le stringhe come da te suggerito.
Per voi il resto del codice è accettabile o esiste una maniera per renderlo più leggero?  smiley-red
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, sono di nuovo qui a rompre.
Ho corretto il codice come suggerito da PaoloP ma purtroppo niente.
il sistema non è stabile. dopo un ora che avevo caricato lo sketch è sparito tutto dal display.
E rimasta solo la retroilluminazione.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23122
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, sono di nuovo qui a rompre.
Ho corretto il codice come suggerito da PaoloP ma purtroppo niente.
il sistema non è stabile. dopo un ora che avevo caricato lo sketch è sparito tutto dal display.
E rimasta solo la retroilluminazione.

Fai un po' di debug sulla seriale. Metti cioè dei Serial.print e spedisci un po' di messaggi al PC per vedere se il codice continua a girare regolarmente oppure se si pianta tutto l'Arduino.
Logged


Pages: [1]   Go Up
Jump to: