Forum: Mikrocontroller und Digitale Elektronik atmega328 an 5V


von Mirgol (Gast)



Lesenswert?

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?
1
#define F_CPU 8000000UL
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
int main(void)
6
{
7
  DDRB |= (1<<DDB1);
8
//PORTB=0x00;
9
    while (1) 
10
    {
11
  PORTB |= (1<<PORTB1);
12
  _delay_ms(1);
13
  PORTB &= ~ (1<<PORTB1);
14
  _delay_ms(1);
15
    }
16
}

Danke

von H. H. (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

DU musst beide GND Pins anschließen, und nicht nur VCC, sondern auch 
AVCC.

von uff basse (Gast)


Lesenswert?

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.

von Mirgol (Gast)


Lesenswert?

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

1
avrdude: stk500v2_ReceiveMessage(): timeout
2
avrdude: AVR device initialized and ready to accept instructions
3
4
Reading | ################################################## | 100% 0.97s
5
6
avrdude: Device signature = 0xffffff (probably .avr8x_mega) (retrying)
7
8
Reading | ################################################## | 100% 0.97s
9
10
avrdude: Device signature = 0x5555aa
11
avrdude: Expected signature for ATmega328P is 1E 95 0F
12
         Double check chip, or use -F to override this check.
13
14
avrdude done.  Thank you.

von H. H. (Gast)


Lesenswert?

Mirgol schrieb:
> L = 0xE2
> H =  0x59
> E = ff

Du hast ihn für einen Quarz von 400-900kHz eingestellt!

von Michael B. (laberkopp)


Lesenswert?

Mirgol schrieb:
> Die Fuses:
> L = 0xE2
> H =  0x59
> E = ff
> LB = FF

Wie kommt man auf die, würfeln ?

von Christian S. (roehrenvorheizer)


Lesenswert?

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

von H. H. (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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).

von links oder rechts (Gast)


Lesenswert?

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.

von Mirgol (Gast)


Lesenswert?

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.

von links oder rechts (Gast)


Lesenswert?

Mirgol schrieb:
> Wusste gar nicht dass es solche Fuses überhaupt gibt bis heute.

Deinem Schaltplan nach zu urteilen weisst du noch viel mehr nicht.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Andreas B. (bitverdreher)


Lesenswert?

Mirgol schrieb:
> Wusste gar nicht dass es solche Fuses überhaupt gibt bis heute.

Aus aktuellem Anlaß wieder mal:
https://www.engbedded.com/fusecalc/

von Christian S. (roehrenvorheizer)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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?

von Johannes F. (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

Um solche Fehler künftig zu vermeiden, empfehle ich ebenfalls den 
Engbedded Fuse Calculator und diesen Artikl: 
http://stefanfrings.de/avr_verfused/index.html

von Wendels B. (wendelsberg)


Lesenswert?

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.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

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...

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.