Räkna medelvärde i PIC
Räkna medelvärde i PIC
Är det jobbigt för PICen att spara typ ett tal på 8bitar och sen räkna medelvärdet??
Asså typ en 24bits variabel som fungerar som en summa och som delas med antal tal => medelvärde....jag menar hur fort går det om man kör med 6Mhz plus att man har massa annat o göra??
Förstår ni?
Typ:
long summa=0,antal=0;
char tal;
while(1) {
tal=8bits tal;
summa+=tal;
antal++;
print(summa/antal);
}
Asså typ en 24bits variabel som fungerar som en summa och som delas med antal tal => medelvärde....jag menar hur fort går det om man kör med 6Mhz plus att man har massa annat o göra??
Förstår ni?
Typ:
long summa=0,antal=0;
char tal;
while(1) {
tal=8bits tal;
summa+=tal;
antal++;
print(summa/antal);
}
Division kan ta lång tid, men om antalet tal som du ska ta medelvärde av är 2^N så är det lätt, bara att skifta (som du säkert vet så är högerskift ett steg av ett binärt tal samma sak som division med två).
Om det är t.ex. 256 (2^8) eller 65536 st (2^16) st är det extra lätt. Släng bort en eller två byte bara...
För 65536 st har du alltså en 24bits (tre byte) summa, för att räkna ut medelvärdet när du adderat alla tal så tar du bara den mest värda byten och struntar i de andra två.
edit: ok, du skrev visst till lite mer... du vill alltså räkna ut medelvärdet kontinuerligt?
Det blir nog jobbigare, men någon som är smart och/eller mindre trött kanske har en ide om det fallet...
Om det är t.ex. 256 (2^8) eller 65536 st (2^16) st är det extra lätt. Släng bort en eller två byte bara...
För 65536 st har du alltså en 24bits (tre byte) summa, för att räkna ut medelvärdet när du adderat alla tal så tar du bara den mest värda byten och struntar i de andra två.
edit: ok, du skrev visst till lite mer... du vill alltså räkna ut medelvärdet kontinuerligt?
Det blir nog jobbigare, men någon som är smart och/eller mindre trött kanske har en ide om det fallet...
Visst ska den klara av att göra en division, det kräver ju inte så mycket minne men tid kräver det.
Här är koden till Pic18:
Här är koden till Pic18:
Kod: Markera allt
movlw DivNr4
movwf Div1_4
movlw DivNr3
movwf Div1_3
movlw DivNr2
movwf Div1_2
movlw DivNr1
movwf Div1_1
movf DivRes3,w
movwf Div2_3
movf DivRes2,w
movwf Div2_2
movf DivRes1,w
movwf Div2_1
bcf Carry
clrf DivWork1
clrf DivWork2
clrf DivWork3
movlw .32
movwf Counter
DivPart1
rlcf Div1_1
rlcf Div1_2
rlcf Div1_3
rlcf Div1_4
rlcf DivWork1
rlcf DivWork2
rlcf DivWork3
movf Div2_1,w
subwf DivWork1,w
movwf Tmp1
movf Div2_2,w
subwfb DivWork2,w
movwf Tmp2
movf Div2_3,w
subwfb DivWork3,w
movwf Tmp3
btfss STATUS,C
goto SkipStoreDiv1
movff Tmp1,DivWork1
movff Tmp2,DivWork2
movff Tmp3,DivWork3
SkipStoreDiv1:
rlcf DivRes1
rlcf DivRes2
rlcf DivRes3
rlcf DivRes4
decfsz Counter
goto DivPart1
Asså jag blir helt galen....grr....när jag kör helt vanligt och kompilerar går allt genom och jag får:
Memory Usage Map:
Program ROM $0000 - $086A $086B ( 2155) words
Program ROM $086C - $100C $07A1 ( 1953) words
Program ROM $16B4 - $17FF $014C ( 332) words
$1158 ( 4440) words total Program ROM
Bank 0 RAM $0020 - $0078 $0059 ( 89) bytes total Bank 0 RAM
Bank 2 RAM $0120 - $0147 $0028 ( 40) bytes total Bank 2 RAM
Config Data $2007 - $2007 $0001 ( 1) words total Config Data
Program statistics:
Total ROM used 4440 words (54.2%)
Total RAM used 129 bytes (50.4%)
Men så fort jag lägger till en char buffer[25] så klagar kompilatorn...Den säger bara BUILD FAILED och inget annat!! Vad kan felet vara?
Memory Usage Map:
Program ROM $0000 - $086A $086B ( 2155) words
Program ROM $086C - $100C $07A1 ( 1953) words
Program ROM $16B4 - $17FF $014C ( 332) words
$1158 ( 4440) words total Program ROM
Bank 0 RAM $0020 - $0078 $0059 ( 89) bytes total Bank 0 RAM
Bank 2 RAM $0120 - $0147 $0028 ( 40) bytes total Bank 2 RAM
Config Data $2007 - $2007 $0001 ( 1) words total Config Data
Program statistics:
Total ROM used 4440 words (54.2%)
Total RAM used 129 bytes (50.4%)
Men så fort jag lägger till en char buffer[25] så klagar kompilatorn...Den säger bara BUILD FAILED och inget annat!! Vad kan felet vara?