- LiFePO4 Speicher Test         
Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 66

Thema: projekt: asuro sucht selbständig seine ladestation

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Anzeige

    Praxistest und DIY Projekte
    Was ist nun eigentlich das US-Modul?

  2. #22
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    ultraschall-entfernungsmessung. das ist eine erweiterungsplatine, welche in dem Buch für den asuro beschrieben wird.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180

    double mit prinf ausgeben

    hi allerseits,

    ich versuche mich wieder mal an meinem projekt, mit der batteriespannung und dem aussortieren der ausreisser bin ich eigentlich zufrieden, obwohl man es sicher elegenter machen kann:
    Code:
    /*ladestation_anfahren*/
    
    #include "asuro.h"
    #include "inka.h"
    #include "stdio.h"
    
    
    unsigned int batt_1;
    unsigned int batt_2;
    unsigned int batt_3;
    double u_batt;
    
    int main (void)
    
    {
    
    Init();
    
    WaitforStart();
    
    while(1)
    {
    	(batt_1)=Batterie();
    	(batt_2)=Batterie();
    	(batt_3)=Batterie();
    	if ((batt_1)<((batt_2)-(batt_2)/100)) (batt_1)=Batterie();	
    	
    	if ((batt_2)<((batt_3)-(batt_3)/100)) (batt_2)=Batterie();	
    	
    	if ((batt_3)<((batt_1)-(batt_1)/100)) (batt_3)=Batterie();			
    	(u_batt)= 0,0055*Batterie();
    
    	SerWrite("\r\n batt_1: ",11);
    	PrintInt(batt_1);
    	SerWrite(" batt_2: ",9);
        PrintInt(batt_2);
    	SerWrite(" batt_3: ",9);
        PrintInt(batt_3);
    	SerWrite(" u_batt: ",9);
        printf ("%5f", (u_batt));
    	SerWrite(" [V]",4);
    
    
      {
      EncoderInit();
     	if (PollSwitch()>0) {
    	StatusLED(RED);
    	Go (-100, 150);
    	}
    	else {
    	Go (200, 150);
    	StatusLED(GREEN);
    	Msleep(500);
    	}
    	
    	if (PollSwitch()>0) {
    	StatusLED(RED);
    	Go (-100, 150);
    	}
    	else {
    	Turn (90, 150);
    	StatusLED(YELLOW);
    	Msleep(500);
    	}
      }
    }
    return 0;
    }
    ich wollte mir aber zu den Batterie() werten auch noch die daraus errechnete spannung ausgeben, was ich auch mache, wo und wonach ich auch suche, es wird einfach nix im terminal ausgegeben...

    auszug aus dem oberen code:

    Code:
    PrintInt(batt_3);
    	SerWrite(" u_batt: ",9);
       printf ("%5f", (u_batt));
    	SerWrite(" [V]",4);
    was stimmt da nicht?
    gruß inka

  4. #24
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo inka,

    printf alleine funktioniert so nicht. Dazu müßtest du die Ausgabe (STDOUT) auf die serielle Schnittstelle umleiten. Alternativ könntest du sprintf verwenden, dann ist das Ziel ein String. Den könntest du dann mit SerWrite ausgeben.

    Wie das geht, steht im mikrocontroller.net Tutorial
    Für Floating Point Ausgaben benötigts du zudem noch eine AVR Lib, die du im Makefile hinzufügen mußt, siehe
    http://www.mikrocontroller.net/artic...mit_AVR-Studio

    Allerdings fiunktioniert die Umleitung von STDOUT, so wie im Tutorial beschrieben, mit neueren AVR-GCC Compilern wohl nicht mehr.

  5. #25
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi allerseits,
    dank Printfloat bin ich wieder ein kleines stückchen im projekt weitergekommen, jetzt kann ich am monitor den stand der batterieladung überprüfen. Schön wäre es allerdings, wenn ich jetzt noch ein schritt weiterkäme - den batteriestand in Volt auf der LCD erweiterungsplatine anzuzeigen. dazu muss ich die am monitor ausgegebene floatvariable wieder in einen string umwandeln um sie dann "pixel für pixel" auszugeben. Ist das so? Ich habe im asuro-band II nämlich keine funktion gefunden, die es möglich macht irgendwelche, wie auch immer geartete variable auszugeben. Nur text und pixel...
    gruß inka

  6. #26
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    text ist schonmal nicht schelcht.

    ich hab mal nen ansatz zum nachdenken für dich:

    du hast eine zahl die den batteriezusatnd beschreibt. am besten wäre ein int oder ein char.
    wenn du aus diesem die einzelnen ziffern extrahierst (dazu unten mehr), macht das die sache einfacher. beispiel: aus 123 wird 1 und 2 und 3

    jetzt such n dem display-zeichensatz nach der position der null. direkt dahinter kommen 1,2,3... usw. wenn du jetzt den positionswert der null zu einer zahl die du so extrahiert hast addierst, kommst du automatisch auf das richtige, auszugebende zeichen. beispiel: wir nehmen an, dass die null den wert 48 (oder 0x30) hat. jetzt wollen wir die zahl 140 ausgeben:

    zuerst zerlegen: 1 4 0
    jetzt die eins ausgeben:

    48 + 1 = 49 --> wert für eine eins auf dem display
    48 + 4 = 52 --> wert für eine vier auf dem display
    48 + 0 = 48 --> wert für eine null auf dem display


    jetzt brauchen wir nur noch eine methode, um die ziffern aus der ganzen zahl rauszubekommen. diese die ich dir jetzt zeige geht nur für ganzzahlen, also chars und ints. in diesem falle nehme ich einen char als beispiel, die integer funktionieren genauso (bloss dass die zahlen zwei stellen mehr haben).
    Beispiel: 246

    zuerst wollen wir die hunderterstelle haben.

    unsigned char hunderter(unsigned char zahl){
    return zahl/100;
    }

    das war schonmal recht einfach. die zahl wird durch 100 geteilt, der rest fällt weg, und die hunderter bleiben. 246 / 100 = 2
    jetzt die zehner:

    unsigned char zehner(unsigned char zahl){
    return (zahl - (100 * hunderter(zahl)))/10;
    }

    zuerst wird hundert mal die hunderterstelle abgezogen und dann der rest durch 10 geteilt.
    246 - 100*2 = 46
    46 / 10 = 4
    jetzt nur noch die einerstelle:

    unsigned char einer(unsigned char zahl){
    return zahl - (100*hunderter(zahl)) - (10*zehner(zahl));
    }

    es werden erst hundert mal die hunderterziffer, und dann zehn mal die zehner-ziffer abgezogen.
    246 - 100*2 - 10*4 = 6

    und dann kannst du das so machen wie oben beschreiben. den zeichenwert der null addieren ("offset") und ans display ausgeben.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #27
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi damaltor,

    danke erstmal, die erkklärung zu den stellen im display so weit verstandan...
    frage noch dazu:
    (bloss dass die zahlen zwei stellen mehr haben).
    was bedeutet das konkret?

    Beispiel: 246

    zuerst wollen wir die hunderterstelle haben.

    unsigned char hunderter(unsigned char zahl){
    return zahl/100; }
    in diesem beispiel ist "unsigned char hunderter" eine vorher noch zu definierende variable, die nach der ausführung der berechnung im o.g. beispiel den wert 2 hat?

    "(unsigned char zahl)" entspricht im beispiel der zahl 246 (die ja auch noch zugewiesen werden muss? Könnte dort die zahl vor dem komma aus dem spannungswert der batterie übernommen werden (natürlich die einserstelle incl. der berechnung)?

    mit "{ return zahl/100;}" wird das ergebnis hunterter berechnet und wo ausgegeben?
    gruß inka

  8. #28
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Das Thema "PrintChar()" hatten wir grad in einem anderen Thread. Das Ergebniss ist eine geile Funktion von izaseba weiter unten im Thread:

    https://www.roboternetz.de/phpBB2/vi...=328202#328202

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #29
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    unsigned char hunderter ist die funktion, welche aus dem "unsigned char zahl" die hunderterstelle extrahiert und mit return zurückgibt.

    beispiel:
    hunnis = hunderter(batteriespannung)
    zehnis = zehner(batteriespannung)
    einis = einer(batteriespannung)

    jetzt ist in jeder der drei variablen ein byte gespeichert, das die jeweilige stelle reräsentiert, bei 246 also:
    hunnis = 2
    zehnis = 4
    einis = 6

    das sind also keine variablen, sondern funktionen :P


    radbruch: es geht nicht um das senden ans terminal, sondern um das senden an ein lcd display...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  10. #30
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi damaltor,
    du hast es nicht einfach mit mir

    dieser code:
    Code:
    int main(void)
    {
    Init();
    
    unsigned int zahl;
    zahl=Batterie();
    
    unsigned int hunderter(unsigned int zahl){ 
    return zahl/100; 
    } 
    
    SerWrite("\r\n hunderter: ",14);
    PrintInt(hunderter);
    
    return 0;
    }
    liefert diese warnunge, bzw. fehlermeldungen:
    Code:
    ../lcd_ausgabe.c:21: warning: passing arg 1 of `PrintInt' makes integer from pointer without a cast
    ../lcd_ausgabe.c:24: internal compiler error: trampolines not supported
    leider verstehe ich weder das eine noch das andere
    gruß inka

Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests