Прошу помощи с выводом на индикатор. Имеется индикатор с общим катодом и 16-я мега. Возникла такая проблема: Если в протеусе катоды подключать через инвертирующий элемент - все работает, а через транзисторы - нет. Уже всю голову сломал, что в программе надо подправить, но никакие действия не приводят к нужному результату. Буду премного благодарен за помощь!
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char number[] =
{
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};
//числа для вывода на индикатор
volatile int indication_number = 0;
int main( void )
{
//порт, к которому подкл. сегменты
PORTD = 0xFF;
DDRD = 0xFF;
//порт, к которому подкл. катод
PORTA = 0x00;
DDRA |= (1<<3)|(1<<2)|(1<<1)|(1<<0);
//инициализация таймера Т0
TIMSK = (1<<TOIE0);
TCCR0 = (1<<CS02)|(0<<CS01)|(1<<CS00);
TCNT0 = 0xd2;
sei();
indication_number=1834;
while(127)
{
indication_number += 20;
_delay_ms(1000);
}
return 0;
}
//прерывания таймера Т0 - вывод на индикатор
ISR(TIMER0_OVF_vect)
{
static unsigned char count = 0;
TCNT0 = 0xd2;
//гасим разряды
PORTA &= ~((1<<3)|(1<<2)|(1<<1)|(1<<0));
//зажигаем следующий разряд
if (count == 0) {
PORTD = (number[indication_number % 10000 / 1000]);
PORTA |= (1<<3);
}
if (count == 1) {
PORTD = (number[indication_number % 1000 / 100]);
PORTA |= (1<<2);
}
if (count == 2) {
PORTD = (number[indication_number % 100 / 10]);
PORTA |= (1<<1);
}
if (count == 3) {
PORTD = (number[indication_number % 10]);
PORTA |= (1<<0);
}
count++;
if (count == 4) count = 0;
}


