- 12V Akku mit 280 Ah bauen         
Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 66

Thema: projekt: asuro sucht selbständig seine ladestation

  1. #31
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    Anzeige

    Praxistest und DIY Projekte
    mach mal PrintInt(*hunderter)

    eigentlich muss nämlich eine zahl in den klammern stehen und nicht eine variable =) den zweiten fehler würd ich mal ignorieren, evtl verschwindet der dann von allein.

    was auch gehen könnte ist:
    PrintInt(Hunderter(zahl));
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  2. #32
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    die zweite lösung wars:

    hunderter: 9 zehner: 0 einer: 6
    danke
    gruß inka

  3. #33
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    sehr gut. und so ähnlich müsste es auch mit dem display klappen, indem du den offset addierst und dann ausgibst.

    AARGH:
    mir fällt grad was auf. das sollte durchaus so funktionieren wie vorher (PrintInt(hunderter) ABER du hast die funktion INNERHALB der main-funktion deklariert. dieser absatz
    Code:
    unsigned int hunderter(unsigned int zahl){
    return zahl/100;
    }
    MUSS ÜBER DER MAIN-FUNKTION STEHEN und nicht mittendrin :P
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #34
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    ich habe es jetzt so abgeändert:

    Code:
    #include "asuro.h"
    #include "lcd.h"
    #include "i2c.h"
    
    int zahl=246;
    //int zahl=Batterie();
    int hunderter( int zahl){ 
    return zahl/100; 
    } 
    int zehner( int zahl){ 
    return (zahl - (100 * hunderter(zahl)))/10; 
    } 
    int einer( int zahl){ 
    return zahl - (100*hunderter(zahl)) - (10*zehner(zahl)); 
    }
    
    int main(void)
    {
    Init();
    
    SerWrite("\r\n hunderter: ",14);
    PrintInt(hunderter);
    SerWrite(" zehner: ",9);
    PrintInt(zehner(zahl));
    SerWrite(" einer: ",8);
    PrintInt(einer(zahl));
    
    
    return 0;
    }
    die auskomentierte zeile mit batterie hat er angemeckert, weil keine konstante, kommt später dran. Die warnung wg. der geänderten zeile PrintInt(hunderter);
    kommt aberr wieder:
    ../lcd_ausgabe.c:30: warning: passing arg 1 of `PrintInt' makes integer from pointer without a cast
    gruß inka

  5. #35
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hallo,
    mit diesem code
    Code:
    #include "asuro.h"
    #include "lcd.h"
    #include "i2c.h"
    
    int zahl;
    unsigned int batt_1, batt_2, batt_3;
    float spannung;
    
    /************hunderter**********/
    int hunderter( int zahl){ 
    return zahl/100; 
    }
    /*************zehner************/
    int zehner( int zahl){ 
    return (zahl - (100 * hunderter(zahl)))/10; 
    }
    /*************einer*************/
    int einer( int zahl){ 
    return zahl - (100*hunderter(zahl)) - (10*zehner(zahl)); 
    }
    /************************batterieabfrage*************************************/
    void batt_abfrage(void)
    {
    
    	(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();
    
    	spannung=(batt_3 + batt_2 + batt_1)/535.1; 
    
    }
    
    int main(void)
    {
    Init();
    
    zahl=Batterie();
    batt_abfrage();
    
    
    
    SerWrite("\r\n hunderter: ",14);
    PrintInt(hunderter(zahl));
    SerWrite(" zehner: ",9);
    PrintInt(zehner(zahl));
    SerWrite(" einer: ",8);
    PrintInt(einer(zahl));
    SerWrite(" spg: ",6);
    PrintFloat(spannung,1,5);
    
    return 0;
    }
    habe ich bereits die größe des hexfiles erreicht die in den atmega8 nicht mehr reinpasst, bzw. eine fehlermeldung beim flashen ausgegeben wird...
    Kann das sein, oder ist da irgendwo ein fehler? Ich habe mit staunen festgestellt, dass das Printfloat mit dem einbinden von printf.c eine vergrößerung der hexdatei von 18,235k auf 22,237k bewirkt. Eine printzeile! Da muss ich wohl um mein ziel zu erreichen noch was tun...
    gruß inka

  6. #36
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    tja.. floats sind halt echt tückisch. da gehen einige kilobyes flöten... deshalb behilft man sich soweit es geht mit ints oder am besten sogar chars.

    du teilst auch durch 535.1, was ja auch ein float ist. evtl solltest du durch 535 teilen, und versuchen alles auf integer zu bringen. das würde den code deutlich verkleinern.

    warum setzt du batt_1 ,2 ,3 in klammern? geht auch ihne denke ich, könnte sein dass der compiler hier ein paar unnötige bytes produziert.

    was evtl ein problem sein könnte, ist dass die unsigned int bis zu 5 stellen haben können. deshalb wird die zahl der hunderter nicht korrekt berechnet, da alle stellen über der dritten mit in die hnderterstelle eingefügt werden.

    du brauchst also, wenn du größere zahlen als 999 bearbeitest, noch eine funktion für tausender, und wenn du größere zahlen als 9999 bearbeitest, auch eine für 10tausender.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #37
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    schönen guten morgen...
    ein anderes thema, hängt aber auch mit der ausgabe am lcd zusammen. Folgender code:
    Code:
    #include "asuro.h"
    #include "lcd.h"
    
    int main(void)
    {
    	Init();								 //Initialisiert ASURO
    	InitLCD();
    	
    	
    	
    	PrintAlignLCD (LEFT, 1, "Ich bin");
    	
    	PrintAlignLCD (RIGHT, 2, "asuro");
    	
    //	for(;;);
    	return 0;
    }
    lässt sich problemlos compilieren, am lcd tut sich aber nix...

    was habe ich übersehen?
    gruß inka

  8. #38
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    Zitat Zitat von damaltor
    du teilst auch durch 535.1, was ja auch ein float ist. evtl solltest du durch 535 teilen, und versuchen alles auf integer zu bringen. das würde den code deutlich verkleinern.
    das mit den klammern habe ich geändert, aber beim teilen durch 535 werden alle nachkommastellen durch nullen ersetzt
    gruß inka

  9. #39
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    hmm das ist wahr. aber wenn du die zhal vorher mit 100multiplizierst, und dann bei der ausgabe darauf achtest das komma an die richtige stelle zu setzen, hast du trotzdem zwei nackommastellen... =)

    10 / 8 = 0.125 -> kommazahlen
    10 * 100 / 8 = 125 -> keine kommazahlen
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  10. #40
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    ok,
    das habe ich glaube ich verstanden, werde ich ausprobieren...
    der beitrag weiter oben - was habe ich bei der initialisierung des lcd vergessen? Zumindest in der lcd.c habe ich weiter nichts gefunden? Ist es eigentlich so, dass mit der lcd.c aus der 2.7.1 lib jetzt alle programme aus dem band II nicht funktionieren?
    gruß inka

Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress