Forum: Mikrocontroller und Digitale Elektronik Problem mit externer Taktversorgung (Fusebits)


von oyla (Gast)


Angehängte Dateien:

Lesenswert?

Moin,

Nachdem ich mir schon 2 Mikrocontroller verfused habe, frag ich dann 
doch mal nach wie es richtig geht. Es handelt sich um einen 
ATmega88V-10PU mit welchem ich über einen FT232RL mit meinem Rechner 
sprechen möchte. Der FT232Rl ist funktionstüchtig, nur die internen 8Mhz 
des AVR's zu ungenau, sodass ich relativ kryptische Zeichen auf die 
Konsole bekomme (zumindest liegt da meine Vermutung :D ). Sprache ist 
einsteigerfreundlich Bascom, an C werde ich mich nächstes mal wagen ;). 
Stromversorgung ist 5V aus einem 7805, davor aber nur ein 230V zu 2x3V 
(je 300mA max) in reihe.

Zu meinem genauen Problem.:

Mein Plan ist es, ein externes 12mHZ Quarz anzuschließen, wie es auch im 
Tutorial steht 
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment#Quarz_statt_Quarzoszillator).

Dies habe ich auch getan. Testweise werkelt folgendes Code auf dem AVR
1
$regfile = "m88def.dat"
2
$crystal = 800000
3
$baud = 9600
4
5
Main:
6
7
Config Portb = Output
8
9
Portb.0 = 1
10
11
Do
12
Print "a"
13
Toggle Portb.0
14
Waitms 2000
15
Loop


Zu den Fusebits. Ich hab mich im Datenblatt erkundigt und diverse Seiten 
gelesen. Mein Fazit war, die CKSEL auf 1111 und SUT auf 11 zu setzen, 
da die Anlaufzeit nicht wichtig ist. Relutat: Per ISP/Bascom ist nicht 
mehr auffindbar und die LED bleibt aus.

Wo kann da der Fehler liegen? Wo müsste ich ein Oszilloskop ranhängen um 
zu wissen ob der Quarz funktioniert? hab das übrigens auch nochmal mit 
einem Quarz mit 4mHz versucht, das hat den AVR aber auch nicht wieder 
zum leben erweckt.

Ich hoffe ihr könnt mir helfen, bin ein wenig Ratlos (und billiger wird 
es auch nicht :/ ). Das der Takt nicht ordnungsgemäß eingestellt ist, 
hab ich schon gesehen, aber ich vermute nicht, dass das der Fehler sein 
sollte.

Im Anhang 2 Bilder, vielleicht sieht ja jemand was :)

Schönen Sonntag!
oyla

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> Mein Plan ist es, ein externes 12mHZ Quarz anzuschließen
> Dies habe ich auch getan. Testweise werkelt folgendes Code auf dem AVR
> $regfile = "m88def.dat"
> $crystal = 800000
             ^^^^^^

$crystal = 12000000 wäre jetzt angesagt. BTW. intern 8 MHz und 800000 
passt auch nicht.

Wenn dein AVR jetzt auf 12 MHz läuft, im Programm 0.8 MHz eingestellt 
ist, hast du statt 2000ms Wartezeit nur gut 133 ms 
(2000*800000/12000000). Die LED sollte man damit noch sehen. UART 
(PRINT...) funktioniert garantiert nicht wie vorgesehen.

von bingo (Gast)


Lesenswert?

ich hätte auch den Quarz viel näher an den µC positioniert

von Felix (Gast)


Lesenswert?

Du hast keine Abblockkondensatoren an dem Controller dran. Du solltest 
unbedingt jedem VCC-GND-Paar des Controllers einen 100nF-Kondensator 
spendieren und dieser Kondensator sollte eine niedrige Impedanz bei den 
Frequenzen haben auf denen der Controller arbeitet. ein 0815-Elko am 
Controller bringt dir also nicht viel. Also einfach 100n 
Keramikkondensator zum Beispiel. Wenn das Board aus einem 
Steckernetzteil oder ähnlichem versorgt wird und da auch noch ein Stück 
Zuleitung zwischen Stromversorgung und Board ist, könntest du noch einen 
Elko auf das Board setzen um die Spannung zu stabilisieren. Also z.B. 
100-470uF irgendwo in der Nähe des Versorgungseingangs.

Mit den ganzen schicken Leiterschleifen auf der Platine und dem 
Zuleitungskabel hat dein Versorgungssystem eine viel zu große Impedanz 
auf den Frequenzen die so in der Stromversorgung des Controllers und 
wahrscheinlich auch des FTDI Chips vorkommen. Vereinfacht ausgedrückt: 
Der Controller zieht mit jedem Takt kurz viel Strom. Das geschieht mit 
den 12MHz mit denen du takten willst. Deine Stromversorgung, die 
eigentlich eine Spannungsversorgung ist, kann aber diesem Stromsprung 
nicht folgen da zu viel Induktivität zwischen der Spannungsquelle und 
der Last vorhanden ist. Also bricht die Spannung an der Last zusammen. 
Mit einem Multimeter wirst du das nicht messen können, auf einem 
Oszilloskop sollte man das aber schön beobachten können.



Die Position des Quarzes ist schon ok, es ist halt Lochraster. Da gibt 
es viel ungünstigere Aufbauten und auch die sind gelaufen. Klar, auf 
einer gefertigten Platine müsste man das jetzt nicht unbedingt so 
machen.

von Thomas E. (thomase)


Lesenswert?

1. Wie bingo schon bemerkte ist der Quarz zu weit weg. Der gehört so nah 
wie möglich dran.

2. Es fehlt der Stützkondensator. 100nF möglichst nahe an VCC und GND am 
Controller.

3. Hast du External Clock oder External Crystal eingestellt? External 
Clock erwartet einen externen Oszillator. External Crystal ist die 
richtige Einstellung.

4. Ich habe mit dem internen Takt noch nie Probleme bei der Übertragung 
gehabt. Im Datenblatt sind Tabellen, aus denen man die für den 
jeweiligen Takt beste Geschwindigkeit entnehmen kann.

mfg.

von oyla (Gast)


Lesenswert?

okay!

ich werde die Anmerkungen alle mal Umsetzen die nächsten Tage und melde 
mich wieder.

Danke :)

von g457 (Gast)


Lesenswert?

Noch ein Punkt: Hast Du CKOPT programmiert? Laut Datenplatt brauchts den 
bei >8MHz - und so weit wie der Quarz weg ist vom µC würds mich nicht 
wundern wenns ohne zu Problemen käm.

Und: Wie interpretiert Deine GUI '1111' - so wie Atmel ('Fuse == 1' == 
'Fuse intakt/nicht durchgebrannt' == 'nicht programmiert') oder vermurxt 
wie manch andere Software ('Fuse == 1' == 'Fuse durchgebrannt' == 'Fuse 
programmiert')?

HTH

von oyla (Gast)


Lesenswert?

Also ich hab in diesem Fall den untersten Eintrag im Bascom gewählt (da 
Bascom auch gerade meckert, bzw sich immer aufhängt wenn ich in das Menü 
will um die Fuses zu setzen (bei dem neuen AVR) kann ich nicht 
nachschauen wie der hieß...).
Es war laut Bascom alles auf 1, ich weiss aber gerade nicht genau wie 
das zu interpretieren ist, bin halt relativ neu in der Sache.

Ich vermute, dass er 1111 wie im Datenblatt des AVR interpretiert (Dort 
gibt es eine Tabelle, und diese 1 müsste sinnentsprechend zu der 1 im 
Bascom stehen)

Im Datenblatt Seite 30 (Abschnitt 8.4  Table 8-6) ist die Tabelle.

Gruss
oyla

von oyla (Gast)


Angehängte Dateien:

Lesenswert?

So,

Ich bin jetzt ein wenig verwirrt und hab wohl die 5 AVRs durcheinander 
gebracht. Also gerade sieht es so aus:

- Der Stützkondensator ist zwischen GND und Vcc "relativ" nah vom 
mC(Blau).
- am Spannungeingang ist direkt ein 470uF Kondensator geschaltet und
- Der Quarz und die dazugehörigen Kondensatoren sitzen nun sehr direkt 
an den beiden XTAL Eingängen des AVR
(Siehe Fotos)

Der Fehler am Bascom war übrigens mein Versuch, den Portdelay auf 60000 
zu stellen (ein wirklich doofer Fehler der mir eben wieder eingefallen 
ist). Zumindest konnte ich damit anscheinend meinen, auf 128kHz 
verfuseden AVR gerade wiederbeleben :) )

Alle Chips sind nun auf 8mHz intern (zumindestens laut Bascom) , außer 
der, der extern getaktet werden sollte, weil der sagt noch immer nichts.

Der Atmega88V-10PU wird doch standardmäßig auf 8mHz ausgeliefert, oder 
hab ich mich verlesen?
Wenn ich nun nämlich in Bascom den Takt als 8000000 angebe, und dann die 
LED per waitms 1000 toggle, dauert das bedeutend länger.
Wenn Ich 1000000 angebe und die LED dann toggle passt das fast (der AVR 
ist noch einen deut langsamer im Vergleich zur Uhr, in 10 Sekunden 
schafft er ca 9).

Wegen dem mit der externen Taktversorgung, weiß ich nicht weiter. Er 
müsste auf external Crystal eingestellt sein.

Ich weiß! viele Fragen!
carpe diem
oyla

von g457 (Gast)


Lesenswert?

> Der Atmega88V-10PU wird doch standardmäßig auf 8mHz ausgeliefert, oder
> hab ich mich verlesen?

Du hast :-) Laut Datenplatt [0]:
1
8.2.1 Default Clock Source
2
The device is shipped with internal RC oscillator at 8.0 MHz and with the
3
fuse CKDIV8 programmed, resulting in 1.0 MHz system clock.

> Wegen dem mit der externen Taktversorgung, weiß ich nicht weiter. Er
> müsste auf external Crystal eingestellt sein.

[1]

HTH

[0] http://atmel.com/dyn/resources/prod_documents/doc2545.pdf
[1] 
http://www.mikrocontroller.net/articles/AVR_Fuses#Reaktivieren_bei_fehlerhaften_Taktquellen-Fuse-Einstellungen

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.