Hallo Ihr, ich arbeite an einem Projekt, das PWM, ein I2C-Display und einenTimer-Interrupt nutzen soll. Einzeln habe ich damit keine Probleme, sobald ich jedoch den Timer-Interrupt zusammen mit den anderen Programmteilen aktivierte, geht irgendwas nicht mehr. Ich nehme an, der Grund ist, weil auch I2C und PWM interruptgesteuert sind. Welchen Timer sollte ich nehmen, bzw. wie ist der Timer-Interrupt zu aktivieren, ohne PWM oder Display außer Betrieb zu setzen (schön wäre, wenn auch Delay noch ginge). Ich arbeite mit dem Arduino-Nano, und würde gerne die Standard-Libraries (Timer1.h, wire.h) nutzen.
Vielen Dank
Mariner
Jeder der 3 Timer steuert 2 Pins. Wenn du den Timer für was anderes verwendest geht auf dem Pins kein PWM mehr
Dieses Bild ansehen:
http://www.pighixxx.com/test/wp-content/uploads/2014/11/nano.png
Das siehst du z.B. bei Pins 9 und 10 OC1A/OC1B. Die Zahl da gibt den Timer an. Pins 3 und 11 werden von Timer 2 gesteuert (wobei 11 eigentlich OC2A sein sollte). Das macht also keine Probleme. Die Timer 0 Pins kannst du auch für PWM verwenden. Aber wenn du Timer 0 selbst überschreibst geht millis() und delay() nicht mehr
I2C hat damit aber nichts zu tun. Das hat seine eigene Hardware
mariner:
Hallo Ihr, ich arbeite an einem Projekt, das PWM, ein I2C-Display und einenTimer-Interrupt nutzen soll. Einzeln habe ich damit keine Probleme, sobald ich jedoch den Timer-Interrupt zusammen mit den anderen Programmteilen aktivierte, geht irgendwas nicht mehr. Ich nehme an, der Grund ist, weil auch I2C und PWM interruptgesteuert sind. Welchen Timer sollte ich nehmen, bzw. wie ist der Timer-Interrupt zu aktivieren, ohne PWM oder Display außer Betrieb zu setzen (schön wäre, wenn auch Delay noch ginge). Ich arbeite mit dem Arduino-Nano, und würde gerne die Standard-Libraries (Timer1.h, wire.h) nutzen.
Vielen Dank
Mariner
Rein interessehalber: Könntest Du Deinen Sketch posten? Mit Timern stößt man hin und wieder ja mal zusammen.
Gruß
Gregor
Ja, sehe ich auch so...
delay(), I2C, PWM und TimerIRQ laufen bei mir störungsfrei nebeneinander.
Und ja: Das geht nicht in allen Kombinationen gut.
Timer0 ist belegt für Millis() usw. (PWM geht, aber bitte nicht den Vorteiler ändern, dann millis() falsch)
Timer1 ist frei (z.B. für deine Timer1.h oder/und PWM wenn die Frequenz passt)
Timer2 ist frei (z.B. für deine PWM)
Tipp:
Also nimm Timer 2 für deine PWM.
Dann tuts das auch alles
Hallo, Danke, das hilft mir schonmal weiter!
Mariner