Forum: Mikrocontroller und Digitale Elektronik Einstieg in die µC-Welt


von Sören T. (5ever1n)


Lesenswert?

Guten Abend ins Forum!

Ich bräuchte mal euren Rat.
Für eine Hausarbeit soll ich mir eine Programmiersprache erarbeiten und 
ein entsprechendes Programm bzw. ein Projekt abgeben.
Wir haben uns im Seminar vor allem mit C beschäftigt und kleinere 
Programme für den PC geschrieben - das Übliche eben.
Ich kann mich für die Programmierung von reiner PC-Software aber nicht 
so recht begeistern. Das Ganze ist für mich gefühlt eine riesige 
Blackbox. So als ob man mit einem Satz Maulschlüssel und ohne Fachwissen 
Reparaturen an einem Spaceshuttle durchführen soll.

In der Berufsschule (E-Technik) haben wir mal das Thema µC und Assembler 
angerissen. Das fand ich - technisch betrachtet - deutlich transparenter 
und nachvollziehbarer. Das ganze wurde dann aber aufgrund des 
Zeitrahmens nicht weiter vertieft. Ich wollte mich bei Gelegenheit 
wieder in das Thema reinhängen - jetzt wäre ein guter Zeitpunkt.

Nun zu den eigentlichen Fragen:
In Sachen Assembler muss ich wahrscheinlich wieder von 0 anfangen, ein 
paar grundlegende C-Kenntnisse sind da. Ich suche nun einen 
Projektvorschlag auf Basis eines µC (z.B. ATmega) für einen Zeitraum von 
1-2 Monaten, dass für einen Quasi-Anfänger realistisch ist. Der 
Lerneffekt soll dabei nicht zu kurz kommen.

Ich kann das leider schlecht einschätzen, kann mich aber erinnern, dass 
schon eine genaue Uhr nicht so harmlos war wie es auf den ersten Blick 
aussah.

Meine spontanen Ideen waren:
Eine Wetterstation, die ein paar Messwerte (Luftfeuchte, Temperatur, 
Luftdruck etc) aufnimmt, aufbereitet, verarbeitet und speichert

oder auch ein einfacher stackbasierter UPN-Taschenrechner mit den vier 
Grundoperationen, Potenzfunktionen und trigonometrischen Funktionen.

Wäre so etwas realistisch und angemessen oder habt ihr noch Vorschläge?

Jetzt noch die Frage ob ich mit Assembler anfangen sollte oder bei C 
bleiben soll. Beides führt sicherlich zur Lösung, C ist sicherlich vom 
Aufwand her deutlich effektiver, bei Assembler ist der Lerneffekt aber 
sicherlich größer und ich hab es als "interessanter" in Erinnerung. Ich 
hoffe ihr könnt mir helfen :)
Viele Grüße und einen schönen Abend!

von Andreas H. (Gast)


Lesenswert?

Sören T. schrieb:
> Wäre so etwas realistisch und angemessen oder habt ihr noch Vorschläge?

Nimm die Uhr ;)

Nicht weil Du den Rest nicht hinkriegen würdest aber Du unterschätzt den 
Zeitaufwand (wass auch völlig normal ist).

Nimm C.

Assembler ist sicher technisch sehr anschaulich. Aber Du musst viel 
"tiefer" in die CPU-Architektur einsteigen als es Dein Zeitrahmen 
zulässt.

Wenn Dich das interessiert kannst Du die Uhr auch später (!) noch einmal 
in Asm bauen. Dann hättest Du ja auch schon ein "Muster" :)

Hth
Andreas

von Volker S. (vloki)


Lesenswert?

1-2 Monate mit welchem Tagespensum?

Persönlich fände ich so was wie die Wetterstation mit der Kommunikation 
mit  Sensoren und der Verarbeitung und Speicherung und Anzeige der Werte 
wesentlich sinnvoller, als das ein eher softwarelastiges Taschenrechner 
Projekt.

von Stefan F. (Gast)


Lesenswert?

Alle Mikrocontroller sind in C programmierbar, mit Assembler brauchst Du 
Dich nicht zu beschäftigen. Von Elektronik-Entwicklung hast du 
vermutlich noch keine Ahnung.

Deine Wetterstation und der Taschenrechner sind für den Zeitrahmen zu 
hoch gegriffen.

Schau Dir das mal an, da sind ein 5 einfache Projekte für geringe Kosten 
drin: http://stefanfrings.de/mikrocontroller_buch2/index.html

Danach kannst du abschätzen, ob Du Dir mehr zutraust.

Vielleicht hängst du noch ein OLED Display (mit SSD1306 Controller) an 
den Mikrocontroller und beschäftigst Dich mit dem Thema "Tastenmatrix", 
dann kommst du deinen Projektideen schon etwas näher.

von Lotta  . (mercedes)


Lesenswert?

genau,
Nimm die Uhr.

Das Taschenrechnerprojekt ist in ASM nichts für Anfänger,
wenn er mehr als 1+1 rechnen soll. ;-)

Denk dabei an die Double Variablen und das
Mathepaket in Assembler...

mfg

von Stefan F. (Gast)


Lesenswert?

Andreas H. schrieb:
> Nimm die Uhr ;)

~Mercedes~  . schrieb:
> genau,
> Nimm die Uhr.

http://stefanfrings.de/binaeruhr/index.html
Nur so zur Inspiration - aber nicht den Quelltext abschreiben!

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


Lesenswert?

Sören T. schrieb:

> In Sachen Assembler muss ich wahrscheinlich wieder von 0 anfangen,

Wenn's nicht die gleiche Architektur ist, die du schon einmal hattest, 
fängst du ohnehin für jede wieder von fast 0 an beim Assembler.

> Ich suche nun einen
> Projektvorschlag auf Basis eines µC (z.B. ATmega) für einen Zeitraum von
> 1-2 Monaten, dass für einen Quasi-Anfänger realistisch ist. Der
> Lerneffekt soll dabei nicht zu kurz kommen.

Nimm dir irgendeinen Arduino-Clone als Hardware.

Musst ja nicht die Arduino-IDE benutzen, wenn dir deren 
Software-Framework schon zu "blackboxig" ist.

> Ich kann das leider schlecht einschätzen, kann mich aber erinnern, dass
> schon eine genaue Uhr nicht so harmlos war wie es auf den ersten Blick
> aussah.

Die genaue Uhr ist deshalb nicht so harmlos, weil es nicht ganz einfach 
ist, eine passende genaue Zeitbasis zu bekommen. Übliche 08/15-Quarze 
weichen 10 ppm oder mehr ab, das ist etwa 1 Sekunde am Tag. (Das bezieht 
sich auf 32-kHz-Quarze; die hochfrequenten weichen meist noch mehr ab.)

Das kann man in Software korrigieren, indem man gewissermaßen 
"Schalt-Sekundenteile" einfügt.  Muss man natürlich für den Anfang auch 
noch nicht tun.

> Meine spontanen Ideen waren:
> Eine Wetterstation, die ein paar Messwerte (Luftfeuchte, Temperatur,
> Luftdruck etc)

Also mindestens zwei Sensoren.  Feuchtigkeit und Temperatur gibt's 
üblicherweise in einem (z.B. SHT21), Temperatur und Luftdruck auch (z.B. 
MPL115).

> aufnimmt, aufbereitet, verarbeitet und speichert

Worauf speichern?

SD-Karten-Interface ist nochmal zusätzlicher Aufwand. Es gibt natürlich 
wieder einiges an Opensource-Code dafür, aber dann bist du wieder 
schnell an dem Punkt, dass du nicht mehr jedes Bit verstanden hast.

> oder auch ein einfacher stackbasierter UPN-Taschenrechner mit den vier
> Grundoperationen, Potenzfunktionen und trigonometrischen Funktionen.

Worauf gibt der seine Ausgaben aus?  Seriell?  Dann brauchst du 
zumindest einen RS-232-USB-Wandler.  Ansonsten ist das natürlich noch 
einfach, ja.

> Jetzt noch die Frage ob ich mit Assembler anfangen sollte oder bei C
> bleiben soll. Beides führt sicherlich zur Lösung, C ist sicherlich vom
> Aufwand her deutlich effektiver,

So ist es.  Gefühlt Faktor 1:10.

> bei Assembler ist der Lerneffekt aber
> sicherlich größer

Jein.  All den Hardware-Ansteuer-Kram hast du in beiden fast gleich.

Spätestens, wenn deine Sensoren Gleitkomma-Arithmetik brauchen, damit 
man ihnen sinnvolle Ergebnisse entlocken kann, brichst du dir in 
Assembler entweder einen ab, oder musst dir wieder Leute suchen, die 
Bibliotheken dafür geschrieben haben.
1
  uint8_t results[4];
2
3
  barometer_read(0, 4, results);
4
  unsigned padc = (results[0] << 2) + (results[1] >> 6);
5
  unsigned tadc = (results[2] << 2) + (results[3] >> 6);
6
7
  double pcomp = a0 + (b1 + c12 * (double)tadc)
8
  * (double)padc + b2 * (double)tadc;
9
  double pressure = pcomp * ((115 - 50) / 1023.0) + 50;

Das ist beispielsweise die Umrechnung der Rohdaten des MPL115 in 
Kilopascal …

von c-hater (Gast)


Lesenswert?

Sören T. schrieb:

> Jetzt noch die Frage ob ich mit Assembler anfangen sollte oder bei C
> bleiben soll. Beides führt sicherlich zur Lösung, C ist sicherlich vom
> Aufwand her deutlich effektiver

Das gilt nur, wenn du C tatsächlich schon kannst (was ich mal stark 
bezweifeln würde).

Fakt ist: Bei kleinen µC (speziell AVR8) hast du den Assembler formal 
vollständig erlernt, viele Monate bevor du C formal vollständig erlernt 
hast.
Das geht nämlich im Gegensatz zu C innerhalb weniger Stunden bis Tage. 
Bei C hast du in der Zeit nichtmal die einschlägige Bibel auch nur 
durchgelesen, geschweige denn verstanden...

von S------- R. (simonr)


Lesenswert?

Sören T. schrieb:
> oder auch ein einfacher stackbasierter UPN-Taschenrechner mit den vier
> Grundoperationen, Potenzfunktionen und trigonometrischen Funktionen.
>
> Wäre so etwas realistisch

Du wirst dich noch nie so geirrt haben !

Uhr ist gut und auch die Wetterstation ist OK - dann musst du dich eben 
mehr mit der Peripherie ärgern.

µC erreichen bald 500MHz und haben Speicher zum Abwinken. Weiterhin 
optimieren Compiler besser denn je. Deine Lebenszeit und 
Frustrationsgrenze sind aber immernoch begrenzt.
Ich bin da ganz Liberal und jeder kocht sein Süppchen aber ich habe bei 
aktuellen µCs sehr schnell viel interessanteres entdeckt als das 
Bedürfnis Assembler zu lernen. RTOS, DSP-Funktionen, Übergang zu FPGAs 
u.s.w.

: Bearbeitet durch User
von Lotta  . (mercedes)


Lesenswert?

Ja!
Die Uhr von Stefanus ist geil!

Schreib die Firmware von Stefanus ab,
verbesser sie und veröffentliche dann
Deine verbesserte Version!
Nur so kannst Du von "alten Hasen" lernen! ;-P ;-))

mfg

von Andreas H. (ahz)


Lesenswert?

~Mercedes~  . schrieb:
> Ja!
> Die Uhr von Stefanus ist geil!
>
> Schreib die Firmware von Stefanus ab,
> verbesser sie und veröffentliche dann
> Deine verbesserte Version!
> Nur so kannst Du von "alten Hasen" lernen! ;-P ;-))

(So, jetzt auch mal angemeldet ;)

Ja, halte ich auch für eine sinnvolle Vorgehensweise (und die Uhr ist 
wirklich niedlich, Stefan :D). Im Zweifelsfall reicht aber auch eine 
normale 4-stellige 7Seg Anzeige.

Wichtig für den Lerneffekt: Du musst die Software komplett (!) verstehen 
wenn Du die schon "klaust".
Noch besser komplett selber schreiben, was am Anfang aber SEHR schwer 
ist.
(Es ist immer süss zu sehen wie die "alten Hasen" das immer 
unterschätzen)

Wenn Du später (!) noch mal Asm probieren willst geht das mit diesem 
Prozessor auch noch ziemlich gut. Ich würde aber nicht damit  anfangen. 
Mach erst mal eine C Version.

Hth
Andreas

von Sören T. (5ever1n)


Lesenswert?

Vielen Dank für eure zahlreichen Hinweise!

Andreas H. schrieb:
> Nimm die Uhr ;)
>
> Nicht weil Du den Rest nicht hinkriegen würdest aber Du unterschätzt den
> Zeitaufwand (wass auch völlig normal ist).
>
> Nimm C.
>
> Assembler ist sicher technisch sehr anschaulich. Aber Du musst viel
> "tiefer" in die CPU-Architektur einsteigen als es Dein Zeitrahmen
> zulässt.
>
> Wenn Dich das interessiert kannst Du die Uhr auch später (!) noch einmal
> in Asm bauen. Dann hättest Du ja auch schon ein "Muster" :)
>
> Hth
> Andreas

Die Uhr scheint mir auch einigermaßen angemessen - ich muss mal schauen 
ob das der Dozent, anhand der Aufgabenstellung, auch so sieht - ohne den 
Quelltext zu kennen. Wie gesagt: "Uhr" hört sich einfacher an als es 
ist.
Das reizt mich vom Thema aber weniger als die Wetterstation. Schön wäre 
ja ein persönlicher Nutzen.

Volker S. schrieb:
> 1-2 Monate mit welchem Tagespensum?
>
> Persönlich fände ich so was wie die Wetterstation mit der Kommunikation
> mit  Sensoren und der Verarbeitung und Speicherung und Anzeige der Werte
> wesentlich sinnvoller, als das ein eher softwarelastiges Taschenrechner
> Projekt.

Ich würde mal vorsichtige 2 h/d ansetzen. Es ist ja "nur" eine 
Hausarbeit. Die Softwarelastigkeit wäre prüfungstechnisch ein Argument 
für den Rechner. Mit dem Elektronikdrumherum kann ich leider nicht 
direkt punkten. Bewertet wird letzten Endes das Programm - es muss 
allerdings auf seiner Plattform funktionieren.

@Stefanus F: Vielen Dank für deine Vor- und Ratschläge. Ich werde gleich 
mal reinschauen!

Jörg W. schrieb:
> Nimm dir irgendeinen Arduino-Clone als Hardware.
>
> Musst ja nicht die Arduino-IDE benutzen, wenn dir deren
> Software-Framework schon zu "blackboxig" ist.

Den hab ich hier schon liegen - und habe mit der Arduino-IDE schon etwas 
Erfahrung. Hier ist natürlich der große Vorteil, dass viele Projekte gut 
dokumentiert sind, und ich quasi am Objekt lernen kann. Mit einem 
Arduinoprojekt wollte ich das Fach letztes Jahr schon einmal belegen 
(war eine kleine Maschinensteuerung). Dank umfangreicher Bibliotheken 
war das eigentliche Problem zwar schnell erschlagen, aber nur wenig 
Code vorzeigbar. Ich hab es deswegen zurückgezogen. Auch aus diesem 
Grund dachte ich an Assembler - um quantitativ was aufs Papier bringen 
zu können ;-)

Jörg W. schrieb:
> Worauf speichern?
>
> SD-Karten-Interface ist nochmal zusätzlicher Aufwand. Es gibt natürlich
> wieder einiges an Opensource-Code dafür, aber dann bist du wieder
> schnell an dem Punkt, dass du nicht mehr jedes Bit verstanden hast.

Die Speicherung sollte eigentlich intern erfolgen. Ausgabe (z.B. 
durchschnittliche Temperatur) sollte dann über ein LC-Display oder 
einfacher über eine 7-Segmentanzeige erfolgen.

Jörg W. schrieb:
> Worauf gibt der seine Ausgaben aus?  Seriell?  Dann brauchst du
> zumindest einen RS-232-USB-Wandler.  Ansonsten ist das natürlich noch
> einfach, ja.

Hier dachte ich ebenfalls an eine einzeilige Ausgabe durch ein 
LC-Display oder eine Reihe von 7-Segment-Anzeigen oder einen 
VFD-Display. Zur Komplexität gibt es hier unterschiedlich Aussagen ;-)
Zu Assembler: Ich lesse hier schon recht deutlich raus: Für eine 
Prüfungsleistung sollte ich diese Sprache erst einmal beiseite legen. 
Danke für deinen Hinweis - eine Sackgasse weniger in die ich mich 
verrennen kann.

c-hater schrieb:
> Das gilt nur, wenn du C tatsächlich schon kannst (was ich mal stark
> bezweifeln würde).
>
> Fakt ist: Bei kleinen µC (speziell AVR8) hast du den Assembler formal
> vollständig erlernt, viele Monate bevor du C formal vollständig erlernt
> hast.
> Das geht nämlich im Gegensatz zu C innerhalb weniger Stunden bis Tage.
> Bei C hast du in der Zeit nichtmal die einschlägige Bibel auch nur
> durchgelesen, geschweige denn verstanden...

Ich kann natürlich nicht von mir behaupten c "zu können". Ich nehme 
stark an, dass man das erst nach langer professioneller Anwendung - oder 
durch sehr engagierte Ausübung im Hobby - sagen kann. Es geht ja auch 
eher darum auch mit beschränkten Wissen zu brauchbaren -wenn auch 
kleinen- Ergebnissen zu kommen. Programmierung ist nicht mein 
Fachgebiet. Aber ich habe (hoffe ich doch) auch bescheidenere Ansprüche 
als ein Entwickler der wirklich mit dieser Materie vertraut ist.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

Sören T. schrieb:
> Die Uhr scheint mir auch einigermaßen angemessen - ich muss mal schauen
> ob das der Dozent, anhand der Aufgabenstellung, auch so sieht - ohne den
> Quelltext zu kennen. Wie gesagt: "Uhr" hört sich einfacher an als es
> ist.
> Das reizt mich vom Thema aber weniger als die Wetterstation. Schön wäre
> ja ein persönlicher Nutzen.

Du darfst das Thema ja beliebig auswalzen. Von einer einfachen, 
freilaufenden Uhr hin zu einer Uhr mit DCF-77 Empfänger. Dann noch einen 
oder mehrere Alarmzeiten dazu. Das Abspielen einer Melodie als Wecker 
(oder "Happy Birthday" als Geburtstagserinnerung?). usw. usf.

Ebenfalls nützlich: ein Müllkalender, der daran erinnert, welche 
Mülltonne wann rauszustellen ist. Das natürlich mit einem "ewigen" 
Kalender, der immer das richtige Datum incl. Wochentag anzeigt.

von Alex D. (daum)


Lesenswert?

Sören T. schrieb:
> Den hab ich hier schon liegen - und habe mit der Arduino-IDE schon etwas
> Erfahrung. Hier ist natürlich der große Vorteil, dass viele Projekte gut
> dokumentiert sind, und ich quasi am Objekt lernen kann. Mit einem
> Arduinoprojekt wollte ich das Fach letztes Jahr schon einmal belegen
> (war eine kleine Maschinensteuerung). Dank umfangreicher Bibliotheken
> war das eigentliche Problem zwar schnell erschlagen, aber nur wenig
> Code vorzeigbar. Ich hab es deswegen zurückgezogen. Auch aus diesem
> Grund dachte ich an Assembler - um quantitativ was aufs Papier bringen
> zu können ;-)

AVR ohne die Arduino Bibliotheken in C zu programmieren ist auch ganz 
anders als Arduino. Bei Arduino ist die Hardware zu gut wie möglich 
hinter den Libraries weg abstrahiert, was zwar den Einstieg erleichtert, 
aber man lernt so nicht wirklich vieles über die Hardware.

Ich würde dir auch empfehlen das Projekt in C zu programmieren, der 
Aufwand ist geringer, da der Compiler viele Denkaufgaben übernimmt, man 
muss sich auch nicht in das (zwar kleine) Instruction Set des Prozessors 
einarbeiten.

Du musst auch nicht C vollständig verstanden haben, klar ist ein 
grundsätzliches Verständnis nötig, aber für ein eher kleine Projekt ist 
es nicht unbedingt wichtig den ganzen C Standard zu kennen.

von Axel S. (a-za-z0-9)


Lesenswert?

Sören T. schrieb:
> Jörg W. schrieb:
>> Nimm dir irgendeinen Arduino-Clone als Hardware.
>>
>> Musst ja nicht die Arduino-IDE benutzen, wenn dir deren
>> Software-Framework schon zu "blackboxig" ist.
>
> Den hab ich hier schon liegen - und habe mit der Arduino-IDE schon etwas
> Erfahrung ...
> Dank umfangreicher Bibliotheken
> war das eigentliche Problem zwar schnell erschlagen, aber nur wenig
> Code vorzeigbar. Ich hab es deswegen zurückgezogen. Auch aus diesem
> Grund dachte ich an Assembler

Du kannst das Arduino-Board natürlich auch in Assembler programmieren. 
Wenn du dir das zutraust oder mit der Uhr zu schnell fertig bist - mach 
den Taschenrechner in Assembler. Fließkomma und mindestens Wurzelziehen 
sollte dann aber schon drin sein.

von Manfred (Gast)


Lesenswert?

Alex D. schrieb:
> Bei Arduino ist die Hardware zu gut wie möglich
> hinter den Libraries weg abstrahiert, was zwar den Einstieg erleichtert,
> aber man lernt so nicht wirklich vieles über die Hardware.
>
> Ich würde dir auch empfehlen das Projekt in C zu programmieren, der
> Aufwand ist geringer, da der Compiler viele Denkaufgaben übernimmt,

Dein Text kommt mir widersprüchlich rüber. Natürlich ist beim Arduino 
(und nicht nur da) die Hardware abstrahiert, da man per Hochsprache 
programmiert und den Rest dem Compiler überlässt.

Genau das ist doch aber das Ziel, von der Hardware entkoppelt 
programmieren zu können?

Sören sagt am Anfang, dass er sich mit C beschäftigt habe - dann wäre 
Arduino doch genau das, wo er sein Vorwissen einbringen kann!

von Alex G. (dragongamer)


Lesenswert?

Naja, C abstrahiert die Hardware mehr als ASM, aber deutlich weniger als 
wenn man das Arduino Framework nutzt!

von Rolf M. (rmagnus)


Lesenswert?

Manfred schrieb:
> Genau das ist doch aber das Ziel, von der Hardware entkoppelt
> programmieren zu können?

Nein, er hat geschrieben, dass er keine Lust auf PC-Programmierung hat, 
weil ihm das zu viel Blackbox ist und er das in der Tiefe verstehen 
will. Deshalb lieber bare metal. Und dann soll er auf dem µC 
ausgerechnet das Framework einsetzen, das es sich zum Ziel gemacht hat, 
alles so weit wie möglich wegzuabstrahieren?

So wie ich das sehe, gibt's hier zwei eher gegensätzliche Ziele: 
Einerseits möchte Sören gerne lernen, wie es "hinter den Kulissen" 
funktioniert, andererseits bekommt er für diesen Teil nachher keine 
Punkte.
Die Zeit ist auch ziemlich knapp bemessen: 1 bis 2 Monate mit 2 Stunden 
pro Tag. Also 1 bis 2 Wochen Vollzeitäquivalent. Das ist praktisch 
nichts, gerade wenn man das nicht als erfahrender Profi macht, sondern 
dabei erst noch lernen muss, wie es geht. Ich halte da alles, was über 
eine einfache Uhr hinaus geht, für illusorisch.
Und was hier noch gar nicht angesprochen wurde: Was ist denn mit der 
Hardware? Lötkenntnisse sind vorhanden? Elektronikkenntnisse? Soll das 
ganze nachher als fliegender Aufbau gezeigt oder ordentlich in ein 
Gehäuse eingebaut werden?

von Stefan F. (Gast)


Lesenswert?

Zu einer Wetterstation gehört für mich, dass sie mindestens das Wetter 
für morgen anhand eines mehr oder weniger bescheuerten 
Schätz-Algorithmus anzeigt. Dazu benötigt sie eine Uhr.

Damit sind wir wieder bei der Uhr.

Du könntest damit anfangen, einen STM32 mit OLED Display (SSD1306) 
auszustatten und darauf die Uhrzeit anzeigen. Darauf kannst du aufbauen 
und je nach Lust folgendes Hinzufügen:

- Anzeige von Sensorwerten (angefangen mit der Temperatur)
- Synchronisation mit DCF-77 oder über Internet (ESP8266)
- Speicherung von Protokollen auf SD Karte
- Fernbedienung über Smartphone (ESP8266)

Dazu ein paar Tips aus meiner Praxis-Erfahrung:

Die klassischen Arduino Modelle (mit AVR Mikrocontroller) haben zu wenig 
Speicher, um Grafikfähige Displays anzusteuern. Für 7-Segment Anzeigen 
und Text-LCD mit integriertem Zeichensatz reicht es aber.

Die klassischen Arduino Modelle haben keine ausreichend genaue 
Uhr/Taktquelle. Du wirst eine RTC anschließen müssen, zum Beispiel 
DS1302. Anders ist das beim STM32F103, der hat eine Uhr mit passabler 
Genauigkeit integriert.

Der ESP8266 hat sehr viel Speicher und kann daher problemlos HTML Seiten 
generieren. Er schwächelt aber beim ADC (sehr ungenau) und hat nur 
wenige Schnittstellen. Für analoge Sensoren taugt der nicht, aber in 
Kombination mit einem seriellen ADC (MCP3208, PCF8591) kannst du 
ausreichend genau messen. Sensoren mit digitalen Schnittstellen sind 
meist anspruchsvoller zu programmieren, dafür kann man bei der 
Elektronik weniger falsch machen.

Wenn es Dir erlaubt ist, die Hardware auf ein Minimum zu reduzieren, 
dann könntest du so ein Wifi Kit 8 Board 
(http://stefanfrings.de/esp8266/index.html#wifikit8) verwenden und daran 
digitale Sensoren mit I²C oder SPI Interface hängen. Die RTC in diesem 
Board/Chip ist sehr ungenau, aber dank Internet Anbindung ist die 
Synchronisation mit dem Internet einfach.

Hier mal ein primitives Beispiel, wie beim ESP8266 mit Arduino die 
Uhrzeit per HTTP in Textform abrufen und auf einem OLED Display anzeigen 
kann:
1
    // Configure WIFI
2
    WiFi.mode(WIFI_STA);
3
    WiFi.begin("meineSSID", "meinPasswort");
4
    
5
    // Wait for connection to the AP
6
    while (WiFi.status() != WL_CONNECTED) 
7
    {  
8
        delay(1);
9
    }
10
11
    ...
12
13
    // Connect to the server
14
    if (client.connect("ptb.de", 80)) 
15
    {       
16
        // Sent HTTP request
17
        client.print(F("GET / HTTP/1.1\r\n"));
18
        client.print(F("Host: ptb.de\r\n"));
19
        client.print(F("Connection: close\r\n\r\n"));
20
        
21
        // receive the HTTP response
22
        bool foundDate=false;
23
        while (client.connected())
24
        {
25
            buffer[0]=0;
26
            append_until(client,buffer,sizeof(buffer),'\n');
27
            
28
            // Find the Date header and display its value, example:
29
            // Date: Tue, 18 Dec 2018 09:35:00 GMT
30
            if (strstr(buffer, "Date: "))
31
            {
32
                foundDate=true;
33
                
34
                // Skip the header name (Date:)
35
                char* date=buffer+6;
36
                
37
                // Split the string into date and time parts at the 4th space
38
                char* time=date;
39
                int count=0;
40
                while (*time)
41
                {
42
                    if (*time==' ')
43
                    {
44
                        count++;
45
                        if (count==4)
46
                        {
47
                            *time=0;
48
                            time++;
49
                            break;
50
                        }
51
                    }
52
                    time++;
53
                }
54
             
55
                // Display date and time
56
                display.scroll_up(8,20);
57
                display.draw_string(0,24,date); // Tue, 18 Dec 2018
58
                display.scroll_up(8,20);
59
                display.draw_string(0,24,time); // 09:35:00 GMT
60
                display.display();
61
                break;
62
            }
63
        }
64
   
65
        if (!foundDate)
66
        {
67
            display.scroll_up(8,20);
68
            display.draw_string_P(0,24,PSTR("No date received"));
69
            display.display();
70
        }
71
    }
72
    else
73
    {
74
        display.scroll_up(8,20);
75
        display.draw_string_P(0,24,PSTR("Connect failed"));
76
        display.display();
77
    }
78
    
79
    // Disconnect
80
    client.stop();

Wenn du jetzt noch einen kleinen Aufsatz über die Lebensdauer von OLED 
schreibst und dazu erklärst, dass du das Display (mittels Fototransistor 
als Sensor) auf möglichst geringe Helligkeit dimmst oder nur bei Bedarf 
(mittels PIR Bewegungsmelder) einschaltest, bekommst du sicher noch 
einen Pluspunkt.

Jetzt habe ich aber genug vorgesagt.

Jetzt hast du ein paar Namen und Nummern zu Googlen, mit den Teilen 
lässt sich sicher auch in kurzer Zeit etwas anfangen.

von doppelschwarz (Gast)


Lesenswert?

Als Einstieg finde ich das Spiel Senso sehr gut:
https://de.wikipedia.org/wiki/Senso_(Spiel)
Benötigt nicht allzu viele Teile (4 Taster, 4 verschiedenfarbige LEDs 
und einen Lautsprecher/Buzzer) und man lernt die grundlegenden Sachen, 
die man später immer wieder brauchen kann. Das schöne daran ist, wenn 
man es nach einiger Zeit aus der Schublade zieht hat man immer noch Spaß 
daran. Allerdings gibt es dafür vermutlich keine fertige Hardware zu 
kaufen.

von Stefan F. (Gast)


Lesenswert?

doppelschwarz schrieb:
> Als Einstieg finde ich das Spiel Senso sehr gut

Habe ich in meinem Assembler-Tutorial 
http://stefanfrings.de/avr_workshop/index.html

ich würde aber dennoch dazu raten, für's Erste etwas in C zu 
programmieren.

von Udo K. (Gast)


Lesenswert?

Ein Mikrocontroller macht nur Sinn, wenn du Sensoren dranhängst.

Ansonsten ist es ein reines Softwareprojekt, das auf dem PC
besser aufgehoben ist.

Arduino macht keinen Sinn, wenn du die Hardware verstehen willst.

Wenn du für später was lernen möchtest, nimm ein Arm Cortex M4 oder M7
Entwicklungsboard.

Da gibt es von den Herstellern auch Beispiele zu den Entwicklungsboards.
Mit denen kannst du schnell starten, und die sind auch nahe an der 
Hardware.

Assembler macht keinen Sinn, ausser wenn es um punktuelle
Optimierungen geht.  Bleib bei C, das kannst du auch später
noch brauchen.

Temperatursensoren haben die Boards schon alle eingebaut, such
dir einen Druck und Feuchtesensor raus, der mit I2C betrieben wird,
und übertrage die Werte auf das LCD oder auf die serielle Schnittstelle.
Das ist in 3-4 Wochen sicher machbar.

Grüße,
Udo

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


Lesenswert?

Udo K. schrieb:

> Arduino macht keinen Sinn, wenn du die Hardware verstehen willst.

Wieso das denn? Die Hardware ist schließlich gut genug dokumentiert.

> Wenn du für später was lernen möchtest, nimm ein Arm Cortex M4 oder M7
> Entwicklungsboard.

Für eine Arbeit von 2 Monaten? Finde ich deutlich überambitioniert.

> Da gibt es von den Herstellern auch Beispiele zu den Entwicklungsboards.
> Mit denen kannst du schnell starten, und die sind auch nahe an der
> Hardware.

Da nimmst du aber wieder ihren vorgefertigten Kram (HAL, ASF oder 
dergleichen) und hast nichts selbst daran gebaut an der Software.

von Stefan F. (Gast)


Lesenswert?

Ich habe bei dem obigen ESP822 Code-Beispiel die append_until Funktion 
vergessen:
1
/**
2
 * Sammle eine Zeile Text ein.
3
 * Rufe diese Funktion wiederholt auf, bis sie true zurück gibt. Dann hast
4
 * du eine Zeile im Puffer. Wenn die Zeile nicht in den Puffer passt, wird
5
 * sie abgeschnitten.
6
 *
7
 * @param source Der Quell-Stream.
8
 * @param buffer Der Ziel-Puffer, muss bereits mit '\0' terminiert sein.
9
 * @param bufSize Größe des Ziel-Puffers.
10
 * @param terminator Das letzte Zeichen, das gelesen werden soll, normalerweise '\n'.
11
 * @return True wennn das terminierende Zeichen erreicht wurde.
12
 */
13
bool append_until(Stream& source, char* buffer, int bufSize, char terminator)
14
{
15
    int data=source.read();
16
    if (data>=0)
17
    {
18
        int len=static_cast<int>(strlen(buffer));
19
        do
20
        {
21
            if (len<bufSize-1)
22
            {
23
                buffer[len++]=static_cast<char>(data);
24
            }
25
            if (data==terminator)
26
            {
27
                buffer[len]=0;
28
                return true;
29
            }
30
            data=source.read();
31
        }
32
        while (data>=0);
33
        buffer[len]=0;
34
    }
35
    return false;
36
}

Ich bevorzuge diese Funktion gegenüber der String Klasse, weil sie nicht 
so viel auf dem Heap herum fuhrwerkt und daher weniger Anfällig für 
Head-Fragmentierung ist.

von Stefan F. (Gast)


Lesenswert?

>> Da gibt es von den Herstellern auch Beispiele zu den Entwicklungsboards.
>> Mit denen kannst du schnell starten, und die sind auch nahe an der
>> Hardware.

Jörg W. schrieb:
> Da nimmst du aber wieder ihren vorgefertigten Kram (HAL, ASF oder
> dergleichen) und hast nichts selbst daran gebaut an der Software.

Sehe ich auch so. Der TO hatte genau aus diesem Grund bereits das 
Arduino Framework ausgeschlossen.

von Axel Zocker (Gast)


Lesenswert?

Sören T. schrieb:
> Wäre so etwas realistisch und angemessen oder habt ihr noch Vorschläge?

Schwebende Kugel, sieht magisch aus aber ist Pillepalle:
https://youtu.be/HFEub994ybU?t=202

Da kannst auch gleich behaupten, das das nur in Assembler schnell genug 
regelt.



Oder was mit Musik ;-)
https://www.youtube.com/watch?v=ZM4-de57VZ0

ob allerdings 2 Monate reichen 8 Floppydrives aufzutreiben ...

von Udo K. (Gast)


Lesenswert?

Stefanus F. schrieb:
>>> Da gibt es von den Herstellern auch Beispiele zu den Entwicklungsboards.
>>> Mit denen kannst du schnell starten, und die sind auch nahe an der
>>> Hardware.
>
> Jörg W. schrieb:
>> Da nimmst du aber wieder ihren vorgefertigten Kram (HAL, ASF oder
>> dergleichen) und hast nichts selbst daran gebaut an der Software.
>
> Sehe ich auch so. Der TO hatte genau aus diesem Grund bereits das
> Arduino Framework ausgeschlossen.

Viele der mitgelieferten Beispiele sind sehr Hardwarenahe.

Da ist dann nur eine Funktion dazwischen,
die die Hardwareregister mit vordefinierten Konstanten
zur Initialisierung schreibt, oder Daten vom SPI Fifo abholt.
Diese Schicht ist praktisch nur zur Dokumentation da,
damit man keine unleserlichen reg = 0xf000 Werte schreibt,
sondern reg = SPI0_SET_MASTER

Von TI gibt es um wenig Geld etwa die MSP432E401 Entwicklungsboard.
Der Chip hat eine Etheret Schnittstelle mit integrierter PHY.
Da läuft ein Webserver drauf, der ohne OS gut funktioniert.

Die Ausgabe der Luftfeuchte und Temperatur könnte man über den Webserver
machen. Das ganze ist relativ geradlinig aufgezogen, und wäre auch
ein nettes Projekt für eine Wetterstation, die im Internet abrufbar ist.

Auf jeden Fall ist die Inbetriebnahme so eines Boards in 2-3
intensiven Wochen gut machbar.
In der Zeit kann man ein Beispiel zum Laufen bringen,
dass I2C oder SPI ansteuert, und die Werte der ageschlossenen
Sensoren in einer Webseite darstellt.

Die Idee von Arduino ist doch, dass man sich eben nicht mit
HW auseinandersetzen muss, oder habe ich dass falsch verstanden?

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


Lesenswert?

Udo K. schrieb:
> Der Chip hat eine Etheret Schnittstelle mit integrierter PHY.

Genau das Richtige, um für den Einstieg die Hardware tiefgründig 
verstehen zu lernen. >:-}

> Die Idee von Arduino ist doch, dass man sich eben nicht mit
> HW auseinandersetzen muss, oder habe ich dass falsch verstanden?

Das heißt doch aber im Umkehrschluss noch lange nicht, dass man sich 
eben deshalb nicht auch mit der Hardware auseinandersetzen kann – 
indem man eben das Arduino-Framework weglässt, und auf diese Weise eine 
preiswerte Hardware in vielfältigen Varianten zugreifen kann.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

Udo K. schrieb:
> Die Idee von Arduino ist doch, dass man sich eben nicht mit
> HW auseinandersetzen muss, oder habe ich dass falsch verstanden?

Ich glaube, die Idee von Arduino ist, dass man sich mit der gesamten 
Technik nicht wirklich auseinander setzt. Man stöpselt was zusammen, 
schreibt 20 Zeilen Kleber-Code und fertig ist die "Entwicklung".

von Udo K. (Gast)


Lesenswert?

Ja, genau das ist das Richtige,
denn man kann damit heute relevantes und nützliches bauen.

Hilft ja nichts, wenn man es bis zum letzten Bit vesteht,
und keinen interessiert es, weil sich die Welt weiterdreht.

Und man ist damit noch sehr nahe an der Hardware dran, und kann
die Schritte der Send_Ethernet_Packet() Funktion bis zur Ausgabe
in das FIFO des Ethernet Kontrollers relativ einfach nachvollziehen.

Und manchmal muss man auch sagen, ok ich verstehe das im Prinzip,
aber die Details hebe ich mir für später auf.

von Axel Zocker (Gast)


Lesenswert?

Udo K. schrieb:
> Und manchmal muss man auch sagen, ok ich verstehe das im Prinzip,
> aber die Details hebe ich mir für später auf.

Wenn der TO sich nicht jetzt während seiner Ausbildung in der Hausarbeit 
mit technischen Details auseinandersetzt, dann ist es zu spät.

Ein Student  des Bauingenieurswesen baut auch keine Brücken aus Lego und 
verschiebt die technischen Details auf später. Naja in Genua lief es 
vielleicht genau so ...

von Stefan F. (Gast)


Lesenswert?

Axel Zocker schrieb:
> aja in Genua lief es vielleicht genau so ...

Ich habe eher verstanden, dass in Genua Jahrelang die Mängelberichte der 
Techniker von dem Betreiber ignoriert wurden.

von Udo K. (Gast)


Lesenswert?

Die benötigten Details verschieben sich aber mit der Zeit...

In den 50'er wusste ein guter Techniker noch über jede Lötverbindung
Bescheid.

In den 70'ern noch über jeden Transistor.

In den 80'ern noch über jeds Bit des Mikrocontrollers.

Heute vielleich noch über die Anzahl der Prozessoren...
und wenn er gut ist, über die eingebaute Peripherie.

Die Technik ist einfach viel komplexer geworden!

Schau dir doch so einen 7 Euro Arm Chip an...
da ist mehr Rechenleistung und weit komplexere Peripherie drinnen,
als in meinem ersten PC.

Und ich muss sagen, es gefällt mir :-)

Es ist einfach super, wie einfach so ein Arm M4 sich in C
programmieren lässt.
Und wenn man mal eine floating Point Multiplikation braucht,
macht man sie halt einfach.
Das ist eine gut durchdachte C freundliche Architektur.

Ich vermisse die Zeiten der 8 Bitter nicht mehr :-)

von Axel Zocker (Gast)


Lesenswert?

Stefanus F. schrieb:
> Axel Zocker schrieb:
>> aja in Genua lief es vielleicht genau so ...
>
> Ich habe eher verstanden, dass in Genua Jahrelang die Mängelberichte der
> Techniker von dem Betreiber ignoriert wurden.

Das war ein Witz!


 Udo K. seufzte:
> Die benötigten Details verschieben sich aber mit der Zeit...
Nein es ist immer noch wichtig in der Ausbildung zu lernen welche Fehler 
man selber macht und wie man diese durch Test/Prüfung erkennt und 
behebt.

Bei der Verwendung von Idiotensicheren Programmierumgebung lernt man 
sowas nicht, sondern bleibt Idiot.
Prüfung bestanden und doch nicht fit fürs Berufsleben …..

von Udo K. (Gast)


Lesenswert?

Heute ist man eher nicht mehr fit fürs Berufsleben,
wenn man sich in den Details verrennt.

Das hat nichts mit Idiotie zu tun, sondern mit einem
Paradigmenwechsel.

Heute ist es wichtiger relativ blind und mit Vertrauen
auf andere Module und SW-Komponenten aufzubauen.

Andernfalls wirst du mit der Arbeit nicht fertig.

Axel Zocker schrieb:
> Udo K. seufzte:
>> Die benötigten Details verschieben sich aber mit der Zeit...
> Nein es ist immer noch wichtig in der Ausbildung zu lernen welche Fehler
> man selber macht und wie man diese durch Test/Prüfung erkennt und
> behebt.
>
> Bei der Verwendung von Idiotensicheren Programmierumgebung lernt man
> sowas nicht, sondern bleibt Idiot.
> Prüfung bestanden und doch nicht fit fürs Berufsleben …..

Das ist doch Blödsinn.

Heute muss man im Berufsleben viel mehr auf der Arbeit anderer aufbauen,
als früher.
Dazu braucht man eine andere Herangehensweise und Vertrauen in die 
Arbeit
anderer.   Wenn man sich in den Details verliert, wird man einfach
nicht mit seiner Arbeit fertig...

von doc Brown (Gast)


Lesenswert?

Der TO hat doch erwähnt, dass es für seine Hausarbeit primär auf 
Software ankommt und er gerne was mit uc machen möchte. Dieses Plus an 
Hardware aber vermutlich gar keine nennenswerte Berücksichtigung für die 
Benotung gibt.

Warum diskutiert ihr vor dem Hintergrund denn über die Register-Kenntnis 
und Arduino-Abstraktion.
Im Grunde ist doch eine Arduino HW und sogar Arduino Framework ideal. 
Wenn der TO eine eigene anständige Software beisteuert ist das doch 
genau das was er braucht?!
Arduino do-what-I-want um die Hardware in Betrieb zu nehmen (das klappt 
bei 2h/d und wenig eigener Codebasis/Erfahrung sowiso nicht) und eigene 
Klassen zur Benotung.

Klärt mich auf, wenn ich das zu nüchtern/erwachsen betrachte.

von Arno (Gast)


Lesenswert?

Stefanus F. schrieb:
> Udo K. schrieb:
>> Die Idee von Arduino ist doch, dass man sich eben nicht mit
>> HW auseinandersetzen muss, oder habe ich dass falsch verstanden?
>
> Ich glaube, die Idee von Arduino ist, dass man sich mit der gesamten
> Technik nicht wirklich auseinander setzt. Man stöpselt was zusammen,
> schreibt 20 Zeilen Kleber-Code und fertig ist die "Entwicklung".

Und eine halbe Million Leute posten dann die gleichen 20 Zeilen 
Kleber-Code (oder mal auch 19 oder 21) in ihren Blogs, auf irgendwelchen 
Webseiten oder machen Youtube-Videos dazu. Wer dann etwas tiefer 
einsteigen will, hat viel Spaß bei der Suche, all diese 
"Einsteiger-Tutorials" auszufiltern.

Allerdings könnte Arduino trotzdem (bzw. genau aus dem Grund, den Udo 
nennt) die richtige Umgebung für dich, Sören, sein - du 
willst/sollst/darfst ja ein Programmier-Projekt machen, kein 
Elektronik-Projekt, wenn ich dich richtig verstehe. Da hilft es 
sicherlich, wenn du dir weniger Gedanken um Spannungsversorgung, 
Programmieranschluss, Debug-Ausgabe machen musst sondern einfach ein 
Arduino-Board (oder ein NodeMCU-Board) an den PC oder eine Powerbank 
ansteckst.

MfG, Arno

von Rolf M. (rmagnus)


Lesenswert?

Udo K. schrieb:
> Dazu braucht man eine andere Herangehensweise und Vertrauen in die
> Arbeit anderer.   Wenn man sich in den Details verliert, wird man einfach
> nicht mit seiner Arbeit fertig...

Und wenn sich dann rausstellt, dass diese Arbeit anderer nicht 
funktioniert, ist man hoffnungslos aufgeschmissen.
Man läuft auch, wenn man nicht zumindest einigermaßen versteht, wie 
dieses Ding intern funktioniert, Gefahr, es anders zu benutzen als 
gedacht und dadurch extrem ineffizienten Code zu produzieren.
Man muss nicht alles selber machen, aber man muss ein grundlegendes 
Verständnis dafür haben, wie es funktioniert.

von Axel Zocker (Gast)


Lesenswert?

Udo K. schrieb:
>> Bei der Verwendung von Idiotensicheren Programmierumgebung lernt man
>> sowas nicht, sondern bleibt Idiot.
>> Prüfung bestanden und doch nicht fit fürs Berufsleben …..
>
> Das ist doch Blödsinn.

Nö blutiger Ernst.

> Heute muss man im Berufsleben viel mehr auf der Arbeit anderer aufbauen,
> als früher.

Nö, auch der Ingenieur bei Borsig hat nicht jede Schraube selbst 
gefeilt. Aber er wusste worauf es beim feilen ankommt und wie man 
schlechte Schrauben von guten unterscheidet und nur die guten geprüften 
in die lok verbaut.... Arbeitsteilung kannten schon die Alten Ägypter.

> Dazu braucht man eine andere Herangehensweise und Vertrauen in die
> Arbeit
> anderer.

Was du hier als "Vertrauen in die Arbeit anderer" umschreibst, ist 
schlicht die Verleugnung der Eigene Verantwortung für das 
Gesamtergebnis.
Es heisst immer noch "Vertrauen ist gut, Kontrolle ist besser". Und "Was 
nicht getestet ist, funktioniert auch nicht".
Deshalb ist es wichtig das man die grundlegenden Tätigkeiten wenigstens 
in der Ausbildung von vorn bis hinten durchexeziert hat. Dann muss man 
auch nicht blind darauf Vertrauen das die Kollegen wie Roboter keine 
Fehler machen, sondern sieht schon auf den ersten Blick in welchen 
Abgrund das Projekt rast...
Klar kann man es sich einfach machen und das eigene Scheitern immer auf 
schlechte Zuarbeiten schieben, dem Abgrund ist das egal, der schluckt 
alles.

von c-hater (Gast)


Lesenswert?

Udo K. schrieb:

> Ein Mikrocontroller macht nur Sinn, wenn du Sensoren dranhängst.

Das ist ein doch sehr beschränkte Sicht der Dinge...

> Assembler macht keinen Sinn, ausser wenn es um punktuelle
> Optimierungen geht.

Auch das ist eine sehr beschränkte Sicht der Dinge...

von Udo K. (Gast)


Lesenswert?

@ Axel

Natürlich stimmt das alles, was du schreibst.
Ich sage da ja auch nichts Gegenteiliges.

Du kannst aber ein grösseres Projekt nicht so aufziehen,
wie ein kleines 1-Mannprojekt..

Ein wichtiger Punkt ist da auch die eigene Einstellung dazu,
und wie du die Arbeit anderer siehst.
Es braucht in einem grösseren Projekt klare Schnittstellen.

Im Fall der Schrauben wohl eine DIN Festigkeitsklasse.
Gefeilt hat da aber wohl nie einer dran.

Meiner Erfahrung nach haben Informatiker da einen klaren
Vorteil gegenüber Elektrotechnikern.
Die lernen einfach von Anfang an den Umgang mit
grossen komplexen Systemen, und arbeiten viel
mehr im Team.  Zumindest früher war das so.

Beitrag #5663257 wurde von einem Moderator gelöscht.
von Udo K. (Gast)


Lesenswert?

c-hater schrieb:
> Udo K. schrieb:
>
>> Ein Mikrocontroller macht nur Sinn, wenn du Sensoren dranhängst.
>
> Das ist ein doch sehr beschränkte Sicht der Dinge...
>
>> Assembler macht keinen Sinn, ausser wenn es um punktuelle
>> Optimierungen geht.
>
> Auch das ist eine sehr beschränkte Sicht der Dinge...

Aber eine realistische Sicht.  Hast du auch Argumente?

von Axel Zucker (Gast)


Lesenswert?

Udo K. schrieb:
> Meiner Erfahrung nach haben Informatiker da einen klaren
> Vorteil gegenüber Elektrotechnikern.
> Die lernen einfach von Anfang an den Umgang mit
> grossen komplexen Systemen,
> und wenn du da nicht eine Grenze ziehst, bis zu der
> du das ganze im Detail verstehen musst, bleibst du
> schnell auf der Strecke.

Ja das kenn ich zur Genüge, da krakehlt der Softie immer, "Das muss ein 
Hardwareproblem sein, weil die Software funktioniert, weil von mir"

Mancher ziehlt halt Grenzen um sich Mühe zu sparen.

von c-hater (Gast)


Lesenswert?

Udo K. schrieb:

> Es ist einfach super, wie einfach so ein Arm M4 sich in C
> programmieren lässt.
> Und wenn man mal eine floating Point Multiplikation braucht,
> macht man sie halt einfach.
> Das ist eine gut durchdachte C freundliche Architektur.
>
> Ich vermisse die Zeiten der 8 Bitter nicht mehr :-)

Aber auch beim M4 kann ich dir Projektziele vorgeben, die du in C nur 
schwer bis garnicht realisieren kannst, mit Asm aber schon...

Du hast einfach den Kern der Sache nicht begriffen: Asm hat IMMER 
zumindest das Potential das Optimum aus der Ziel-Hardware zu holen (es 
hängt nur vom Programmierer ab, ob er es denn auch tatsächlich schafft). 
C hingegen kann das bestenfalls im (mehr oder weniger selten 
eintretenden) Idealfall, im Regelfall kann es C aber NICHT. Das liegt 
an der Ebene, auf der die Optimierung arbeitet. Die hat keine Ahnung von 
der Gesamtanwendung und damit auch nicht davon, wie häufig eine Funktion 
eigentlich durchlaufen wird.

Wirklich optimal funktioniert die Optimierung nur in Code-Bäumen (ist 
allerdings auch dann oft noch leicht schlechter als handoptimierter 
Assemblercode, wobei sich der Assemblerprogrammierer gerade hier oft 
Arbeit spart, weil es einfach nicht lohnt, den letzten Takt aus Code zu 
quetschen, der (relativ) nur alle Jubeljahre mal ausgeführt wird).

Was sie aber garnicht kann, ist Optimerung von Code-Wäldern, also 
insbesondere im µC-Bereich die Optimierung von konkurrierenden ISRs. Das 
gibt das Konzept der Sprache einfach nicht her. Die Sprache weiss 
schlicht nichts über die relative Wertigkeit der konkurrierenden 
Codebäume und ist deshalb nicht in der Lage, die verfügbaren Resourcen 
zielgerichtet zur Optimierung zu verwenden. Der Assemblerprogrammierer 
hingegen kann das problemlos tun...

Genau das ist der Unterschied, den du NIEMALS wegbekommen wirst. Und 
der sehr oft den Unterschied zwischen "geht" und "geht nicht" ausmacht.

von Volker S. (vloki)


Lesenswert?

Stefanus F. schrieb:
> Habe ich in meinem Assembler-Tutorial

Das gab es doch mal bei Pollin ;-)
https://www.pollin.de/p/bausatz-pollin-spiel-i-810148

von Udo K. (Gast)


Lesenswert?

Phuuuu, was soll man den auf so was schreiben?

Ich bin ja kein asm-hater...  aber mir scheint, du schiesst übers Ziel
hinaus.
Du unterstellt mir da ja ziemlich viel,
ich gebe mal meinen Senf dazu...

>
> Du hast einfach den Kern der Sache nicht begriffen: Asm hat IMMER
> zumindest das Potential das Optimum aus der Ziel-Hardware zu holen (es
> hängt nur vom Programmierer ab, ob er es denn auch tatsächlich schafft).
> C hingegen kann das bestenfalls im (mehr oder weniger selten
> eintretenden) Idealfall, im Regelfall kann es C aber NICHT. Das liegt
> an der Ebene, auf der die Optimierung arbeitet. Die hat keine Ahnung von
> der Gesamtanwendung und damit auch nicht davon, wie häufig eine Funktion
> eigentlich durchlaufen wird.

Ich weiss nicht, wieso du meinst, dass ich den Kern der Sache
nicht begriffen habe...

Da stellt sich halt die Frage:  Was ist das Ziel?
Das ist allen Fällen - ausser vielleicht bei Wettbewerben - nicht,
den optimalsten Code zu schreiben, sondern die Funktionalität
in vernünftiger Zeit zu erreichen.
Ich möchte ja auch noch ein Privatleben haben :-)

Die Hardware und Software muss nicht die beste und schnellste sein.
Sie muss nur genügen, und das Ergebnis muss funktionieren.
Es gibt in der Technik und im Leben kein "ist am besten",
sondern nur "reicht aus" und "ist gut".

Vielleicht ist der Asm Code 1% schneller, na und?  Der Prozessor
ist sowieso nur zu 50% ausgelastet...  und der Programmierer
braucht für das 1% 2x so lange, das Program ist nicht wartbar,
und der Programierer kann nicht getauscht werden.

Assembler hat ein erstaunlich geringes Potential, schnelleren Code
zu schreiben.
Das geht meiner Erfahrung nach nur wenn der Prozessor spezielle
Befehle unterstützt, wie die Pentium SSE Erweiterungen, die der Compiler
nicht kennt.  Und die kapselt jeder gute Programmierer
einmal in eine Funktion, die von C aufgerufen werden kann,
und gut ist es.

Und spätestens, wenn der Nachfolgeprozessor rauskommt, der statt
einer 3 Stufigen Pipeline eine 5 Stufige hat, und bei dem der Cache
4-fach Assoziativ ist, etc. läuft dein superoptimierter
Asm Code langsamer, als der C Code, der neuübersetzt  auf den
neuen Prozessor angepasst ist.

Ich bin mir sicher, dass ich mit C in nahezu allen Fällen
den effizienteren Code scheibe.
Das grösste Optimierungspotential liegt meist sowieso in den 
Algorithmen.
Wenn ich eine N^2 Suche duch eine N*log(N) Suche ersetze,
dann kannst du den einzelnen Suchschritt so schnell machen wie du
nur willst, bei grossem N gewinnt trotzdem der optimale Algorithmus,
der wegen der grösseren Komplexität in C geschrieben wird.

Und hier ist der wichtigeste C Vorteil:  Es ist viel einfacher Struktur
und lesbare Namen in C reinzubringen, als in Assembler.
Guter C Code ist viel wartbarer, und portabler sowieso.


> Wirklich optimal funktioniert die Optimierung nur in Code-Bäumen (ist
> allerdings auch dann oft noch leicht schlechter als handoptimierter
> Assemblercode, wobei sich der Assemblerprogrammierer gerade hier oft
> Arbeit spart, weil es einfach nicht lohnt, den letzten Takt aus Code zu
> quetschen, der (relativ) nur alle Jubeljahre mal ausgeführt wird).

Du solltest dir mal den Assembler Code vom Gnu Compiler anschauen,
du wirst erstaunt sein, wie gut der ist.


> Was sie aber garnicht kann, ist Optimerung von Code-Wäldern, also
> insbesondere im µC-Bereich die Optimierung von konkurrierenden ISRs. Das
> gibt das Konzept der Sprache einfach nicht her. Die Sprache weiss
> schlicht nichts über die relative Wertigkeit der konkurrierenden
> Codebäume und ist deshalb nicht in der Lage, die verfügbaren Resourcen
> zielgerichtet zur Optimierung zu verwenden. Der Assemblerprogrammierer
> hingegen kann das problemlos tun...

Auch der Gnu Compiler unterstützt übrigens Profiling, damit werden
die Codezweige optimiert, die oft ausgeführt werden.

Oftmals weiss auch der Programmierer nicht genau,
welcher Codezweig am öftesten ausgeführt wird...

> Genau das ist der Unterschied, den du NIEMALS wegbekommen wirst. Und
> der sehr oft den Unterschied zwischen "geht" und "geht nicht" ausmacht.

Ich habe auch nie behauptet, dass mir das ein Anliegen ist...
Aber dein ganzes Szenario ist ziemlich krank.  Du versuchst hier
Fehler mit der Brechstange auszubügeln, die in einem früheren
Entwicklungsstadium gemacht wurden (Prozessor zu langsam, etc.)

von Saturn_1LT8 (Gast)


Lesenswert?

c-hater schrieb:
> Und
> der sehr oft den Unterschied zwischen "geht" und "geht nicht" ausmacht.

Wenn es gerade so geht, hast du den falschen µC ausgewählt!

Beitrag #5663341 wurde von einem Moderator gelöscht.
von Udo K. (Gast)


Lesenswert?

@ c-hater

Was hast du denn heute gegessen?

von Rolf M. (rmagnus)


Lesenswert?

Mach dir nix draus. Der schreibt sowas regelmäßig. Schon alleine die 
Wortwahl zeigt eindrucksvoll, was man davon zu halten hat.

von c-hater (Gast)


Lesenswert?

Saturn_1LT8 schrieb:

> Wenn es gerade so geht, hast du den falschen µC ausgewählt!

Wie kommst du denn darauf? Ich habe dann genau den ausgewählt, der 
wirklich optimal für die Anwendung geeignet ist.

von c-hater (Gast)


Lesenswert?

Rolf M. schrieb:

> Schon alleine die
> Wortwahl zeigt eindrucksvoll, was man davon zu halten hat.

Jaja, Hauptsache, sich an der Wortwahl hochziehen, dann kann man getrost 
die Fakten ignorieren...

von Saturn_1LT8 (Gast)


Lesenswert?

c-hater schrieb:
> Saturn_1LT8 schrieb:
>
>> Wenn es gerade so geht, hast du den falschen µC ausgewählt!
>
> Wie kommst du denn darauf?

Nicht auf Kante nähen. Reserven einplanen, etc..

Noch nie gehört?


Oder schreibst du code für sub 1$ Spielzeug in riesigen Stückzahlen?

von Stefan F. (Gast)


Lesenswert?

Und wieder hat c-hater eine Diskussion für SEIN Thema gekapert.

Ich schlage vor, dass wir ihn hier alleine versauern lassen. Und 
nächstes mal bitte nur auf C versus Assembler antworten, wenn er dazu 
seinen eigenen Thread eröffnet.

von Saturn_1LT8 (Gast)


Lesenswert?

c-hater schrieb im Beitrag #5663341:

>> Vielleicht ist der Asm Code 1% schneller, na und?
>
> Ich kann dir Anwendungen zeigen, in denen der Assemblercode mehr als
> 1000% schneller ist als eine naive C-Implementierung.

Ja, bitte zeig mal ein nicht triviale Anwendungen in Assembler.

Einzelne Unterfunktion um z.B. SIMD moderner CPUs/MCUs zu benutzen sieht 
man ja hin und wieder auf z.B. github aber ganze Anwendungen sind 
ungewöhnlich da:

NICHT PORTABEL

von Andreas H. (ahz)


Lesenswert?

Sören T. schrieb:
> Schön wäre ja ein persönlicher Nutzen.

Ich dachte, der persönliche Nutzen wäre es zu lernen?

Nimm (z.B.) das hier oft angepriesene Arduino Board, was Du ja 
anscheinend schon kennst.

0. Mach eine "Grobdoku". Wie soll die Uhr funktionieren? (Mehr Aufwand 
als Du erwartest aber nachher sehr nützlich ;)

1. Bastel eine (einfache!!!) Anzeige & 2 Taster dran. (Die Uhr will ja 
auch gestellt werden) und benutze alles (an Libs) was Du kriegen kannst 
um die Software zum laufen zu kriegen.

2. Schreib die Doku für die Schule fertig.

3. Mach 2. - Jetzt !!!

4. Nun kannst Du mit dem "Lernen" richtig anfangen:
Schreib die Software OHNE alle externen Libs. Da kommen jetzt Sachen wie 
z.B.
  - Tasten entprellen
  - Das Display (selber, ohne Libs) ansteuern
und diverser anderer "Kleinkram". Alles nicht schwer - beim ZWEITEN Mal 
;)

Aber erst jetzt fängst Du an in die Details der HW-nahen Programmierung 
einzusteigen. Andere haben sich ja hier schon vielfältig darüber 
ausgelassen, was Du jetzt noch alles einbauen kannst. Kannst, nicht 
musst^^


Mit dieser Methode kriegst Du Deine Arbeit rechtzeitig fertig (0-2) und 
kannst, wenn Du magst, auch noch tiefer einsteigen. Das ist dann aber 
freiwillig und gefährdet Deine eigentliche Aufgabe nicht mehr.

Denn, egal was Du für ein Projekt auswählst, wenn Du es nicht 
rechtzeitig fertig hast dann fällst Du durch. Wirst Du fertig, dann 
interessiert es keinen mehr. Denn Du wirst eher nichts machen was nicht 
schon 10000 mal gemacht wurde ;)

HtH
Andreas

von Andreas H. (ahz)


Lesenswert?

Udo K. schrieb:
> Heute muss man im Berufsleben viel mehr auf der Arbeit anderer aufbauen,
> als früher.
> Dazu braucht man eine andere Herangehensweise und Vertrauen in die
> Arbeit anderer.

Das ist komplett richtig und gleichzeit komplett falsch.

Bei komplexen Systemen geht nur noch Arbeitsteilung. Das ist korrekt.
Aber Vertrauen in die Arbeit anderer? Wo gibts denn sowas?

Alle mir bekannten Designflows setzen heute auf DURCHGÄNGIGE Prüfung, 
insbesondere auch auf Tauglichkeitsprüfung bei Zulieferungen.

Warum? Hier mal einer der diversen Klassiker (hab extra für Dich eine 
einfach lesbare Wiki Variante rausgesucht ;):

https://de.wikipedia.org/wiki/Ariane_V88

Und hier noch eine Summary des ESA Reports dazu

http://esamultimedia.esa.int/docs/esa-x-1819eng.pdf

von c-hater (Gast)


Lesenswert?

Saturn_1LT8 schrieb:

> Ja, bitte zeig mal ein nicht triviale Anwendungen in Assembler.

Jeder moderne Medienanwendung benutzt sowas. Du siehst das bloß nicht 
mehr, weil es eben von irgendeiner Lib weggekapselt wird. Aber der 
Sachverhalt bleibt: am Ende werkelt die Fähigkeit kompetenter 
Assemblerprogrammierer und macht den TATSÄCHLICH komplexen Job. Über 
dein bissel GUI-Geraffel (was du auch noch nichtmal wirklich selber 
machst) lachen die nur herzhaft.

Denn das ist eigentlich lächerlicher Kinderkram. Oft aber auch schon 
ordentlich komplex, ich will das jetzt nicht untertreiben, wer hätte 
nicht schon mit Anwendereingaben zu kämpfen gehabt, die in dem Moment 
einfach nur "kontraproduktiv" sein können, und die nur deshalb erfolgen, 
weil halt der Anwender sowieso von nix eine Ahnung hat und der Herr 
GUI-Programmierer versäumt hat, das entsprechende Eingabe-Gadget der von 
ihm gewählten GUI-Lib im richtigen Moment zu disablen, weil er halt auch 
keine Ahnung hat (oder im besten Fall auch nur einen Fehler gemacht hat, 
nobody is perfect)...

Sprich: mit solchen Leuten wie dir ist einfach keine wirkliche 
Kommunikation möglich, weil solche Leute niemals wirklich SELBER 
irgendetwas wirklich komplexes gemacht haben. Die haben immer nur die 
Leistungen anderer benutzt. Und nur im allerbesten Fall tun sie 
wenigstens dies auf kompetente Art und Weise, der Regelfall ist leider: 
Die haben auch nicht den Hauch einer Ahnung von dem Kram, den sie da 
benutzen...

Die meisten Desktop-"Programmierer" sind heute nur unwesentlich 
intelligenter als Endanwender. Genau das ist das Problem.

von Andreas H. (ahz)


Lesenswert?

Axel Zucker schrieb:
> Ja das kenn ich zur Genüge, da krakehlt der Softie immer, "Das muss ein
> Hardwareproblem sein, weil die Software funktioniert, weil von mir"

https://www.gesetze-im-internet.de/bgb/__227.html

(Sry, musste mal sein ;)

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


Lesenswert?

c-hater schrieb:
>> Ja, bitte zeig mal ein nicht triviale Anwendungen in Assembler.
>
> Jeder moderne Medienanwendung benutzt sowas.

Hör bitte endlich auf, diesen Thread zu kapern. Wenn du unbedingt deiner 
Religion frönen willst, dann mach das in einem eigenen Thread.

von svensson (Gast)


Lesenswert?

Moin,
meine unbedeutende Meinung:

Sehen wir es realistisch: Sich in Assembler einzuarbeiten ist in 2 
Monaten nahezu unmöglich, in ANSI-C aber schon. Zudem sind auch schon 
C-Vorkenntnisse vorhanden. Also: C.

In der kurzen Zeit ist Hardwareentwicklung ebenfalls unmöglich, daher 
muß ein Entwicklungsbord her. Einigermaßen kostengünstig wäre vermutlich 
nicht schlecht.

Ethernet, Wireless, RFID usw. sind viel zu komplex, um sie in der kurzen 
Zeit verstehen zu können, das wird auch so schon schwierig genug.

Ich würde dringend zu einem Arduino UNO raten und zwar samt Arduino-IDE. 
Das ist Hard- und Software aus einem Guss und das Ding läßt sich einfach 
per USB-Kabel programmieren. Wenn's mobil werden soll, läuft der auch 
mit einem 9V-Block. Kostet um die 20 Euro.

Als Projekt dann zunächst eine Real-Time-Clock DTS1302 anbinden und ein 
LCD-Display per I2C-Bus. Und gleich noch um einen Kalender erweitern. 
Und natürlich um eine Weckfunktion, samt Eingabe mittels mehrer Taster.

Wenn dann noch Zeit übrig ist,
- einen oder mehrere Temperatur/Feuchte-Sensor(en) DTH11 anbinden
- einen BMP180 digitalen Luftdrucksensor anbinden
- Alle Anzeigen im Wechsel.
- eine Beleuchtungssteuerung mit einem Schaltrelais, evtl. in 
Abhängigkeit von Uhrzeit und einem Fotowiderstand


BTW: m.W. beruhte das Spiel Senso auf einem 4-Bit TI-1000er-Serie

von Stefan F. (Gast)


Lesenswert?

Eine Uhr könnte man auch zur Zeitschaltuhr ausbauen.

Falls der Sören sich mit Web-Entwicklung auskennt, könnte er als 
besonderes Extra Feiertage wie Sonntage behandeln, indem er die Termine 
der Feiertage aus dem Internet holt.

Dann hat man gleich eine plausible Begründung, warum es nicht einfach 
fertig gekauft hat - gibt's nämlich in der Form nicht.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Stefanus F. schrieb:
> indem er die Termine der Feiertage aus dem Internet holt.

Die festen Feiertage sind bekannt, die variablen Tage kann man komplett 
berechnen, siehe Osterformel.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

Frank M. schrieb:
> die variablen Tage kann man komplett berechnen

Das wusste ich nicht. Umso attraktiver dürfte dieses "Zusatzfeature" 
(Feiertage=Sonntage) sein, falls die Uhr irgend etwas schaltet oder 
jemanden weckt.

von svensson (Gast)


Lesenswert?

Das mit den Feiertagen ist eine coole Idee! Habe ich bisher auch noch 
nirgendwo gesehen.

Entweder per Formel oder einfach für die nächsten 25 Jahre fest codieren 
(quick and dirty), danach will man ja auch 'mal eine neue Uhr 
verkaufen...

von Martin H. (horo)


Lesenswert?

Und nicht vergessen, per Geolocation das zu Bundesland erkennen, die 
haben (in DE) unterschiedliche Feiertage mit deutlichem Nord-Süd-Gefälle 
(besser gesagt -Anstieg).

Beitrag #5666055 wurde von einem Moderator gelöscht.
Beitrag #5666127 wurde von einem Moderator gelöscht.
Beitrag #5666142 wurde von einem Moderator gelöscht.
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.