Timer Interrupt ??

Hallo,

bin gerade ein wenig am Probieren mit einem Timer Interrupt, also zuerst einmal genau wie hier beschrieben:
http://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary

Wenn ich den Code im wesentlichen 1:1 übernehme dann blinkt die LED wie erwartet:

#include "TimerOne.h"  
int ledpin=13;
int alle_x_sekunden=1;

void setup()   {
               pinMode(ledpin, OUTPUT); 
               Timer1.initialize(alle_x_sekunden*1000000);
               Timer1.attachInterrupt(isr);
               }


void isr()     {
               digitalWrite(ledpin, digitalRead(ledpin) ^ 1);
               }


void loop()    {

               }

Wird der Code jedoch etwas verändert dann flackert die LED sehr viel schneller, nur warum?

#include "TimerOne.h"  
int ledpin=13;
int hundertstel_sekunden=100;

void setup()   {
               pinMode(ledpin, OUTPUT); 
               Timer1.initialize(hundertstel_sekunden*10000);
               Timer1.attachInterrupt(isr);
               }


void isr()     {
               digitalWrite(ledpin, digitalRead(ledpin) ^ 1);
               }


void loop()    {

               }

Ich meine 1x1000000 ist doch völlig identisch mit 100x10000...
Interesanterweise geht es wieder wenn ich statt

int hundertstel_sekunden=100;
long hundertstel_sekunden=100;

verwende. Aber warum ist das so?? Die Zahl 100 geht doch "locker" mit Integer... ???

Christian

Integer-Literale sind standardmäßig int und damit nur 16 Bit. Du wirst da einen Überlauf bei der Multiplikation bekommen. Das Ergebnis einer Operation mit zwei ints ist immer int, egal ob es in den Wertebereich passt oder nicht.

Deshalb bei so großen Zahlen immer gleich z.B. "10000L" schreiben, dann wird auch mit long gerechnet. int * long = long

Hallo,
Das Problem ist, dass 100 x 10000 nicht in int platz hat.
Wenn du aber die Variable als long definierst, wird auch in long gerechnet.

Beim erstn Code funktioniert es trotzdem weil 1000000 nicht in int Platz hat und somit gleich in long gerechnet wird.

Ich hoffe du verstehst was ich meine. :wink:

Edit: da war wohl jemand schneller als ich :slight_smile:

MfG.
J3RE

Ok, danke für die Erklärung, jetzt ist alles klar... 8)

Danke,
Christian