Ich bin Anfänger in Sachen Microcontroller und hab ne Frage:
Ich hab mir bei mikrocontroller.net ein testplatine und einen Atmega8 gekauft. Jetzt möchte ich mit uisp unter Linux ein Programm auf den Controller laden, aber ich hab nirgendwo eine Anleitung zu uisp gefunden. Muß man da nicht zuerst auch irgendwelche Fusebits bearbeiten ? Hat jemand einen Link zu einer Anleitung oder ähnliches ?
ich kenne mich leider nicht mit uisp aus. Unter Linux habe ich "avrdude" verwendet - sehr vielseitig (Anzahl der µCs bzw. der Interfaces). Da ist auch die Dokumentation sehr gut. Wenn dus ausprobieren möchtest
Jedenfalls: ich vermute mal, Du verwendest den Parallelport-Programmer. Wenn Dein Programmfile dann rom.hex heißt, lautet der richtige Befehl
uisp -dprog=avrisp --upload if=rom.hex
Mit
uisp -dprog=avrisp --verify if=rom.hex
kannst Du überprüfen, ob's geklappt hat. Fuses lesen und anzeigen tut man mit
uisp -dprog=avrisp --rd_fuses
Geschrieben werden die Fuses mit --wr_fuse-l=xx / --wr_fuse_h=xx /
--wr_fuse_e=xx oder --wr_lock=byte. Vom Lockbyte würde ich aber die Finger lassen... Und immer daran denken: 0 heißt Fuse gesetzt, 1 heißt Fuse gelöscht! Insbesondere bei den CKSEL-Fuses aufpassen, vor allem, wenn man keinen ext. Oszillator zur Hand hat!
Vor einem neuen Programmierzyklus muß immer erst gelöscht werden, das funktioniert mit
uisp -dprog=avrisp --erase
Last not least kann man den Inhalt des avr mit
uisp -dprog=avrisp --download of=avr.hex
auslesen.
Eigentlich nicht. Die ATmega haben alle einen internen Oszillator, der ist auch standardmäßig aktiviert. D.h., die Dinger tun sofort, ohne externen Takt.
Sieh Dir evtl. mal PonyProg2000 an, das ist am Anfang vielleicht übersichtlicher zu handhaben. Uisp geht halt schön fix. Noch ein kleines Skript, was das Löschen automatisiert und die Parameter reduziert:
----88-----
Das Skript heißt bei mir progavr und wird mit "progavr rom.hex" aufgerufen.
Stimmt. Fuses machen sich mit PonyProg ganz gut. Aber dran denken: erst auf "read" gehen, damit die aktuellen Einstellungen eingelesen werden! Mit uisp muß man sich die Fuse-Bytes halt manuell zusammenbasteln. Geht auch, ist aber fehleranfälliger. Einen Oszillator für "Notfälle" hast Du zur Hand? Nur mit einem Quarz ist Dein AVR tot, wenn Du ihn versehentlich auf "extenal clock" programmierst (CKSEL: 0000)! Der interne kann 1, 2, 4 und 8 MHz - warum dann einen Quarz für diese Frequenzen benutzen? Reicht Dir 1% Taktgenauigkeit nicht aus? RS-232 funktioniert mit 4MHz extern auch nicht wirklich (wenigstens nicht >= 9600 Baud), da muß ein "krummer" Takt her (7.3728 MHz, vgl. Table 61 im Datenblatt).
Sebastian Voitzsch schrieb: Einen Oszillator für "Notfälle" hast Du zur Hand?
Also ich bin ja nun eher Anfänger und dachte ich nehm für die ersten Versuche die Schaltung die auf diesem Testboard drauf ist. Das Board ist das von shop.microcontroller.net (oder so ähnlich).
Das ist jetzt ein 4 MHz Quartz zwischen Pin 9 und 10 und dann jeweils ein kleiner Keramikkondensator von den beiden Pins nach Masse.
Ist das jetzt nicht gut ? Welche Fuse-Bits muß ich denn nun setzen damit das auch funktioniert ?
Die funktionieren auch mit 1MHz. Das Testboard enthält Quarz und Kondensatoren nur, weil ältere AVRs keinen internen Oszillator enthalten.
Gut? Schlecht? Es besteht halt kein Grund, an den Fuses rumzudaddeln. Aber nun denn:
CKSEL sind die Bits 0-3 des Fuse-L-Bytes. Im Auslieferungszustand des ATmega8 ist das Fuse-L-Byte
11 10 0001 --> 0xE1 BOD SUT CKSEL
BOD bleibt, wie es ist, SUT wird auf 11 geändert, CKSEL auf 1111 (SUT und CKSEL0 zusammen ergeben 65ms Verzögerung nach dem Reset, CKSEL 3-1 legen den Frequenzbereich 3-8MHz fest; Tabellen S. 24ff im Datenblatt):
11 11 1111 --> 0xFF.
Wie immer - keine Gewähr. Und sieh erstmal nach, ob uisp beim Auslesen der Fuses tatsächlich einen Wert von 0xE1 für das L-Byte anzeigt. Giftig ist der Wert 0000 für CKSEL, der stellt externen Takt ein.
Ok, versteh ich das richtig ? Wenn ich an den Fuses nichts ändere, dann läuft der uC mit einem internen Oszillator auf 1 MHz ? Das wäre dann natürlich das optimale für mich. Ignoriert der dann auch die externe Beschaltung oder muß ich dann den Quartz und die beiden Kondensatoren auslöten ?
Ich würd's ausprobieren. Lt. Datenblatt sollen XTAL1 & 2 unverbunden bleiben, wenn der int. Oszillator benutzt wird. Aber es sollte auch mit Beschaltung funktionieren.
Aber Achtung: Es gibt iirc recht große Toleranzen und eine Temperaturabhängigkeit. Wenn Du einen genauen Takt (z.B. zur Zeitmessung) brauchst, taugt der interne Oszillator nichts.
CU Christian
--
Christian Zietz - CHZ-Soft - czietz (at) gmx.net
WWW: http://chzsoft.com.ar/ - Fido: Christian Zietz@2:2437/74.9
PGP-Key auf Anfrage oder ueber http://wwwkeys.de.pgp.net (Port 11371)
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.