www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansteuerung Digitalpoti DS1267


Autor: Michael Pippert (smalldevice)
Datum:

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

Autor: Crossposter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Michael Pippert (smalldevice)
Datum:

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

Autor: Michael Pippert (smalldevice)
Datum:

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

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.