Hallo,
aus Interesse habe ich mich mit der ISP SPI-Programmierung eines
ATtiny13 20-PU mit Tasten beschäftigt. ->
www.elektronik-labor.de/AVR/KursAssembler/T13asm13.html
Ich habe die Tasten korrekt entprellt, MISO antwortet richtig auf die
Anfragen. Alles mit 5V durchgeführt. Programmieren wollte ich die
Tabelle, die die MISO - LED einmalig einschaltet und eingeschaltet
lässt.
Wenn ich jedoch nach dem letzten Bit die Reset-Brücke nach GND entferne,
geht die LED aus. Zur Sicherheit habe ich sogar einen Pull-Up-Widerstand
von Reset nach +5V mit 10k ausprobiert.
Könnt ihr mir irgendwie helfen? Muss ich nach dem Eingeben der binären
Zustände irgendwie einen "Stopp"-Befehl" eingeben? Oder nur die
Reset-Brücke entfernen? Ich bin total ratlos...
Vielen Dank für jede Hilfe im Voraus..
Pascal
Genau, der 5. Tag.
Kann es sein, dass der uC durch einen fehlgeschlagenen Versuch so
umprogrammiert wurde, dass ein externer QO zum Takten angeschlossen
werden muss?
> ...fehlgeschlagenen Versuch so umprogrammiert ...
Könnte sein.
Wahrscheinlicher aber ist es, dass beim Eintippen der 256 bits ein
Fehler passiert ist.
> noch eine Frage ...
Ja, da es sich um die Page 0 handelt.
Erlauben Sie mir die Frage, ist es wirklich Ihre Absicht,
Maschinensprache von Hand einzutippen? Das wird wirklich ausgesprochen
mühsam und frustrierend, worauf ja auch der Autor der Kurses bereits
hingewiesen hat.
Ich habe so etwas vor etwa drei Jahrzehnten auf einem 8080/8085
gemacht, für einen AVR8 sehe ich es zum ersten Mal; versuche aber gerne,
Sie, so gut ich eben kann, zu unterstützen.
(Es sind wohl eher vier Jahrzehnte, wenn ich's recht bedenke).
Um sicher zu sein: Konnten Sie unter "4. Tag" die Signatur korrekt
auslesen mit 1E 90 07?
Ja, das ist meine Absicht. Vielen Dank für Ihre Unterstützung. Ich werde
zu Hause den ATtiny13 austauschen. Da MISO immer richtig geantwortet
hat, vermute ich, dass alle Werte richtig eingegeben worden sind.
Außerdem habe ich das jetzt schon 6mal probiert. Sobald ich das versucht
habe werde ich mich wieder melden (ca. in ½h)
Sie sollten versuchen, Ihre Eingabe in den Flash zu verifizieren, indem
Sie ihn einfach wieder auslesen, die Anleitung steht in "7.Tag":
0 L: B9 H: 9A
1 L: C1 H: 9A
2 L: FF H: CF
Übrigens konnte das
> dass ein externer QO zum Takten angeschlossen werden muss?
nicht sein, sonst wäre gar kein Zugriff mehr möglich gewesen (fiel mir
auf Anhieb leider nicht auf).
Bist du dir sicher, dass der Code, den du da eingetippt hast, auch
hundertprozentig korrekt ist und du ihn fehlerfrei eingetippt hast?
Nicht, dass du den Code zwar korrekt eingegeben hast, er aber nicht
funktionieren kann...
Schau dir mal das Video hier https://www.youtube.com/watch?v=UJHeDvr_doM
an. Machst du das auch genau so?
> er aber nicht funktionieren kann ...
Die Werte aus dem Kurs stimmen, hier das Assemblerlisting:
000000 9ab9 sbi DDRB,1
000001 9ac1 sbi PORTB,1
000002 cfff rjmp pc
Pascal schrieb:> Was macht der Typ am Ende, nachdem der Befehl zum Laden in den Flash> Speicher gegeben wurde?
Der uC wartet auf weitere Programmierbefehle, solange bis Reset
freigegeben wird.
Pascal schrieb:> Bei Adresse 1 habe ich anscheinend einmal beim HIGH-Bit eine 1 nicht> eingegeben:> statt> 10011010> ist> 00110100> erschienen
D.h. aus sbi wurde cpi; wenn das beim ersten Befehl passierte, hätte
die LED noch ganz schwach leuchten müssen (Stichwort pullup), beim
zweiten Befehl bleibt die LED aus.
Ja, das fürchte ich, sonst fällt mir nichts ein; es kommt auf (fast)
jedes Bit an, und es gibt keine Warn- oder Fehlerhinweise. Das meinte
ich mit frustrierend.
Respekt.
Erinnert mich an meinen ersten Urlader fuer den Z80.
Das war ein 74154 (1 aus 16-Dekoder) mit einer Handvoll Dioden
die einen Urlader fuer den Z80 enthielten.
Da konnte Mann bitweise fuer die Adresse ein Highbyte, dann ein
Lowbyte eintippen und dann die Daten in den RAM.
Natuerlich auch bitweise.
Viel Erfolg.
> kein Erfolg
Geht die Verifizierung schief, d.h. das Ausgelesene weicht vom
Geschriebenen ab, oder bleibt nach dem Entfernen der Reset-Brücke die
MISO-LED aus?
Sie verwenden den Schaltplan von "3.Tag", ggf. ohne Beschaltung von PB3
und PB4? Auf jeden Fall erstmal ohne den Piezo-Piepser an PB1.
> Auch hier brauchte ich mehrere Anläufe bis MISO richtig antwortete
Wie kann man einen Pin Miso nennen, wenn doch gar kein SPI genutzt wird?
Der komplette Verzicht auf Kondensatoren....(außer entprellen)
Ist das modern?
Selbst der Regler vom 9V Block auf Betriebspannung hat keine...
Sorry, aber wäre DAS Tutorial mein Einstig in die AVR Welt gewesen, dann
hätte ich sicher aufgegeben und die Brocken frustriert in die Ecke
geworfen.
an Pascal:
Also bei mir klappt das (dann endlich im dritten Versuch); wenn auch, in
Ermangelung eines ATtiny13, auf einem 85.
Wenn man eine effiziente LED hat, reicht es auch aus, nur den internen
Pullup einzuschalten mit /sbi PORTB,1/; lässt man dann den uC noch durch
das (sonst gelöschte) Flash voller FFs rasen, reduziert sich das
Programmieren auf:
Reset -> GND
AC530000 Programming Enable
AC800000 Chip Erase
400000C1 sbi PORTB,1 (low)
4000009A - " - (high)
4C000000 Write Program Memory Page 0
Reset freigeben
Ich habe es noch nicht ausprobiert, allerdings fällt mir folgendes auf:
S. Landolt schrieb:> reduziert sich das Programmieren auf:>> Reset -> GND> AC530000 Programming Enable> AC800000 Chip Erase> 400000C1 sbi PORTB,1 (low)> 4000009A - " - (high)> 4C000000 Write Program Memory Page 0
Laut diesem Umrechner
(binaer-dezimal-hexadezimal-umrechner.miniwebapps.de)
entspricht
4C000000
in binär
1001100000000000000000000000000
Allerdings steht in der Tabelle
01001100000000000000000000000000
Pascal schrieb:> Laut diesem Umrechner> (binaer-dezimal-hexadezimal-umrechner.miniwebapps.de)> entspricht> 4C000000> in binär> 1001100000000000000000000000000>> Allerdings steht in der Tabelle> 01001100000000000000000000000000
Der Umrechner lässt einfach die führende 0 weg und zeigt nur 31 Stellen.
Mathematisch ist das OK, aber ob das bei der Eingabe der Daten Probleme
macht, ist eine andere Sache.
Die MISO-LED wird ja gegen +Vcc geschaltet. Allerdings schaltet der
ATtiny13 ebenso +Vcc durch. Deshalb muss die LED an GND gelegt werden!
(was im o.g. Kurs nicht erwähnt wird)