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

Θέμα: Πώς απεικονίζω σε LCD float numbers?

  1. #1
    Μέλος Το avatar του χρήστη QED
    Όνομα
    Βασίλης
    Εγγραφή
    Aug 2004
    Περιοχή
    Λάρισα
    Μηνύματα
    145

    Προεπιλογή Πώς απεικονίζω σε LCD float numbers?

    Γεια χαρά σε όλους και χρόνια πολλά.
    Το πρόβλημα είναι το εξής:
    Με τον PIC16f877A διαβάζω τη θερμοκρασία(αυξημένης ακρίβειας με τον τύπο που δίνει το manual)
    από ένα ds18s20 και στη συνέχεια θέλω να την απεικονίσω σε μια lcd. Χρειάζομαι λοιπόν μια ρουτίνα
    μετατροπής floating point σε ascii.Βέβαια υπάρχει και η sprintf αλλά πιάνει πολύ χώρο στη μνήμη.
    Ο compiler που χρησιμοποιώ είναι ο hi-tech picc.
    Thanks!

    0 Not allowed! Not allowed!
    Physics is like sex; sure, you can get some interesting results, but that's not why we do it. -- Richard P. Feynman ( 1918 - 1988 )

  2. #2
    Μέλος Το avatar του χρήστη QED
    Όνομα
    Βασίλης
    Εγγραφή
    Aug 2004
    Περιοχή
    Λάρισα
    Μηνύματα
    145

    Προεπιλογή

    Τπτ?
    Καλά ρε παιδιά κανένας δεν έχει απεικονίσει σε lcd αριθμούς κινητής υποδιαστολής(δεκαδικούς)?
    Πώς το κάνετε εσείς?Σε απλή lcd εννοώ συμβατή με hitachi...
    Ευχαριστώ

    0 Not allowed! Not allowed!
    Physics is like sex; sure, you can get some interesting results, but that's not why we do it. -- Richard P. Feynman ( 1918 - 1988 )

  3. #3
    ΥπερΣυντονιστής Το avatar του χρήστη gsmaster
    Όνομα
    Γιάννης
    Εγγραφή
    Aug 2003
    Περιοχή
    Γιάννενα
    Μηνύματα
    4.444

    Προεπιλογή

    Έγώ εμφανίζω αριθμούς με δεκαδικά, σε ένα θερμόμετρο με DS1631 που μου δίνει high-byte και low byte, όπου το high byte είναι το ακέραιο και το Low είναι το δεκαδικό (στο high nibble, κάπως παράξενα).
    Με μια υπορουτίνα BIN-to-BCD βρίσκω τα 3 ψηφία του High byte (ακέραιο μέρος) και τα αποθηκεύω σε τρείς καταχωρητές (εκατοντάδες-δεκάδες-μονάδες) Με άλλη υπορουτίνα υπολογίζω και το low nibble και αποθηκεύω το αποτέλεσμα σε άλλους καταχωρητές. Πρέπει όμως να γίνει πρώτα η μετατροπή του δεκαδικού μέρους και μετά του ακέραιου γιατί αν έχουμε κρατούμενο πρέπει να αυξήσουμε το ακέραιο κατα 1.


    Για το DS18S20 σου απ'ότι είδα στο datasheet δεν στα δίνει χωρισμένα σε ακέραιο και δεκαδικό αλλά το δεκαδικό είναι το τελευταίο bit του Low byte. Όταν αυτό είναι 1 τότε το δεκαδικό μέρος είναι .5
    Αφού έχεις βρεί το δεκαδικό μέρος, μπορείς να βρείς και το ακέραιο κάνοντας μια ολίσθηση προς τα δεξιά για να διώξεις το bit που δείχνει το ακέραιο και να πάρεις το δεκαδικό σε 8bit και με μια υπορουτίνα BIN-to-BCD να πάρεις και το ακέραιο.

    Όλα αυτά για τα θετικά. Για τα αρνητικά, θα πρέπει να βγάζεις το συμπλήρωμα (comf) της θερμοκρασίας και να προσθέσεις ή να αφαιρεις 1 για να έρθει στα ίσα του, και μετά να κάνεις τα υπόλοιπα.

    ΥΓ: Όλα αυτά σε asm πάντα. :P
    ΥΓ2: ελπίζω να σε βοήθησα και να μην σε μπέρδεψα.

    0 Not allowed! Not allowed!
    Πριν γράψετε ένα νέο θέμα στο φόρουμ, ψάξτε ->εδώ<-, κάτι θα βρείτε που δεν ξέρατε.

  4. #4
    Μέλος Το avatar του χρήστη QED
    Όνομα
    Βασίλης
    Εγγραφή
    Aug 2004
    Περιοχή
    Λάρισα
    Μηνύματα
    145

    Προεπιλογή

    Ευχαριστώ αλλά αυτό το έχω καταφέρει.

    Επαναδιατυπώνω το πρόβλημα:

    Έστω ότι θέλω να απεικονίσω στην οθόνη την τιμή μιας μεταβλητής.Έστω ότι αυτή η μεταβλητή είναι
    η value.
    Εάν κάποια στιγμή είναι value = 24.211865
    Πώς την απεικονίζω στην οθόνη?
    Thanks!

    0 Not allowed! Not allowed!
    Physics is like sex; sure, you can get some interesting results, but that's not why we do it. -- Richard P. Feynman ( 1918 - 1988 )

  5. #5
    ΥπερΣυντονιστής Το avatar του χρήστη gsmaster
    Όνομα
    Γιάννης
    Εγγραφή
    Aug 2003
    Περιοχή
    Γιάννενα
    Μηνύματα
    4.444

    Προεπιλογή

    Δεν ξέρω από C, αλλά για να στείλεις τον δεκαδικό αυτό στην οθόνη, το σίγουρο είναι ότι θα πρέπει να τον στείλεις ψηφίο ψηφίο. Επίσης πρέπει να αποφασίσιες πόσα δεκαδικά θα στέλνεις, για να είναι οι θέσεις στην οθόνη πάντα οι ίδιες.

    Έστω ότι θα έχεις 3 δεκαδικά.
    Δοκίμασε να κάνεις μια υπορουτίνα που θα αφαιρεί κάθε φορά 100 10 1 0,1 0,01 0,001 κάτι σαν μετατροπή από δυαδικό σε δεκαδικό... μια σκέψη μόνο, δεν ξέρω από C.

    0 Not allowed! Not allowed!
    Πριν γράψετε ένα νέο θέμα στο φόρουμ, ψάξτε ->εδώ<-, κάτι θα βρείτε που δεν ξέρατε.

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

  1. Arduino led numbers to LCD
    By hackertom in forum Μικροελεγκτές
    Απαντήσεις: 68
    Τελευταίο Μήνυμα: 08-03-17, 13:00
  2. Ακρίβεια σε float & CodeVisionAVR
    By Hary Dee in forum Μικροελεγκτές
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 13-01-11, 10:23
  3. Float μεταβλητές σε GCC
    By Thansavv in forum Software Η/Υ
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 04-08-10, 09:42
  4. Backlight πρόβλημα σε LCD μέσω παράλληλης (LCD smartie, HD44780)
    By Stergios_[.gr] in forum Κυκλώματα για Η/Υ
    Απαντήσεις: 14
    Τελευταίο Μήνυμα: 23-10-09, 19:39
  5. float 32bit τι αριθμός είναι ?
    By DT200 in forum Γενική Συζήτηση
    Απαντήσεις: 13
    Τελευταίο Μήνυμα: 18-07-08, 11:21

Tags for this Thread

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

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