Forum: Mikrocontroller und Digitale Elektronik einige Fragen bezüglich Umgang mit AVR´s.


von Wolfgang H. (hastekene)


Lesenswert?

Hallo ich hätte da mal einige Fragen bezüglich Umgang mit AVR´s.

Ich habe vor ca 10 Jahren schon mal einige Projekte in Assembler mit 
AT90S1200 umgesetzt und bin dann zum 8051 gewechselt.

Jetzt versuche ich nochmal den Schritt zurück zu AVR:
Folgende Fragen stellen sich mir aktuell

ich möchte auch Projekte mit ATMEGA und ATINY realisieren nur mein 
Programmer(unterstützt von AVRProg) zeigt mit nicht alle Prozessoren an 
mit denen ich arbeiten will.
 Bei meinen Nachforschungen(mittlerweile 3 Tage im Netz) bin ich auf 
einen Programmer am Parallelport gestoßen (mit ein paar Widerständen 
realisiert).
 Ist der jetzt für alle gängigen AVR`S geeignet oder gibt es da wieder 
Einschränkungen ?

Nächste Frage was ist besser für die Programmierung Assembler oder doch 
lieber C ?

Bei Durchsicht einiger Sourcecodes fällt mir immer wieder eine Art der 
Wertzuweisung auf die ich irgendwie gar nicht verstehe kann mir jemand 
das mal erklären
// ldi r16, (1<<MUX1) | (1<<ADLAR)//

was bedeutet : 1<< MUX1 oder 1<< ADLAR
wobei mich MUX1 bzw ADLAR nicht Interrresiert ich weis das es sich 
hierbei um Register handelt ich verstehe nur nicht die Art der 
Zuweisung.

Hat der Compiler hier die Wahl zwischen Register
MUX1 bzw ADLAR ?

Kann ich auch einen Wert größer 1 schreiben ?
Wofür steht die 1 ?

Kann ich auch 1 >> MUX1 schreiben ?

Ich hoffe ich bekomme auf meine Fragen konstruktive Antworten auch wenn 
sich der eine oder andere denken sollte das muss Mann doch wissen !!

Ich weis es aktuell nicht und hoffe auf Erleuchtung

von Otto (Gast)


Lesenswert?

> ldi r16, (1<<MUX1) | (1<<ADLAR)

in r16 werden die Bits MUX1 und ADLAR gesetzt.

Genauer:

die 1 wird um die Anzal Bits nach links geschoben, die für MUX1 
definiert ist. Dazu wird das Ergebnis (1<<ADLAR) "geodert"

Otto

von Uwe .. (uwegw)


Lesenswert?

Mit welcher Software sprichst du den ISP an? Davon hängt ab, welche AVRs 
du proggen kannst.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Wolfgang Hopperdietzel wrote:

>  Bei meinen Nachforschungen(mittlerweile 3 Tage im Netz) bin ich auf
> einen Programmer am Parallelport gestoßen (mit ein paar Widerständen
> realisiert).
>  Ist der jetzt für alle gängigen AVR`S geeignet oder gibt es da wieder
> Einschränkungen ?


Ist nicht geeignet. Kaufe Dir einen anstaendigen Programmer, z.B. den 
AVR MKII oder auch ein Projekt wie den USBProg hier im shop.

> Nächste Frage was ist besser für die Programmierung Assembler oder doch
> lieber C ?

Ansichtssache. Aber meiner Meinung nach gibt es keine echten Argumente 
fuer Assembler auf einem AVR, man kann alles auch mit C in Verbindung 
mit der standard library machen, und das um einiges komfortabler (war 
mal Sinn und Zweck der Hochsprache).

> Bei Durchsicht einiger Sourcecodes fällt mir immer wieder eine Art der
> Wertzuweisung auf die ich irgendwie gar nicht verstehe kann mir jemand
> das mal erklären
> // ldi r16, (1<<MUX1) | (1<<ADLAR)//

Laedt einen immediate Wert in das Register r16, (1 << n) heisst schiebe 
eins um n Stellen nach links. MUX1, ADLAR sind vordefinierte 
Zahlenkonstanten (benamte Registerbits), | ist die bitweise logische 
Veroderung.

> Hat der Compiler hier die Wahl zwischen Register
> MUX1 bzw ADLAR ?

Hier kommt kein Compiler zum Einsatz, das ist eine Assembersprache.

von Christian U. (z0m3ie)


Lesenswert?

Als programmer kann ich dir meinen ans herz legen ;)

http://www.ullihome.de/index.php/Hauptseite#USB_AVR-Lab

Den kannst auch als experimentierplattform benutzen indem du deine 
eigenen Programme über USB/Bootloader reinspielen kannst zum start 
brauchst dann nichts weiter.

Mit den STK200 proggern (Paralellport+Widerstände) kommst nicht weit die 
sind sehr langsam und es soll auch schonfter mal vorgekommen sein das 
man sich damit Controller verfust. Und an allen paralellports soll das 
wohl auch nicht gehn.

von Wolfgang H. (hastekene)


Lesenswert?

Der USB AVR-Lab sieht ganz gut aus nur wo finde ich die Platine, ich 
arbeite nur mit einseitig beschichteten  Platinen. Kann mir jemand eine 
Bezugsquelle für den USB AVR-Lab nennen .Als Bausatz oder fertiges 
Gerät?

von Wolfgang H. (hastekene)


Lesenswert?

noch zum Programm,ich arbeite mit dem AVR Studio 4
kann mir jemand eine gute Quelle bezüglich  Beschreibung  der Register
nennen bin mit dem AT90S1200 doch etwas hinterher.

Noch eine andere Frage: wurde der  AT90S2313 durch den ATiny2313 
ersetzt?

von Henry (Gast)


Lesenswert?

Ich bekomme immer Tränen in die Augen wenn jemand nach Programmern fragt 
ohne sich über das Debuggen Gedanken zu machen.

Assembler? Wenn man als Anfänger Assembler macht verbringt man 90 
Prozent der Zeit mit rein formalem Nachdenken über Registernutzung und 
solcherart Unwichtigkeiten.
Assembler ist was für extreme Spezialfälle oder Masochisten.

Vertrödle nicht die Zeit mit ATinys und dem frustrierenden Nachdenken 
über Speicherplatz. ATmega168 ist das Minimum. Ein großer ATmega ist 
kein Stück komplizierter als ein ATiny.

von Hmm... (Gast)


Lesenswert?

> Assembler? Wenn man als Anfänger Assembler macht verbringt man 90
> Prozent der Zeit mit rein formalem Nachdenken über Registernutzung und
> solcherart Unwichtigkeiten.

Stimmt, Grundlagenwissen zu erlangen frisst nur unnötige Zeit. Das 
Studium der Datenblätter (die gibts übrigens i.d.R. von der Website des 
Herstellers) ist dann sicher genauso unnütz, schließlich gibt es für 
alles schon eine Lib und notfalls kann man es aus Tutorials und 
Opensource-Anwendungen zusammen kopieren, oder?

von jack (Gast)


Lesenswert?

>Assembler? Wenn man als Anfänger Assembler macht verbringt man 90
>Prozent der Zeit mit rein formalem Nachdenken über Registernutzung und
>solcherart Unwichtigkeiten.
>Assembler ist was für extreme Spezialfälle oder Masochisten.

Selten so einen Quatsch gelesen.

von Christian U. (z0m3ie)


Lesenswert?

>Der USB AVR-Lab sieht ganz gut aus nur wo finde ich die Platine, ich
>arbeite nur mit einseitig beschichteten  Platinen. Kann mir jemand eine
>Bezugsquelle für den USB AVR-Lab nennen .Als Bausatz oder fertiges
>Gerät?

http://www.ullihome.de/index.php/USBAVR-ISP/de#Beschaffung

von Henry (Gast)


Lesenswert?

Ich mache den Job seit über 30 Jahren und deshalb ist meine Ausführung 
über Assembler ganz bestimmt kein Quatsch.

Ich will mich aber nicht weiter Streiten. Es tut mir nur weh zu sehen 
wie so viele Leute einen mühevollen, wenig produktiven, Weg einschlagen.

von holger (Gast)


Lesenswert?

>Ich mache den Job seit über 30 Jahren und deshalb ist meine Ausführung
>über Assembler ganz bestimmt kein Quatsch.

Ist es auch nicht.

>Ich will mich aber nicht weiter Streiten. Es tut mir nur weh zu sehen
>wie so viele Leute einen mühevollen, wenig produktiven, Weg einschlagen.

Also ich programmiere die AVR (fast) nur in C.
Wenns brennt MUSS man auch mal ins ASM Listing schauen.
Da führt kein Weg drum rum. Ein bißchen ASM sollte man können.
Angefangen habe ich damit auch mal auf Z80. Geschadet hat es
auf keinen Fall. Ganz im Gegenteil. Nur so versteht man die
Maschine.

von Olli R. (xenusion)


Lesenswert?

Wolfgang Hopperdietzel wrote:

>  AVR´s.

Was fuer'n Ding? Was macht der Akzent da ueber dem Leerzeichen?

Merke:
der AVR (Nominativ singular)
die AVRs (Nominativ plural)

des AVRs (Genitiv singular, immer noch ohne ', und erst recht ohne ´)
der AVRs (Genitiv plural, immer noch ohne ', und erst recht ohne ´)
.
.
.

von Wolfgang H. (hastekene)


Lesenswert?

Danke für den kurzen Deutschkurs,ich unterscheide halt AVR´s und 8051ér

wie schreibst du ??

von spess53 (Gast)


Lesenswert?

Hi

>Vertrödle nicht die Zeit mit ATinys und dem frustrierenden Nachdenken
>über Speicherplatz. ATmega168 ist das Minimum. Ein großer ATmega ist
>kein Stück komplizierter als ein ATiny.

Dein Chef freut sich bestimmt, wenn du u.U. 90% seines Geldes zum 
Fenster herauswirfst.

>Ich mache den Job seit über 30 Jahren und deshalb ist meine Ausführung
>über Assembler ganz bestimmt kein Quatsch.

Ich Programmiere schon ähnlich lange. Und ich habe selbst bei 
PC-Programmen schon mehrfach Situationen gehabt, bei der alles andere 
als Assembler Quatsch gewesen wäre.

MfG Spess

von Olli R. (xenusion)


Lesenswert?

Wolfgang Hopperdietzel wrote:

> Danke für den kurzen Deutschkurs,ich unterscheide halt AVR´s und 8051ér
> wie schreibst du ??

Ernsthaft? Oder trollst Du jetzt? Wann will ich dich mal aufklaeren:

Es gibt keinen Plural-Apostroph.

Es heisst "AVRs", und niemals "AVR's" oder "AVR´s".

Gruesse,
Olli

von Di P. (drpepper) Benutzerseite


Lesenswert?

@xenusion: Offensichtlich hast du nichts zum Thema zu sagen, dann lass 
es besser auch bleiben.

von Olli R. (xenusion)


Lesenswert?

Da Pep wrote:

> @xenusion: Offensichtlich hast du nichts zum Thema zu sagen, dann lass
> es besser auch bleiben.

Offensichtlich gilt das eher fuer dich, immerhin ist das dein erster 
Post in diesem Fred. Wie war das mit dem Glashaus?

Gegen die schleichende Apostrophverdummung muss man aber einfach 
vorgehen.

von crazy horse (Gast)


Lesenswert?

tja, in der Tat völliger Blödsinn, immer gleich den grössten verfügbaren 
Typ zu nehmen.
Wenn das alle Entwickler wüssten, müssten die Hersteller auch nicht mehr 
so viele verschiedene Typen entwickeln und Herstellen. Oder machen die 
das nur für die Bastler?
Es geht immer darum, den passenden Typ zu finden.
Das kann bei kleinen Serien durchaus ein überdimensionierter sein, da 
man dann die Software u.U. schneller fertig hat, Platz für noch nicht 
absehbare Erweiterungen hat und sich weniger Gedanken machen muss.
Aber das Kriterium bleiben die Gesamtkosten. Und wenn es dann um 
100.000er Produktionszahlen geht, zählt jeder Cent. Entwicklungskosten 
relativieren sich. Da lohnt es sich, die Software so zu optimieren, dass 
der nächstkleinere Typ auch noch eingesetzt werden kann.

Aber wem erzähl ich das? Bist ja 30 Jahre im Geschäft...
Beamter??

von Klaus (Gast)


Lesenswert?

Leute, packt die Haar-Axt wieder ein! Hier geht es um einen Hobbybastler 
und nicht um Serienfertigung...

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

spess53 wrote:

> Ich Programmiere schon ähnlich lange. Und ich habe selbst bei
> PC-Programmen schon mehrfach Situationen gehabt, bei der alles andere
> als Assembler Quatsch gewesen wäre.
>
> MfG Spess

Lass mich raten: Ein 8088 unter DOS 2.0?

von spess53 (Gast)


Lesenswert?

Hi

>Lass mich raten: Ein 8088 unter DOS 2.0?

Ne. Mein erstes PC-Programm (natürlich in Assembler) war auf einem 286er 
unter DOS 3.xx. Unter Windows habe ich mir das etwas abgewöhnt. Aber 
wenns mal ums 'Bitschubsen' geht, gibt es auch da nichts besseres.
Was hier igendwie viele nicht wahrhaben wollen: Viele Compiler-Librarys 
sind in etlichen Teilen in Assembler geschrieben. Und wer die Arbeit von 
Assemblerprogrammierern nutzt, aber gleichzeitig die Berechtigung dieser 
Programmierung bestreitet, dessen Meinung ist für mich nicht sonderlich 
relevant.

MfG Spess

von Sven (Gast)


Lesenswert?

AVR-Controller gehören in ASM programmiert. Punkt. C und Basic sind was 
für Weicheier, die nicht programmieren können und das Denken anderen 
Überlassen.

;-)

von Hmm... (Gast)


Lesenswert?

Im BWLer ;) Deutsch gilt nunmal:

TimeToMarket != Assembler.

Das sind dann meist Leute die ein extrem preisgünstige Lösung für einen 
RS485-Slave der nur eine Temperatur ausliest oder ein paar LEDs schaltet 
mit Linux laufen lassen wollen. ;)

[Zynismus]
Sollen sich doch die Chinesen mit dem fitzel-Assemblerkram und den 
seltsamen 8-Pinnern rumschlagen, die haben auch die Stückzahlen für...
[/Zynismus]

von Klaus (Gast)


Lesenswert?

Die chinesen müssen sich wohl nur mit Assembler rumschlagen, wenn alle 
westlichen Programmierer auf einmal nur noch in Assembler schreiben 
würden oO

von Henry (Gast)


Lesenswert?

Bei Produkten mit Stückzahl >100000 kann ich Assembler verstehen.
Aber nur dann wenn dieses Produkt voraussichtlich nie wieder angefasst 
und erweitert wird.

Erwartet man spätere Produktpflege und Firmwareanpassung so kann 
Assembler tödlich sein. Meist ist Assemblerkode, und das liegt in der 
Natur der Sache, so kryptisch geschrieben, dass nur ein Mitarbeiter ihn 
versteht. Soll etwas erweitert werden, und dieser Mitarbeiter ist nicht 
mehr da, so muss die Sache komplett neu geschrieben werden. Das habe ich 
nicht nur einmal erlebt.

von Hmm... (Gast)


Lesenswert?

Jap, hab ich auch schon erlebt. Allerdings muss Assembler nicht schwerer 
wartbar sein als ein C-Programm. Ein oder zwei Kilobyte Code (also die 
Größe wo Assenbler noch sinnvoll ist) können, wenn sie gut dokumentiert 
und strukturiert sind schon noch gelesen und auch erweitert werden.

Habe da selber schon einige Erweiterungen Assembler-Code von anderen 
Entwicklern durchgeführt. Hundert Zeilen schlechter C-Code können 
wesentlich schwieriger erweiterbar sein als 500 Zeilen guter 
Assemblercode ;)

von Engelbrecht (Gast)


Angehängte Dateien:

Lesenswert?

Halli Hallo,

Ich wollte dir nurmal kurz sagen das nicht:

#define DACOUT    P1OUT
#define DACIN    P1IN

schreiben darfst, sondern:

#define analImplements    P1OUT
#define DACIN    P1IN

Okay alles liebe euer Engli küsschen :*

von Gast (Gast)


Lesenswert?

Ist es nicht sinnvoller, gleich AVRs zu nehmen mit integrierter 
USB-Schnittstelle (AT90USBxxx, AtmegaxxU4) ?

Dann braucht man kein Programmiergerät mehr und hat zusätzlich die 
Möglichkeit, Daten mit dem PC auszutauschen ?


Und wie einfach ist der Datenaustausch über diese integrierte 
USB-Schnittstelle in Bascom ?

von Peter D. (peda)


Lesenswert?

Ich muß zugeben, daß ich C erst so richtig verstanden habe, nachdem ich 
aufm 8051 von Assembler auf C umgestiegen bin. Insbesondere alles mit 
Pointern, Array und Strings usw.

Ich hab dann einfach immer ins Assemblerlisting geschaut, ob der 
Compiler auch das gemacht hat, was ich wollte. Damit lernt man dann sehr 
schnell, wie man was hinzuschreiben hat.
Und man lernt auch, was dem Compiler Kofpschmerzen bereitet, d.h. große 
Codemonster produziert und was er effizient umsetzen kann.

Natürlich kann jetzt ein nur-C-Programmierer sagen, Effizienz ist mir 
wurscht, ich nehme eh den MC mit dem größten Flash. Aber Effizienz 
bedeutet ja nicht nur geringe Codegröße, sondern auch mehr 
Geschwindigkeit.
D.h. ich kann so effizient in C programmieren, daß oft ein 8Bit-MC 
schneller und besser die gleiche Aufgabe erledigt, wie ein 
nur-C-Programmierer auf nem 32Bit-Boliden.

Daher haben die Assemblerkenntnisse doch ne ganze Menge Vorteile für 
mich.

Der Grund, auf C umzusteigen war auch, daß ich bei nem Projekt ab etwa 
8kB den Überblick verloren habe (die halb angefangene Leiche liegt noch 
irgendwo auf der Festplatte).
Assembler macht nur bis etwa 1..2kB Spaß, darüber ist C sinnvoll.

Also fange ruhig erst mit Assembler an, es ist keine rausgeschmissene 
Zeit, sondern ne gute Investition in ein schnelleres und besseres Lernen 
von C.


Peter

von Wolfgang H. (hastekene)


Lesenswert?

Hallo Peter ich muss dir recht geben meiner Meinung nach ist es nie 
verkehrt sich mit Assembler auseinander zu setzem da ich hier mit wenig 
Zeilen viel ausrichten kann .C war mit bisher immer suspekt. Ich 
programmiere lieber in Pascal oder Delphi aber leider Hat sich C als 
Mutter aller Programmsprachen nun auch bei Micros durchgesetzt.Ich werde 
mich wohl wie du, durch Vergleich Assembler  zu C an C herantasten 
müssen.

Als dann besten Dank an alle für die schnelle und konstruktive 
Beantwortung meiner Fragen ( Abgesehen vom Deutschkurs nicht jeder ist 
Einstein)

Wolfgang

von Moritz (Gast)


Lesenswert?

Ich habs mit meinem Projekt in ASM Pur auf >30kb geschaft, inzwischen 
macht es auch keinen Spass mehr. Als ich mit AVR Anfing und hier im 
Forum fragte ob C oder ASM für den Einstieg besser wäre, riet man mir zu 
ASM. Und ich habe meine lange ASM Zeit nicht im geringsten bereut.

Meiner Meinung nach war sie äußerst förderlich, weil sie mein Denken auf 
der Maschinennahen Ebene konditioniert hat. Wenn man aus der C/C++ oder 
Java für x86 Ecke kommt muss man sich selten Gedanken machen wieviel 
Bytes geschweige denn Clockcycles der Compiler hinterher daraus macht.

C hat mich lange abgeschreckt, einmal wegen der umständlicheren gcc 
Umgebung, und zweitens der notwendigen Einarbeitung in die Eigenheiten 
der Verheiratung von C mit 8bit Micros, und drittens wegen aus meiner 
ASM Zeit stammenden gesunden Misstrauens meine knappen Resourcen dem 
Compiler zu überlassen.

Deshalb würde ich jedem Einsteiger der nicht schon sowieso sehr fit in C 
ist auch wieder empfehlen zuerst mit ASM zur Einarbeitung anzufangen, da 
man viel schneller zu Ergebnissen kommt. ASM ist wesentlich simpler, 
direkter und daher leichter zu erlernen als C, inklusive des Aufsetzens 
der Entwicklungsumgebung. Auch schult sie das Denken zurück auf die 
prozedurale Ebene (und trennt sich von objekt-orientierten Denkweisen 
falls man von C++/Java kommt), und schärft den Blick für knappe 
Resourcen wie Stack, RAM, Interruptlatenz.

Allerdings sollte man das auch nur als Einarbeitung verstehen, und nicht 
den Fehler wie ich begehen dann aus bequemlichkeit auch bei größeren 
Projekten bei ASM zu bleiben. Wenn man klein Anfängt, das Projekt aber 
ungeahnte Ausmaße annimmt, wird man sich dann nicht mehr neu in C 
Einarbeiten und anschließend das bestehende Programm in C neuschreiben 
können. Nachdem man die erste ASM SPielerei in Silikon gegossen hat 
sollte man sich für das nächst größere Vorhaben daher unbedingt mit C 
und GCC anfreunden, auch wenn man sich inzwischen in ASM wohlfühlt.

Wenn ich mich jetzt in C befasse wird das erste sein mir das vom 
Compiler stammende ASM-Listing sehr kritisch anzusehen, mich schauderts 
immer noch beim Gedanken nicht jeden Clock-Cycle im Griff zu haben.

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.