Εμφάνιση αποτελεσμάτων : 1 έως 5 από 5

Θέμα: Πρόβλημα με οθόνη LCD και arduino

  1. #1
    Μέλος
    Όνομα
    Μπάμπης
    Εγγραφή
    Apr 2004
    Περιοχή
    Καστοριά
    Μηνύματα
    1.145

    Προεπιλογή Πρόβλημα με οθόνη LCD και arduino

    Αγόρασα πριν λίγες μέρες 2 οθόνες LCD και τις δοκίμασα με arduino UNO. Στην παράλληλη σύνδεση 4 bit λειτουργούν κανονικά.
    Προσθέτοντας όμως δυο μοντουλάκια I2C (δοκιμασμένα με άλλες οθόνες, λειτουργούν κανονικά) οι δυο πρώτες γραμμές εμφανίζονται κανονικά, η τρίτη και τέταρτη όμως εμφανίζουν το μήνυμα από την 4η στήλη και έπειτα. Τα αποτελέσματα φαίνονται στις συνημμένες φωτογραφίες. Δοκίμασα διάφορες βιβλιοθήκες LiquidCrystal_I2C από το Github, χωρίς αποτέλεσμα. Χρησιμοποιώ φυσικά την εντολή lcd.setCursor(x, y) για να γράψω έπειτα το κείμενό μου, δίνοντας τις τιμές x = 0 και y = 0-3. Όταν έδωσα αντί x = 0, x = -4 τότε τα μηνύματα τυπώθηκαν σωστά, δίνοντας x = -5 το αποτέλεσμα ήταν να γραφούν οι πρώτοι χαρακτήρες στις γραμμές 0 και 1. Ο κώδικας είναι πολύ απλός, αντίστοιχος των παραδειγμάτων της βιβλιοθήκης, δεν νομίζω να χρειάζεται να τον ανεβάσω, εννοείται ότι η δήλωση της οθόνης έγινε κανονικά (16Χ4).
    Κάποια πρόταση, ιδέα, λύση;


    X-0.jpgX-4.jpgX-5.jpg

    0 Not allowed! Not allowed!
    Όταν όλα αποτύχουν, διάβασε τις οδηγίες χρήσης.

  2. #2
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Δεν είναι πρόβλημα της οθόνης αλλά της βιβλιοθήκης.

    https://forum.arduino.cc/index.php?topic=499929.0

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη SProg : 23-06-20 στις 12:24

  3. Ένα μέλος ευχαρίστησε τον SProg για αυτό το χρήσιμο μήνυμα:

    babisko (23-06-20)

  4. #3
    Μέλος
    Όνομα
    Μπάμπης
    Εγγραφή
    Apr 2004
    Περιοχή
    Καστοριά
    Μηνύματα
    1.145

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από SProg Εμφάνιση μηνυμάτων
    Δεν είναι πρόβλημα της οθόνης αλλά της βιβλιοθήκης.

    https://forum.arduino.cc/index.php?topic=499929.0
    Σ ευχαριστώ για την απάντηση και το λινκ. Το είχα διαβάσει αυτό ψάχνοντας για λύση, αλλά δεν με φώτισε ιδιαίτερα για το πως να κάνω να εμφανίζονται σωστά οι χαρακτήρες στις οθόνες μου. Εξάλλου τρέχοντας κάποια από τα παραδείγματα της βιβλιοθήκης αυτής πάλι υπάρχει το ίδιο αποτέλεσμα στην εμφάνιση. Φυσικά και δεν είναι λύση οι συντεταγμένες του τύπου (-4, 2).
    Κάτι άλλο αν υπήρχε στα υπόψη κάποιου και το ανέφερε εδώ θα το εκτιμούσα

    0 Not allowed! Not allowed!
    Όταν όλα αποτύχουν, διάβασε τις οδηγίες χρήσης.

  5. #4
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    3 (τουλάχιστον) τρόποι υπάρχουν:


    • Διορθώνεις τη βιβλιοθήκη στο αρχείο, συγκεκριμένα στο αρχείο LiquidCrystal_I2C.cpp
      • Από: int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
      • Σε: int row_offsets[] = { 0x00, 0x40, 0x10, 0x50 };

    • Κάνεις μία νέα συνάρτηση SetCursorCustom() που να υπολογίζει τα σωστά ορίσματα για την SetCursor() και να την καλεί
    • Αλλάζεις βιβλιοθήκη


    Το πρόβλημα έχει να κάνει με το πως είναι οργανωμένες οι μνήμες για 16x4 και 20x4. Θα μπορούσες να κάνεις κάποιο έλεγχο ώστε να παίζει και με τις δύο οθόνες.

    2 Not allowed! Not allowed!

  6. 2 μέλη ευχαρίστησαν τον SProg για αυτό το χρήσιμο μήνυμα:

    babisko (24-06-20), nestoras (24-06-20)

  7. #5
    Μέλος
    Όνομα
    Μπάμπης
    Εγγραφή
    Apr 2004
    Περιοχή
    Καστοριά
    Μηνύματα
    1.145

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από SProg Εμφάνιση μηνυμάτων
    3 (τουλάχιστον) τρόποι υπάρχουν:


    • Διορθώνεις τη βιβλιοθήκη στο αρχείο, συγκεκριμένα στο αρχείο LiquidCrystal_I2C.cpp
      • Από: int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
      • Σε: int row_offsets[] = { 0x00, 0x40, 0x10, 0x50 };

    • Κάνεις μία νέα συνάρτηση SetCursorCustom() που να υπολογίζει τα σωστά ορίσματα για την SetCursor() και να την καλεί
    • Αλλάζεις βιβλιοθήκη


    Το πρόβλημα έχει να κάνει με το πως είναι οργανωμένες οι μνήμες για 16x4 και 20x4. Θα μπορούσες να κάνεις κάποιο έλεγχο ώστε να παίζει και με τις δύο οθόνες.
    Όλα καλά τελικά, είχες απόλυτο δίκιο!!! (μην μας παρεξηγείτε εμάς τους παππούδες, στην εποχή μας δεν είχαμε τέτοια μπλιμπλίκια, άσε που το μυαλό μας έγινε λιγάκι πίτουρο!! )
    Άλλαξα στην βιβλιοθήκη την συνάρτηση setCursor και δοκίμασα με διάφορες οθόνες (16Χ2, 16Χ4, 20Χ4) και δούλεψαν μια χαρά!!! Σ ευχαριστώ πολύ για την πολύτιμη βοήθειά σου!!!

    Κώδικας:
    void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row)
    {
        int row_offsets[] = {0x00, 0x40, 0x14, 0x54};
        if ((_rows == 4) && (_cols == 16)) {
            row_offsets[2] = 0x10;
            row_offsets[3] = 0x50;
        }
        if (row > _numlines) {
            row = _numlines - 1; // we count rows starting w/0
        }
        command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
    }

    0 Not allowed! Not allowed!
    Όταν όλα αποτύχουν, διάβασε τις οδηγίες χρήσης.

Παρόμοια Θέματα

  1. Φούρνος για SMD, BGA, με οθόνη LCD TFT σε ARDUINO
    By misterno in forum Μικροελεγκτές
    Απαντήσεις: 48
    Τελευταίο Μήνυμα: 06-09-18, 21:14
  2. Πρόβλημα με οθόνη LCD
    By apilot in forum Ηλεκτρονικά
    Απαντήσεις: 7
    Τελευταίο Μήνυμα: 21-09-17, 17:16
  3. Soldering Station με Arduino Nano και 4x20 LCD οθόνη
    By manolena in forum Παρουσίαση Ολοκληρωμένων Κατασκευών
    Απαντήσεις: 200
    Τελευταίο Μήνυμα: 03-09-17, 22:14
  4. Πρόβλημα με οθόνη LCD
    By makatas in forum Hardware Η/Υ
    Απαντήσεις: 7
    Τελευταίο Μήνυμα: 17-11-12, 14:06

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας