Forum: Mikrocontroller und Digitale Elektronik Einstieg in Mikrocontroller programmierung (mal wieder.)


von Thomas (Gast)


Lesenswert?

Vorab : Bitte seid gnädig mit mir, denn ich habe (bisher) absolut keinen 
Dunst von der Thematik.

Aaaalso : Mein (Fern-)Ziel ist die Steuerung von Programmen (z.B. der 
Lautstärkeregelung am PC/Notebook unter Windows). Nicht stöhnen wg. Win, 
die von mir zu verwendende Software macht dies notwendig. Dies muß über 
das "Auslesen" eines Drehwiederstandes erfolgen. Die einzige 
Schnittstelle die mir zur Verfügung steht ist USB.

So wie ich es bisher verstanden habe, benötige ich wohl ein 
Entwicklungsboard mit USB Programmer. Das ist wohl das Teil mit dem ich 
den Programmcode auf den Chip bringe. Aber wie lese ich die Daten aus ?? 
USB ist die einzige für mich Infrage kommende Möglichkeit! Funktioniert 
das Auslesen von Daten auch über die Programmer-Schnittstelle?

Wenn ich denn einmal einen Prozessor entsprechend programmiert haben 
sollte, wie bekomme ich diesen auf eine handliche "Arbeitsplatine" bzw. 
wo bekomme ich selbige dann her und das noch mit den notwendigen 
Leiterbahnen und notwendiger Anschlussperepherie ?

Geliebäugelt habe mit einem Arduino Einsteigerset. Das Buch dazu hat 
sehr gute Rezensionen gehabt. Das Board selber ist im unteren 
Preissegment angesiedelt.
Ein paar (auch für mich verständliche) Anregungen/Ideen Euererseits 
wären sehr nett.

Vielen Dank im Voraus
Thomas

von Karl H. (kbuchegg)


Lesenswert?

Ich verstehe ja, dass du ambitioniert bist.
Aber im Moment habe ich das Gefühl, dass du, bildlich gesprochen, vor 
hast über den Atlantik zu schwimmen, und deine erste Sorge ist es, ob 
sie dich in der Badehose auf die Freiheitsstatue lassen.

Bis dein selbst gestecktes Ziel auch nur annähernd in Reichweite 
gelangt, hast du noch viel vor dir.

AVR-Tutorial

von Oliver (Gast)


Lesenswert?

Hm.

Du möchtest:

- Hardware entwicklen
- Leiterplatten herstellen
- (SMD-)Bestücken
- Gehäuse bauen

- Mikrocontroller programieren
- USB-Schnittstelle programmieren

- Windows-USB-Treiber programmieren
- Windows-Systemfunktionen ansteuern

und vermutlich noch ein paar Sachen mehr.

Aus deinem Text geht nicht ganz klar hervor, was du davon schon mal 
gemacht hast, was du kannst, und was nicht. Ich lese den Text so, daß 
das alles für dich völliges Neuland ist.

Wie wärs für den Anfang mal mit einem etwas kleinerem Projekt?

Oliver

von Thomas (Gast)


Lesenswert?

Hi Oliver !

Danke für die schnelle Antwort !

Ersteinmal kann ich deine Fragen alle mit JA beantworten ;-)
Zum Anderen ist mir schon klar, daß ich ersteinmal mit "Blinkdioden" 
anfangen muß, bevor ich bevor ich ein "BIOs" programmieren kann.
Deshalb schrieb ich auch von meinem Fernziel.
Ich habe mein Ziel nur erwähnt, weil in den Foren (ja, ich habe mich 
vorher schon umgesehen ;-)  ) immer danach gefragt wird, was man denn 
nun eigentlich machen will.

Wie gesagt, ich will letztendlich Software über die USB-Schnittstelle 
ansteueren. Wobei ich auch schon gelernt habe, daß man USB nicht als 
solches programmieren kann, sondern die Daten wohl irgendwie per 
Interrupt abgreifen muß, da es sich ja nur um eine Art des 
Datentransports handelt. 'tschuldigung, ich schweife ab.

Ansteuern war das Stichwort : Also suche ich eine Umgebung mit der ich 
lernen kann und nach Möglichkeit mein Fernziel verwirklichen, ohne mich 
damit in den Ruin zutreiben. *GG

CU
Thomas

von Karl H. (kbuchegg)


Lesenswert?

Thomas schrieb:

> Wie gesagt, ich will letztendlich Software über die USB-Schnittstelle
> ansteueren.

Du drückst dich ein bischen vage aus, so dass man nicht sagen kann ob du 
das richtige meinst.

> Wobei ich auch schon gelernt habe, daß man USB nicht als
> solches programmieren kann, sondern die Daten wohl irgendwie per
> Interrupt abgreifen muß, da es sich ja nur um eine Art des
> Datentransports handelt.

Genau hier liegt der springende Punkt.
Der µC steuert nicht ein Programm am PC an, und der PC steuer nicht ein 
Programm am µC an.
Sondern:
* Am PC läuft ein Programm
* Am µC läuft ein Programm

Beide Programme sind erst mal voneinander unabhängig. Aber: Sie 
kommunizeren miteinander, indem der eine dem anderen Daten schickt. Was 
der jeweils andere mit den Daten macht, geht den Sender erst mal nichts 
an und interessiert ihn auch nicht weiter.

> Ansteuern war das Stichwort : Also suche ich eine Umgebung mit der ich
> lernen kann und nach Möglichkeit mein Fernziel verwirklichen, ohne mich
> damit in den Ruin zutreiben. *GG

Denk nicht an dein Fernziel.
Du willst in erster Linie lernen, wie man einen µC programmiert und was 
man mit dem Teil alles machen kann. Irgendwann bist du soweit, dass der 
µC über eine seiner Standardschnittstellen Daten rausschickt, die am PC 
zb in einem Terminalprogramm darstellt.
Der nächste Schritt ist es dann, vom PC aus mit besagtem 
Terminalprogramm Kommandos an den µC zu schicken, die dieser dann 
ausführt.

Und dann bist du dann schon dicht drann.

von Oliver (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Du willst in erster Linie lernen, wie man einen µC programmiert und was
> man mit dem Teil alles machen kann.

Da bin ich mit nicht so sicher.

Das "Fernziel" ist die Laustärkeregelung und ähnliches eines 
Windows-PC's. Sowas kann man fertig kaufen, im Bereich Soundkarten und 
Mischpulttechnik gibt es das alles.

Kaufen ist da wohl wesentlich schneller und erfolgsverprechender.

Oliver

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

An und für sich hatte ich auch Infos für ein "Einsteigermodell" gehofft, 
mit dem sich meine (anscheinend extrem hoch gesteckten) Ziele 
verwirklichen lassen. Aber anscheinend will man mir das ausreden ;-) 
(nicht so ernst gemeint...)

Wie erwähnt, ich weiß das ich bei Blinkdioden anfangen muß (und wenn 
dies noch zu einem Ergebnis führt auch werde).

Die Daten werde ich zwar über USB abrufen, aber die Schnittstelle kann 
man in einem bestimmten Modus, wie eine RS232 Schnittstelle auslesen. 
Das sollte nicht allzuschwer sein. Was defizieler wird sind die 
Programmschnittstellen, aber das ist, wie bereits mehrfach erwähnt, 
Zukunftsmusik (auch wenn sie sich ziemlich utopisch anhören mag). Wie 
ich mir das im Groben!!! vorstelle, habe ich mal als Datei angehängt. 
Ich hoffe damit kann ich ein wenig Verwirrung herausnehmen.

CU
Thomas

von Karl H. (kbuchegg)


Lesenswert?

Thomas schrieb:
> An und für sich hatte ich auch Infos für ein "Einsteigermodell" gehofft,
> mit dem sich meine (anscheinend extrem hoch gesteckten) Ziele
> verwirklichen lassen. Aber anscheinend will man mir das ausreden ;-)

Nicht wirklich.
Keiner will dir das Ausreden.

Das Arduino Board ist schon ok. So wie fast jedes andere Board. Du 
kannst dir auch dein erstes Board selber bauen, wenn du willst.
Und für den Rest hab ich dir das Tutorial hier verlinkt. Da findet sich 
jede Menge Material.

Aber löse dich von der Vorstellung, dass du dir jetzt ein Board kaufst, 
welches 'optimal' für deine Zukunfts-Aufgabenstellung ist. Wenn du 
soweit bist, diese Aufgabe anzugehen, wirst du wahrscheinlich ohnehin 
dafür ein massgeschneidertes Board bauen.

von Thomas (Gast)


Lesenswert?

Da hast Du nur zum Teil Recht.

Zum Einen : Ich will das schon lernen,
zum Anderern  : Wenn es soetwas zu kaufen gäbe, was/bzw. we ich es haben 
will, hätte ich es bereits.

Hmmm, seid mir nicht böse wenn ich das jetzt mal so sage; denn ich finde 
es nett, daß sich jmd. meines postings annimmt :
Auf meine eigentliche Frage bezüglich Einstiegssystem ist bis jetzt noch 
niemand direkt eingegangen.

von Thomas (Gast)


Lesenswert?

Vergesst mein letztes Posting (mit Gastzugang kann man halt nicht 
löschen).

von Niels (Gast)


Lesenswert?

Hi Thomas,

So unendlich weit weg muss das nicht sein. Frage ist, was Du schon 
kannst...

Der Mikrocontroller ist erst mal fast egal.

Den Mikrocontroller musst Du programmieren können. D.h. Du brauchst eine 
Entwicklungsumgebung auf dem PC für Deinen Mikrocontroller. Das auf dem 
PC erstellte Programm mußt Du auf den Controller laden können. Je nach 
Mikrocontroller und Entwicklungsumgebung geht das per 
RS232/USB/Parallelport wobei die letzten beiden meistens eine serielle 
Schnittstelle emulieren. Gibt natürlich auch parallele oder andere 
Verfahren.

Du brauchst weiter eine Entwicklungsumgebung auf Deinem PC für Dein 
PC-Programm.

Und Du brauchst eine Schnittstelle zwischen Deinem PC und Deinem 
programmierten Controller. Im Endeffekt kann das alles sein (RS232, 
WLAN, Bluethooth, USB, uvm.). Das erfordert mal mehr mal weniger 
Aufwand.

Zu Deinem Projekt würde zum Beispiel foglendes passen, um es einfach zu 
halten:
 * Mikrocontroller: beliebiger AVR mit RS232 und ADC (siehe STK500)
 * Mikrocontroller-Entwicklungsumgebung: AVR Studio (Assembler, bei STK 
dabei) + WinAVR (C/C++)
 * AVR Entwicklungsboard STK500 (beinhaltet schon einen ATMega16, ist 
Programmiergerät/Entwickungsboard und vereinfacht die Kommunikation über 
RS232

* PC Entwicklungsumgebung: Wahlweise MinGW (ohne UI) oder QTCreater (mit 
UI) beides C/C++

* Schnittstelle zwischen PC und Mikrocontroller: RS232 (wenn Du keine 
RS232 mehr hast, brauchst Du einen USB/RS232 Adapter)

Da Deine Hardware (ein Poti) nicht sehr komplex ist, war es das erst 
mal.


Kosten würde es Dich das STK500 und den USB/RS232 Adapter. Den bruachst 
Du wahrscheinlich sowieso, weil das STK nur über RS232 läuft.
Der Rest ist umsonst.


Gruß Niels

von Chronist (Gast)


Lesenswert?

Das STK 500 ist natürlich die Luxusvariante.

Wenn du gut Löten kannst und etwas Frustresistent bist, kannst du dir 
ein kleines Board selber bauen.

Dazu brauchst du:
Lochrasterplatine
ATmega irgendwas (DIP, es sei denn du magst SMD-Löten; am besten mit 
integriertem USB)
Sockel für ATmega (nicht notwendig, aber verhindert, dass du das 
teuerste Bauteil beim Löten wegröstest
Spannungsregler
Widerstände, Kondensatoren, Kabel.
Anschlüssbuchsen für die Stromversorgung und USB

Wenn du dann außer deinem Poti schonmal was anschließen willst, würde 
ich noch in 8 LED und 8 Mikrotaster investieren und die entsprechend 
verschalten (LED gegen VCC mit Widerstand, Taster gegen GND). Dabei dann 
beachten, dass du den Poti an den A/D-Wandler anschließt.

Damit kann man viel Geld sparen. Dann brauchst du noch ein 
Programmiergerät: ISP über SPI reicht vollkommen, aber JTAG ist schöner. 
Geschmackssache und Kostenfrage.

Als letztes brauchst du noch eine Spannungsversorgung.

Dann die Software runterladen (WinAVR + AVRStudio sollten reichen) und 
du kannst anfangen die LEDs mit den Buttons zu steuern. Wenn das 
funktioniert würde ich mir ein einfaches OpenSource USB Programm suchen 
und versuchen damit Daten auszutauschen. Sobald das klappt kannst du 
dann hingehen und einen Windowsdienst programmieren, der die Daten 
deiner maßgeschneiderten Eingabegeräte entsprechend an Windows 
weiterleitet.

Das wird sicherlich einiges an Zeit kosten, aber es ist alles machbar 
und bei vielen Zwischenstufen hat man auch viele Zwischenerfolge :D

Was sich auch gut macht ist ein LCD Display, damit kann man schön 
Debuggen, wenn man es erstmal am Laufen hat...

Wie gesagt, STK 500 ist deutlich komfortabler und spart viel Zeit ein 
(Löten dauert immer länger als man denkt), aber es kostet halt auch 
seinen Preis.

von Christian U. (z0m3ie)


Lesenswert?

Schau dir mal das USB AVR Lab an, du kannst es sowohl als ISP Programmer 
als auch direkt als Interface für z.b. deine Poti´s u.ä. nehmen.
Du kannst dafür eine eigene Firmware für das Gerät schreiben und einfach 
per klick austauschen.
Wenn dir die Schnittstellen nicht mehr reichen und du einen externen 
controller verwenden magst kannst du das Lab einfach als Programmer, 
Oszilloskop oder Schnittstellenlogegr für I2C,SpI oder RS232 benutzen.

http://wiki.ullihome.de/index.php/USBAVR-ISP/de

lg
Christian

von High Performer (Gast)


Lesenswert?

>Du willst in erster Linie lernen, wie man einen µC programmiert

Das klang im Posting aber anders. Ich hatte das Gefühl, Thomas will 
eigentlich nur einen Analogwert über ein Poti einlesen und in Windows 
weiterverarbeiten. Aber vielleicht täusche ich mich ja.

Zweitens finde ich es nicht sonderlich nett, dass man Thomas hier gleich 
wieder einen riesigen Berg Zeugs vor den Latz knallt. Er kann das Ding 
locker auf ner Lochrasterplatine aufbauen, zur Not im Dead Bug 
Verfahren.

von Karl H. (kbuchegg)


Lesenswert?

High Performer schrieb:

> Zweitens finde ich es nicht sonderlich nett, dass man Thomas hier gleich
> wieder einen riesigen Berg Zeugs vor den Latz knallt. Er kann das Ding
> locker auf ner Lochrasterplatine aufbauen, zur Not im Dead Bug
> Verfahren.

Kann er.
Das Problem ist ja nicht das Board an sich, sondern der Programmer. Den 
sollte/muss man als Einsteiger kaufen, sonst hat man (meuistens) ein 
Henne/Ei Problem. Da erhebt sich dann allerdings die Frage: Warum kauf 
ich mir nicht gleich ein Board mit integriertem Programmer?

von Иван S. (ivan)


Lesenswert?

Thomas schrieb:
> Vorab : Bitte seid gnädig mit mir, denn ich habe (bisher) absolut keinen
> Dunst von der Thematik.

Kein Problem, ich werde deine Anfragen nach bestem Wissen und Gewissen 
beantworten. Jeder fängt klein an, kein Meifter ist jemals vom Himmel 
gefallen.

> Aaaalso : Mein (Fern-)Ziel ist die Steuerung von Programmen (z.B. der
> Lautstärkeregelung am PC/Notebook unter Windows).

Hmm, hier wird es leider schon etwas schwammig. Windows-Programme kann 
man am zielführendsten über die Win32-API-Funktion steuer. Das 
Standardwerk dazu ist der Petzold, sprich: "Windows-Programmierung" von 
Charles Petzold.

> Nicht stöhnen wg. Win, die von mir zu verwendende Software macht dies
> notwendig.

Kein problem, ich selbst benutze sowohl Windows XP als auch NetBSD und 
fallweise Debilian oder Fedora. Jedes dieser Betriebssysteme hat seine 
Berechtigung, IMO.

> Dies muß über das "Auslesen" eines Drehwiederstandes erfolgen.

OK, nun verstehe ich dein Problem besser. Du willst also die Lautstärkke 
über eine Hardwareschnittstelle, sprich am Lautstärkepotentiometer, 
verstellen. Den "Drehwiederstand" könnte man möglicher Weife durch ein 
digitales Potentiometer ersetzen. Eventuell tut es aber auch ein Servo 
oder ein Motorpoti. Die Lösung mit dem Digipot erscheint mir am 
sinnvollsten, auch wenn es der Weg des größten Aufwandes ist.

> Die einzige Schnittstelle die mir zur Verfügung steht ist USB.

Wieder schwammig. Hier gibt es zwei Möglichkeiten:
a) Der uC soll via USB programmiert werden
b) Die Laustärkesteuerung soll über USB "bearbytet" werden.

ad a): Dies ist inzwischen Standard, die meisten uC-Targetboards und 
Programmiergeräte verfügen inzwischen über USB.
ad b): Das wird schwieriger. Neben dem steuerndem Windows-Programm 
brauchst du einen Controller nebst USB-Interface-Chip. Ich würde eine 
"Virtuelle UART-Schnittstelle über USB" empfehlen, das ist einfach und 
erprobt.  Als Interface-ICs eigen sich zum Bleistift der FT232 von FTDI 
oder der (bessere) CP2102 von SiLabs.

> So wie ich es bisher verstanden habe, benötige ich wohl ein
> Entwicklungsboard mit USB Programmer. Das ist wohl das Teil mit dem ich
> den Programmcode auf den Chip bringe.

Genau.

> Aber wie lese ich die Daten aus ??

Welche Daten genau meinst Du? Zum Verarbeiten des Werts des 
potentiometers empfieglt sich ein (eventuell in deinem Controller intern 
vorhandener) ADC.

> Wenn ich denn einmal einen Prozessor entsprechend programmiert haben
> sollte, wie bekomme ich diesen auf eine handliche "Arbeitsplatine" bzw.
> wo bekomme ich selbige dann her und das noch mit den notwendigen
> Leiterbahnen und notwendiger Anschlussperepherie ?

Die Platine kannst Du entweder selbst machen (da gibt es viele FREDs 
dazu hier im Forum) oder Du lässt sie Herstellen. Im hier hauseigenem 
Wiki sollten Platinenfertiger en masse zu finden sein. Das Layout dazu 
erzeugst Du mittels einem dafür geeignetm Computerprogramm. Ich selbst 
verwende dazu gEDA, viele hier bevorzugen jedoch Target oder Eagle. Wie 
auch bei der Auswahl des Mikrocontrollers solltest Du hier jenes 
Programm nehmen das Dir selbst am meissten zusagt und mit dem Du am 
Besten klar kommst.

> Geliebäugelt habe mit einem Arduino Einsteigerset.

Wenn Dir der AVR von Atmel zusagt, ist dies ein brauchbares 
Einstiegsset. Zu den Atmel'schen Produkten kann ich nur wenig sagen, ich 
selbst benutze lieber Mikrocontroller von ST Mikroelectronics. Zum AVR 
gibt es hier jedoch sehr viele Benutzer, sprich: potentielle 
Hilfeleifter.

> Das Buch dazu hat sehr gute Rezensionen gehabt. Das Board selber ist im > 
unteren Preissegment angesiedelt.

Ich kenne weder das eine noch das Andere, hoffe jedoch trotzdem, dir 
helfen zu koennen haben.

> Ein paar (auch für mich verständliche) Anregungen/Ideen Euererseits
> wären sehr nett.

Windows-Programmierung + Mikrocontrollerprogrammierung + 
Platinenlayouting + (eventuell Platinenerstellung) + Elektronik 
allgemein + ...
lernt man nicht in einem Tag. Plane genügend Zeit ein.

Viel Erfolg, Iwan

von Fer (Gast)


Angehängte Dateien:

Lesenswert?

Ich glaube er wollte nicht den Lautstärke Ponti steuern sondern mit dem 
Ponti Windows steuern, oder?

Wenn ja, ist dies "einfach" mit einem ADC, also zur Widerstandsmessung.
Die gemessenen Daten sollen wenn ich es richtig verstanden habe dann an 
den PC übertragen werden, und das per USB.

Siehe ADC http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC


Wenn du dich ausreichend mit der Programmierung von uCs beschäftigt hat 
könnte dein Versuchsaufbau ungefähr so aussehen wie im Anhang, also zur 
Widerstandsmessung, daher USB kommt dann noch dazu. Da empfehle ich dann 
später V-USB, aber dafür muss man sich schon mit Mikrocontrollern 
befasst haben und etwas C können.

Gruß,
Ferdinand

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein Ansatz mit sehr viel weniger Aufwand wäre die Nutzung eines 
USB-Gameport-Adapters und der Anschluss des Potis an den Gameport. Der 
nämlich enthält Hardware, um analoge Joysticks auszuwerten.

von Multi K. (multikulti)


Lesenswert?

Ich denke das größere problem wird wohl die Software auf dem PC sein als 
die software für den controller. Die controller software kann man sich 
als Anfänger evtl. noch aus Beispielcodes zusammenschnippeln, aber um 
einen PC treiber zu programmieren braucht es wohl etwas mehr Know How. 
Ich denke es wird ein paar jährchen dauern bis man in der lage ist einen 
Gerätetreiber zu programmieren. Nun, die Frage ist, willst du dich mit 
Mikrocontrollern beschäftigen oder willst du die Lautstärke deines PC's 
mit einem Drehknopf steuern? Mit Mikrocontrollern kann man schon eine 
menge machen, deswegen ist es eigentlich nie falsch dort einzusteigen.

Jetzt aber zum Wesentlichen. Wenn es dir wirklich nur darum geht die 
Lautstärke deines PC's zu steuern, dann würde ich mal gucken ob man das 
nicht einfach mit einer Multimediatastatur realisieren kann. Diese 
Multimediatastaturen mit Drehknopf zur lautstärke Steuerung gibt es für 
ein paar euros zu kaufen. Dann hast du schonmal den Treiber und alles 
dabei. Vielleicht ist es möglich den Drehknopf mit samt elektronik dann 
einfach auszubauen und in ein kompaktes gehäuse zu packen.
Wenn das so nicht funktionieren sollte, kannst du versuchen mit einem 
speicheroszi die Signale aufzuzeichnen die über die Leitung geschickt 
werden wenn du am Lautstärke rädchen der Tastatur drehst. Die signale 
bzw datenpakete immitierst du dann einfach mit dem Controller, wenn die 
lautstärke erhöt bzw gesenkt werden soll. So hast du die ganze 
programmierarbeit für den pc treiber gespart.

Übrigens: Es gibt Schnigtstellen adapter für USB zu Rs232 (COM). Damit 
kannst du dann auch günstigere Entwicklerboards mit rs232 schnitstelle 
benutzen. z.b. das STK500

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.