Проблема с примитивной функцией

Ардино ИДЕ 2.3, Аттини13, ядро МикроКор. В протеусе не работает : пременная test_val ведет себя как булева.
Если кто знает заранее благодарю за помощь.

int test_val=0;
int test_pin=2;

void test_funct()
{
  test_val++;
  if(test_val>=16)
  {
   test_val=0;
   digitalWrite(test_pin,!digitalRead(test_pin)); 
  }
}

ISR(TIM0_COMPA_vect)
{
test_funct();
}
void setup() {
  pinMode(test_pin, OUTPUT);
  TCCR0B = 0b00000101;
  TCCR0A = 0b00000010;
  OCR0A = 127;
  TIMSK0 = 0b00001110;
    
}

void loop() {
    
}

volatile int test_val=0;

?

3 лайка

Спасибо, вечером попробую

Оффтоп в тему Attiny13.
Есть на форуме проект по ней, таймер для засветки фоторезиста. Дело было не вчера, могу путать - Автор там писал что его код занимает 990кб. Я тогда его код откомпилировал в среде ардуино (в той иде что была тогда) - получил 900кб. Дай думаю в атмел студио 7 компильну. И там сообщение - Не уложился в размер камня - 1028 КБ )))

1 лайк

А если так?
TIMSK0 = 0b00000100;

Что один - что другой! Я фигею, дорогая редакция.(

Что не так?

Не так то, что писать надо по нормальному, а не по быдлокодерскому!
TIMSK0 = 1<<TOIE1; хотя бы.
Какого х. я должен лезть в ДШ что бы понять твою и ТС писанину! Неужели сложно?

Ах вона в чём дело))) А я уж голову ломаю …
P.S. Буду стараться исправится

Спасибо всем, кто откликнулся. Ничего не помогло :frowning: Переустановил весь софт, вроде ожило :wink:

Ну, не знаю. У меня в Протеусе

TIMSK0 = 0b00001110;

Не работает. Да и не должно, т.к. это явный косяк ИМХО.
И так лучше никогда не делать
А

TIMSK0 = 0b0000100;

Работает, даже и без volatile.

1 лайк

Вероятно, я чего-то не понимаю.
Чтобы написать 0b00000100, мне нужен только дэйташит.
А вот откуда я могу узнать, что вместо 0b00000100 следует писать 1<<TOIE1?

оттуда же
TOIE1 - это из даташита

1 лайк

Тогда откуда <<?
Тоже из дэйташита?
Почему именно 1<<TOIE1, а не просто TOIE1?
Почему нельзя написать TIMSK0 = TOIE1?

А ‘=‘ по твоему откуда взялось? :smiley:

А мне непонятно, почему норм. тема в ЧЧ находится.

интересно, можно посмотреть кто перенёс?

Мы записываем в регистр константу.
Почему константа называется 1<<TOIE1, а не TOIE1?

если не изменяет память на старом форуме kisoft это озвучивал

Забавно наблюдать как ты можешь придуриваться лишь бы бревна в глазу не замечать. И не признавать что запись со сдвигами и бинарными операциями на много удобнее и читабельнее прямого присвоения.

Ты бы еще с регистрами ввода/вывода так же оперировал. Бред какой-то :smiley: