Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 mit externem Quarz auf Pollin Eval Board


von Se W. (electro)


Lesenswert?

Hallo zusammen,

dies ist mein erster Post hier. Und gleich habe ich ein Problem:

Ich arbeite mich gerade in die AVR uC Programmierung ein und verwende 
hierzu einen ATMEGA8 auf einem Pollin Evaluationsboard V2.01.
Soweit hat auch alles gut funktioniert. Nun wollte ich, um einen 
genaueren Timer zu erhalten, auf externen Takt umstellen. Ein 16Mhz 
Quarz ist ja auf dem Board aufgelötet.
Dazu habe ich den ATMEGA8 per Avrdude mit folgenden Fuses beschrieben 
(mit Hilfe von http://www.engbedded.com/fusecalc):
Low: 0xE0
High: 0xD9

Nun tut sich nichts mehr - leider. Ich kann den uC auch nicht mehr 
auslesen geschweige denn neu beschreiben.

Hab ich die falsche Fusekonfiguration verwendet? Muss der Quarz auf dem 
Pollin Board erst aktiviert werden? Kann ich den Chip noch retten?

Danke schonmal für Eure Hilfe!

Viele Grüße
Sebastian

von g457 (Gast)


Lesenswert?

Die '0' im

> Low: 0xE0

steht für 'external Clock'. Hülfe gibbet da [1].

Einfach öfters mal ins Datenplatt kucken.

HTH und nix für ungut

[1] 
http://www.mikrocontroller.net/articles/AVR_Fuses#Reaktivieren_bei_fehlerhaften_Taktquellen-Fuse-Einstellungen

von Se W. (electro)


Lesenswert?

Vielen Dank für die Info.
Ich verstehe - ich habe 'externel clock' eingestellt, das meint aber 
einen Quarzosszilator. Für meinen Quarz hätte ich 'external crystal' 
verwenden sollen. Zu spät nun also.
Ich habe noch einen zweiten ATMEGA8, den ich möglicherweise mit der von 
Dir verlinkten Anleitung zum Erzeugen des Reaktivier-Taktes hernehmen 
könnte. Leider kann ich diesen nicht mit auf das Pollin Board packen. 
Ich muss also warten, bis ich mir ein Steckbrett besorgt habe, um dann 
eine Schaltung mit den 2 uCs aufzubauen.
Ich hoffe, ich bekomme das hin.

Ach, und was bedeutet HTH?

Sebastian

von g457 (Gast)


Lesenswert?

Hope that helps :-)

Viel Erfolg mit dem externen Taktgenerator! Masseverbindung nicht 
vergessen dann klappt das schon :-)

von ich (Gast)


Lesenswert?

Für sowas hat man einen Defuser :-)

Man nehme einen Quarzoszillator (von einer ollen Platine gelötet)
drei Drähte dran. (+ - out) Kann man immer gebrauchen.

von Se W. (electro)


Lesenswert?

Ich habe tatsächlich von einer alten Ethernetkarte einen Quarzosszilator 
ausgelötet. Hat wohl 20 Mhz. Kann ich diesen verwenden? Wie muss ich die 
4 Pins anlöten?

von g457 (Gast)


Lesenswert?

> Hat wohl 20 Mhz. Kann ich diesen verwenden?

Ja.

> Wie muss ich die 4 Pins anlöten?

Normalerweise(tm):

NC  1   14 Vcc
GND 7    8 Takt

von g457 (Gast)


Lesenswert?

(Bei den quadratischen analog, nur die Ziffern verschieben sich 
entsprechend)</ingrid>

von ich (Gast)


Lesenswert?

hmm, 20 MHz könnten je nach ATMEGA etwas zuviel sein.

Belegung -> Datenblatt -> google ?

von Se W. (electro)


Lesenswert?

Werds mal probieren. Oder kann ich den uC mit einem zu hohen Takt 
schrotten? Werde ihn ja nicht über längere Zeit dranhängen...

von Nils ‫. (n-regen)


Lesenswert?

Wenn der Takt zu schnell ist, läuft der µC unter Umständen instabil, 
übersieht also ab und an mal einen Takt.
Kaputt gehen kann dabei nichts, schlimmstenfalls verhält sich der µC 
merkwürdig.
(Dein ATmega8 verträgt übrigens laut Spezifikation 16MHz, 20MHz 
müssten also zumindest fürs Ausprobieren noch im Rahmen sein.)

von Se W. (electro)


Lesenswert?

Top! Es hat funktioniert. Hab die Fuses nun richtig gesetzt und der uC 
ist wieder voll ansprechbar :D Danke an alle!
Werde meinen 'Defuser' aufheben. Wie gut, dass ich die Netzwerkkarte 
bzw. den Quarzosszilator damals nicht weggeschmissen habe.

Noch eine Frage:
Um eine korrektes Timing zu bekommen, muss ich in meinem Quellcode F_CPU 
definieren.
Was gebe ich hier an: 16000000 oder 16000000UL ?
Habe es eben mit letzterem probiert. Ein z.B. 1 Sek. Takt läuft aber 
nach ca. 2 Minuten mit meiner Armbanduhr nicht mehr syncron. Auf dem 
Quarz ist aber genau K16.000 aufgedruckt.

von oldmax (Gast)


Lesenswert?

Hi
Übrigends, wenn du das Pollin-Board hast, ist ein "Lebensretter" auch 
leicht unterzukriegen... du lötest auf ein Stück Lochraster eine Fassung 
für einen Controller deiner Wahl. Für eine x-beliebige Fassung auf dem 
Pollin-Board nimmst du Stecknadeln und versorgst deine Fassung mit 5 V. 
Nun noch eine Reset-Beschaltung (Kondensator/ Widerstand) und fertig ist 
deine "Minimalbeschaltung" für den Controller. Auf einem Ausgang 
generierst du dir einen Takt, den du durchaus aus der internen Frequenz 
ableiten kannst. Diesen Ausgang verdrahtest du ebenfalls auf eine 
Stecknadel, diesmal aber frei beweglich.
Nun kannst du dem verfummelten µC einen Takt anbieten, dem er sich nicht 
widersetzen kann.....
Noch ein Tip. In der Bucht gibt's für ca. 20 € einen USP-ISP 
Programmierstick. Damit kannst du direkt aus AVR-Studio heraus deinen µC 
flashen und es geht um Welten schneller. Mit OpenEye kannst du dir über 
die serielle Schnittstelle ein Fenster auf die Variablen im Controller 
legen und dir die internen Werte ansehen. Hab ich mir mal geschrieben 
und dann hier veröffentlicht. Wenn du damit umgehen kannst, wirst du es 
nicht mehr missen wollen.
Gruß oldmax

von Karl H. (kbuchegg)


Lesenswert?

Sebastian Wolf schrieb:

> Noch eine Frage:
> Um eine korrektes Timing zu bekommen, muss ich in meinem Quellcode F_CPU
> definieren.
> Was gebe ich hier an: 16000000 oder 16000000UL ?
> Habe es eben mit letzterem probiert. Ein z.B. 1 Sek. Takt läuft aber
> nach ca. 2 Minuten mit meiner Armbanduhr nicht mehr syncron.

Was hast du benutzt?
_delay_ms?
Das ist auch nicht unbedingt das Genaueste. Du verbrätst ja zb auch 
immer Takte dazwischen, die vom delay_ms nicht berücksichtigt werden.

Wenn's stimmen soll, musst du die Sache mit einem Timer angehen.

> Auf dem
> Quarz ist aber genau K16.000 aufgedruckt.

Das heißt noch lange nicht, dass er exakt 16000000 Schwingungen/Sekunde 
macht. Ein paar Hundert +- sind immer drinnen. Hängt auch von der 
Temperatur ab.

von Se W. (electro)


Lesenswert?

Ja, ich habe _delay_ms verwendet. Werde das Ganze mal wie vorgeschlagen 
mit einem Timer probieren. Hatte gedacht, _delay_ms wäre ausreichend 
genau.
Wie gesagt - ich arbeite mich noch ein ;)

UL steht also für unsigned long, das müsste ja passen. Und wie viel 
Abweichung der Quarz dann hat, müsste man halt mal Messen. Solange es 
für eine fehlerfreie RS232-Kommunikation reicht, bin ich zufrieden.

von Karl H. (kbuchegg)


Lesenswert?


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.