Επιστροφή στο Forum : Στατιστική με PIC
έχω ένα πρόβλημα που χρειάζομαι βοήθεια από εσάς,
το πρόβλημα είναι ότι έχω τοποθετήσει μία ανεμογεννήτρια
και θέλω να κατασκευάσω μέσω ενός PIC ένα βολτόμετρο και
δύο αμπερόμετρα (καταναλώσεις και φόρτιση) το θέμα είναι ότι
έχοντας αυτές τις δύο πληροφορίες μπορώ να έχω και βατόμετρο(watt meter)
μέχρι εδώ καλά , αλλά θα ήθελα να φτιάξω και μία ρουτίνα που να κρατάει
στατιστικά για το μέσον όρον των Watt που καταναλώθηκαν,
αυτό δεν είναι ιδιαίτερα δύσκολο διότι οι πράξεις είναι πολύ εύκολες
π.χ. (10w+15w+7w+30w)/4=15,5w
το πρόβλημα εντοπίζετε στο ότι μετά από λίγη ώρα ο αριθμός θα είναι πολύ μεγάλος
και δεν θα χωράει σε κανέναν καταχωρητή ακόμα και 32Bit,
ψάχνω λιπών κάποιο τρόπο να κρατήσω τον αριθμό σε κάποια λογικά
πλαίσια , π.χ. μέχρι 65000 (16Bit)
τι μπορώ να κάνω ???
Εξαρτάται απο το χρόνο για τον οποίο θες να υπολογίσεις το μέσον όρο.
Αν θες π.χ. να σου βγάζει το μέσο όρο για το τελευταίο 24ωρο, με μετρήσεις ανα 10 λεπτά θα χρειαστείς έναν πίνακα 144 τιμών. Διαιρώντας το άθροισμα των τιμών του πίνακα δια του 144 έχεις την κατανάλωση των τελευταίων 24 ωρών.
Κάθε φορά που θα κάνεις νέα μέτρηση, θα μεταφέρεις τα δεδομένα του πίνακα μία θέση αριστερά, δηλαδή η εγγραφή 144 θα πάει στη θέση 143, η 142 στην 141 .... η θέση 2 στη θέση 1 η οποία χάνεται, και θα γράψεις τη νέα μέτρηση στη θέση 144. Με αυτόν τον τρόπο έχεις πάντα το μέσον όρο για τις τελευταίες 24 ώρες.
Με την ίδια λογική μπορείς να βγάζεις το μέσον όρο των τελευταίων 30 ημερών. Για καταγραφές ανα 10 λεπτά, θα χρειαστείς πίνακα 3456 τιμών. Για να μη σου βγουν μεγάλοι οι πίνακες, κάνε πιο αραιή δειγματοληψία, π.χ. ανά μισή ώρα.
Ελπίζω να βοήθησα
ναι , είναι καλό και αυτό αλλά η δειγματοληψία θα πρέπει να γίνετε κάθε δευτερόλεπτο
διότι είναι για ανεμογεννήτρια και η απόδοση της αλλάζει σε κάθε δευτερόλεπτο .
Μια άλλη ιδέα είναι να χρησιμοποιήσεις πολλούς καταχωρητές μνήμης του PIC και να σχηματίσεις 32, 40 ή και μεγλύτερου εύρους αριθμούς.
Θα γίνουν λίγο πιο πολύπλοκες οι μαθηματικές πράξεις του μικροελεγκτή καθώς θα πρέπει να αναπτυχθούν ρουτίνες πράξεων σε περισσότερα bit.
Ποιον PIC χρησιμοποιείς;
Φιλικά,
Γιάννης
δεν έχω καταλήξει ακόμα διότι δεν έχω
αποφασίσει όλες τις ρουτίνες που θα εκτελεί .
Ρωτάω γιατί ίσως να σε βολέψει να χρησιμοποιήσεις 32-μπιτους PIC
Γιάννης
όχι με τίποτα , θα ήταν τεράστια υπολογιστική σπατάλη.
Ίσως... αλλά πάλι μπορεί να σε κάλυπτε σε θέμα εύρους bit καταχωρητών και να προέκυπταν πιο απλές ρουτίνες...
Τέσπα, εσύ ξέρεις.
φιλε μου δεν ξερω με pic αλλα με κατι λιγα που ξερω μπορεις να το ψαξεις λιγο αν θες με 8051 (ds89c420-μαχιμ)και με εξωτερικες μνημες(ειτε απο την μαχιμ ειται απο την ΤΙ)
Αυτό που ψάχνω εγώ είναι το μαθηματικό μέρος του
προβλήματος , δηλαδή πως μπορώ να κρατήσω
τον αριθμό χαμηλά (π.χ. 60.000).
σίγουρα κάτι θα υπάρχει...
Η εύκολη λύση και η ενδεδειγμένη είναι να χρησιμοποιήσεις C compiler ασχέτως της επιλογής της αρχιτεκτονικής του .. PIC.
Πάρε 18F που είναι 8bit arch & 16bit core ( δεν σε πολυ νοιάζει αυτό ), και mcc18 της microchip ή ότι να ναι.
Η αποθήκευση των τιμών θα γίνει σε EEPROM ( εσω ή εξω ~τερική )
για γλώσσα χρησιμοποιώ την MikroBasic και
από PIC 18F4550, το πρόβλημα μου είναι
ότι δεν ξέρω τι μαθηματικές πράξεις πρέπει να
κάνω για να παίρνω το μέσον όρον χωρίς να έχω
υπερχείλιση του καταχωρητή μου με 16Bit ή και 32Bit καταχωρητή.
δεν γιναιτε να βρισκεις τον μεσο ορο καθε δευτερολεπτο για ενα λεπτο να μηδενιζεις καθα λεπτο αυτο τον μεσο ορο και μετα να βρισκεις τον μεσο ορο πχ για μια ορα να υπολογιζεις 60 δειγματα αντι για 3600?
γίνετε αλλά δεν είναι σωστό , διότι
κάθε ένα λεπτό θα μηδενίζει η οθόνη
και η ένδειξη θα είναι πάντα κατά προσέγγιση.
θα το παλέψω λίγο ακόμα.
γιατι θα μηδενιζει? για μεσο ορο μετραμε... απλα καθε 60μετρησεις-δευτερολεπρα θα αποθηκευεις τον μεσο ορο και θα ξενεινας καινουργιο... επισης αν γινει αυτο μπορεις να βαλεις τις μετρισεις πανευκολα σε glcd και να βλεπεις τον μεσο ορο απο γραφικα.. επησεις θα μπορεις να δεις και χωριστα τον μεσο ορο του καθε τεταρτου τις ωρας... η σε ποιο 10λεπτο ηταν ποιο αποδοτιτη η γενιτρια.. με τον απλο μεσο ορο που θελεις εσυ πολυ πολυ δυσκολα θα το κανεις αυτο... τοσο ακριβεια θελεις? 60δειγματα για ενα λεπτο δεν φτανουν? επισης η διαφορα απο τους 60μεσους ορους /60 με τα τα 3600δειγματα /3600 δεν θα ειναι και τοσο μεγαλη... εσυ οπως νομιζεις.. επειδη παντος ο μεσο ορος ειναι εκθετικη μαθηματικη εξισωση πολυ γρηγορα βγαζει τεραστια αποτελεσματα στην προσθεση της οποτε μαλλον πρεπει να κατεβασεις λιγο τα στανταρ ακριβειας..
είμαι πολύ κοντά στην λύση του προβλήματος (εδώ και 10 μέρες το σκέφτομαι και σήμερα έχω από το πρωί στο PC)
η καλύτερη λύση είναι αυτό που πρότεινε και ο φίλος hardcode , έλπιζα να το αποφύγω
αλλά τελικά δεν βρίσκω κάτι καλύτερο.
η χρυσή εντολή της MikroBasic είναι αυτή ... dim MIN AS WORD [60] MIN = όνομα καταχωρητή
Κάθε φορά που θα κάνεις νέα μέτρηση, θα μεταφέρεις τα δεδομένα του πίνακα μία θέση αριστερά, δηλαδή η εγγραφή 144 θα πάει στη θέση 143, η 142 στην 141 .... η θέση 2 στη θέση 1 η οποία χάνεται, και θα γράψεις τη νέα μέτρηση στη θέση 144. Με αυτόν τον τρόπο έχεις πάντα το μέσον όρο για τις τελευταίες 24 ώρες.
Με την ίδια λογική μπορείς να βγάζεις το μέσον όρο των τελευταίων 30 ημερών. Για καταγραφές ανα 10 λεπτά, θα χρειαστείς πίνακα 3456 τιμών. .
επειδή μου αρέσει να κλείνω τα τόπικ που ανοίγω,
θα πω ότι μου πήρε συνολικά πολλές ώρες αλλά τελικά έφτιαξα
όλες τις ρουτίνες που ήθελα.
θα θυμίσω μόνο ότι προσπαθούσα να φτιάξω με Pic μία κατασκευή
που θα απεικονίζει σε μία LCD 2x16 τα εξής :
1η οθόνη , 1η γραμμή βολτ με δύο δεκαδικά
2η γραμμή υπολειπόμενος χρόνος μπαταρίας
2η οθόνη αμπέρ ανεμογεννήτριας με δύο δεκαδικά
αμπέρ από μπαταρίες με δύο δεκαδικά
3η οθόνη watt ανεμογεννήτριας (ανανέωση 2Hz)
watt από μπαταρίες (ανανέωση 2Hz)
4η οθόνη μέσος όρος watt ανά λεπτό (ανεμογεννήτριας) (ανανέωση 1Hz)
μέσος όρος watt ανά ώρα μέσος όρος watt ανά μέρα
5η οθόνη μέσος όρος watt ανά λεπτό (μπαταρίες) (ανανέωση 1Hz)
μέσος όρος watt ανά ώρα μέσος όρος watt ανά μέρα
6η οθόνη KWh που έδωσε η ανεμογεννήτριας με δύο δεκαδικά
KWh που έδωσαν οι μπαταρίες με δύο δεκαδικά
ομολογώ ότι ήταν αρκετά δύσκολο και ότι πολλές φορές έφτασα σε αδιέξοδο.
δυστυχώς δεν κατάφερα να τραβήξω βίντεο διότι η οθόνη είναι πολύ γυαλιστερή και φωτεινή .
μέχρι στιγμής το πρόγραμμα είναι 8KB αλλά θα το μικρύνω κι'άλλο .
οι οθόνες εναλλάσσονται και κάνουν κύκλο με δύο κουμπιά "πάνω" , "κάτω".
οι μετρήσεις των KWh αποθηκεύονται στην μνήμη EEprom του Pic, με αποτέλεσμα
να μην χάνονται με το Reset.
ευχαριστώ όλα τα "παιδιά" που μου απάντησαν και......."χρωστάω" κέρασμα. :lol:
ωραιος φιλε Γιαννη... τελειωσες ολη την κατασκευη η το προγραμμα? να δουμε καμια φοτο να καμαροσουμε αν τελειωσε
το PCB δεν το έχω φτιάξει ακόμα αλλά όλη η κατασκευή τρέχει
στο EasyPic5 κανονικότατα !
αυτο εχει σημασια το pcb ειναι το ευκολο στις μερες μας :P
... βλέπω το θέμα μόλις τώρα ...
Σε ότι αφορά το μέσο όρο, μπορείς να τον υπολογίσεις ως :
νεος μ.ο. = ( παλαιός μ.ο. * (αριθμός δειγμάτων - 1) + τελευταία τιμή ) / αριθμός δειγμάτων
παλαιός μ.ο. = νεος μ.ο.
loop
Στην αρχή ο παλαιός μ.ο. θα έχει τη τιμή μηδέν, οπότε θα πρέπει να περιμένεις να μαζέψεις τον απαιτούμενο αριθμό δειγμάτων - να "ζεσταθεί η μηχανή" - για να έχεις σωστά αποτελέσματα.
Αριθμός απαιτούμενων καταχωρητών: 4
Αριθμός πράξεων/εντολών ανά υπολογισμό : 2
Ελπίζω να βοήθησα ...
φιλε Gant αυτο που λες ειναι σωστο αλλα το προβλημα ειναι ο αριθμός δειγμάτων που θα ευφτανε σε τεραστιες τιμες πολυ γρηγορα και φαντασου και το αποτελεσμα του πολλαπλασιασμου
χμμμ ...
Αριθμό δειγμάτων εννοώ από πόσες τιμές θέλει το μέσο όρο, πχ. τελευταίες 100 τιμές.
Ο τύπος που έδωσα είναι ένας κινούμενος μέσος όρος, δηλαδή αφορά στις τελευταίες, φρέσκιες τιμές και έχει το πλεονέκτημα του πολύ εύκολου και γρήγορου υπολογισμού.
κατι τετοιο κανει και ο φιλος μας ο dt μονο που δεν κραταει πχ 100 επι τον μεσο ορο αλλα κραταει τα 100τελευταια δεδομενα και βγαζει λιγο που ακριβεστερα τον μεσο ορο...
τεσπα ομως το θεμα εληξε γιατι ο Γιαννης εκανε οτι ηθελε να κανει οποτε τωρα εμεις περιμενουμε φοτο :P
Σωστά, η δουλειά εν τέλει έγινε :)
Μπορεί όμως να βοηθήσει ο τύπος που έδωσα τον δτ200 ή άλλους που θα ασχοληθούν με κάτι παρόμοιο στο μέλλον.
Ένας κινούμενος μέσος όρος είναι στην ουσία ένα βαθυπερατό φίλτρο. Ασχολείται με τις μακροπρόθεσμες αλλαγές ενός σήματος και παραβλέπει τις βραχυπρόθεσμες αστάθειες.
Άντε να δούμε τις φώτο !!
άντε, φαγωθήκατε με τις φωτογραφίες ... :lol:
το βράδυ θα κοιτάξω να δω τι θα κάνω και θα ανεβάσω κάτι.
άντε, φαγωθήκατε με τις φωτογραφίες ... :lol:
το βράδυ θα κοιτάξω να δω τι θα κάνω και θα ανεβάσω κάτι.
Έχουν περάσει πολλάαα βράδια :lool:
sorry παιδιά το ξέχασα τελείως...
το κακό είναι ότι το έχω τοποθετήσει σε ένα εξοχικό και δεν έχω εγώ
πρόσβαση διότι είναι ξένο το σπίτι
το καλό είναι ότι εργάζεται χωρείς προβλήματα :closedeyes:
το δυσκολότερο όλων, είναι ότι οι LCD δεν βγαίνουν εύκολα video και
έχω πρόβλημα.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.