www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Max5400 digital Poti


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Roland T. (rolandt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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 ....

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Roland T. (rolandt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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?

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Danke Roland...

Ich danke dir viel Mals :-)

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wäre das eine "gute" Lösung?:

poti_val = 0x06; // 6 x 196.1 Ohm = 1176.6 Ohm

CS_Clr(); // CS auf LOW

for(i=0; i<=7; i++) // Byte übertragen
{
  DIN_PutVal( (bool)(poti_val >> (7-i)) ); //wenn 0 LOW, wenn 1 HIGH
  SCLK_Set(); // CLK auf HIGH
  SCLK_Clr(); // CLK auf LOW
}
CS_Set(); // CS auf HIGH

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
korrigiert:
poti_val = 0x06; // 6 x 196.1 Ohm = 1176.6 Ohm

CS_Clr(); // CS auf LOW

for(i=0; i<=7; i++) // Byte übertragen
{
  DIN_PutVal( (bool)(0x01 && (poti_val >> (7-i))) ); //wenn 0 LOW, wenn 1 HIGH
  SCLK_Set(); // CLK auf HIGH
  SCLK_Clr(); // CLK auf LOW
}
CS_Set(); // CS auf HIGH

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
  SCLK_Set(); // CLK auf HIGH
  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 :-)
  SCLK_Set(); // CLK auf HIGH
  NOP:
  SCLK_Clr(); // CLK auf LOW
  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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte natürlich auch die in nahezu jedem µC vorhandene Hardware-SPI 
Schnittstelle nehmen, aber wieso einfach, wenn´s kompliziert auch 
geht....

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast ja so recht, genau auf so eine Antwort habe ich die ganze Zeit 
erwartet.

Jetzt mache ich es mir der SPI-Schnittstelle :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.