www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR-Stoppuhr zählt nur bis 255


Autor: limbo! (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe ein Problem!
Und zwar will ich eine Stoppuhr basteln, die eigentlich schon ganz gut 
funktioniert.
Mein Problem ist, dass die Zählvariable ein integer ist und somit nur 
bis 255 zählen kann.
Ich lass die Stoppuhr in zehntelsekunden laufen - was heißt, dass bei 
25.5 Sekunden Schluss ist.

Wie kann ich nun auf einfachen Wege den counter weiter rauf zählen 
lassen?

Der Timerinterrupt macht folgendes:

ISR(TIMER1_COMPA_vect)
{
  overflowcounter++;
  if(overflowcounter == 10) //alle zehntelsekunde counter erhöhen
  {
        counter++;
    overflowcounter=0;
  }
}


Grüße
Markus

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
o.O Vieleicht genauso wie du das schon mit dem overflow counter gemacht 
hast nur mit einer weiteren Variablen?

Autor: micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist nicht "Counter". Es ist als "int" definiert uns sollte 
daher 2 byte habe und somit bis 2^16=65536 zöhlen können. Dein Problem 
steckt in "zahl", DAS ist eine 8Bit- variable und kann nur bis 255 
zählen. Versuch eine andere Umrechnung von "Counter" für das Display!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
limbo! schrieb:
> Mein Problem ist, dass die Zählvariable ein integer ist und somit nur
> bis 255 zählen kann.

Seit wann das denn?
int ist mindestens 16 Bit, aber nimm besser:

uint8_t:  0 - 255
uint16_t: 0 - 65535
uint32_t: 0 - 4294967295


Peter

Autor: limbo! (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ach ich sehe schon, ich hab mich zu sehr auf den Counter versteift und 
dazu noch keine Ahnung gehabt wie groß ein int tatsächlich ist ^^

Ich sollte mir mal die Datentypen zu Gemüte führen...

ich hab jetzt aus "zahl" ein uint16_t gemacht und alles läuft prächtig!

Danke für eure Hilfe!

Grüße
Markus

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
limbo! schrieb:
> dazu noch keine Ahnung gehabt wie groß ein int tatsächlich ist ^^
Das hängt auch von der Architektur ab, ein int darf auch 8bit, 32bit 
oder 64bit groß sein...

Autor: Nick Müller (muellernick)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> if(overflowcounter == 10)

So was sollte man eigentlich immer als:

if (overflowcounter >= 10)

schreiben. Defensive Programmierung.


Gruß,
Nick

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.