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
Hi, wo ist den der Befehl um den Globalen Interrupt zu aktivieren. Enable Interrupts Mfg Dirk
Hallo Dirk, Enable Interrupts war schon drinnen, habe es vergessen zu erwähnen. Trotzdem bewegt sich leider nichts :( Alois
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
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
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
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
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!
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
Hallo Nico, Melde dich falls du noch Fragen oder Problem hast. Gruß Jürgen
Hallo jürgen hab nach deinen Code gearbeitet es bewegt sich gar nichts !hast du idee von potenielle Fehlerquellen liegen könnten?
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.
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
@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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.