Ich verwende einen Atmega32. Ich möchte einen externen 16-MHz-Quarz verwenden und verwende einen universellen Programmierer (wie http://www.kanda.com/products/wellon/VP-290.html ). Meine Frage ist: Wenn ich den Chip programmiert und seine Sicherungsbits so eingestellt habe, dass er einen externen Oszillator verwendet, brauche ich dann einen externen Oszillator, wenn ich seinen Blitz neu programmieren möchte?
Ja! Wenn Sie die Sicherungen so konfigurieren, dass der Controller von einer externen Uhr läuft, benötigen Sie diese externe Uhr auch für die Neuprogrammierung.
Es ist wichtig zu beachten, dass ich dies mit einem als ISP (In circuit Serial Programmer) konfigurierten Arduino getestet habe , der nicht versucht, dem zu programmierenden Gerät einen externen Takt bereitzustellen. Andere Programmierer können dies tun, aber das hängt vom Programmierer ab. ISP ist die häufigste Art, diese Geräte zu programmieren, aber es gibt auch andere Programmierer. Tatsache ist, dass das Gerät an sich eine externe Uhr benötigt. Unsicher für einen parallelen Programmierer. Ein High Voltage Programmer kommt ohne externen Takt aus.
Getestet habe ich das nicht mit einem ATmega, sondern eher mit einem ATtiny45 , aber beide AVR's sind sich in diesen Aspekten sehr ähnlich.
Das habe ich getan:
.low = 0x61
Beachten Sie, dass die Sicherungseinstellungen Controller-spezifisch sein können, also ist dies die Einstellung für ATtiny45;.low = 0xe0
;avrdude: Gerätesignatur = 0xffffff
Avrdude: Huch! Ungültige Gerätesignatur.
Überprüfen Sie die Verbindungen und versuchen Sie es erneut, oder verwenden Sie -F, um diese Prüfung zu überschreiben.
fertig. Danke schön.
Also abschließend:
Wenn Sie die Sicherungen für die Verwendung einer externen Uhr programmieren, benötigen Sie auch eine externe Uhr, um das Gerät zu programmieren.
/*
(c) copyright 2013 by J.P. Hendrix
*/
#include <avr/io.h>
#include <util/delay.h>
#define _BS(bit) ( 1 << ( bit ) )
#define _BC(bit) ( 0 << ( bit ) )
/*
ATtiny45
pin function name ISP SPI XO I2C/TWI comparator ADC pin chg
1 !RESET PB5 ADC0 PCINT5 dW
2 extOscPin PB3 XTAL1 CLKI !OC1B ADC3 PCINT3
3 PB4 XTAL2 CLKO OC1B ADC2 PCINT4
4 GND GND
5 PB0 MOSI DI SDA AIN0 OC0A !OC1A AREF PCINT0
6 outputPin PB1 MISO DO AIN1 OC0B OC1A PCINT1
7 PB2 SCK USCK SCL T0 ADC1 PCINT2 INT0
8 VCC VCC
*/
const uint8_t outputPin = _BS( PB1 );
const uint8_t extOscPin = _BS( PB3 );
#ifdef F_CPU
#if ( F_CPU == 1000000 )
// 1MHz
FUSES = { .low = LFUSE_DEFAULT , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
#elif ( F_CPU == 1600000 )
// 1.6MHz => ATtiny15 Compatibilty Mode
#warn "ATtiny15 Compatibility Mode changes Timer1 behaviour!"
FUSES = { .low = 0x63 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
#elif ( F_CPU == 2000000 )
// 2MHz
FUSES = { .low = 0x61 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
#elif ( F_CPU == 6400000 )
// 6.4MHz => ATtiny15 Compatibility Mode
#warn "ATtiny15 Compatibility Mode changes Timer1 behaviour!"
FUSES = { .low = 0xe3 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
#elif ( F_CPU == 8000000 )
// 8MHz
FUSES = { .low = 0xe2 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
#elif ( F_CPU == 16000000 )
// 16MHz
FUSES = { .low = 0xe1 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
#else
// #error "F_CPU setting not recognized."
// External oscillator selected
FUSES = { .low = 0xe0 , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
#endif
#else
#error "F_CPU not defined."
#endif
void setup( void ) { // Initialize all hardware
DDRB = outputPin; // Data Direction Register Port B
}
int main( void ) {
setup(); // Initialize the hardware
while ( 1 ) {
_delay_us( 500 );
PORTB ^= outputPin;
}
}
Es hängt von dem Programmierer ab, den Sie beim zweiten Programmieren des Chips verwenden.
Um einen ISP-Programmierer ( wie USBTinyIPS ) zu verwenden , muss der Chip laufen und funktionsfähig sein, um programmiert zu werden. Wenn Sie die Sicherungen so einstellen, dass sie den externen Quarz/Resonator ( CKSEL1
, CKSEL2
, CKSEL3
und CKOPT
Bits) verwenden, benötigt der Chip den externen Quarz/Resonator, um überhaupt zu laufen, es gibt keine Fallback-Option wie "Oh, kein externer Quarz? Ich werde verwenden Sie einfach den internen Resonator"). Sie müssen also den Quarz/Resonator für die Flash-Programmierung über ISP anschließen. Aus diesem Grund wird empfohlen, dass Sie die Sicherungswerte überprüfen, bevor Sie sie programmieren: Es ist eine einfache Möglichkeit, den Chip zu mauern (nicht nur, indem Sie ihn so einstellen, dass er einen externen Quarz/Resonator verwendet, wenn Sie keinen haben Hand,SPIEN
Sicherungswert)
Sie können ATmega32 auch über Hochspannungsprogrammierung (seriell oder parallel) und JTAG programmieren. Für Hochspannungsprogrammierung braucht man den externen Quarz nicht, da bin ich mir ziemlich sicher: HVSP und HVPP können verwendet werden, um die Fuses ohne externe Taktung zurückzusetzen. Ich bin mir nicht sicher, welche Methode Ihr Programmierer verwendet. Wenn Sie ISP sind, müssen Sie den externen Taktmechanismus neu programmieren, sobald Sie die Sicherungen für den externen Quarz / Resonator eingestellt haben.
Nein, Sie brauchen den externen Oszillator nicht, um den Blitz neu zu programmieren.
Mikrotherion
Kellogs
CKOPT
Bit - ich konnte es nicht im Datenblatt finden?