ATMEGA32 funktioniert nur mit internem Oszillator

OP #4513956
Lesenswert?

Hi,

Mein µC hängt an einem 12,288MHz-Quarz mit 2 15pF Kondensatoren gegen 
Masse.
VCC, AVCC und beide GNDs sind angeschlossen.
In meinem Code schalte ich bisher ein Pin auf Ausgang und HIGH.
Die angeschlossene LED leuchet.
Setze ich nun die Fuses auf externen Quarz mit Frequenz größer 8MHz, 
dann tut sich nichts mehr.
Die Fuseeinstellungen, siehe Anhang.

Start-up-time ist auch die längste Mögliche.

Am Quarz messe ich mit meinem Multimeter 2,5V (bei 5V Betriebsspannung), 
also ist da schon mal ein Takt (wie der genau aussieht, kann ich leider 
nicht feststellen).

Habt ihr Ideen, was man bei meinem Problem machen könnte?

Danke im Voraus
Hannes
Angehängte Dateien:
#4514097
Lesenswert?

15 pF ungewöhnlich, ich habe von 16-20 MHz immer nur 22pF dran, 12 MHz 
hatte ich noch nie probiert, mir war so das ab 20 22 24 MHz kleinere 
Kondis ran sollten, aber über 20MHz hatte ich noch nie, wobei 22MHz 
(21.xxx Baudratenquarz sicher gehen soll 24MHz vereinzelt.)

Hast du Unterspannung? ab >8 MHz Spannungsdiagramm beachten!
(Firma: matzetronics) #4514259
Lesenswert?

Hubert G. schrieb:
> Wenn allerdings kein Haken eine 0 bedeutet, dann hast du auf extern
> Clock gestellt.

Wenn hingegen 'kein Haken' nur 'unprogrammiert' bedeutet (Fuse auf 1), 
dann wäre das richtig auf Ext. High Frequency Xtal mit langsamen 
Startup.

@TE: Um alle Klarheiten zu beseitigen, lies doch mal, sofern vorhanden, 
einen fabrikfrischen Mega aus und zeig uns den Screenie.
OP #4514549
Lesenswert?

Ok die fehlenden zusätzlichen Infos:
5V Betriebsspannung, 1µF und 100nF am VCC-Pin

Im Burn-o-mat steht Häkchen für programmiert, also '0'. Also Fuses 
richtig gesetzt, wie Matthias schrieb.

Ich habe leider nur den einen Atmega hier.

Bzgl. Takt: die Fuses sind ja für externen Quarz gesetzt und ich kann 
noch über das ISP Interface Fuses bearbeiten und den Flash schreiben, 
also scheint das ja zu funktionieren.

Hier mal der Code:
[code]
#ifndef F_CPU
#define F_CPU 12000000UL
#endif

#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

#include "includes/light_ws2812.h"
#include "includes/test.h"

struct cRGB led[1];

void main(){
  LED_ON();
  while(1){

    LED_PORT |= (1<<LED2);
    _delay_ms(1000);

    LED_PORT &= ~(1<<LED2);
    _delay_ms(1000);
        }
}

//zugehörige Headerdatei
#ifndef _TEST_H
#define _TEST_H
#endif

#include <avr/io.h>

#define LED_DDR        DDRD
#define LED_PORT      PORTD
#define LED1        PD4
#define LED2        PD6

#define LED_ON()  LED_DDR |= ((1<<LED1) | (1<<LED2))
#4514586
Lesenswert?

Johannes H. schrieb:
> Mein µC hängt an einem 12,288MHz-Quarz mit 2 15pF Kondensatoren gegen
> Masse.
> VCC, AVCC und beide GNDs sind angeschlossen.

Acuh mit Abblock-Cs? Ist das vielleicht ein Steckbrett? Dann mal die 
15pF weglassen, die Steckbrett Kontakte haben selber Kapazitäten in 
dieser Größenordnung. Ansonsten: Foto vom Aufbau.

Johannes H. schrieb:
> Bzgl. Takt: die Fuses sind ja für externen Quarz gesetzt und ich kann
> noch über das ISP Interface Fuses bearbeiten und den Flash schreiben,
> also scheint das ja zu funktionieren.

ISP funktioiniert ohne Takt nicht mehr. Wenn man den verfused, muss man 
das mit HVPP oder externem Taktgenerator lösen.
OP #4514807
Lesenswert?

Also #define F_CPU-Änderung bringt nichts.
Ohne die 15pF keine Veränderung.(Ja ein Steckbrett)

@asdf: nur VCC hat die. AVCC benötige ich für den Port theoretisch 
nicht, aber ich hab den Pin vorsichtshalber mal mit an V+ angeschlossen.

@Jim: Genau! Und deshalb scheint der µC den Takt zu akzeptieren, weil 
ISP-Programmierung ja noch funktioniert.
Gast #4514893
Lesenswert?

Johannes H. schrieb:

> Bzgl. Takt: die Fuses sind ja für externen Quarz gesetzt und ich kann
> noch über das ISP Interface Fuses bearbeiten und den Flash schreiben,
> also scheint das ja zu funktionieren.

Das heißt: der Takt ist da. Es kann also nur an deinem Programm liegen, 
wenn irgendwas nicht so läuft, wie du es erwartest.

Oder an ungenügender Hardware, insbesondere bezüglich der Versorgung (zu 
wenig Spannung, zu wenig Block-Kapazität oder zu viel Block-Kapazität).

Schalte als erste Maßnahme einfach mal den Brownout-Detector ein. Fuse 
BODENABLE.
OP #4514932
Lesenswert?

5V vom USB-Port. Ich betreibe diesen Testaufbau gleich an meinem 
Programmer.

@c-hater: Spannung ist da (nachgemessen). Brown-out Detection ist 
aktiviert.
Aber was soll denn an meinem Programm da nicht korrekt sein, wenn's doch 
für internen Takt funktioniert?

Das Steckbrett samt µC lag jetzt 4 Jahre in einer Kiste. Ich weiß nicht, 
ob das noch irgendeinen Einfluss haben könnte.

Auch mit nem 16MHz-Quarz(hab leider nix Kleineres da) gibt's keinen 
Verhaltensunterschied.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren