Не прошивается скетч в ATtiny13 на частоте 1,2МГц

Доброго времени суток. Прошу помощи по attiny13a. Поставил MicroCore, попробовал Blink_using_Timer0 на частоте 9,6МГц.

(внутренний генератор работает на частоте 9,6 МГц)
#include <avr/io.h>
//---------------------------------------------------
// Переменная для хранения счетчика времени(uint8_t = byte)
uint8_t timeCount = 0;
//---------------------------------------------------
int main(void){
  DDRB |= _BV(PB2); // Устанавливаем PB2 в качестве выхода, игнорируем остальные
  TCCR0B = _BV(CS02) | _BV(CS00); // Тактовая частота / 1024 
  OCR0B = 0x00;                   // Output compare
  TCNT0 = 0;                      // Устанавливаем счетчик 0 на ноль
  TIMSK0 = _BV(TOIE0);            // Включить прерывание переполнения
  sei();                          // Включить глобальные прерывания
  while(1);                       // Бесконечная петля    
}
//---------------------------------------------------
ISR(TIM0_OVF_vect){      // Вектор переполнения таймера 0 — запускается каждый раз, когда переполняется таймер 0.
  timeCount++;  
  if(timeCount == 37){  // Таймер переполнен в 37-й раз
    PORTB ^= _BV(PB2);  // Переключить PB2
    timeCount = 0;
    }
}

Всё прекрасно шьется и работает. Нашел на гитхабе Блог Лукаша Подкалицкого
У него много простых проектов, решил их попробовать. Например:blinky_with_timer_compa

/**
 * Copyright (c) 2016, Łukasz Marcin Podkalicki <lpodkalicki@gmail.com>
 * ATtiny13/004
 * Simple blinky with Timer COMPA.
 */

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

#define	LED_PIN	PB0

ISR(TIM0_COMPA_vect)
{

	PORTB ^= _BV(LED_PIN); // toggle LED pin
}

int
main(void)
{

	/* setup */
	DDRB = 0b00000001; // set LED pin as OUTPUT
	PORTB = 0b00000000; // set all pins to LOW
        TCCR0A |= _BV(WGM01); // set timer counter mode to CTC
        TCCR0B |= _BV(CS02)|_BV(CS00); // set prescaler to 1024 (CLK=1200000Hz/1024/256=4.57Hz, 0.22s)
        OCR0A = 255; // set Timer's counter max value
        TIMSK0 |= _BV(OCIE0A); // enable Timer CTC interrupt
	sei(); // enable global interrupts

	/* loop */
	while (1);
}

У него блинк на частоте 1,2МГц. Загрузчик прошиваю на 1,2МГц, а скетч не шьется.
Дает ошибку :
avrdude: auto set sck period (because given equals null)
avrdude usbasp_spi_program_enable() error: program enable: target does not answer (0x01)
avrdude main() error: initialization failed, rc=-1
avrdude main() error: initialization failed, rc=-1
Что я делаю не так?

tiny13, загрузчик… оригинально-с.

Чем прошиваете ?

Arduino Ide

Чёт не дошло. Ну, допустим, там

а зачем загрузчик и скетч прошивать на этой частоте? Они-то чем провинились? Я тут явно что-то упускаю.

Что в качестве программатора ?

1 лайк

Загрузчик прошивает фьюзы для нужной частоты. Программатор USBasp.

Перемычку JP3 закоротите !

1 лайк

зачем загрузчик и скетч прошивать на этой частоте?

А как по другому? В скетче частота 1.2МГц . Выбираю в настройках эту частоту, прошиваю загрузчик. А затем прошиваю скетч. Что не так?

Перемычку пишут коротить при низких частотах 600 и 128. Но 1.2МГц это нормальная частота.

Не надо умничать !!!
CLKDIV8 в каком состоянии у вас ?

Никакого загрузчика для этого чипа нет ! Он не умеет стартовать с загрузчика !
Прошить фьюзы можно из командной строки или утилитами для управления avrdude !

Я делаю всё так как указано в документации MicroCore.

… пилите Шура пилите - они золотые …

У вас до этого был рабочий загрузчик для другой частоты, или вы первый раз прошиваете загрузчик?

1 лайк

Сделайте скрин из настроек чипа в IDE …

Я же написал, что сначала прошил 9,6МГц, а потом решил прошить 1,2МГц.

Если у вас работал загрузчик на 9,6 то можно было бы не менять загрузчик, а добавлять в начало скетчей установку Clock Prescaller = 8 Может быть проще вернуть в рабочее состояние?

Если хочется разобраться с 1,2 то включите в настройках подробный вывод загрузки и попробуйте менять скорость загрузки ± 1,25 % И смотрите, меняется ли ответ на запрос синхронизации
Кстати, вы на какую скорость прошивали?

1 лайк

Не понял вопроса. Что за скорость?

На какой скорости работает COM порт при загрузке.