www.mikrocontroller.net

Forum: GCC 999.999 runterzählen mit ATMega16

Autor: Stefan Z. (derdespot)
Datum: 30.06.2008 11:02

Hallo Leute,

ich möchte eine Zahl --> 999.999 (neunhundert99tausendend999)
runterzählen. Die Zahl habe ich vorher per Tastendruck (jede Stelle
hoch/runter ok --> nächste Stelle) in ein char-Array eingelesen. Nun ist
meine Frage wie ich diese Zahl runterzählen kann... Eine Möglichkeit
wäre mit verschachtelten Schleifen zu arbeiten... z.B.

do{

    Cycles[5] = Cycles[5] - 1;
    set_cursor(5,1);
    lcd_data(Cycles[5]);

    long_delay(100);

  }while(Cycles[5]!=48);

    if(Cycles[4]!=48){

      Cycles[4] = Cycles[4] - 1;
      set_cursor(4,1);
      lcd_data(Cycles[4]);

      Cycles[5] = Cycles[5] + 9;
      set_cursor(5,1);
      lcd_data(Cycles[5]);
    }

Dies auf alle 6 Stelle anzuwenden würde jedoch viel zu lange dauern.
Gibt es eine Möglichkeit das Array in eine long Zahl zu wandeln und
diese dann einfach per -- Befehl runterzuzählen????

Vielen Dank schonmal für die Antworten!
Autor: Frank L. (hermastersvoice)
Datum: 30.06.2008 11:05

die Stellen entsprechen ihrer Wertigkeit addieren und das
Ergebnisregister (bzw. die Variable) runterzählen.

bye

Frank
Autor: Sven Pauli (haku) Benutzerseite
Datum: 30.06.2008 11:06

Ja. Die Möglichkeit gibts, genauso wie es hier im Forum [ c ] gibt, um
C-Code farblich hervorzuheben.
char digits[4];
uint16_t counter = 0;
uint8_t i;

for (i = 0; i < 4; i++) {
  counter *= 10;
  counter += digits[i];
}


Sowas in dem Dreh.
Autor: Stefan Z. (derdespot)
Datum: 30.06.2008 11:14

Okay aber uint16_t --> 16Bit 2hoch16 = 65.536 Meine Zahl ist aber
999.999 Ich brächte mindestens 17 Bit (-: für das Ergebnisregister
Autor: Sven Pauli (haku) Benutzerseite
Datum: 30.06.2008 11:23

Stefan Z. wrote:
> Okay aber uint16_t --> 16Bit 2hoch16 = 65.536 Meine Zahl ist aber
> 999.999 Ich brächte mindestens 17 Bit (-: für das Ergebnisregister

Und? nimm halt uint32_t ...
Autor: Stefan Z. (derdespot)
Datum: 30.06.2008 12:03

super! Es funktioniert anscheinend... Aber leider kann die LCD_Display
Funktion so große Zahlen nicht anzeigen. Ich verwende die Funktion
lcd_string() aus dem gcc Tuturial --> oder geht das bei euch?

char Buffer[20];

zyklen_einlesen();

set_cursor(0,2);

lcd_data(Cycles[0]);
lcd_data(Cycles[1]);
lcd_data(Cycles[2]);
lcd_data(Cycles[3]);
lcd_data(Cycles[4]);
lcd_data(Cycles[5]);

uint32_t cycles_neu = 999999; // zum Test der LCD fkt
itoa( cycles_neu , Buffer, 10 );
set_cursor(0,1);
lcd_string(Buffer);
Autor: Sven Pauli (haku) Benutzerseite
Datum: 30.06.2008 12:05

Das Problem liegt vermutlich eher in "itoa". Probier dein Glück mal mit
"ultoa".
Autor: Stefan Z. (derdespot)
Datum: 30.06.2008 12:11

ich danke dir --> ultoa hat funktioniert! echt klasse wie schnell man
hier im Forum hilfe bekommt! DANKE!!!!

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net