PGA2310/CS3310 mit Bascom via SPI?

Gast #164106
Lesenswert?

Hallo Leute,

ich entwickle gerade mit Bascom eine SPI Steuerroutine
zur Ansteuerung eines "digitalen" Potis (Texas Instruments
PGA2310 bzw. CS3310 von Crystal). Das ganze soll via SPI
ablaufen. Leider bewegt sich der PGA auf Befehl von meinem
Atmega16 kein Stück :( Da ich noch relativ neu in Bascom
bzw. uC Programmierung bin, bitte ich um eure Hilfe. Vielleicht
habe ich ja etwas falsch gemacht. Die Verbindung von Atmel
zum PGA ist wie folgt:

SDI = MOSI
CS = PortA.0
CLK = SCK
ZCEN/Mute = PortA.1/PortA.2

Folgende Zeile wird zum SPI Init verwendet:
Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes ,
Polarity = Low , Phase = 0 , Clockrate = 4

Dann geht's weiter mit
Totalvol = &B10000000 (Datentyp WORD)
CS vom PGA auf LOW setzen (da invertierend)
SPIINIT
Spiout Totalvol , 1
CS vom PGA auf HIGh zurücksetzen

Hat jemand vielleicht ein Stück funktionierenden Code oder eine
Idee was ich da falsch gemacht haben könnte?

Grüsse,

Alois
Gast #164109
Lesenswert?

Hallo,

ich versuche gerade das selbe mit einem ATmega8.
Mir ist aufgefallen, dass du, wenn ich es richtig verstanden habe
die Variable Totalvol festlegst und mit Binär 10000000 beschreibst.
Diese sendest du dann an den Chip über den SPI. Ich habe im Datenblatt
gelesen, dass der PGA 2310 ein 16BIT WORD benötigt,
je 8 Bit pro Kanal. Vieleicht hilft dir das weiter bei deinem Problem.
Vieleicht liegt es aber auch an der Art der übertragenen Daten, ich
wurde aus der Syntax laut Datenblatt nicht sonderlich schlau.

Schönen Abend noch,
Maroc
#164110
Lesenswert?

Ich habe so etwas mal mit einem CS3310 in C realisiert. Was genau ist am
Datenblatt unverständlich? Der Ablauf gestaltet sich so:

Ruhezustand: CS auf 1, CLK egal

1. CS und CLK auf 0 ziehen
2. Datenbit bereitstellen, rechter Kanal zuerst, MSB zuerst
3. Datenbit wird auf steigende Flanke von CLK übernommen
4. das Ganze 16 Mal wiederholen
5. CS wieder auf 1 setzen ==> Daten werden übernommen

Ich kenne mich nicht so in BASCOM aus, daher kann ich nur die Parameter
aus dem Atmel Datenblatt wiedergeben:

CPHA=0 (clock phase)
CPOL=0 (clock polarity)
DORD=0 (MSB first)

Ein Schaltplan wäre zur Fehlersuche nicht schlecht... und eventuell
der ganze Code, so kann man Fehler bei der Initialisierung erkennen.

Greetz
KMT
Gast #615207
Lesenswert?

Allo jürgen hab gelesen dass du mit dem pga2310 zu tun gehabt hast!
bin gerade dabei einnen über atmega 88V (ATMEL) controllierten PGA2310 
zu programmieren.
Bin seit einem Monat bei assembler, habe die basics erlernt
dennoch weiss ich nicht so an welcher Stelle ich mit den programmieren 
anfangen soll , der code soll in Assembler geschrieben werden.
kannst du mir dabei helfen wäre nett!
#615774
Lesenswert?

Hallo Nico,
du nutzt am besten die SPI Funktion des AVRs.
Hier mal die entsprechenden Stellen aus meinem
Programm:

SPI Funktion aktivieren:
1
;Enable SPI, Master, set clock rate fck/2
2

3
        ldi temp,(1<<SPE)|(1<<MSTR)|(0<<SPR1)|(1<<SPR0)
4
        out SPCR,temp
5

6
        ldi temp,(1<<SPI2X)
7
        out SPSR,temp

Hier das Senden von Werten an den PGA:
1
SPI_VolumeTransmit:  
2
                
3
;start transmission
4
  cbi PORTB,CS      ;set /CS    
5
  out SPDR,dmx_volume_r    ;transmit volume right
6

7
Wait_transmit_Right:
8
  sbis SPSR,SPIF
9
  rjmp Wait_transmit_Right
10

11
  out SPDR,dmx_volume_l    ;transmit volume left
12
        
13
Wait_transmit_Left:
14
  sbis SPSR,SPIF
15
  rjmp Wait_transmit_Left
16
  sbi PORTB,CS      ;disable /CS
17
  ret

Gruß
Jürgen
#619342
Lesenswert?

Hallo Nico,
Hardware richtig aufgebaut? Ich habe mal meine Schaltung angehängt.
Ansonsten, läuft dein SPI richtig? Lässt sich im Simulator recht gut
kontrolieren.

@Travel Rec. Glaube nicht, dass das SPI zu schnell ist. Ich arbeite
auch mit fck/2 bei 12Mhz - ohne Probleme, der PGA läuft bis 6Mhz.

Gruß
Jürgen
#620232
Lesenswert?

Der Mute Eingang haengt an einem Controllerpin. Damit kann ich schoen 
aus und einschalten. Das funktioniert. Das einzige was nicht 
funktioniert ist die SPI   Geschichte. Ich werde mal nen anderen avr an 
den SPI-Out haengen und ausgeben was der fuer Daten kriegt. Vielleicht 
komme ich ja so weiter.

Bei mir ist der Chip initial auf voller Lautstaerke auch wenn das 
Datenblatt was anderes behauptet. Ist das normal? es Sieht auch so aus 
als ob Chipintern +5V Analog mit +5V digital verbunden sind. Zumindest 
kriegt mein avr jetzt auch Spannung wenn ich sein Netzteil abschalte. 
Ist das auch normal? Eventuell 2311 spezifisch? der 2310 hat ja 15v da 
sollte dem wohl definitiv nicht so sein.

cu Tarzanwiejane

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren