PDA

Επιστροφή στο Forum : Στατιστική με PIC



DT200
14-07-08, 12:29
έχω ένα πρόβλημα που χρειάζομαι βοήθεια από εσάς,
το πρόβλημα είναι ότι έχω τοποθετήσει μία ανεμογεννήτρια
και θέλω να κατασκευάσω μέσω ενός PIC ένα βολτόμετρο και
δύο αμπερόμετρα (καταναλώσεις και φόρτιση) το θέμα είναι ότι
έχοντας αυτές τις δύο πληροφορίες μπορώ να έχω και βατόμετρο(watt meter)

μέχρι εδώ καλά , αλλά θα ήθελα να φτιάξω και μία ρουτίνα που να κρατάει
στατιστικά για το μέσον όρον των Watt που καταναλώθηκαν,
αυτό δεν είναι ιδιαίτερα δύσκολο διότι οι πράξεις είναι πολύ εύκολες
π.χ. (10w+15w+7w+30w)/4=15,5w
το πρόβλημα εντοπίζετε στο ότι μετά από λίγη ώρα ο αριθμός θα είναι πολύ μεγάλος
και δεν θα χωράει σε κανέναν καταχωρητή ακόμα και 32Bit,
ψάχνω λιπών κάποιο τρόπο να κρατήσω τον αριθμό σε κάποια λογικά
πλαίσια , π.χ. μέχρι 65000 (16Bit)

τι μπορώ να κάνω ???

hardcode
14-07-08, 13:01
Εξαρτάται απο το χρόνο για τον οποίο θες να υπολογίσεις το μέσον όρο.
Αν θες π.χ. να σου βγάζει το μέσο όρο για το τελευταίο 24ωρο, με μετρήσεις ανα 10 λεπτά θα χρειαστείς έναν πίνακα 144 τιμών. Διαιρώντας το άθροισμα των τιμών του πίνακα δια του 144 έχεις την κατανάλωση των τελευταίων 24 ωρών.
Κάθε φορά που θα κάνεις νέα μέτρηση, θα μεταφέρεις τα δεδομένα του πίνακα μία θέση αριστερά, δηλαδή η εγγραφή 144 θα πάει στη θέση 143, η 142 στην 141 .... η θέση 2 στη θέση 1 η οποία χάνεται, και θα γράψεις τη νέα μέτρηση στη θέση 144. Με αυτόν τον τρόπο έχεις πάντα το μέσον όρο για τις τελευταίες 24 ώρες.
Με την ίδια λογική μπορείς να βγάζεις το μέσον όρο των τελευταίων 30 ημερών. Για καταγραφές ανα 10 λεπτά, θα χρειαστείς πίνακα 3456 τιμών. Για να μη σου βγουν μεγάλοι οι πίνακες, κάνε πιο αραιή δειγματοληψία, π.χ. ανά μισή ώρα.
Ελπίζω να βοήθησα

DT200
14-07-08, 13:05
ναι , είναι καλό και αυτό αλλά η δειγματοληψία θα πρέπει να γίνετε κάθε δευτερόλεπτο
διότι είναι για ανεμογεννήτρια και η απόδοση της αλλάζει σε κάθε δευτερόλεπτο .

jvourv
14-07-08, 14:16
Μια άλλη ιδέα είναι να χρησιμοποιήσεις πολλούς καταχωρητές μνήμης του PIC και να σχηματίσεις 32, 40 ή και μεγλύτερου εύρους αριθμούς.
Θα γίνουν λίγο πιο πολύπλοκες οι μαθηματικές πράξεις του μικροελεγκτή καθώς θα πρέπει να αναπτυχθούν ρουτίνες πράξεων σε περισσότερα bit.
Ποιον PIC χρησιμοποιείς;



Φιλικά,
Γιάννης

DT200
14-07-08, 14:20
δεν έχω καταλήξει ακόμα διότι δεν έχω
αποφασίσει όλες τις ρουτίνες που θα εκτελεί .

jvourv
14-07-08, 14:22
Ρωτάω γιατί ίσως να σε βολέψει να χρησιμοποιήσεις 32-μπιτους PIC


Γιάννης

DT200
14-07-08, 14:24
όχι με τίποτα , θα ήταν τεράστια υπολογιστική σπατάλη.

jvourv
14-07-08, 14:27
Ίσως... αλλά πάλι μπορεί να σε κάλυπτε σε θέμα εύρους bit καταχωρητών και να προέκυπταν πιο απλές ρουτίνες...
Τέσπα, εσύ ξέρεις.

billtech
14-07-08, 16:36
φιλε μου δεν ξερω με pic αλλα με κατι λιγα που ξερω μπορεις να το ψαξεις λιγο αν θες με 8051 (ds89c420-μαχιμ)και με εξωτερικες μνημες(ειτε απο την μαχιμ ειται απο την ΤΙ)

DT200
14-07-08, 16:44
Αυτό που ψάχνω εγώ είναι το μαθηματικό μέρος του
προβλήματος , δηλαδή πως μπορώ να κρατήσω
τον αριθμό χαμηλά (π.χ. 60.000).
σίγουρα κάτι θα υπάρχει...

kopla
14-07-08, 16:50
Η εύκολη λύση και η ενδεδειγμένη είναι να χρησιμοποιήσεις C compiler ασχέτως της επιλογής της αρχιτεκτονικής του .. PIC.
Πάρε 18F που είναι 8bit arch & 16bit core ( δεν σε πολυ νοιάζει αυτό ), και mcc18 της microchip ή ότι να ναι.

Η αποθήκευση των τιμών θα γίνει σε EEPROM ( εσω ή εξω ~τερική )

DT200
14-07-08, 16:57
για γλώσσα χρησιμοποιώ την MikroBasic και
από PIC 18F4550, το πρόβλημα μου είναι
ότι δεν ξέρω τι μαθηματικές πράξεις πρέπει να
κάνω για να παίρνω το μέσον όρον χωρίς να έχω
υπερχείλιση του καταχωρητή μου με 16Bit ή και 32Bit καταχωρητή.

Nemmesis
14-07-08, 17:33
δεν γιναιτε να βρισκεις τον μεσο ορο καθε δευτερολεπτο για ενα λεπτο να μηδενιζεις καθα λεπτο αυτο τον μεσο ορο και μετα να βρισκεις τον μεσο ορο πχ για μια ορα να υπολογιζεις 60 δειγματα αντι για 3600?

DT200
14-07-08, 17:46
γίνετε αλλά δεν είναι σωστό , διότι
κάθε ένα λεπτό θα μηδενίζει η οθόνη
και η ένδειξη θα είναι πάντα κατά προσέγγιση.

θα το παλέψω λίγο ακόμα.

Nemmesis
14-07-08, 18:22
γιατι θα μηδενιζει? για μεσο ορο μετραμε... απλα καθε 60μετρησεις-δευτερολεπρα θα αποθηκευεις τον μεσο ορο και θα ξενεινας καινουργιο... επισης αν γινει αυτο μπορεις να βαλεις τις μετρισεις πανευκολα σε glcd και να βλεπεις τον μεσο ορο απο γραφικα.. επησεις θα μπορεις να δεις και χωριστα τον μεσο ορο του καθε τεταρτου τις ωρας... η σε ποιο 10λεπτο ηταν ποιο αποδοτιτη η γενιτρια.. με τον απλο μεσο ορο που θελεις εσυ πολυ πολυ δυσκολα θα το κανεις αυτο... τοσο ακριβεια θελεις? 60δειγματα για ενα λεπτο δεν φτανουν? επισης η διαφορα απο τους 60μεσους ορους /60 με τα τα 3600δειγματα /3600 δεν θα ειναι και τοσο μεγαλη... εσυ οπως νομιζεις.. επειδη παντος ο μεσο ορος ειναι εκθετικη μαθηματικη εξισωση πολυ γρηγορα βγαζει τεραστια αποτελεσματα στην προσθεση της οποτε μαλλον πρεπει να κατεβασεις λιγο τα στανταρ ακριβειας..

DT200
14-07-08, 18:31
είμαι πολύ κοντά στην λύση του προβλήματος (εδώ και 10 μέρες το σκέφτομαι και σήμερα έχω από το πρωί στο PC)
η καλύτερη λύση είναι αυτό που πρότεινε και ο φίλος hardcode , έλπιζα να το αποφύγω
αλλά τελικά δεν βρίσκω κάτι καλύτερο.

η χρυσή εντολή της MikroBasic είναι αυτή ... dim MIN AS WORD [60] MIN = όνομα καταχωρητή



Κάθε φορά που θα κάνεις νέα μέτρηση, θα μεταφέρεις τα δεδομένα του πίνακα μία θέση αριστερά, δηλαδή η εγγραφή 144 θα πάει στη θέση 143, η 142 στην 141 .... η θέση 2 στη θέση 1 η οποία χάνεται, και θα γράψεις τη νέα μέτρηση στη θέση 144. Με αυτόν τον τρόπο έχεις πάντα το μέσον όρο για τις τελευταίες 24 ώρες.
Με την ίδια λογική μπορείς να βγάζεις το μέσον όρο των τελευταίων 30 ημερών. Για καταγραφές ανα 10 λεπτά, θα χρειαστείς πίνακα 3456 τιμών. .

Nemmesis
14-07-08, 18:38
:ok:

DT200
31-07-08, 20:53
επειδή μου αρέσει να κλείνω τα τόπικ που ανοίγω,
θα πω ότι μου πήρε συνολικά πολλές ώρες αλλά τελικά έφτιαξα
όλες τις ρουτίνες που ήθελα.
θα θυμίσω μόνο ότι προσπαθούσα να φτιάξω με 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:

Nemmesis
31-07-08, 21:02
ωραιος φιλε Γιαννη... τελειωσες ολη την κατασκευη η το προγραμμα? να δουμε καμια φοτο να καμαροσουμε αν τελειωσε

DT200
31-07-08, 21:05
το PCB δεν το έχω φτιάξει ακόμα αλλά όλη η κατασκευή τρέχει
στο EasyPic5 κανονικότατα !

Nemmesis
31-07-08, 21:16
αυτο εχει σημασια το pcb ειναι το ευκολο στις μερες μας :P

Gant
01-08-08, 14:06
... βλέπω το θέμα μόλις τώρα ...

Σε ότι αφορά το μέσο όρο, μπορείς να τον υπολογίσεις ως :


νεος μ.ο. = ( παλαιός μ.ο. * (αριθμός δειγμάτων - 1) + τελευταία τιμή ) / αριθμός δειγμάτων
παλαιός μ.ο. = νεος μ.ο.
loop


Στην αρχή ο παλαιός μ.ο. θα έχει τη τιμή μηδέν, οπότε θα πρέπει να περιμένεις να μαζέψεις τον απαιτούμενο αριθμό δειγμάτων - να "ζεσταθεί η μηχανή" - για να έχεις σωστά αποτελέσματα.

Αριθμός απαιτούμενων καταχωρητών: 4
Αριθμός πράξεων/εντολών ανά υπολογισμό : 2

Ελπίζω να βοήθησα ...

Nemmesis
01-08-08, 18:51
φιλε Gant αυτο που λες ειναι σωστο αλλα το προβλημα ειναι ο αριθμός δειγμάτων που θα ευφτανε σε τεραστιες τιμες πολυ γρηγορα και φαντασου και το αποτελεσμα του πολλαπλασιασμου

Gant
01-08-08, 21:12
χμμμ ...

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

Ο τύπος που έδωσα είναι ένας κινούμενος μέσος όρος, δηλαδή αφορά στις τελευταίες, φρέσκιες τιμές και έχει το πλεονέκτημα του πολύ εύκολου και γρήγορου υπολογισμού.

Nemmesis
02-08-08, 00:08
κατι τετοιο κανει και ο φιλος μας ο dt μονο που δεν κραταει πχ 100 επι τον μεσο ορο αλλα κραταει τα 100τελευταια δεδομενα και βγαζει λιγο που ακριβεστερα τον μεσο ορο...
τεσπα ομως το θεμα εληξε γιατι ο Γιαννης εκανε οτι ηθελε να κανει οποτε τωρα εμεις περιμενουμε φοτο :P

Gant
02-08-08, 06:43
Σωστά, η δουλειά εν τέλει έγινε :)
Μπορεί όμως να βοηθήσει ο τύπος που έδωσα τον δτ200 ή άλλους που θα ασχοληθούν με κάτι παρόμοιο στο μέλλον.
Ένας κινούμενος μέσος όρος είναι στην ουσία ένα βαθυπερατό φίλτρο. Ασχολείται με τις μακροπρόθεσμες αλλαγές ενός σήματος και παραβλέπει τις βραχυπρόθεσμες αστάθειες.

Άντε να δούμε τις φώτο !!

DT200
02-08-08, 10:34
άντε, φαγωθήκατε με τις φωτογραφίες ... :lol:
το βράδυ θα κοιτάξω να δω τι θα κάνω και θα ανεβάσω κάτι.

kopla
17-09-08, 03:41
άντε, φαγωθήκατε με τις φωτογραφίες ... :lol:
το βράδυ θα κοιτάξω να δω τι θα κάνω και θα ανεβάσω κάτι.

Έχουν περάσει πολλάαα βράδια :lool:

DT200
17-09-08, 15:17
sorry παιδιά το ξέχασα τελείως...
το κακό είναι ότι το έχω τοποθετήσει σε ένα εξοχικό και δεν έχω εγώ
πρόσβαση διότι είναι ξένο το σπίτι
το καλό είναι ότι εργάζεται χωρείς προβλήματα :closedeyes:
το δυσκολότερο όλων, είναι ότι οι LCD δεν βγαίνουν εύκολα video και
έχω πρόβλημα.