Forum: Mikrocontroller und Digitale Elektronik ATMega1284p ext.clock


von Z.B. Max (darter)


Lesenswert?

Hi,
Ich wollte den ATMega1284p über nen 16Mhz Quarz als clock versorgen.
Ich habe die lfuse auf 0xC0 gesetzt.
Offensichtlich war das nicht richtig, denn ich kann den Chip nun nicht 
mehr programmieren.
Den Quarz habe ich schon erfolgreich bei nem ATMea328p eingesetzt.
Was habe ich falsch gemacht und was muss ich nun tun um wieder auf den 
chip zugreifen zu können?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Quarz weg, und einen Takt von extern einspeisen.
Oder eben einen ca 500kHz Quarz dran bauen.

von Z.B. Max (darter)


Lesenswert?

Arduino F. schrieb:
> Quarz weg, und einen Takt von extern einspeisen.
> Oder eben einen ca 500kHz Quarz dran bauen.

Was meinst du mit Quarz weg, und einen Takt von extern einspeisen?
Wieso 500khz Quarz?

ich dachte mit der lFuse 0xC0 hätte ich den MC so eingestellt dass er 
eine beliebige Frequenz eines Quarzes erwartet.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Z.B. Max schrieb:
> ich dachte mit der lFuse 0xC0 hätte ich den MC so eingestellt dass er
> eine beliebige Frequenz eines Quarzes erwartet.

0.4 bis 0.9 MHz ist keinesfalls beliebig.

Siehe: https://www.engbedded.com/fusecalc/
Oder eben im Datenblatt nachschauen.

Z.B. Max schrieb:
> Was meinst du mit Quarz weg, und einen Takt von extern einspeisen?
Was verstehst du an den Worten nicht?

Dein Oszillator ist kaputt(konfiguriert)
Also brachst du einen Takt von extern.

Alternativ:
Ein HVPP Programmer

: Bearbeitet durch User
von Z.B. Max (darter)


Lesenswert?

Arduino F. schrieb:
> Z.B. Max schrieb:
>> ich dachte mit der lFuse 0xC0 hätte ich den MC so eingestellt dass er
>> eine beliebige Frequenz eines Quarzes erwartet.
>
> 0.4 bis 0.9 MHz ist keinesfalls beliebig.
>
> Siehe: https://www.engbedded.com/fusecalc/
> Oder eben im Datenblatt nachschauen.

den Fuse calculator habe ich benutzt.
Wo ließt du da 0,4 - 0,9 Mhz?

ich habe im dropDown das ausgewählt
1
Ext. Clock; Start-up time: 6 CK + 0 ms; [CKSEL=0000 SUT=00]

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Z.B. Max schrieb:
> ich habe im dropDown das ausgewähltExt. Clock; Start-up time: 6 CK + 0
> ms; [CKSEL=0000 SUT=00]

Stimmt, du hast Wahr!
(wohl verklickt)

Und doch:
Arduino F. schrieb:
> Dein Oszillator ist kaputt(konfiguriert)
> Also brachst du einen Takt von extern.

Denn ein externer Oszillator, den du ja konfiguriert hast, ist kein 
Quarz.
Da kann ein Quarz drin stecken, ist aber keiner.
Ein Quarz wird in dem Menü Crystal genannt
Du möchtest vermutlich einen ext. Crystal Oszillator mit 8.0- MHz

: Bearbeitet durch User
von Z.B. Max (darter)


Lesenswert?

ok, ich habe diesen Programmierer
https://cdn-reichelt.de/documents/datenblatt/A300/DIAMEX-PROG-S2.pdf

Er scheint ein Taktsignal bereitzustellen.
Also habe ich den Quarz entfernt und das Taktsignal an XTAL1 
angeschlossen.
Leider immer noch keine Reaktion vom Chip.

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Da kann ich nix zu sagen.....

von Z.B. Max (darter)


Lesenswert?

Wie kann ich denn am einfachsten ein Taktsignal erstellen? Muss das eine 
gewisse Frequenz einhalten? Und der Atmega1284p erwartet es am Pin XTAL 
1 ?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Mit einem Arduino?

Z.B. Max schrieb:
> Muss das eine
> gewisse Frequenz einhalten?

Nicht wirklich...
Mindestens ein Xfaches des ISP Taktes.
Siehe Datenblatt.

: Bearbeitet durch User
von Sebastian W. (wangnick)


Lesenswert?

Arduino F. schrieb:
> Mit einem Arduino?

Arduino Atmega328P @16MHz, 1MHz-Rechteck an PB5 (D13, LED):
1
const uint8_t PBVAL = 1<<PORTB5;
2
3
void setup () {
4
  DDRB = PBVAL;
5
  PORTB = 0;
6
}
7
8
void loop () {
9
  noInterrupts();
10
  for (;;) {
11
    PORTB = PBVAL;  // OUT: One cycle at 16Mhz: 62.5 ns
12
    __asm__("NOP"); // NOP: One cycle, makes 125ns
13
    __asm__("NOP"); 
14
    __asm__("NOP"); // NOP: 250ns
15
    __asm__("NOP"); 
16
    __asm__("NOP"); 
17
    __asm__("NOP"); 
18
    __asm__("NOP"); // NOP: 500ns
19
    PORTB = 0;  // OUT: One cycle at 16Mhz: 62.5 ns
20
    __asm__("NOP"); // NOP: One cycle, makes 125ns
21
    __asm__("NOP"); 
22
    __asm__("NOP"); // NOP: 250ns
23
    __asm__("NOP");
24
    __asm__("NOP");
25
  } // Loop back: RJMP 2 cycles, 500ns
26
}

LG, Sebastian

von Stefan F. (Gast)


Lesenswert?

Z.B. Max schrieb:
> das Taktsignal an XTAL1 angeschlossen.
> Leider immer noch keine Reaktion vom Chip.
> Muss das eine gewisse Frequenz einhalten?

Hast du bedacht, dass die CPU Taktfrequenz mindestens 4x so schnell sein 
muss, wie die ISP Kommunikation?

> Wie kann ich denn am einfachsten ein Taktsignal erstellen?

Mit einem Astabilen Multivibrator aus Logikgattern. Oder mit einem 
Programm auf einem anderen Mikrocontroller. Oder mit einem NE555. Oder 
du kaufst einen fertigen Quarz-Oszillator.

> Und der Atmega1284p erwartet es am Pin XTAL 1 ?

Ja.

Vielleicht hilft dir mein Artikel zum Thema: 
http://stefanfrings.de/avr_verfused/

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.