mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie viele Core´s gibt es bei den AVR´s?


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Habe kein Problem aber so langsam bald einen Frust.
Hatte ursprünglich folgenden ASM-Code im Prog:

  adiw  zl,MPMin
  lpm  r18,z+
  lpm  r19,z+
  lpm  r20,z

Eigentlich ganz praktisch mit dem "LPM rd,z+".
Byte wird vom Flash in Register rd geladen und die Adresse in Z um 1
erhöht.
Also, warum nicht benutzen.

Tja, nur funktionierte das gesammte Prog dann nicht richtig und ich
begab mich natürlich an anderer Stelle im Code auf stundenlange
Fehlersuche.

Bis ich in der Online-Hilfe von AVR-Studio mir den Befehl LPM rd,z
genau angesehen hatte und ich mußte sehr frustriert feststellen, das es
im ATTiny26 zwar "LPM" und "LPM rd,z" gibt aber nicht "LPM
rd,z+".
Nicht mal der depperte Compiler im AVR-Studio konnte mich trotz
Device-Angabe im tn26def.inc darauf hinweisen.
Mußte den Code wie folgt ändern damit alles wieder funtzte:

  adiw  zl,MPMin
  lpm  r18,z
  adiw  zl,1
  lpm  r19,z
  adiw  zl,1
  lpm  r20,z

Dieser Umstand kostet halt wieder 2 Words (4 Bytes) mehr im Flash wo
von die kleinen AVR´s ja nicht viel haben.
Vielleicht ist ja mein Vorhaben zu groß für den Tiny26.
"Not all variants of the LPM instruction are available in all
devices." steht in der Online-Hilfe.
Was soll das eigentlich einen simplen Befehl wie diesen einfach
wegzulassen wo die Core doch bestimmt nicht größer als ein
Stecknadelknopf ist?
Wieviele verschiedene Core´s gibt es eigentlich vom kleinsten bis zum
größten AVR und welche Bezeichnungen haben die Core´s?
Gibs darüber irgend wo eine Übersicht?
Was bezwegt ATMEL damit, gerade bei den kleinen AVR´s solch simplen
aber hilfreichen Befehle wie "LPM rd,z+", "MOVEW..." etc. einfach
wegzulassen?

Frustrierter Gruß
Andi

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Befehle, inkl. Varianten, der einzelne AVR genau unterstützt,
steht im Datenblatt unter "Instruction Set Summary".
Die Hilfe im AVR-Studio listet die Befehle nur allgemein auf.

Warum aber bestimmte Befehle in bestimmten Prozessorkernen nicht
vorhanden sind, kann ich auch nicht sagen.
Ist möglicherweise vom Alter abhängig?

Gruß
Ingo

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem alter der Core habe ich mir auch schon gedacht aber die
könnten doch bei einem neueren Tiny den Core z. B. vom Atmega 8
nehmen.
Oder kam der Atmega 8 erst nach dem Tiny26 raus?

Gruß
Andi

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

Schau dir doch mal LPM beim 2313 an. Dagegen ist der Tiny26 doch schon
recht komfortabel...

...HanneS...

Autor: Mikki Merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also beide aktuellen AVR Assembler 1.75.6 aus AVR Studio 4.09 und auch
Version 2.01 Beta 1 erzeugen beim Tiny26 folgende Meldung:
warning : 'LPM Rd,Z+' not supported on this device
also ggf. die aktuelle Version von AVR Studio downloaden.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In den ersten Datenblättern stand der 'LPM Rd,Z+' noch drin, aber
durch einen Bug wird nur das Low-Register hochgezählt.

Und statt den Bug zu beheben, haben sie einfach den Befehl
rausgenommen.

Wenn Du also sicher bist, daß das High-Byte gleich bleibt, kannst Du
ihn trotzdem nehmen.


Peter

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja, so viel zur Kompatibilität.!?

Steffen

PS: Peter (ist net bös gemeint) weiß, was ich meine, der Rest kann den
Beitrag getrost ignorieren.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so ist das also!
Da mach ma mal schnell nen µC und schmeißen den gleich mal ohne
großartige Test auf´n Markt.
Und die Kunden werden über Fehler schon frustriert berichten.
Allerdings ist der Core für den Tiny26 doch älter als der µC selber und
wurde von einem Vorgängermodell übernommen, oder?
Wenn, hätte ATMEL die Core doch gleich mal überarbeiten können.

Na ja, egal!
Wenn man´s weiß ist es ja halb so schlimm.

Gruß
Andi

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter: Benutzen werde ich den Befehl sicher nicht können da der Code
oben aus einer Konstanten-Tabelle mit momentan 72 Byte, tendenz
steigend, Werte aus verschiedenen Zeilen in Register zum arbeiten
kopiert.
Vielleicht probier ich es mal aus, wenn das Prog fertig ist, die
Tabelle kleiner als 256 Byte groß ist und noch 256Byte oben im Flash
übrig bleiben.

Da hätt ich gleich mal ne Frage für mein Prog!
Wie innitialisiere ich einen Timer welcher alle 1/10 Sekunden bei
momentan 1MHz fortlaufend das Timer-Interruptprog aufruft?
Brauche das für mehrere Abwärtszähler in Schritten von 1/10- und
1-Sekunden welches dann vom Timer-Prog gesteuert wird.

Gruß
Andi

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter, welche AVR's sind mit diesem Bug betroffen, alle ??

Gruß Hagen

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun bei den kleinen wird bei den LD und ST Befehlen nur das Low-Register
genommen, d.h. bei LD Rd,Z+ wird R31 nicht verändert und da hat wohl
einer nicht an LPM gedacht.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.