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
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.