Hallo,
ich stehe vor dem Problem, dass ich noch einen zusätzlichen Timer
bräuchte.
Ich arbeite an einer Motorsteuerung mit einem ATtiny261. Der hat alle
Timer bis jetzt für eine Brushlesssteuerung belegt, ich bräuchte aber
noch einen, um eine weitere Aufgabe erfüllen zu können.
Gibt es da Möglichkeiten über Tricks an einen 3. Timer zu kommen? Der
muss nicht einstellbar sein, oder extrem feine Zeitschritt haben.
Wichtig ist nur, dass seine Zeitbasis konstant ist.
Ist es nicht möglich per Software iwas zu machen oder andere Tricks zB
per Port-Interrupts zu mahcen?
Grüße,
COLUSA
Nimm doch einfach nur einen Timer und stelle ihn so ein, dass du dir
alle anderen Zeiten davon per Software-Prescaler ableiten kannst. Dann
brauchst du bloß 1 Timer. So habe ich auch das Timer-System in meiner
Spielekonsole gelöst. Und in den Spielen kann man bis zu 32 Timer
benutzen.
Also anstatt:
Timer0 Prescaler = Bla
Timer1 Prescaler = Blubber
Überlauf0:
...
Return
Überlauf1:
...
Return
Besser so:
Timer0 Prescaler = 1
Überlauf0:
Erhöhe Zähler0
Erhöhe Zähler1
Wenn Zähler0 = Bla Dann Zähler0 = 0; ...
Wenn Zähler1 = Blubber Dann Zähler1 = 0; ...
Return
Sonst könntest du noch den Watchdog nehmen oder per NE555 Pin-Interrupts
generieren.
Gruß
Jonathan
Jonathan Strobl schrieb:> Nimm doch einfach nur einen Timer und stelle ihn so ein, dass du dir> alle anderen Zeiten davon per Software-Prescaler ableiten kannst. Dann> brauchst du bloß 1 Timer. So habe ich auch das Timer-System in meiner> Spielekonsole gelöst. Und in den Spielen kann man bis zu 32 Timer> benutzen.
das geht aber nicht, wenn man die Timer alle braucht, um einen Motor
anzusteuern.
Ja, wenn er die Zählerwerte braucht, geht es nicht... Aber er braucht ja
bloß eine weitere, konstante Zeitbasis. Da kann er ja in einem seiner
Timer einen Zähler mitlaufen lassen, der das dann erledigt.
Gruß
Jonathan
Auch im PWM-Mode können die Timer Interrupts erzeugen, es muß nur der
TOP-Wert konstant sein, d.h. die PWM-Frequenz konstant.
Ansonsten geht noch den ADC frei laufen zu lassen und als Timer nehmen.
Oder der Watchdoginterrupt.
Peter
Dein IBM PC hat(te) nur einen Timer, und kann trotzdem beliebig viel
Dinge blinken lassen und timen.
Es liegt also nur an der Programmierung, nicht an der
Hardwareausstattung.
Meist wird argumentiert, daß aber ab einer gewissen Geschwindigkeit
nicht mehr alles in Software zu machen ist. Guckt man sich solche
Programme an, sieht man meist, daß die Interrupt-Bearbeitung eher mehr
Rechenzeit kostet, als wenn man es ordentlich in Software implementiert
hätte mit nur einem Timer.
>NE555 Pin-Interrupts
LOL, ein NE555 lässt mein Strobo im Wohnzimmer blinken, da merkt man die
ungenauigkeit im Augenwinkel, was meinste wie genau das Programm
ablaufen wird... Dann musste dauernd auf irgendwelche Flags zum
Synchronisieren warten... Wofür du dann auch wieder einen Timer
brauchst...
setz dir einen Tiny13 daneben, der Interruptcontroller spielt
eine strippe zum 13, zum Starten/Anhalten
1,2 oder 3 Strippen zurück, die interupts auslösen können.
Vlad Tepesch schrieb:> das geht aber nicht, wenn man die Timer alle braucht, um einen Motor> anzusteuern.
Ach? Warum denn nicht? Ob du nun die Register des Hardwaretimers oder
irgendwelche selbstdefinierten Zählvariablen des Softwaretimers nutzt,
ist recht egal.
gaast schrieb:> Ach? Warum denn nicht? Ob du nun die Register des Hardwaretimers oder> irgendwelche selbstdefinierten Zählvariablen des Softwaretimers nutzt,> ist recht egal.
weil die PWM6-Mode Hardwarevariante explizit zur BLDC-Motor-Ansteuerung
gedacht ist und um Längen besser ist.
Ich seh aber gerade, dass Timer0 davon völlig unberührt ist. Somit
sollte man auch hier eine Stabile Zeitbasis bereitstellen können.
Ja ich verwende den timer1 als pwm6 mode.
timer0 ist auch belegt, da er die 30 Grad Verschiebung der Phasen im
sensorless mode des BLDC Motors steuert.
Inwieweit ist es denn möglich den watchdog dafür zu missbrauchen?
Ich möchte ja keinen reset verursachen.
Typischer Fall von falschem µC ausgewählt.
Das passiert wenn man mit Hardware / Software anfängt bevor man im
Detail weiß was man so alles brauch.
Gutes Beispiel wie man es nicht machen sollte.
COLUSA schrieb:> ich bräuchte aber noch einen, um eine weitere Aufgabe erfüllen zu können
Was soll man dazu sagen, wenn nicht mal klar ist, wie zeitkritisch die
Aufgabe ist, wie oft da was passieren soll, ob da irgendetwas synchron
zum Motor passieren soll oder ob der eine Atomuhr ersetzen soll ;-)
COLUSA schrieb:> Ja ich verwende den timer1 als pwm6 mode.
Dann kannst Du doch nen Interrupt verwenden:
"The Timer/Counter Overflow Flag (TOV1) is set each time the counter
reaches the TOP"
Peter
COLUSA schrieb:> Inwieweit ist es denn möglich den watchdog dafür zu missbrauchen?
Datenblatt:
8.4.2 WDTCR – Watchdog Timer Control Register
Table 8-2. Watchdog Timer Configuration
Peter
Nils S. schrieb:> Der Watchdog lässt sich dafür, glaube ich, nicht missbrauchen.
Dann läßt Dich ein Blick ins Datenblatt aber vom Glauben abfallen.
Peter
Peter Dannegger schrieb:> Erstmal ins Datenblatt schauen, dann klappts auch mit dem AVR.
Ich sag ja gar nicht das er keinen AVR verwenden soll.
Nur wenn man einen µC mit 2 Timer auswählt und später feststellt das 3
Timer gebraucht werden, dann hat man etwas falsch gemacht.
Ralph schrieb:> Nur wenn man einen µC mit 2 Timer auswählt und später feststellt das 3> Timer gebraucht werden, dann hat man etwas falsch gemacht.
Das Problem ist, daß Atmel für viele AVRs ein spezielles Timersüppchen
kocht.
Man kann daher nicht einfach einen ATmega nehmen, weil der nicht alle
Features des ATtiny hat.
Ich hätte eigentlich auch erwartet, daß ein ATmega2560 abwärtskompatibel
zu kleineren AVRs wäre, aber dem ist nicht so.
Peter
Wenn ich doch ein Projekt machen will, und das mit minimalem Aufwand
dann sollte die Arbeitsreihenfolge doch so sein.
1. Überlegen WAS dieses Projekt alles können muss
2. Überlegen WIE das Projekt die Punkte aus 1. erfüllen kann
3. Überlegen WAS müssen meine Bauteile dafür können um 2. zu erfüllen.
und DANACH fange ich an die Bauteile auszuwählen und die Software zu
programmieren.
Wer mit der Programmierung anfängt auf irgendetwas was da gerade rum
liegt wird mit absoluter Sicherheit viel Arbeit in irgendwelche Tricks
investieren müssen um fehlende Fähigkeiten der Hardware auszugleichen.
Oder wird die Arbeit mehrfach machen müssen bis endlich mal alle Teile
so sind das es funktioniert.
Das meinte ich mit
> Typischer Fall von falschem µC ausgewählt
Wenn dabei raus kommt das ein AVR eben nicht passt, na dann ist das so.
==> Projektumfang ändern bis es in den AVR passt, oder mal über den
Tellerrand nach einem anderen µC sehen.
Ralph schrieb:> 2. Überlegen WIE das Projekt die Punkte aus 1. erfüllen kann> 3. Überlegen WAS müssen meine Bauteile dafür können um 2. zu erfüllen.> und DANACH fange ich an die Bauteile auszuwählen und die Software zu> programmieren.
Das ist etwas zu kurz gedacht, weil 2. und 3. je nach gewähltem Bauteil
unterschiedlich aussehen können. Die starre Reihenfolge gibt es also
nicht. Mancnmal hilft ein bisschen Kreativität, um abseits vom Main
Stream eine Lösung zu finden.