Hi, ich möchte mit dem digital Poti Max5400 einen Widerstandswert von 1,2K erzeugen. Kann mir jemand sagen, wie die Ports DIN, SCLK und /CS zu bedienen sind? Wie soll ich die Pins am Mikrocontroller beschalten, damit ich den digital Poti benutzen kann?? D.h. welcher Pin am Mikrocontrolelr muss wie beschaltet sein, damit ich den digital Poti richtig einsetzten kann? Mit so etwas habe ich nie vorher gearbeitet, daher weiß ich einfach nicht wie ich das ganze in Betrieb nehmen kann... Vielen Dank im Voraus Ps. für Beispiele wäre ich sehr dankbar
@Max Kannst Du Englisch lesen? Wenn ja, auf Seite 6 stehts haargenau beschrieben! 8 Bit seriell in das Register des MAX schreiben, indem Du den CS/ Eingang auf low legst und nach dem Einlesen wieder auf high. Für das Einlesen benötigst Du natürlich noch ein Data Clock Signal, das die Bits nach und nach im Register weiterschiebt bis es voll ist (8 Bit). 8 Bit, ergo 256 Zustände. Dazu nimmst Du 3 Ausgänge an einem gewöhnlichen Port Deines µCs. Die Zustände der Ausgänge wechselst Du mit einer Schleife, die 8 mal durchlaufen wird, bis die Bits im Register des MAX sind. Du kannst die Pins direkt an den Port anschließen. Du musst nur auf definierte Zustände der Ausgänge achten, bestenfalls mit internen µC Pull-Ups und Software. Das sollte als Erklärung reichen ....
DIN ist DataInput wenn /CS LOW wird, dann werden die Daten in den Register vom Poti übertragen um die Daten zu übergeben, brauche ich den SCLK. Wie kann ich den SCLK erzeugen? Muss ich das manuel machen, d.h. einen Port für 8 Zyklen immer von LOW auf HIGH und von HIGH auf LOW setzten? Wie sieht der Bitmuster für 1,2k aus? 1200 wäre 100 1011 0000 aber es existerit nur ein 8-bit Register.
Ne, der MAX5400 hat als max. Widerstandswert 50k. D.h. 256/50k*1,2=6,144. D.h. du musst also 00000110b ausgeben. Du machst das mit dem Clock, wie Du es selbst beschrieben hast.
@ Roland T.
>Kannst Du Englisch lesen?
ja kann ich :-D
ich habe das Datenbaltt durchgelesen, mir war aber nicht klar woher ich
den SCLK nehmen muss.
also doch einfach einen Port nehmen und für Bits immer wieder
inbertieren, bis die Daten in den Register gespeichert sind.
Aber eins habe ich immer noch nicht raus:
Wie kann ich den Widerstandswert einstellen? Ich meine welcher Bit
entspricht welcher Zahl?
wäre das eine "gute" Lösung?:
1 | poti_val = 0x06; // 6 x 196.1 Ohm = 1176.6 Ohm |
2 | |
3 | CS_Clr(); // CS auf LOW |
4 | |
5 | for(i=0; i<=7; i++) // Byte übertragen |
6 | {
|
7 | DIN_PutVal( (bool)(poti_val >> (7-i)) ); //wenn 0 LOW, wenn 1 HIGH |
8 | SCLK_Set(); // CLK auf HIGH |
9 | SCLK_Clr(); // CLK auf LOW |
10 | }
|
11 | CS_Set(); // CS auf HIGH |
korrigiert:
1 | poti_val = 0x06; // 6 x 196.1 Ohm = 1176.6 Ohm |
2 | |
3 | CS_Clr(); // CS auf LOW |
4 | |
5 | for(i=0; i<=7; i++) // Byte übertragen |
6 | {
|
7 | DIN_PutVal( (bool)(0x01 && (poti_val >> (7-i))) ); //wenn 0 LOW, wenn 1 HIGH |
8 | SCLK_Set(); // CLK auf HIGH |
9 | SCLK_Clr(); // CLK auf LOW |
10 | }
|
11 | CS_Set(); // CS auf HIGH |
dann gehe ich davon aus, dass das die "gute" Lösung ist. Aber eins muss man noch beachten. und zwar die HIGH- und LOW-PegelZeit vom CLK. im Datenblatt steht 40ns für HIGH und 40ns für LOW aber die Zeit für eine Periode soll 100ns nicht unterschreiten. bei 32MHz Prozessor-Taktfrequenz dauert ein HIGH-/LOW-Pegel 31,25ns. Wenn ich davon ausgehe (und das weiß nicht, ob das stimmt), dass ein Port in einem Takt geschaltet wird, dann wäre folgender Vorgang nicht ganz richtig:
1 | SCLK_Set(); // CLK auf HIGH |
2 | SCLK_Clr(); // CLK auf LOW |
in 2 Takten schalte ich den Ausgangsport auf HIGH und zurück auf LOW. bei 2 Takten wären das 62,50ns (also die 100ns Bedingung nicht erfüllt) Daher füge ich NOP's ein und die Sache wäre geklärt :-)
1 | SCLK_Set(); // CLK auf HIGH |
2 | NOP: |
3 | SCLK_Clr(); // CLK auf LOW |
4 | NOP
|
2 Takte bleibt der Port auf HIGH (also für 62,50ns) und 2 Takte bleibt es auf LOW (hier auch 62,50ns) -> eine Periode: 62,50ns + 62,50ns = 125ns
Man könnte natürlich auch die in nahezu jedem µC vorhandene Hardware-SPI Schnittstelle nehmen, aber wieso einfach, wenn´s kompliziert auch geht....
Du hast ja so recht, genau auf so eine Antwort habe ich die ganze Zeit erwartet. Jetzt mache ich es mir der SPI-Schnittstelle :-)
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.