Hallo zusammen, ich habe ein Frage zur korrekten Schaltung: ATMEGA8---I2C---MPU6050 mit dem Ziel den ATMEGA8 bei angeschlossenem MPU6050 über ISP zu programmieren. Setting: ******** * Win7 x64; AtmelStudio 7 * MySmartUSB light (auch als Stromversorgung verwendet für Controller + 2 Dioden, MPU6050) * Steckbrett * MPU6050 (http://www.xxl-modellbau.de/Gyro-Kreisel-ACC-MPU-6050-I2C-Board-Arduino-Multiwii-Multicopter) * Schaltung (ohne den Quarzoszillator, sonst alles) wie im Tutorial http://www.mikrocontroller.net/articles/Datei:Mega8_Tutorial.png , ergänzt um SDA & SCL zum MPU6050 und an jeder Leitung ein 1,8k Widerstand zu VCC * MPU6050 ist an GRD und VCC angeschlossen Hintergrund / Fehlerbeschreibung: ********************************* Ich habe mittlerweile mehrere ATMEGA8 womöglich getötet... es hat etwas gedauert bis ich den Grund für das Ableben raus hatte: - Programmierung funktioniert mit abgeklemmtem I2C-Bus und abgeklemmter VCC des MPU6050. Das Programm funktioniert bei anschließendem Wiederanklemmen von I2C und MPU6050 (Who am I erfolgreich, Ok/Fehler über 2 Dioden ausgegeben). - Bleiben I2C und VCC des MPU6050 beim Programmieren angeklemmt, kommt es zum Fehler im AtmelStudio und der Programmer bleibt mit VCC auf 5V stehen und geht auch nach mehrmaligem extra "Power off"-Befehl (SupportBox in Win) nicht unter ~3V. Normalerweise fällt VCC auf mV-Bereich. Man kann scheinbar noch auf den Controller zugreifen, zumindest kann ich unter AtmelStudio/DeviceProgramming die Fuses ansehen - diese sind alle ohne Haken und die Zugriff-Fuses sind alle auf Zugriffsverweigerung gestellt. Ich vermute das die Register alle auf 1 stehen. Ändern kann man nichts. - Bei angeklemmtem I2C aber abgeklemmten VCC vom MPU6050 funktioniert das Programmieren ebenfalls. Problem: Da ich gerade viel mit dem Code experimentiere, habe ich bei meinem letzten Atmega leider einmal vergessen VCC vorm Programmieren abzuklemmen - tja, das hat dem Experimentieren ersteinmal ein Ende gesetzt. Vorherige Grundschaltungen mit blinkenden LEDs und Steuerung eines brushless Motors über ein ESC liefen problemlos. Meine Vermutung/Lösungsansatz: ****************************** Muss man in der VCC-Leitung zum MPU6050 Dioden platzieren? Habe ich bei meinen Recherchen im Netz erst auf einem Schaltbild gesehen: 3x 1N4004 mit Kathode am MPU6050. Ich habe viel recherchiert, aber ich habe nur auf dem einen Schaltbild einen Hinweis gefunden, sonst nirgendwo ein Hinweis auf ein solches Problem. Da ich mich noch in der Lernphase befinde, will ich nicht ausschließen, dass ich was ganz blödes gemacht habe - aber es wird auch nicht wirklich vor dem gewarnt, was ich gemacht habe... * Gerade bin ich unsicher was die 1,8k am Bus angeht - war der Meinung, dass ich den Wert aus einer sinnvollen Quelle hatte... oder sollte ich lieber 4,7k nehmen? Planung: ******** Ich hoffe auf Eure Hilfe bei meinem Anfängerproblem. Sehr schön wäre auch ein Hinweis, ob /wie ich die quasi toten Atmegas8 (mit/ohne "L") wiederbeleben könnte (verschiedene Quarzoszillatoren vorhanden). Gerade sind neue Atmegas und Bauteile für die zukünftige externe Stromversorgung der Schaltung eingetroffen. Außerdem habe ich noch den Atmel ICE basic bestellt, da ich ohne debuggen im Controller nicht weiterkomme. LEDs sind nett aber für Fehlersuche bei I2C ziemlich mühselig ;-) Und das Fernziel wird auch ARM-Controller beinhalten. Dankbar bin ich auch für Hinweise auf gute Wissensquellen (analog/digital). Ein Buch von Günter Schmitt zur Programmierung der Atmel AVR-RISK-Familie nutze ich bereits intensiv. Letztendlich ist der Weg/Lernen/Experimentieren das Ziel und nicht unbedingt das Fliegen von z.B. einem Coppter. Vielen Dank für Eure Mühe und Grüße chilibit
Hi I2C (wenn du I2C in Hardware benutzt) hat nichts mit ISP zu tun. Ich programmiere AVRs auch mit angeschlossenem I2C problemlos. >* MySmartUSB light (auch als Stromversorgung verwendet für Controller + >2 Dioden, MPU6050) Bist du sicher, das der das schafft. Für mich ist ein Programmer ausschließlich ein Programmer und kein Netzteil. MfG Spess
Kai W. schrieb: > * Gerade bin ich unsicher was die 1,8k am Bus angeht - war der Meinung, > dass ich den Wert aus einer sinnvollen Quelle hatte... oder sollte ich > lieber 4,7k nehmen? 4K7 reichen vollkommen, selbst mit 10K gibt es normallerweise keine Probleme. spess53 schrieb: > Bist du sicher, das der das schafft. Für mich ist ein Programmer > ausschließlich ein Programmer und kein Netzteil. Was die Programmierung angeht, MEGA8 und MPU6050 dürften zusammen kaum 20mA brauchen.
Schaltplan? Versorgungsspannungsbereich 2.3-3.4V sicher eingehalten?
Hallo, vielen Dank soweit für Eure Antworten. Hier kommt der Schaltplan (Grundplan stammt aus dem Tutorial + Anpassungen) und ein Foto des Steckbretts. Ich muss mich bzgl. der Fuses bei einem "toten" myC (8L) korrigieren: Fuses: High: 0xD1 Low: 0xE1 SPIEN: Haken EESAVE: Haken Boot Flash size=1024 words Boot address=$0C00 BODLEVEL: Brown out detection at VCC=2,7V SUT_CKSEL: Int. RC Osc. 1MHz; Start-up time: 6 CK + 64 ms; default value Lockbit: 0xC0 LB: Further programming and verification disabled BLB0: LPM and SPM prohibited in Application Section BLB1: LPM and SPM prohibited in Boot Section @spess53: Es könnte vielleicht sein, dass die Spannungsversorgung zwar für den Betrieb der Schaltung, aber nicht zum Programmieren bei angeschlossenem MPU6050 ausreicht(?). Ich werde zukünftig externe Spannungsquellen verwenden. Aber würde deswegen der Mikrokontroller stets beim Programmieren "getötet" werden? Ich habe stets ein Voltmeter angeschlossen gehabt. Dieses hat auch beim Programmieren ~5V angezeigt - kurze Einbrüche kann es natürlich nicht erfassen. @ Marc Vesely: Aber reichen je 1,8K am I2C gegen VCC aus? Fließt hier vielleicht beim Programmieren ein "zerstörerischer" Strom über den myC? Ich habe im Plan markiert, wo ich beim Programmieren trennen muss, damit der myC überlebt. Der MPU6050 sitzt auf einem eigenen Board mit Spannungsregler und das ist für den Anschluss an 5V gedacht. "Toter" myC in Schaltung (VCC MPU6050 abgeklemmt) am mySmartUSB light: Ruhezustand/Power off: 1,25V - ich meine dies sollte eigentlich ~0V sein. Power on: 4,94V Fuses lassen sich lesen - siehe oben. Grüße Kai
Hi >Ich muss mich bzgl. der Fuses bei einem "toten" myC (8L) korrigieren: Wie kannst du bei einem 'toten' AVR die Fuses auslesen? >Lockbit: 0xC0 >LB: Further programming and verification disabled >BLB0: LPM and SPM prohibited in Application Section >BLB1: LPM and SPM prohibited in Boot Section Warum fummelst du ohne Grund an den Lockbits herum? Wird der AVR vor dem Programmieren gelöscht? MfG Spess
Kai W. schrieb: > Aber reichen je 1,8K am I2C gegen VCC aus? Reichen wofür ? > Fließt hier vielleicht beim > Programmieren ein "zerstörerischer" Strom über den myC? 1K8 sind nicht mal 3mA, das reicht normalerweise nicht, um einen AVR zu zerstören. spess53 schrieb: > Wie kannst du bei einem 'toten' AVR die Fuses auslesen? Ja, das würde mich auch interessieren. spess53 schrieb: > Warum fummelst du ohne Grund an den Lockbits herum? Man sollte ohne Grund nicht an den Fusen spielen, es könnte sein, dass du mit rumspielen ISP lahmlegst. Falls du einen Parallelprogrammer hast, kannst du es damit probieren.
Hallo, OK, ich vermute nur, dass er so gut wie tot ist... Sofern man nicht beim Aufspielen eines Programms (in C geschrieben) die Fuses umprogrammieren kann, habe ich die Fuses nicht einmal angerührt. Ich habe allerdings zwei "Bibliotheken" für I2C (Fleury(/Davide Gironi)) und Ansteuerung des MPU6050 (Davide Gironi)verwendet. Beim nachvollziehen des Codes ist mir nix aufgefallen - bin aber auch kein Pro... wonach müsste man denn suchen? Beachte: Alleine durch das Abklemmen von VCC am MPU6050-board läßt sich der myC problemlos mehrmals mit dem selben Programm und den selben Einstellungen programmieren, die mit VCC am MPU6050 zu dem beschriebenen Problem führen. Das Programm funktionierte auch wie erwartet. Ich kann mir das nur so erklären, dass bei dieser fatalen Programmiersituation (MPU6050 an VCC) irgendwie auch die Fuses umgestellt werden - komischer Weise stets mit dem Resultat, dass ich komplett aus dem myC ausgesperrt werde. Da ich mir das nicht erklären kann, frage ich ja Euch. Die Einstellungen zum Programmieren in AtmelStudio sind: Selected debugger/programmer: STK500; Interface: ISP (da steht "Programming only" als fester Text) ISP Clock 125kHz (habe ich nicht verändert) Programming settings: Erase entire chip Preserve EEPROM: Haken Debug settings: Keep timers running in stop mode: Haken Cache all flash memory except: - (Haken) Ich nehme an, dass der MySmartUSB light und der Atmel ICE basic keine Parallelprogrammer sind? Danke und Gruß Kai
:
Bearbeitet durch User
Nachdem der MPU6050 mit 3,3V läuft, solltest du die I2C-PullUp auch auf die 3,3V legen. Die 5V könnte er die übel nehmen.
AVcc hast zwar einen Kondensator, ist ansonsten aber scheinbar nicht angeschlossen.
holger schrieb: > ist ansonsten aber scheinbar nicht angeschlossen. Ich sehe da einen kleinen orangenen Draht der zur Plus-Schiene geht.
>Ich sehe da einen kleinen orangenen Draht der zur Plus-Schiene geht.
Ja, du hast recht. Verwechselt mit dem zweiten GND Pin22.
holger schrieb: > AVcc hast zwar einen Kondensator, ist ansonsten aber > scheinbar nicht angeschlossen. Deinen Kommentar verstehe ich nicht. In welchem Zusammengang steht er ? Soll dies eine Kritik sein? - Nein AVcc ist korrekt beschaltet.
holger schrieb: > AVcc hast zwar einen Kondensator, ist ansonsten aber > scheinbar nicht angeschlossen. Wäre übrigens für die Programmierung nicht von Bedeutung, nur für die Port-Funktionalität.
>Wäre übrigens für die Programmierung nicht von Bedeutung, >nur für die Port-Funktionalität. Das denken viele. Den Pin offen zu lassen ist aber keine Option laut Datenblatt.
>.... und ich habe es bereits praktiziert.
Das zeigt nur das du genauso dumm bist wie andere.
Kai W. schrieb: > Da ich mir das nicht erklären > kann, frage ich ja Euch. Wer Module, die über Datenleitungen angeschlossen sind, ohne GEMEINSAME Versorgung betreibt, riskiert, dass die Eingangs- schutzdioden ungewollt leiten und unverträgliche Spannungen weiterleiten, wofür ein Modul dafür gar nicht vorgesehen ist. Kai W. schrieb: > * Gerade bin ich unsicher was die 1,8k am Bus angeht - war der Meinung, > dass ich den Wert aus einer sinnvollen Quelle hatte... oder sollte ich > lieber 4,7k nehmen? Wenn man nicht weiß, was man tut und auch keine Referenz vorweisen kann, dann sollte man die Finger von lassen, gerade wenn man darin nicht ausgebildet ist.
holger schrieb: >>.... und ich habe es bereits praktiziert. > > Das zeigt nur das du genauso dumm bist wie andere. Was hat AVcc mit ISP zu tun ? Und weisst du überhaupt wozu AVcc dient ?
Hubert G. schrieb: > Nachdem der MPU6050 mit 3,3V läuft, solltest du die I2C-PullUp > auch auf > die 3,3V legen. Die 5V könnte er die übel nehmen. Vielen Dank für den Hinweis, das hatte ich tatsächlich übersehen. Das Board verfügt über eigene pull-ups auf 3,3V. Die Kombi mit meinen war dann natürlich ungünstig/ schlicht falsch wegen 5V. Die Recherche ergab auch, dass mein breakout board (Typ GY-521, vgl. http://playground.arduino.cc/Main/MPU-6050) womöglich über einen falschen Kondensator verfügt (Auswirkungen auf Datenqualität) - das kläre ich noch. Inkignoto schrieb: > Kai W. schrieb: >> Da ich mir das nicht erklären >> kann, frage ich ja Euch. > > Wer Module, die über Datenleitungen angeschlossen sind, ohne > GEMEINSAME Versorgung betreibt, riskiert, dass die Eingangs- > schutzdioden ungewollt leiten und unverträgliche Spannungen > weiterleiten, wofür ein Modul dafür gar nicht vorgesehen ist. Ist damit gemeint, dass es gefährlich ist, das MPU6050-board von VCC abzuklemmen, aber den I2C-Bus verbunden zu lassen? Meint Ihr, dass das Entfernen von meinen pull-ups am I2C sowie eine externe Spannungsversorgung das Problem löst? Machen die Dioden in der VCC-Leitung vorm MPU6050-board sinn? Ich bin etwas zurückhaltend, das einfach auszuprobieren... Problemübersicht: - Lockbits werden beim Programmieren über ISP mit an VCC angeschlossenem MPU6050-board auf volle Blockade gesetzt & Abbruch des Programmierens/ Programm nicht lauffähig. Kann das über einen Fehler in meinem C-Programm passiert sein? Dachte, das ginge nicht... - Gibt es noch Hoffnung für die "verfused'n" Atmega8 /8L? Soviel ich weiß, verfüge ich über keinen HV- oder Parallel-Programmer (mySmartUSB light; Atmel ICE basic). Ist die Frage, ob sich die Anschaffung/ der Eigenbau für vier Atmega8 lohnt - werde mal recherchieren... oder sollte man einen HV-Programmer stets zur Hand haben ;-) Wie gesagt - ich habe die fuses nicht bewusst angerührt und die Atmegas waren fabrikneu sprich im Standardzustand.. Danke und Gruß Kai
Hallo, ich habe es bisher noch nicht geschafft, einen AVR "tot" zu programmieren, also auch keine Ahnung, was bei Dir da passiert. Etwas allgemeines aber: die MPU6050-Module haben üblicherweise bereits PullUp-Widerständen an SDA unDSCK gegen die 3,3V des Reglers auf den Modulen. Es ist nicht zulässig, von Außen einen höhere Spannung als Vdd + 0,5V an die Pins des MPU6050 anzulegen. Das passiert aber bei Dir sowohl über Deine PullUps als auch beim Programmieren vom Programmer bzw. dem AVR. I2C ist prinzipiell OpenDrain und schaltet gegen GND. Das ist bei Dir aber nicht sicherzustellen. Entweder Bi-direktionale Pegelwandler für I2C dazwischen oder wenigstens die PullUp gegen 5V generell raus und außerdem SDA/SCL vom MPU6050 abtrennen bevor der Programmer angeschlossen wird. Gruß aus Berlin Michael
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.