Forum: Mikrocontroller und Digitale Elektronik ATMega8 schaltet LED nicht


von Christian G. (christian1973)


Angehängte Dateien:

Lesenswert?

Hallo,

das folgende extrem einfache Programm soll eine LED an Port PB1 ein- und 
ausschalten:
1
#define F_CPU 1000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
void sleep(int milliseconds) {
7
  while (milliseconds > 0) {
8
    _delay_ms(1);
9
    milliseconds--;
10
  }
11
}
12
13
int main() { 
14
  // set lowest bit to output in DDRB register
15
  DDRB |= (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4);
16
  
17
  while(1) {
18
    // lange Schreibweise
19
    //PORTB = PORTB | ( 1<<PB1 );
20
    // kurze Schreibweise
21
    PORTB |= (1<<PB1);
22
    sleep(500);
23
    PORTB &= ~(1<<PB1);
24
    sleep(500);
25
  }
26
  
27
  return 0;
28
}

Der Hardware-Aufbau ist auch super simpel - siehe Bild Connection. Es 
gibt eine Stromversorgung über 3*1,5v AA Batterien, einen 1uF Cap 
zwischen DVCC und DGND (AVCC und AGND hat nur eine Stromversorgung, aber 
keinen Cap da auch nicht genutzt). Die LED hängt über Widerstand am VCC 
und das GND-Beinchen am PB1 des ATMega.

Programmierung und Hochladen geschieht mittels eines Arduino Pro Mini 
(siehe Bild Programmer) und scheint auch zu funktionieren - zumindest 
liefert die Arduino IDE keinen Fehler und endet mit der positiven 
Meldung:
1
Reading | ################################################## | 100% 0.09s
2
3
avrdude: verifying ...
4
avrdude: 108 bytes of flash verified
5
6
avrdude done.  Thank you.

Kann mir einer sagen, was zum Geier ich hier falsch mache?

Christian

von Euro (Gast)


Lesenswert?

Fehlt vielleicht der PullUp am Reset-Pin?

von Michael M. (Firma: Autotronic) (michael_metzer)


Lesenswert?

Wenn 2,5V am 56 Ohm Widerstand abfallen, dann fließen 44mA. Das ist 
zuviel sowohl für den ATMega8, als auch für die LED.

Miss doch mal den Ausgang nach.

Oder LED verpolt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christian G. schrieb:
> Die LED hängt über Widerstand am VCC und das GND-Beinchen
DU meinst die Kathode, oder?
> am PB1 des ATMega.
Leuchtet die LED, wenn du da eine Brücke nach GND machst?

> #define F_CPU 1000000UL
Echt jetzt? Woher hast du die?
Du kannst da nicht irgendeine Taktfrequenz auswählen, sondern du musst 
dort das angeben, was tatsächlich am Taktgeber reinkommt.

Euro schrieb:
> Fehlt vielleicht der PullUp am Reset-Pin?
Das könnte man mit einem Messgerät mal messen.

von Christian G. (christian1973)


Lesenswert?

Euro schrieb:
> Fehlt vielleicht der PullUp am Reset-Pin?

Danke für Diene Antwort, aber laut Datenblatt hat der ATMega doch einen 
internen Pullup hier, oder nicht? Außerdem funktioniert ja das 
Programmieren und Hochladen - zumindest gibt es diese typischen Fehler 
mit Connection Timed out etc. beim proggen nicht. Nur nachdem ich den 
ATMEga umstecke und unter Strom setze, passiert halt nix :-(

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christian G. schrieb:
> Außerdem funktioniert ja das Programmieren und Hochladen
Richtig: in einem anderen Board.
Du könntest übrigens nach dem Programmieren in diesem Board mal mit dem 
Multimeter messen, ob der PB1 dort dann zappelt.

BTW: das Steckbrett musste ja offenbar schon einiges mitmachen. Da 
könnte sich der eine oder andere Wackelkontakt ansammeln...

: Bearbeitet durch Moderator
von Roland F. (rhf)


Lesenswert?

Hallo,
Christian G. schrieb:
> ...passiert halt nix :-(

Michael M. schrieb:
> Oder LED verpolt.

Hast du das mal überprüft?

rhf

von Christian G. (christian1973)


Lesenswert?

Lothar M. schrieb:
> Christian G. schrieb:
>> Die LED hängt über Widerstand am VCC und das GND-Beinchen
> DU meinst die Kathode, oder?

Äh ja - genau. Sorry falsch geschrieben.

>> am PB1 des ATMega.
> Leuchtet die LED, wenn du da eine Brücke nach GND machst?

Ja, dann leuchtet sie.

>> #define F_CPU 1000000UL
> Echt jetzt? Woher hast du die?
> Du kannst da nicht irgendeine Taktfrequenz auswählen, sondern du musst
> dort das angeben, was tatsächlich am Taktgeber reinkommt.

Ich hab in der Arduino IDE als Taktfrequenz auch 1MHz angegeben - 
allerdings hat mein Programmer einen externen 16MHz Quartz. Kannst das 
zu Schwierigkeiten führen?

> Euro schrieb:
>> Fehlt vielleicht der PullUp am Reset-Pin?
> Das könnte man mit einem Messgerät mal messen.
Ich kann ja mal einen 10kOhm an PIN 1 anbringen - aber wohin geht der zu 
GND?

von Christian G. (christian1973)


Lesenswert?

Michael M. schrieb:
> Wenn 2,5V am 56 Ohm Widerstand abfallen, dann fließen 44mA. Das ist
> zuviel sowohl für den ATMega8, als auch für die LED.

Ich hab den 56er gegen 220 ausgetauscht. Wenn ich die Kathode der LED 
nach GND ziehe Leuchte sie jetzt ganz wenig.

> Miss doch mal den Ausgang nach.
Leider hab ich mein Messgerät verloren :-(

> Oder LED verpolt.
Nein, leider nicht :-( Leuchtet mit Kathode auf GND

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christian G. schrieb:
> allerdings hat mein Programmer einen externen 16MHz Quartz. Kannst das
> zu Schwierigkeiten führen?
Nein, das funktioniert ja.

> Ich hab in der Arduino IDE als Taktfrequenz auch 1MHz angegeben
Es geht nicht darum, was in der Entwicklungsumgebung angegeben ist, 
sondern wie die Fusebits des µC gesetzt sind. Evtl. braucht der 
verfusterweise einen externen Takt...

Christian G. schrieb:
> Leider hab ich mein Messgerät verloren :-(
Tragisch. Handlungsbedarf.

: Bearbeitet durch Moderator
von EAF (Gast)


Lesenswert?

Christian G. schrieb:
> Kann mir einer sagen, was zum Geier ich hier falsch mache?

Das Programm läuft.

Bekomme eine Warnung:
>  warning: "F_CPU" redefined


Also: Nein, ich habe keine Ahnung!
LED falsch rum?

von Christian G. (christian1973)


Lesenswert?

Lothar M. schrieb:
> Christian G. schrieb:
>> allerdings hat mein Programmer einen externen 16MHz Quartz. Kannst das
>> zu Schwierigkeiten führen?
> Nein, das funktioniert ja.

Stimmt auch wieder.


>> Ich hab in der Arduino IDE als Taktfrequenz auch 1MHz angegeben
> Es geht nicht darum, was in der Entwicklungsumgebung angegeben ist,
> sondern wie die Fusebits des µC gesetzt sind. Evtl. braucht der
> verfusterweise einen externen Takt...

Verdammt. Wie finde ich das denn nun raus?

> Christian G. schrieb:
>> Leider hab ich mein Messgerät verloren :-(
> Tragisch. Handlungsbedarf.

Definitiv

von Christian G. (christian1973)


Lesenswert?

EAF schrieb:
> Christian G. schrieb:
>> Kann mir einer sagen, was zum Geier ich hier falsch mache?
>
> Das Programm läuft.
>
> Bekomme eine Warnung:
>>  warning: "F_CPU" redefined

Das spricht für die falsche MHz Zahl, oder? Kann ich die Zeile einfach 
rausnehmen?

>
> Also: Nein, ich habe keine Ahnung!
> LED falsch rum?

Ne. Bei Kathode an GND im selben Aufbau, leuchtet sie.

von Andreas B. (bitverdreher)


Lesenswert?

Christian G. schrieb:
> Verdammt. Wie finde ich das denn nun raus?

Indem Du im Programmer die fuses ausliest und hier mal postest.

von EAF (Gast)


Lesenswert?

Andreas B. schrieb:
> Indem Du im Programmer die fuses ausliest und hier mal postest.

Die werden beim Hochladen von Arduino/AVRdude angezeigt.
Wenn man denn die Ausführlichen Ausgaben aktiviert.

von Euro (Gast)


Lesenswert?

Im Bild mit dem Aufbau oben vergrößert sieht man auf dem IC die 
Beschriftung PIN1. Kann es sein, dass das gar kein nackter ATMega8, 
sondern etwas Vorprogrammiertes ist?

von Max B. (citgo)


Lesenswert?

Euro schrieb:
> Im Bild mit dem Aufbau oben vergrößert sieht man auf dem IC die
> Beschriftung PIN1. Kann es sein, dass das gar kein nackter ATMega8,
> sondern etwas Vorprogrammiertes ist?

Hä?
Das hat der TO eingefügt damit wir wissen wo, was und wie angeschlossen 
ist.

von Sascha (Gast)


Lesenswert?

@Christian

wenn du den Takt auf externen Quarz eingestellt hast, dann läuft er im 
Programmer - aber auf deinem Board mit der LED mangels Quarz natürlich 
nicht.
Da solltest du mal schauen was da eingestellt ist.

Sascha

von Christian G. (christian1973)


Lesenswert?

EAF schrieb:
> Andreas B. schrieb:
>> Indem Du im Programmer die fuses ausliest und hier mal postest.
>
> Die werden beim Hochladen von Arduino/AVRdude angezeigt.
> Wenn man denn die Ausführlichen Ausgaben aktiviert.

Das hier:
1
Block Poll               Page                       Polled
2
Memory Typ  Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW  
3
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- -----
4
eeprom      4    20    128   0    no     512    4    0    9000  9000 0xff 
5
flash       33   10    64    0    yes    8192   64   128  4500  4500 0xff 
6
lfuse       0    0     0     0    no     1      0    0    2000  2000 0x00 
7
hfuse       0    0     0     0    no     1      0    0    2000  2000 0x00 
8
efuse       0    0     0     0    no     0      0    0    0     0    0x00 
9
lock        0    0     0     0    no     1      0    0    2000  2000 0x00 
10
calibration 0    0     0     0    no     4      0    0    0     0    0x00 
11
signature   0    0     0     0    no     3      0    0    0     0    0x00

: Bearbeitet durch User
von Gutes Rad ist teuer (Gast)


Lesenswert?

Lothar M. schrieb:
> DU meinst die Kathode, oder?
>> am PB1 des ATMega.
> Leuchtet die LED, wenn du da eine Brücke nach GND machst?

Klasse!

Wenn der Mega 8 dort H-Pegel ausgibt, schließt man schön dessen Ausgang 
nach GND kurz und erledigt ihn damit.

Prima Tip....

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Christian G. schrieb:
> Das hier

Das war nicht gemeint, sondern die konkreten Werte der Fuses.
https://shawnhymel.com/622/quick-tip-reading-fuse-bits-in-an-arduino/

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Gutes Rad ist teuer schrieb:
> Wenn der Mega 8 dort H-Pegel ausgibt, schließt man schön dessen Ausgang
> nach GND kurz und erledigt ihn damit.
Ach was. Der geht davon nicht kaputt. Der Kurzschluss soll da ja nicht 
für 3 Stunden drin sein. Zum E kennen, ob die LED leuchtet reicht 1 
Sekunde.

Aber auch 3 Stunden bringen den Pintreiber oder den AVR nicht um. 
Probiers einfach mal aus.

von Christian G. (christian1973)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christian G. schrieb:
>> Das hier
>
> Das war nicht gemeint, sondern die konkreten Werte der Fuses.
> https://shawnhymel.com/622/quick-tip-reading-fuse-bits-in-an-arduino/

ok.
1
/usr/local/bin/avrdude -C /Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -c avrisp -p m8 -P /dev/cu.usbmodem14201 -b 19200 -U lfuse:r:-:i -v

gibt das hier aus:
1
avrdude: AVR device initialized and ready to accept instructions
2
3
Reading | ################################################## | 100% 0.02s
4
5
avrdude: Device signature = 0x1e9307 (probably m8)
6
avrdude: safemode: lfuse reads as BF
7
avrdude: safemode: hfuse reads as C5
8
avrdude: safemode: Fuse reading not support by programmer.
9
              Safemode disabled.
10
avrdude: reading lfuse memory:
11
12
Reading | ################################################## | 100% 0.01s
13
14
avrdude: writing output file "<stdout>"
15
:01000000BF40
16
:00000001FF
17
18
avrdude: safemode: lfuse reads as BF
19
avrdude: safemode: hfuse reads as C5
20
avrdude: safemode: lfuse reads as BF
21
avrdude: safemode: hfuse reads as C5
22
avrdude: safemode: Sorry, reading back fuses was unreliable. I have given up and exited programming mode
23
24
avrdude done.  Thank you.

Dieser Teil hier macht mir etwas Sorgen:
1
avrdude: safemode: Fuse reading not support by programmer.
2
              Safemode disabled.

Wie gesagt, ich nutze einen Arduino Pro Mini als Programmer - habe ihn 
exakt nach Vorgaben aufgebaut und er scheint ja auch zu funktionieren, 
wenn man der Ausgabe beim hochladen glauben schenken darf - aber 
trotzdem .

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Christian G. schrieb:
> gibt das hier aus:

Christian G. schrieb:
> I have given up and exited programming mode
> avrdude done.  Thank you.

Inwiefern glaubt du, dass bei dir irgendwas funktionieren würde ?

von S. Landolt (Gast)


Lesenswert?

> lfuse reads as BF

'CKSEL3..0 External Crystal/Ceramic Resonator  1111 - 1010'

von Christian G. (christian1973)


Lesenswert?

MaWin schrieb:
> Christian G. schrieb:
>> gibt das hier aus:
>
> Christian G. schrieb:
>> I have given up and exited programming mode
>> avrdude done.  Thank you.
>
> Inwiefern glaubt du, dass bei dir irgendwas funktionieren würde ?

Weil der Output beim hochladen dieser hier ist, und das doch schon sehr 
danach aussieht, als ob mein Programmer das sauber auf den Mega8 
gebracht hätte:
1
avrdude: Version 6.3-20201216
2
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
3
         Copyright (c) 2007-2014 Joerg Wunsch
4
5
         System wide configuration file is "/Users/chris/Library/Arduino15/packages/MiniCore/hardware/avr/2.1.2/avrdude.conf"
6
         User configuration file is "/Users/chris/.avrduderc"
7
         
8
         Using Port                    : /dev/cu.usbmodem14201
9
         Using Programmer              : stk500v1
10
         Overriding Baud Rate          : 19200
11
         AVR Part                      : ATmega8
12
         Chip Erase delay              : 10000 us
13
         PAGEL                         : PD7
14
         BS2                           : PC2
15
         RESET disposition             : dedicated
16
         RETRY pulse                   : SCK
17
         serial program mode           : yes
18
         parallel program mode         : yes
19
         Timeout                       : 200
20
         StabDelay                     : 100
21
         CmdexeDelay                   : 25
22
         SyncLoops                     : 32
23
         ByteDelay                     : 0
24
         PollIndex                     : 3
25
         PollValue                     : 0x53
26
         Memory Detail                 :
27
28
                                  Block Poll               Page                       Polled
29
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
30
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
31
           eeprom         4    20   128    0 no        512    4      0  9000  9000 0xff 0xff
32
           flash         33    10    64    0 yes      8192   64    128  4500  4500 0xff 0x00
33
           lfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
34
           hfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
35
           efuse          0     0     0    0 no          0    0      0     0     0 0x00 0x00
36
           lock           0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
37
           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
38
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
39
40
         Programmer Type : STK500
41
         Description     : Atmel STK500 Version 1.x firmware
42
         Hardware Version: 2
43
         Firmware Version: 1.18
44
         Topcard         : Unknown
45
         Vtarget         : 0.0 V
46
         Varef           : 0.0 V
47
         Oscillator      : Off
48
         SCK period      : 0.1 us
49
50
avrdude: AVR device initialized and ready to accept instructions
51
52
Reading | ################################################## | 100% 0.02s
53
54
avrdude: Device signature = 0x1e9307 (probably m8)
55
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
56
         To disable this feature, specify the -D option.
57
avrdude: erasing chip
58
avrdude: reading input file "/var/folders/sf/g25yg3ys00q875038hypylbr0000gn/T/arduino_build_519575/Blink.ino.with_bootloader.hex"
59
avrdude: writing flash (108 bytes):
60
61
Writing | ################################################## | 100% 0.18s
62
63
avrdude: 108 bytes of flash written
64
avrdude: verifying flash memory against /var/folders/sf/g25yg3ys00q875038hypylbr0000gn/T/arduino_build_519575/Blink.ino.with_bootloader.hex:
65
avrdude: load data flash data from input file /var/folders/sf/g25yg3ys00q875038hypylbr0000gn/T/arduino_build_519575/Blink.ino.with_bootloader.hex:
66
avrdude: input file /var/folders/sf/g25yg3ys00q875038hypylbr0000gn/T/arduino_build_519575/Blink.ino.with_bootloader.hex contains 108 bytes
67
avrdude: reading on-chip flash data:
68
69
Reading | ################################################## | 100% 0.09s
70
71
avrdude: verifying ...
72
avrdude: 108 bytes of flash verified
73
74
avrdude done.  Thank you.

von S. Landolt (Gast)


Lesenswert?

PS:
Also wenn das mit dem Fuse Low Byte 'BF' stimmt, dann einen Quarz > 1 
MHz an B6 & B7 stecken, einen externen Takt an B6 anschließen oder 
versuchen, die (Standard-) Werks-Fuses zu programmieren; derzeit hat der 
ATmega8 auf dem Steckbrett keinen Takt.

von Stefan F. (Gast)


Lesenswert?

> use reading not support by programmer

Ich frage mich, was du auf das Arduino Modul geflasht hast. Der ISP 
Sketch der in der Arduino IDE enthalten ist unterstützt meines Wissens 
nach den Zugriff auf die Fuses.

Jedenfalls ist dein Mikrocontroller (Target) mit Quarz funktionsfähig, 
sonst hättest du dein Programm nicht hochladen können. Danach läuft er 
ohne Quarz offenbar nicht. Ergo: Schließe einen Quarz an.

Oder besorge dir einen Programmieradapter, mit dem du die Fuses ändern 
kannst, um auf den internen R/C Oszillator umzuschalten.

von EAF (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Oder besorge dir einen Programmieradapter, mit dem du die Fuses ändern
> kannst, um auf den internen R/C Oszillator umzuschalten.

Hat er doch!
Oder?

Muss ihm nur 1MHz intern auswählen und einmal Bootloader brennen 
drücken.
Das setzt die Fuses.
Das geht auch wenn "kein Bootloader" ausgewählt wurde.

von Manfred (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich frage mich, was du auf das Arduino Modul geflasht hast. Der ISP
> Sketch der in der Arduino IDE enthalten ist unterstützt meines Wissens
> nach den Zugriff auf die Fuses.

Wie ich die A*-IDE verstehe, werden die Fuses nur beim Flashen des 
Bootloaders gemäß der Definition in der Boards.txt gesetzt.

Lassen sich mit der A*-IDE überhaupt Programme für den ATMega8 
compilieren, der ist doch in deren Universum nicht vorgesehen?

von EAF (Gast)


Lesenswert?

Manfred schrieb:
> Lassen sich mit der A*-IDE überhaupt Programme für den ATMega8
> compilieren, der ist doch in deren Universum nicht vorgesehen?
Mit der richtigen BoardDefinition lässt sich jeder µC nutzen, für den es 
eine gcc gibt.

Also: JA!

von Andre (Gast)


Lesenswert?

Manfred schrieb:
> Stefan ⛄ F. schrieb:
>
>> Ich frage mich, was du auf das Arduino Modul geflasht hast. Der ISP
>> Sketch der in der Arduino IDE enthalten ist unterstützt meines Wissens
>> nach den Zugriff auf die Fuses.
>
> Wie ich die A*-IDE verstehe, werden die Fuses nur beim Flashen des
> Bootloaders gemäß der Definition in der Boards.txt gesetzt.
> Lassen sich mit der A*-IDE überhaupt Programme für den ATMega8
> compilieren, der ist doch in deren Universum nicht vorgesehen?

Dafür gibt es Erweiterungen
z.B.: https://github.com/MCUdude/MiniCore

von Christian G. (christian1973)


Lesenswert?

Andre schrieb:
> Manfred schrieb:
>> Stefan ⛄ F. schrieb:
>>
>>> Ich frage mich, was du auf das Arduino Modul geflasht hast. Der ISP
>>> Sketch der in der Arduino IDE enthalten ist unterstützt meines Wissens
>>> nach den Zugriff auf die Fuses.
>>
>> Wie ich die A*-IDE verstehe, werden die Fuses nur beim Flashen des
>> Bootloaders gemäß der Definition in der Boards.txt gesetzt.
>> Lassen sich mit der A*-IDE überhaupt Programme für den ATMega8
>> compilieren, der ist doch in deren Universum nicht vorgesehen?
>
> Dafür gibt es Erweiterungen
> z.B.: https://github.com/MCUdude/MiniCore

Die hab ich drin

von Christian G. (christian1973)


Lesenswert?

EAF schrieb:
> Stefan ⛄ F. schrieb:
>> Oder besorge dir einen Programmieradapter, mit dem du die Fuses ändern
>> kannst, um auf den internen R/C Oszillator umzuschalten.
>
> Hat er doch!
> Oder?
>
> Muss ihm nur 1MHz intern auswählen und einmal Bootloader brennen
> drücken.
> Das setzt die Fuses.
> Das geht auch wenn "kein Bootloader" ausgewählt wurde.

Da zeigt sich einmal mehr meine erschreckende Unwissenheit in Bezug auf 
Mikrocontroller.

Wenn ich die Antworten richtig verstanden habe, dann habe ich die Fuses 
des yC beim Vorgang "Brennen Bootloader" auf externen 16MHz Crystal 
gesetzt und nun kann ich nicht einfach sagen, mach mal intern 8MHz, wenn 
ich das Programm brenne? Also, die Fuses werden nur beim Bootloader 
brennen gesetzt und danach sind die Einstellungen unter Tools -> Clock 
eigentlich wirkungslos?

von Christian G. (christian1973)


Lesenswert?

S. Landolt schrieb:
> PS:
> Also wenn das mit dem Fuse Low Byte 'BF' stimmt, dann einen Quarz > 1
> MHz an B6 & B7 stecken, einen externen Takt an B6 anschließen oder
> versuchen, die (Standard-) Werks-Fuses zu programmieren; derzeit hat der
> ATmega8 auf dem Steckbrett keinen Takt.

Verdammt. Ich versteh einfach noch zu wenig von dem Kram :-)

von Christian G. (christian1973)


Lesenswert?

DER GÄHHT. ISCH WERD BEKLOPPT, DER GÄHHT.

oder anders ausgedrückt. Kaum macht mans richtig, schon funktioniert es.

Ich habe, wie geraten, unter Tools->Clock den Takt auf intern 8MHz 
gestellt, einmal Bootloader brennen gedrückt und dann mein Programm zur 
Sicherheit noch einmal hochgeladen. Und siehe da, die LED blinkt.

Nächstes Ziel: Marsroboter auf Basis eines Mega8 bauen :-)

Euch allen vielen, vielen Dank für die vielen Hilfestellungen und 
Tips!!!

: Bearbeitet durch User
von erklehr behr (Gast)


Lesenswert?

Christian G. schrieb:
> Euch allen vielen, vielen Dank für die vielen Hilfestellungen und
> Tips!!!

Und nicht vergessen auch mal einen keramischen Abblock-
Kondensator zu verwenden. Bei manchen AVR-Controllern brauchts
auch mal zwei oder drei oder vier ....

Braucht's nicht? Geht auch ohne? Ja, das ganze Internet spricht
so. YMMV. Wenn's nicht funktioniert liegt es nie an fehlenden
Abblock-Kondensatoren. Am Öl kann's nicht gelegen haben, war ja
keins drin.

von Christian G. (christian1973)


Lesenswert?

erklehr behr schrieb:
> Christian G. schrieb:
>> Euch allen vielen, vielen Dank für die vielen Hilfestellungen und
>> Tips!!!
>
> Und nicht vergessen auch mal einen keramischen Abblock-
> Kondensator zu verwenden. Bei manchen AVR-Controllern brauchts
> auch mal zwei oder drei oder vier ....

Jetzt muss ich mich schon wieder als Noob outen. Ich hab zwischen DGND 
und DVCC einen 1uF Kondensator und auf den VCC und GND Rails einen 100uF 
drin. Meinst Du so etwas, oder brauch ich noch woanders was?

> Braucht's nicht? Geht auch ohne? Ja, das ganze Internet spricht
> so. YMMV. Wenn's nicht funktioniert liegt es nie an fehlenden
> Abblock-Kondensatoren. Am Öl kann's nicht gelegen haben, war ja
> keins drin.
:-)

von Stefan F. (Gast)


Lesenswert?

Christian G. schrieb:
> Jetzt muss ich mich schon wieder als Noob outen. Ich hab zwischen DGND
> und DVCC einen 1uF Kondensator und auf den VCC und GND Rails einen 100uF
> drin. Meinst Du so etwas, oder brauch ich noch woanders was?

Elkos alleine reichen nicht, die sind zu träge. Orientiere dich am 
Datenblatt des verwendeten Spannungsreglers. Da steht drin, welche 
Kondensatoren er drumherum braucht, um stabil zu arbeiten.

Zusätzlich soll jedes IC einen eigenen 100nF Kondensator (nicht Elko!) 
möglichst nahe zu seinen VCC/GND Pins haben.

Weitere Elkos braucht man normalerweise nicht.

von EAF (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Zusätzlich soll jedes IC einen eigenen 100nF Kondensator (nicht Elko!)
> möglichst nahe zu seinen VCC/GND Pins haben.

Nicht nur einen!
Sondern an jedem Pärchen Versorgungspins einen.
Beim ATMega8 sind das damit schon 2

Reset und Aref dürfen, je nach Umständen, auch jeweils noch einen 
bekommen.

Somit sind wir bei 4 keramischen 100nF

Meine Glaskugel sagt:
Der keramische 100nF Kondensator ist das häufigste Bauteil auf digital 
Platinen.

Christian G. schrieb:
> Also, die Fuses werden nur beim Bootloader
> brennen gesetzt und danach sind die Einstellungen unter Tools -> Clock
> eigentlich wirkungslos?
Wirkungslos?
Nee... Deine Einstellung sagt dem Programm wie schnell der µC getaktet 
ist. Wird z.B. für Delays, Timeouts oder Baudrate Berechnungen benötigt.

Eigentlich...
Eigentlich kann man die Fuses Einstellungen auch im C Programm 
vornehmen, dann muss man nur die *.elf Datei dem AVRdude vorwerfen um 
sie gleich mit zu setzen. Leider wird das nicht unmittelbar von Arduino 
unterstützt, da Arduino in der Regel Bootloader nutzt, dieser aber die 
Fuses nicht schreiben kann.

von Georg M. (g_m)


Lesenswert?

Stefan ⛄ F. schrieb:
> Zusätzlich soll jedes IC einen eigenen 100nF Kondensator (nicht Elko!)
> möglichst nahe zu seinen VCC/GND Pins haben.

Meine Mikrocontroller bekommen von mir 220nF. Naja, ich kann es mir 
leisten.

von Stefan F. (Gast)


Lesenswert?

Georg M. schrieb:
> Meine Mikrocontroller bekommen von mir 220nF

Außenseiter :-)

von Olga M. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Georg M. schrieb:
>> Meine Mikrocontroller bekommen von mir 220nF
>
> Außenseiter :-)

Spitzenreiter ;-)

von EAF (Gast)


Lesenswert?

Georg M. schrieb:
> Meine Mikrocontroller bekommen von mir 220nF. Naja, ich kann es mir
> leisten.

Mein Rat: Ersatzschaltbild betrachten!
Danach ist ein jeder Kondensator, auch mit seiner Leiterbahn, eine 
Kombination aus R, L und C.

Dein 220nF hat also andere Eigenschaften als ein 100nF.
Nicht unbedingt bessere.
Was besser ist, lässt sich nur im konkreten Einzelfall bewerten.

Drum setzt man auch gerne, an kritischen Stellen, mehrere verschiedene 
parallel.  Gerade wenn anlog und digital Schaltungen sich auf einem 
Board versammeln.

von Karl B. (gustav)


Lesenswert?

EAF schrieb:
> Drum setzt man auch gerne, an kritischen Stellen, mehrere verschiedene
> parallel.

Hi,
nicht nur das, habe vor den Vcc-Pins am IC direkt 100µH Ferritdrosseln 
noch dran. (Und das auch ohne den ADC zu benutzen.). Die UART Anschlüsse 
wurden jeweils durch eine Ferritperle gezogen.
Frappierende Wirkung. Hörte immer im UKW-Taschenradio die Serielle RS232 
Schnittstelle takten vorher.

ciao
gustav

von Andreas B. (bitverdreher)


Lesenswert?

Georg M. schrieb:
> Meine Mikrocontroller bekommen von mir 220nF. Naja, ich kann es mir
> leisten.

Dummerweise gilt hier halt nicht: Viel hilft viel. 100nF sind eher die 
obere Grenze.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas B. schrieb:
> Dummerweise gilt hier halt nicht: Viel hilft viel.
> 100nF sind eher die obere Grenze.
Auch nur die halbe Wahrheit, denn vorrangig ist die Bauform relevant.
Je kleiner, desto kürzer sind die elektrischen Verbindungen und desto 
niedriger sind die parasitären Induktivitäten.

Deshalb gibt es auch Kondensatoren mit Kontakten an den Längsseiten. 
Deren Bauform heißt dann 0204, 0306, 0805 statt 0402, 0603, 0805 oder 
eben "Reversed":
https://www.mouser.de/c/passive-components/capacitors/ceramic-capacitors/mlccs-multilayer-ceramic-capacitors/multilayer-ceramic-capacitors-mlcc-smd-smt/?case%20code%20-%20in=0204%20%28Reversed%29

Oder andersrum: setze einen Kondensator im kleinsten plausiblen Gehäuse 
dicht an die Versorgungspins (es macht natürlich keinen Sinn, einen 0402 
Konsdensator zwischen 2 Pads eines Dil-Gehäuses zu löten). Wenn es einen 
Kondensator mit größerer Kapazität im gleichen Gehäuse gibt, dann nimm 
den.

Dort gibts das in Worten und im Film:
https://electronics360.globalspec.com/article/17341/decoupling-capacitors-and-modern-component-package-sizes

Aber für den AVR ist das Thema noch recht entspannt. Da reicht ein 
keramischer Kondensator mit einer Kapazität ab 47nF aufwärts und 
passender Spannung möglichst direkt zwischen dem Versorgungspärchen (Vcc 
und GND).
Und wenn man dann einen 220nF Kondensator mit 10V nimmt, dann kommt man 
automatisch bei einer kompakten Bauform heraus.

: Bearbeitet durch Moderator
von Andreas B. (bitverdreher)


Lesenswert?

Lothar M. schrieb:
> Je kleiner, desto kürzer sind die elektrischen Verbindungen und desto
> niedriger sind die parasitären Induktivitäten.
Stimmt, ich bin jetzt mal von gegebener Bauform ausgegangen.

> Deshalb gibt es auch Kondensatoren mit Kontakten an den Längsseiten.
Interessant. Die habe ich noch nie gesehen.

> Und wenn man dann einen 220nF Kondensator mit 10V nimmt,
Hat man bei 5V evtl. nur noch 100nF. ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas B. schrieb:
> Stimmt, ich bin jetzt mal von gegebener Bauform ausgegangen.
Aber gerade bei gegebener Bauform nimmt man den Kondensator mit der 
höheren Kapazität. Denn gerade bei einer gegebenen Bauform ist 
unabhängig von der Kapazität auch die parasitäre Induktivität annähernd 
gleich.

> Hat man bei 5V evtl. nur noch 100nF. ;-)
Dann passt es ja wieder. Und 220nF sind die besseren 100nF... ;-)

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.