Hallo,
so langsam verzweifle ich an der Programmierung des AtTiny85.
Mittlerweile habe ich auch den Aufbau des Programmspeichers richtig
verstanden (128 Pages mit je 64byte Speicher aufgeteilt in 32 Zeilen mit
je Low und Highbyte). Jedoch macht die Umsetzung Schwierigkeiten. Laut
Datenblatt
(https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf
) Seite 153 stehen die Befehle die mir zu Verfügung stehen. Mit Adr_MSB
(7bit = 128 Pages) adressiere ich die Page, mit Adr_LSB (5bit = 32
Zeilen) den Offset auf der jeweiligen Page. Auf Seite 154 ist jedoch
eine Abbildung die zeigt das ein Stück von Adr_MSB in das Adr_LSB Byte
hineinreicht. Dies ist im geposteten Code entsprechend umgesetzt. Jedoch
zeigt diese Abbildung auch das die Adressierung 15 Bit haben soll. (Wo
sollen die herkommen????). Ich denke das Problem ist einfach das ich
noch nicht den Algorithmus, beschrieben auf Seite 152, richtig umgesetzt
habe. Ich soll beispielsweise die 6MSB der Adresse schreiben. Aber ich
brauche zur Adressierung von 128 Pages 7 bit. Wenn ich dann nur die 6MSB
schreibe, muss ich dann Maskieren oder shiften?
Hier der Code vom aktuell verwendeten Ablauf:
Die dort gezeigten Befehle sind völlig generisch für alle AVRs gezeigt,
ganz unabhängig von der Speichergröße. Wenn du nur 5 Adressbits
innerhalb einer Page hast (ist ja ein Tiny), dann kannst du bei "load
program memory page" alle anderen Bits 0 setzen.
Bei "write program memory page" wiederum sind nur die Adressbits ab 5
aufwärts relevant, denn programmiert wird dann sowieso das, was du zuvor
in den Zwischenspeicher geladen hast.
Jörg W. schrieb:> Die dort gezeigten Befehle sind völlig generisch für alle AVRs gezeigt,> ganz unabhängig von der Speichergröße. Wenn du nur 5 Adressbits> innerhalb einer Page hast (ist ja ein Tiny), dann kannst du bei "load> program memory page" alle anderen Bits 0 setzen.
Kann ich, oder muss ich? Also Adr_MSB = 0x00 egal welche Page ich
beschreiben will?
> Bei "write program memory page" wiederum sind nur die Adressbits ab 5> aufwärts relevant, denn programmiert wird dann sowieso das, was du zuvor> in den Zwischenspeicher geladen hast.
Heißt für mich Adr_LSB = 0x00, Adr_MSB = Adresse der Page?
---
Das Low-, Highbyte seperat schreiben oder beide gleichzeitig? (Die
Kommentarzeichen bei dem einen Befehl einfach löschen)
Cyblord -. schrieb im Beitrag #5717307:
> Womöglich ist die Flash-Programmierung eines AVR zu komplex für> einen FHler. In einem solchen Fall sollte man fertige Tools verwenden.
Ich bin einfach nur auf der Ursachensuche warum es nicht funktioniert.
Marius S. schrieb:> Kann ich, oder muss ich? Also Adr_MSB = 0x00 egal welche Page ich> beschreiben will?
Beim "load page" werden die höheren Bits ignoriert. Du kannst da also
genausogut 42 reinschreiben.
>> Bei "write program memory page" wiederum sind nur die Adressbits ab 5>> aufwärts relevant, denn programmiert wird dann sowieso das, was du zuvor>> in den Zwischenspeicher geladen hast.>> Heißt für mich Adr_LSB = 0x00, Adr_MSB = Adresse der Page?
Nein, alle Bits der Basisadresse der Seite müssen gefüllt werden. Bei
nur 5 Bit innerhalb der Adresse musst du auch in Adr_LSB noch 3 Bits
eintragen.
Jörg W. schrieb:> Marius S. schrieb:>>>> Bei "write program memory page" wiederum sind nur die Adressbits ab 5>>> aufwärts relevant, denn programmiert wird dann sowieso das, was du zuvor>>> in den Zwischenspeicher geladen hast.>>>> Heißt für mich Adr_LSB = 0x00, Adr_MSB = Adresse der Page?>> Nein, alle Bits der Basisadresse der Seite müssen gefüllt werden. Bei> nur 5 Bit innerhalb der Adresse musst du auch in Adr_LSB noch 3 Bits> eintragen.
Ahhhhh, also die 3 LSB-Bits der Pageadresse in das Byte 3 (Ich beziehe
mich auf die Abbildung auf Seite 154 im Datenblatt) und die restlichen 4
Bit, ich habe ja insgesamt 7Bit zur Adressierung von 128 Pages) in Byte
2?
Marius S.,
vielleicht ist es Dir bewusst: Jörg W. ist der Programmierer der avrdude
Software, die ja "fast" jeder direkt oder indirekt als ISP
Ansteuer-Software nutzt.
Naja, diesen originalen Bitbang-Code hat noch Brian Dean geschrieben,
der ist nicht von mir. Aber ich habe zumindest ein Gefühl, wie das da
aufgebaut ist. ;-)
... dennoch ist AVRDUDE (und die Arbeit von Jörg daran) absolutes Gold
wert. Ohne AVRDUDE wäre diese riesige Verbreitung unter den
Hobbyelektronikern (und bei vielen profesionellen auch) nicht möglich
gewesen.
AVRDUDE und die Unterstützung vieler Programmer (allen voran STK500v2,
USBasp und den Arduino-Bootloder) machen dieses Werkzeug schier
unbezahlbar.
Auch wenn das originale Bitbanging (hier ist wohl das "berühmte" ponyser
gemeint) nicht von Jörg ist: absoluter Respekt an Jörg !
(aber so etwas wird er wohl des öfteren hören).
Ralph S. schrieb:> Auch wenn das originale Bitbanging (hier ist wohl das "berühmte" ponyser> gemeint)
Nö, AVRDUDE hat mit Programmern am Parallelport angefangen. Sowas hatte
damals noch jeder Computer, und man konnte komplett mit einem passiven
Aufbau auskommen, wenn man wollte. "ponyser" braucht zumindest noch ein
bisschen Elektronik (ein oder zwei Transistoren), das kam dann erst
später dazu – ich glaube, sogar erst nach dem ersten STK500, dessen
Implementierung aber jemand anders beigesteuert hat, und die damals noch
im Wesentlichen ein Wrapper um die Bitbang-Engine war, die wiederum das
generische SPI-Kommando des STK500 genutzt hat.