PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Biete Job Suche Nachhilfeunterricht über skype (Jugendliche bevorzugt)



frankensteins-freund
29.08.2011, 18:01
Hey,

Ich bin auf der Suche nach einer Art "Nachhilfeunterricht" für die ATMEL- programmierung mit C über skype. Es ist so, dass ich versuchte mir die Atmel-Programmierung selbst bei zu bringen, allerdings scheiterte dieser Versuch nach 2 Stunden, da im web überall mit einem zu hohen niveau eingestiegen wird, sodass ich nicht mitkomme.

Mein Stand:
Ich kann garnichts! Außer 1x, da habe ich einen 2313 mit einem Programm via pony prog beschrieben.

Meine Vorbereitungen:
Ich Habe einen PC, ein Paar 2313 und die Programmierkarte dazu. Der "Lehrer" sollte mir dann programme zum schreiben empfehlen

Ich Erwarte:
Der Lehrer sollte mich wenn möglich soweit bringen, dass ich am schluss ein programm schreiben kann, welches in der praxis ein blinklicht steuert. meine Anforderungen sind daher nicht hoch, Der "lehrer" muss deswegen auch nicht unbedint ein profi sein.

Der "Lehrer" bekommt:
Die Anzeige sollte sich Hauptsächlich an Schüler richten, die sich etwas dazuverdienen wollen. Über die Vergütung wird man sich dann schon einig. Bezahlen würde ich die stunden am liebsten per Paypal, damit der Lehrer immer gleich die Vergütung hat. Wann die stunden stattfinden kann man immer mit mir absprechen.

Meldet euch einfach mal per PN, wenn ihr interesse an dem kleinen job habt ;)

Mit freundlichen Grüßen
M.Huber

markusj
29.08.2011, 18:39
Hi,

Vorschlag meinerseits: Wenn das ganze nicht (wegen Schule oder so) eilt, lass uns doch ein kleines öffentliches Projekt hier im Forum draus machen, quasi eine Art Lehrgang der dann eben auch auf all die Probleme eingehen kann, über die du so gestolpert bist!
Ich würde gerne bei sowas über Chat und hier im Forum mitmachen und denke, dass auch andere davon profitieren könnten.

Ach ja, ohne Gegenleistung dann!

mfG
Markus

PS: Was du dazu natürlich offenlegen müsstest wäre der Schaltplan deiner vorhandenen Hardware

frankensteins-freund
29.08.2011, 19:23
Hey,

Ja das Klingt gut, aber problem wäre dann die Fülle an informationen, die ich benötigen würde. ich meine, ich habe wirklich nirgendwo im web etwas gefunden, wo wirklich für den Kompletten einsteiger etwas geboten ist. es ist ja so, dass ich wirklich garnichts kann. ich weis nicht, wie eine c- datei aussieht, weis nicht, was es mit hex- dateien auf sich hat.

In sämtlichen Seiten wird dargestellt, wie man eine solche datei schreibt, aber wirklich exakt auf jedes zeichen eingegangen wird nirgendwo.


Vorschlag meinerseits: Wenn das ganze nicht (wegen Schule oder so) eilt, lass uns doch ein kleines öffentliches Projekt hier im Forum draus machen, quasi eine Art Lehrgang der dann eben auch auf all die Probleme eingehen kann, über die du so gestolpert bist!
Ich würde gerne bei sowas über Chat und hier im Forum mitmachen und denke, dass auch andere davon profitieren könnten.

--> Ehrlich gesagt ich zweifle daran, aber wenn sowas möglich wäre, wäre das natürlich gut. selbstverständlich würde ich mich bereit erklären, so gut wie möglich daran zu arbeiten. Ich selbst bin seit 2 Monaten ausgelehrt und habe vorerst keine weiterbildung, sodass ich dafür in nächster Zeit auch etwas von meiner Zeit zusprechen könnte. Allerdings bräuchte ich auch wirklich den zuspruch und die aktive Hilfe von anderen Mitgliedern im forum!

Kampi
29.08.2011, 19:38
Also ich kann die ein wenig bei C helfen, wenn du Hilfe brauchst. Ich bin selber noch dabei C zu lernen sowohl für AVRs als auch für andere Chips. Ich würde dir auch kostenlos helfen und im Notfall hätte ich noch einen Kollegen den man bei schwereren Problemen fragen kann :D
Wenn du Interesse haben solltest melde dich ruhig per PN. Vielleicht kann man dann auch mal hier was im Forum schreiben falls Interesse besteht :) dann würde ich das wohl alles aufschreiben. Gibt niemand besseres der sagen kann ob ein Tutorial gut ist als einer der es lernen will.

frankensteins-freund
29.08.2011, 19:45
Hey Kampi,

na auf das Angebot gehe ich natürlich gleich ein! du bekommst eine nachricht per PN

Wenn noch jemand helfen möchte, nur zu!

MfG
Michael

-schumi-
29.08.2011, 20:25
Ich fang mal an :-)



ich weis nicht, wie eine c- datei aussieht
In einer C-Datei steht der Quellcode für deinen Attiny2313. Das ist also der Code, den der Controller das ausführt, hier kannst du sagen was der Controller dann machen soll.

Damit du diese Datei bearbeiten und so die Befehle für deinen Controller schreiben kannst brauchst du einen Editor. Aber Word, LibreOffice und solche Sachen fallen hier raus, die sind für was anderes gedacht (Briefe mit Bildern, Überschriften und so Zeug).

Was du brauchst ist ein Editor, der Einfach nur einen Text schreibt. Ganz ohne Überschriften usw. Und wenn du Windows hast, findest du so einen sogar schon vorinstalliert: Unter Zubehör ist das Notepad. (Unter Linux/bzw. Ubuntu der Texteditor/Gedit oder so).

Der kann einfach nur stupide Text schreiben.

Damit man den Text aber besser lesen kann und noch viele andere Funktionen hast (wie z.B. Suchen und ersetzen, automatische Vervollständigung von Wörtern usw.) solltest du was anderes als dieses schnöde Notepad verwenden.

Ein Kanditat währe z.B. Geany. Der ist vollkommen kostenlos, auf Windows und Linux (und warscheinlich auch OSX) zuhause und bietet viele tolle Funktionen zum Programmieren. Downloaden kannst du den hier: http://www.geany.org/Download/Releases#windows
(http://www.geany.org/Download/Releases#windows)Unter Linux ist der bei der jeweiligen Distribution in der Paketverwaltung selbstversändlich enthalten.

Jetzt klickst du erst einmal auf "Neu" (ganz links, das Blatt mit dem grünen Plus).

Da kommt jetzt dein Quellcode rein. Am besten du kopierst mal folgendes rein:


int main (void)
{
while(1);
return 0;
}

Das ist das Gründgerüst eines jeden C-Programms, aber dazu später mehr ;-)

Und jetzt gehst du mal auf "Datei" -> "Speichern unter". Am besten du legst dir auf dem Desktop einen Ordner mit dem Namen "mein_erstes_2313-Programm" (oder sowas) an. Da drin speicherst du das Dokument dann als "main.c".

Und wie dir jetzt vielleicht auffällt verfärbt Geany jetzt einige Wörter mit Farben. Das nennt sich Syntaxhighlighting und dient der besseren Lesbarkeit. Außerdem erkennt man so Tippfehler einfacher (Wenn ein Wort entgegen der Erwartungen nicht/falsch eingefärbt wird).

So, jetzt hast du ne schnöde main.c und die muss irgendwie auf deinen 2313. Jetz gibts allerdings noch ein Problem: Wenn du dir den Text in Geany mal ansiehst sind das vorwiegend englische Wörter die mehr oder weniger sinn Ergeben (Am Anfang warscheinlich eher weniger^^).

Der 2313 kann aber kein Englisch, desshalb muss man das Programm übersetzen. Da nimmt man sich aber kein Wörterbuch, sondern ein Programm das das ganze für einen übernimmt. Das Programm nennt sich "Compiler". Und davon gibts ziemlich viele, aber du solltest einen bestimmten benutzen: den AVR-GCC. Der ist ebenfalls von vorn bis hinten FreeWare und auch OpenSource.

Der braucht aber auch noch ein paar Bibliotheken, und dann noch ein bischen hiervon und ein bischen davon.., am besten du klatscht dir ein fertiges Paket auf die Festplatte: http://sourceforge.net/projects/winavr/files/WinAVR/20021111/ (Die bin-install.exe)
Falls du Linux hast brauchst du folgende Pakete: "avr-libc" und "gcc-avr", der rest sollte schon drauf sein.

So, jetzt ist die Ansteuerung des Compilers aber nicht ganz einfach, desshalb nimmt man sich ein makefile zuhilfe. Ich hab dir in den Anhang eins reingepackt (Musst die .zip entpacken!). Das schmeist du einfach in den selben Ordner wie deine main.c.

Damit der das jetzt übersetzt musst du folgendes machen: Öffne ein Terminal (unter Windows Start -> Ausführen -> cmd.exe) und gehe in den Ordner mit der main.c, das geht so:
Am Anfang bist du irgendwo (Bei Linux in deinem Heimverzeichnis, bei Windows weis ich es nicht)
mit "cd Desktop" wechselst du in den Ordner "Desktop", mit "cd .." kannst du in den übergeordneten Ordner springen. Mit "dir" unter Windows/ "ls" unter Linux kannst du dir den Ordnerinhalt anzeigen lassen.

Irgendwann wirst du dann hoffentlich in dem Ordner mit der main.c und dem makefile angelangt sein. Dann gibst du in das Terminal "make all" ein. Das heißt, der Compiler soll dir die main.c jetzt gefälligst in eine für den 2313 verständliche Sprache übersetzen.

Und das sollte er dann nach möglichkeit auch machen, sprich es läuft ne Menge Text vorbei und es sollte am Ende kein "Error" oder sowas stehen.

Und weil das ganze mit dem cd und dem Terminal relativ umständlich ist, kann man in Geany auch Buttons/Shortcuts mit diesen Aufgaben belegen:
Geh mal auf "Erstellen" -> "Kommandos zum erstellen konfigurieren" (die main.c muss geöffnet sein!). Und für das Kompilieren (ganz oben) ist auch schon irgendwas mit GCC eingetragen, aber wir schnalzen da das "make all" rein. Also den Inhalt der Zelle löschen und "make all" reinschreiben. Außerdem muss bei "Arbeitsverzeichnis" "%d" eingtragen werden, damit er den Befehl auch im richtigen Ordner ausführt.

Dann das ganze mit "OK" bestätigen. In der Symbolleiste oben hast du eine blaue Pyramide von der aus ein gelber Pfeil auf eine rote Kugel zeigt. Wenn du da drauf klickst sollte er jetzt kompilieren (In dem Fenster ganz unten siehst du dann den selben Text wie vorhin in dem Terminal). Es kann sein dass eine Fehlermeldung ähnlich "all muss nicht ausgeführt werden" oder so kommt. D.h. er kompiliert jetzt nicht nochmal, weil du ja deinen Quellcode noch garnicht verändert hast. Du kannst da z.B. einfach ein Leerzeichen bei deinem Text hinzufügen und wieder wegmachen, speichern, und dann sollte er wieder kompilieren.

Jetzt solltest du in deinem Ordner jede Menge weiteres Geraffel vorfinden, das du da nicht reingeschmissen hast. Das hat alles der Compiler erzeugt. Und da drunter sollte auch irgendwo eine main.hex sein. Und die ist jetzt deine übersetzte main.c. Und die versteht der Controller jetzt auch, d.h. die muss nur noch irgendwie in den Controller rein. Und das kannst du jetzt z.B. mit PonyProg machen, wie du es ja schon einmal gemacht hast.

Wenn der Controller dann fertig programmiert ist macht er - oh wunder - rein garnichts^^. Das liegt daran, dass im Quellcode noch nichts zum ausführen steht, ist ja nur das Grundgerüst. Was der dann machen soll muss noch zum Quellcode dazu, aber das kommt später.

Wenn du das soweit geklappt hat hast du die erste große Hürde eh schon überwunden, dann kanns mit C lernen losgehen ;-)
(Siehe Kampis Angebot 2 Beiträge weiter oben, hehe :cheesy:)


Hoffe das hilft weiter.

Viele herzliche Grüße und viel Erfolg
-schumi-

[EDIT] Verdammt, doch glatt das makefile vergessen^^

frankensteins-freund
29.08.2011, 21:07
:D und ich hab verzweifelt die makefile gesucht :D

Edit: "make all" geht bei mir auf windoof7 dann nicht? was ist da falsch?

-schumi-
29.08.2011, 21:31
Was kommt für eine Fehlermeldung? (Am besten den gesamten Terminalinhalt hier in Codeblock reinkopieren)

frankensteins-freund
29.08.2011, 21:54
Microsoft Windows [Version 6.1.
Copyright (c) 2009 Microsoft Co

C:\Users\Michael>cd desktop

C:\Users\Michael\Desktop>cd test1

C:\Users\Michael\Desktop\test1>make all
Der Befehl "make" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

C:\Users\Michael\Desktop\test1>

Was habe ich falsch gemacht?

-schumi-
29.08.2011, 22:22
Eieiei, da fehlt noch ein Programm. Unter Linux ist das "make" nämlich absolut kein Problem, aber Windows kennt das natürlich nicht einfach so...

Ich bin jetzt davon ausgegangen, dass WinAVR das dazuinstalliert... Hast du denn nach der installation neu gestartet, damit das dämliche Windows die globalen Pfade endlich übernimmt (Das aktualisiert das immer nur beim Hochfahren:|)

Ansonsten musst du noch das da dazuinstallieren: http://gnuwin32.sourceforge.net/packages/make.htm
(http://gnuwin32.sourceforge.net/packages/make.htm)(Ob das jetzt genau funktioniert weis ich nicht, hab schon lange kein Windows mehr)

Und dann Neustart nicht vergessen :-D

frankensteins-freund
29.08.2011, 23:03
hey, ich habe das make update draufgespielt, rechner neu gestartet. die sache mit dem "make all" geht aber immer noch nicht.

MfG
Michi

markusj
30.08.2011, 13:22
Falls du das verlinkte Make installiert hast: Wirf es wieder runter.
Du brauchst WinAVR, das ist ein ganzes Programmpaket welches unter anderem den bereits von Schumi erwähnten Compiler (AVR-GCC) sowie verschiedene weitere Werkzeuge beinhaltet. Außerdem kommt mit Programmers Notepad (das ich nie genutzt habe) auch noch ein mächtigerer Texteditor mit.

Um Schumis Ausführungen noch etwas zu ergänzen:
Dein AVR versteht eine eigene Sprache aus Nullen und Einsen. Dein Computer versteht eine andere Sprache, die sogenannten Maschinenbefehle sind bei jeder Prozessorfamilie anders ausgestaltet. Die Aufgabe des Compilers besteht jetzt darin, deinen Programmcode in Maschinencode zu übersetzen, was er in mehreren Schritten macht. Das bereits erwähnte Makefile steuert diesen Prozess, indem es dem Programm "make" sagt, welche Dateien benötigt werden. Am Ende hast du ein HEX-File, das im Endeffekt den Maschinencode enthält.

Zur C-Programmierung:
Rechner sind dumm, sie machen nur genau das was du ihnen sagtst, und kein bisschen mehr. Sie können nicht hellsehen und sind furchtbar versessen auf Regeln nach denen sie arbeiten können. Wenn dein Code nicht tut was du willst, hast du vermutlich eine der Regeln verletzt oder dich missverständlich/falsch ausgedrückt.
Die Ausführung von Programmen erfolgt normalerweise eine Zeile nach der anderen, das ist der sogenannte Programmfluss. An einer definierten Stelle geht die Ausführung los (das ist main()) und folgt von da an deinen Anweisungen. Du kannst über sogenannte Fallunterscheidungen Bereiche deines Programmes überspringen und mit Schleifen bestimmte Stellen wiederholen. Um nicht alles hintereinander schreiben zu müssen gibt es Unterprogramme, sogenannte Prozeduren oder Funktionen, die häufig benutzte Abläufe zusammenfassen können. Gibst du den Befehl eines solchen Unterprogramms ein, wird dieses gestartet und nach Beendigung wird normal weitergearbeitet.

Solche Vorgänge lassen sich in Flussdiagrammen darstellen, ich habe Mal ein Beispielbild mit einer Fallunterscheidung und einer Schleife angehängt. Jedes Rechteck steht dabei für eine Reihe von Anweisungen die hintereinander ausgeführt werden, die Raute für eine Fallunterscheidung. Pfeile zeigen den Programmfluss. Solche Diagramme sind nützliche Werkzeuge um sich im Voraus darüber Gedanken zu machen, wie dein Programm ablaufen soll.

mfG
Markus

Richard
30.08.2011, 17:51
Dein AVR versteht eine eigene Sprache aus Nullen und Einsen. Dein Computer versteht eine andere Sprache, die sogenannten Maschinenbefehle


Sehr schön erklärt, aber Nullen und Einsen SIND Maschinen Befehle....:-) :-) :-) Du meinst vermutlich "Menonics" wie LDI, STR oder ähnliches?

Gruß Richard

frankensteins-freund
30.08.2011, 18:25
Hey Richard,

Ich weis, du meinst es nur gut, aber wie gesagt, genau solche ausdrücke wie "Menonics, LDI oder STR" sollten dann auch erklärt werden und nicht nur hingeschrieben werden, sodass es eben der "Idiot" versteht.

Noch eine frage: Wie muss man sich zum beispiel einen "2313" vorstellen zum vergleich? Kann man solch einen ic als "Extrem dummen Computer" bezeichnen, der nur eben die eine Aufgabe erledigen kann, die man ihm aufspielt? Hat solch ein ic auch einen Prozessor oder wie sind die Teile Augfebaut? Ich verstehe nicht, wie es mithilfe des PCs möglich ist etwas auf einen hardwarebaustein aufzuspielen, der dies dann erledigt. Ich meine in einem Schmitttrigger-ic weis ich zum beispiel, dass sich darin nichts anderes als eine fertige schaltung im miniformat darin befindet. wie ist das bei den AVRs?

markusj
30.08.2011, 18:27
Sehr schön erklärt, aber Nullen und Einsen SIND Maschinen Befehle....:-) :-) :-) Du meinst vermutlich "Menonics" wie LDI, STR oder ähnliches?
Nein, ich meinte tatsächlich die einzelnen "machine words". Bei einem AVR sind die Worte der Sprache die er spricht (also die Maschinenbefehle) 16 Bit breit. Die Null oder Eins an für sich ist noch keine Instruktion.

mfG
Markus

frankensteins-freund
30.08.2011, 18:39
Hey

@ markusj
--> danke markus, dank dir funktioniert das "make all" jetzt endlich. Habe das andere winavr geladen und draufgespielt, jetzt funkt alles, megacool... dann kann es ja jetzt losgehen mit dem programmeschreiben in C :D
Wenn jemand gute Seiten weis, wo man als neuling "reinschnuppern" kann um etwas wind von der Sache zu bekommen, nur her damit!

markusj
30.08.2011, 18:53
Noch eine frage: Wie muss man sich zum beispiel einen "2313" vorstellen zum vergleich? Kann man solch einen ic als "Extrem dummen Computer" bezeichnen, der nur eben die eine Aufgabe erledigen kann, die man ihm aufspielt? Hat solch ein ic auch einen Prozessor oder wie sind die Teile Augfebaut? Ich verstehe nicht, wie es mithilfe des PCs möglich ist etwas auf einen hardwarebaustein aufzuspielen, der dies dann erledigt. Ich meine in einem Schmitttrigger-ic weis ich zum beispiel, dass sich darin nichts anderes als eine fertige schaltung im miniformat darin befindet. wie ist das bei den AVRs?
Der Tiny2313 (oder besser gesagt, Mikrocontroller im allgemeinen) ist einfach nur ein kleiner Computer (der im Vergleich zu deinem SEHR schwach auf der Brust ist), der neben dem Prozessorkern selbst noch zusätzliche Hardware wie Timer, Schnittstellen, AD-Wandler etc. hat.
Die kleinen AVRs haben alle gemeinsam, dass sie ihr Programm nur vom internen Speicher (Flash) ausführen können, bei anderen (wie auch bei den "normalen" Computern) werden Programme aus dem Arbeitsspeicher ausgeführt.

So, jetzt zu deiner Frage, wie ein AVR aufgebaut ist/funktioniert: Es gibt innerhalb des Prozessorkerns verschiedene Komponenten. Eine Arithmetisch-Logische-Einheit (ALU), die für Berechnungen zuständig ist. Einen Registersatz, das sind wenige (bei AVRs 32) Speicherplätze, auf die der Prozessor direkt (schnell) zugreifen kann und die für Zwischenergebnisse benutzt werden. Mehr Speicher steht in Form des langsameren SRAMs zur Verfügung, auf den über ein Speicherwerk zugegriffen wird, für Zugriffe auf den Flashspeicher wird ebenfalls eine Komponente benötigt. Dann gibt es da noch das Steuerwerk, es signalisiert den einzelnen Komponenten, wann sie was zu machen haben, die Bedeutung der Maschinenbefehle ist hier fest verdrahtet. Das Steuerwerk "weiß" also, dass eine Instruktion 0x0B01 bedeutet, dass die Werte aus den Registern 0 und 1 addiert und dann in Register 0 gespeichert werden soll, und teilt dies zur richtigen Zeit den jeweiligen Komponenten mit.

Und weil niemand mit 0x0B01 um sich werfen will, hat man für diese Maschinenbefehle lesbare Kürzel erfunden, das sind die von Richard erwähnten Mnemonics. Das ergibt dann die Assemblersprache, 0x0B01 wäre in ihr formuliert: add r0, r1.
Übrigens, wie das bei Sprachen üblich ist, braucht man auch hier wieder einen Übersetzer, der die Mnemonics dann wieder in eine Kolonne von Bits umformt, das macht der Assembler.

mfG
Markus

PS: Zum 0x0B01: Das ist die hexadezimale Schreibweise für (binär) 0000 1100 0000 0001 falls dir das Binär- und Hexadezimalsystem noch nicht geläufig ist, kann ich dazu ein paar Worte sagen.

markusj
30.08.2011, 18:57
Wenn jemand gute Seiten weis, wo man als neuling "reinschnuppern" kann um etwas wind von der Sache zu bekommen, nur her damit!
Es gibt sowohl im RN-Wissen (http://www.rn-wissen.de/index.php/C-Tutorial) als auch im Wiki von Mikrocontroller.net (https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial) gute Tutorials, wobei letzteres weniger an C-Neueinsteiger sondern eher an Umsteiger gerichtet ist.

mfG
Markus

frankensteins-freund
30.08.2011, 18:59
hey, was es genau mit hexadezimalen zahlen zu tun hat weis ich ehrlich gesagt nicht. außer, dass mein Taschenrechner eine hex funktion hat, falls das das Gleiche ist...

MfG
Michael

021aet04
30.08.2011, 19:29
Es gibt verschiedene Zahlensysteme. Die wichtigsten zähle ich hier auf:

Name des Systems => Gesamtanzahl der Zahlen => mögliche Zahlen

Binärsystem => 2 => 0, 1
Oktalsystem => 8 => 0 - 7
Dezimalsystem => 9 => 0-9
Hexadezimal (hex) => 16 => 0-9 und A-F

Das Binärsystem wird bei Bitoperationen verwendet (einzelne Ports setzten bzw rücksetzen,...)
Das Oktalsystem wird nicht so oft verwendet. Die Ports sind z.B. in Oktalsystem aufgebaut.
Das Dezimalsystem wird nicht nur in der Elektronik verwendet.
Das Hex-Format wird eigentlich immer in der Elektronik verwendet. Dieses System wird zum Auslesen vom ADC verwendet, zum setzten von PWM Kanälen, Komunikation bei Bussystemen,... verwendet.

MfG Hannes

frankensteins-freund
30.08.2011, 19:37
Achso, das heißt, wenn man es genau nimmt steuere ich eine led mit einem schalter dann binär an --> ein und aus
Wie kann man das hex-system dann verstehen?

MfG
Michael

021aet04
30.08.2011, 19:58
Hier einige Beispiele wie man die Systeme an.

Das Binärsystem wendet man z.B. so an: PORTB |= (1<<PB1); //Bitoperation ist "(1<<PB1)"
Das Dezimalsystem kann man ganz einfach so anwenden: PORTB |= 100; //100 wird dann im Dezimalangegeben, wenn dichts davor steht ist eine Zahl immer Dezimal
Im Hexadezimalsystem wird man das so schreiben: PORTB |= 0x64; //Die Zahl 100 im Hex-Format, es steht bei einem Hex-Format immer "0x" davor, damit erkennt der Compiler das es eine Ziffer im Hex-Format vorliegt

Du könntest den Windowsrechner verwenden. Diesen kannst du umstellen zu "Programmierer" (Ansicht => Programmierer). Dort hast du die verschiedenen Zahlensysteme zur Auswahl und kannst sie untereinander umrechnen lassen.

MfG Hannes

markusj
30.08.2011, 20:03
Im Endeffekt sind es einfach alles nur unterschiedliche Repräsentationen der gleichen Zahl. 42 im Dezialsystem ist binär 101010. Im Speicher deines Rechners (oder deines AVRs) liegt die Zahl genau so, weil der Speicher eben nur 0 und 1 kennt. Auch die Arithmetik findet komplett auf Basis dieser Zustände statt.
So ausgeschrieben sind die Zahlen für Menschen aber unhandlich, deshalb fasst man vier Binärzahlen zu einer Hexadezimalzahl zusammen, 42 entspricht dabei 2A. Nun kommt es relativ oft vor, dass du (zum Beispiel bei Bitmanipulationen) etwas mit einzelnen Bits machen willst, du wirst mit zunehmendem Lernfortschritt dann eher zur hexadezimalen Schreibweise tendieren (weil sie einfach kürzer ist).

Ach ja: Um unterscheiden zu können, auf bezüglich welcher Basis die Zahl dargestellt wird, schreibt man in der Programmiersprache C bei Binärzahlen ein 0b und bei Hexadezimalzahlen ein 0x davor (Genau genommen ist das 0b eine GCC-Erweiterung). Im normalen Sprachgebrauch wird oft auch ein "d" "h" oder "b" angehängt, also: 42d = 2Ah (Die Kleinschreibung macht den Unterschied!) = 101010b

Äh ja, und zur Basis: Im Dezimalsystem ist die Basis 10, jede Stelle ist also 10 Mal so stark gewichtet wie ihr Vorgänger (42 = 4*10 + 2*1). Im Binärsystem verdoppelt sich der Wert jeder Stelle (42 = 1*32 + 0*16 + 1*8 + 0*4 + 1*2 + 0*1), im Hexadezimalsystem wird mit vielfachen von 16 multipliziert (42 = 2*16 + 10*1)

mfG
Markus

-schumi-
30.08.2011, 20:06
Hui, hier hat sich aber viel getan^^


Achso, das heißt, wenn man es genau nimmt steuere ich eine led mit einem schalter dann binär an --> ein und aus
Richtig


Wie kann man das hex-system dann verstehen?
Der einzige Unterschied zwischen den Zahlensystemen ist ja der, dass es mehr oder weniger verschiedene Ziffern hat. Allerdings kann der Mikrocontroller nur 2 Ziffern, nämlich 0 und 1. Damit der Mikrocontroller aber auch höhrere Zahlen als 1 Verarbeiten kann, fasst man mehrere solcher "Bits" (Ein Bit ist quasi ein "Schalter" der entweder 0 oder 1 sein kann) zu einer neuen Zahl zusammen.

So besteht z.B. eine Hexadezimalziffer aus 4 Dualziffern. Man braucht so viele Dualziffern, weil diese nur so wenig verschiedene Zustände haben (0/1). Eine Hexadezimalziffer dagegen hat 16: 0123456789ABCDEF
(Weil man 10, 11, 12 usw. ja nicht in einer Ziffer schreiben kann, nimmt man dafür einfach Buchstaben).

Und so kann man mit 4 Dualziffern eine Hexadezimalziffer speichern:

Hex - Dual:

0 - 0000
1 - 0001
2 - 0010
3 - 0011
4 - 0100
5 - 0101
6 - 0110
7 - 0111
8 - 1000
9 - 1001
A - 1010
B - 1011
C - 1100
D - 1101
E - 1110
F - 1111

Und das sind jetzt die 16 verschiedenen Möglichkeiten.

Du könntest jetzt also mit einer Hexadezimalziffer z.B. den Zustand von 4 LEDs speichern. Aber es macht keinen Unterschied ob du bei Programmieren jetzt 0x9 (Hexadezimal) oder 0b1001 (Binär/Dual) schreibst, im Controller drin wird eh wieder alles gleich verarbeitet.

021aet04
30.08.2011, 20:08
Zur Umrechnung von Zahlensystemen habe ich hier (http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm) etwas gefunden. Der Vorteil dieser Seite ist das es eine Erklärung dazu gibt das man es nachrechnen kann. Wenn man ersteinmal weiß wie man die einzelnen Zahlensysteme umrechnet ist es relativ leicht.

MfG Hannes

frankensteins-freund
31.08.2011, 11:40
Hey

okay, eigendlich ist das ganze ja logisch... Habe mithilfe einer kleinen nachhilfe angefangen zu lernen, allerdings verstehe ich zu 80% nur bahnhof, ich hoffe, das ändert sich noch.

MfG
Michael

markusj
31.08.2011, 12:23
Wer nicht fragt bleibt dumm!

mfG
Markus

Richard
31.08.2011, 12:59
Hey Richard,

Ich weis, du meinst es nur gut, aber wie gesagt, genau solche ausdrücke wie "Menonics, LDI oder STR" sollten dann auch erklärt werden und nicht nur hingeschrieben werden, sodass es eben der "Idiot" versteht.




Ich habe leider nur ein Beispiel in "Plattdeutsch" gefunden.. http://www.c64-wiki.com/index.php/Mnemonic bei dem gezeigt wird wie der Menonic für
LDA,H42....... Lade Daten Register A mit Hex Wert 42 in Maschinen lesbaren code gewandelt wird. Etwas genauer wird es hier erklärt
http://de.wikipedia.org/wiki/Maschinensprache

Gruß Richard

Richard
31.08.2011, 14:03
Zur Umrechnung von Zahlensystemen habe ich hier (http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm) etwas gefunden. Der Vorteil dieser Seite ist das es eine Erklärung dazu gibt das man es nachrechnen kann. Wenn man ersteinmal weiß wie man die einzelnen Zahlensysteme umrechnet ist es relativ leicht.

MfG Hannes

Besser man nimmt die Basis Rechnung Beispiel:
DEZ (Basis 10) 110 wir Lesen 110 wir "Sprechen" (wenn wir laut Lesen) "100 und 10" = 10^1+10^2 = 110
BIN (Basis 2) Von rechts lesen (rechnen) BIN 110 = 2^0+2^1+2^2 = 7

Gruß Richard

powder999
19.01.2012, 16:09
An alle die online sind, brauche dringend ne Antwort auf diese Frage! Danke! https://www.roboternetz.de/community/threads/56402-C-Programmierung?p=537279#post537279