hallo, folgendes Problem steht im Raum: für ein Meßgerät habe ich eine Wandlerplatine gebaut, die eine CCD-Zeile ausliest und die einzelnen Pixel 12bit-A/D-wandelt (das muß so). Der Wandler hat als Ausgang eine SPI-Schnittstelle. Jetzt würde ich die Platine gerne mal testen. Da aber erstens das Controllerboard noch nicht fertig existiert und zweitens ein 32Bit SAM7 drauf sein wird, den ich drittens (noch) nicht programmieren kann/will (stolper ja gerade mal durch die 8bit-AVR-Welt), suche ich jetzt eine Möglichkeit, das ganze mit einem AVR zu verbinden. Dieser kann ja nun von Haus aus nur 8bit verwalten. Sieht jemand eine Möglichkeit, wie ich die oberen 4 Bit entsorgen kann? Da ein Spektrum ausgewertet wird (sieht aus wie ein Kamm-Muster), kann ich den Verlust der absoluten Spannung verkraften, bräuchte aber dringend die unteren 8 Bit, um die Helligkeit um den Peak herum genau erfassen zu können. Ob man die SPI-Daten irgendwie in eins der Registerpaare X,Y,Z umleiten kann? Oder vielleicht "laufen" die ersten 4 Bit (MSB kommt zuerst) ja auch "über" und es bleiben eh nur 8 stehen? Achneh, vermutlich nicht, denn nach dem 5.Bit macht der AVR ja das ChipSelect wieder aus und der Wandler hört auf zu senden..... Oder mit Timern/Hardware die "Datenannahme" um 4 Bit verzögern...? Ist mein erster Kontakt zu SPI, wenn jemandem was einfällt, wäre ich recht dankbar.....
Wenn die Datenrate nicht zu hoch ist, könntest Du auch eine "Software-SPI"-Schnittstelle verwenden, bei der ist die übertragene Wortlänge unbegrenzt.
da heißen will? SPI "künstlich" selber erzeugen oder wie muß ich mir das vorstellen? Also Portpins als Clk,CS und MISO verwenden und die ganzen "Formalitäten" in Eigenregie abhandeln?
Schau dir mal von Ulrich Radig die MMC-Library an, dort hat man die Wahl zwischen Hard- und Soft-SPI. Es sollte sich prima abkupfern lassen.
Willst du uns etwa erzaehlen, dass du spaeter mit dem SAM7 ein Spektrum auswerten willst und nochnichtmal c kannst? Gruss Tobias
Kann mir kaum vorstellen, dass es noch AD-Wandler gibt, die EXAKT 12 SPI-Pulse brauchen. Viel wahrscheinlicher ist, dass es mit 16 Pulsen (2 * SPI nacheinander lesen/schreiben) genauso geht. Aber dazu sollte man mal wieder mehr Infos haben ... Gruß, Stefan
so in etwa. muß ich auch nicht. 1) soll ich die schaltung bzw. das controllerboard entwickeln 1b) ich studiere e-technik, nicht informatik! 2) ist es nicht meine aufgabe, das "endprogramm" zu schreiben; dafür gibts hier einen spezialisten 3) programmiert dieser ebenfalls in assembler und NICHT in C! die bisher eingesetzte lösung verwendet einen shark-dsp, ebenfalls in assembler programmiert. 4) ist es mein ziel, "nebenbei" ein wenig programmierung abzufassen und hier und da eine testroutine zu schreiben.mir reicht es zb. die eingegangenen werte einzugrenzen und die lage der peaks grob festzustellen, um zu sehen, was sich tut. ein gauss-fitting oder ein center-of-gravity werde ich NICHT drüberhetzen, dafür bin ich zu blöd! wenn man kein c kann, is das für dich sowas wie analphabetismus? ich sehe das eher andersrum.
@stefan: Stimmt, exakt 12 Pulse kriegt er nicht. Man kann ihn mit 14 oder 16 clocks bedienen und der Wandler (AD7274) hängt dann noch führende/schließende Nullen an. Während dieser Periode muß das CS aber unten bleiben, sonst wird der Transfer abgewürgt und mit neuem CS eine neue Wandlung ausgelöst. Also 2x8bit lesen wird nichts. Oder habe ich Dich da falsch verstanden?
Bei den meisten SPI-Implementierungen ist kein CS-Pin mit dabei. Den machst Du "von Hand" mit einem normalen IO-Pin (so ist es beim ATmega). Beim ARM (welcher?) kann das anders sein, glaube ich aber nicht. Wenn das CS vom SPI-System mit erzeugt wird, dann ist meistens auch die Wortbreite irgendwo einstellbar. Gruß, Stefan
jo, beim arm (atmel sam7x256) ist der CS ein "fester" pin. es gibt zwei spi-ports (0 und 1) mit je 4 chipselects.Werden zwar mit all den anderen gemuxt, haben aber eben genau diese aufgabe. Ich verstehe das so, daß ich mein SPI in Betrieb nehme und dem I/O-controller sage, wo er mir den CS ausgeben möchte (gibt jeweils 1-2 Möglichkeiten, da man unterschiedliche Peripherien gleichzeitig benutzen können muß). Ja, die Wortbreite kann man auch einstellen. Aber darum gehts ja (vorerst) noch nicht, da ich ja vom arm erstmal die finger lasse. Am AVR scheint mir aber die gleiche Philosophie verwirklicht. Im Datenblatt (Mega8535) steht auch, daß die portbins B dafür verwendet werden. Sprich der I/O-Controller zappelt mit den pins, um die schnittstelle zu betreiben. Und wenn ich das nicht will, muß ich wohl alles von Hand machen....
Im Manual 29.7.9: Chip select register Die Bitanzahl pro Transfer ist beim SAM7S zwischen 8 und 16 Bits einstellbar. >Am AVR scheint mir aber die gleiche Philosophie verwirklicht. Im >Datenblatt (Mega8535) steht auch, daß die portbins B dafür verwendet >werden. Sprich der I/O-Controller zappelt mit den pins, um die >schnittstelle zu betreiben. Und wenn ich das nicht will, muß ich wohl >alles von Hand machen.... Wäre mir neu, dass ein ATmega eine CS-Leitung im Master-Mode selbst bedient. Ich kenne das Manual des 8535 aber nicht. Von Hand machen ist gut: wo ist das Problem: vor und nach dem Transfer jeweils den CS zu bedienen? Gruß, Stefan
>Die Bitanzahl pro Transfer ist beim SAM7S zwischen 8 und 16 Bits >einstellbar. hab ich doch gesagt: <selbstzitat> >Ja, die Wortbreite kann man auch einstellen. <\selbstzitat> übrigens sprach ich vom sam7x, aber der unterschied ist so groß nicht... >Wäre mir neu, dass ein ATmega eine CS-Leitung im Master-Mode selbst >bedient. wer außer dem master soll denn dann das chip select bedienen? vielleicht habe ich spi ja falsch verstanden, aber irgendwer sollte schon den hut aufhaben, oder? >gut: wo ist das Problem: vor und nach dem Transfer jeweils den CS zu >bedienen? ich sprach von keinem problem.
Grundsätzlich sieht die SPI-Übertragung doch so aus, dass der Master (Mikrocontroller) dem Slave (AD-Wandler) solange den Takt zur Verfügung stellt, bis dieser fertig mit seiner Übertragung ist. Wenn der ADC also im 16Bit Modus arbeitet, kann man die Hardware-SPI problemlos benutzen (ich habe mir das Datenblatt jetzt nicht komplett angetan); im 14Bit-Modus muß man etwas basteln... Prinzipiell sollte man aber wohl eher die oberen 8 Bit benutzen, da es bei den unteren IMHO Rauscheffekte geben kann...
Die üblichen AVR (Mega8-Mega128) haben KEINEN Hardware CS. Wie das mit den neuen 20 MHz Typen ist weiß ich nicht. Aber so oder so, es macht kein Problem, man muß den Hardware CS ja nicht benutzen. Beispiel: ldi r17,$80 out DDR_SPI,r17 ; Set SCK output, all others input ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0) out SPCR,r17 ; Enable SPI, Master, set clock rate fck/16 (initialisierung des HW-SPI laut atmel) cbi PORTB,0 sbi DDRB,0 ;SoftwareCS auf low setzen clr r16 ;Arbeitsregister leeren out SPDR,r16 ;SPI Übertragung starten Warte_auf_byte1: sbis SPSR,SPIF rjmp Warte_auf_byte1 in r17,SPDR ;1. empfangenes Byte holen out SPDR,r16 ;SPI Übertragung starten(erneut) Warte_auf_byte2: sbis SPSR,SPIF rjmp Warte_auf_byte2 in r16,SPDR ;2. empfangenes Byte holen sbi PORTB,0 ;SoftwareCS auf high setzen .exit Damit sollte dann das ergebniss in register 16 und 17 landen cu Hauke
jo, das schaut schonmal gut aus, danke! das mit dem hardware-cs nehme ich zurück, hab mich da mittlerweile belesen und gebe euch recht.verwunderlich finde ich es dennoch, obwohl mir es ja entgegen kommt.... werde das mal durchexerzieren. aber zuerst wird mal mein stk-extension-board um einen wandler erweitert, damit das ganze auch sinn macht..... muß mir noch nen algorithmus basteln, mit dem ich die datenflut im voraus filtern kann (2088 pixelwerte passen wohl nicht in den ram). also ein paar pixeladressen festlegen und nur deren werte aus dem datenstrom holen. sollte aber mit einem counter am ccd-clock irgendwie machbar sein. vielen dank soweit, ich halte euch (bei bedarf) auf dem laufenden...
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.