Forum: Mikrocontroller und Digitale Elektronik PGA2310/CS3310 mit Bascom via SPI?


von Alois Stanzinger (Gast)


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

von Dirk (Gast)


Lesenswert?

Hi,

wo ist den der Befehl um den Globalen Interrupt zu aktivieren.

Enable Interrupts

Mfg

Dirk

von Alois Stanzinger (Gast)


Lesenswert?

Hallo Dirk,

Enable Interrupts war schon drinnen, habe es vergessen
zu erwähnen. Trotzdem bewegt sich leider nichts :(

Alois

von Maroc (Gast)


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

von Kai Markus T. (kmt)


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

von Kai Markus T. (kmt)


Lesenswert?

By the way, es könnte am /SS-Pin (bzw. beim Mega32 PB.4) liegen. Ist der
bei Euch als Output konfiguriert? Wenn er als Input geschaltet ist und
nicht angeschlossen ist, könnte das zu Fehl- oder Garnicht-Funktionen
führen.

KMT

von Jürgen Berger (Gast)


Lesenswert?

Hallo,
ich habe mit dem PGA2311 kürzlich einen DMX Lautstärkesteller
realisiert. Ansteuerung des PGA erfolgt über die SPI Schnittstelle.
Also bei Interesse.. (Code ist in Assembler)

Jürgen

von NICO (Gast)


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!

von Jürgen B. (hicom)


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

von Nixweiss (Gast)


Lesenswert?


von NICO (Gast)


Lesenswert?

Vielen dank jürgen!

von Jürgen B. (hicom)


Lesenswert?

Hallo Nico,
Melde dich falls du noch Fragen oder Problem hast.

Gruß
Jürgen

von NICO (Gast)


Lesenswert?

Hallo jürgen
hab nach deinen Code gearbeitet
es bewegt sich gar nichts !hast du idee von potenielle Fehlerquellen 
liegen könnten?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Vielleicht ist Dein SPI zu schnell. Versuch´s doch mal in Software mit 
Pintoggeln und halte Dich genau an das Datenblatt, was die 
Minimaltimings angeht.

von Jürgen B. (hicom)


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

von Jürgen B. (hicom)


Angehängte Dateien:

Lesenswert?

Hier noch die Schaltung

von Thomas O. (tarzanwiejane)


Lesenswert?

@Juergen Berger
Ich habe da auch Probleme den PGA2311 anzusteuern. Beschaltung ist wie 
bei dir, allerdings mit nem AtMega16 bzw 644(beim 644 mit geaenderten 
Registernamen). Der ganze Strutz laeuft sauber durch, aber der PGA2311 
zeigt keinerlei Reaktion.
Leider hab ich kein Oszi um mal zu schauen was die Leitungen da so 
veranstalten.

cu Tarzanwiejane

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Habt ihr den Mute-Eingang des PGA inaktiv geschaltet, also auf Vcc? 
Falls der auf Masse liegt oder floatet, gibt´s auch nichts zu hören.

von NICO (Gast)


Lesenswert?

Das Ding geht jetzt
Mute war auf Masse....
Danke

von Thomas O. (tarzanwiejane)


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

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.