Forum: Mikrocontroller und Digitale Elektronik AVR Projekt (ADC-Uart-USB)


von Bernd (Gast)


Lesenswert?

Hallo
Ich bin Student der Automatisierungstechnik und bin nun mit einem 
Projekt beauftragt worden, dass eher im Bereich Embedded Engineering.
Leider bin ich mit dem Bereich noch nicht allzu vertraut.
Nun würde ich gerne von euch wissen, ob meine Herangehensweise so in 
Sinn macht:

Aufgabe:
Ich bekomme Analoge Daten, die digitalisiert werden müssen und 
anschließend seriell an einen PC übermittelt werden sollen über die USB 
Schnittstelle. Gleichzeitig soll die USB Verbindung meine Schaltung mit 
Spannung versorgen, sodass keine externe Spannungsversorgung nötig ist.


Meine Herangehensweise:
Ich habe mir als µP den Atmega8 ausgewählt. Hierzu gibt es
genügend Beispielschaltungen, die man zuhaufe im Netz findet.

Die Spannungsversorgung über USB dürfte ebenfalls kein Problem
sein, da der Atmega8 einen Spannungsbereich von 2,7V – 5V abdeckt
und mir die USB Schnittstelle 5V liefert. Eventuell würde ich hier
noch einen Tiefpassfilter einsetzen, damit evtl. Störungen nicht
meinen µP beeinflussen.
Vielleicht ist es aber auch besser einen neuen Festspannungsregler
auf meiner Platine einzusetzen, um z.B. eine stabilisierte
Spannung von 3,3V aufzubauen?

Software-technisch würde ich den µP gerne mit C programmieren, da
ich hier schon ein wenig Erfahrung mit habe. Als <
Programmierumgebung ist AVR Studio 6 angedacht (C Toolchain,
Programmiertools usw. sind hier doch alle erhalten?)

Mein großes Problem ist zurzeit noch die Kommunikation über USB
zum Rechner.Bisher ist meine Idee die Uart Schnittstelle des µP´s zu 
nutzen und die Daten dann über einen IC (FT232RL) auf USB Niveau zu 
wandeln. Ob und wie ich die Daten dann am PC erhalten kann, sowie die 
genaue Softwarerealisierung ist aufgrund mangelnder Kenntnisse noch sehr 
fraghaft für mich.
Könnt ihr mir vielleicht ein paar Tipps geben, ob mein Vorhaben in der 
Art realisierbar ist?
Über ein paar weitere Tipps zur Softwarerealisierung des USB Problems 
würde ich mich ebenfalls freuen.

Gruß
Bernd

von runtastic (Gast)


Lesenswert?

Zu messender Eingangsspannungsbereich?
Gewunschte Auflösung?
Gewünschte Genauigkeit?
Abtastrate?
Sicherung der Daten über CRC o.ä?
--> Übertragungsrate

von runtastic (Gast)


Lesenswert?

Anzahl Kanäle?
Simultan?

von Bernd (Gast)


Lesenswert?

Zu messender Eingangsspannungsbereich?
Gewunschte Auflösung?
Gewünschte Genauigkeit?
Abtastrate?
Sicherung der Daten über CRC o.ä?
--> Übertragungsrate

Hallo,

Der Eingangsspannungsbereich hängt zu Zeit noch von einem anderen 
Projekt ab. Unsere Gruppe ist nur für die Digitalisierung und 
Messwertaufbereitung zuständig. Es wir aber denke ich im Bereich von 
max. 3V bis 0V liegen.

Abtastrate: Es ist ein Träger Porzess zu analysieren, deswegen kommt es 
auf die Abtastrate nicht so genau an. Desweiteren genügt auch ein 
einziger Kanal.

Die Auflösung sollte auf jeden Fall bei 10Bit liegen.

Der ACD Teil ist aber auch nicht mein größtes Problem, da ich so eine 
Schaltung schon einmal in einem Praktikum aufgebaut habe.

Gruß
Bernd

von Timmo H. (masterfx)


Lesenswert?

Ja dann brauchst du doch praktisch nur den atmel und nen ftdi chip, dann 
hast du auch gleich den virtuellen comport

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bernd schrieb:

> Eventuell würde ich hier
> noch einen Tiefpassfilter einsetzen, damit evtl. Störungen nicht
> meinen µP beeinflussen.

Wichtig ist ein Filtern vor allem der Versorgung des Analogteils,
damit du dir keine Störungen in den ADC einkoppelst.

Für minimale Störeinkopplung solltest du während der AD-Wandlung
den Controller schlafen legen.  Der hat einen eigenen Modus dafür,
bei dem so gut wie alle Takte abgeschaltet sind außer denen, die
für den ADC notwendig sind.

Ein separater Regler ist normalerweise verzichtbar.

> Mein großes Problem ist zurzeit noch die Kommunikation über USB
> zum Rechner.Bisher ist meine Idee die Uart Schnittstelle des µP´s zu
> nutzen und die Daten dann über einen IC (FT232RL) auf USB Niveau zu
> wandeln.

Der FT232RL wird seriell an den Controller angebunden.  Dafür braucht
der Controller eine hinreichend genaue Taktrate, was, wenn du auf
Nummer Sicher gehen willst, einen Quarz erfordert.

Alternativ kannst du dir auch den parallel angebundenen FR245 mal
ansehen.  Portpins solltest du je genug frei haben (12 Stück brauchst
du dafür, 8 für die Daten und vier Steuerleitungen).  Der benimmt
sich aus Sicht des PCs genauso wie ein FT232 (gleiche Treiber), ist
aber in der Taktrate zum Controller völlig unkritisch.

> Ob und wie ich die Daten dann am PC erhalten kann,

Ist eine fiktive serielle Schnittstelle aus PC-Sicht.  Du brauchst also
irgendeine PC-Software, die mit seriellen Schnittstellen umgehen kann.

: Bearbeitet durch Moderator
von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

So nach einiger Zeit hab ich jetzt mal einen Schaltplan meines Projektes 
erstellt, den ich hier anhänge.
Ich habe viele Beispielschaltungen aus dem Netz als Vorlage genommen und 
denke, dass soweit alles in Ordnung ist.
Ich würde mich aber über ein paar Anregungen von euch freuen, da ich wie 
gesagt in dem Bereich noch etwas unerfahren bin.
Hauptsächlich geht es mir darum, ob alles von mir richtig beschaltet 
wurde. Gerne nehme ich aber auch weitere Tipps entgegen.
Für evtl. Unklarheiten, erkläre ich hier nochmal die Hauptfunktionen und 
wie ich sie gelöst habe.

------------------------------------------------------------------------
Zur Schaltung hier nochmal ein paar Einzelheiten:
Die vielen Lötösen bzw. Jumper (Stiftleisten) sind hauptsächlich um die 
erste „Prototypen-Platine“ noch flexibel zu halten. So kann ich, falls 
etwas noch nicht funktioniert, Anschlüsse immer noch auf 
Steckbrettplatinen herausführen und Schaltungsteile evtl. verändern bzw. 
erweitern.
Beispiele hierfür sind z.B.:
-  Der µP soll auf einer zweiten Platine ein Signal schalten, was 
abhängig von einer Schalterstellung auf derselben Platine geschehen 
soll(1x Eingang PD3, 1x Ausgang PD2).
 Nach der Schaltung erhält der µP eine Analoge Spannung, die er 
Auswerten soll(ADC0 PC0). Anschluss K6 beinhaltet also hauptsächlich 3 
Signale, die ich durch Jumper(K12,K13,K14) auch ohne die zweite Platine 
auf meiner Platine simuliert werden können.

-  VCC und GND gebe ich nochmal getrennt vom „Signal-Flachbandkabel“ 
über K10, da ein größerer Strom am Ausgang fließen wird (µP schaltet nur 
einen Steuertransistor). Somit belaste ich nicht meine Signale mit 
etwaigen Störungen.
((Ich weiß, dass über USB maximal 500mA fließen dürfen, wir wollen aber 
einen Doppelstecker benutzen (wie bei älteren Festplatten) um einen 
höheren Strom entnehmen zu können.))

-  Der FT232RL ist über RXD und TXD mit dem µP verbunden. CTS und RTS 
sind für einen Handshake bestimmt. Wie und ob ich sie nutzen soll weiß 
ich leider noch nicht. Wie ich es bis jetzt verstanden habe muss ich die 
Signale nicht unbedingt nutzen.

-  Da ich noch nicht genau weiß wie gut die Taktausgabe vom FT232RL über 
CBUS0 zu programmieren ist, kann ich über Jumper K3,K4 auch ersatzweise 
einen Quarz-Takt auf dem Controller schalten. ((Hierfür sollte man doch 
am besten so genannte Baudratenquarze verwenden um die Taktrate gerade 
herunter teilen zu können oder?))

-   Da ich am Ende den genauen Stromverbrauch der Gesamt- bzw. der 2. 
Schaltung wissen möchte, kann ich über Jumper K7,K8 ein Amperemeter in 
Reihe schalten
------------------------------------------------------------------------
So ich hoffe der restliche Teil meiner Schaltung erklär sich von selbst.
!!!!!!!!!DANKE AUF JEDEN FALL SCHON EINMAL IM VORAUS!!!!!!!!!!!!!

von Frank K. (fchk)


Lesenswert?

Du machst es Dir unnötig kompliziert.

Ich hätte hier einen anderen Vorschlag:

ADC-Wandler MCP3208, 8 Eingänge, 12 Bit Auflösung, SPI-Schnittstelle

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010534

So, und da Du den über USB auslesen willst, brauchst Du so etwas wie 
einen USB-nach-SPI-Wandler. Kein Problem, da hat Microchip auch was für 
Dich: den MPC2210.

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en556614

Damit sparst Du Dir den Mikrocontroller-Programmierung. Der MCP2210 ist 
im Prinzip nur ein vorprogrammierter PIC18F14K50 mit eingebautem USB. 
Für den PC erscheint er als USB HID, d.h. Du brauchst keine speziellen 
Treiber dafür. FTDI hat auch Bausteine, die SPI können.

fchk

von Bernd (Gast)


Lesenswert?

Hört sich ja auch nicht schlecht an. Wäre natürlich auch einfacher.
Den MPC2210 kann ich leider niergendwo finden.

Da ich mir die ganze Arbeit jetzt schon gemacht habe und auch mein 
Wissen im Bezug auf µP Programmierung ausbauen möchte baue ich meine 
Schaltung auf jeden Fall auch auf. Deswegen, wäre ich für Ratschläge 
immer noch Dankbar.

Als Zweite Möglichkeit könnte ich mir allerdings gut vorstellen deinen 
Vorschlag auch umzusetzen.

von Frank K. (fchk)


Lesenswert?

Bernd schrieb:
> Hört sich ja auch nicht schlecht an. Wäre natürlich auch einfacher.
> Den MPC2210 kann ich leider niergendwo finden.

MCP2210
^^^

sorry, Typo

http://de.farnell.com/microchip/mcp2210-i-so/ic-usb-to-spi-wandler-20soic/dp/2078574
http://de.mouser.com/ProductDetail/Microchip-Technology/MCP2210-I-SO/?qs=sGAEpiMZZMsozux2%2fwCmW0%252b88ohExGZ9
http://de.rs-online.com/web/p/multiprotokoll-transceiver/7617204/

Und wenn Du unbedingt selber programmieren willst, dann nimmst Du halt 
einen PIC18F14K50 (das ist der gleiche Chip, nur leer) und programmierst 
Dir das ganze selber zusammen. Den USB-Stack liefert Microchip Dir fix 
und fertig.
Wobei ich für die Entwicklung eher einen PIC18F25K50 oder einen 
PIC18F27J53 nehmen würde, weil Dir das die Arbeit erleichtern würde. 
Beim 14K50 sind USB und ICSP(Debug- und Flash-Port) auf den gleichen 
Pins, das ist speziell am Anfang lästig, spart aber in der Serie Pins 
und damit Geld.

Der PIC18F27J53 hat sowohl Hardware-USB als auch 12 BIT ADC eingebaut - 
der externe ADC wäre da also überflüssig. Von der Hardware wäre das am 
einfachsten - nur ein 28 Pinner, wo alles drin ist.

fchk

von Helmut H. (helmuth)


Lesenswert?

Warum nimmst du nicht einfach einen Arduino?

von abc.def (Gast)


Lesenswert?

Arduino im professionellen Bereich beleidigt die Seele.
Ich bin schon oft an Begrenzungen in der IDE hängengeblieben, was mir 
bei avr-gcc in der Befehlszeile nicht passiert ist.
Aber die Möglichkeit ist, die Arduino-Hardware zu verwenden, auf den 
bootloader zu verzichten und über isp zu programmieren. Der 16U2 
Prozessor ist dann das Äquivalent zum FTDI.

von Bernd (Gast)


Lesenswert?

Wenn ich das richtig sehe, dann spare ich mir bei dem PIC18F27J53 
ausschließlich den FDI Chip ein. Der Rest lässt sich mit meinem Atmega8 
doch auch realisieren.

Mein Problem ist ein bisschen die Zeit. Bei dem Atmega8 kenne ich mich 
schon ein bisschen in der Programmierung aus und hätte den Schaltplan 
(wenn er denn in Ordnung ist) fertig. Beim PIC müsste ich mich jetzt 
nochmal komplett mit der neuen Hardware auseinandersetzen. Das würde ich 
sehr gerne machen, jedoch muss das Projekt zeitnah fertig sein und 
nebenbei muss ich ja auch noch n bissel studieren;-)

Naja ich hoffe mal, dass der Schaltplan so in Ordnung ist. Danke auf 
jeden Fall für eure Anregungen.

Falls jemand weiterhin noch Tipps zu meiner Variante hat. Immer her 
damit.

von Karl H. (kbuchegg)


Lesenswert?

>  um die erste „Prototypen-Platine“ noch flexibel zu halten.

Kauf die Teile ein und steck sie auf einem Steckbrett zusammen.
Du hast mir da ehrlich gesagt einen Haufen möglicher Jumper verplant, 
die nicht wirklich Sinn machen. (Die grundsätzliche Funktionalität macht 
schon Sinn, aber man braucht das Zeug nicht auf der Platine)

Wenn du einen Quarz benutzt, dann benutz den Quarz. K3 und K4 braucht 
keiner.
Der ganze Komplex rund um K12, K14, K13, S2, D2 und den 120R lässt sich 
auch mit einem Adapterkabel lösen, welches fliegend verdrahtet an K6 
angesteckt wird. Zur Inbetrieb-Nahme ist das gut genug und wenn die 
Schaltung erst mal läuft, dann braucht diesen ganzen bereich kein Mensch 
mehr - das Adapterkabel wird einfach abgesteckt und die Platine ist 
wieder "sauber".

> Da ich am Ende den genauen Stromverbrauch der Gesamt- bzw. der
> 2. Schaltung wissen möchte, kann ich über Jumper K7,K8 ein Amperemeter
> in Reihe schalten
Das Amperemeter schleifst du extern ein. Kein Grund dafür einen Jumper 
vorzusehen.
Je mehr Jumper du auf der Platine hast, desto mehr Fehlerquellen gibt 
es. Daher willst du alles, was du über eine externe Beschaltung machen 
kannst, auch extern halten.

>  So kann ich, falls etwas noch nicht funktioniert ....
>> Kauf die Teile ein und steck sie auf einem Steckbrett zusammen. ...
.... auf dem Steckbrett umstecken und die Schaltung debuggen. Läuft 
alles, dann zeichnest du die erste Platinenversion.

: Bearbeitet durch User
von Bernd (Gast)


Lesenswert?

Da mir die Platinenherstellung sowieso nichts kostest und ich mir die 
mühsame Fummellei auf einem Steckbrett (Fehlerquellen sind hier oft 
garantiert bei vielen Verkabelungen) sparen wollte  habe ich eben gerade 
soviel wie möglich versucht auf eine Platine unterzubekommen.

Die Verbindung zu der zweiten Platine soll sowieso irgendwann wegfallen, 
da dann auch der zweite Schaltungsteil (wird parallel von einer anderen 
Gruppe entwickelt) mit auf der Hauptplatine platziert wird.

In wie weit sind Jumper denn Fehlerquellen? Kommt es z.B. öfter vor, 
dass der Kontakt nicht optimal ist oder was ist der Grund?

von Karl H. (kbuchegg)


Lesenswert?

Bernd schrieb:

> In wie weit sind Jumper denn Fehlerquellen?

Wackelkontakte. Jumper die gesteckt sind und nicht gesteckt sein 
sollten. Jumper die nicht gesteckt sind und gesteckt sein sollten. 
Jumper die sich unter Umständen durch Vibrationen losrütteln. etc. etc.

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.