Forum: Mikrocontroller und Digitale Elektronik Problem bei ATMEGA8 über ISP bei angeschlossenem I2C programmieren


von Kai W. (chilibit)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

Zeig mal den Schaltplan.

von spess53 (Gast)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von ... (Gast)


Lesenswert?

Schaltplan?
Versorgungsspannungsbereich 2.3-3.4V sicher eingehalten?

von Kai W. (chilibit)



Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von Kai W. (chilibit)


Lesenswert?

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
von Hubert G. (hubertg)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

AVcc hast zwar einen Kondensator, ist ansonsten aber
scheinbar nicht angeschlossen.

von Arduinoquäler (Gast)


Lesenswert?

holger schrieb:
> ist ansonsten aber scheinbar nicht angeschlossen.

Ich sehe da einen kleinen orangenen Draht der zur Plus-Schiene geht.

von holger (Gast)


Lesenswert?

>Ich sehe da einen kleinen orangenen Draht der zur Plus-Schiene geht.

Ja, du hast recht. Verwechselt mit dem zweiten GND Pin22.

von Karl M. (Gast)


Lesenswert?

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.

von Arduinoquäler (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>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.

von Arduinoquäler (Gast)


Lesenswert?

holger schrieb:
> Das denken viele.

.... und ich habe es bereits praktiziert.

von holger (Gast)


Lesenswert?

>.... und ich habe es bereits praktiziert.

Das zeigt nur das du genauso dumm bist wie andere.

von Inkignoto (Gast)


Lesenswert?

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.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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 ?

von Kai W. (chilibit)


Lesenswert?

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

von Michael U. (amiga)


Lesenswert?

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
Noch kein Account? Hier anmelden.