Forum: Mikrocontroller und Digitale Elektronik Welcher Mikrocontroller?


von Joe F. (joe1234)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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.

von Joe F. (joe1234)


Lesenswert?

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

von Floh (Gast)


Lesenswert?

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.

von Joe F. (joe1234)


Lesenswert?

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

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von mh (Gast)


Lesenswert?

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.

von Joe F. (joe1234)


Lesenswert?

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

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

>Ich habe mir zwar die Seite STM32 angeschaut, aber ehrlich gesagt,
>habe ich da nicht viel verstanden.

Was ist denn unklar?

von Joe F. (joe1234)


Lesenswert?

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

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

PS: Ich hatte hier mal eine Heizungssteuerung mit STM32 gepostet:
Beitrag "Re: Heizungssteurung im Eigenbau"

von Sebastian (Gast)


Lesenswert?

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 Frank K. (fchk)


Lesenswert?

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

von Joe F. (joe1234)


Lesenswert?

Sebastian schrieb:
> Wenn Du mal das Evaluationboard etwas genauer angeschaut hättest,...

Welches Evalutionsboard meinst du denn???

von Joe F. (joe1234)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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.

von Joe F. (joe1234)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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.

von Joe F. (joe1234)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

Ich habe lange mit der Testversion gearbeitet, jedoch jetzt habe ich 
eine Vollversion.

von Joe F. (joe1234)


Lesenswert?

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
Noch kein Account? Hier anmelden.