Servus an alle. Ich hoffe mir kann jemand helfen. Für ein wichtiges Projekt bin ich an das ARM CORTEX M3, Keil MCBSTM32 Board gebunden. Sprich keine Abntworten wie, wenn du das noch nicht mal kannst,dann mach erstmal AVR zum üben... muss der Micro sein! Und zwar muss ich externe ADCs ansteuern, wie ist generell kein Problem, Sprache C. Ein anderer Programmteil mittels void SysTick_Handler (void) { ... } funktioniert auch schon (sysTick mit 9 MHz, also alle 50 microsekunden.) Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den nanosekundenbereich <20ns. Ich habe daher an PCLK2 gedacht, da der standertmäßig ja als HCLK und somit 72MHz bei dem Board definiert ist. Wie muss ich das ganze jetzt umsetzen?? wenn ich jetzt z.B. einfach void PCLK2_Handler (void) {.. schreibe passiert logischerweise noch nichts... Ich denke die Clock ist nicht enabled... Wie gesagt, habe nicht die große Ahnung, da gibts doch nen Befehl RCC .... wie genau starte ich diese Clock bzw. kann man was definieren, dass ich ein signal einfach nur 1 oder 0 im größenordnungsbereich <20ns als output liefern kann um z.B. alle 15ns für 15ns ne 1 dann wieder 15ns ne null, dann wieder 1 usw. zu liefern.. Hoffe auf schnelle antworten, weil zeitkritisch... Ich danke schon jetzt allen die mir antworten für Ihre Hilfe
Mario schrieb: > Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den > nanosekundenbereich <20ns. > Moin Mario, Räum mal bei dir auf, was willst du genau machen? Wenn ich mich in den Nachkommastellen nicht vertan habe, dann braucht der Prozi schon 14ns für einen Takt. Was willst du denn alle 20ns so alles machen, brauchst du das überhaupt? So wie sich das anhört gehst du das Problem völlig falsch an oder aber der STM32F1 ist zu langsam für dich und du musst auf F2 ggf. bald auf F4 ausweichen. MfG Tec
Mario schrieb: > void SysTick_Handler (void) { > ... > } > funktioniert auch schon (sysTick mit 9 MHz, also alle 50 microsekunden.) > > Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den > nanosekundenbereich <20ns. 20ns für den Systick! Das wird schon von der Theorie her nichts bei 72MHz. Ich denke, Du solltest doch nochmal über das Back zum AVR nachdenken...
Ich muss einen ADC (16BIT, 40kSPS) ansteuern, 4 stück, das DATACLK signal siehe bild Dauer t21 ist 15 ns lang. Das ist mein problem...
Wenn ich mich nicht verrechnet hab, wären das schon mal 66MHz nur für einen ADC? Und das mal 4 ADCs? Aus 72MHz CClk? Nais! Sieht übrigens nach so was wie SPI aus. Der STM32F1xx kann 25MHz SPI. Wenn das SPI ist, wird der ADC Daten-Takt vom Master (=STM32) aus gesteuert. Ggf. kannst du mit NSS vom SSP peripheral den DAC komplett steuern, so dass du deine Daten ggf. sogar per DMA schaufeln kannst. Auf jeden Fall das zeug auf ein Peripheral auslagern. Takt zum Einlesen der Bits per Hand erzeugen ist böhse... Ausserdem ist deine CPU hier dann zu 99,999999% mit dem INT ausgelastet ^^
ein kompletter durchgang von ADC dauert max 25 microsekunden (t1). Da ich 40 kilosamples für jeden der 4 ADC realisieren muss, hab ich 25microsekunden /16 bits=1,5625microsekunden. mit den anderen zu beachtenden mindestzeiten schätze ich 1 microsekunde. d.h. bei 4 ADCs würden 250ns vermutich auch reichen, wobei das ganze dann in der tat sehr knapp wird, da die übertragenen bitdaten(von beschleunigungsaufnehmern) auf einer SD karte gespeichert werden. Zur Not aber nur dann würden evtl. 20 kilosamples auch reichen... das ganze sind vibrationsmessungen...
Ist der ADS8513 von Texas instruments 16 BIT, 40kSPS, low-power sampling analog-to-digital converter with internal reference and parallel/serial interface
Zur Info, kam wohl nicht raus, die ADC werden immer nacheinander angesprochen...
Moin, wie bereits gesagt das ist SPI, also ein Bus das kann der STM in Hardware mit 25MHz max. die Daten die darüber rein kommen kannst du mit dem DMA in den RAM fahren. Du willst diese dann in einer SD Karte speichern? Wie lange willst du Messen? 16Bit bei 25MHz a 4 Kanäle komme ich auf knapp 400kSPS pro Kanal die du über den SPI raus bekommen müsstest. Du hast 16Bit 40kSPS a 4 Kanäle als0 2,56kBit/s die du verarbeiten musst. Mit einem Puffer von 1024 Werten kommst du auf einen Rambedarf von 16k für den Puffer. 512 Werte tuns aber auch. die Werte musst du dann Binary in eine bereits geöffnete Datei auf die SD karte schieben. das Über nimmt einweiterer DMA channel. alles kein Hexenwerk solange du nicht noch viel mit den Werten rechnen willst. Das macht dann auch n Middensity Device mit 20k Ram MfG tec
Also mit Timer ist da nichts. Warum machst du das nicht mit der SPI. Der ADC ist dafuer gebaut. Ein Example fuer SPI mit DMA Transfer findest du zusammen mit der aktuellen Firmware Library von ST (STM32F10x_StdPeriph_Lib_Vx.x.x\Project\STM32F10x_StdPeriph_Examples\SPI \DMA)
"SPI™-Compatible Serial Port up to 20MHz" steht groß und Fet unter den Features im DB des ADC
verechnet werden soll weiter nichts. Die Daten werden später auf einem desktop pc ausgewertet. Schaue mir mal die Beispiele zu SPI an, DAnke schon mal für die vielen und schnellen Antworten, werde mich dann nochmal melden...
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.