Hi, ich habe einen Atmega328P mit einem ISP Programmer programmiert..
https://www.sparkfun.com/datasheets/Components/SMD/ATMega328.pdf
Als ersten Test möchte ich eine LED blinken lassen.
Im Anhang ist der Plan.
5 V von einem Netzteil werden verwendet.
Die LED blinkt.
Aber nur wenn man XTAL1 berührt.
Warum?
Die Blinkfrequenz unterscheidet sich je nachdem wie man XTAL1 berührt.
Wenn ich XTAL1 mit meiner Hand berühre wird es am schnellsten.
Wo steht eigentlich wie man den Atmega328 korrekt beschaltet?
Warum muss man XTAL beschalten und kann nicht einfach den internen
Oszillator verwenden?
Mirgol schrieb:> Aber nur wenn man XTAL1 berührt.> Warum?
Falsche Oszillator-Fuses ausgewählt.
> Die Blinkfrequenz unterscheidet sich je nachdem wie man XTAL1 berührt.> Wenn ich XTAL1 mit meiner Hand berühre wird es am schnellsten.
Du bist eine Antenne.
> Wo steht eigentlich wie man den Atmega328 korrekt beschaltet?
Im Datenblatt.
> Warum muss man XTAL beschalten und kann nicht einfach den internen> Oszillator verwenden?
Muss man nicht beschalten.
P.S.: Die LED braucht einen Vorwiderstand! Und GND/Vcc einen
Kondensator.
Mirgol schrieb:> Wo steht eigentlich wie man den Atmega328 korrekt beschaltet?
Am leichtesten ist es wenn man vom Schaltplan eines
Arduino Uno spickt. Kann fast nichts schiefgehen.
So wie du es machst ist es jedenfalls optimal falsch und schlecht.
Na toll jetzt habe ich die Fuses neu programmiert und jetzt erreiche
ich den nicht mehr mit dem Programmer.
Aber die LED blinkt jetzt konstant vor sich hin.
Da ist jetzt wohl ne stabile Frequenz vorhanden.
Die Fuses:
L = 0xE2
H = 0x59
E = ff
LB = FF
>>>: avrdude -c stk500 -p m328p -P /dev/ttyUSB0 -B 0.25 -U
flash:w:"/home/23_AVR/at328/main.hex":i
Mirgol schrieb:> Aber nur wenn man XTAL1 berührt.> Warum?
Lies einfach alles, was Du finden kannst in den Datenblättern über die
Takterzeugung. Dein Mega328 ist für Anfänger schon reichlich
kompliziert, wenn man die einfachsten Dinge nicht weiß. Die ersten
µC-Generation der AVR brauchten immer einen Quarz oder den Anschuß eines
externen Taktoszillators. Dann später kamen die Typen mit den vielen
Optionen und internen Taktgebern auf. Die ganzen Einstellungen sind
reichlich verwirrend.
Am besten Beispiele suchen und dann erst programmieren. Sonst passiert
es so wie Du beschreibst.
mfg
H. H. schrieb:> Mirgol schrieb:>> L = 0xE2>> H = 0x59>> E = ff>> Du hast ihn für einen Quarz von 400-900kHz eingestellt!
Sorry, das war falsch.
Er steht auf dem internen 8MHz Oszillator.
Aber du hast den Reseteingang abgeschaltet, dann kann er nur noch mit
einem HV-Programmer bearbeitet werden.
Für die Zukunft: Fasse weder die RSTDISBL noch SPIEN Fuse an. RSTDISBL
(highfuse Bit 7) lässt du immer auf 1 (unprogrammiert) und SPIEN
(highfuse Bit 5) immer auf 0 (programmiert).
Wenn man AVR Studio oder Atmel Studio zum Programmieren
verwenden würde, würde man wenigstens sehen welche Fuses
man wie einstellt. Und die Gefahr die Reset-Funktion zu
eliminieren wäre deutlich geringer.
Aber hier hauen sich die User lieber gegenseitig die Hex-
Zahlen um die Ohren und machen dabei Fehler ohne Ende.
hatte zum Glück noch zwei weitere atemga328P.
Nur beim ersten mal musste ich meine Hand an XTAL halten damit er
programmiert. ( Alternativ hätte ich wohl nen 16 MHz Takt erzeugen
müssen oder einen 16 MHz Oszillator von einem Arduino Board anzapfen
können)
Habe dann Fuse L = 0xC2 auf den Atmega328P geschrieben.
Dann gings auch ohne Hand :D
Jetzt kann ich meine Weihnachtsbeleuchtung auch ohne Programmer, mit
Batterien laufen lassen xD
H. H. schrieb:> Aber du hast den Reseteingang abgeschaltet, dann kann er nur noch mit> einem HV-Programmer bearbeitet werden.
Interessant! Danke
Matthias S. schrieb:> Für die Zukunft: Fasse weder die RSTDISBL noch SPIEN Fuse an. RSTDISBL> (highfuse Bit 7) lässt du immer auf 1 (unprogrammiert) und SPIEN> (highfuse Bit 5) immer auf 0 (programmiert).
ja das SPIEN habe ich auch schon gesehen.
Danke sehr
---
bzw. danke allen die reagiert haben.
:D
links oder rechts schrieb:> Wenn man AVR Studio oder Atmel Studio zum Programmieren> verwenden würde, würde man wenigstens sehen welche Fuses> man wie einstellt. Und die Gefahr die Reset-Funktion zu> eliminieren wäre deutlich geringer.
Wollte einfach mal schauen, ob ich ohne IDE klar komme. Habe aber dann
am Ende AVRDUDESS verwendet um die Fuses auszulesen/ zu beschreiben.
Wusste gar nicht dass es solche Fuses überhaupt gibt bis heute.
Mirgol schrieb:> Wusste gar nicht dass es solche Fuses überhaupt gibt bis heute.
Man muss bei derartig komplexen Bausteinen wie einem Mikrocontroller
zwangsweise das Datenblatt studieren - auf jeden Fall die grundlegenden
Dinge wie elektrische Daten, Fuses und Taktoptionen. Wenn du mit Ports
rummachst, dann das Kapitel zu Ports, für ADC das Kapitel ADC usw.
Das ist nun mal kein 7400, sondern ein kompletter Computer, wenn auch
stark komprimiert.
links oder rechts schrieb:> hier hauen sich die User lieber gegenseitig die Hex-Zahlen um die Ohren
Nun, mit den Hex-Zahlen umzugehen, ist auch keine Hexerei.
Und anstatt gleich mit Mikrocontrollern in die Welt der Elektronik
einzusteigen, hättest Du mit einer Röhre anfangen können.
Siehe:
https://www.pinterest.de/pin/1688918591527460/?mt=login
Vorsicht, tolle Fotos, nicht zu Hause nachbauen!
Frohe Weihnachten!
mfg
Mirgol schrieb:> Na toll jetzt habe ich die Fuses neu programmiert und jetzt erreiche> ich den nicht mehr mit dem Programmer.> Aber die LED blinkt jetzt konstant vor sich hin.
Wenn der Mikrocontroller läuft, ist er auch per ISP erreichbar.
Verwendest du den Bootloader?
Stefan F. schrieb:> Wenn der Mikrocontroller läuft, ist er auch erreichbar.
Aber nicht per ISP, wenn Reset deaktiviert wurde ...
Mirgol schrieb:> mit einem ISP Programmer programmiert
links oder rechts schrieb:> Aber hier hauen sich die User lieber gegenseitig die Hex-> Zahlen um die Ohren
Solche Kenntnisse sind essentiell, wenn man sinnvoll mit uCs hantieren
will.
Also diese besser am Anfang lernen.
Andreas B. schrieb:> Aus aktuellem Anlaß wieder mal:> https://www.engbedded.com/fusecalc/
Richtig, für Anfänger absolut empfehlenswert, durch die Benutzung kann
er sehr viele Fehler vermeiden. Insbesondere in Kombination mit dem
"normalen" Datenblatt-Lesen. Er kann nämlich damit recht einfach (und
erstmal ohne potentiellen Schaden) überprüfen, ob er das Datenblatt
richtig verstanden hat.
Das so aufgebaute Wissen ist spätestens dann extrem hilfreich, wenn er
es mal mit einem AVR8 zu tun hat, der von engbedded (noch) nicht
unterstützt wird...
Eine eigene Frage?
Dieser Thread ist über 3 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.