-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Akku Spannungs Messung Code Fehler

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.05.2006
    Beiträge
    48

    Akku Spannungs Messung Code Fehler

    Anzeige

    Hallo,

    Ich hab ein kleine Demo Funktion geschreiben und ich finde den Fehler nicht denn ich bekomme imer nur 000 als Akku Spannung raus.
    ich habe ihn in C geschreiben, bitten nicht lachen denn ich hab vorher nur
    c++ borland builder, und in c# gecodet.

    Der Code ist für den RP6.

    Code:
    uint16_t SpannungsMessungen[11], Anzahl = 10;								// Angabe wie oft gemessen wird ( Pro Funktion aufruf ).
    uint16_t Spannung = 0, Temp = 0;
    int AkkuC0 = 0;
    void AkkuCheck(void)
    {
    	AkkuC0++;
    	if(AkkuC0 >= 500)														// Alle 500 Aufrufe wird die Funktion ausgeführt.
    	{
    		AkkuC0 = 0;
    		for(int Messung = 0; Messung < Anzahl; Messung++)
    		{
    			SpannungsMessungen[Messung] = adcBat;							// 10 mal wird die AkkuSpannung gemessen.
    			if(Messung == Anzahl)
    			{
    				for(int Zaehlen = 0; Zaehlen < Anzahl; Zaehlen++)
    				{
    					Temp = Temp + SpannungsMessungen[Zaehlen];				// Die 10 Messwerte werden Addiert.
    					if(Zaehlen == Anzahl) Spannung  = Temp / Anzahl;		// Die 10 Messwerte werden und 10 geteilt.
    				}
    			}
    		}	
    	}
    	// Test ausgabe 
    	writeString_P(" || Akku Spannung: ");
    	writeIntegerLength(Spannung, DEC,  3);
    	writeChar('\n');
    }
    Ich brauch nur einen Denkanstoss wo der fehler sein kann.

    MFG Oliver G

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Bist du dir sicher das der Fehler in diesem Code-Fragment ist?
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.05.2006
    Beiträge
    48
    Hi Hubert.G,

    Ja denn was anders hab ich nicht drin nur noch:

    Code:
    int main(void)
    {
    	initRobotBase();
    	powerON(); 
    	while(true) 
    	{
    		task_RP6System();
    		AkkuCheck();	
    	}
    	return 0;
    }
    MFG Oliver G

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Kann ich mit nicht ganz vorstellen.
    Wo ist adcBat deklariert und wie kommt der Spannungswert in diese Variable.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    05.05.2006
    Beiträge
    48
    Hi Hubert.G,

    Das hab ich vergessen zu schreiben adcBat kommt aus

    #include "RP6RobotBaseLib.h"

    Denn in einen domo Snippet kommen diese Codezeilen vor:

    Code:
                   // Show Battery voltage:
    		writeString_P(" || UBAT: ");
    		writeIntegerLength(adcBat, DEC, 3);
    		writeChar('\n');
    		if(adcBat < 600) 
    		{
    			writeString_P("WARNING: BAT IS LOW!\n");
    			writeChar('\n');
    		}
    		setStopwatch1(0);
    Die demo file heisst: RP6Base_LightDetection. Nur zur info

    Also so wie ich des jetzt mitbekomm ist in meien Code kein fehler drin ( C Syntax ) Ok. jetzt Check ich nix mehr. da fällt mir nur eins ein " Der Geist in der Maschine ".

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    bekommst du auch 000 geliefert wenn du einfach nur in main-loop
    den Batteriewert ausliest und an den PC sendest ?

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Bist du dir sicher das der ADC läuft und auch ein Ergebnis liefert.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    05.05.2006
    Beiträge
    48
    @shedepe Nein, aber bei den Test Code unten geht es aus, ist ja das selbe ( ob es in der while schleife selbst drin ist oder ob es von da aus aufgerufen wird).

    @Hubert.G

    Ja der läuft und es ich bekomm werte raus, ich hab ein kleinen Test Code geschrieben ohne schnick schnack.

    Hir der Test Code:

    Code:
    #include "RP6RobotBaseLib.h" 
    
    void Test(void)
    {
    	// Show Battery voltage:
    	writeString_P(" || UBAT: ");
    	writeIntegerLength(adcBat, DEC, 3);
    	writeChar('\n');
    }
    
    
    int main(void)
    {
    	initRobotBase();
    	powerON(); 
    	while(true) 
    	{
    		task_RP6System();
    		Test();	
    	}
    	return 0;
    }
    Als ergebnis bekomme ich 804.

    MFG Oliver G

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    16.06.2008
    Ort
    Graz
    Beiträge
    41
    Also so wie ich das sehe liest du die Variable adcBat einfach aus.
    Die Frage die ich mir jetzt stelle:
    Wie kommt der Wert von ADC in die Variable adcBat hinein?
    Ich glaub nicht, dass der RP6 im Hintergrund immer den Wert vom ADC liest und in dieser Variable speichert.

    In der RP6RobotBaseLib.c gibts eine Funktion (task_ADC()), die alle Channels nacheinander ausliest und in die definierten Variablen abspeichert, so auch adcBat.

    D.h. vor jeder Messung musst du wohl die task_ADC() Funktion aufrufen um den aktuellen Wert in adcBat gespeichert zu bekommen.

    EDIT:
    ok das übernimmt dan die task_RP6System() Funktion.
    Das Problem ist dann, dass du 500 mal aus dem ADC ausliest, aber du kannst ja trotzdem nur einen Wert in adcBat speichern und den liest du dann 10 mal aus und dividierst ihn anschließend durch 10.
    Soll das auch so sein?

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    05.05.2006
    Beiträge
    48
    Hi Kenny5020,

    Ich will Fehlmessungen vermeiden, die durch den Motor erzeugt werden ( schneller fahren, richtungswechsel usw...)
    Nein, die funktion void AkkuCheck(void) wird durch die while dauert dauernd aufgerufen, erst wenn AkkuC0 >= 500 ist wird die akkuspannung 10 mal ausgelesen und dann durch 10 dividierst. Und AkkuC0 = 0;
    ich ermittel den mittelwert der akkuspannung.

    Und es beginnt von vorne .

    z.b. :
    (-1,5 + 2,5) / 2 = Mittelwert 0,5

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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