Hallo Experten! Ich arbeite gerade an einem kleinen Projekt und würde einen einstellbaren Widerstand benötigen (Bereich ca. 0 - 500k). Zum Ansteuern habe ich ein PWM Signal von einem AtMega8 (ca. 1kHz-65kHz möglich). Im Netz habe ich folgende Schaltung mit einem FET gefunden (siehe Anhang) Der FET wird über ein RC Glied angesteuert und realisiert einen verstellbaren Widerstand. Das PWM Signal kann ich leider nicht direkt verwenden, weil damit eine uralt Hardware (Commodore 64 Analoge Paddle Eingänge) angesteuert werden soll. (siehe Bild paddle_innenschaltung_c64.gif) Ich Forum habe ich leider nichts passendes finden können und bin für jede Idee dankbar.
Einstellbaren Widerstand braucht man normalerweise nicht. Du kannst die beiden Potis durch einstellbare Stromquellen ersetzten. Das ist wesentlich einfacher und linearer zu bewerkstelligen.
Robert G. schrieb: > Zum Ansteuern habe ich ein PWM Signal von einem AtMega8 Gib das doch einfach über einen Widerstand direkt auf den Kondensator. Der Widerstand muss so groß sein, wie der "kleinste" Paddelwiderstand, damit du bei 100% PWM Vollausschlag hast. "Höhere" Widerstandswerte werden dann durch PWM nachgebildet. Irgendwo bei 50..70% PWM wird dann Schluss sein, weil die Schaltschwelle des Komparators nicht mehr erreicht wird. Und du kannst dann mit PWM Werten zwischen dieser "Untergrenze" und 100% den Paddelausschlag steuern.
:
Bearbeitet durch Moderator
Robert G. schrieb: > Ich arbeite gerade an einem kleinen Projekt und würde einen > einstellbaren Widerstand benötigen (Bereich ca. 0 - 500k). Man kann keine einstellbaren Widerstand einfach realisieren. Man könnte ein Motorpoti nehmen, oder das PWM Signal erfassen und an ein DigitalPoti weiterleiten, oder den Sollwert auf Eingangsseite mit dem Stromfluss vs. Spannungswert auf Ausgangsseite vergleichen und einen MOSFET danach regeln, aber keine Lösung davon ist einfach. Die Schaltungen sind Unsinn. Robert G. schrieb: > Das PWM Signal kann ich leider nicht direkt verwenden, weil damit eine > uralt Hardware (Commodore 64 Analoge Paddle Eingänge) angesteuert werden > soll. Gerade da, bei Schaltungen die sowieso nur den Strom durch einen Widerstand aufintegrieren, reicht PWM direkt. Einfach statt +5V dort die PWM des jeweiligen Kanals anlegen. Das funktioniert nit nucr beim CBM sondern auch beim Apple und IBM PC Gameport. Bei Anspruch auf extreme Genauigkeit (die bei Paddles normalerweise nicht erfordelich ist), muss man eventuell die PWM mit der Analgschalter-Umschaltungen synchronisieren. Zumindest muss die Frequnz höher sein als die Paddle-Auswertung dauert.
@Michael Bertrandt Michael B. schrieb: > Die Schaltungen sind Unsinn. Die paddle_innenschaltung_c64.gif ist kein Unsinn, genauso funktioniert das bei C64 Paddles. Der Analogschalter dient nur dazu, jeweils Port 1 und Port 2 umzuschalten, den kann man sich auch wegdenken. Der SID entlädt die Kondensatoren über PIN 23 und 24, wenn er mit der Messung fertig ist. Danach werden die Kondensatoren wieder über die Paddle Widerstände geladen und die Zeit x gemessen, bis die Kondensatoren wieder eine bestimmte Ladung haben (muss ich mit dem Oszi mal ausmessen, geht aber wohl sehr schnell) fet_rest.png kann vermutlich Unsinn sein, das war ja auch meine Frage. Michael B. schrieb: > Gerade da, bei Schaltungen die sowieso nur den Strom durch einen > Widerstand aufintegrieren, reicht PWM direkt. Einfach statt +5V dort die > PWM des jeweiligen Kanals anlegen. Das funktioniert nit nucr beim CBM > sondern auch beim Apple und IBM PC Gameport. Das habe ich bereits ausprobiert, dabei kommen nur Randomwerte aus dem SID Register. Das wäre ja mein erster Ansatz gewesen. Habe verschiedene Frequenzen ausprobiert, bis ca. 65kHz. Mehr schafft der AVR leider nicht via PWM. Die Kondensatoren haben jeweils 1,8nF.
1 | OP |
2 | | \ |
3 | ------R1----+------| +\ |
4 | | | >-+---R2---- |
5 | C +-| -/ | |
6 | | | | / | |
7 | GND +-------+ |
R1 + C integrieren die PWM zu einer Gleichspannung, der OP puffert diese niederohmig. R2 dient mit dem C im C64 als Zeitkonstante die noch von der Spannung abhaengt vom OP abhaengt. Must du jetzt mal testen ob die minimale Spannung des OP noch ausreichend ist.
:
Bearbeitet durch Moderator
Beitrag #5232621 wurde vom Autor gelöscht.
Robert G. schrieb: > muss ich mit dem Oszi mal ausmessen Wenn du schon mal am Messen bist, dann miss doch mal den maximalen und minimalen Paddel-Widerstand. Also den Widerstand wo das Paddel tatsächlich noch reagiert und was tut...
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Wenn du schon mal am Messen bist, dann miss doch mal den maximalen und > minimalen Paddel-Widerstand... Muss ich nicht, bei C64 Paddles sind so 470k - 500kOhm Potis üblich. Also 0 - 470kOhm Bereich Bei den alten Atari Paddles waren es übrigens 1 MOhm Potis.
Robert G. schrieb: > Also 0 - 470kOhm Bereich Meine Frage zielte darauf ab, statt 0 Ohm einen Wert größer als 0 Ohm zu bekommen, der sich "noch genau wie 0 Ohm" verhält. Das wäre der R2 aus Helmuts Schaltung und der von mir erwähnte "kleinste" Widerstand. Und dann könnte man sich Werte für diese Schaltung ausdenken:
1 | |
2 | PWM 0/5V -----R1----o------Rpaddelmin------> Paddeleingang |
3 | hohe Frequenz | |
4 | === z.B. 47µF |
5 | | |
6 | GND |
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Also den Widerstand wo das Paddel > tatsächlich noch reagiert und was tut... Ok das werde ich mir heute Abend ansehen. Soviel ich weiß gibt es da aber größere Ungenauigkeiten. Toleranzen von den kleinen Kondensatoren bzw auch in den Potis der Paddles usw. Die Schaltung mit dem Integrierer könnte klappen, an so etwas hab ich schon gedacht. 471er hätte ich noch herumliegen. Lassen die sich asymmetrisch betreiben?
@Robert Grasböck (robert_g) >(siehe Bild paddle_innenschaltung_c64.gif) Dafür brauchst du eine steuerbare Konstantstromquelle. Die kann man hier leicht mit einem OPV + Gemüse aufbauen. http://www.ti.com/lit/an/snoa474a/snoa474a.pdf Figure 5 Das Thema Abgleich kannst du dir sparen, kauf 1% Widerstände und gut. Dein PWM-Signal filterst du mit einem RC-Tiefpaß und legst die gefilterte Gleichspannung an den + Eingang der Schaltung. Also OPV reicht ein TS912, dort sind sogar 2 OPVs drin, perfekt für 2 Eingänge.
:
Bearbeitet durch User
@ Lothar Miller (lkmiller) (Moderator)
>Und dann könnte man sich Werte für diese Schaltung ausdenken:
Wird wahrscheinlich nicht funktionieren, weil bei kleinen Spannungen die
Komparatorschwelle nicht erreicht wird. Man muss auch bei kleinen
Spannungen weit in Richtung VCC ziehen können. Siehe mein vorheriger
Beitrag.
Falk B. schrieb: > weil bei kleinen Spannungen die Komparatorschwelle nicht erreicht wird. Wie ich schon schrieb: es wird sich ab ca. 50%-70% PWM was tun. Denn der Komparator im SID ist ein simpler CMOS-Eingang. Und weil das Ganze sowieso überaus nichtlinear ist, muss vor die PWM-Ausgabe noch eine "Verzerrungsfunktion". Eine steuerbare Konstantstromquelle braucht diese "Verzerrrung" der Übertragungsfunktion auch, weil so ein Widerstand ja auch keine KSQ ist...
:
Bearbeitet durch Moderator
Robert G. schrieb: > 471er hätte ich noch herumliegen. Lassen die sich asymmetrisch > betreiben? Klar. Du kannst sie mit -5V und +12V versorgen um 0-5V Signale zu verarbeiten. Denn sie wollen mit zumindest 3V weniger als dem kleinsten zu vetarbeitenden Signal und 3V mehr als dem grössten zu verarbeitenden Signal versorgt werden. Einem TS912 hingegen würden 0V und 5V als Versorgung reichen. Irgendwo muss ja der technologische Fortschritt sein, man kann doch nicht glauben dsss der alte Scheiss immer noch die beste Lösung wäre.
Lothar M. schrieb: > Robert G. schrieb: >> Also 0 - 470kOhm Bereich > Meine Frage zielte darauf ab, statt 0 Ohm einen Wert größer als 0 Ohm zu > bekommen, der sich "noch genau wie 0 Ohm" verhält. Das wäre der R2 aus > Helmuts Schaltung und der von mir erwähnte "kleinste" Widerstand. > > Und dann könnte man sich Werte für diese Schaltung ausdenken: > > > PWM 0/5V -----R1----o------Rpaddelmin------> Paddeleingang > hohe Frequenz | > === z.B. 47µF > | > GND > Also das werde ich heute mal ausprobieren. Wenn das nicht funktioniert, dann werde ich wohl oder übel in den OPV Apfel beißen müssen. Danke erst mal an alle für eure Antworten. Ich werde weiter berichten. Der Wert im SID ist übrigens 8 Bit 0...255 also relativ ungenau. Spiele verwenden meist nur einen Teilbereich. Bei Atari Paddles (~1MOhm) am C64 ist der höherohmige Teilbereich des Potis tot. Da die Ladezeit des Kondis außerhalb des Messbereichs.
:
Bearbeitet durch User
So was sollte doch auch funktionieren.
1 | 5V PWM ------|>|------[ R1 ]--------> Paddle Input |
2 | |
3 | 1N4148 2k |
Es geht ja nur darum den Kondensator im Paddle Input mit verschiedenen Geschwindigkeiten aufzuladen. Die PWM lädt ihn mit kurzen Pulsen variabler Länge, während dem das Poti in mit verschieden grossen Strömen lädt. Wenn du eine 8bit PWM hast, solllte 2k Ohm R1 etwa richtig sein, da 2k x 256 = 512 kOhm P.S Masse musst du natürlich auch verbinden. Andi
Andi schrieb: > So was sollte doch auch funktionieren. > >
1 | > |
2 | > 5V PWM ------|>|------[ R1 ]--------> Paddle Input |
3 | > |
4 | > 1N4148 2k |
5 | > |
Nicht wirklich. Es funktioniert aus dem gleichen Grund nicht, aus dem die ungefilterte PWM auch schon nicht funktioniert: weil der SID das Poti "getaktet" abfragt. Vereinfacht gesagt: der SID entlädt den Kondensator regelmäßig und mißt dann, wie lange es dauert, bis er über den Widerstand des Paddles auf eine gewisse Spannung aufgeladen ist. Eine Aufladung per PWM müßte nun mit wesentlich höherer Frequenz als der Abtastfrequenz des SID geschehen. Sonst gibt es häßliche Aliasing-Effekte.
Lothar M. schrieb: > PWM 0/5V -----R1----o------Rpaddelmin------> Paddeleingang > hohe Frequenz | > === z.B. 47µF > | > GND hab nun R1 100ohm C 470uF Rpaddelmin 22kohm das ergibt schon recht brauchbare werte der min wert wäre aber rund 200ohm
Robert G. schrieb: > das ergibt schon recht brauchbare werte Noch ein bisschen mit den Werten herumtricksen, dann wird das schon. Die haben das früher(tm) auch so gehandhabt... ;-) > der min wert wäre aber rund 200ohm Hmmmmmm, dann müsstest du auf jeden Fall den OP als Puffer vorsehen. Und du hättest nur einen recht geringen Teil der PWM zum einstellen. Du solltest hier den Rpaddelmin "so hochohmig wie möglich" machen.
Lothar M. schrieb: >> der min wert wäre aber rund 200ohm > Hmmmmmm, dann müsstest du auf jeden Fall den OP als Puffer vorsehen. Und > du hättest nur einen recht geringen Teil der PWM zum einstellen. Du > solltest hier den Rpaddelmin "so hochohmig wie möglich" machen. Also grundsätzlich! Damit man auch den Messkondensator in der Zeit der Abtastung ordentlich laden kann, darf der Ladewiderstand nicht zu groß sein. Abtastung alle 512 Takte vom C64 Systemtakt (= 0,98MHz bei PAL, 1,02MHz bei NTSC) Die Abtastung erfolgt also mit rund ~1.914kHz (alle 522.4us) Wenn ich mich jetzt nicht verrechnet habe. Das sieht man auch schön auf dem Oszi. Ich denke auch, dass die Lösung mit einem OPV wohl die beste ist.
Robert G. schrieb: > Also grundsätzlich! > Damit man auch den Messkondensator in der Zeit der Abtastung ordentlich > laden kann, darf der Ladewiderstand nicht zu groß sein. Deshalb mein wiederholter Verweis auf den sich etwas widersprüchlich anhörenden, bei ausreichender Denkzeit aber logischen "größtmöglichen minimalen Paddelwiderstand". Denn dieser minimale Widerstand ist der, der für eine schnellstmögliche Ladung des Kondensators sort. Bei 0 Ohm wird der Kondensator z.B. gar nicht entladen oder/und erreicht sofort nach dem Entladevorgang wieder die Schaltschwelle. Wenn das Paddel bei 1k "gerade so" an den Anschlag kommt, dann sind ist dieser 1k der minimale Paddelwiderstand, der eingesetzt werden muss. Und zwar primär unabhängig ob die Schaltung mit oder ohne OP aufgebaut ist. Das einzige, was der OP besser kann, ist die PWM zu glätten, denn dann kann man mit 100k und 1µF eine hübsche glatte Spannung erzeugen...
:
Bearbeitet durch Moderator
Naja der Minimale Paddle Widerstand wäre (habe beim Joystick gemessen) rund 50 Ohm. Aber bei rund 100Ohm wird schon 0 als Registerwert eingelesen. Rauf geh es ca. bis 400kOhm.
Robert G. schrieb: > bei rund 100Ohm wird schon 0 als Registerwert eingelesen. Dann wirst du da recht niederohmig werden müssen und bauchst den OP. Ich würde allerdings versuchen, trotzdem noch hochomiger zu werden, sonst wird die Einstellung eine recht knifflige Sache, wo sich bei kleinsten PWM-Änderungen schon am Paddelwert was tut...
@Lothar Miller (lkmiller) (Moderator) >sonst wird die Einstellung eine recht knifflige Sache, wo sich bei >kleinsten PWM-Änderungen schon am Paddelwert was tut... Dann vielleicht doch die steuerbare Stromquelle?
Oder eine andere Idee: 2 x 4066 Analogschalter, binaer angesteuert die 8 Widerstaende in 2 Potenzen abgestuft schalten. Fuer Paddelgenauigkeit sollten die Widerstaende reichen.
Robert G. schrieb: >> Die Schaltungen sind Unsinn. > > Die paddle_innenschaltung_c64.gif ist kein Unsinn, Nein, aber wo gibts denn dort "Einstellbare Widerstände aus PWM Signal"? Elektronisch "Einstellbare Widerstände" kann man zwar schaltungs- technisch verwirklichen; sie sind aber normalerweise wirklich unsinnig und nur mit grossen Abweichungen vom Wunschwert zu ver- wirklichen.
Lothar M. schrieb: > Robert G. schrieb: >> bei rund 100Ohm wird schon 0 als Registerwert eingelesen. > Dann wirst du da recht niederohmig werden müssen und bauchst den OP. > Ich würde allerdings versuchen, trotzdem noch hochomiger zu werden, > sonst wird die Einstellung eine recht knifflige Sache, wo sich bei > kleinsten PWM-Änderungen schon am Paddelwert was tut... Hab mir gerade die OPVs bestellt. Wenn ich die Schaltung zum Testen aufgebaut habe, werde ich wieder berichten. Ich denke das wird damit ganz gut funktionieren. Helmut L. schrieb: > 2 x 4066 Analogschalter, binaer angesteuert die 8 Widerstaende in 2 > Potenzen abgestuft schalten. Fuer Paddelgenauigkeit sollten die > Widerstaende reichen. Das wird, so denke ich, noch komplizierter als die OPV Lösung. Außerdem benötigt man dann einige Outputs vom uC zum Schalten des 4066. So viele habe ich aber leider nicht mehr über. Die Idee ist aber sehr gut und wurde auch schon manchmal so eingesetzt, soviel ich weiß. Harald W. schrieb: >> >> Die paddle_innenschaltung_c64.gif ist kein Unsinn, > > Nein, aber wo gibts denn dort "Einstellbare Widerstände aus PWM Signal"? Naja, vielleicht hätte ich etwas weiter ausholen sollen bei meinem Vorhaben. Der größte Teil der IOs vom ATMega ist bereits belegt. Es stehen mir eben Digitale Outputs (für die Digitalen Eingänge des C64) und bzw PWMs (gedacht für die Analogeingänge) zur Verfügung. Ein digitales Potentiometer als Chip hätte wohl auch funktioniert, jedoch bräuchte ich dann wieder mind. 2 Outputs (i2C). Außerdem bin ich mir nicht sicher ob es diese Dinger in meinem Wertebereich gäbe. Schaltgeschwindigkeit mal ganz vernachlässigt.
Robert G. schrieb: > Außerdem > benötigt man dann einige Outputs vom uC zum Schalten des 4066. Ein 4094 Schieberegister laesst gruessen.
Wenn es interessiert was aus dem Projekt geworden ist: https://github.com/djtulan/nunchuk64/blob/master/hardware/nunchuk64/nunchuk64.pdf Ging dann doch viel einfacher als erwartet. Software sei Dank.
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.