Ты не понял. Под них можно писать не только на асм, но и на си. Но атмел студия 7 предлагает мне в качестве компилятора только под асм…
Гайверу гайверово!
Про студию не знаю, но есть специальный компилятор С для чипов без ОЗУ. Вот в этой теме была ссылка на среду разработки.
Сейчас там 404 Not Found.
Закрою вопросы по аппаратной части. Тинька припаяна на переходник-адаптер с 10-и пиновым разъемом для UsbAsp. 6 ног - проверять нечего. 2 ноги - питание, 3 ноги: reset, sck, miso. Оставшаяся нога (PB2) - на светодиод или пьезопищалку. Как видите - любой косяк приведет к неработоспособности. Пробовал на 3-х чипах из десяти возможных (была мысль про битое ОЗУ). Все три вели себя одинаково. В итоге один чип сейчас успешно регулирует подсветку микроскопа по AnalogRead() - AnalogWrite(), зашитый в этой же среде, второй я спалил, а с третьим мы сейчас разбираемся…
А в чем это выражается и с какими таймингами - постоянно пищит или пищит и перестает?
Для проверки перезагрузки, можно добавить в setup зажигание другого светодиода на некоторое время.
Можно использовать AtmelStudio для симуляции (загрузить туда elf). У меня AtmelStudio очень медленно отрабатывает задержки (по сравнению с Протеусом), поэтому для тестов, лучше уменьшить delay.
Мошт WDT запустить? )))
Название системы известно, можно поискать.
Кстати, сейчас поищу у себя локально, мож где чего завалялось. Есть есть, то выложу.
Тактируется на 8 мгц. Гудит постоянно с частотой 1911 и из цикла do не выходит…
Такое же поведение может быть и том случае, если МК перезапускается не дойдя до второй частоты.
Я бы добавил в setup моргание диодом на другой ноге, чтобы отслеживать перезагрузки.
И AtmelStudio был бы не лишним - загрузить в него elf из Arduino, запустить отладчик и посмотреть на расход памяти. Я у себя посмотрел - остается свободным 1 байт, но у вас могут быть другие настройки или версия.
Наверное можно уменьшить на 2 байта расход памяти если учесть, что измеряются малые задержки.
uint16_t ms ;
while ((uint16_t ms)millis() - ms < 500);
очень похоже.
но мы увы не знаем, что и как там подсоединено, и как и чем питается у этой бедной тиньки.
ТС на это уже отвечал же:
ну это в 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 байт.
осталось выкинуть миллис и можно будет попробовать собрать без гайверовских прибабахов в аддоне из сообщения №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;
}
}
@xDriver - это на гайверовском коде?
Ну почти так же, как у меня - это на аддоне 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() писать, потому что в том аддоне ее нет
Теперь у ТС есть простор для тестов - два новых кода на двух разных аддонах