Arduino ADC liest Unsinn

Gast #4476059
Lesenswert?
• ▲
▼
Ich will einen Arduino Uno als einfachen logger verwenden (mit 
SD-shield).

Das schreiben auf die SD Karte funktioniert, nur der ADC ließt offenbar 
Blödsinn.
1
#include <SPI.h>
2
#include <SD.h>
3

4
const int chipSelect = 4;
5
  File dataFile;
6

7
uint16_t *buff;
8
uint8_t buffcnt;
9
void setup() {
10
  // put your setup code here, to run once:
11
  buff=(uint16_t*)malloc(128);
12
  buffcnt=0;
13
  SD.begin(chipSelect);
14
 
15
  
16

17
}
18
void save(){
19
  dataFile=SD.open("log.dat", FILE_WRITE);
20
  for(int i=0;i<64;i++){
21
    dataFile.println(buff[i]);
22
    }
23
  dataFile.close();
24
  }
25

26
void loop() {
27
  uint16_t voltage=analogRead(0);
28
  buff[buffcnt]=voltage;
29
  if(buffcnt=64){
30
    buffcnt=0;
31
    save();
32
    delay(10000);
33
    
34
  }
35
  
36
  
37
  
38
  
39

40
}

Zu Testzwecken habe ich A0 hart auf GND gelegt und erhalte recht 
zufällig anmutende Werte zwischen 0 und 2^16 wobei 0 deutlich öfter 
auftritt als durch eine Gleichverteilung zu erklären wäre, aber deutlich 
<10% der Messwerte sind unter 128, exakt 0 vielleicht jeder 50.
#4476078
Lesenswert?
• ▲
▼
someone schrieb:

> void loop() {
>   uint16_t voltage=analogRead(0);
>   buff[buffcnt]=voltage;
>   if(buffcnt=64){
>     buffcnt=0;
>     save();
>     delay(10000);
>
>   }

Ist das der aktuelle Sourcecode? Da fehlt noch ein ++, dadurch bleibt 
bufcnt immer auf 0 stehen (bzw. wird durch if(buffcnt=64) immer auf 64 
gehalten. Dadurch sollte immer nur der zufällige Inhalt des Buffers 
zyklisch ausgegeben werden.
Gast #4476149
Lesenswert?
• ▲
▼
Heiko G. schrieb:
> someone schrieb:
>
>> void loop() {
>>   uint16_t voltage=analogRead(0);
>>   buff[buffcnt]=voltage;
>>   if(buffcnt=64){
>>     buffcnt=0;
>>     save();
>>     delay(10000);
>>
>>   }
>
> Ist das der aktuelle Sourcecode? Da fehlt noch ein ++, dadurch bleibt
> bufcnt immer auf 0 stehen (bzw. wird durch if(buffcnt=64) immer auf 64
> gehalten. Dadurch sollte immer nur der zufällige Inhalt des Buffers
> zyklisch ausgegeben werden.

Außerdem

>>   if(buffcnt=64){

soll wohl heißen

>>   if(buffcnt==64){

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.