Forum: Mikrocontroller und Digitale Elektronik Atmega644P Ausgangsspannung niedrig, wenn CKDIV8 ausgeschaltet?


von Stephan K. (eska)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,
ich möchte eine Schaltung mit einem Atmega 644P und einem externen Quarz 
(8MHz) aufbauen. Als Progammer verwende ich einen USBasp-Nachbau von 
eBay und als Software den "avrdude" Version 6.1 unter openSuSE. Ich habe 
erst einmal ein einfaches Programm (siehe Anhang "myblink.c") erstellt, 
welches abwechselnd eine rote und eine grüne LED blinken läßt, um zu 
testen, ob die ganze Kette (gcc-avr, avrdude, USBasp) funktioniert und 
eine entsprechende Schaltung auf einem Breadboard aufgebaut (siehe 
Foto). Die 5V Versorgungsspannung kommen aus dem USBasp, die 
Kondensatoren am Quarz haben einen Wert von 33pF.

Nun zum eigentlichen Problem: Wenn ich CKDIV8 setze (Wert der L-Fuse: 
5E, berechnet mit online Fuse-Calculator; CKSEL und SUT entsprechen 
"external 8 MHz Crystal Oscillator" mit "258 CK + 65ms startup time") 
dann verhält sich die Schaltung wie erwartet: die LEDs leuchten hell und 
blinken (entsprechend der niedrigen internen Taktfrequenz) langsam. Auf 
meinem einfachen Multimeter werden ca. 2,5 V zwischen Anode der roten 
LED und der GND-Schiene angezeigt. Wenn ich bei ansonsten unverändertem 
Aufbau den Wert von CKDIV8 ändere (L-Byte: DE) blinken die LEDs zwar 
erwartungsgemäß schneller, aber kaum noch sichtbar (Multimeter zeigt ca. 
1,7 V) an.
Ich hätte erwartet, dass die Aussgangsspannung an den Digitalpins auch 
bei schnellerem Takt unverändert bleibt.

Die beiden anderen Fuse-Bytes haben in beiden Fällen die Werte 99 
(hfuse) und ff (efuse). Die von avrdude gemeldete Device-Kennung ist 
0x1e960a

Kann mir jemand einen Tipp geben, was ich falsch mache? Habe leider hier 
im Forum und im Netz nichts zu dem Thema gefunden (oder mit den falschen 
Stichworten gesucht).

Viele Grüße,
  Stephan

von Stefan F. (Gast)


Lesenswert?

Vielleicht zieht dein Mikrocontroller jetzt mehr Strom, als verfügbar 
ist, so dass dessen Spannungsversorgung (VCC) einbricht. Mess dort mal 
nach.

Du kannst die Stromaufnahme übrigens reduzieren, indem du bei allen 
unbenutzten Pins den internen Pull-Up einschaltest (also alle Bits in 
den PORTx Registern setzen). Wobei das vermutlich nicht direkt die 
Lösung deines Problems sein wird.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Hallo Stephan,

Stephan K. schrieb:
> Die 5V Versorgungsspannung kommen aus dem USBasp, die

Sollte locker reichen, um die kleine Schaltung zu betreiben.

> Kondensatoren am Quarz haben einen Wert von 33pF.

Wenn ich mich recht erinnere, sagt das Datenblatt 15..22 pF. Mit 33 pF 
liegst du damit weit außerhalb, aber die AVR-Oszillatoren sind recht 
robust. Offensichtlich schwingt das Ding. :-)

> aber kaum noch sichtbar (Multimeter zeigt ca.
> 1,7 V) an.

Hmmm... hört sich für mich so an, als ob die die beiden Pins nicht als 
Ausgang, sondern als Eingang betreibst und statt dem Ausgangssignal 
immer nur die internen Pullups ein- und ausschaltest. Dann funseln die 
LEDs nämlich nur.

Das hieße aber, du hättest das Register DDRA falsch initialisiert. Im 
Programm finde ich aber keinen Fehler. Die Fuses habe ich allerdings 
nicht überprüft.

von spess53 (Gast)


Lesenswert?

Hi

Hast du auch mit CKDIV8 auch F_CPU passend gesetzt?

MfG Spess

von Stephan K. (eska)


Lesenswert?

Hallo allerseits,

vielen Dank für die schnellen Antworten.

@Spess53:
F_CPU steht in beiden Fällen bei 8000000.
Ich habe das Programm ja nicht neu geflashed sondern nur die Fuse 
umgesetzt.
Compileraufruf: avr-gcc -c -I. -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -Wall -Wstrict-prototypes -DF_CPU=8000000 
-Wa,-adhlns=myblink.lst -mmcu=atmega644p -std=gnu99 myblink.c -o 
myblink.o

@Markus Weber:
Wenn ich das DDR falsch gesetzt hätte, müsste es ja auch bei CKDIV8 ein 
Problem geben, oder?
Dass die Kondensatoren am Quarz eine zu große Kapazität haben weiß ich, 
aber ich habe die Werte aus einer Schaltung zum Aufbau eines sd2iec 
übernommen und erst später in das Datenblatt geschaut. Laut Datenblatt 
sollten es in der Tat nur zwischen 12 und 22pF sein.

@Stefan Us:
Zwischen VCC und GND messe ich im einen Fall 2,6V und im anderen 1,7V. 
Habe den USB-ASP mal an einen Powered Hub angeschlossen: gleiches 
Ergebnis; ABER: wenn ich die Versorgungsspannung direkt vom Netzteil des 
Powered Hub nehme und den Programmer außen vor lasse, ist das Problem 
gelöst! Offensichtlich liefert der Programmer in der Tat nicht genügend 
Strom, um die Schaltung auch bei hohem Takt zu versorgen. Vielen Dank 
für den Hinweis, da hätte ich wahrscheinlich noch lange gesucht!

Viele Grüße und vielen Dank nochmal an alle,
  Stephan

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Stephan K. schrieb:
> Zwischen VCC und GND messe ich im einen Fall 2,6V und im anderen 1,7V.

Ah, jetzt seh ich das erst, der Programmer hat auf der 
Platinenunterseite einen Spannungsregler. Wahrscheinlich ist der nur für 
den Programmiervorgang, aber nicht zur Versorgung des Ziels ausgelegt.

Ich vermute, der Programmer lässt sich zwischen 3,3V und 5V umschalten. 
Wenn du auf 5V wechselst, dann sollte es keine Probleme geben, weil dann 
bei den USBasp normalerweise der Spannungsregler überbrückt wird, so 
dass du ohne Weiteres 100mA ziehen kannst. Die meisten PCs spenden auch 
ohne dass ein USB-Gerät erkannt wird, 500 bis 700mA.

Ansonsten: Großes Lob für die exakte Problembeschreibung mit Bild und 
Quellcode!

von spess53 (Gast)


Lesenswert?

Hi

>Wenn ich bei ansonsten unverändertem
>Aufbau den Wert von CKDIV8 ändere (L-Byte: DE) blinken die LEDs zwar
>erwartungsgemäß schneller, aber kaum noch sichtbar (Multimeter zeigt ca.
>1,7 V) an.

Meinst du ernsthaft, das das Multimeter einen korrekten Wert anzeigt?

Das kann man nur mit einem Oszi beurteilen.

MfG Spess

von Stefan F. (Gast)


Lesenswert?

Dieser Spannungsregler ist dazu gedacht, dass du den Mikrocontroller 
direkt (quasi ohne Platine) direkt an den Programmer anschließen kannst.

Wenn du (wie in deinem Fall) In-Circuit programmierst, dann soll die 
Spannungsversorgung auch von dieser Zielschaltung kommen.

Die Programmer von Atmel verlangen das sogar immer, sie liefern keine 
Spannungsversorgung.

Den Programmer auf 5Vumzuschalten hat den Nachteil, dass Dir im 
Kurzschlussfall das Kabel oder eine Leiterbahn im Computer weg brennt. 
Ist mir beides schon passiert. Seit dem habe ich in meinen 
Programmieradaptern Sicherungen nachgerüstet. Eigentlich sollten die 
Ports schon durch den Computer abgesichert sein, aber da sparen die 
Hersteller wohl manchmal jeden Cent.

von Stefan F. (Gast)


Lesenswert?

> Meinst du ernsthaft, das das Multimeter einen korrekten Wert anzeigt?

Warum nicht, er hat an VCC gemessen. Wenn dort stabile 5V bzw. 3,3V 
anlägen, würde das Multimeter dies auch anzeigen.

Man sein, dass die gemessenen 1,7V (wegen der Impulse) nicht ganz 
stimmen, aber es genügt als Indiz, dass die Spannungsversorgung instabil 
ist.

von Stephan K. (eska)



Lesenswert?

Hallo Markus,
ja, der Programmer ist umschaltbar, es gibt einen Jumper auf der 
Oberseite (siehe Bild). Aber ich hatte die Jumperstellung immer so 
interpretiert, dass er auf 5V steht und deshalb nicht weiter in der 
Richtung nachgeforscht. In der anderen Jumperstellung messe ich zwischen 
VCC und GND interessanterweise eine höhere Spannung (ca. 2,6 V).

Vielen Dank und viele Grüße,
  Stephan

von Stephan K. (eska)


Lesenswert?

Hallo Spess53,
nein ich meine nicht ernsthaft, dass das Multimeter korrekt misst 
(zumindest nicht an der LED), da es relativ einfach und träge ist. Um 
eine einigermaßen korrekte Messung zu machen, müsste ich - wie Du 
schreibst - ein Oszilloskop benutzen. Deshalb hatte ich im OP ja 
geschrieben, dass das einfache Multimeter ca. 2,5 V anzeigt. Ich wollte 
nur nicht langatmig beschreiben, dass es ein wirklich ein einfaches, 
träges Multimeter ohne Spitzenwertspeicher ist und wie Stefan Us ja 
bereits geschrieben hat, müsste sich VCC auch mit einem einfachen 
Multimeter im Rahmen der Messungenauigkeit bestimmen lassen. Sorry, dass 
das nicht so rübergekommen ist.

Jetzt brauche ich nur noch eine Hohlstecker-Buchse, um das Netzteil vom 
USB-Hub dauerhaft an das Breadboard anschließen zu können. Evtl. conrad 
735667-62?

Vielen Dank und viele Grüße,
  Stephan

von Arduinoquäler (Gast)


Lesenswert?

Stefan U. schrieb:
> Wenn du (wie in deinem Fall) In-Circuit programmierst, dann soll die
> Spannungsversorgung auch von dieser Zielschaltung kommen.

Das isr grosser Käse.
Programmieradapter haben ihre eigene Spannungsversorgung und
das ist auch gut so. Wenn die eine Schaltung die andere versorg
dann geht das zwangsläufig irgendwann schief wenn die Stromaufnahme
zu gross ist.

> Die Programmer von Atmel verlangen das sogar immer,

Das ist nochmal grosser Käse.

Alles in allem:

Die Spannung am Programmieradapter dient (nach ATMEL Norm) nur
zum Feststellen und Überwachen der Versorgungsspannung
des Zielsystems, nicht zum Versorgen. Was andere Adapter machen
ist denen überlassen und kann funktionieren, muss aber nicht.

von Stephan K. (eska)


Lesenswert?

Hallo Arduinoquäler,
danke für die Klarstellung. Ich hatte wohl den Strombedarf bei der 
höheren Taktfrequenz unterschätzt und nicht damit gerechnet, dass die 
Versorgung über den Programmer dann nicht mehr klappt. Bisher hatte ich 
nur ein paar Sachen mit dem Arduino bzw. Microduino aufgebaut und hatte 
nie ein Problem damit auch mehrere LEDs oder andere Verbraucher zu 
versorgen; allerdings habe ich dabei auch nie mit den Fuses "gespielt" 
sondern immer die originalen Werte beibehalten.

Also noch einmal vielen Dank an alle, die hier geantwortet haben.

Viele Grüße,
  Stephan

von Stefan F. (Gast)


Lesenswert?

> Das ist nochmal grosser Käse.

Wie du meinst, wir brauchen uns darüber nicht zu streiten. Ich besitze 
jedenfalls mehrere Programmer von Atmel und weiß, wie man sie richtig 
einsetzt. Steht ja auch in der jeweiligen Bedienungsanleitung.

> Die Spannung am Programmieradapter dient (nach ATMEL Norm) nur
> zum Feststellen und Überwachen der Versorgungsspannung
> des Zielsystems, nicht zum Versorgen.

Das habe ich doch auch geschrieben! Lies nochmal:

> Wenn du (wie in deinem Fall) In-Circuit programmierst, dann soll
> die Spannungsversorgung auch von dieser Zielschaltung kommen.
> Die Programmer von Atmel verlangen das sogar immer, sie liefern
> keine Spannungsversorgung.


Anderes Thema, wegen dem 5V/3,3V Jumper: Es könnte sein, dass dieser 
Jumper lediglich die Spannungsversorgung des AVR's auf dem Programmer 
festlegt. Er bestimmt dann, ob die Signal-Leitungen zum Target 3,3V oder 
5V Pegel haben.

Für die Stromversorgung des Targets durch den PC ist eventuell der 
Jumper JP3 zuständig, der nicht bestückt ist. Hast du keine 
Bedienungsanleitung?

von Stefan F. (Gast)


Lesenswert?

Ich habe eine Anleitung gefunden:

http://www.primrosebank.net/computers/pet/projects/tools/usbasp_v2_anot.png
http://d1gsvnjtkwr6dd.cloudfront.net/large/AC-PG-USBASP_03_LRG.jpg

Eine Strombegrenzung ist da offensichtlich nur bei 3,3V (wegen dem 
Spannungsregler) vorhanden. Für 5V gibts da noch F1, die ist eventuell 
defekt. Oder ein Kabel ist gebrochen, oder der PC liefert zu wenig 
Strom.

von Stefan F. (Gast)


Lesenswert?

Schließ mal dein Multimeter an JP2 an, welche Spannung misst du da? Es 
sollte 5V sein - auch unter Last.

Was ich gerne mal wissen würde: Wie stellt sich der Hersteller vor, ein 
Target mit 3,3V zu versorgen, die Datenleitungen aber mit 5V zu 
betrieben? Das ist doch Murks, wenn nicht gar schädlich für die 
Bauteile!

von Stefan F. (Gast)


Lesenswert?

> Die Spannung am Programmieradapter dient (nach ATMEL Norm) nur
> zum Feststellen und Überwachen der Versorgungsspannung
> des Zielsystems,

Die Treiber in den Atmel Programmern haben zwei Anschlüsse zur 
Stromversorgung. Einen für die interne Spannung, und einen für die 
Externe. Das Target versorgt die Treiber mit der externen Spannung.

So meinte ich das. Ist der Käse nun gegessen?

von Intressierter (Gast)


Lesenswert?

Stefan U. schrieb:
> So meinte ich das. Ist der Käse nun gegessen?

Nö, mach weiter.

von Stefan F. (Gast)


Lesenswert?

Nee, lieber nicht. Ich glaub ich nerve euch schon.

von Stephan K. (eska)


Lesenswert?

@Stefanus: zwischen den beiden Kontakten des nicht bestückten JP2 messe 
ich mit meinem Multimeter 0V, aber am JP3 immerhin 4,7V, auch bei 
angeschlossenem Zielsystem, aber wenn ich das Foto auf das Du verlinkt 
hast, richtig interpretiere sind JP3 und JP2 Jumper zur Steuerung des 
Verhaltens des Programmers (z.B. JP3 für langsameren Programmiertakt 
SCK).

Eine Bedienungsanleitung war bei dem Programmer nicht dabei, dafür war 
er wohl zu günstig (4,15 EUR inzwischen nur noch 3,76 EUR jeweils inkl. 
Versand, eBay Artikel 221669185108).

Vielen Dank noch einmal an alle hier; die Diskussion war wirklich 
hilfreich für mich. Ich werde die Versorgung der Schaltung über ein 
separates Netzteil vornehmen.

Viele Grüße,
 Stephan

von Stefan F. (Gast)


Lesenswert?

Ja sorry, ich meinte JP3.

Also wenn du dort 4,75V misst, am VCC Pin deines Targets aber viel 
weniger, dann ist die VCC Leitung vom Programmer zum Target irgendwo 
unterbrochen.

Die gemessenen 4,75V sind jedenfalls plausibel, man kann daran erkennen, 
dass die Sicherung F1 noch heile ist.

von spess53 (Gast)


Lesenswert?

Hi

>Wann greifen die Buerger endlich zur Flinte und bringen...

Wie lange willst du eigentlich mit deiner krankhaften Paranoia nerven? 
Tu den Leuten einen Gefallen und lass dich einweisen.

MfG Spess

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.