Forum: Mikrocontroller und Digitale Elektronik ISP-MKII-Problem bei kleinen Taktfrequenzen


von Hermann (Gast)


Lesenswert?

Hallo zusammen,
ich will ein Li-Ion-Akkupack mit einem ATTiny84 überwachen. Um Strom zu 
sparen, soll er mit einer niedrigen Frequenz von z.Zt. 62kHz laufen (er 
hat kaum etwas zu tun). Ich betreibe ihn mit den Default-Fuses, d.h. mit 
RC-Oszillator und CKDIV8, also 1MHz. In Bascom setze ich die Frequenz 
dann mit CLKPR=7 auf 62,5KHz. Das klappt im Prinzip ganz gut.
Beim Programmieren mit ISP-MKII erlebe ich dann aber Zustände, die ich 
nicht verstehe:
- Beim 1. Programmieren mit ISP-Takt von 125kHz klappt alles bestens
- Beim allen weiteren Versuchen erkennt er den Chip nicht mehr. Ich muss 
auf 10kHz ISP-Takt herunter gehen, damit es wieder geht.
Das widerspricht meinem Verständnis: Der niedrige Takt wird erst im 
Programm gesetzt, d.h. nach Reset müsste er mit 1MHz loslaufen und mit 
125kHz progammiert werden können. Erst im Programm setzte ich mit CLKPR 
die kleine Frequenz.
Umgekehrt ist es genauso: Um ihn wieder mit 1MHz zu betreiben, muss ich 
ihn mit ISP-Takt 10kHz auf 1MHz bringen, damit er wieder mit 125KHz 
programmierbar ist. Seltsam... er kann sich doch nicht die Register nach 
Reset merken?!
Ist dieses Verhalten erklärbar? Oder wo ist der Wurm drin?

Hilfe
Hermann

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Hermann schrieb:
> ich will ein Li-Ion-Akkupack mit einem ATTiny84 überwachen. Um Strom zu
> sparen, soll er mit einer niedrigen Frequenz von z.Zt. 62kHz laufen (er
> hat kaum etwas zu tun).

Ich würde dazu den internen 128-kHz-Oszillator verwenden, der ist noch 
sparsamer. Ich glaube, den kann man per Prescaler sogar bis 500 Hz 
runtertakten - wenn man es ein bisschen übertreiben will. ;-)
Öhm, ich geh jetzt mal vom ATtiny84A aus, ich glaube, den ATtiny84 gibts 
offiziell schon gar nicht mehr.

> Beim Programmieren mit ISP-MKII erlebe ich dann aber Zustände, die ich
> nicht verstehe: (...)

Ich kenne das Phänomen. Möglicherweise wird Reset vom Programmer nicht 
schnell genug runtergezogen, so dass der Mikrocontroller schon losläuft. 
Falls der Taktfrequenzwechsel bei deinem Programm ganz am Anfang kommt, 
kann es sein, dass er noch erfolgt, bevor der Programmer mit seiner 
Arbeit beginnt.

Es könnte helfen, den Frequenzwechsel erst nach einer kleinen 
Zählschleife zu schalten.
Oder du lebst generell mit einer sehr niedrigen Programmierfrequenz, was 
ja auch nichts Schlimmes ist. :-)

von Hermann (Gast)


Lesenswert?

Die Erklärung leuchtet ein, es ist tatsächtlich das 1. Statement. Ich 
habe es geich ausprobiert. Aber leider ohne Erfolg. CLKPR setze ich 
jetzt erst nach der ganzen Programmvorbereitung und habe noch eine 
100ms-Warte-Loop eingebaut. Er tut es immer noch erst bei ISP-Takt von 
10kHz.
Der Chip ist ein Tiny84V-10PU.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Hermann schrieb:
> Die Erklärung leuchtet ein, es ist tatsächtlich das 1. Statement. Ich
> habe es geich ausprobiert. Aber leider ohne Erfolg. CLKPR setze ich
> jetzt erst nach der ganzen Programmvorbereitung und habe noch eine
> 100ms-Warte-Loop eingebaut. Er tut es immer noch erst bei ISP-Takt von
> 10kHz.

Hmmm... ich muss das selber auch noch einmal probieren. Ich glaube, ich 
hatte das Problem damals mit einem ATtiny85, den ich dann bei 500 Hz 
CPU-Takt nicht mehr programmieren konnte.

Vielleicht hilft es, den Takt ganz am Anfang hochzusetzen und dann erst 
nach 10 Sekunden auf die niedrige Frequenz. Ich werd das bei nächster 
Gelegenheit probieren, interessiert mich jetzt selber. :-)

> Der Chip ist ein Tiny84V-10PU.

Du hast völlig Recht. Ich hab grad nachgeschaut, den 84 und 84V gibt es 
immer noch, obwohl der gemeinsame Nachfolger 84A jetzt schon länger auf 
dem Markt ist. Schadet ja nicht. :-)

von Hermann (Gast)


Lesenswert?

Nachträglich leuchtet mir die Erklärung mit dem späteren setzten des 
Taktes nicht mehr ein. Der Chip hat immer vor dem Programmieren Vcc 
bekommen und das alte Programm läuft also bereits. Der Programmer muss 
immer das Reset setzen, bevor er mit dem Programmieren beginnt. Das 
Warten im Programm kann also nichts bringen (Test mit einer 10sec-Loop 
hat nichts gebracht).
Es fällt auch auf, das ziemlich genau bei einer ISP-Frq von 1/4 der mit 
CLKPR gesetzten Takt-Frq Schluss ist. Dieses habe ich beim alten 
MKII-Treiber in Studio4 festgestellt. Der 1 Jahr alte Treiber in Bascom 
spinnt bei den Frequenzen völlig.

von Hermann (Gast)


Lesenswert?

Ich habe jetzt Erfolg mit der Warte-Loop vor dem Setzen der niedrigen 
Takt-Frq. Der Chip lässt sich mit ISP-Frq=125kHz programmieren, wenn ich 
nach Anlegen von Vcc sofort mit dem Programmieren beginne, d.h. bevor 
die Takt-Frq mit CLKPR herunter gesetzt wird. Bleibt Vcc länger als die 
Warte-Loop dran, ist nur die ISP-Frq von 10kHz möglich.
Die Erkenntnis:
die CLKPR-Bits bleiben trotz Reset gesetzt, bis Vcc entfernt wird.

Es bleibt seltsam, das hätte ich nicht erwartet. Das wird vermutlich auf 
alle anderen IO-Register zutreffen. So können evtl. viele andere 
Schmutzeffekte erklärt werden.
Oder gibt es vielleicht eine andere Erklärung??

von spess53 (Gast)


Lesenswert?

Hi

>Das wird vermutlich auf alle anderen IO-Register zutreffen. So können evtl. 
>viele andere Schmutzeffekte erklärt werden.

Nein. Bei CLKPR haben die unteren 4 Bit keinen Initialwert, mit dem sie 
nach einem Reset geladen werden. Bei den anderen IO-Registern ist das 
nicht so.

MfG Spess

von Hermann (Gast)


Angehängte Dateien:

Lesenswert?

Das wäre ja genau die Erklärung für das festgestellte Verhalten. Wo kann 
man das lesen? Ich finde aber im Tiny84-Manual, dass die Bits auf 0000 
resettet werden - siehe Anhang.

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.