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
Bin jetzt auch mit heiha angemeldet und nicht mehr als Gast. Viele Grüße heiha
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.
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...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.