- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 7 von 7

Thema: Wo ist der denk fehler ?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562

    Wo ist der denk fehler ?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    die vairable Volt hat immer den wert 0
    in fuktion get bat power
    result ist aber 427

    board ist ein RN-Control

    ich möchte die battire spannung messen
    Angehängte Dateien Angehängte Dateien
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  2. #2
    Gast
    Hallo

    int Ref = 5 / 1023; //5V / 8 Bit
    int Volt = 0;

    sind doch alles ganzzahlige Variablen. Versuch doch mal float.

    MFG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    15.10.2004
    Ort
    Pfalz
    Beiträge
    83
    Hallo Numberfive,

    Habe in C schon ähnliche Probleme gehabt.
    Ich steige nicht vollständig durch Deinen Quelltext durch, weil Zeit und teils auch Wissen fehlt.
    Allerdings vermute ich einen Fehler in den folgenden Zeilen:

    Volt = Result * (5/ 1023); *kommt hier eine Ganzzahl heraus?*
    itoa(Volt,buffer2,10);
    SendString(buffer2);
    Volt = Volt * 5,2941; *kommt hier eine Ganzzahl heraus?*

    Du solltest mit dem Modulo-Operator arbeiten:

    Das funktioniert so:

    Eine Division liefert einen Ganzzahligen Rest, so wie wir das ganz zu Anfang in der Schule mal gemacht haben.

    Syntax:

    Rest = Wert % Divisor

    Beispiel:

    1 = 13 % 4 * 13 : 4 ergibt 3 Rest 1*

    Andere Möglichkeit:

    Die Division durch eine Schleife voll Subtraktionen ersetzen

    Viel Erfolg
    Patrick

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.02.2004
    Ort
    Starnberg
    Alter
    47
    Beiträge
    170
    Hallo,

    Volt = Result * (5/ 1023);
    Volt ist ein Integer-Wert. Result danke ich auch mal, oder macht der AD-Wandler 10 bit?

    Aber es passiert folgendes: du hast (5/1023) geklammert. Bei dieser Operation kommt für Int-Zahlen immer 0 raus. Mit dieser 0 wird dann dein Result Multpliziert. Ergebnis ist wieder 0.

    Grüsse, Martin

  5. #5
    Gast
    "C" kommt von cast:
    du mußt schreiben ((float)5 / (float) 1023) )

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562
    Hallo Leute,

    sory das ich jetzt erst schreibe aber konnte nicht schneller.

    Code:
    	WORD Result = 0;
    	float Volt = 0;
    	float Teiler = 5.2941;
    	
    	CLEARBIT(ADCSRA,ADEN); // aus schlaten damit ich den port wechseln kann 
    	// Messen an port 6 
    	CLEARBIT(ADMUX,MUX4);
    	CLEARBIT(ADMUX,MUX3);
    	SETBIT(ADMUX,MUX2);
    	SETBIT(ADMUX,MUX1);
    	CLEARBIT(ADMUX,MUX0);
    	SETBIT(ADCSRA,ADEN);
    	// Bit invertieren messung starten
    	ADCSRA |=_BV(ADSC);
    	waitforad = 1;
    	// warten bis messung abgesclossen ist und wert gültig
    	while(waitforad != 0)
    	{
    		//warten auf den adwandler;
    	};
    	// den wert aus dem register holen
    	char buffer2[20];
    	SendString("Messe :");
    	Result = ADCH*256 + ADCL;
    	
    	itoa(Result,buffer2,10);
    	SendString(buffer2);
    	
    	Volt = ((Result * 5)/ 1023)*Teiler;
    	// Berechnung Volt gemessen bei Ref von 5V
    	
    	SendString("Volt :");
    	itoa(Volt,buffer2,10);
    	SendString(buffer2);
    			
    	if(Volt > 11)
    	{
    		if(Volt >=12)
    		{
    			if(Volt >= 13)
    			{
    				SendMCData(2,100); // frisch geladen
    			}
    			else
    			{
    				SendMCData(2,50); // Bat OK aber bald
    			}
    		}
    		else
    		{
    			SendMCData(2,20); //fast leer
    		}
    	}
    	else
    	{
    		SendMCData(2,0); // Batt ist leer
    	}
    Damit stimmt es schon fast also die die Gemessen 2,x Volt scheine wohl zu passen aber es kommen immer 10 volt raus mein multi meter zeig aber
    11.8 Volt an und jetzt ?

    Gruß
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562
    So jetzt tut es wohl

    Code:
    	WORD Result = 0;
    	double Volt = 0;
    
    	CLEARBIT(ADCSRA,ADEN); // aus schlaten damit ich den port wechseln kann 
    	// Messen an port 6 
    	CLEARBIT(ADMUX,MUX4);
    	CLEARBIT(ADMUX,MUX3);
    	SETBIT(ADMUX,MUX2);
    	SETBIT(ADMUX,MUX1);
    	CLEARBIT(ADMUX,MUX0);
    	SETBIT(ADCSRA,ADEN);
    	// Bit invertieren messung starten
    	ADCSRA |=_BV(ADSC);
    	waitforad = 1;
    	// warten bis messung abgesclossen ist und wert gültig
    	while(waitforad != 0)
    	{
    		//warten auf den adwandler;
    	};
    	
    	// den wert aus dem register holen
    	Result = ADCH*256 + ADCL;
    	
    	Volt = (((Result * 5)/ 1.024)*((float)22000+5100))/5100;
    	// Berechnung Volt gemessen bei Ref von 5V
    	// * 1000 für die komma stellen
    	// Mit Spannungsteiler 22k 5,1 k
    	
    	// Das If grab an passen wenn mal die Akkus wirklich daran hängen
    	if(Volt > 11)
    	{
    		if(Volt >=12)
    		{
    			if(Volt >= 13)
    			{
    				SendMCData(2,100); // frisch geladen
    			}
    			else
    			{
    				SendMCData(2,50); // Bat OK aber bald
    			}
    		}
    		else
    		{
    			SendMCData(2,20); //fast leer
    		}
    	}
    	else
    	{
    		SendMCData(2,0); // Batt ist leer
    	}
    nicht ganz genaue aber ich denk besser wird es nicht die ganz zahl stimm jetzt wenigstens.

    es kommen 11,08 raus und mit dem muti meter messe ich 11,66

    Gruß
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen