Forum: Mikrocontroller und Digitale Elektronik Digital SPI Poti "MCP41HV51"


von Dieter M. (Gast)


Lesenswert?

Moin Leute,

habe mir ein DigitalPoti zum Einstellen eines Musiksignals geholt das 
"MCP41HV51". Soweit si gut.
Ich bekomme das Teil einfach nicht zum laufen... CLK Signal ist das und 
Daten kommen auch an. (Bild vom Ossi folgen...) Ist eventuell ein Fehler 
in meinem Programm Code? Ich nutze den CCS Compiler... mit einem 
PIC16F873A
1
#include <16F873A.h>
2
#use delay(clock=4000000)
3
#fuses HS, NOWDT,NOPROTECT,NOLVP, DEBUG, NOPUT
4
#use spi(BITS=16, stream=SPI_STREAM)
5
6
7
void main(void)
8
{
9
10
    output_low( PIN_C1 ); //CS
11
    output_low( PIN_C3 ); //SCK
12
    output_low( PIN_C4 ); //SDI
13
    output_low( PIN_C5 ); //SDO
14
15
    setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_64); 
16
  
17
    
18
    
19
  while(TRUE)
20
  {
21
    output_low( PIN_C1 ); //CS auf LOW setzen = POTI AKTIV
22
    spi_write( 0x4 );     //Adresse aus dem Datenblatt Richtig?
23
    spi_write( 128 );     //Daten
24
    output_high( PIN_C1 );//CS auf HIGH setzen = POTI INAKTIV
25
    delay_ms(250);
26
27
  }
28
}

Angeschlossen ist das Poti wie folgt:

µC:                    POTI:
                       VL -> +5V
PIN_C3  ------------>  SCK
PIN_C1  ------------> !CS
PIN_C4  ------------>  SDI
PIN_C5  ------------>  SDO
                      !WLAT -> GND
                      !SHDN -> GND
                       DGND -> GND
                       -V   -> GND
                       P0B  -> offen
                       P0W  -> Multimeter (Ohm) 1
                       P0A  -> Multimeter (Ohm) 2
                       V+   -> +5V

Habt ihr einen Ansatz für mich wo ich suchen muss?
Gruß
Dieter M.

von Peter X. (peter_x)


Lesenswert?

Dieter M. schrieb:
> Habt ihr einen Ansatz für mich wo ich suchen muss?

Im Datenblatt

von Stefan (Gast)


Lesenswert?

SDI SDO vertauscht.

von Dieter M. (Gast)


Lesenswert?

@Peter: qualifizierter Beitrag sowas bringt einen vorran...

@Stefan: Danke für den Tipp! Glaube das ist der Fehler gucke morgen 
nach! :)

von STK500-Besitzer (Gast)


Lesenswert?

Dieter M. schrieb:
> P0B  -> offen

nicht gut.
Siehe Punkt 3.11 im Datenblatt:
"3.11 Potentiometer Terminal B
The terminal B pin is connected to the internal
potentiometer’s terminal B.
The potentiometer’s terminal B is the fixed connection
to the zero scale wiper value of the digital
potentiometer. This corresponds to a wiper value of
0x00 for both 7-bit and 8-bit devices.
The terminal B pin does not have a polarity relative to
the terminal W or A pins. The terminal B pin can
support both positive and negative current.
The voltage on terminal B must be between V+ and V-."

von Dieter M. (Gast)


Lesenswert?

Oh okay vielen dank für den Hinweis :)

von Dieter M. (Gast)


Angehängte Dateien:

Lesenswert?

Moin Leute also es hat sich leider nichts verändert... Meine Vermutung 
liegt darin das die Daten falsch gesendet werden kann mir jemand ein 
Beispiel zeigen in welcher Form ich die Daten senden muss?
Und sind die PINs:
!WLAT -> GND
!SHDN -> GND

so richtig angeschlossen wenn ich ins Datenblatt sehe denke ich sollte 
es so passen. (Datenblatt Punkt 3.0 PIN DESCRIPTIONS Seite 21)

Die Daten schicke ich dann wie folgt:
1
    output_low( PIN_C1 ); //CS auf LOW setzen = POTI AKTIV
2
    spi_write( 0x04 );     //Adresse aus dem Datenblatt Richtig?
3
    spi_write( 128 );     //Daten
4
    output_high( PIN_C1 );//CS auf HIGH setzen = POTI INAKTIV
5
    delay_ms(250);

Die steht im Datenblatt auf Seite 48 (TABLE 7-2:MEMORY MAP AND THE 
SUPPORTED COMMANDS)

Ich möchte dem Poti einen Wert zuweisen also nutze ich doch das 
"Volatile
TCON Register" richtig? Also Adresse "0x04"

Vielen Dank für eure Hilfe!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dieter M. schrieb:
> kann mir jemand ein Beispiel zeigen in welcher Form ich die Daten
> senden muss?
Im Datenblatt siehe Abschnitt 1.1
SPI Mode Timing Waveforms and Requirements

> Und sind die PINs:
> !WLAT -> GND
> !SHDN -> GND
Achtung, invertierte Logik: "Not Shutdown" auf "0" bedeutet 
"Shutdown"...

Und das steht dann auch klar im DB:
1
4.3.1.1 Hardware Shutdown Pin Operation
2
When the SHDN pin is low, the P0A terminal will disconnect
3
(become open) while the P0W terminal simultaneously
4
connect to the P0B terminal (see Figure 4-5).

von Dieter M. (Gast)


Lesenswert?

Okay danke das war schonmal ein kleiner Schritt nun passen denke ich nur 
noch die Daten nicht! Increment Wiper und Decrement Wiper funktioniert! 
Also die Verdrahtung sollte passen! Wie bringe ich dem Poti nun bei das 
ich ihm feste Werte zuweisen kann!?

Danke für eure Hilfe!

von Dieter M. (Gast)


Lesenswert?

Habe mittlerweile das Gefühl das es daran liegt das ich die 16bit 
nacheinander schicke! Da der SPI_Write Befehl nur 8bit kann oder irre 
ich mich da? Wenn man sich das Bild vom Oszilloskop anguckt ist zwischen 
den beiden Paketen eine Pause kann dies der Fehler sein?

Wenn ich Increment oder Decrement schicke habe ich ja nur ein 
Datenpaket! Und das funktioniert perfekt!

von Dieter M. (Gast)


Lesenswert?

Jo habe es raus für die es interessiert es lag an dem Vorteiler des CLK.

setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_64);

ändern in:

setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);

dann klappt es!

Danke und frohes Fest!

von Martin L. (schrau_baer)


Lesenswert?

Hallo,

nun stehe ich leider vor diesem Problem das Digitalpoti mit einem PIC 
anzusteuern. Den !WLAT Pin des Digitalpotis habe ich auf Masse gelegt, 
der !SHDN ist über den Opendrain-Ausgang und einem Pullup auf +5V. 
Leider schaffe ich es nicht den Wiper oder einen konkreten 
Widerstandswert einzustellen. Hat einer evtl einen Codeschnippsel? Aus 
dem Handbuch werde ich nicht ganz schlau ob ich das Poti mit nur einem 
8-Bit Befehl zum Wiperincrement bewege oder ob ich zuvor noch ein 8-Bit 
Kommando versenden muss um das Poti zu "Konfigurieren".

Wäre sehr hilfreich wenn sich jemand melden könnte.

Gruß
Marti

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.