PDA

Επιστροφή στο Forum : Πώς απεικονίζω σε LCD float numbers?



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

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

gsmaster
12-01-05, 18:24
Έγώ εμφανίζω αριθμούς με δεκαδικά, σε ένα θερμόμετρο με 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: ελπίζω να σε βοήθησα και να μην σε μπέρδεψα. :)

QED
13-01-05, 01:52
Ευχαριστώ αλλά αυτό το έχω καταφέρει.

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

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

gsmaster
13-01-05, 17:30
Δεν ξέρω από C, αλλά για να στείλεις τον δεκαδικό αυτό στην οθόνη, το σίγουρο είναι ότι θα πρέπει να τον στείλεις ψηφίο ψηφίο. Επίσης πρέπει να αποφασίσιες πόσα δεκαδικά θα στέλνεις, για να είναι οι θέσεις στην οθόνη πάντα οι ίδιες.

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