Zu Testzwecken benötige ich ein Quadraturencodersignal (also das mit den 2 um 90° verschobenen Rechtecksignalen) von 1 bis 10kHz. Bislang habe ich das recht aufwändig mit einem AVR und Timeroverflow bei 1/4 der Gesamtfrequenz gelöst, die Lösung lastet aber je nach Geschwindigkeit den AVR voll aus und die Auflösung ist auch nicht ganz das was ich mir wünschen würde... Gibt es eigene ICs die sowas erzeugen?
Hallo mit den beiden Flip-Flops machts du schon mal aus dem 4-fachen Takt ein 0 Grad und ein 90 Grad signal. Die Clock must du dann nur noch geeignet Takten Gruss Helmi
Ich habe da auch mal ein etwas aufwendigere Schaltung gebaut um einen Sin-Cos Geber zu simulieren. Ich habe das mit 2 AD9850 DDS Generatoren geloest. Man konnte dort die Frequenz und den Phasenwinkel einstellen. Frequenz in mHz Schritten. Aber wie gesagt das ist die Nobelversion. Gruss Helmi
Wie wäre es den AVR Timer im PWM Modus zu betreiben? 16-bit Timer (z.B. PFC-PWM). Die beiden CMP-Match auf die Pins. Das sollte doch gehen. Die Frage ist, wie die Ausgabe aktualisiert werden soll....
PWM geht leider nicht da man damit nur 0° oder 180° Phasenverschobene Signale erzeugen kann. An eine Lösung mit DDS habe ich auch mal gedacht, aber das erschien mir dann doch übertrieben da ich ja nur Rechtecksignale brauche. Ich werds mal mit einfachem PWM + der Flipflopschaltung versuchen...
Achso, ja richtig. Man kann ja den Nullpunkt nicht (BOTTOM) nicht verschieben. Aber mit 2 Timern im PWN Modus, die über den gleichen Prescaler gehen und synchron laufen? Dann sollte ein RS-Flipflop helfen. Mit CMP-A setzen und mit CMP-B löschen.... Dann sollte eine fast IRQ-freie Implementierung gehen.
Andere AVR-Lösung (nicht getestet, deswegen keine Garantie): Ein Timer/Counter im Non-PWM-Mode, zwei Compare-Matches auf diesem Timer als Toggle-on-Match konfiguriert. Die Compare-Werte werden so festgelegt, dass sie die Hälfte des Zählermaximums auseinanderliegen. Ab da läuft alles ohne weiteren Softwareeingriff, auch mit Frequenzen deutlich über 10 kHz.
Kann man denn 2 Compare-Matches auf einen Timer machen? War mir nicht bekannt, wäre aber natürlich ideal... Wegen der Auflösung benötige ich auch einen 16Bit Timer und davon 2 erübrigen fällt schwer (hab nur einen)
Hi Also in der Zeit, die ihr hier braucht um das auszudiskutieren, hätte man das ganze mit einem Taktgenerator, einem 4017 und 4 Dioden mindestens 20x aufbauen können. MfG Spess
Ihhh, löten... Auf nem ordentlichem DSP ist das höchstens ein Zehnzeiler in Assembler.
Hi Man kann natürlich auch mit Kanonen nach Spatzen schießen. Auch wenn es manche hier nicht wahrhaben wollen: es gibt noch Elektronik jenseits von AVR, ARM, DSP.... MfG Spess
@Lukas Slz: > Kann man denn 2 Compare-Matches auf einen Timer machen? War mir > nicht bekannt, wäre aber natürlich ideal... Jeder AVR mit mehr als 8 Beinchen hat einen 16-Bit-Timer mit zwei Output-Compares (OC1A und OC1B). @spess53: > Man kann natürlich auch mit Kanonen nach Spatzen schießen. Auch wenn > es manche hier nicht wahrhaben wollen: es gibt noch Elektronik > jenseits von AVR, ARM, DSP.... Auch ich bin ein Freund einfacher Lösungen. So gefällt mir die Schaltung von Helmut Lenzen mit einem 7474 sehr gut. Allerdings braucht man hier noch den Takt. Dieser soll, wenn ich Lukas richtig verstanden habe, auch noch variabel und vielleicht sogar über einen PC o.ä. einstellbar sein. Möglicherweise soll auch die Drehrichtung des simulierten Encoders im Betrieb geändert werden können. Da er sowieso schon einen AVR einsetzt, ist es doch das einfachste, diesen weiterzuverwenden und die Software etwas zu optimieren. Als Ergebnis hat man alle o.g. Funktionen in einem einzigen IC vereinigt, das nicht einmal arg viel kostet.
> Also in der Zeit, die ihr hier braucht um das auszudiskutieren, hätte > man das ganze mit einem Taktgenerator, einem 4017 und 4 Dioden > mindestens 20x aufbauen können. Schon, aber das hier ist ja auch ein "Mikrocontrollerforum" und keine "Wie bau ich mir ein CMOS-Grab" oder so, Forum ;-)
Bei einem 7474 kann man noch nicht von einem TTL Grab reden Und es steht auch Elektronik drueber Gruss Helmi
Hi Wenn mich alles täuscht, heißt das hier '... und Elektronik'. Vielen 'Programmierern' hier könnte etwas mehr Elektronikwissen nicht schaden. MfG Spess
Dazu ein kleine Stück Software:
1 | DDRA = 255; |
2 | DDRB = 127; |
3 | |
4 | |
5 | int main(void) { |
6 | while (1) { |
7 | if ((PINA & (1<<PA0)) && (PINA & (1<<PA1))) |
8 | PORTB |= (1<<1); |
9 | else
|
10 | PORTB &= ~(1<<1); |
11 | |
12 | if ((PINA & (1<<PA2)) && (PINA & (1<<PA3))) |
13 | PORTB |= (1<<2); |
14 | else
|
15 | PORTB &= ~(1<<2); |
16 | |
17 | if ((PINA & (1<<PA4)) && (PINA & (1<<PA5))) |
18 | PORTB |= (1<<3); |
19 | else
|
20 | PORTB &= ~(1<<3); |
21 | |
22 | if ((PINA & (1<<PA6)) && (PINA & (1<<PA7))) |
23 | PORTB |= (1<<4); |
24 | else
|
25 | PORTB &= ~(1<<4); |
26 | }
|
27 | }
|
7400 war gestern :-)) Gruss Andy
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.