Microcontroller 8051

  • Zitat von "Stefan_Z"

    Aber PIC und 8051 sind quasi das Gleiche in Grün...


    Das stimmt nicht so ganz. Da ich mit PICs noch nicht gearbeitet habe kann ich dazu nichts sagen. Aber der Unterschied AVR <-> 8051 ist schon recht groß. Zum einen ist ein AVR ein RISC-"Prozessor" und ein 8051 ein CISC-"Prozessor". Der Unterschied ist, dass ein RISC in der Mächtigkeit reduzierte Befehle hat, die aber dafür nur wenige (AVR meist einen) Takte benötigen. Ein CISC hingegen hat recht komplexe Befehle zur Verfügung, benötigt allerdings mehr als einen Takt dafür.
    Ein weiterer großer Unterschied ist die maximale Anzahl an Instruktionen. Ein AVR kann theoretisch entsprechend der Taktrate viele Instruktionen pro Sekunde ausführen. Beim (originalen) 8051 wurde der Takt durch 12 geteilt, wodurch der maximla Durchsatz dann halt 1/12 des Taktes war. Heutige überarbeitete schaffen das alles sogar ohne die Teilung.
    Dennoch bleibt der Unterschied in der Architektur. Während ein AVR nur den Code aus dem Flash ausführen kann, ist der 8051 in der Lage dies von jeder Quelle aus zu tun.
    Ach und dann wäre da noch der Punkt, dass viele 8051er nicht direkt ne Led treiben können, und wenn dann nur im "sinking" Betrieb. D.h. es muss also eigentlich immer ne Treiberschaltung eingesetzt werden.


    Achja, es gibt im Übrigen auch keine gemeinsame Programmierschnittstelle. Manche haben nen Bootloader, manche ne ISP-Schnittstelle und manche etwas ähnliches, nur inkompatibel zu der AVR-Geschichte.....


    Ich will die 8051er keinesfalls schlecht reden, aber es sind halt im Vorfeld diverse Sachen zu klären bevor man loslegen kann.


    Edit:


    Die Möglichkeiten sind fast unbegrenzt. Aber mit nem µC ist man doch eigentlich recht flexibel und kann damit mehr als ne Blinkschaltung machen. Ich würde für den Anfang die Projekte eh nicht zu hoch hängen.

  • achso , vielen dank erstmal für die antwort



    und die gedanken welchen ich nehme etc muss ich mir nicht machen, wir basteln das ding in der schule sowieso , geht mir nur darum was ich damit dann zuhause anstellen kann.



    und "nur lauflicht" naja kann das ding ja eben über com-port neu programmieren.

  • Ach na dann...


    Ok, also den Knight-Rider haste schon gemacht...also wenn du weiterhin mit Leds was machen möchtest, dann wäre entweder ne Matrix ein interessantes Projekt oder aber ein RGB-Fader. Ich denke aber mal, dass der Controller eh nur maximal 2 PWM Einheiten hat, also müsste man das per Software machen. Das ist dann doch schon ne kleine Herausforderung ;)

  • Man kann nen AD Wandler anschließern und dann z.B. nen Thermometer anschließen.


    Man kann nen LCD anschließen.


    Man kann externen Speicher anschließen.


    IIC Anwendungen sind auch kein akt.


    Wenn ich das jetzt alles zusammenwürfel, hab ich schon nen Datenlogger! :)

  • ja,das geht 8)



    wenn man einen DA wandler anschließt, sich 'nen kleinen darlington-verstöärker baut und 'nen lautsprecher anschließt, klönnte man damit sogar melodien spiele lassen 8)


    basic kennt ja die befehle play und sound 8) die sind zwar für den ibm speaker, aber vielleicht gibts für das µC basic da auch 'ne library, die play und sound für einen da-wandler implementieren. ansonsten schreibt man sich die funktionen halt selber 8)


    oder man besorgt sich 'nen timer-baustein, dann hat man quasi sowas ähnliches wie beim ibm pc speaker und könnte den dann über die port[] anweisung von basic mit den entsprechenden bitfolgen (frequenzteiler (für gewünschten ton) speaker ein-/ausschalten, wellenform (sinus, rechteck, dreieck) den quasi so ansteuern wie das früher beim ibm speaker ging.


    bei soundausgabe über da-wandler muß man dagegen in einer schleife mit sin() die werte ausrechnen, die man an den da-wandler schickt. für z.b. einen ton von 1 khz bei 8 bit aflösung mit voller amplitude müßte man 1000 * 256 mal einen wert an den da-wandler ausgeben, um den sinusto zu erzeugen.


    das könnte die rechenleistung des µC unter umständen deutlich sprengen :(


    drum ist der timerbaustein (mit so einem arbeitete der ibm speaker früher) wohl sinnvoller, weil resourcenschonend


    btw: einen d/a wandler kann man für 8 bit aus 8 widerständen bauen.


    D0 kriegt R
    D1 R/2
    D2 R/4


    u.s.w. die enden der widerstände werden mitnander verbunden und gehen dann an den verstärker, die rückleitung vom verstärker geht an GND

  • Also die Dinger können im Prinzip ALLES.
    Klar, mit 2k Speicher ist man dann teilw. schon etwas beengt, aber im Prinzip geht halt schon alles. Und die AVRs haben ja auch bis 20MHz Takt und mehr, je nach Modell.


    Displays, Funkuhren, Datenschnittstellen, Sensoren, usw... kann damit alles gesteuert werden.

  • Zitat von "Kanwas"

    8051 werden in der Regel in C und Assembler programmiert.


    Genau.


    Zitat von "djtechno"


    einen ton von 1 khz bei 8 bit aflösung mit voller amplitude müßte man 1000 * 256 mal einen wert an den da-wandler ausgeben, um den sinusto zu erzeugen.


    Nicht direkt. Für einen Ton mit einer Frequenz von 1kHz reicht es 1000 mal den Wert 1 und 0 in einen Port zu schreiben. Anders ausgedrückt 1000 mal am Pin wackeln, also 2000 Zustände. Damit es ein wenig "runder" klingt, kann man dann ne Kette von 2-3 Tiefpassfiltern nachschalten.
    Für die Sache mit dem Sinus reicht eine Tabelle mit 8, 16, 32..oder auch meinetwegen 256 Einträgen. Die müssen dann wie djtechno sagt entweder über ein R2R-Netzwerk an den Ports ausgegeben werden oder an nen D/A-Wandler. Ne andere Variante wäre noch, das ganze üner ne PWM zu machen. D.h. man lässt ne PWM mit z.b. 30kHz laufen und schreibt als Pulslänge immer den aktuellen Wert der Tabelle rein. In diesem Fall benötigt man allerdings auch nen Tiefpass.



    D/A-Wandler mit R2R-Netz:
    http://www.avr-asm-tutorial.net/avr_de/avr_dac.html


    Sinus über PWM(Achtung PDF):
    http://www.avr-asm-tutorial.ne…on/Teil_8_Beispiel_11.pdf



    Edit: Ich glaube wir schweifen ab...


    Bloody:
    Gibt es denn irgendwas bestimmtes, das du bauen möchtest?

  • Zitat von "Kanwas"

    8051 werden in der Regel in C und Assembler programmiert.



    :)


    ja, aber wie oben egschrieben gibts auch einen basic-"compiler"
    8)


    allerdings habe ich früher selber viel in assembler programmiert, allerdings in 8086-assember aufm pc unter ms-dos. ein paar 80286 und 80386-befehle (protected mode, control- und debugregister) kenne ich auch, im wesentlichen wars aber 8086-assembler

  • Hmm, wirklich ein "Compiler"??
    Basic ist ja eher ein Interpreter und von daher eher langsam. Wenn ich mal so auf die Basic-Stamps oder die C-Control aufmerksam machen darf: Die schaffen kaum mehr als 10000 Befehle die Sekunde. Wobei hier ein Befehl deutlich mächtiger ist als eine Instruktion des Controllers. Dennoch würde man sich bei Anwendungen wie Sounderzeugung doch eher einen Stein ans Bein binden.

  • eben deshalb "compiler" in anführungszeichen.
    basic wird normalerweise nicht compiliert, sondern von einem interpreter ausgeführt.


    auch visual basic programme werden NICHT inn maschinencode übersetzt, sondern in eine art bytecode ähnlich wie bei java und von einer dll ( VBRUNx00.DLL ) interpretiert.


    allerdings wird bei mikrocontroller-basic-entwicklungsumgebungen der code i.d.r. doch "compiliert", sprich in maschinencode umgesetzt,da in den speichernd er controller wenig platz ist, will man da nicht schon den größten teil mit einem basic-interpreter vollknallen.


    wie gut oder mieserabel optimiert der code damit dann ist, und ob so ein basic-"compiler" die unzähligen möglichkeiten des controllers überhaupt ausreizen kann (basic hat nur einen beschränktes repertoire an hardwarespezifischen "low-level"-befehlen, und die KOMPLETTE basic hochsprache wird man aus platzgründen und wegen der technischen limits bzw unetrschiede zum pc wohl eher nicht implementieren)


    sprich diese basic-"compiler" sind vermutlich kein vollwertiges basic, sondern "nur" eine untermenge davon

  • Zitat von "bademeister"


    Edit: Ich glaube wir schweifen ab...


    Bloody:
    Gibt es denn irgendwas bestimmtes, das du bauen möchtest?



    nein gibt es nicht. Wir bauen das ding in der schule und sollten a) vorschläge machen was die klasse damit bauen kann und b) kann ich das ding zuhause ja ganz anders verwenden :)


    und da ich mich in leds verliebt habe dachte ich kann man da vielleicht was nettes basteln weil komplexe schaltungen mechanisch zu steuern bisschen aufwändig ist.


    ich meine bei 8bit bau ich paar logische bausteine dran und dann gibts ne menge (led)schaltbilder die ich ansteuern kann.



    wär natürlich auch ganz nett wenn man lichteffekte zu ner musik hinbekommt...

  • Ahh, da isser wieder der Musik-Controller....


    Also wenn du quasi ne µC gestützte Lichtorgel bauen willst dann wirst du mit nem 8051 oder auch AVR oder PIC.. nicht glücklich. Die einzigen wirklich effektiven Möglichkeiten auf Musik zu reagieren besteht in einer FFT oder der Nutzung von Bandpassfiltern (z.b. IIR). Es gibt aus der Seite von Elm Chan (oder so ähnlich) ein Projekt bei dem er ne quasi Echtzeit-FFT auf nem AVR hinbekommen hat. Ist aber recht schwer zu verstehen.
    Ne einfache Reaktion auf nen Ton könntest du mit nem Komparator erreichen. Irgendwo im Netz kursiert ein Stimmgerät, aufgebaut mit nem AT90S2313, welches die Tonhöhe mit dem Komparator anhand der Nulldurchgänge bestimmt.


    Ansonsten würde ne diskret aufgebaute Lichtorgel schneller zum Ergebnis führen.