Forum: Mikrocontroller und Digitale Elektronik Komisches Problem mit Attiny13 + PonyProg


von DR (Gast)


Lesenswert?

Guten Abend,

ich bin ein Neuling, was Microcontroller angeht und wollte mit einem 
Attiny13V einsteigen. Ich habe mir also einen Programmieradapter 
zusammengelötet, wie er hier zu finden ist:

http://s-huehn.de/elektronik/avr-prog/avr-seriell.gif

Den Adapter habe ich dann an den PC angeschlossen, die Funktion "Probe" 
bei PonyProg hat funktioniert und das Kalibrieren auch. Ich hab als 
Device dann Attiny13 eingestellt. Um mich ein bisschen umzusehen hab ich 
probeweise mal Flash, EEPROM und Fuse/Lockbits ausgelesen, lief alles 
ohne Probleme.

Dann wurde es aber ziemlich komisch: Ich habe mein geschriebens Programm 
auf den Attiny mit Hilfe von PonyProg übertragen. Den EEPROM hab ich 
genauso wie die Fuse/Lockbits nicht angerührt. Auf jeden Fall wurde mir 
dann angezeigt, dass der Flash erfolgreich geschrieben wurde. Daraufhin 
habe ich dann nochmals auf "Read Program Memory (FLASH)" geklickt - 
woraufhin mir angezeigt wurde "Device missing or unknown device (-24)".

Neustart und Verbindungen prüfen hat alles nichts gebracht, der Fehler 
besteht weiterhin. Wenn ich, wie in der FAQ von PonyProg vorgeschlagen 
wird, auf "Ignore" klicke liest er mir zwar was aus, aber nicht das, was 
ich übertragen habe.

Ich bin ziemlich ratlos und würde mich freuen, wenn mir hier geholfen 
werden könnte!

MfG

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Dieser Adapter allein reicht noch nicht aus, um den Attiny13 sicher zu 
programmieren. Wie sieht deine komplette Schaltung aus (Foto)

AVRs müssen beim Programmieren mit Spannung (hier 5V) versorgt werden. 
Ohne eine Spannungsversorgung kann der Attiny13 sich parasitär über die 
Programmierleitungen versorgen, aber es besteht die Gefahr, dass dadurch 
die Programmierung unsicher wird. Die Programmierleitungen dürfen auch 
nicht zu lang sein.

von DR (Gast)


Lesenswert?

Ein Foto hab ich grad nicht, aber eigentlich ist die Schaltung nichts 
großartiges: Ein 100n zwischen VCC und GND des Attinys, zusätzlich ein 
78L05 mit 100n jeweils an Input/GND und Output/GND plus einen 
100uF-Kondensator zwischen Output/GND am 78L05.

Der Programmieradapter benutzt die gleiche Masse wie der 78L05 und die 
Batterie, die den 78L05 mit 9V versorgt. Die Spannung am Attiny hab ich 
nachgemessen, exakt 5.00V. Die restlichen Leitungen des Adapters (MISO, 
MOSI, SCK und Reset) sind direkt an die jeweiligen Pins des Attinys 
geführt. PB4 ist mit einem 300R und einer LED an GND geführt, PB3 hängt 
in der Luft (was aber während der Programmierung egal sein müsste, 
oder?).

Ich hab nach stundenlanger Suche rausbekommen, dass PonyProg wohl 
Probleme damit hat, dass ich den Vorteiler per Flash-Programm auf 256 
gesetzt habe (Register CLKPR). Allerdings weiß ich nicht, ob das bei 
werksmäßig gesetzten Fusebits überhaupt berücksichtigt wird, ich glaube 
aber schon.

Deshalb hab ich jetzt in der .ini von PonyProg SPIBusSpeed = ULTRASLOW 
gesetzt und die Werte für SPIResetPulse, SPIDelayAfterReset, 
AVRByteWriteDelay und AVREraseDelay mehrmals auf verschiedene, höhere 
Werte gesetzt. Das nutzt leider auch nichts.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die Schaltung hört sich richtig an. Bin jetzt genauso ratlos wie du.

> Ich hab nach stundenlanger Suche rausbekommen, dass PonyProg wohl
> Probleme damit hat, dass ich den Vorteiler per Flash-Programm auf 256
> gesetzt habe (Register CLKPR). Allerdings weiß ich nicht, ob das bei
> werksmäßig gesetzten Fusebits überhaupt berücksichtigt wird, ich glaube
> aber schon.

Wo hast du das heraus bekommen?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Ich hab nach stundenlanger Suche rausbekommen, dass PonyProg wohl
>Probleme damit hat, dass ich den Vorteiler per Flash-Programm auf 256
>gesetzt habe (Register CLKPR)

Genau das ist das Problem aller ISP-Programmer, Du kannst nur mit <1/4 
der CPU-Frequenz flashen. Dein Tiny dürfte jetzt mit 37.5kHz takten, von 
daher must Du mit kleiner/gleich 8kHz flashen. Aber es gibt noch einen 
kleinen Trick: Du mußt den Tiny mit einem PullDown schon beim Anschluß 
der Stromversorgung im RESET halten. Dann kann das Programm nicht 
loslaufen und den Oszillator verstellen. Der Tiny läuft dann mit seinen 
9.6Mhz und Du kannst ihn dann zumindest versuchen zu löschen. Klappt 
aber nur, wenn der Programmer am Resetpin keinen PullUp erwartet. Dann 
änderst Du betreffende Codezeile und flashst das neue Programm ohne 
Clock-Verstellung.

von DR (Gast)


Lesenswert?

U.a. hier:

Beitrag "Re: ATTiny13 und Ponyprog"

Ich hab jetzt gelesen, dass das Programm überhaupt nicht ausgeführt 
wird, wenn der Attiny am Programmieradapter hängt (entgegen meiner 
obigen Vermutung). Ich schließe immer zuerst den Adapter an und erst 
dann die 9V-Batterie, sodass der Attiny in den Programmiermodus gelangt. 
Soweit ich weiß haben dann nur die Fuse/Lockbits einen Einfluss, aber 
wie gesagt, an denen war ich nicht dran und sie stehen also noch auf 
Werkseinstellung.

Ich bin ziemlich ratlos, das erste Lesen hat doch geklappt, auch die 
Fuse/Lockbits wurden korrekt (mit Datasheet verglichen) ausgelesen. 
Jetzt hab ich was in den Flash geschrieben und nichts lässt sich mehr 
auslesen...

Irgendwie hab ich mir den Einstieg in die Welt der Microcontroller 
besser vorgestellt :(

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Na es kann halt sein, daß Du mit dem ersten Flashen schon zu schnell 
warst und irgendwelcher Mist im Flash des Tinys gelandet ist, der jetzt 
auch versucht wird, ausgeführt zu werden.

>Irgendwie hab ich mir den Einstieg in die Welt der Microcontroller
>besser vorgestellt :(

Diese Welt ist in der Tat besser, wenn man nicht am falschen Ende spart. 
Mach Dir doch mal die Mühe und kaufe einen AVR-ISP mkII und dann bist Du 
einige Sorgen los. PonyProg ist ein tolles Programm, aber es hat auf 
Seiten der Rechnerhardware in Verbindung mit einem ausgelasteten 
Betriebssystem deutliche Schwächen in Bezug auf die Programmierung von 
Controllern. Darauf wurde hier schon 1000-fach hingewiesen.

von DR (Gast)


Lesenswert?

Travel Rec. schrieb:
> Aber es gibt noch einen
> kleinen Trick: Du mußt den Tiny mit einem PullDown schon beim Anschluß
> der Stromversorgung im RESET halten. Dann kann das Programm nicht
> loslaufen und den Oszillator verstellen. Der Tiny läuft dann mit seinen
> 9.6Mhz und Du kannst ihn dann zumindest versuchen zu löschen.

Das hat geklappt, vielen Dank!!

Ich kann ihn jetzt normal auslesen, sowohl Flash als auch EEPROM und 
Fuse/Lockbits.

Travel Rec. schrieb:
> Dann änderst Du betreffende Codezeile und flashst das neue Programm ohne
> Clock-Verstellung.

Dazu hab ich eine Frage: Ich hatte vor, den Tiny nach einer bestimmten 
Zeit (30min bzw. 60min) den Ausgang PB4 von LOW auf HIGH setzen zu 
lassen, das muss aber nicht sekundengenau sein. Dazu habe ich mir 
folgendes überlegt:

Der Attiny13 enthält einen 8-Bit Timer, was bedeutet, dass nach 256 
Inkrementierungen ein Overflow stattfindet. Bei jedem Overflow 
inkrementiere ich eine "Variable". Da der Tiny außer warten nichts 
anderes machen soll dachte ich mir, dass es wohl am sinnvollsten ist, 
ihn besonders langsam laufen zu lassen. Die langsamste Frequenz müsste, 
wenn ich mich nicht irre, 500Hz sein (128kHz intern + 256 Prescaler). 
Das macht also ca. 1,95 Überläufe pro Sekunde, was ziemlich genau 7031 
Überläufe in einer Stunde macht. Als Binärzahl würden also zwei Byte zur 
Speicherung des Zählers reichen. Das könnte man auf zwei GP-Register 
aufteilen und darüber dann abfragen, ob die Zeit bereits abgelaufen ist.

Deshalb meine Idee mit der niedrigen Frequenz.

Travel Rec.
> Diese Welt ist in der Tat besser, wenn man nicht am falschen Ende spart.
> Mach Dir doch mal die Mühe und kaufe einen AVR-ISP mkII und dann bist Du
> einige Sorgen los.
Das mache ich, sobald ich merke, dass das ein langfristiges Hobby wird.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Die genaue Sekunde kannst Du mit dem CTC-Modus erreichen. Laß den Timer 
genau dann zuschlagen, wenn sich mit der CPU-Frequenz, geteilt durch den 
Prescaler der CPU, den Prescaler des Timers und durch den CTC-Timer 
selbst eine gerade Zahl in Hertz ergibt. Teile noch einmal durch diese 
Zahl und Du hast die Sekunde. Von hier an geht´s einfach:  Teile durch 
60  60  24...

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.