Hallo Leute, ich habe da folgendes Problem: Ich muss ein PWM-Signal erzeugen, welches auf 1µs genau sein soll und sich so im Bereich von 100µs - 3ms bewegen soll. Dieses Signal soll dann bei fallender Flanke als Triggersignal genutzt werden. Nun soll eine AD-Wandlung stattfinden, die ebenfalls sehr schnell sein muss. Da mein aktuelles Signal von einem Körperschallsensor kommt und eine Maximalfrequenz von 100kHz aufweist, muss ich mindestens mit der doppelten Frequenz abtasten können, um mein Signal fehlerlos rekonstruieren zu können. Die AD-Wandlung sollte dabei mindestens eine Auflösung von 10 Bit haben. Diese Werte sollen dann durch einen Algorithmus weiterverarbeitet werden, so dass am es am Ende nur eine Zahl ergibt. Diese kann man vllt sogar auf ein kleines Display ausgeben. Wichtig ist vllt noch, dass ich viele Messungen machen muss, also sollte ich die Werte irgendwo zwischenspeichern können, falls mein Baustein nicht genügend Speicher haben sollte. Im Moment hatte ich nur einen ATmega8 zur Verfügung. Mit diesem habe ich mein PWM-Signal realisiert. Alle anderen Sachen vor allem die Abspeicherung von mehreren Messwerten, kann ich wohl vergessen. Deswegen auch meine Frage hier, welchen Mikrocontroller sollte ich denn verwenden? Vllt hat ja einer schon so etwas ähnliches gemacht und mir hier bei meiner Entscheidung weiterhelfen. Gruß Joe
Die Frage ist halt was sind bei Dir viele Messwerte? Die ATXMEGA Reihe ist recht gut zu verwenden. Die AVRs haben können mit 32MHz Takt betrieben werden sind dadurch schon mal schneller als der ATmega 8. Außerdem hat er ein Eventsystem und einen DMA-Kontroller. Somit kann der Wandler den Messwert direkt in den SRAM des µC schreiben, ohne dabei unnötig den µC zu belasten. Zudem besitzt den ATxmega 12Bit AD-Wandler, die auch schnell genug digitalisieren (ich glaube sogar bis in den MHZ-Bereich dies kann man im Datenblatt sicherlich noch mal nachlesen). So ein ATxmega hat bis zu 32kByte SRAM momentan sind aber nur die mit 16kByte SRAM erhätlich, damit sind aber gut 8000 Messwerte speicherbar. mit dem Eventsystem oder dem DMA-Kontroller kann man auch den PWM betreiben, somit bleibt der µC zum auswerten der Daten und somit kommt man nicht in kritische Zeitfenster. Es gibt eine Evaluation Board von Atmel zu kaufen. Damit kann man sehr viel machen: http://www.atmel.com/products/AVR/xplain.asp?family_id=607 http://www.youtube.com/watch?v=EJ-6T3Kugt8 Es gibt von der Firma Codevision einen C-Compiler. Dieser hat eine ganz besondere Funktion und zwar einen Wizard. Du erstellt ein neues Projekt wähltst Deinen µC und kannst dann mit Hilfe des Wizards die Konfiguration der RS232 Schnittstelle, der AD-Wandler, des DMA Kontrollers usw. vornehemen. Der Wirzard erzeugt Dir dann einen Quellcode so das Du "nur" noch Deine Funktion umsetzen must. Ich beuntze diesen Compiler auch und bin begeistert. Hier kann man einen kostenlose Demoversion herunterladen: http://www.hpinfotech.ro/html/download.htm Beispiele sind auch dabei. Falls man den Compiler kaufen möchte er kostet recht wenig. Hier kann man das Board kaufen: http://de.farnell.com/atmel/atavrxplain/kit-eval-xplain-f-atxmega128a1/dp/1778504?Ntt=xplain http://such001.reichelt.de/?SID=28q0rkpqwQARwAAFBURkk250387f6f1bd4366c805cd169a663448;ACTION=444 Den compilierten Code spiele ich immer mit dem AVR-Studio drauf. Ich verwende immer das JTAGICEMKII dies ist jedoch recht teuer.
Danke für die Antwort. Ich habe mir gerade den ATxmega384A1 angeschaut, da ich ein TQFP 100 Package benötige. Die Daten sind ja recht vielversprechend. Was die Daten angeht: Ich würde gerne mehr wie 8000 Werte speichern können. Ist es möglich den Speicherplatz irgendwie zu erweitern? Im Moment reichen mir die 8000 Werte, aber ich würde, falls alles so klappt wie es soll, mein Board erweitern auf einen 2ten Eingang und dann benötige ich sicherlich mehr als 8000 Werte. Da ich ein PWM-Signal benutze, ist es für mich wichitg, dass ab der fallenden Flanke ca 1000 Werte aufgenommen werden, dies sollte so schnell es geht passieren. Danach, also wenn wieder HIGH-Pegel anliegt, habe ich Zeit. In dieser Zeit kann ich nun die Werte verschieben (z.B. auf einen externen SRAM mit ausreichender Größe). Erst danach sollte die 2te Messung anlaufen. Nach einigen Messungen (z.B. 20) sollte ich die Werte aus dem externen SRAM holen und Mittelwertbildung machen können. Ich habe mir das Datenblatt angeschaut, aber ich finde nirgends, ob man den ATxmega erweitern kann. Bin ich blind??? Gruß Joe
Johannes F. schrieb: > Nach einigen Messungen (z.B. 20) sollte ich die Werte aus dem externen > SRAM holen und Mittelwertbildung machen können. Brauchst du die Originalwerte danach überhaupt noch? Ansosnten liese sich RAM einsparen: Statt speichern aufaddieren, nach 20 Werten entweder direkt teilen, oder den Summenwert abspeichern für später.
Das ist eine gute Idee mit dem Aufaddieren. Das muss ich mir mal durch den Kopf gehen lassen. Ich habe gerade bei einem Distributor angerufen, leider gibt es den ATxmega384A1 noch nicht, dieser kommt erst im Q1 2011 heraus. Dafür gibt es den ATxmega256A3. Im pdf Dokument steht (unter Punkt 8), dass der µController einen DMAC - Direct Memory Access Controller besitzt, um Daten zu verschieben. Zitat: "It has 4 channels that can be configured independently. Each DMA channel can perform data transfers in blocks of configurable size from 1 to 64K bytes. *A_repeat_counter_can_be_used_to_repeat_each_block_transfer_for_single_t ransactions_up_to_16M_bytes*. Each DMA channel can be configured to access the source and destination memory address with incrementing, decrementing or static addressing. The addressing is independent for source and destination address. When the transaction is complete the original source and destination address can automatically be reloaded to be ready for the next transaction." Scheint, dass ich diesen mit externem Speicher verwenden kann. Verstehe ich es richtig? Gruß Joe
Ich denke für diese Aufgabe wäre ein STM32F103VC interessant. RAM 64KB, Flash genügen, auch 100 Pins. Intern 3 AD Wandler, die unabhängig betrieben werden könen mit 12 Bit Auflösung. 72 MHZ Geschwindigkeit, also der kann die Daten auch verarbeiten. Cortex-M3 CPU Kern mit schnellem Interrupt-Handling Schaue mal im Artikel STM32. Bezugsquelle: Typ "STM32F103VDT6" bei TME.
Schau dir mal die dsPIC33 an. Reichelt hat z.B. den 33FJ256GP710-IPT für weniger als 7 Euro. Mit 1,1 Msps bei 10 Bit ADC, 8 x PWM, 30kB Ram, ... in TQFP100.
Das sind sehr interessante Vorschläge. Mein Problem dabei ist, dass ich bis jetzt nur einen Atmega8 mit einem STK500 Board von Atmel programmiert habe. Leider habe ich sonst keine Erfahrung mit anderen Mikrocontrollern. Von den Daten her scheint mir der STM32 sehr für meine Arbeit geeignet zu sein. Leider habe ich überhaupt keine Ahnung welches Board bzw Programme ich verwenden soll, um diesen zu programieren und später zu nutzen. Ich habe mir zwar die Seite STM32 angeschaut, aber ehrlich gesagt, habe ich da nicht viel verstanden. Was mir bei ATmega8 auch sehr gut gefallen hat, dass sich in der Doku Programmbeispiele gefunden habe (z.B. USART), mit denen ich sehr schnell und einfach meinen Code erstellen konnte. Bei STM32 scheint dies nicht der Fall zu sein. Gruß Joe
>Ich habe mir zwar die Seite STM32 angeschaut, aber ehrlich gesagt, >habe ich da nicht viel verstanden. Was ist denn unklar?
Markus Müller schrieb: > Was ist denn unklar? Nun, für den ATmega8 hatte ich das STK500 Board mit AVR-Studio verwendet. Was muss ich denn für den STM32 benutzen? Welche Hardware und welche Software??? Gibt es vllt sogar ein Buch oder eine ausführliche pdf? Am besten mit einem Beispielcode. Gruß Joe
Für den Start braucht man am besten ein - Demo-Board, siehe hier: http://www.mikrocontroller.net/articles/STM32#Evaluation_Boards - ein JTAG Adapter, siehe hier: http://www.mikrocontroller.net/articles/STM32#Programmierung - und ein Compiller, siehe hier: http://www.mikrocontroller.net/articles/STM32#Programmierung Ein paar Demos gibt es hier: http://www.mikrocontroller.net/articles/STM32#Demo-Projekte Auch ist das Forum vom ST auch sehr gut und es gibt viel in Google. Wenn das Projekt klein bleiben soll, dann kann mit Keil bis zu 32KB Code geschrieben werden. Eclipse/Coudesourcery ist die günstigste Variante, dafür Zeitintensiver da man viel von Hand machen und wissen (lesen) muss. Ein Buch kenne ich jetzt nicht, ich progge schon seit vielen Jahren viele unterschiedliche MC's und schlussendlich arbeiten diese mit einem C-Compiller und fast alles ist gleich. Andere Kontroller = andere Pherieperie (Timer, UART,...) = lesen im Datenblatt.
PS: Ich hatte hier mal eine Heizungssteuerung mit STM32 gepostet: Beitrag "Re: Heizungssteurung im Eigenbau"
Die Cortex-M3 µC sind sicherlich super Teile, jedoch auch deutlich komplizierter zu handhaben. Allein schon die Startroutine ist sehr komplex. Für Deine Zwecke reicht der ATexmega vollkommen aus. Wenn Du mal das Evaluationboard etwas genauer angeschaut hättest, dann wäre sicherlich aufgefallen das dort ein zusätzlicher externener Speicher bereits verbaut ist. Am besten nimmt man SRAM vom Cypress, dort kann man eine 100k Ergebnisse speichern.
Von STM gibt es eine gute Bibliothek, die Routinen für alle Peripheriekomponenten enthält. Selbiges gilt auch für die Luminary Micro Chips (jetzt TI). Diese Teile haben den gleichen ARM Cortex M3 CPU-Kern. Der dritte große ist übrigens NXP, hier wären die LPC13xx und LPC17xx die Objekte Deiner Wahl. Das ist eben der Trick. Du arbeitest Dich in eine Prozessorfamilie ein und kannst dann Prozessoren von verschiedenen Herstellern nehmen. Die Basis (CPU, Systemcontroller, Interruptcontroller, Systick, Debug) ist überall gleich, nur die Peripherie macht jeder Hersteller selbst. Cortex M Standardbibliothek: http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php Peripheriebibliotheken: Luminary/TI: http://focus.ti.com/mcu/docs/mcuorphan.tsp?contentId=87903 STM: http://www.st.com/mcu/modules.php?name=mcu&file=familiesdocs&fam=110&doc=76 NXP: http://ics.nxp.com/support/documents/microcontrollers/zip/code.bundle.lpc17xx.keil.zip Jeder Hersteller hat für seine Chips passende Evalboards. Schau mal bei www.olimex.com, die haben Boards mit den Chips verschiedener Hersteller. Compiler: Der Originalcompiler von ARM/Keil ist gut und teuer (autsch!!!). Der gcc wird gerne genommen, und es gibt verschiedene Distributionen zum Runterladen (winarm, yagarto, code red und wie sie alle heißen). fchk
Sebastian schrieb: > Wenn Du mal das Evaluationboard etwas genauer angeschaut hättest,... Welches Evalutionsboard meinst du denn???
Das Evaluationboard habe ich jetzt gefunden [[http://www.elektor.de/elektronik-news/avr-xmega-eval-board-fur-29-us.1139223.lynkx]] Falls du dieses hier gemeint hast. Die pdfs muss ich mir noch durchlesen. Aber im Moment scheint es, für mich als Anfänger, die beste Lösung zu sein. Gruß Joe
Das Board habe ich ganz oben bereits gepostet. Auch wo man es kaufen kann. Ich meine das XPLAIN Board. Dies besitzt auch einen sehr großen externen Speicher den man zusätzlich benutzen kann. Zudem ist dort noch ein ATMEL USB Chip drauf so das man die Daten auch zügig in Richtung PC übertragen kann. Bezüglich den Cortex M3: Ich verwende den IAR-Compiler. Dort besteht ein gigantischer Unterschied zwischen den µC von NXP, ATMEL, TI oder anderen Herstellern. Ich hatte vorher viel mit Atmel gearbeitet. Das es noch nicht die Cortex M3 µC von Atmel gibt, wollte ich einen NXP verwenden. Diese waren jedoch so kompliziert anzusteuern das ich meine Finger davon gelassen habe und lieber auf AMTMEL µC warte. Mach Dir das Leben nicht unnötig schwer und verwende die ATxmega, damit schont man seine Nerven um einiges.
Danke, habe mir nun auch ein Eval... bestellt. Noch eine kleine Frage: Hast du auf diesem Board schon den ADC angesteuert/verwendet oder vielleicht das "externe" Ram verwendet??? Das würde mich brennend interessieren. Falls ja, könntest so ein Bsp. Programm zum Downloaden bereitstellen? Ich würde gerne mit einem Beispiel direkt beginnen. Wenn ich dann mein Programm "zusammengebastelt" habe, stelle ich es auch gerne zur Verfügung. Gruß Joe
Ich habe bis jetzt nur mit externen Interrupts, Timerinterrups, RS232, SPI und Leds rumgespielt. Jedoch wenn Du den von mir genannten Compiler verwendest, dann kann man mit dem Wizard in wenigen Minuten den ADC konfigurieren. Zudem muss man sich zumindestens mal das Datenblatt des µC und das Datenblatt des Evaluation Boards genau anschauen. Der Compiler erstellt bereits funktionen, die den AD-Wandler mit der richtigen Frequenz ansteuert und die Daten in die gewünschten Speicherzellen schreibt.
Danke, für die Antwort. Ich nehme an du verwendest diese Kickstart Variante, welche es kostenlos dafür aber mit einem Codelimit gibt. Ich werde mich mal daran setzten und es mal ausprobieren. Falls doch eine Datei hast, die eine Art Beispiel ist, auch wenn nur eine LED blinkt oder so, bitte trotzdem mal reinstellen. Aus Beispielen, finde ich, kann man am besten lernen. Gruß Joe
Ich habe lange mit der Testversion gearbeitet, jedoch jetzt habe ich eine Vollversion.
Hi Sebastian, das Board ist nun da, leider habe ich in meiner Unwissenheit keinen JTAG-Adapter bestellt. Nun gibt es 2, die ich verwenden könnte. 1. AVR ONE! 2. JTAGICE mkII Welcher ist denn besser? Oder welchen würdet ihr mir empfehlen? Gruß Johannes
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.