Forum: Mikrocontroller und Digitale Elektronik Niedrigster Takt für ISP


von Juan (Gast)


Lesenswert?

Hallo!

Weil mein ATtiny13A nicht schneller sein muss, hatte ich den Takt des 
internen RC-Oszillators per System Clock Prescaler auf 4 kHz reduziert.

Erst beim zweiten Programmieren habe ich gemerkt, dass man den ISP-Takt 
des STK500 nicht auf unter 1.x kHz stellen kann. ISP war nicht mehr 
möglich. Per HVSP konnte ich ein neues Binary, das den Controller mit 8 
kHz laufen lässt, schreiben. ISP ist somit wieder möglich.

Jetzt möchte ich gern wissen, wie ich ISP am besten bei niedrigen 
Controller-Taktraten (<=4 kHz) erhalten kann.

Gibt es Programmer, die niedrigere ISP-Taktraten erlauben? Sollte man 
den Code so ändern, dass der Controller die ersten Sekunden nach dem 
Reset mit ausreichend hohem Takt läuft? Gibt es noch andere 
Möglichkeiten?


Vielen Dank und Gruss
Juan

von Curby23523 N. (Gast)


Lesenswert?

Was für einen Vorteil hast du bei 4kHz Systemtakt? Warum machst du das?
Soviel Strom kannst du doch gar nicht brauchen, dass du diesen nicht 
auch mit 1MHz fahren kannst oder?

Wenn ich nur ein paar I/Os schalten muss, abhängig von z.B. ein paar 
Tastern, lasse ich den µC trotzdem mit >= 1MHz laufen.

Ich finde, man macht sich das Leben damit schwerer.

von Karl M. (Gast)


Lesenswert?

Juan schrieb:
> Hallo!
>
> Weil mein ATtiny13A nicht schneller sein muss, hatte ich den Takt des
> internen RC-Oszillators per System Clock Prescaler auf 4 kHz reduziert.

Wie soll das gehen ?

Der RC Oszillator läuft mit 9,6MHz, der max. mögliche Vorteiler ist 256.
Also 9,6*10⁶Hz /256 = 37500Hz

Hast Du den internen 128 kHz Oszillator gewählt, dann passt die 
Rechnung:
128*10³Hz /32 = 4*10³Hz

Siehe im Datenblatt
6.4.2 CLKPR – Clock Prescale Register

Ich schalte die Vorteiler immer im Programm (zur Laufzeit), nach einer 
passenden Wartezeit, um.

> Erst beim zweiten Programmieren habe ich gemerkt, dass man den ISP-Takt
> des STK500 nicht auf unter 1.x kHz stellen kann. ISP war nicht mehr
> möglich. Per HVSP konnte ich ein neues Binary, das den Controller mit 8
> kHz laufen lässt, schreiben. ISP ist somit wieder möglich.
>
> Jetzt möchte ich gern wissen, wie ich ISP am besten bei niedrigen
> Controller-Taktraten (<=4 kHz) erhalten kann.
>
> Gibt es Programmer, die niedrigere ISP-Taktraten erlauben? Sollte man
> den Code so ändern, dass der Controller die ersten Sekunden nach dem
> Reset mit ausreichend hohem Takt läuft? Gibt es noch andere
> Möglichkeiten?

von Stefan P. (form)


Lesenswert?

Der Atmel JTAGICE MK2 kann im ISP Modus bis 51,1 Hz runter arbeiten.
Ich meine auch mal ein Video gesehen zu haben wo jemand einen AVR nur 
mit ein paar Schaltern und einem Taster per ISP programmiert hat :)

Den Takt später per Software runterschalten klingt auf jedenfall 
Sinnvoll, falls das so geht.

von Axel S. (a-za-z0-9)


Lesenswert?

Juan schrieb:
> Jetzt möchte ich gern wissen, wie ich ISP am besten bei niedrigen
> Controller-Taktraten (<=4 kHz) erhalten kann.

Das Protokoll macht da keine Einschränkungen; das kann man im Prinzip 
auch mit 1Hz ISP-Takt fahren. Konkrete Implementierungen eines 
ISP-Adapters implementieren aber typischerweise nur eine gewisse Anzahl 
an Geschwindigkeiten.

> Gibt es Programmer, die niedrigere ISP-Taktraten erlauben?

Der usbasp, der hierzulande häufig (aber IMHO unberechtigt) kritisiert 
wird, kann bis 500Hz runter. Ein Adapter, der per bit-banging 
implementiert ist, z.B. Parallelport oder FTDI kann auch beliebig 
langsam gemacht werden, weil da der Host das Timing macht.

> Sollte man den Code so ändern, dass der Controller die ersten
> Sekunden nach dem Reset mit ausreichend hohem Takt läuft?
> Gibt es noch andere Möglichkeiten?

Wenn der µC aus dem Power-On Reset kommt, sollte er mit dem Takt laufen, 
der sich aus den Fuses ergibt. Wenn du also Reset fest auf L klemmst und 
dem µC Power gibst, sollte er gar nicht so weit kommen, den Takt zu 
reduzieren.

von Karl B. (gustav)


Lesenswert?

Juan schrieb:
> Weil mein ATtiny13A nicht schneller sein muss, hatte ich den Takt des
> internen RC-Oszillators per System Clock Prescaler auf 4 kHz reduziert.

Hi, ein Vorschlag am Rande:
Es gibt vielleicht als Alternative einen passenden "sleep modus", falls 
die zu hohe power consumption im Leerlauf das eigentliche Problem ist.
"...MCUCR - MCU Control Register
0x34
MCUCR
–PUD SE SM1 SM0..."
Und das Datenblatt:
http://cdn-reichelt.de/documents/datenblatt/A300/attiny_13v-10xx.pdf
Seite 27
und...

"...Figure 11 on page 21 presents the different clock systems in the 
ATtiny13, and their distribution. The figure is helpful in selecting an
appropriate sleep mode..."

ciao
gustav

: Bearbeitet durch User
von Juan (Gast)


Lesenswert?

Danke für die Antworten! Ich muss den Controller nicht unbedingt so 
langsam laufen lassen. Die meiste Zeit schläft er eh. Es hat mich nur 
interessiert, wie das mit dem ISP bei so niedrigem Takt gehen kann.

Und noch was neues, interessantes war dabei:

Axel S. schrieb:
> Wenn der µC aus dem Power-On Reset kommt, sollte er mit dem Takt laufen,
> der sich aus den Fuses ergibt. Wenn du also Reset fest auf L klemmst und
> dem µC Power gibst, sollte er gar nicht so weit kommen, den Takt zu
> reduzieren.

Das hatte ich tatsächlich probiert. Also PB5 vom PORTB auf dem STK500 
auf GND geschaltet (statt Verbindung zu RST auf PORTE; die Verbindung 
zum Resetsystem des STK500 sollte damit unterbrochen gewesen sein), dann 
das STK500 eingeschaltet. Das hat aber nicht funktioniert. Ich habe 
vermutet, dass das STK beim Lesen/Schreiben vielleicht mehrmals 
"resetten" will!? Aber vielleicht habe ich auch einen Fehler gemacht. 
Ich hab es dann ziemlich schnell mit HVSP gemacht.

von Stefan F. (Gast)


Lesenswert?

Du sollst nicht den Reset Ausgang des Programmieradapters auf Low 
ziehen, sondern den Reset Eingang des Mikrocontrollers, den du 
programmieren willst.

von Juan (Gast)


Lesenswert?

Stefan U. schrieb:
> ...sondern den Reset Eingang des Mikrocontrollers, den du
> programmieren willst.
Ja. Wenn der Tiny im SCKT3400D1 steckt, sollte sein Reset-Pin am 
PORTB-Header Pin PB5 sein. Den muss man ja für ISP normalerweise mit RST 
am PORTE verbinden.

Ich versuch das bei Gelegenheit nochmal auf dem Steckbrett. Vielleicht 
hätte ich für Power-On mal noch SCK auf low ziehen müssen.

Datasheet:
> 1. Power-up sequence:
> Apply power between VCC and GND while RESET and SCK are set to “0”. In some 
systems,
> the programmer can not guarantee that SCK is held low during power-up. In this
> case, RESET must be given a positive pulse after SCK has been set to “0”. The 
pulse
> duration must be at least tRST (miniumum pulse widht of RESET pin, see Table 
18-4 on
> page 120 and Figure 19-58 on page 153) plus two CPU clock cycles.

von Stefan F. (Gast)


Lesenswert?

Bei meinem Programmer bricht die Software mit einer Fehlermeldung ab, 
wenn ich dessen Reset Ausgang nach GND oder VCC kurzschließe.

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.