Страница 1 из 1

Tiny2313 проблемы с динамической индикацией.

Добавлено: Сб мар 30, 2013 01:39:15
BARS_
В общем написал вот такой код:

Код: Выделить всё

char symbol[10] = {
		0b11111100,      // 0
		0b01100000,      // 1
		0b11011010,      // 2
		0b11110010,      // 3
		0b01100110       // 4
		0b10110110,      // 5
		0b10111110,      // 6
		0b11100000,      // 7
		0b11111110,      // 8
		0b11110110       // 9
};

int d[2];

void hc164_wr(int d){

 char a;

 for(a = 0; a < 8; a++){

	 if (symbol[d] & 1<<a){ PORTD |= _BV(PD2);
		 }else{ PORTD &= ~_BV(PD2); }

	 PORTD &= ~_BV(PD3);
	 PORTD |= _BV(PD3);
 }
}

ISR (TIMER0_COMPA_vect){

	dig++;

	D_OFF;

switch (dig){
	case 1: hc164_wr(d[0]); D1; break;
	case 2: hc164_wr(d[1]); D2; dig=0; break;
}

}
Вроде работает нормально, НО выводятся только цифры с 1 по 4. Путем опытов было установлено, что из массива читаются только первые 5 элементов. Хотя на Mega8 этот код работает идеально. Вывод идет через 74HC164. В чем может быть проблема?

Re: Tiny2313 проблемы с динамической индикацией.

Добавлено: Сб мар 30, 2013 07:36:50
korsaj
Запятые забыл поставить ))
А вот этого я совсем не пойму if (symbol[d] & 1<<a), когда условие выполнится?

Re: Tiny2313 проблемы с динамической индикацией.

Добавлено: Сб мар 30, 2013 11:30:46
BARS_
Он выполняется тогда, когда бит под номером "a" равен 1. С запятыми в коде все нормально, это здесь накосячил :) В общем проблема была в том, что Eclipse упорно подключал библиотеку для tiny2113A. Прописал вручную для tiny2313 и все заработало :))