Hi,
ich bin leider gerade etwas überfordert mit dem Verständnis der Funktion
des SPI mit meherern Slaves. Folgende Situation, ich steuere über den
SPI eine MMC Karte an, dafür verwende ich den Code und die Schaltung von
Ulrich Radig. Als µC verwende ich eine ATMega16 der mit 16Mhz läuft.
Jetzt möchte ich allerdings noch einen DAC über den SPI ansteurn, da
eine Softwarelösung keine guten Ergebnisse bringt. Ich weiß das ich
dafür mehere /SS Leitungen brauche. Soweit ich das verstehe, muss ich
dann für jewals eine Slave einen PIN des ATMega16 als /SS Pin
definieren, welche ist egal oder?
Jetzt kann ich mir nicht vorstellen wie das funktiniert wenn ich MMC und
DAC an einer MISO Leitung angschlossen habe, woher wissen die Slaves
denn das die gesendet Daten für den einen Slave und nicht für den
anderen sind. Ich hab leider auch keine für mich aufschlussreichen
Beispielschaltungen gefunden. Wenn die beiden Slaves einen /SS als
Eingang haben, wäre das ja kein Problem, der DAC (ich verwende einen
LTC1257) hat so wie ich das sehe keinen /SS Pin, sondern nur einen /LOAD
eingang. Bei der MMC Karte bin ich mir überhaupt nicht im klaren ob ich
die per /SS Stuern kann. Theoretisch, denke ich schon das ich die
Funktionsweise des SPI mit meheren Slaves verstehe, nur praktisch krieg
ich einfach nix auf die Reihe.
Außerdem möchte ich auch noch eine Onboard pProgrammierschnittstelle
einbauen, dafür muss ich dann ja nochmal über den SPI gehen oder?
Das nächste Problem was sich mir stellt, die niedrigste Frequenz des CLK
des SPI ist CPU/128, bei meinen 16MHz wären das dan 125kHz, was schon
zuviel für den DAC der bei mir eine CLK von 96kHz brauch.
Ich hoffe ihr könnt mir helfen, ich steck total fest bei dieser Sache.
Gruß Sebastian
hallo sebastian.
> Hi,> ich bin leider gerade etwas überfordert mit dem Verständnis der Funktion> des SPI mit meherern Slaves. Folgende Situation, ich steuere über den> SPI eine MMC Karte an, dafür verwende ich den Code und die Schaltung von> Ulrich Radig. Als µC verwende ich eine ATMega16 der mit 16Mhz läuft.> Jetzt möchte ich allerdings noch einen DAC über den SPI ansteurn, da> eine Softwarelösung keine guten Ergebnisse bringt. Ich weiß das ich> dafür mehere /SS Leitungen brauche. Soweit ich das verstehe, muss ich> dann für jewals eine Slave einen PIN des ATMega16 als /SS Pin> definieren, welche ist egal oder?
richtig. solange du ihn als output konfigurieren kannst.
> Jetzt kann ich mir nicht vorstellen wie das funktiniert wenn ich MMC und> DAC an einer MISO Leitung angschlossen habe, woher wissen die Slaves> denn das die gesendet Daten für den einen Slave und nicht für den> anderen sind.
normalerweise übernimmt nur der slave daten, dessen /SS-leitung LOW ist.
> Wenn die beiden Slaves einen /SS als> Eingang haben, wäre das ja kein Problem,
genau.
> der DAC (ich verwende einen> LTC1257) hat so wie ich das sehe keinen /SS Pin, sondern nur einen /LOAD> eingang.
dieser DAC läßt sich ja auch nicht über SPI steuern (oder wo steht das
im datenblatt?), sondern über eine serielle 3-Draht-Schnittstelle.
wenn's SPI wäre, hätte er auch einen /SS eingang.
dein problem ist, daß du den baustein nicht wie einen normalen
SPI-baustein ansteuern kannst, weil er sofort bei LOAD = LOW die daten
aus dem schieberegister übernimmt. wenn du dann grad am reinschieben
bist (was bei "richtigem" SPI so wäre!) hättest du für 12 clockzyklen
blödsinn im latch stehen, nämlich genau die letzten 1,5 byte (wg. 12bit
register) der letzten übertragung zum zuletzt angesprochenen slave.
soweit klar?
> Außerdem möchte ich auch noch eine Onboard pProgrammierschnittstelle> einbauen, dafür muss ich dann ja nochmal über den SPI gehen oder?
ja, es soll leute geben, die das schon mal gemacht haben.
> Das nächste Problem was sich mir stellt, die niedrigste Frequenz des CLK> des SPI ist CPU/128, bei meinen 16MHz wären das dan 125kHz, was schon> zuviel für den DAC der bei mir eine CLK von 96kHz brauch.
wo hast du denn das her? in meinem datenblatt für deinen DAC steht eine
maximale frequenz von 1.4 MHz
gruß
michael
Michael R. wrote:
> hallo sebastian.>>> Hi,>> ich bin leider gerade etwas überfordert mit dem Verständnis der Funktion>> des SPI mit meherern Slaves. Folgende Situation, ich steuere über den>> SPI eine MMC Karte an, dafür verwende ich den Code und die Schaltung von>> Ulrich Radig. Als µC verwende ich eine ATMega16 der mit 16Mhz läuft.>> Jetzt möchte ich allerdings noch einen DAC über den SPI ansteurn, da>> eine Softwarelösung keine guten Ergebnisse bringt. Ich weiß das ich>> dafür mehere /SS Leitungen brauche. Soweit ich das verstehe, muss ich>> dann für jewals eine Slave einen PIN des ATMega16 als /SS Pin>> definieren, welche ist egal oder?>> richtig. solange du ihn als output konfigurieren kannst.>
danke. :)
>> Jetzt kann ich mir nicht vorstellen wie das funktiniert wenn ich MMC und>> DAC an einer MISO Leitung angschlossen habe, woher wissen die Slaves>> denn das die gesendet Daten für den einen Slave und nicht für den>> anderen sind.>> normalerweise übernimmt nur der slave daten, dessen /SS-leitung LOW ist.>>> Wenn die beiden Slaves einen /SS als>> Eingang haben, wäre das ja kein Problem,>> genau.>
Da, der DAC keinen /SS Pin hat, hat sich das für mich ja erledigt...
>> der DAC (ich verwende einen>> LTC1257) hat so wie ich das sehe keinen /SS Pin, sondern nur einen /LOAD>> eingang.>> dieser DAC läßt sich ja auch nicht über SPI steuern (oder wo steht das> im datenblatt?), sondern über eine serielle 3-Draht-Schnittstelle.> wenn's SPI wäre, hätte er auch einen /SS eingang.>> dein problem ist, daß du den baustein nicht wie einen normalen> SPI-baustein ansteuern kannst, weil er sofort bei LOAD = LOW die daten> aus dem schieberegister übernimmt. wenn du dann grad am reinschieben> bist (was bei "richtigem" SPI so wäre!) hättest du für 12 clockzyklen> blödsinn im latch stehen, nämlich genau die letzten 1,5 byte (wg. 12bit> register) der letzten übertragung zum zuletzt angesprochenen slave.> soweit klar?>
Naja, ich wollte das mit SPI machen, weil mir das mehrfach hier im Fourm
gesagt wurde. Was hab ich denn noch für eine Wahl wenn ich SPI nicht
verwenden kann. Im Moment versuche ich über die PWM, CLK und LOAD für
den DAC zu generieren, nur klappt das eher schlecht als recht mit dem
Schieben der Bits.
>> Außerdem möchte ich auch noch eine Onboard pProgrammierschnittstelle>> einbauen, dafür muss ich dann ja nochmal über den SPI gehen oder?>> ja, es soll leute geben, die das schon mal gemacht haben.>
Danke, dafür hab ich auch schon die Lösung gefunden, ich verwende
einfach einen PIN Header mit der PIN Belegung des SDT500.
>> Das nächste Problem was sich mir stellt, die niedrigste Frequenz des CLK>> des SPI ist CPU/128, bei meinen 16MHz wären das dan 125kHz, was schon>> zuviel für den DAC der bei mir eine CLK von 96kHz brauch.>> wo hast du denn das her? in meinem datenblatt für deinen DAC steht eine> maximale frequenz von 1.4 MHz>
Ja, das ist die Maximale Frequenz. Da ich die Daten aber mit 8kHz
abgetastet habe und 12Bit in den DAC geschoben werden müssen, komm ich
auf 8kHz mal 12 gleich 96kHz, damit auch genauso schnell abgespielt wie
aufgenommen wurde.
Sebastian Baier wrote:
>>>> Naja, ich wollte das mit SPI machen, weil mir das mehrfach hier im Fourm> gesagt wurde. Was hab ich denn noch für eine Wahl wenn ich SPI nicht> verwenden kann. Im Moment versuche ich über die PWM, CLK und LOAD für> den DAC zu generieren, nur klappt das eher schlecht als recht mit dem> Schieben der Bits.>
dann nimm halt einen anderen DAC, es gibt doch genug DAC mit
SPI-Interface..zB AD5722...
> Naja, ich wollte das mit SPI machen, weil mir das mehrfach hier im Fourm> gesagt wurde.
geht ja an sich auch:
du schiebst deine 12-bit-werte in zwei 8bit-übertragungen (MSB first!!!)
raus. die ersten vier bits landen dabei im nirwana, d.h. der abtastwert
darf nicht in diesen bits liegen.
dann gibst du einen LOW-puls auf den /LOAD-eingang und das war's.
aber es ist eben kein "richtiges" SPI ;-)
> Ja, das ist die Maximale Frequenz. Da ich die Daten aber mit 8kHz> abgetastet habe und 12Bit in den DAC geschoben werden müssen, komm ich> auf 8kHz mal 12 gleich 96kHz, damit auch genauso schnell abgespielt wie> aufgenommen wurde.
das is doch wurscht. je schneller du den nächsten wert in den DAC
schiebst, umso besser (im rahmen der spezifikationen natürlich).
du mußt nur dafür sorgen, daß dein /LOAD-impuls im 8kHz-raster kommt.
und den mußt du ohnehin zu fuß erzeugen.
oder kommt's dir wirklich auf's bit-timing an??
gruß
michael
Michael R. wrote:
>> Naja, ich wollte das mit SPI machen, weil mir das mehrfach hier im Fourm>> gesagt wurde.>> geht ja an sich auch:> du schiebst deine 12-bit-werte in zwei 8bit-übertragungen (MSB first!!!)> raus. die ersten vier bits landen dabei im nirwana, d.h. der abtastwert> darf nicht in diesen bits liegen.> dann gibst du einen LOW-puls auf den /LOAD-eingang und das war's.>> aber es ist eben kein "richtiges" SPI ;-)>
Warum in 2 8Bit werten? ein 16 Bit würde doch auch gehen. Ok, müsste
dann halt nurnoch daran denken das kein LOAD kommt, wenn ich auf die MMC
Karte schreiben, sonst Wandelt er die MMC Daten. Da ich momentan einen
Timer verwende um CLK und LOAD zu generieren, würde ich bei Benutzung
von SPI die manuelle CLK generierung nicht mehr benötigen. Da ich aber
mit dem selben Timer über PWM sowohl CLK und LOAD generiere, würde ich
bei Nutzung von SPI nichts einsparen. Ich hab allerdings keine Ahnung
wie ich ich per PWM so ein LOAD Signal mit 8kHz wie es mein DAC brauch,
generiere.
>> Ja, das ist die Maximale Frequenz. Da ich die Daten aber mit 8kHz>> abgetastet habe und 12Bit in den DAC geschoben werden müssen, komm ich>> auf 8kHz mal 12 gleich 96kHz, damit auch genauso schnell abgespielt wie>> aufgenommen wurde.>> das is doch wurscht. je schneller du den nächsten wert in den DAC> schiebst, umso besser (im rahmen der spezifikationen natürlich).> du mußt nur dafür sorgen, daß dein /LOAD-impuls im 8kHz-raster kommt.> und den mußt du ohnehin zu fuß erzeugen.>> oder kommt's dir wirklich auf's bit-timing an??>> gruß>> michael
Hast ja recht, nochmal danke. :D Ich schau mal ob das bei mir
funktioniert und/oder sinnvoll ist.
Gruß Sebastian
>> geht ja an sich auch:>> du schiebst deine 12-bit-werte in zwei 8bit-übertragungen (MSB first!!!)>> raus. die ersten vier bits landen dabei im nirwana, d.h. der abtastwert>> darf nicht in diesen bits liegen.>> dann gibst du einen LOW-puls auf den /LOAD-eingang und das war's.>>>> aber es ist eben kein "richtiges" SPI ;-)>>>> Warum in 2 8Bit werten? ein 16 Bit würde doch auch gehen.
nein, die SPI-schnittstelle überträgt nur 8bit-werte (die du natürlich
aus einer 16-bit-variable holen kannst - keine frage).
> Ok, müsste> dann halt nurnoch daran denken das kein LOAD kommt, wenn ich auf die MMC> Karte schreiben, sonst Wandelt er die MMC Daten.
genau.
> Da ich momentan einen> Timer verwende um CLK und LOAD zu generieren, würde ich bei Benutzung> von SPI die manuelle CLK generierung nicht mehr benötigen.
richtig.
> Da ich aber> mit dem selben Timer über PWM sowohl CLK und LOAD generiere, würde ich> bei Nutzung von SPI nichts einsparen.
doch. gegenüber einer timerlösung sparst du 10 interrupts.
> Ich hab allerdings keine Ahnung> wie ich ich per PWM so ein LOAD Signal mit 8kHz wie es mein DAC brauch,> generiere.
ich würd's so machen:
übertragung per SPI, wie oben gesagt.
nach jedem zweiten SPI-interrupt generierst du in der SPI-ISR deinen
LOAD-puls und stößt die übertragung für den nächsten sample-wert an.
triggern läßt du die SPI-übertragung per timer-interrupt mit 8kHz.
gute idee?
gruß
michael
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.