Forum: Mikrocontroller und Digitale Elektronik Crystal Oszillator?


von Julius (Gast)


Lesenswert?

Hi,

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment

^ - In diesem Artikel wird XTAL2 nicht verbunden, aber es wird ein Quarz 
Oszillator verwendet? Das Handbuch des ATmega16 schaltet den Oscillator 
zwischen XTAL1/XTAL2.
Frage, ist "Crystal Oscillator" richtig und passt es trotz der 
Schaltungsabweichung?

Mit freundlichen Grüßen
Julius Junghans

von A.K. (Gast)


Lesenswert?

Crystal = Quarz = Bauteil mit 2 Beinen an XTAL1/2.

Crystal oszillator = Baustein mit 4 Beinen (davon 1 unbenutzt), aus 
denen eine fertiger Takt rauskommt.

von Julius (Gast)


Lesenswert?

So, nach dem lesen von 20 Forumsbeträgen die es alle voraussagten habe 
ich den AVR endlich zerschossen:

DEFAULT: (Das auslesen der Fuses klappt bis heute nicht mit avrdude)
uisp -dprog=avr910 -dserial=/dev/ttyUSB0 -dspeed=115200 -dpart=75 
--rd_fuses
Programmer Information:
  Software Version: 4.0, Hardware Version: 0.2


Atmel AVR ATmega16 is found.

Fuse Low Byte      = 0xe1
Fuse High Byte     = 0x99
Cannot read extended fuse bits on this device. Returning 0xff
Fuse Extended Byte = 0xff
Calibration Byte   = 0xb9  --  Read Only
Lock Bits          = 0xff
    BLB12 -> 1
    BLB11 -> 1
    BLB02 -> 1
    BLB01 -> 1
      LB2 -> 1
      LB1 -> 1
0xe1(16) ist 1110 0001(2)  - stimmt mit dem Datenblatt überein.

Was ich ändern wollte war der externe Takt durch einen "Crystal 
Oscillator" (4MHz) wie er hier im AVR Tutorium verbaut wird.

Meiner Meinung nach wäre das:
0xef(16) 1110 1111(2)


uisp -dprog=avr910 -dserial=/dev/ttyUSB0 -dspeed=115200 -dpart=75 
--wr_fuse_l=0xef
Programmer Information:
  Software Version: 4.0, Hardware Version: 0.2

Atmel AVR ATmega16 is found.

Fuse Low Byte set to 0xef


AUSLESEN:
uisp -dprog=avr910 -dserial=/dev/ttyUSB0 -dspeed=115200 -dpart=75 
--rd_fuses
Programmer Information:
  Software Version: 4.0, Hardware Version: 0.2

Probably the AVR MCU is not in the RESET state.
Check it out and run me again.


Hat jemand eine idee?

Mit freundlichen Grüßen
Julius Junghans

von Karl H. (kbuchegg)


Lesenswert?

> Was ich ändern wollte war der externe Takt durch einen "Crystal
> Oscillator" (4MHz) wie er hier im AVR Tutorium verbaut wird.

Ein Quarz-Oszillator ist kein Quarz!

Was du hast, ist wahrscheinlich ein Quarz und kein
Quarz-Oszillator. Ein Quarz-Oszillator schwingt von
alleine und liefert ein Taktsignal. Ein Quarz braucht
eine Verstärkerschaltung um ins Schwingen zu kommen.

Ein Quarzoszillator kann direkt über XTAL1 an den Mega16
angeschlossen werden, da er ja von alleine schwingt und einen
Takt erzeugt.

Ein Quarz muss mit beiden beiden Beinen an den Mega16
angeschlossen werden. Der Mega16 enthält den dazu passenden
Schaltkreis der dafür sorgt, dass der Quarz ins Schwingen
kommt.

Wenn du den Mega16 wiederbeleben möchtest, dann musst du
an XTAL1 jetzt irgendeine Schwingung rein zaubern (die
natürlich schnell genug sein muss). Wenn du noch einen
Mega16 hast, dann programmiere ihn so, dass er einen Pin
toggelt und benutze diesen Pin als Frequenzlieferant.
Du kannst auch einen 555 benutzen oder einen Frequenzgenerator
oder was du auch immer hast.

von A.K. (Gast)


Lesenswert?

0000 = "external clock" = die erste Schaltung auf der o.A. Seite, die 
mit dem 3-Beiner an XTAL1, der als Quarz-Oszillator einen fertigen Takt 
liefert.

1111 = "external crystal/resonator" = die zweite Schaltung, die mit dem 
2-Beiner (Quarz) und den beiden Kondensatoren, in der die Kombination 
aus Quarz und der Schaltung im Controller zusammen zum Quarz-Oszillator 
wird.

von Julius (Gast)


Lesenswert?

Ich habe hier schon einen Quarz Oszillator 4Mhz (4 Beine)

http://www.reichelt.de/?SID=20RnbRD6wQARQAAF8nIwI8a801066781fe744f5a84648d53a9daf;ACTION=3;LA=4;GROUP=B42;GROUPID=3174;ARTICLE=13706;START=0;SORT=artnr;OFFSET=16



Dieser Code sollte sich zur Zeit im ATmega16 befinden:
#include <avr/io.h>          // (1)
#define F_CPU 1000000UL
#include <util/delay.h>

#define MEINBIT 0

int main (void) {            // (2)

DDRA  = 0xff;             // (3)

while(1) {                // (5a)

PORTA |= (1 << MEINBIT);
_delay_loop_2 (65536);
PORTA &= ~(1 << MEINBIT);
_delay_loop_2 (65536);
}                         // (5c)

/* wird nie erreicht */
return 0;                 // (6)
}


Mit 1Mhz hat er so vor sich hingeblinkt, gebe ich jetzt der Schaltung 
Spannung und habe den Programmer nicht mit dem PC Verbunden passiert 
erst einmal nichts.
berüht man jedoch die Verbindung Quarz Oszillator Pin 8 -> ATmega16 
XTAL1 Pin 13  fängt die ledt wieder an zu blinken, etwas schneller als 
zuvor aber gleichmäßig.

Das ganze ist auf einem Steckbrett aufgebaut, Kabel tauschen, andere 
Steckplätze alles zeigt keine Veränderung.

von A.K. (Gast)


Lesenswert?

Nu, dann ist der Weg ja klar. Finger dran und währenddessen die Fuses 
korrekt einstellen ;-).

Steckbretter sind übrigens nicht allzu zuverlässig. Wenn's mit Finger 
dran tut, kann auch ein Wackelkontakt im Spiel sein.

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.