Цитата(SasaVitebsk @ May 4 2008, 14:50)

Только что писал прогу. Микруха м48. В прошивке вывел частоту 10кГц на OC2 (совмещён с MOSI). После этого AVREAL и JTAG ICE MK2 в режиме ISP микруху не берут. AVREALом проблему победить не смог
Мега48, внутренний RC 8MHz
Код
#include <avr/io.h>
#include "pin_macros.h"
#define SCK B,5,H
#define MISO B,4,H
#define MOSI B,3,H
void main(void)
{
PORTC = 0xFF;
PORTB = 0xFF;
DDRB = MASK(SCK) | MASK(MISO) | MASK(MOSI);
PORTD = 0xFF;
TCCR2A = (1 << COM2A1) | (1 << WGM20);
TCCR2B = (1 << CS20);
OCR2A = 0x7F;
for(;;) {
TOGGLE(SCK);
TOGGLE(MISO);
}
}
ШИМ, правда, 16кГц получается. Но и так, и без ШИМ - с внесением TOGGLE(MOSI) в цикл, и все ножки по одной, и в разных комбинациях - всё нормально перешивается на нормальной тактовой SPIЮ без занижения.
"Ну не знаю я".
Цитата(zhevak @ May 4 2008, 22:03)

Первый раз, когда прошивал из CodeVision. Поднял фьюзы на внутренний RC-генератор на 128 кГц и сразу "потерял" кристал.
А там разве нет возможности изменить частоту SPI при программировании?
Цитата(zhevak @ May 4 2008, 22:03)

Второй раз на грабли встал, когда установил предделитель частоты ядра на максимум (на 256) при частоте внутреннего RC-гернератора 4.8 МГц. При тактовой 4.8 МГц и предделителе на 8 все работало нормально. Стоило только увеличить коэфиициент предделителя, программатор потерял чип. Вылечил кристалл аналогично.
Аналогично - достаточно изменить частоту SPI.
4.8MHz / 256 ~ 19kHz
avreal32 с ключиком -o15khz и всё перешивается.
Надо снизить нижнюю границу допустимого значения ниже 1кГц, а то 32768/256 = 128Гц :-)
Гораздо интереснее - "а какого".
Даже из-за "безударного" переключения частот (в документации задержка переключения T1 + (1..2)*T2, где T1 - период до переключения) должно было бы успеть, период при 19кГц немогим больше 50мкс, по документации выдержка от сброса до подачи команды входа в программирование 20мс, в avreal все 100мс.
Значит сброс CLKPR производится после снятия сброса в те 14 тактов дополнительной задержки, которые есть даже при 0-вом SUT.
Вероятно, так же и у всех регистров, кроме связанных с IO-портами - не зря там постоянно повторяется, что у портов асинхронный сброс непосредственно по поступлению какого-либо сигнала reset.
Т.е. при подаче сброса только переводятся в hi-z все выводы, но CLKPR не сбрасывается, по снятию сброса отрабатывает SUT, потом в 14 тактов происходит сброс всех регистров, включая CLKPR.
Поэтому при программировании действует оставшееся от программы состояние предделителя.
Цитата(galjoen @ May 5 2008, 00:13)

Из PowerDown АВР выходит больно долго и энергию при этом потребляет. Не считая режима IDLE конечно.
Если работа от кварца - то кто угодно будет выходить долго и печально, так как надо раскачаться кварцу в генераторе и дождаться стабилизации его амплитуды. А от внутреннего RC - по документации старт за 6 тактов и я не замечал отклонений. Мерять время старта я не мерял, но у меня в одном месте контроллер просыпается из POWER DOWN по WDT interrupt с интервалом 250мс приблизительно на сотню тактов - ток укладывается в оценку по скважности исходя из потребления в непрерывном режиме и в POWER DOWN.