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


von Andi (Gast)


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

von Ingo Henze (Gast)


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

von Andi (Gast)


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

von ...HanneS... (Gast)


Lesenswert?

Hi...

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

...HanneS...

von Mikki Merten (Gast)


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.

von Peter D. (peda)


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

von Steffen (Gast)


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.

von Andi (Gast)


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

von Andi (Gast)


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

von Hagen (Gast)


Lesenswert?

@Peter, welche AVR's sind mit diesem Bug betroffen, alle ??

Gruß Hagen

von Peter D. (peda)


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

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.