- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 7 von 7

Thema: Aufteilung einer Zahl in Einer, Zehner,... Hilfe!!! [gelöst]

  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070

    Aufteilung einer Zahl in Einer, Zehner,... Hilfe!!! [gelöst]

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Roboterfreunde, schreibe gerade an einem Programm, damit ich auf einem SAA1064 eine Zahl ausgeben kann (Wert des AD Wandlers) zum lernen. Als Controller verwende ich den R8Ctiny von Renesas. Da ich für den SAA 1064 die Vier Stellen einzeln ansteuern kann, muss ich die Zahl aufteilen (1er, 10er, 100er, 1000er). Dazu habe ich das geschrieben.
    Code:
    if (k>=10000)
    		{
    			for(k; k<10000; k=k-10000) 
    			{
    				e++;
    				p1_2=1;
    			}
    		}
    		else p1_2=0;
    		if (k>=1000)		
    		{
    			for (k; k<=1000; k=k-1000) d++;
    		}
    		if (k>=100)
    		{
    			for(k; k<=100; k=k-100) c++;
    		}
    		if (k>=10)
    		{
    			for(k; k<=10; k=k-10) b++;	
    		}
    		a=k;
    Ganz am Anfang habe ich noch eingefügt, wenn die Zahl größer als 10k ist soll eine Led angehen, damit ich weiß das die Zahl größer ist. Die Ausgabe auf das Display funktioniert. Wenn ich für jede Stelle eine Zahl eingebe zeigt es die Zahl an. Mein Problem ist, wenn ich den oberen Code verwende, zeigt das Display nur Mist an. Es kommt nicht vom ADC. Habe auch schon direkt eine 4 stellige Zahl eingegeben, geht auch nicht.

    k= Ausgangszahl
    a-d = 4 Stellen + eine Led (Variable d)

    Hier sind 2 Bilder (einmal richtig, einmal falsch)
    http://www.bilder-hochladen-kostenlo...0/DSCN2615.JPG ==> Richtige Anzeige (68E4)
    http://www.bilder-hochladen-kostenlo...0/DSCN2619.JPG ==> Falsche Anzeige (sollte 1024 sein)

    Kann mir bitte jemand helfen

    MfG Hannes

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    36
    Beiträge
    826
    Moin

    Du willst doch einfach nur auf die Zeichen A bis E die Werte deiner Zahl aufteilen, ne?

    Ein mögliches vorgehen:
    Für die z.b. 1.000er Stelle:
    Du nimmst deine Zahl modulo 10.000
    Dadurch hast du eine Zahl, an dem die weiteren führenden Zahlen abgeschnitten sind.

    Die Zahl zwischen 0 und 10.000 teilst du anschließend durch Tausend.(nicht runden, sondern einfach das Komma abschneiden. Wenn du auf Integern arbeitest, musst du also nichts beachten!)

    Dadurch hast du nun eine Zahl zwischen 0 und 10, die dir die tausender-Stelle anzeigt.

    Das sollte funktionieren. (Evtl. musst du noch prüfen, ob modulo 10.000 für eine 10.000 eben 10k oder 0 ist. Aber mit dem Prinzip solltest du was anfangen können.

    Warum dein Code nicht funktioniert, hab cih mir jetzt ehrlich gesagt nciht weiter angesehen.

    mfg
    Andun
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Variablen e,b,c,d werden am Anfang nicht auf Null gesetzt. Nicht jeder Compiler macht das.

    Nur nebenbei:
    Statt der Kombination aus if und for schleife wäre ein Schleife mit While( k <...) übersichtlicher.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Habe die Variablen auf 0 gesetzt, ist nur nich auf dem Ausschnitt.
    Werde es mit Modulo probieren

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Danke es funktioniert. Habe es jetz mit Modulo gelöst.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    Alternativ ginge auch der Fußweg:
    T = Zahl / 1000
    H = (Zahl - (T * 1000)) / 100
    Z = (Zahl - (T * 1000 + H * 100)) / 10
    E...
    Das kann man natürlich noch optimieren...
    Es sieht zwar komplizierter aus, aber je nach Datentyp, Größe und Optimierung entsteht beim Modulo manchmal erstaunlich viel Code...
    Gruß

    Edit: siehe oben

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Das ist der Ausschnitt, wie ich es jetzt gelöst habe:

    Code:
    e=(k%100000)/10000;	
    d=(k%10000)/1000;	//Tausender
    c=(k%1000)/100;	//Hunderter
    b=(k%100)/10;		//Zehner
    a=k%10;                      //Einer
    if(k>=10000) p1_2=1;
    else p1_2=0;

Berechtigungen

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

LiFePO4 Speicher Test