AVR-Programm hochladen

Hallo

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 ?

Danke im vorraus !

Matthias

Reply to
Matthias Sinjen
Loading thread data ...

Hallo Matthias,

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

formatting link

Viel Glück noch! Johannes

Reply to
Johannes Bauer

uisp --help z.B.?

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.

HTH, Sebastian

Reply to
Sebastian Voitzsch

Hi

Ich benutze aber einen externen 4 MHz Quartz - da muß ich doch jetzt Fuses setzen oder nicht ?

Ansonsten waren es genau die Infos die ich brauchte, danke !

Gruß Matthias

Reply to
Matthias Sinjen

Schau ich mir mal an, danke !

Gruß Matthias

Reply to
Matthias Sinjen

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

Reply to
Sebastian Voitzsch

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 ?

Gruß Matthias

Reply to
Matthias Sinjen

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.

Gruß, Sebastian

Reply to
Sebastian Voitzsch

Sebastian Voitzsch schrieb:

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 ?

Gruß Matthias

Reply to
Matthias Sinjen

Du verstehst richtig.

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.

Sebastian

Reply to
Sebastian Voitzsch

Hallo,

Matthias Sinjen schrieb:

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)
Reply to
Christian Zietz

Christian Zietz schrieb:

Ok, werd dran denken wenn ich mal sowas mache. Bei mir gehts jetzt um erste Schritte in der Programmierung...

Aber Danke für den Tipp.

Gruß Matthias

Reply to
Matthias Sinjen

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.