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
> 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.
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.
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.
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
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
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
Eine eigene Frage?
Dieser Thread ist über 15 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.