Forum: Mikrocontroller und Digitale Elektronik AVR-Tutorial: LEDs leuchten nur bei angeschlossenem ISP


von Philip (Gast)


Lesenswert?

Hi Leute!

Ich bin gerade dabei, das AVR Tutorial (Grundlagen I/O) dieser Seite 
nachzuvollziehen.
Ich habe den Atmega8-Controller auf einem Steckbrett und benutzte den 
original ISP von AVR (MKII) unter Ubuntu 14.04.

Zum Verhalten:

Ich kann den uC ohne Weiteres programmieren, und alles funktioniert 
bisher, so wie es soll.

Wenn ich jedoch den uC starte, ohne dass dabei der ISP angeschlossen ist 
tut sich nichts. Erst wenn ich den uC anschließe fangen die LEDs an zu 
leuchten. Ziehe ich dann den USB-Stecker wieder ab, leuchten sie auch 
dauerhaft.

Steckbrett am Strom -> nichts
ISP am USB-Anschluss vom PC und am Steckbrett -> LEDs leuchten
Steckbrett wieder nur am Strom -> LEDs leuchten


Ist dieses Verhalten normal? Ich denke mal nicht. Woran kann das liegen?

von TomA (Gast)


Lesenswert?

Hallo Philip,

für mich klingt das nach einem undefinierten Reset-Pegel, welcher durch 
das Programmiergerät in die richtige Richtung gezogen wird.

Probier den Pegel am Reset-Pin durch PullUp- oder Down-Widerstand (ca. 
10k) auf den richtigen Pegel zu ziehen.

Hat der Mega8 nicht eine Fuse mit der der Reset-Pin beeinflußbar ist? 
Aber das wäre mit Vorsicht zu verwenden, nicht daß er am Ende nicht mehr 
programmierbar ist.

Gruß. Tom

von Karl H. (kbuchegg)


Lesenswert?

Philip schrieb:

> tut sich nichts. Erst wenn ich den uC anschließe fangen die LEDs an zu
> leuchten. Ziehe ich dann den USB-Stecker wieder ab, leuchten sie auch
> dauerhaft.

Heisst das, du ziehst nur den USB Stecker vom Programmer zum PC ab?

Wenn ja. Dann trenne den Progammer vom Mega! AM PC kann der Programmer 
die ganze Zeit angeteckt bleiben. Aber kein Mensch weiß, was der 
Programmer mit der Reset-Leitung des Mega macht, wenn der Programmer 
keinen Strom über USB bekommt.

von Philip (Gast)


Lesenswert?

Hi,

vielen Dank für die Antworten. Ich bin mir leider nicht ganz sicher ob 
mein Problem "richtig" rübergekommen ist.


Wenn das Steckbrett mit dem PC über ISP verbunden ist, kann ich ganz 
normal den Mega8 flashen und neue Programme aufspielen, die auch sofort 
angenommen und umgesetzt werden.

Trenne ich dann den Mega8 vom ISP (bzw. den ISP von PC) läuft das 
"Programm" (also in meinem Fall das Leuchten der LEDs) ganz normal 
weiter.

Trenne ich dann das Steckbrett vom Strom, hören die LEDS 
selbstverständlich auf zu leuchten.

Verbinde ich das Steckbrett dann wieder mit dem 5V Netzteil, passiert 
nichts.

Wenn ich daraufhin den ISP wieder anschließe, also nur dem ISP per USB 
Strom zuführe. Fangen die LEDs wieder an zu leuchten, jedoch muss ich 
das Programm nicht neu aufspielen. Daher glaube ich auch nicht, dass 
etwas "resettet" wird!

Jemand noch eine Idee?

von Karl H. (kbuchegg)


Lesenswert?

Philip schrieb:


> Jemand noch eine Idee?

Ja. Zeig deinen Schaltplan von Mega.

Hast du die übliche Aussenbeschaltung angebaut
* Abblockkondensatoren an den Spannungsversorgungsanschlüssen
* 10k Widerstand an Reset gegen Vcc


Wenn die da sind, gibts eigentlich keinen Grund mehr, warum der Mega 
nach dem Anlegen der Versorgungsspannung nicht anlaufen sollte. Es sei 
denn, deine Versorungsspannung ist ziemlich mies. Wie ist die aufgebaut?

von Karl H. (kbuchegg)


Lesenswert?

Philip schrieb:

> Wenn ich daraufhin den ISP wieder anschließe, also nur dem ISP per USB
> Strom zuführe. Fangen die LEDs wieder an zu leuchten, jedoch muss ich
> das Programm nicht neu aufspielen. Daher glaube ich auch nicht, dass
> etwas "resettet" wird!

Gerade deshalb.
Das einzige, was der Programmer beeinflusst ist die Aussenbeschaltung 
des Reset Pins. Wenn der Mega nach Anschluss des ISP anläuft, dann hat 
er sogar recht wahrscheinlich vom Programmer eine vernünftige 
Aussenbeschaltung des Reset Pins bekommen, so dass er aus dem Reset raus 
kann.

von Amateur (Gast)


Lesenswert?

Bist Du Dir sicher, dass die Betriebsspannung da ist?

Eventuell speist Du das System über den Programmieradapter. Für 'ne LED 
und den Prozessor dürfte die Leistung des ISP ausreichen.

von TomA (Gast)


Lesenswert?

Hallo Philip,

ich habe dein Problem schon verstanden. Löte doch einfach mal einen 
10k-Widerstand von VCC nach "Reset", damit wird der Pegel definiert auf 
"kein Reset" gelegt. Wenn dein Mega8 dann ohne Programmiergerät 
funktioniert ist es gut, wenn nicht ist der Fehler woanders!

Hier ein Auszug aus dem Datenblatt:

PC6/RESET
If the RSTDISBL Fuse is programmed, PC6 is used as an I/O pin. Note that 
the electrical characteristics of PC6 differ from those of the other 
pins of Port C.
If the RSTDISBL Fuse is unprogrammed, PC6 is used as a Reset input. A 
low level on this pin for longer than the minimum pulse length will 
generate a Reset, even if the clock is not running.

Gruß. Tom

von Philip (Gast)


Lesenswert?

Ich habe jetzt noch einmal ein bisschen am Schaltplan "rumgespielt".

Wenn ich das Kabel, dass zwischen ISP und ResetPin (Pin1) liegt, einfach 
"rausziehe" und dann die Stromzufuhr schalte, funktioniert es wie 
gewünscht.

Eigentlich dürfte dies doch keine Änderung, bei ausgeschaltetem ISP 
hervorrufen, oder?

Ich hab mich m.E. genau an den Schaltplan hier im Tutorial gehalten. 
Widerstand zwischen Reset und VCC (10 kOhm) vorhanden!

von oldmax (Gast)


Lesenswert?

Hi
Leg doch einfach mal einen 10k Widerstand von Reset mach VCC und lass 
dich überraschen. Das du Spannung auf dem Board hast, will ich dir auch 
glauben, aber auch am Controller an den richtigen Pins? Es könnte auch 
sein, das er sich "rückwärts" einspeist. In der Regel ist meistens der 
Aufbau schuld oder die Software. Ich sprech da aus eigenen 
Erfahrungen...
Also, such das Problem bei deiner Arbeit und nicht am Controller.
Gruß oldmax

von Karl H. (kbuchegg)


Lesenswert?

Philip schrieb:
> Ich habe jetzt noch einmal ein bisschen am Schaltplan "rumgespielt".
>
> Wenn ich das Kabel, dass zwischen ISP und ResetPin (Pin1) liegt, einfach
> "rausziehe" und dann die Stromzufuhr schalte, funktioniert es wie
> gewünscht.
>
> Eigentlich dürfte dies doch keine Änderung, bei ausgeschaltetem ISP
> hervorrufen, oder?

Du spielst an der falschen Stelle.

Das alles ist völlig uninteressant.
Der Mega MUSS alleine auf seiner Platine nach Anlegen der 
Versorgungsspannung loslaufen. Und zwar ohne, dass der ISP Progammer 
angeschlossen ist. Gar nicht angeschlossen. Niente. Nada.
Alles andere ist 'Spielen an der falschen Stelle'.

> Ich hab mich m.E. genau an den Schaltplan hier im Tutorial gehalten.
> Widerstand zwischen Reset und VCC (10 kOhm) vorhanden!

Dann mach ein Photo von deinem Aufbau.
Irgendwo hast du dann den Schaltplan nicht korrekt umgesetzt. Was 
verwendest du als Spannungsversorgung des Mega?

von Philip (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Aufbau.

Versorgt wird das ganze über ein altes USB-Ladegerät von einem Handy.. 
Spannung liegt bei 5,2 Volt.

von TomA (Gast)


Lesenswert?

Hallo Philip,

hast du die Fuses schon mal kontrolliert?

Wenn der BODLEVEL zu hoch eingestellt, oder die Versorgungsspannung zu 
niedrig ist, kommt der Mega nicht aus dem Resetzustand!

Mir kommt auch der Reset-Kondensator mit 47nF etwas klein vor? Ich 
verwende an der Stelle welche im µF-Bereich.

Gruß. Tom

von TomA (Gast)


Lesenswert?

Für diesen Aufbau würde ich in der Nähe des Mega8, noch einen Stützelko 
im Bereich 10µF .... 100µF in die Versorgung schalten. Der kleine 
Kondensator kann die Spannung beim einschalten nicht ausreichend 
stützen.

von Philip (Gast)


Lesenswert?

TomA schrieb:
> Hallo Philip,
>
> hast du die Fuses schon mal kontrolliert?
>
> Wenn der BODLEVEL zu hoch eingestellt, oder die Versorgungsspannung zu
> niedrig ist, kommt der Mega nicht aus dem Resetzustand!
>
> Mir kommt auch der Reset-Kondensator mit 47nF etwas klein vor? Ich
> verwende an der Stelle welche im µF-Bereich.
>
> Gruß. Tom

Hallo.

Die Fuses sind:
1
Reading | ################################################## | 100% 0.01s
2
3
avrdude: Device signature = 0x1e9307
4
avrdude: safemode: lfuse reads as BD
5
avrdude: safemode: hfuse reads as C9
6
7
avrdude: safemode: lfuse reads as BD
8
avrdude: safemode: hfuse reads as C9
9
avrdude: safemode: Fuses OK (H:FF, E:C9, L:BD)
10
11
avrdude done.  Thank you.

Da ich noch relativ "neu" bin, kann ich damit erstmal nichts anfangen.

Wegen den Kondensatoren: habe ich mich halt an den Plan hier im Tutorial 
gehalten. Da wird auch ein 47 nF vorgeschlagen!

von TomA (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Philip,

ich kann in den Fuses nichts auffälliges sehen. Damit du selbst 
kontrollieren kannst, hier mal die Übersetzung der Einstellungen.

Ich würde es mal mit größeren Kondensatoren probieren. Ich fürchte dein 
Reset ist schon weg, bevor der Mega8 stabile Verhältnisse vorfindet.

Gruß. Tom

von Karl H. (kbuchegg)


Lesenswert?

Kann das mal wer im Bild verifizieren?

Der Anschluss der Versorgungsspannung an den Pins 22/20 (also auf der 
ARef seite des Mega8) ist falsch. Der Kondenstaor ist kein 
Blockkondensator sondern ist in die Vcc Leitung eingeschleift. Auch 
sieht es für mich danach aus, als ob es auf dieser Seite des µC keine 
GND Verbindung gäbe. Die graue Verbindung geht ins Leere.

von Karl H. (kbuchegg)


Lesenswert?

TomA schrieb:

> Mir kommt auch der Reset-Kondensator mit 47nF etwas klein vor? Ich
> verwende an der Stelle welche im µF-Bereich.

Im Prinzip brauchst du den gar nicht. Wenn deine Spannungsquelle nicht 
allzu versaut ist, bzw. einigermassen gut abgeblockt ist, dann ist der 
unnötig.

von Karl H. (kbuchegg)


Lesenswert?

Philip schrieb:
> Hier der Aufbau.
>
> Versorgt wird das ganze über ein altes USB-Ladegerät von einem Handy..
> Spannung liegt bei 5,2 Volt.

Da wir nicht wissen, ob dieses Ladegerät noch einen kleinen Ripple auf 
der Spannung hat, wäre ein kleiner Elko von sagen wir mal 100µF keine 
Fehlinvestition. Zusammen mit einem kleinen Konensator von, sagen wir 
mal 100nF, der sich um die möglicherweise hochfrequenten Anteile aus dem 
Schaltnetzteil kümmert.
Generell: die Versorgungsspannung kann gar nicht gut genug gesiebt 
werden. An dieser Stelle lieber ein paar µF zu viel als zu wenig (aber 
auch wieder nicht übertreiben. Wenn die Spannung eine halbe Stunde 
braucht um den gewünschten Pegel zu erreichen, dann hat man übertreiben 
:-).

von Bole aus Serbien (Gast)


Lesenswert?

Hmmm...
1. LowFuse auf 0xFD setzen -( BOD disabled)

2. Kondensator von der Resetleitung abklemmen.

3. Einschalten, anlaufen lassen, Reset pin
kurz mit Masse verbinden - OK danach ?

ATMEL: "When the CPU starts from reset,
there is as an additional delay allowing
the power to reach a stable level before
commencing normal operation."

Karl Heinz sagte dir bereits:
>>Das alles ist völlig uninteressant.

Es liegt am Resetpin und ALLES ANDERE ist
völlig uninteressant.

von stefanus (Gast)


Lesenswert?

Du machst offensichtlich den fehler, den ISP Programmieradapter OHNE 
Stromversorgung (über USB) an deine Schaltung anzuschließen.

Das ist so nicht vorgesehen. Damit riskierst Du, den Programmieradapter 
zu beschädigen.

Bei fast allen digitalen Mikrochips gilt die Beschränkung, dass die 
Spannung an I/O Pins nicht höher als VCC und nicht niedriger als GND 
sein darf. Für ATmega und den Programmieradapter gilt das ganz sicher.

Betrachte Deine Konstruktion aus Sicht des Programmieradapters. Da das 
USB Kabel abgesteckt ist, hat er keine Versorgungsspannung. VCC ist Null 
Volt. Folglich darf an keine I/O Pin mehr als 0 Volt anliegen.

Dein Reset Pin muss High Pegel haben (vermutlich mehr als 2V), damit der 
Mikrocontroller läuft. Mit diesme Pin ist auch der Spannungslose 
Programmieradapter verbuden. Da 2V größer als 0V (VCC) ist, werden die 
Schutzdioden im Eingang des Programmieradapters leitend:
1
Atmega                                                  Programmer
2
                                 Reset
3
     50k (intern)              ISP Stecker
4
VCC ---[===]---+--------------------o)-------------+--- µC 
5
               |                             *     |
6
VCC ----|<|----+---|<|---| GND          VCC --|<|--+--|<|--| GND
7
5V     Interne Schutzdioden             0V   Interne Schutzdioden
Der Strom fließt von internen 50k Ohm Pull-Up Widerstand des Atmegas 
über die mit * markierte Diode. Das heisst, am Reset Pin liegen nur 
ungefähr 0,7V an.

von Karl H. (kbuchegg)


Lesenswert?

Bole aus Serbien schrieb:

> Karl Heinz sagte dir bereits:
>>>Das alles ist völlig uninteressant.
>
> Es liegt am Resetpin und ALLES ANDERE ist
> völlig uninteressant.

Erst mal soll er seine Versorgungsspannung korrekt anschliessen.

Die Chancen stehen nicht schlecht, dass der Mega auch ohne jegliche 
Beschaltung des Reset Pins bzw. Blockkondensatoren anläuft. Schon 
gemacht, schon gesehen, schon verifiziert.
Das das (speziell ohne die Blockkondenssatoren) keine Dauerlösung ist, 
ist auch klar. Aber am Reset braucht er im Grunde überhaupt nichts 
machen. Atmel hat einen Pullup in den Mega am Resetpin eingebaut. Der 
ist nur leider etwas hoch geraten, sodass Atmel in 'gestörten' 
UMgebungen (und eigentlich nur dort) einen zusätzlichen Reste-Pullup von 
ca 10k empfiehlt. Auf einem Steckbrettaufbau, weit weg von allen 
möglichen Störungen durch starke Elektromotoren in der näheren Umgebung 
geht es auch so. Das wir Bastler dein einfach immer einbauen, ist mehr 
Pragmatismus als alles andere (genauso wie der Kondensator am Reset), 
weil wir dann in allen vorkommenden Situationen Ruhe haben ohne uns in 
Sonderfällen mit unerklärlichen Phänomänen rumschlagen zu müssen.

Aber erst mal soll er seine Versorgungsspannung korrekt anschliessen. 
Dazu das ganze gerümpel runter und 4 Leitungen ziehen. 2 von der + 
Schiene auf Vcc und AVcc, 2 weitere von der - Schiene nach den beiden 
GND Anschlüssen. Im Prinzip würde der Mega damit schon laufen und wird 
es höchst wahrscheinlich auch. Dann die beiden Blockkondensatoren auf 
beiden Seiten ergänzen (dazu muss die bisherige Versorgungsverkabelung 
nicht aufgetrennt werden) und noch den 10k an Reset dazu. Der Mega muss 
immer noch laufen.

von Icke ®. (49636b65)


Lesenswert?

Philip schrieb:
> Wenn ich das Kabel, dass zwischen ISP und ResetPin (Pin1) liegt, einfach
> "rausziehe" und dann die Stromzufuhr schalte, funktioniert es wie
> gewünscht.

Die Ursache ist doch sonnenklar. Wenn der Programmer am ISP steckt, aber 
nicht mit Strom versorgt wird, zieht er offensichtlich den RESET-Pin auf 
Masse, weil sein Zustand ohne Versorgungsspannung nicht definiert ist. 
Ich kann dieses Verhalten mit meinem Board und Programmer (Diamex) exakt 
nachvollziehen.
Also trenne den Programmer vom ISP oder versorge ihn mit Strom. Der 
Pullup-Widerstand am RESET sollte trotzdem in jedem Falle dran sein, so 
ersparst du dir unerklärliche Phänomene.

von Philip (Gast)


Lesenswert?

Icke ®. schrieb:
> Philip schrieb:
>> Wenn ich das Kabel, dass zwischen ISP und ResetPin (Pin1) liegt, einfach
>> "rausziehe" und dann die Stromzufuhr schalte, funktioniert es wie
>> gewünscht.
>
> Die Ursache ist doch sonnenklar. Wenn der Programmer am ISP steckt, aber
> nicht mit Strom versorgt wird, zieht er offensichtlich den RESET-Pin auf
> Masse, weil sein Zustand ohne Versorgungsspannung nicht definiert ist.
> Ich kann dieses Verhalten mit meinem Board und Programmer (Diamex) exakt
> nachvollziehen.
> Also trenne den Programmer vom ISP oder versorge ihn mit Strom. Der
> Pullup-Widerstand am RESET sollte trotzdem in jedem Falle dran sein, so
> ersparst du dir unerklärliche Phänomene.

Das war's!

Danke!!! auch an alle anderen!

von Karl H. (kbuchegg)


Lesenswert?

Nichts desto trotz ist AVcc bzw. as GND auf dieser Seite falsch 
angeschlossen.

UNd reagiere das nächste mal frühzeitig auf die Bitte nach eindeutiger 
Beschreibung dessen, was du machst. Denn um 12 hast du einen Post 
rausgelassen, der sich so liest, als ob du genau das (den ISP vom Mega 
abzutrennen) schon gemacht hättest.

von Bole aus Serbien (Gast)


Lesenswert?

Karl Heinz schrieb:
> Atmel hat einen Pullup in den Mega am Resetpin eingebaut. Der
> ist nur leider etwas hoch geraten, sodass Atmel in 'gestörten'
> UMgebungen (und eigentlich nur dort) einen zusätzlichen Reste-Pullup von
> ca 10k empfiehlt.

Nein.
Zusätzlicher Pullup wird parallel geschaltet, so dass:
 Min. 30K, Max. 80K fur MEGA8 ( laut Atmel )
 Ich benutze 47K fur alle und bin bisher damit ganz gut gefahren.
Natürlich stimme ich mit dir überein, dass alles andere
korrekt sein muss.

von Karl H. (kbuchegg)


Lesenswert?

Bole aus Serbien schrieb:
> Karl Heinz schrieb:
>> Atmel hat einen Pullup in den Mega am Resetpin eingebaut. Der
>> ist nur leider etwas hoch geraten, sodass Atmel in 'gestörten'
>> UMgebungen (und eigentlich nur dort) einen zusätzlichen Reste-Pullup von
>> ca 10k empfiehlt.
>
> Nein.
> Zusätzlicher Pullup wird parallel geschaltet, so dass:
>  Min. 30K, Max. 80K fur MEGA8 ( laut Atmel )

Ähm.
Du sprichst auf die Zeile R_Rst in der Tabelle DC Characteristics zum 
Beispiel im Datenblatt des Mega8 auf Seite an?

Das ist die Größe des von Atmel verbauten Reset-Pullup Widerstandes. Der 
hat zwischen 30k und 80k. Die ganze Tabelle beschäftigt sich mit den 
Eigenschaften des Mega selber und nicht mit dem, was man rundherum 
anbauen muss/soll.

In besagtem Datenblatt ist er in der Figure 14 als Teil der Reset-Logik 
auch eingezeichnet.

von Bole aus Serbien (Gast)


Lesenswert?

Karl Heinz schrieb:
> Ähm.
> Du sprichst auf die Zeile R_Rst in der Tabelle DC Characteristics zum
> Beispiel im Datenblatt des Mega8 auf Seite an?
 Genau

> Das ist die Größe des von Atmel verbauten Reset-Pullup Widerstandes.
 Und wieder ins Schwarze getroffen ;)

 Was ich meinte:
  30 - 80K ist vollkommen ausreichend, im Durchschnitt sind
  es 66K (Figure 145), ext. Widerstand wird parallel geschaltet,
 so dass es bei 10K etwa 8K sind - bei 5V ergibt das 0.6mA
 Mit 47K sind es 27.5K und 0.18mA, bla, bla...

 Fazit:
 JA, DU HAST RECHT, VERDAMMT NOCH MAL !!!

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.