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