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
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.
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.
Hi Hast du auch mit CKDIV8 auch F_CPU passend gesetzt? MfG Spess
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
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!
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
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.
> 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.
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
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
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.
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
> 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?
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.
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!
> 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?
Nee, lieber nicht. Ich glaub ich nerve euch schon.
@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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.