Forum: Mikrocontroller und Digitale Elektronik Codesammlung und Tutorial


von David K. (kresley81)


Lesenswert?

Hallo

Zur Zeit erweitere ich meine Website mit einigen Codebeispielen für die 
ATmega Mikrocontroller. Die Idee dahinter ist, ganz einfache, 
funktionierende Programme zu veröffentlichen, die einem helfen, die 
Peripherien verschiedener Megas schnell und fehlerfrei aufzusetzen und 
zu testen.

Dazu hab ich auch ein Tutorial geschrieben, wie man den Code schnell 
schnell und Unkompliziert auf den Controller bringt.

Wer Lust hat, es sich anzusehen, darf mir gerne ein Feedback geben. Bin 
um jeden Tipp, was man noch verbesern könnte, dankbar.

Das Tutorial ist erst heute fertig geworden und auf meienr Seite noch 
nicht verlinkt. Man erreicht es aber über folgende Adresse:

http://www.electronicsplanet.ch/mikrocontroller/avr-tutorial-c/avr-tutorial-c.htm

Die Codesammlung ist bereits verlinkt, auf die Startseite kommt man aber 
auch über:

http://www.electronicsplanet.ch/mikrocontroller/source-code/source-code-index.htm

Wer Zeit und Lust hat, sich das anzusehen und mir ein Feedback zu geben 
tut mir damit einen grossen Gefallen.

Viele Grüsse

Kresley

von Michael (Gast)


Lesenswert?

Du hättest dir die Mühe sparen können, und anstelle dessen das auf 
diesen Seiten existierende Tutorial von seinen Schwachstellen (die du 
ihm durch eine eigene Arbeit ja unterstellst) befreien können.
Die Beschränkung auf teure (und alte) Hardware (STK500) finde ich zudem 
auch nicht gut, ein gut strukturierter Bericht, wie man den Atmega mit 
einem Programmer auf einem Steckbrett in Betrieb nimmt ist da eher 
Zielführend, als 80 Euro für das dicke Ding.

M2C

Michael

von Dennis (Gast)


Lesenswert?

Ich finde die Seite gut gemacht. Aber auch ich würde sagen, dass die 
Welt nicht noch ein Tutorial für die AVRs braucht...

Nimm doch mal ein Cortex-M3/M4 (nicht unbedingt die STM32, gibt ja noch 
einige andere).

von Michael (Gast)


Lesenswert?

Ergänzung:
Du hast vergessen, die Verbindung von Tastern und LED zu den 
entsprechenden Ports zu beschrieben (soweit ich mich erinnere, sind hier 
auch so Flachbandkabel um die LED/Taster an verschiedenen Ports 
betreiben zu können)
Eine leere "for" finde ich hier auch eher nicht so schön, eine "while" 
ist hier meiner Meinung nach geläufiger.

Um auch konstruktiv zu sein...

von David K. (kresley81)


Lesenswert?

Hallo Michael und Denis

Danke für eure Feedbacks und die Ehrlichkeit, dass ich mir die Mähe 
hätte sparen können. (ich musst lachen, als ich das las)

Mir ist bewusst, dass es schon Tutorials gibt. Das ich ein eigenes 
geschreiben habe, hat folgende Gründe:


* Das Tutorial ist nur eine kleine Nebenseite zu meinen Codebeispielen. 
Der Hauptinhalt der Website, sind die Codebeispiele und nicht das 
Tutorial. Ich will die Besucher meiner Website nicht mit den 
Codeschnipseln alleine lassen, sondern ihnen gleich zeigen, wie sie sie 
praktisch zum laufen bringen.

* Die meisten Tutorials im Web, erklären zum Beispiel, wie man einen 
Timer zum laufen bringt. Mein Tutorial erklärt, wie man einen 
existierenden Timercode in den Controller bringt. Beide Arten von 
Tutorials haben ihren eigenen Zweck und ihr eigenes Zielpublikum.

* Meins ist auf die kompilierung von kleinen Codes ausgelegt, wie sie 
auf meienr Seite zu finden sind. Es ist eine sinnvolle (sogar 
notwendige) Ergänzung zu den Codebeispielen. Es zeigt den kürzesten Weg 
zum laufenden Code. Und das ist das Ziel meiner Codesammlung: Dass man 
einen Code sofort zum laufen bringt.

* Die Tutorials, die ich jetzt gesehen habe, sind nicht wirklich 
ausführlich bebildert. Ich liebe Anleitungen mit Bildern anstatt solche, 
die mich nur zutexten.


> anstelle dessen das auf
> diesen Seiten existierende Tutorial von seinen Schwachstellen (die du
> ihm durch eine eigene Arbeit ja unterstellst) befreien können.

Das ist deine Meinung, und ich weiss, dass sie falsch ist. Ich hatte nie 
den Gedanken, dass das Tutorial dieser Seite Schwachstellen hat. Ich 
habe das Tutorial auf dieser Seite nämlich nur kurz überflogen und 
gesehen, dass es nicht das ist, was zu meiner Codesammlung passt.


Danke aber für den Tip mit der Hardware. Tutorials, wie man auf dem 
Steckbrett einen Controller zum laufen bringt, gibt es ja schon viele. 
Vieleicht werde ich mal eines verlinken.

Zum Thema andere Controller: Wenn ich die populärsten Megas in meiner 
Samlung habe, überlege ich mir, noch andere Controller in die Sammlung 
einzufügen. Aber für den moment bleibe ich noch bei den Controllern, die 
ich kenne.

von David K. (kresley81)


Lesenswert?

Michael schrieb:
> Ergänzung:
> Du hast vergessen, die Verbindung von Tastern und LED zu den
> entsprechenden Ports zu beschrieben (soweit ich mich erinnere, sind hier
> auch so Flachbandkabel um die LED/Taster an verschiedenen Ports
> betreiben zu können)
> Eine leere "for" finde ich hier auch eher nicht so schön, eine "while"
> ist hier meiner Meinung nach geläufiger.
>
> Um auch konstruktiv zu sein...

Hui, danke. Stimmt. Das Foto von den Verbindungen habe ich schon 
gemacht, aber ich vergas, es einzufügen.

Danke

von stm (Gast)


Lesenswert?

Hi David!

Erstmal ein großes Lob, dass du sowas ins Netz stellst. Das ist 
grundsätzlich nicht schlecht. Ich persönlich bin aber auch ein wenig 
zwiegespalten über den Nutzen. Die Atmegas gehören zu den Controllern 
für die es gefühlt die meisten Tutorials gibt. Der Controler ist ja DER 
Bastelcontroller überhaupt.

Ich selbst bin schon eine Weile von diesen Controllern weg und würde sie 
auch einem Anfänger nicht mehr ans Herz legen. Dies hat mehrere Gründe:

- Atmegas sind leistungsschwach
- Atmegas sind teuer
- Debugger/Programmer sind teuer
- Die Möglichkeiten sind stark eingeschränkt.
- Cortex gibts auch schon im DIP

Seit die Hersteller von Cortex-M Devices in einen derart ausufernden 
Preiskampf verfallen sind (Entwicklungsplattformen inklusive Debugger 
für wenige Euro --> kostet bei AVR gleich 100 Euro oder mehr) und es 
zudem auch freie ARM-IDEs gibt, wird der ATmega für mich sehr 
unattraktiv.

Grade in dieser Umschwungzeit wären Tutorials für die Cortexe heiß 
begehrt. Da gibts noch nicht so viel.

lg
stm

von Kaj (Gast)


Lesenswert?

@stm

Mit sicherheit hast du Recht, mit dem, was du sagst, aber ich denke für 
"Einsteiger" sind die AVRs immer noch die bessere Wahl. Wenn ich das mal 
aus der Sicht eines µC-Anfängers betrachte, bin ich froh wenn ich nicht 
direkt mit 5 Timereinheite, 7 UARTs, usw. zugeworfen werde (ist nur ein 
Beispiel). Und da bin ich der Meinnung das so ein kleiner ATmega8 
wirklich gut geeignet ist.

Wenn man dann verstanden hat, wie die Dinge funktionieren kann man auch 
umschwenken auf größere Sachen. Als du deinen Führerschein gemacht hast, 
bist du ja auch nicht gleich mit nem Porsche los gefahren ;)
Vom Prinzip denke ich, das es relativ "egal" ist, welchen µC man da vor 
der Nase hat, solange man verstanden hat, wie die Dinge funktionieren. 
Mein umstieg von den µC die wir im Studium hatten (68HC11, 68HC12, 
68332) auf AVR hat sehr gut funktioniert.

Zu der "Leistungsschwäche" von den AVRs:
Was hast du denn damit vor? einen vollwertigen PC-Ersatz wird man damit 
nicht bauen können, das ist richtig, aber dafür sind sie auch nicht 
gedacht. und 8/16MHz und 8/16/32/64kB flash reicht für die meisten 
Anwendungen aus.
Ein Porsche für 10km durch die Stadt, ist halt ein bisschen overkill.

Es ist immer eine Ansichtssache und die eigenen Vorgaben, was man 
realisieren will.
Das ist meine Meinung  :)


@David

auf den ersten Blick sieht die Seite gut aus, werd sie mir in den 
nächsten Tagen mal genauer anschauen.

Grüße

von Dennis (Gast)


Lesenswert?

@all -David

Jungs, wir haben es versucht. Manche sind halt Beratungsresistent und 
können sich alles schönreden ohne wirklich Ahnung zu haben.

@David

Weiter so, darauf hat die Welt gewartet! Wir wünschen dir, dass die 
Menge der interessierten alle Erwartungen bei Weitem sprengt! Aber 
erwarte bitte keine Lobeslieder von uns, wird nicht kommen...

von David K. (kresley81)


Lesenswert?

Danke viel mal für alle Komentare

Über Sinn und Unsinn der Codebeispiele für den ATmega8 lässt sich sicher 
sehr gut Diskutieren. Ich hab auch nicht hier geschrieben, um 
Lobeslieder zu erhalten, sondern eben um etwas Kritik zu ernten. Ich 
will die Seiten ja noch verbessern.

Trotzdem Danke für die lobeden Worte. Um die Besucherzahlen geht es mir 
übrigens nicht mal gross (ok, jedem Webseitenbetreiber geht es ein wenig 
um Besucherzahlen). In erster Linie will ich einfach den 
Programmiereinsteigern eine kleine Freude machen ;-) Ich habe dabei für 
mich auch einiges gelernt.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

STK500 und ATMega8 - meine beiden meistgehassten Produkte der Firma 
Atmel. Sorry, David, du hast dir zwar viel Mühe gemacht, aber das ist 
eine Kombination, mit der du vor 5 Jahren jemandem Freude gemacht 
hättest. Heute allerdings ist dieser Zug abgefahren.
Ich streue noch ein bischen Salz in die Wunde:

* Warum nicht wenigstens die modernen Nachfolger des Mega8, wie den 
Mega48/88/168/328? Die haben Pinchange Interrupts, 3 schöne Timer usw... 
- und die Arduino Fraktion liegt dir zu Füssen :-)

* Ist es nicht sinnvoller, gleich modernere Prozessoren zu lehren, wo 
noch nicht so viel bekannt drüber ist - z.B. LPC oder STM32? Da gibt es 
wirklich offene Fragen: Einrichten einer Toolchain, 
Registerprogrammierung usw., die hier immer wieder auftreten. Und die 
STM32 Boards sind ungeschlagen preisgünstig und brauchen keinen 
Programmierer.

* Ein moderner Programmierer wie z.B. der AVRISP MkII hätte zumindest 
mal erwähnt werden müssen. Immerhin ist er deutlich billiger als das 
STK500, kann neben ISP auch PDI und TWI und ist damit in der Lage, alle 
AVRs zu programmieren.

Bisschen schade um die Arbeit.

von David K. (kresley81)


Lesenswert?

> Ich streue noch ein bischen Salz in die Wunde:

Salz ist ja genau das, was ich hören will ;-)


>
> * Warum nicht wenigstens die modernen Nachfolger des Mega8, wie den
> Mega48/88/168/328? Die haben Pinchange Interrupts, 3 schöne Timer usw...
> - und die Arduino Fraktion liegt dir zu Füssen :-)

Die kommen noch. Schau dir mal die Peripherien der Controller an. Die 
sind jeweils sehr ähnlich. Um einen Timer von einem Controller auf den 
andern zu Exportieren, musst du oft nur ein paar Bits umschreiben. Hast 
du den Timer1 für einen Contorller programmiert, läuft der Code auch auf 
3 anderen Controllern.


> * Ist es nicht sinnvoller, gleich modernere Prozessoren zu lehren, wo
> noch nicht so viel bekannt drüber ist - z.B. LPC oder STM32? Da gibt es
> wirklich offene Fragen: Einrichten einer Toolchain,
> Registerprogrammierung usw., die hier immer wieder auftreten. Und die
> STM32 Boards sind ungeschlagen preisgünstig und brauchen keinen
> Programmierer.

Das wäre ein anderes Thema. Ich wollte etwas mit AVR Controller machen, 
weil hier auch immer wieder die selben Fragen auftreten. "Wie bringe ich 
meinen Timer zum laufen?" wird immer wieder gefragt.



> * Ein moderner Programmierer wie z.B. der AVRISP MkII hätte zumindest
> mal erwähnt werden müssen. Immerhin ist er deutlich billiger als das
> STK500, kann neben ISP auch PDI und TWI und ist damit in der Lage, alle
> AVRs zu programmieren.

Das kann ja noch kommen :-) Ich bin noch nicht fertig. Danke für den 
Tip.


>
> Bisschen schade um die Arbeit.

Mir machts Spass und die Seiten werden bis jetzt ganz ordetlich besucht.

von szacha s. (szacha1)


Lesenswert?

Ich habe die Beispielprogramme schon vor einer Weile entdeckt und finde 
es genial!

Wie oft bin ich schon am Aufsetzen einer Peripherie verzweifelt? Mit 
einfachen Code Exaples, die ich hätte kopieren und dann für meine 
Bedürfnise erweitern können, wäre mir viel Frust erspart geblieben.

Danke für die Sammlung. Wäre toll, wenn du sie noch erweitern würdest. 
UART, SPI, usw. Das Tutorial ist sicher ok, wenn man ein STK hat. 
Ansonsten ist der Nutzen aber nicht so wahnsinnig.

von David K. (kresley81)


Lesenswert?

Danke Szacha

SPI Codes stehen schon einige bereit. Aber vorher werde ich die 
bestehenden Codes noch auf weitere Controller erweitern. Timer, adc und 
interrupt werden meiner Meinung ncvh häufiger gebraucht als die SPI.

Gruss
David

von avr (Gast)


Lesenswert?

stm schrieb:
> - Atmegas sind leistungsschwach
Dein ARM ist auch leistungsschwach im Vergleich zu meinem PC.
> - Atmegas sind teuer
Käse. Mein Lieblingsavr bleibt der Mega48 für unter 1€. Gibts da einen 
vergleichbaren ARM?
> - Debugger/Programmer sind teuer
Braucht man eher selten. Dragon ist nicht wirklich teuer.
> - Die Möglichkeiten sind stark eingeschränkt.
Wenn man sie sowieso nicht braucht? Wenn man mehr Peripherie braucht 
kann man den Xmega nehmen.

Für Leistungshungrige Projekte kann man Arms nehmen. Für das meiste 
andere sind Avrs doch ideal.

von Michael (Gast)


Lesenswert?

Hallo David,

ich verstehe deine Hintergründe und bin noch einmal konstruktiv:
Es sind definitiv zu viele Klicks nötig, um in der Codesammlung dahin zu 
kommen, wo man hinmöchte - reduzieren ist dringend nötig (gab da glaube 
ich mal eine Regel beim Websitebau, möglichst alle Infos mit 2 Klicks 
erreichen zu können... oder warens 3? Sind hier jedoch 4 bis zum Ziel, 
wenn man den Klick auf die Codesammlung mitrechnet (den ich wg. des 
Links ja nicht hatte bzw. der durch den Link ja represäntiert wurde).

Vorschlag: Mache ATMega8 und 16 als Überschrift und zähle darunter auf 
(so groß ist die zahl der Unterkapitel ja nicht) oder, wenn größer 
werdend, lasse die zugehörigen Kapitel aufklappen bei Klick auf den 
Controller, ist zumindest besser als so (ja, wieder nur (m)eine Meinung)

Zum anderen sind zwischen Code und Signalplot (+ Erklärung) leider ab 
und an Unstimmigkeiten:
"ATMega16 Timer0 Normal" ->
  - DDRA wird genutzt, Kommentar sagt "Set PB3 as Output" (Code 
verwendet PORTA und DDRA, wäre also damit zu rechnen der Kommentar ist 
falsch)
  - Bei der Legende zum Plot wird auch von "PB0" und "PB1" gesprochen, 
PA0 und 1 dürften gemeint sein

Ich gehe nicht alle Seiten durch, diese Unstimmigkeit ist aber auch 
anderweitig zu finden (noch bei ATMega8->Timer0 Overflow -> hier 
sprichst du beim Plot nur von "P0" ohne A, B, ... (hier wäre "PB0" 
angebracht :) )
Die restlichen Fehler darfst du selbst suchen, du weißt ja jetzt, worauf 
du schauen musst :)

Viel Spaß noch weiterhin
MFG

von Peter S. (petersp)


Lesenswert?

Hallo David,

auf der Startseite befindet sich im Beispielprogramm ein Fehler. In 
Zeile 11 muss es PORTC heißen denke ich.

Servus
Peter

von KIM-1 (Gast)


Lesenswert?

Hallo David,

gratuliere daß du den Mut hast etwas zum Atmega vorzustellen. Die Art 
mit den Bildern finde ich sehr gut, speziell bei den Servos und Laser 
Tausch.

Laß dir die Seite nicht madig machen. Ich lach mich immer krumm, wenn 
die "Experten" behaupten, der Mega8 ist zu klein, zu langsam und 
überhaupt...
Du mußt unbedingt Cortex u.a. verwenden, ist Schachsinn.

Der einzige Kritikpunkt wäre die Nichtnennung von USB-ISP oder ASP 
Programmierer. Kurze Programme, welche schnell erstellt werden müssen 
mache ich übrigens auch gerne per Bascom oder überhaupt in Assembler.

Ihr könnt die Chips-Tüte stecken lassen, es lohnt nicht. :-)

von David K. (kresley81)


Lesenswert?

Sieht so aus als hätte ich eine Diskussion losgetrete, welcher 
Controller der beste ist. Das war natürlich nicht meine Absicht ;-)

@Michael:
Danke für die Anregungen. Das mit der Tiefe der Seitenstruktur ist 
tatsächlich ein wichtiger Punkt. Moentan wteigen normale Besucher meiner 
Website über die avigation direkt in die richtige Unterkategorie, so 
dass an mit zwie Klicks in jeden Code kommt. Die Struktur, die oben in 
jeder Seite steht, erreicht man anfangs deshalb nur "von vorne her" und 
man kann sich, wenn man Lust hat in den Kategorien zurückklicken.
Aber schon bald gibt es zu viele Kategorien um sie in der Navigation 
eufzulisten. Dann muss ich in die Richtung gehen, die du vorgeschlagen 
hast.

Danke auch für die Erwähnung der kleinen Fehler.

@petersp
Äh, welche Startseite hat eine Codezeile 11? Die Codes sind nicht auf 
der Startseite. Aber ich werde den Fehler sicher finden, wenn ich 
demnächst sowieso jede Seite nochmals genau durchlese und kleine Fehler 
behebe. Die Programmcodes sind übrigens alle inzeln getestet. Relevante 
Fehler sollten köchstens in den Kommentaren vorkommen.

@KIM-1
Ja, andere Programmierer werde ich auch noch erwähnen. Ich bin eben ein 
alter STK-500 Hase und kenne gar nicht viel anderes ;-)

Liebe Grüsse an alle
David

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.