Forum: Mikrocontroller und Digitale Elektronik Zwei getrennte Taktimpulse mit tinyAVR


von heiha (Gast)


Lesenswert?

Hallo zusammen,
da ich mich mit den tinyAVR nicht auskenne, hier eine Frage an die 
Experten. Ich muss mit so wenig aufwand wie möglich ein 50us und 36us 
Impuls von 1us länge erzeugen. Die Impulse müssen exakt sein, also nicht 
über Software wie eine if-then-else und Timerabfrage emuliert werden.
Es muss also ein echter Timer im spiel sein. Am besten zwei Reload timer 
die als Abwärtszäler arbeiten, die mit 1us getaktet werden. Beim einen 
ist der Reload Wert 49 und beim anderen 35. Wenn die Zähler auf 0 sind, 
geht je ein Pin auf H und dann erfolgt das Nachladen des Wertes.
Welcher tinyAVR bringt die notwendige Hardware mit?
Eine weitere Möglichkeit wäre, wenn der uC bei einem /WR Zugriff auf 
einen 8 bit Bus 2 Byte einlesen könnte, und je nach 2bit-Wert 00 kein 
Impuls 01 50us Impuls und 10 36us Impuls ausgeben würde. Der /WR müsste 
dann durch einen Interrupt den Datenbus D0..1 einlesen, den 
Timer/Counter aktivieren und je nach 2bit-Wert den Reload mit 49 oder 35 
beschreiben. Welcher tinyAVR könnte das erledigen und hätte die nötige 
Hardware an Bord?
Die dritte Möglichkeit ist die einfachste, aber gleichzeitig die 
schrägste. Das kleinste gemeinsame Vielfache von 50 und 36 ist 450. Bei 
einer Taktung von 1Mhz müsste ich 449 Befehle hinter einander schreiben 
und dann wieder an den Anfang springen. Die Befehle lauten dann entweder 
NOP oder Set P0.0 oder Set P0.1 oder Jmp 0000. Die Reihenfolge der 
Befehle müsste dann so aneinander gereiht werden, dass an P0.0 ein 50us 
Impuls entsteht und an P0.1 ein 36us. Sprich 35mal NOP, dann Set P0.1, 
dann Clr P0.1, dann 14 NOP gefolgt von Set und CLR P0.0 und immer so 
weiter. Geht das und wenn ja, mit welchem tinyAVR?
Viele Grüße heiha

von Hei H. (heiha)


Lesenswert?

Bin jetzt auch mit heiha angemeldet und nicht mehr als Gast.
Viele Grüße heiha

von Hei H. (heiha)


Lesenswert?

heiha schrieb:
> Das kleinste gemeinsame Vielfache von 50 und 36 ist 450.
Das ist natürlich Quatsch. Es ist 900. Ich müsste also 900 Befehle 
aneinander Reihen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

heiha schrieb:
> Die dritte Möglichkeit ist die einfachste, aber gleichzeitig die
> schrägste.
Ich würde die nehmen, wenn der uC sonst nichts machen muss...

von Hei H. (heiha)


Lesenswert?

Hallo in die Runde,
es gibt noch eine vierte Möglichkeit. Ich lege an zwei Pins die 
Information statisch an, ob gar kein Impuls, oder einer mit 50us oder 
36us ausgegeben wird. Der ATtiny4 hat 2 Pins als Eingang. Er hat eine 
Timer/Counter und einen PWM Ausgang. er hätte alles was man braucht. Er 
hätte sogar noch einen Pin für externen Interrupt (/WR Signal), um die 
2bit Daten einzulesen. Wäre der uC also der Richtige? Oder gibt es hier 
spezielle Eigenschaften, die meiner Aufgabenstellung im Weg stehen?
Grüße heiha

von H.Joachim S. (crazyhorse)


Lesenswert?

Der Tiny25 z.B. hat 2 passende Timer. Takt 1MHz.
Timer0: Fast PWM, top=OCR0A=50, OUTB non inverted PWM, OCR0B=1
Timer1: PWM, top=OCR1C=36, OCR1A=1

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.