Не работает код на ATTiny10

Ты не понял. Под них можно писать не только на асм, но и на си. Но атмел студия 7 предлагает мне в качестве компилятора только под асм…

Гайверу гайверово!

Про студию не знаю, но есть специальный компилятор С для чипов без ОЗУ. Вот в этой теме была ссылка на среду разработки.

Сейчас там 404 Not Found.

Закрою вопросы по аппаратной части. Тинька припаяна на переходник-адаптер с 10-и пиновым разъемом для UsbAsp. 6 ног - проверять нечего. 2 ноги - питание, 3 ноги: reset, sck, miso. Оставшаяся нога (PB2) - на светодиод или пьезопищалку. Как видите - любой косяк приведет к неработоспособности. Пробовал на 3-х чипах из десяти возможных (была мысль про битое ОЗУ). Все три вели себя одинаково. В итоге один чип сейчас успешно регулирует подсветку микроскопа по AnalogRead() - AnalogWrite(), зашитый в этой же среде, второй я спалил, а с третьим мы сейчас разбираемся…

А в чем это выражается и с какими таймингами - постоянно пищит или пищит и перестает?
Для проверки перезагрузки, можно добавить в setup зажигание другого светодиода на некоторое время.
Можно использовать AtmelStudio для симуляции (загрузить туда elf). У меня AtmelStudio очень медленно отрабатывает задержки (по сравнению с Протеусом), поэтому для тестов, лучше уменьшить delay.

1 лайк

Мошт WDT запустить? )))

Название системы известно, можно поискать.

Кстати, сейчас поищу у себя локально, мож где чего завалялось. Есть есть, то выложу.

Тактируется на 8 мгц. Гудит постоянно с частотой 1911 и из цикла do не выходит…

Такое же поведение может быть и том случае, если МК перезапускается не дойдя до второй частоты.
Я бы добавил в setup моргание диодом на другой ноге, чтобы отслеживать перезагрузки.
И AtmelStudio был бы не лишним - загрузить в него elf из Arduino, запустить отладчик и посмотреть на расход памяти. Я у себя посмотрел - остается свободным 1 байт, но у вас могут быть другие настройки или версия.
Наверное можно уменьшить на 2 байта расход памяти если учесть, что измеряются малые задержки.
uint16_t ms ;
while ((uint16_t ms)millis() - ms < 500);

1 лайк

очень похоже.
но мы увы не знаем, что и как там подсоединено, и как и чем питается у этой бедной тиньки.

ТС на это уже отвечал же:

ну это в AtmelStudio компилятор “тупой” и не может реадонли массив разместить в прогмем)) (но это не точно)

вот тут
в #31
половина рам свободна

Я советовал загрузить elf полученный от Ардуино, чтобы изучать то, что реально прошивается.

ну да, а питаю от CR2032 и данамик 5 ват 4ома прям на вывод тиньки!

uint16_t note[7] = {1911, 1432, 1517, 1432, 956, 956, 1911};
uint8_t i ;
uint32_t ms ;

void setup() {
  DDRB |= (1 << PB2);
  i = 0;
  ms = millis();
}
void loop() {
  ms = millis();
  do {
    PORTB |= (1 << PB2);
    delayMicroseconds(note[i]);
    PORTB &= ~(1 << PB2);
    delayMicroseconds(note[i]);
  } while (millis() - ms < 500);
  _delay_ms(10);
  if (++i == 7) {
    _delay_ms(500);
    i = 0;
  }
}

Скетч использует 416 байт (40%) памяти устройства. Всего доступно 1024 байт.
Глобальные переменные используют 14 байт (43%) динамической памяти, оставляя 18 байт для локальных переменных. Максимум: 32 байт.

1 лайк

осталось выкинуть миллис и можно будет попробовать собрать без гайверовских прибабахов в аддоне из сообщения №13

uint16_t note[7] = {1911, 1432, 1517, 1432, 956, 956, 1911};
uint8_t i  = 0;

void setup() {
  DDRB |= (1 << PB2);
}

void loop() {
uint16_t  ms = 0;
do {
    PORTB |= (1 << PB2);
    delayMicroseconds(note[i]);
    PORTB &= ~(1 << PB2);
    delayMicroseconds(note[i]);
    ms += (note[i]/100) * 2;
  } while (ms < 5000);
 
  if (++i == 7) {
    _delay_ms(500);
    i = 0;
  }
}

ну и как вам такой поворот :face_with_monocle::rofl:

@xDriver - это на гайверовском коде?

Ну почти так же, как у меня :slight_smile: - это на аддоне Attiny10core из сообщения 13

#define __ticks_dc  ((F_CPU) / 1e6)  // clock ticks for 1us

uint16_t note[7] = {1911, 1432, 1517, 1432, 956, 956, 1911};
uint8_t i  = 0;

void _delay_us(uint32_t __us)
{
    while (__us) {
    __builtin_avr_delay_cycles(__ticks_dc);
    __us--;
    }
}

void setup() {
  DDRB |= (1 << PB2);
}

void loop() {
uint16_t  ms = 0;
do {
    PORTB |= (1 << PB2);
    _delay_us(note[i]);
    PORTB &= ~(1 << PB2);
    _delay_us(note[i]);
    ms += (note[i]/100) * 2;
  } while (ms < 5000);
 
  if (++i == 7) {
    _delay_us(500000);
    i = 0;
  }
}

только мне пришлось свою функцию __delay_us() писать, потому что в том аддоне ее нет

Теперь у ТС есть простор для тестов - два новых кода на двух разных аддонах :slight_smile:

ВАЩЕ БЕЗ ПАМЯТИ :joy: :joy:

2 лайка