PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerfrage zur Datenspeicherung



Johnny6
01.08.2006, 09:46
hallo,
programmiere erst seit kurzem und habe jetzt eine frage zur speicherung von 8Bit Werten. ich arbeite mit ATmega16 und dem STK500.
ich lese über ADC Werte ein und möchte immer 3 Werte speichern, diese dann mitteln, löschen und das selbe mit den nächsten 3 Werten machen.
Wie kann ich das am einfachsten machen?
Wäre nett wenn mir jemand helfen könnte!

Johnny6
01.08.2006, 10:24
jemand muss doch kurz zeit haben! Bitte!

bergowitch
01.08.2006, 11:05
hallo
mir ist nicht klar wo du speichern möchtest.
ansonsten eine funktion schreiben (ohne test ob alles richtig ist)


int mittelwert (int wert1; int wert2; int wert3)
{
int zwergebnis;
zwergebnis = wert1 + wert2 + wert3;
zwergebnis = zwergebnis / 3;
return zwergebnis;
}


und die ergebnisse in einem array speichern?
war es das was du wolltest?
gruß
stefan

Johnny6
01.08.2006, 12:31
ja ok und wenn ich jetzt einen zähler habe der bis zu einem bestimmten ereignis zählt und jedes mal wenn dieses ereignis auftritt möchte ich den zählerwert speichern. bei 3 gespeicherten werte diese jedesmal mitteln und löschen. soll ich das mit array machen? wenn ja wie am einfachsten?

askazo
01.08.2006, 13:12
Der einfachheit halber erst mal mit 8bit...


void GetADC (void)
{
static unsigned char s_aucData[3];
static unsigned char s_ucCount;
unsigned char ucTmp;

s_ucCount++;

//ADC auslesen
ADCSR |= 0x40;
while (ADCSR & 0x40)
;
s_aucData[s_ucCount] = ADCH;

if (s_ucCount == 3)
{
mittelwert (s_aucData); //siehe Funktion oben...
s_ucCount = 0;
}
}

Ich weiß nicht genau, was Du machen willst, aber in der Regel ist eine fließende Mittelwertbildung sinnvoller. Fließend heißt, bei jedem Auslesen des ADCs fliegt der älteste Wert aus dem Array raus und der neue kommt hinzu.

aGruß,
askazo