www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Komisches Problem mit Attiny13 + PonyProg

Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: DR (Gast)
Datum: 07.02.2010 02:02

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
Autor: Stefan B. (stefan) Benutzerseite
Datum: 07.02.2010 11:45

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.
Autor: DR (Gast)
Datum: 07.02.2010 12:43

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.
Autor: Stefan B. (stefan) Benutzerseite
Datum: 07.02.2010 13:05

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?
Autor: Travel Rec. (travelrec) Benutzerseite
Datum: 07.02.2010 13:12

>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.
Autor: DR (Gast)
Datum: 07.02.2010 13:18

U.a. hier:

Beitrag "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 :(
Autor: Travel Rec. (travelrec) Benutzerseite
Datum: 07.02.2010 13:26

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.
Autor: DR (Gast)
Datum: 07.02.2010 15:11

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.
Autor: Travel Rec. (travelrec) Benutzerseite
Datum: 07.02.2010 18:13

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...

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email ü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




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net