mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 10Bit in String für Display umwandeln


Autor: LC-HC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, das Thema verfolgt mich und es hikft nichts. hier mein Problem:
10Bit vom ADC muss ich  am Display anzeigen (T6963C) alles läuft, bis
auf die korrekte Darstellung des Messwertes. Das heißt, ich müsste
z.B.
mit itoa() den ADC Wert in einen String aus Dezimalzahlen wandeln, nur
läuft es nicht, wie ich es mir vorstelle. Hat jemand vielleicht dazu
schon was gemacht ?

mfg

LC

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hat jemand vielleicht dazu schon was gemacht ?

Bestimmt!
Besser wäre es aber, wenn du hier deinen Code einstellen würdest.

Autor: LC-HC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe dazu keinen Code, sonst hätt´ ich nicht gepostet;)
Aber das prinzip ist ja klar: String als Zeiger an Low-Level Routine
übergeben, die bis zum 0-Byte aufs Display schreibt. Nur den String
bekomme ich nicht zusammen und ich hab keine Ahnung wie das geht !
Was ich versucht hatte, war das:

Rpm[x] global definiert !
void _itoa(uint16_t adc)
{
  
  
  int help = adc;
  
  
  if(val > 999)
        {
    Rpm[0] = ( adc - ( help % 1000 ) ) / 1000;
    help %= 1000;
    
    Rpm[1] = ( adc - ( help % 100 ) ) / 100;
    help %= 100;
          
    Rpm[2] =  ( help - ( help % 10 ) ) / 10;
    help %= 10;
          
    Rpm[3] = help;
  }
  else if(adc <= 999)
  {
    Rpm[0]  = 0;
    
    Rpm[1] = ( adc - ( help % 100 ) ) / 100;
    help %= 100;
          
    Rpm[2] =  ( help - ( help % 10 ) ) / 10;
    help %= 10;
          
    Rpm[3] = help;
  }
  
  
  DBE_Lcd_writeStr(Rpm);
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm dir doch bitte mal Papier und Bleistift, nimm einen Wert
für adc an und rechne mal per Hand deine Formeln durch.

(Was du da machst ist mächtig kompliziert.
Einfacher gehts mittels fortgesetzter Division duch 10.
Du kriegst halt die Stellen in umgekehrter Reihenfolge. Das
lässt sich aber mit einer Routine, die einen String spiegelt
leicht korrigieren.

   1023 % 10    ->          3
   1023 / 10    -> 102

   102 % 10     ->          2
   102 / 10     -> 10

   10 % 10      ->          0
   10 / 10      -> 1

   1 % 10       ->          1
   1 / 10       -> 0

                   ^        ^
                   |        |
    Diese Null sagt aus     |
    dass die Konvertierung  |
    fertig ist              |
                            |
                    Hier sind die einzelnen Digits

Die Digits fallen in der Reihenfolge 3 2 0 1 an.
Als String also "3201".
Dieser String muss jetzt noch gespiegelt werden, was
durch paarweises vertauschen leicht möglich ist.

               3 2 0 1
               ^ ^ ^ ^
               | | | |
               | +-+ |
               +-----+

               1 0 2 3


Hat dein Compiler keine _itoa Funktion? itoa ist zwar keine
Standardfunktion, die meisten Compiler bringen aber eine mit.

Autor: Schubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fällt mir folgende Seite ein:
http://www.cc5x.de/LCD.html
(Die gesuchte Funktion ist fast ganz am Ende der Seite)

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm - und warum verwendest Du nicht die itoa()-Funktion, sondern
schreibst sie selbst?
Wenn Du kein Platzproblem hast, kannst Du auch sprintf() verwenden,
dann hast Du sogar sämtliche Formatierungsmöglichkeiten des
printf()-Befehls.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Drei Schleifen und eine IF-Abfrage:
RPM[]="    "; // führende Null ignorieren
x=0;
If (ADC>999)
{
 RPM[0]='1';
 RPM[1]='0';
 ADC -= 1000;
}

while (ADC>99)
{
 RPM[1]++;
 ADC -= 100;
 RPM[2]='0';
 RPM[3]='0';
}
while(ADC>9)
{
 RPM[2]++;
 ADC -= 10;
 RPM[3]='0';
}
RPM[3] += ADC;

Ausprobiert habe ich es nicht...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.