www.mikrocontroller.net

Forum: Compiler & IDEs 999.999 runterzählen mit ATMega16


Autor: Stefan Z. (derdespot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

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

bye

Frank

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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 P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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 P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem liegt vermutlich eher in "itoa". Probier dein Glück mal mit 
"ultoa".

Autor: Stefan Z. (derdespot)
Datum:

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

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.