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


von limbo! (Gast)


Angehängte Dateien:

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von micha (Gast)


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!

von Peter D. (peda)


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

von limbo! (Gast)


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

von Läubi .. (laeubi) Benutzerseite


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...

von Nick M. (Gast)


Lesenswert?

> if(overflowcounter == 10)

So was sollte man eigentlich immer als:

if (overflowcounter >= 10)

schreiben. Defensive Programmierung.


Gruß,
Nick

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.