Problem mit aref

Hab schon wieder ein Problem mit dem Spannung messen.
aref zeigt immer 1v -2 an wenn andere Sensoren ausgelesen werden deswegen kann ich die Spannung des Akkus nicht richtig berechnen nur aref Spannung messen funktioniert aber in Kombination nicht mehr .
Es wehre sehr nett wenn mir ihr bei meinem Software Problem helfen könntet.
wenn ich mit dem multimeter am aref pin messe zeigt er aber 4,5v an nur wenn ich in auslese dann funktioniert es nicht immer.

       reference = analogRead(14);
arduino_vin = (1.1/reference)*1023;
Serial.println("Arduino Voltage:");
Serial.println(arduino_vin);

Hier der Code

// Simple demo for feeding some random data to Pachube.
// 2011-07-08 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

// Handle returning code and reset ethernet module if needed
// 2013-10-22 hneiraf@gmail.com
int reference;
float arduino_vin;
#include <EtherCard.h>

// change these settings to match your own setup


// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

const char website[] PROGMEM = "api.xively.com";

byte Ethernet::buffer[350];
uint32_t timer;
Stash stash;
byte session;

//timing variable
int res = 0;

float vout = 0.0;
float vin = 0.0;
float value = 0;
int result = 0;
float R1 = 10150.0;   
float R2 = 4720.0; 
 float average;
void setup () {
  Serial.begin(9600);
  Serial.println("\n[Xively example]");

  //Initialize Ethernet
  initialize_ethernet();
}


void loop () { 

  
  //if correct answer is not received then re-initialize ethernet module
  if (res > 220){
  initialize_ethernet(); 
  }
  


 
  res = res + 1;
  
  ether.packetLoop(ether.packetReceive());
  
  //200 res = 10 seconds (50ms each res)
  if (res == 200) {

    //Generate random info

        reference = analogRead(14);
arduino_vin = (1.1/reference)*1023;
Serial.println("Arduino Voltage:");
Serial.println(arduino_vin);
// ACS712T
 average = 0;
  for(int i = 0; i < 1000; i++) {
    average = average + (0.048875855327468 * analogRead(A4) -25) / 1000;
    delay(1);
  }

//Spannung dess Akkus messen
value = analogRead(A5);
   vout = (value * arduino_vin) / 1024.0; // see text
   vin = vout / (R2/(R1+R2)); 
   if (vin<0.09) {
   vin=0.0;//statement to quash undesired reading !
  } 
    // generate two fake values as payload - by using a separate stash,
    // we can determine the size of the generated message ahead of time
    byte sd = stash.create();
    stash.print("Verbrauch,");
    stash.println(average);
    stash.print("Akku,");
    stash.println(vin);
    stash.save();

    //Display data to be sent
    Serial.println(average);
    res = 220;

    // generate the header with payload - note that the stash size is used,
    // and that a "stash descriptor" is passed in as argument using "$H"
    Stash::prepare(PSTR("PUT http://$F/v2/feeds/$F.csv HTTP/1.0" "\r\n"
      "Host: $F" "\r\n"
      "X-PachubeApiKey: $F" "\r\n"
      "Content-Length: $D" "\r\n"
      "\r\n"
      "$H"),
    website, PSTR(FEED), website, PSTR(APIKEY), stash.size(), sd);

    // send the packet - this also releases all stash buffers once done
    session = ether.tcpSend(); 


  }
  
   const char* reply = ether.tcpReply(session);
   
   if (reply != 0) {
     res = 0;
     Serial.println(reply);
   }
   delay(50);
}



void initialize_ethernet(void){  
  for(;;){ // keep trying until you succeed 
    //Reinitialize ethernet module
    pinMode(5, OUTPUT);
    Serial.println("Reseting Ethernet...");
    digitalWrite(5, LOW);
    delay(1000);
    digitalWrite(5, HIGH);
    delay(500);

    if (ether.begin(sizeof Ethernet::buffer, mymac) == 0){ 
      Serial.println( "Failed to access Ethernet controller");
      continue;
    }
    
    if (!ether.dhcpSetup()){
      Serial.println("DHCP failed");
      continue;
    }

    ether.printIp("IP:  ", ether.myip);
    ether.printIp("GW:  ", ether.gwip);  
    ether.printIp("DNS: ", ether.dnsip);  

    if (!ether.dnsLookup(website))
      Serial.println("DNS failed");

    ether.printIp("SRV: ", ether.hisip);

    //reset init value
    res = 0;
    break;
  }
}
reference = analogRead(14);
arduino_vin = (1.1/reference)*1023;
Serial.println("Arduino Voltage:");
Serial.println(arduino_vin);

Ich verstehe den Sinn dieses Kodeschnippsels nicht.

Du rechnest als hättest Du die interne 1,1V Referenz aktiviert hast sie aber de fakto nicht. http://arduino.cc/en/Reference/AnalogReference

Grüße Uwe

Ich kenne mich noch mit so gut mit dem arduino aus.könntest du dass genauer erläutern und die Lösung dazu Schreiben. Mann benötigt doch die Spannung des arduinos um die Spannung des Akkus Bereichen zu können so habe ich versucht die Spannung des arduinos auszulesen

Du kannst mit analogReference() zwischen mehreren Referenzspannungen auswählen. Einmal die 5V Betriebsspannung (die eventuell schwankt, und bei USB auch nicht wirklich 5V ist), oder eine stabilere interne 1.1V Referenz. Die 5V sind standardmäßig eingestellt ohne dass man was macht.

Du rechnest mit 1.1V (und hat wohl auch einen Spannungsteiler darauf dimensioniert?), aber hat nicht die interne Referenz per analogReference(INTERNAL) in setup() ausgewählt.

Je nach Akku-Spannung dimensioniert man dann seinen Spannungsteiler so, dass die maximale Akku-Spannung der Referenzspannung entspricht. Wenn man nur maximal 5V messen will, braucht man das nicht. Dann musst du in deiner Formel aber auch mit 5V rechnen.

Dass du gemessene Spannung "reference" nennst ist übrigens sehr verwirrend

Glaube jetzt hab ichs verstanden ist ja eigentlich ganz einfach. Könnte aber ein bisschen besser beschrieben sein http://arduino.cc/en/pmwiki.php?n=Reference/AnalogReference

Danke an alle

Ist deine Schaltung korrekt. Da bin ich mir nämlich auch nicht sicher:

wenn ich mit dem multimeter am aref pin messe zeigt er aber 4,5v an nur wenn ich in auslese dann funktioniert es nicht immer.

AREF ist die externe Referenz. Damit hast du nichts zu tun

Und ist deine Spannung an A0 angeschlossen? Daran misst du nämlich wenn du einen UNO hast und auf Pin 14 bist:

analogRead(14);

besser:

analogRead(A0);

Dann wie gesagt darauf achten dass die Eingangsspannung nie deine Referenzsspannung übersteigt!

Schließ vielleicht erst mal ein Poti an um das zu testen: http://www.arduino.cc/en/Tutorial/Potentiometer

Habe es jetzt verstanden,nochmal danke