[uquote="Jack_A",url="/forum/viewtopic.php?p=3166476#p3166476"]Мы, эмбеддерщики, начинаем со схемы

Куда подевались тысячи и сотни разложенного аргумента? Чем коммутируются аноды сотен и тысяч ? Рассекреть наконец - что за индикатор, желательно с распиновками, чтоб не елозить по поискам.
И
на конец 
- приведи твой м
удифицированный код для 4 цифр , а то что за муйня у тебя на индикаторе - одному моему Мурзику известно.
А что, не удовлетворившись ответом в теме
Помогите с семисегментиком нужно новую тему замутить ?
2- сегментник-то работает ? Нет, конечно, чтобы хотя бы видимость работы была, надо
Код: Выделить всё
if (n_count==0)
{
PORTB &=~(1<<PB0);// отключаем пб0,
PORTB |= (1<<PB1);// включаем пб1
segchar(R1); n_count++ ;
}
//---
if (n_count==1) // когда идёт переполнения
{
PORTB &=~(1<<PB1);
PORTB |= (1<<PB0) ; n_count =0;
segchar(R2);
}
[/uquote]
смотри, вот я переписал, но какая-та фигня получается при симулчяции.
#define F_CPU 4000000l
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned int i;
unsigned char direction;
unsigned char R1=0, R2=0, R3=0, R4=0;
void ledprint(unsigned int number)
{
R1 = number%1000; // младший разряд
R2 = number/100; // старший разпряд
R3 = number%10; // младший разряд
R4 = number/10; // старший разпряд
}
void segchar (unsigned char seg)
{
switch (seg)
{
case 1: PORTD = 0b11111001; break;
case 2: PORTD = 0b10100100; break;
case 3: PORTD = 0b10110000; break;
case 4: PORTD = 0b10011001; break;
case 5: PORTD = 0b10010010; break;
case 6: PORTD = 0b10000010; break;
case 7: PORTD = 0b11111000; break;
case 8: PORTD = 0b10000000; break;
case 9: PORTD = 0b10010000; break;
case 0: PORTD = 0b11000000; break;
}
}
unsigned char n_count=0;
ISR (TIMER1_COMPA_vect)
{
if (n_count==0)
{
PORTB &=~(1<<PB0);// ВКЛЮЧАЕМ пб0,
PORTB |= (1<<PB1);// откл пб1
PORTB |= (1<<PB2);// откл пб2
PORTB |= (1<<PB3);// откл пб3
segchar(R1);
}
//---
if (n_count==1) // когда идёт переполнения
{
PORTB &=~(1<<PB1);
PORTB |= (1<<PB0);
PORTB |= (1<<PB2);// откл пб2
PORTB |= (1<<PB3);// откл пб3
segchar(R2);
}
if (n_count==1) // когда идёт переполнения
{
PORTB |=(1<<PB1);
PORTB |= (1<<PB0);
PORTB &= ~ (1<<PB2);// откл пб2
PORTB |= (1<<PB3);// откл пб3
segchar(R3);
}
if (n_count==1) // когда идёт переполнения
{
PORTB |=(1<<PB1);
PORTB |= (1<<PB0);
PORTB |= (1<<PB2);// откл пб2
PORTB &= ~(1<<PB3);// откл пб3
segchar(R4);
}
n_count++;
if(n_count>1) n_count =0;
}
int main(void)
{
DDRC = 0x00;
PORTC |= (1 << PC0); // Подключаем внутренний подтягивающий резистор
DDRD = 0xFF;
PORTD = 0x00;
DDRB = 0xFF;
PORTB = 0b011000000;
TCCR1B = (1 << CS12)|(1 << WGM12); //предделитель clk/256, режим таймера СТС
OCR1A = 100; // Выбор коэффициента деления
TIMSK |= (1 << OCIE1A); // Разрешение прерывания по совпадению
sei(); // Разрешение прерываний
while(1)
{
for (i=0;i<10000; i++)
{
ledprint(i);
_delay_ms(500);
}
}
}