Forum: Mikrocontroller und Digitale Elektronik Ansteuerung Digitalpoti DS1267


von Michael P. (smalldevice)


Lesenswert?

Hallo Gemeinde,

Ich versuche gerade ein Digitalpoti DS1267-100 (14-Pin DIP) über einen 
Atmega8 zu steuern.
Rudementär scheint sich auch etwas zu tun, der DS1267 bekommt Daten vom 
Atmega.
Ich habe einen Signalgenerator und ein Oszi angeschlossen. Der 
Signalgenerator gibt ein Rechteck auf Pin 2(H1) des DS1267, Pin 4(W1) 
geht an das Oszi, Pin 3(L1) liegt auf GND.
Über ein LCD gebe ich die Daten aus, die an das DS1267 gesendet werden. 
Die Daten, die gesendet werden sind soweit korrekt.
Was passiert ist folgendes: Beim ändern der Daten toggelt das Signal auf 
dem Oszi nur zwischen zwei Werten hin un her.
Bin etwas ratlos, vielleicht kann mir einer von Euch auf die Sprünge 
helfen.

Hier die relevanten Zeilen des Bascom-Programmes:

' Ansteuerung des DS1267
Ds1267_clk Alias Portc.5
Ds1267_dq Alias Portc.4
Ds1267_rst Alias Portc.3
Config Ds1267_clk = Output
Config Ds1267_dq = Output
Config Ds1267_rst = Output
...
' Lautstärke über DS1267 regeln
Sub Setvolume(byval Tot_vol As Word)
Dim Vreg17 As Long
' DS1267 ansteuern
' Start Datenübertragung RST HIGH
  Set Ds1267_rst
  Vreg17 = Tot_vol
' Stack Select Bit setzten BIT 0, Bit 1-8 Poti0, Bit 9-16 Poti1
  Shift Vreg17 , Left
  ' 17 Bits nach DS1267 shiften
  Shiftout Ds1267_dq , Ds1267_clk , Vreg17 , 3 , 17
  ' Ende Datenübertragung RST LOW
  Reset Ds1267_rst
  Cls
  Upperline
  Lcd Vreg17
  Lowerline
  Lcd Tot_vol
End Sub

vielen Dank für Eure Hilfe

smalldevice

von Crossposter (Gast)


Lesenswert?


von Stefan B. (stefan) Benutzerseite


Lesenswert?

DS1267
±5V Dual Digital Potentiometer Chip
http://datasheets.maxim-ic.com/en/ds/DS1267.pdf

Wie sendest du das Stack Select Bit und wie die Daten? Ich würde mir 
dies zusammenreimen:

DIM Vreg17 AS LONG
...

  ' Daten
  Vreg17 = Tot_vol
  SHIFT Vreg17, LEFT, 1
  ' Stack Select Bit dazu je nach Hardware 1 oder 0
  Vreg17 = Vreg17 + 0
  ' LSB first raus
  RESET Ds1267_clk
  SET Ds1267_rst
  SHIFTOUT Ds1267_dq , Ds1267_clk , Vreg17 , 3 , 17
  RESET Ds1267_rst

Beim Parameter Option (3 oder 4 für LSB first) des Shiftout ist die Doku 
des BASCOM IMHO unklar. Leider ist kein Timingdiagramm angegeben. Bei 
DS1267 soll ja DQ vor CLK anliegen und bei CLK low=>HIGH übernommen 
werden. Ich weiss nicht, ob SHIFTOUT das passend zum DS1267 
Timingdiagramm leisten kann.

Unterschied zu deinem Code: Die Dimensionierung von Vreg17 und das 
definierte Setzen der Clock vorm Shiftout. Eventuell würde ich noch 
kurze Wartezeiten zwischen RESET, SET, SHIFTOUT und RESET verwenden.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Michael Pippert schrieb:

> Ich habe einen Signalgenerator und ein Oszi angeschlossen. Der
> Signalgenerator gibt ein Rechteck auf Pin 2(H1) des DS1267, Pin 4(W1)
> geht an das Oszi, Pin 3(L1) liegt auf GND.

> Was passiert ist folgendes: Beim ändern der Daten toggelt das Signal auf
> dem Oszi nur zwischen zwei Werten hin un her.

Das ist IMHO auch richtig, weil du auf dem Oszi das Rechtecksignal des 
Signalgenerators beobachtest und durch den DS1267 die Amplitude 
veränderst.

Einer der Werte sollte 0 sein (0 des Rechtecks) und der andere Wert 
sollte durch die Einstellung des DS1267 beeinflussbar sein.

von Michael P. (smalldevice)


Lesenswert?

Hallo Stefan,

Danke für Deine Mühe. Hab alles probiert, leider ohne Erfolg.
Ich mache für heute erst mal Schluss mit der Sache, vielleicht habe ich 
ja beim nächsten Anlauf eine göttliche Eingebung.
;)

sd

von Michael P. (smalldevice)


Lesenswert?

Hallo Stefan,

habe das Problem zu Fuß gelöst. Shiftout funktionierte in keiner 
möglichen Kombination.

Sub Setvolume(byval Tot_vol As Word)
  ' Lautstärke für aktiven Kanal sichern
  Vol_chl(aktiv_channel) = Vol_l
  Vol_chr(aktiv_channel) = Vol_r
  ' Start Datenübertragung RST HIGH
  Set Ds1267_rst
  ' Stack Select Bit setzten (BIT 1) übertragen
  Ds1267_dq = 0
  ' Clock pulse
  Ds1267_clk = 1
  Ds1267_clk = 0
  ' Bit 2-9 Poti0 übertragen (MSB first)
  For I = 7 To 0 Step -1
    Ds1267_dq = Vol_l.i
  ' Clock pulse
    Ds1267_clk = 1
    Ds1267_clk = 0
  Next I
  ' Bit 10-17 Poti1 übertragen (MSB first)
  For I = 7 To 0 Step -1
    Ds1267_dq = Vol_r.i
  ' Clock pulse
    Ds1267_clk = 1
    Ds1267_clk = 0
  Next I
  Reset Ds1267_rst
  Call Show_volume
End Sub

Gruß

sd

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
Noch kein Account? Hier anmelden.