Hallo Leute,
ich versuche mich mit uC vertraut zu machen. Dazu habe ich mir vor knapp
nem halben Jahr das Starterkit gekauft.
http://shop.embedded-projects.net/index.php?module=artikel&action=artikel&id=108
Das habe ich nach Anleitung zusammengelötet, die Software aufm PC
installiert und ein Beispielprogramm (blinkende LED) laufen lassen. Es
hat alles wunderbar geklappt. Da mir die Teile für das AVR Tutorial
fehlten und ich mir anderen Sachen beschäftigt war, habe ich den uC in
die Ecke gepackt und nicht weiter beachtet. Nun habe ich Zeit gefunden
und will mich wieder damit beschäftigen, gehe wieder nach Anleitung und
versuche die LED zum blinken zu bringen. Jetzt bekomme ich allerdings
eine Fehlermeldung von AVR Studio. Entering programming mode... Failed!
Siehe dazu den Screenshot.
Schlau wie ich bin, habe ich Google benutzt und nach einer Lösung
gesucht. So wie ich es verstehe, ich bin aber ein absoluter Anfänger,
hat das irgendwas mit Fuse Bits zu tun (was bitte soll das heißen?)?
Um ganz ehrlich zu sein:
Ich habe keinerlei Ahnung, warum es jetzt nicht mehr geht oder was ich
tun kann, damit es wieder geht.
Alles, was ich über google finden konnte (z.B. hier:
http://www.roboternetz.de/community/showthread.php?22372-quot-Entering-programming-mode..-FAILED-quot-AVRISP-MKII)
bringt mich nicht weiter. So wie ich das verstehe, erzähle ich dem uC,
dass ein externer Oszillator verwendet werden soll ohne einen externen
Oszillator angesteckt zu haben. Wenn das der Fehler ist, wo kann ich das
denn rückgängig machen? Ich benutze AVR Studio so gut wie zum ersten Mal
und bin ein wenig ratlos, was ich machen kann.
Ich bitte wirklich um Hilfe, weil ich frustriert und ratlos bin. Falls
ihr weitere Informationen benötigt, lasst es mich bitte wissen.
Ich danke euch sehr!
Wenn das einmal falsch eingestellt ist, muß ein Oszillator dran, um die
ganze Sache rückgängig machen zu können. Funktionsgenerator tut's, man
kann sonst auch einen Oszillator aus Quarz und Schmitt-Triggern bauen,
oder mit einem Timer-IC, oder einen Quarzoszillator als Bauteil kaufen.
Ah Leute,
tut mir Leid, wenn ich hier so spammend bin :D
Im Anhang findet ihr einen Auszug aus einer beiliegenden PDF Datei. Das
ist das Starterkit, welches ich verwende. Der Crystal Q ist doch ein
externer Oszillator. Falls es tatsächlich daran liegen sollte, wie kann
ich diesen Crystal oscillator verwenden?
al3ko schrieb:> Schlau wie ich bin, habe ich Google benutzt und nach einer Lösung> gesucht. So wie ich es verstehe, ich bin aber ein absoluter Anfänger,> hat das irgendwas mit Fuse Bits zu tun (was bitte soll das heißen?)?
Die Fuse-Bits sind Schalter, mit denen man bestimmte Eigenschaften und
Funktionen des Chips ein- und ausschalten kann: Takterzeugung,
Spannungsüberwachung, Funktionen gewisser Pins, etc etc.
> bringt mich nicht weiter. So wie ich das verstehe, erzähle ich dem uC,> dass ein externer Oszillator verwendet werden soll ohne einen externen> Oszillator angesteckt zu haben. Wenn das der Fehler ist, wo kann ich das> denn rückgängig machen? Ich benutze AVR Studio so gut wie zum ersten Mal> und bin ein wenig ratlos, was ich machen kann.
Bei den AVRs kannst Du Dich im Gegensatz zu den PICs wirksam aussperren.
Die Programmierschnittstelle, über die Du Deinen Programmcode reinlädst,
braucht einen funktionierenden Prozessortakt, sonst geht sie nicht. Wenn
der Prozessor über die internen Schalter(Fuses) so geschaltet ist, dass
er einen externen Takt braucht, dann musst Du ihm den halt geben.
Besorge Dir am Besten einen Quarzoszillator (kleine Blechkiste mit 4
Pins, +, -, und Taktausgang, ein Pin ist frei) und 8 MHz Taktfrequenz,
damit Du ihm den Takt an OSC1 geben kannst.
Es gibt noch eine andere beliebte Methode sich auszusperren. Die
Programmierschnittstelle beinhaltet unter anderem das Reset-Signal, mit
dem der Prozessor neu gestartet werden kann. Es gibt aber einen
Schalter, mit dem man aus dem Pin für das Reset-Signal einen normalen
Ein-Ausgabe-Pin machen kann (falls einem genau ein Pin fehlt). Das
kannst Du EINMAL über die Programmierschnittstelle einschalten, aber
dann wird die normale Programmierschnittstelle (ISP) nicht mehr
funktionieren, weil sie eben genau dieses Signal braucht.
In diesem Fall hilft nur noch eine spezielle
Hochvolt-Programmierschnittstelle. Dazu musst Du den Prozessor in der
Regel aus der Schaltung nehmen und in ein spezielles Programmiergerät
stecken, das diese Programmiermethode kann. Von denen gibt es nur
wenige, das verbreitetste ist das STK500. Über die
Hochvolt-Programmierung kommst Du auf jeden Fall wieder auf den Baustein
drauf.
Da das STK500 aber nicht das billigste Programmiergerät auf dem Markt
ist und zudem noch eine serielle Schnittstelle braucht, die viele PCs
nicht mehr haben, nehmen die meisten Anfänger etwas anderes und kommen
dann in genau diese Situationen, in der Du jetzt steckst.
fchk
Hallo Frank, hallo Sebastian,
danke schon mal für eure Beiträge. Wo und wie kann ich festellen, ob die
Fuse Bits verstellt sind? Irgendwo muss man die ja verstellen können.
Hier mal das C-Programm, das ich damals vor einem halben Jahr in den uC
geladen habe:
1
#include<avr/io.h>
2
3
#define F_CPU 1000000UL
4
#include<util/delay.h>
5
6
intmain()
7
{
8
9
DDRC=(1<<PC5);/* Output */
10
PINC=(1<<PC5);/* internal Pullups */
11
12
while(1){
13
14
PORTC|=(1<<PC5);/*LED OFF*/
15
_delay_ms(250);
16
PORTC&=~(1<<PC5);
17
_delay_ms(250);
18
19
}
20
21
return0;
22
}
Und dieses Programm will ich jetzt wieder laden. Meine Frage:
Wo und wie könnte ich Fuse Bits verstellt haben?
Hi Leute,
ich hab mich ein wenig im Programm umgeschaut und folgendes gefunden.
Unter "SUT_CKSEL" war "Ext. Crystal/Resonator High Freq. ...." gewählt.
Sehe ich das richtig, dass hier möglicherweise der Hund begraben liegt?
Die Fuses sind nicht Bestandteil des Quelltextes oder des HEX-Files,
sondern werden in der Programmiersoftware direkt eingestellt.
Die einzige Möglichkeit, die Fuses wieder auszulesen, ist der
Hochvolt-Programmiermodus, da der immer funktioniert und seinen eignen
Takt zuführt.
Fchk
Hi Fchk,
einen neuen MUC habe ich für ein paar Euro auf Farnell gesehen. Ich
glaube, dass ich lieber einen neuen MUC kaufen würde als das
Hochvolt-Programmiergerät.
Um aber noch mal auf meinen Beitrag von 14:43 Uhr zurückzukommen:
Habe ich da nicht meinen externen Oscillator (Crystal Q - dieses
silberne Teil direkt neben dem MUC)?
Wenn du die FUSE Bits nicht verstellt hast tippe ich auf ESD. Oder die
Programmiersoftware ist nicht mehr ganz in ordnung.
Tests :
1. Kabel mit anderem uC testen
2. wenn anderer uC auch nicht geht :
a) Softwar neu installieren
b) Kabel prüfen
c) An anderem Rechner testen
3. Wenn anderer uC geht :
a) Oszillator bauen (KEIN QUARZ MIT KONDENSTOREN)
sondern mit Verstärkerstufe (findet man auf alten motherboards)
kaufen loht sich nicht weil teurer als uC (oder selber bauen aus allem
möglichen)
Q ist nur ein Quarz ! Er bildet zusammen mit einem Inverter im uC und
zwei Kondensatoren daneben einen Oszillator. Wenn die FUSES jedoch auf
Externen Oszillator eingestellt sind dann erwartet der uC auch eine
Komplette Oszillatorschaltung ausserhalb und deaktiviert seinen internen
Inverter.
Uwe schrieb:> Wenn du die FUSE Bits nicht verstellt hast tippe ich auf ESD. Oder die> Programmiersoftware ist nicht mehr ganz in ordnung.> Tests :> 1. Kabel mit anderem uC testen> 2. wenn anderer uC auch nicht geht :> a) Softwar neu installieren> b) Kabel prüfen> c) An anderem Rechner testen> 3. Wenn anderer uC geht :> a) Oszillator bauen (KEIN QUARZ MIT KONDENSTOREN)> sondern mit Verstärkerstufe (findet man auf alten motherboards)> kaufen loht sich nicht weil teurer als uC (oder selber bauen aus allem> möglichen)
Hi Uwe,
vielen Dank für deinen Beitrag. Einen anderen uC besitze ich leider
nicht. Ob ich FUSE Bits verstellt habe oder nicht, weiß ich nicht.
Jedenfalls kann ich mich nicht daran erinnern, dass ich bewusst damit zu
tun hatte.
Ich bin kurz davor, einfach neue uC zu kaufen und zu gucken, ob die
gehen.
Frage an dich:
Warum kann ich nicht den Quarz mit Kondensatoren verwenden?
Uwe schrieb:> Q ist nur ein Quarz ! Er bildet zusammen mit einem Inverter im uC und> zwei Kondensatoren daneben einen Oszillator. Wenn die FUSES jedoch auf> Externen Oszillator eingestellt sind dann erwartet der uC auch eine> Komplette Oszillatorschaltung ausserhalb und deaktiviert seinen internen> Inverter.
Ah okay. Also gehört der Quarz zum internen Oscillator. Okay, dann werde
ich einen neuen MUC kaufen :)
Dank dir.
Gruß
Hey Leute,
was mir gerade noch einfällt:
Als ich gestern das BlinkLED Beispiel auf dem MCU starten wollte, habe
ich beim ersten Mal leider vergessen, die (externe) Spannungsversorgung
anzuschließen. Soll heißen, es war nur eine Verbindung zwischen PC und
MCU vorhanden.
Frage:
Kann das möglicherweise den Fehler im MCU verursacht haben?
al3ko schrieb:> Deute ich das Schweigen richtig, dass es zu ungenau beschrieben ist?> Oder liegt es an meiner Frage an sich, dass keine Antwort kommt? :(
Eine sichere Antwort ist schwierig. Normal sollte sowas nicht passieren,
denn wenn der Chip keinen Strom bekommt sollte er überhaupt nix tun.
Mit Sicherheit auszuschließen ist es aber auch nicht, denn er könnte
sich seinen Strom beispielsweise über die Schutzbeschaltung an den
Eingangspins geholt haben. Das mag für einen normalen Betrieb nicht
gereicht, aber womöglich zum Kippen einer Fuse geführt haben. Das ist
aus der Ferne schwer zu sagen.
Achselzuckend.
fchk
Hey al3ko.
Normalerweise sollte Dein µC ohne angeschlossenen Strom nichts "machen",
wie Frank vor mir schon richtig bemerkte.
Ein gern gemachter Fehler ist jedoch, vor dem Setzen der Fuses nicht
erst die Fuses, welche auf dem µC schon geschaltet sind auszulesen.
Das kann dann u.U. dazu führen, dass man zwar augenscheinlich nur genau
die Änderung vornimmt, welche man auch geplant hätte - da aber dann die
anderen Fuses auf "irgend einer" Einstellung mit übertragen werden, kann
es schon mal komisch werden. [Dies hängt natürlich von der verwendeten
Software ab, ich kenne jene, welche Du verwendest nicht.]
-----
Bei all den [sicher gut gemeinten] Ratschlägen würde ich Dir jedoch erst
einmal vorschlagen, sich zu überlegen, ob sich die Sache für Dich lohnt.
Hier wurde schon von der Anschaffung eines Programmers für [relativ]
viel Geld gesprochen - das lohnt imho eigentlich nur, wenn Du wirklich,
dauerhaft und häufiger mit Deinem Protoboard [und weiteren Anwendungen]
arbeiten möchtest.
[Was übrigens einen satten Preis hat - wenn ich das richtig sehe, hast
Du für Deine 60 Schleifen zzgl. Versand das Protoboard, ein (350mA ?)
Netzteil, einen serial-to-usb Adapter und einen Mega8 bekommen ?
Ein einfaches Protoboard mit ISP und JTAG Schnittstelle gibt es bei
Pollin als Bausatz für 15, den Atmega8 für 3, Netzteile je nach
Ausführung für um die 5 Euronen ... ]
Ich würde Dir eher raten, sich einfach einen neuen µC zuzulegen.
Das dürfte für Deine Zwecke derzeit die einfachste und günstigste Lösung
sein.
Gruss,
Martin
Hi
>Normalerweise sollte Dein µC ohne angeschlossenen Strom nichts "machen",>wie Frank vor mir schon richtig bemerkte.
Stimmt so nicht. Man kann einen AVR auch über die Schutzdioden eines
Ports versorgen. Allerdings dürfte ein Programmierversuch mit dieser
'Stromversorgung' recht unbestimmte Ergebnisse zur Folge haben.
MfG Spess
hahahahahah Leute, ich bin so happy. Eben sind meine drei neuen MCU
angekommen. Ersten eingebaut, LED blinkt. Wawaweewa, nun kann das
Programmieren los gehen :D
Ich weiß nicht, was ich beim alten MCU gemacht habe, weshalb er nicht
mehr funktioniert. Jedenfalls habe ich jetzt einen neuen eingebaut und 2
in Reserve, so dass ich mir darüber hoffentlich keine Sorgen machen
muss.
Ein dickes Danke an euch alle für die zahlreichen Antworten und
Hilfestellungen.
MfG
al3ko