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

Θέμα: avr και lcd

  1. #1
    Μέλος Το avatar του χρήστη axel
    Εγγραφή
    Feb 2005
    Μηνύματα
    43

    Προεπιλογή avr και lcd

    εχουμε τον παρακατω κώδικα σε codevision
    #include <mega8515>
    #asm
    .equ __lcd_port=0x15 ;PORTC
    #endasm

    #include <lcd>
    #include <stdio>
    char lcd_buffer[30]
    unsigned long int x;
    main()
    {
    lcd_init();
    while(1)
    {
    x++;
    sprintf(lcd_buffer,%u,x);
    lcd_puts(lcd_buffer);
    }
    }
    το πρόβλημα ειναι το εξής:
    ενώ το x είναι 32 bit o οθόνη μετράει κανονικά μέχρι το 16 bit δηλαδη μέχρι 65536.
    που μπορεί να οφείλεται αυτό?έχει να κάνει κάτι με το buffer της οθόνης?
    δηλαδη και να γράψω x=100000,δεν θα μου το εμφανίσει στην οθόνη θα μου εμφανισει 34464 οσο (100000-65536)
    καμια ιδέα?

    0 Not allowed! Not allowed!

  2. #2
    Μέλος Το avatar του χρήστη Επιστήμων
    Όνομα
    atmel
    Εγγραφή
    Oct 2005
    Περιοχή
    Σέρρες
    Μηνύματα
    450

    Προεπιλογή

    Μια πρώτη σκέψη είναι να "σπάσεις" τον αριθμό
    σε δύο κομμάτια πρίν τον στείλεις στην οθόνη και
    έπειτα να στείλεις στην ουσία δύο αριθμόυς τον
    ένα δίπλα στον άλλο.

    Προσώπικά επειδή δουλεύω assembly όταν δουλεύω
    μεγάλους αριθμούς στέλνω ένα - ένα τα νούμερα.

    0 Not allowed! Not allowed!
    Αν δεν μάθεις σε κάποιον να μιλάει , πως θα ακούσεις τι έχει να σου πεί . Σίμος . Τ.

  3. #3
    Μέλος
    Εγγραφή
    Apr 2006
    Περιοχή
    Κέρκυρα
    Μηνύματα
    5.968

    Προεπιλογή

    Επιστήμωνα πες το με ποιο απλά λόγια...
    άμα δουλεύεις assembly ξέρεις πως δουλεύει ο κώδικας και δεν έχεις τέτοια προβλήματα!

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη Επιστήμων
    Όνομα
    atmel
    Εγγραφή
    Oct 2005
    Περιοχή
    Σέρρες
    Μηνύματα
    450

    Προεπιλογή

    Ρε παιδιά με πόσο ποιο απλά λόγια ?
    Τα πράγματα είναι "απλά" (?!?)

    Αυτό που κάνω εγώ όταν θέλω να στείλω
    είναι να μετατρέπω ένα ένα τα bit του αριθμού στα
    δεκαδικά τους αντίστοχα επειτα να προσθέτω τους επιμέρους
    δεκαδικούς και έπειτα στέλνω ένα ένα τα νούμερα .

    Π.χ.

    Έχω τον αριθμό : 10110001 = 177

    Έχω τρείς καταχωρητές : εκατοντάδες , δεκάδες , μονάδες

    Έλέγχω αν το πρώτο bit (MSB) είναι ένα ,Αν ναι (στο π.χ. είναι "1")
    αυξάνω τις εκατοντάδες κατα 1 , τις δεκάδες κατα 2 και τις μονάδες κατα 8 (ΜSB = 12
    Μιλάω πάντα για ένα byte .
    Έπειτα ελέγχω και τα υπόλοιπα bit και αντίστοιχα αυξάνω τις εκατ, δεκ , μον .

    Αφού ελέγξω όλα τα bit ελέχγω αν οι μονάδες είναι πάνω απο δέκα .
    Αν ναι τότε αυξάνω τον καταχωρητή δεκάδες κατα ένα και μειώνω τον καταχωρητή μονάδες κατα 10 .
    Έπειτα ελέγχω αντίστοιχα τις δεκάδες .
    Και τέλος τις εκατοντάδες.Βέβαια σε αυτό το παράδειγμα οι εκατοντάδες δεν μπορεί
    να είναι πάνω απο δέκα . Σε ποιο μεγάλους αριθμούς όμως (16-bit)
    γίνεται.

    Στη συνέχεια προβάλλω στην οθόνη τους αριθμούς : εκατοντάδες , δεκάδες , μονάδες .

    Αυτό έκανα και κάνω μέχρι τώρα όταν έχω να κάνω πράξεις και πρέπει να προβάλλω
    μεγάλους αριθμούς (π.χ. συχνόμετρο).Όπως είπα και πάλι δουλεύω μόνο assembly.

    0 Not allowed! Not allowed!
    Αν δεν μάθεις σε κάποιον να μιλάει , πως θα ακούσεις τι έχει να σου πεί . Σίμος . Τ.

  5. #5
    Μέλος
    Εγγραφή
    Apr 2006
    Περιοχή
    Κέρκυρα
    Μηνύματα
    5.968

    Προεπιλογή

    Με μπέρδεψες....binary to bcd θες να κάνεις?
    Αν ναι γίνεται... με πολύ πιο γρήγορο και απλό αλγόριθμο (προγραμματιστικά) Αν και δεν κατάφερα να τον καταλάβω (όταν έχω χρόνο θα τον ξανακοιτάξω) ακόμα και όταν κατέβασα μια εξηγηση του αλγορίθμου από το Internet... πάντως δουλεύει σίγουρα και επεκτίνεται πανεύκολα σε όσα bit θέλεις.
    Θα τον βρεις σε assebly στα application note της ATMEL. Αν κοιτάξεις και για άλλους μικροελεγκτές και οι άλλοι κατασκευαστές τον ίδιο αλγόριθμο δίνουν....άρα είναι στάνταρ... γι αυτούς που ξέρουν...
    Και μια συμβουλή και πάλι... καλή η C αλλά για τα απλά πράγματα η assembly είναι τέλεια.

    0 Not allowed! Not allowed!

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

  1. AVR: Ερώτηση για χρήση υπορουτινών και RAM σε AVR
    By Ηλιάδης Μάνος in forum Μικροελεγκτές
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 19-12-15, 16:49
  2. AVR microcontrollers και lcd display
    By thanospr in forum Μικροελεγκτές
    Απαντήσεις: 24
    Τελευταίο Μήνυμα: 28-05-13, 21:27
  3. AVR studio4 και AVR-readyboard1 δεν συνεργάζονται.
    By PATENTAS10 in forum Μικροελεγκτές
    Απαντήσεις: 22
    Τελευταίο Μήνυμα: 18-03-11, 01:50
  4. LCD σε μικροελεγκτή AVR
    By ALAMAN in forum Μικροελεγκτές
    Απαντήσεις: 137
    Τελευταίο Μήνυμα: 13-12-09, 12:47
  5. avr και lcd
    By kwstakis in forum Μικροελεγκτές
    Απαντήσεις: 16
    Τελευταίο Μήνυμα: 30-11-07, 00:09

Tags for this Thread

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

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