# Συζήτηση Κυκλωμάτων > Ψηφιακά Κυκλώματα > Μικροελεγκτές >  >  arduino και lcd 16x2

## cspetr

Καλησπερα 
Εχω αγορασει την εξης οθονη 
289318811_o.jpg*  Control/Drive IC: SPLC780D (Compatible with HD44780)
* Display Format: 16 characters x 2  lines 
* Character Format: 5 x 8 dots 
* LCD Type: STN Blue
* LCD Driving Voltage: 4.7V
*  Logic Voltage: 5.0V
* Viewing Direction: 6 o'clock
* Drive Mode:  1/16 Duty, 1/5 Bias
* Backlight: White/Side 
* Operation Temp: -10  degree ~ 60 degree (Celsius)
* Storage Temp: -20 degree ~ 70 degree  (Celsius)
* Module Size: 80 mm x 36 mm x 13 mm
* View Area: 65 mm x  14 mm
* Net Weight: 70g


και θελω προβαλω ενα μυνημα μεσω του arduino ακριβως οπως εδωhttp://arduino.cc/en/Tutorial/LiquidCrystal
Το προβλημα ειναι οτι η οθονη δεν κανει τιποτα. Ελεγξα τις συνδεσεις και ειναι ακριβως οπως εκει. Μηπως ξερετε τι μπορει να φταιει?

Μηπως υπαρχει καποιος πιο απλος τροπος απο αυτον http://www.hlektronika.gr/index.php?...ataskeyes?lcd1 για να διαπιστωσω αν η οθονη λειτουργει? (εστω ν αναψει χωρις να εμφανισει τιποτα)
Και κατι τελευταιο. Στα δεξια της φωτογραφιας που ανεβασα υπαρχει ενα ασπρο αυτοκολλητο.Σε τι εξυπηρετει? Χρειαζεται να το βγαλω?

----------


## antonis-drift

δενξερω τι ακριβος ειναι το  		 		 		*arduino* αλλα αν αφορα προγραμματισμο οπως καταλαβενω πρεπει να ενεργοποιησεις την πορτ και να κανεις αρχικοποιηση μεσω του προγραματισμου.

----------


## antonis-drift

Για δες εδω μπορει να σε βοηθησει να ξεκινησεις.
http://www.ladyada.net/learn/arduino/starterpack.html
Ποιο μικροεπεξεργαστη της ατμελ φοραει πανω?

----------


## aeonios

Ισως να έχεις πρόβλημα με την τιμή της αντίστασης στο τρίτο ποδαράκι του lcd που καθορίζει την φωτεινότητα. Εγώ τουλάχιστον εκεί την είχα πατήσει γιατί δεν έδινα στο τριμεράκι την σωστή τιμή αντίστασης που ήθελε οπότε δεν μου εμφάνιζε τίποτε στο lcd.

----------


## aeonios

Eπίσης τσέκαρε προσεκτικά τις κολλήσεις σου και αν εχεις βάλει τα πάντα με βάση το σχέδιο. Υπόψιν αν έχεις παλιότερες εκδόσεις του λογισμικού νομίζω από την 016 και πριν θέλει άλλη συνδεσμολογία.

http://arduino.cc/en/uploads/Tutorial/lcd_schem.png

----------


## mcfarlad

Θερμό χαιρετισμό σε όλο το Forum καθώς είμαι νέος στην παρέα και αυτό είναι το πρώτο μήνυμα που στέλνω!!  :Smile:  :Smile: 
Είμαι νέος (πάρα πολύ!!!) στο θέμα του hardware και των περί αυτού συνδέσεων. Πρόσφατα αγόρασα μία οθόνη LCD 16x2 η οποία έχει μια ιδιαιτερότητα νομίζω?! Έχει 18 pin αντί 16.Ως εκ τούτου δεν έχω βρει κανένα data sheet για αυτήν και έτσι δεν ξέρω πως συνδέεται (με το Arduino). Μήπως μπορεί να με βοηθήσει κανείς? 

Ευχαριστώ

----------


## BillGeo

> Θερμό χαιρετισμό σε όλο το Forum καθώς είμαι νέος στην παρέα και αυτό είναι το πρώτο μήνυμα που στέλνω!! 
> Είμαι νέος (πάρα πολύ!!!) στο θέμα του hardware και των περί αυτού συνδέσεων. Πρόσφατα αγόρασα μία οθόνη LCD 16x2 η οποία έχει μια ιδιαιτερότητα νομίζω?! Έχει 18 pin αντί 16.Ως εκ τούτου δεν έχω βρει κανένα data sheet για αυτήν και έτσι δεν ξέρω πως συνδέεται (με το Arduino). Μήπως μπορεί να με βοηθήσει κανείς? 
> 
> Ευχαριστώ




Δυστυχως χωρις καποιο part number δεν θα βρεις τιποτα.

Αλλα ειναι πολυ απιθανο να μην υπαρχει κατι πανω στην οθονη.
Ακομα και με το μοντελο του driver chip θα βρεις κατι σιγουρα.
Ριξε μια ματια παλι στο display σου.

----------


## herctrap

[ame="http://www.youtube.com/watch?v=XwSwr5B-ENY"]YouTube- Opel Gt Turbo pressure Meter[/ame]

το βιντεακι το εφιταξα χτες για πλακα 

το θεμα ειναι οτι εχω την ιδια οθονη με μεσα

αλλα μετραπει ολα τα Pin που εχεις εσυ σε ενα για serial 

οποτε τις δινω 


+5V
Gnd
και ενα καλωδιο απο την οθονη στο TX του Arduino

οι εντολες ειναι πολυ απλες του τυπου





> displayMessage("Warming Up");







> clearLCD();



  drawVerticalGauge(3);

και αλλα για cursor marque text 
μπαρες οριζοντιες και κατακορυφες

----------


## Mr.Linatsa69

Προσπαθώ να φτιάξω ένα προγραμματάκι που να μου λέει το αποτελεσμα (HIGH ή LOW) έχοντας μεσα τον εξής κώδικα




```
if (digitalRead (zoni) == HIGH)
  {
  digitalWrite (13, HIGH);
  lcd.setCursor(0, 0);
  lcd.print("HIGH");
  }
  else
{
  digitalWrite (13, LOW);
    lcd.setCursor(0, 0);
  lcd.print("LOW");
```


Το θέμα είναι ότι ελέγχει σωστά και αναβει και σβηνει το pin13 αντίστοιχα. 
Γραφει HIGH η οθόνη, αλλά όταν είναι να αλλάξει σε LOW τα περνάει όλα γρήγορα και δεν βγάζει νόημα.
Μονο το "Η" δεν αλλάζει στη 4η στήλη και μένει μονιμα εκει.
Τι κάνω λάθος?

----------


## hlias0

> Προσπαθώ να φτιάξω ένα προγραμματάκι που να μου λέει το αποτελεσμα (HIGH ή LOW) έχοντας μεσα τον εξής κώδικα
> 
> 
> 
> 
> ```
> if (digitalRead (zoni) == HIGH)
>   {
>   digitalWrite (13, HIGH);
> ...



Το bracket που σου λείπει στο τέλος είναι λάθος στο copy paste, σωστά? αλλιώς δεν θα έκανε compile.

Πιστεύω ότι πρέπει να βάλεις μεγαλύτερο κομμάτι από τον κώδικα σου για να βγει άκρη. Το λάθος που περιγράφεις δεν φαίνεται να είναι σε αυτό το κομμάτι που μας δείχνεις.

Επίσης προσπάθησε να κάνεις clear το lcd πριν γράψεις το επόμενο string.

----------


## Mr.Linatsa69

> Το bracket που σου λείπει στο τέλος είναι λάθος στο copy paste, σωστά? αλλιώς δεν θα έκανε compile.
> 
> Πιστεύω ότι πρέπει να βάλεις μεγαλύτερο κομμάτι από τον κώδικα σου για να βγει άκρη. Το λάθος που περιγράφεις δεν φαίνεται να είναι σε αυτό το κομμάτι που μας δείχνεις.
> 
> Επίσης προσπάθησε να κάνεις clear το lcd πριν γράψεις το επόμενο string.



αυτός είναι ολοκληρος ο κώδικας:





```
 // include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
   
    
void setup() 
{
  pinMode (8,INPUT);
  pinMode (13,OUTPUT);
 digitalWrite (8, LOW); 
}

void loop()
{
  int zoni = 8;  
  if (digitalRead (zoni) == HIGH)
  {
  digitalWrite (13, HIGH);
  lcd.setCursor(0, 0);
  lcd.write("zone 1 anoixti");
  delay(400); //  ΜΕ ΑΥΤΟ ΤΟ DELAY ΚΑΤΙ ΠΑΕΙ ΝΑ ΦΤΙΑΞΕΙ
  }
  else
{
  digitalWrite (13, LOW);
    lcd.setCursor(0, 0);
  lcd.print("zone 1 kleisti");
}
}
```


Στην ουσια μου μπερδευει το "Ανοιχτη" "κλειστή"
Απλά πριν το ανεφερα σαν high low για πιο ευκολα.

----------


## hlias0

> Προσπαθώ να φτιάξω ένα προγραμματάκι που να μου λέει το αποτελεσμα (HIGH ή LOW) έχοντας μεσα τον εξής κώδικα
> 
> 
> 
> 
> ```
> if (digitalRead (zoni) == HIGH)
>   {
>   digitalWrite (13, HIGH);
> ...



Χμμ, το ξανασκέφτηκα. Αυτό το κομμάτι κώδικα το έχεις σε loop σωστά? Αν μιλάμε για arduino δηλαδή μέσα στο loop { } function. Όταν το πιν που διαβάζεις είναι LOW εκτελείς συνέχεια τον κώδικα μέσα στο else statement. Και δεν κάνεις clear to lcd.

To 'Η' μένει στιν τέταρτη στήλη γιατί τυπώνεις το LOW που είναι 3 χαρακτήρες και φτάνουν μέχρι την τρίτη στήλη. Άρα δεν κάνεις overwrite την τέταρτη στήλη που είναι το 'Η΄. 

Βάλε ένα delay στον κώδικα σου και κάνε clear το lcd. Κάπως έτσι:




```
void loop( void )
{
  lcd.clear( );

  if (digitalRead (zoni) == HIGH)
  {
      digitalWrite (13, HIGH);
      lcd.setCursor(0, 0);
      lcd.print("HIGH");
   }
   else
   {
       digitalWrite (13, LOW);
       lcd.setCursor(0, 0);
       lcd.print("LOW");
    }
    
    delay_ms( 100 );
}
```

----------


## Mr.Linatsa69

Ναι arduino είναι.
Δυστυχώς ούτε έτσι έπαιξε.
το μονο που βρίσκω και παίζει είναι με το delay (400) όπως έβαλα πριν ... πφφφ

----------


## hlias0

Χμμ. περιεργο! Το delay_ms( ) μπορεί να είναι λάθος δεν ξέρω άν είναι σωστό call για arduino. Για να σου δώσω να καταλάβεις το έβαλα.

Εγώ πάντως θα το δοκίμαζα ώς εξής :




```
void loop( )
{
    lcd.clear( );
    lcd.setCursor( 0, 0 );

    if( digitalRead( zoni ) == HIGH )
    {
         digitalWrite( 13, HIGH );
         lcd.print( "HIGH" );
    }
    else
    {
         digitalWrite( 13, LOW );
         lcd.print( "LOW" );
    }

    delay( 500 ); // auto to delay einai se msec??
}
```

----------


## her

Σε arduino μπορώ να συνδέσω 2 οθόνες; Όχι παράλληλα, θέλω να απεικονίζω διαφορετικά στοιχειά στην κάθε μια.

----------


## dog80

> Σε arduino μπορώ να συνδέσω 2 οθόνες; Όχι παράλληλα, θέλω να απεικονίζω διαφορετικά στοιχειά στην κάθε μια.




Ναί, και μάλιστα χρειάζεται μόλις ένα pin για κάθε επιπλέον οθόνη: http://forum.arduino.cc/index.php/topic,5014.0.html

----------

αλπινιστης (07-03-15), 

her (19-09-14)

----------


## eleCtroAsxetos

παιδια γράφω εδω για να μην ανοιγω νεο θεμα. Δε θελω να επισκευασω κατι απλα θελω να ρωτησω μηπως και ισως τι εκανα λαθος.
Χθες εκαψα μια οθονη arduino την κλασσικη 16χ2 οπως παραπανω αλλα με μπλε backlight. Δεν δειχνει τιποτα πλεον εντελως νεκρη. 
Προσπαθησα να δουλεψω ενα προγραμμα που αναφεροταν σε arduino nano αλλα εγω το περασα σε arduino uno. Το προγραμμα χρησιμοποιουσε τα αναλογικα pin Α0-Α5 για ψηφιακες εξοδους καθως τα εν γενει ψηφιακα ηταν αφιερωμενα αλλου. Η οθονη δοκιμαστικε και δεν δουλευε σωστα δεν εδειχνε γραμματα αλλα λειτουργουσε τουλαχιστον. Απογοητευτηκα ψαχτηκα δεν εβγαλα ακρη το αποσυνδεσα. Στη συνεχεια σκεφτηκα μηπως ειχε καποιο προβλημα η οθονη.
Περναω ενα απλο κωδικα HELLO WORLD με ψηφιακες εξοδους LCD στα κλασσικα πινς D12 D11 κτλ αλλα πλεον η οθονη οχι απλα δουλευε και δεν εδειχνε τα γραμματα αλλα ηταν και εντελως νεκρη. Πλεον δε βλεπεεις τιποτα μενει μαυρη. Δοκιμασα και με το contrast...Τι κοντραστ 
Απο οσα σας λεω ειναι δυνατον να καει μια οθονη? Η απλα εκανα εγω ισως μια λαθος κινηση που δε θυμαμαι ή ήταν να πεθανει.
Σας ευχαριστω οπως και να ναι

----------


## giannopoulos.stavros

> αυτός είναι ολοκληρος ο κώδικας:
> 
> 
> 
> 
> 
> ```
>  // include the library code:
> #include <LiquidCrystal.h>
> ...




Ο κώδικας σου είναι λειψός, δοκίμασε αυτό

#include <LiquidCrystal.h>


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


// constants won't change. They're used here to 
// set pin numbers:
const int buttonPin = 8;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin


// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status


void setup() {
  // initialize the LED pin as an output:
    lcd.begin(16, 2);
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);   
  lcd.print("hello, world!");
  delay(1000);
  lcd.clear(); 


}


void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);


  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);

   lcd.setCursor(0, 0);
   lcd.write("zone 1 anoixti");
   delay(100);
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
    lcd.setCursor(0, 0);
    lcd.print("zone 1 kleisti");
    delay(100); 
  }
}

----------

