Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 16

Θέμα: PIC16F877A - LCD2x16

  1. #1
    Νέο Μέλος Το avatar του χρήστη AR15
    Όνομα
    Άρης
    Εγγραφή
    May 2011
    Περιοχή
    Αθήνα
    Μηνύματα
    15

    Προεπιλογή PIC16F877A - LCD2x16

    Καλησπερα παιδια, έχω αυτή την LCD και εναν 40πινο pic και θέλω να φτιάξω ένα βολτόμετρο. Να μετράει analog, να κάνει ADC και να μου εμφανίζει το αποτέλεσμα στην οθόνη LCD....
    Αρχικά δοκιμάζω να φτιάξω κώδικα που να γράφει κατι απλά στην LCD....

    D0-D7 = RB0-RB7 και RS=RD4 RW=RD5 EN=RD6

    Ο κώδικάς μου ειναι ο εξής:

    Κώδικας:
    ;orismos pic kai kathorismos metavlhton
    ;*****************************************************************
    
    LIST P=16F877A
    #include <P16F877A.INC>
    
    LCD_DATA         EQU PORTB
    LCD_DATA_TRIS     EQU TRISB
    LCD_TEMP         EQU 0x020
    DELAY            EQU 0x023
    X_DELAY            EQU 0x024
    TABLE_INDEX        EQU 0x025
    
    #DEFINE LCD_E    PORTD,6
    #DEFINE LCD_RW    PORTD,5
    #DEFINE LCD_RS    PORTD,4
    
    
    
    
    
    ;LCD initialize
    ;***************************************************************
    
    LCDINIT
        CLRF    PORTD
        MOVLW    0x08D
        CALL    X_DELAY500
        MOVLW    0x030
        CALL    LCDPUTCMD1
        MOVLW    0x060
        CALL    X_DELAY500
        MOVLW    0x030
        CALL    LCDPUTCMD1
    
        
        MOVLW    0x038
        CALL    LCDPUTCMD
        MOVLW    0x009
        CALL    LCDPUTCMD
        CALL    LCDCLEAR
        MOVLW    0x006
        CALL    LCDPUTCMD
        CALL    TABLE_MSG
        GOTO    TELOS
    
    
    
    ;Elegxos toy Busy-Flag
    ;***************************************************************
    
    LCDBUSY
        BSF        STATUS,RP0
        MOVLW    0x0FF
        MOVWF    LCD_DATA_TRIS
        BCF        STATUS,RP0
        BCF        LCD_RS
        BCF        LCD_RW
        BSF     LCD_E
        MOVF    LCD_DATA,W
        BCF        LCD_E
        ANDLW    0x80
        BTFSS    STATUS,Z
        
        GOTO    LCDBUSY
        
    LCDNOTBUSY
        BCF        LCD_RW
        BSF        STATUS, RP0
        MOVLW    0x000
        MOVWF    LCD_DATA_TRIS
        BCF        STATUS, RP0
    RETURN
    
    
    
    
    
    
    ;katharismos lcd
    ;*********************************************************************
    
    LCDCLEAR
        MOVLW    0x001
        CALL    LCDPUTCMD
    RETURN
    
    
    
    
    
    
    ;
    ;*********************************************************************
    
    LCDCLEAR1
        MOVLW    0x001
        CALL    LCDPUTCMD
    RETURN
    
    
    
    
    
    ;epistrofh sto home
    ;*********************************************************************
    LCD_HOME
        MOVLW    0x002
        CALL    LCDPUTCMD
    RETURN
    
    
    
    
    
    ;stelnoyme ton xarakthra sthn LCD
    ;**********************************************************************
    
    LCDPUTCHAR
        MOVWF    LCD_TEMP
        CALL    LCDBUSY
        BCF        LCD_RW
        BSF        LCD_RS
        BSF        LCD_E
        MOVF    LCD_TEMP,W
        MOVWF    LCD_DATA
        BCF        LCD_E
    RETURN
    
    
    
    
    
    ;entoles sthn LCD
    ;**********************************************************************
    
    LCDPUTCMD
        MOVWF    LCD_TEMP
        CALL    LCDBUSY
        BCF        LCD_RW
        BCF        LCD_RS
        BSF        LCD_E
        MOVF    LCD_TEMP,W
        MOVWF    LCD_DATA
        BCF        LCD_E
    RETURN
    
    
    
    
    
    ;LCDPUTCMD1
    ;*********************************************************************
    LCDPUTCMD1
        BCF        LCD_RW
        BCF        LCD_RS
        BSF        LCD_E
        MOVWF    LCD_DATA
        BCF        LCD_E
    RETURN
    
    
    
    ;Apostolh keimenoy meso pinaka
    ;**********************************************************************
    
    TABLE_MSG
        MOVLW 0
    
    DISP_MSG
        MOVWF    TABLE_INDEX
        CALL    MSG1
        ANDLW    0x0FF
        BTFSC    STATUS,Z
        GOTO    TABLE_MSG_END
        CALL    LCDPUTCHAR
        MOVF    TABLE_INDEX,W
        ADDLW    1
        GOTO    DISP_MSG
    
    TABLE_MSG_END
    RETURN
    
    
    
    
    ;Munhma
    ;**********************************************************************
    
    MSG1
        ADDWF    PCL,F
        RETLW    'A'
        RETLW    'R'
        RETLW    'I'
        RETLW    'S'
        RETLW    'I'
        RETLW    'P'
    
    MSG1_END
        RETLW    0
        
        
        
        
        
    ;delays
    ;**********************************************************************
    
    DELAY500
        MOVLW    D'165'
        MOVWF    DELAY
    
    DELAY500_LOOP
        DECFSZ    DELAY,F
        GOTO    DELAY500_LOOP
    
    DELAY500_END
    RETURN
    
    
    
    
    ;delays
    ;**********************************************************************
    
    X_DELAY500
        MOVWF    X_DELAY
    
    X_DELAY500_LOOP
        CALL    DELAY500
        DECFSZ    X_DELAY,F
        GOTO    X_DELAY500_LOOP
    
    X_DELAY500_END
    RETURN
    
    TELOS
    END
    το αποτέλεσμα ειναι αυτο:

    Εικόνα.jpg

    ΔΕΝ ΔΟΥΛΕΥΕΕΕΙΙΙΙΙΙ!!!!!!

    Όποις εχει όρξη ας ρίξει μια ματια... Είμαι σε αδιέξοδο!!!!

    0 Not allowed! Not allowed!

  2. #2
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Αγαπητέ Άρη, καλησπέρα. Για να μην μακρηγορώ με επικόλληση κώδικα, μπορείς να δείς ένα σχετικό με την εφαρμογή σου παράδειγμα απο τις βιβλιοθήκες της Microchip που αφορά την απεικόνηση γωνίας με τη βοήθεια accelerometer και ενός 16F84 σε απλή οθόνη LCD. Διάβασε το listing και κάνε τις προσαρμογές στο δικό σου κώδικα. Είναι μάλλον σίγουρο οτι θα σου δουλέψει. Μια παρατήρηση: Πριν την directive "END" έχεις γράψει "TELOS" χωρίς να το κάνεις σχόλιο. Σίγουρα σου κάνει build;

    http://ww1.microchip.com/downloads/e...tes/00715a.pdf

    0 Not allowed! Not allowed!

  3. #3
    Νέο Μέλος Το avatar του χρήστη AR15
    Όνομα
    Άρης
    Εγγραφή
    May 2011
    Περιοχή
    Αθήνα
    Μηνύματα
    15

    Προεπιλογή

    Ναι... ενα απλο label ειναι. Μπορει να το χριαζόμουν στην συνέχεια, γι αυτο το βαλα!!!

    0 Not allowed! Not allowed!

  4. #4
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή

    Αρη δεν έχεις ελέγξει καθόλου το TRISD άρα το PORTD είναι όλα τα bits είσοδοι!
    Το "πρόγραμμά" σου δεν έχει δομή. Είναι καλύτερα, όπως γράφει ο Μάνος, να ξεκινήσεις με έτοιμα παραδείγματα και να μάθεις να χρησιμοποιείς την "τυπική" διαδικασία αρχικοποίησης.

    Στις δοκιμές σου μην ελέγχεις το busy του LCD. Μπορείς να βάλεις μικρά delays. Για το LCD που αναφέρεις θέλει έως 43μSec μεταξύ εντολών και 1.53mSec για "Home" και "Clear". Αν το ελέγχεις μπορεί να θέλει αντίσταση pullup στο DB7/Busy.

    G

    0 Not allowed! Not allowed!

  5. #5
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Μια καλή μεθοδολογία επίσης, είναι να κάνεις "ανακύκλωση" αποσπασμάτων κώδικα για εφαρμογές στις οποίες χρησιμοποιείς συχνά τα ίδια πράγματα. Για παράδειγμα, αν κατασκευάζεις εφαρμογές με οθόνη, προσπάθησε να φτιάξεις μια "κονσέρβα" κώδικα που θα την χρησιμοποιείς πάντα, με κάποιες ίσως μικροαλλαγές αν απαιτούνται. Ομοίως με ένα matrix 4x4 πληκτρολόγιο με διακοπές στην PORTB, και διάφορα άλλα. Δώσε επίσης σημασία σε "μικρά" μυστικά που κρύβονται σε λειτουργίες αλληλένδετες με τους διάφορους καταχωρητές που ελέγχουν την διαδρομή της πληροφορίας (TRIS και PORT), και π.χ. τους καταχωρητές του ADC module (ADCON0 και ADCON1). Αν δεν ορίσεις εδώ τον συνδυασμό των analog και digital bits, δεν θα σου δουλέψει τίποτε συνδεδεμένο στις πόρτες που ελέγχουν. Διάβασμα φίλε μου, αρκετό διάβασμα...

    0 Not allowed! Not allowed!

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

    GeorgeVita (12-06-11)

  7. #6
    Νέο Μέλος Το avatar του χρήστη AR15
    Όνομα
    Άρης
    Εγγραφή
    May 2011
    Περιοχή
    Αθήνα
    Μηνύματα
    15

    Προεπιλογή

    ευχαριστώ πολλυ για τις συμβουλες σας.... ειχα κανει βλακια με το TRISD το διόρθωσα αυτο... η οθόνη κανει initialize αλλα δεν μ εμφανιζει το μυνημα...
    Με το display on/off τι εννουμε??? (μιλαω για την διαδικασία του initialize) Θελω να πω... τι θεωρει display?? στην lcd αναφερεται??
    Αφού θέλω απλά να εμφανησω ενα μνμ δεν με απασχολει το cursor on ουτε το blink, σωστα??

    και μια τελευτεα ερωτηση...επιδη τα RB7 και RB6 pins τα χρησιμοποιω και για επικοινωνία με τον max232(εκτως απο την lcd)...Υπάρχει περίπτωση να επιρεάζεται το αποτέλεσμα στην lcd....???

    0 Not allowed! Not allowed!

  8. #7
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή

    "Display ON" εννοεί τον εαυτό του. Πρέπει να είναι ON για να δείξει την πληροφορία στην οθόνη. Εφόσον έχει γίνει σωστά η αρχικοποίηση το display δεν πρέπει να δείχνει τα "κουτάκια". Ελεγξε το contrast (ρύθμιση με ποτενσιόμετρο).

    Συνήθως έχουμε: display ON, cursor off, blink off

    Τα B6, B7 μπορείς να τα χρησιμοποιείς και αλλού εφόσον αποδεσμεύονται για χρήση καθαρά στο display όταν στέλνεις data ή ελέγχεις το busy. Αν δεν είσαι σίγουρος βάλε τα μόνο στο display.

    Βάλε να ανάβει κανένα LED για test σε μερικά σημεία του προγράμματος να βρεις "κολλήματα" (λ.χ. στον έλεγχο του busy).

    G

    0 Not allowed! Not allowed!

  9. #8
    Νέο Μέλος Το avatar του χρήστη AR15
    Όνομα
    Άρης
    Εγγραφή
    May 2011
    Περιοχή
    Αθήνα
    Μηνύματα
    15

    Προεπιλογή

    ΟΚ, η αρχικοποίηση εχει γίνει σωστα! Δεν μ δίχνει τα κουτάκια οπως λες απο πάνω, έχει μπεί και σε 2χ mode και αν έχω cursor on και blink, τα βλέπω στην οθονη....

    άρα το πρόβλημά μου ειναι στον κώδικα που εμφανίζει το κείμενο (για να γίνεται το initialize δουλευει και η αναγνωση του BF)....Θα τσεκάρω οπως πολλυ σωστα μου πρωτινες με LED, να δω τι πάει σραβα...
    Σε simulate mode το πρόγραμα δουλευει άψογα...
    Μήπως ξέρεις και τι κάνει το display shift ?? προς το παρόν το έχω off με τον cursor increment.

    0 Not allowed! Not allowed!

  10. #9
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από AR15 Εμφάνιση μηνυμάτων
    ... τι κάνει το display shift;
    Κάθε γραμμή έχει μια διεύθυνση για τον πρώτο χαρακτήρα (στα αριστερά) όπως 00h ή 40h.
    Με το shift μπορείς να καθορίσεις διαφορετικό "πρώτο χαρακτήρα" λ.χ. την 01h (2η θέση μνήμης) για να κάνεις scroll όλο το μήνυμα.
    (φαντάζομαι αυτό εννοείς "shift")
    G

    0 Not allowed! Not allowed!

  11. #10
    Νέο Μέλος Το avatar του χρήστη AR15
    Όνομα
    Άρης
    Εγγραφή
    May 2011
    Περιοχή
    Αθήνα
    Μηνύματα
    15

    Προεπιλογή

    Αχα.... ενδιαφέρον....
    Άλλη μια ερώτηση(το ξερω γίνομαι κουραστικός :P)
    Κάθε φορά που του λέω να γράψει έναν χαρακτήρα, ο cursor αυξάνεται απο μόνος του?
    Ή πρέπει να χρισημοποιήσω το shift και να του λέω manualy να αυξάνεται ο cursor κατα 1???

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

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

  1. Pic16f877a και σειριακη
    By mike^^ in forum Μικροελεγκτές
    Απαντήσεις: 14
    Τελευταίο Μήνυμα: 12-08-11, 03:47
  2. pic16f877a In-Circuit Serial Programming
    By esvvidi in forum Μικροελεγκτές
    Απαντήσεις: 16
    Τελευταίο Μήνυμα: 16-02-11, 12:53
  3. Απαντήσεις: 4
    Τελευταίο Μήνυμα: 09-05-09, 14:27
  4. pic16f84a kai lcd2x16
    By Nemmesis in forum Μικροελεγκτές
    Απαντήσεις: 40
    Τελευταίο Μήνυμα: 10-09-07, 21:35
  5. Κύκλωμα ISCP JDM (Split από: pic16f84a kai lcd2x16 )
    By kopla in forum Μικροελεγκτές
    Απαντήσεις: 18
    Τελευταίο Μήνυμα: 27-08-07, 21:10

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

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