Hallo Leute,
ich habe einen Atmega32 (16MHz) mit einer MMC-Karte verbunden und
benutze die Library von Roland Riegel um mit der MMC-Karte zu
kommunizieren.
Nun würde ich gerne die Werte, die ich von dem AD-Wandler bekomme auf
die MMC-Karte speichern.
Wenn ich das folgendermaßen mache, funktioniert das auch einwandfrei:
1 | uint16_t analog;
|
2 | char buffer[24];
|
3 | uint8_t data_len;
|
4 |
|
5 | ADCSRA |= (1<<ADSC);
|
6 | while (ADCSRA & (1<<ADSC) ) {}
|
7 | analog = ADCL;
|
8 | analog += (ADCH<<8);
|
9 | itoa(analog,buffer,10);
|
10 | strcat(buffer," ");
|
Und dann wird das ganze mit der Funktion von Roland Riegel auf die
MMC-Karte geschrieben. Ich erhalte dann Werte zwischen 0 und 1023...
Jetzt möchte ich aber die Effizienz etwas steigern. Um das zu erreichen
habe ich folgenden Code geschrieben:
1 | for(i=0;i<24;i+=2) //in 23 Bytes Daten speichern ins 24te \0
|
2 | {
|
3 | ADCSRA |= (1<<ADSC);
|
4 | while (ADCSRA & (1<<ADSC) ) {}
|
5 | low = ADCL;
|
6 | high = ADCH;
|
7 | buffer[i] = low;
|
8 | buffer[i+1] = high;
|
9 | }
|
Und dann wird das ganze wieder auf die MMC-Karte geschrieben.
Wenn ich die MMC-Karte dann auslese soll der Wert wieder in eine
Dezimalzahl umgewandelt werden.
Das habe ich so realisiert:
1 | while(i<zeile.length())
|
2 | {
|
3 | wert = zeile[i];
|
4 | res << wert ; // res ist ein File-Handle
|
5 | wert += (zeile[i+1]<<8);
|
6 |
|
7 | res << "+" << (int)zeile[i+1] ;
|
8 | cout << "WERT:" << wert << "| " ;
|
9 | res << "=" << wert << "|" << endl;
|
10 |
|
11 | i+=2;
|
12 | }
|
Ich habe das so verstanden, dass wenn ich den Wert 544 vom ADC bekomme,
dass dann 0000 0010 im ADCH und 0010 0000 im ADCL stehen sollte
Kann mir jemand sagen, was ich falsch mache?!?!
Stimmt das Auslesen, stimmt die Wertzuweisung...
Wird der Wert aus ADCH auch richtig in "high" abgespeichert?
(es kommt mir manchmal so vor, als ob das high byte immer das gleiche
wie am Start einer ganzen Messung wäre.)
Teilweise kommen Werte (umgewandelt) vor, die sich in Regionen von 2
hoch 32 ansiedeln...
Ich hoffe ich habe mein Problem gut schildern können, alle wichtigen
Code-Teile und und Spezifikationen geliefert.
Viele Grüße
Michael