Forum: Mikrocontroller und Digitale Elektronik Zusätzlichen Timer trotz alle Timer verbraucht?


von COLUSA (Gast)


Lesenswert?

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

von Vlad T. (vlad_tepesch)


Lesenswert?

eventuell lässt sich der watchdog misbrauchen

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

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

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

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.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

1
volatile unsigned long ticks = 0;
2
ISR(10ms_timer) {
3
   ticks++;    // alle 10ms
4
   if((ticks%10)==0) { // alle 100ms
5
6
   }
7
   if((ticks%100)==0) { // alle 1000ms
8
9
   }
10
  ...
11
  ...
12
}

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

von egberto (Gast)


Lesenswert?

manchmal reicht auch der ADC-Interrupt (wenn nicht schon verwendet)...

von Skua (Gast)


Lesenswert?

RC Glied zwischen 2 Portpins.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>RC Glied zwischen 2 Portpins.
Dürfte in etwa so ungenau wie die NE555 Lösung sein, da der NE555 nur so 
genau ist wie R und C an ihm...

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von gaast (Gast)


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von COLUSA (Gast)


Lesenswert?

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.

von Ralph (Gast)


Lesenswert?

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.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Der Watchdog lässt sich dafür, glaube ich, nicht missbrauchen.

Vielleicht doch noch der ADC?

von Willi (Gast)


Lesenswert?

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 ;-)

von Peter D. (peda)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

Ralph schrieb:
> Typischer Fall von falschem µC ausgewählt.

Nur ruhig Blut.
Erstmal ins Datenblatt schauen, dann klappts auch mit dem AVR.


Peter

von Peter D. (peda)


Lesenswert?

Oder ADC Interrupt:
"A normal conversion takes 13 ADC clock cycles."
1
Interruptrate = F_CPU / ADC_Prescaler / 13

Peter

von Ralph (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Ralph (Gast)


Lesenswert?

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.

von AVR Freak (Gast)


Lesenswert?

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.

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.