Если кто собирал подобное, могли бы мне помочь?
Собственно код (писал в WinAVR):
Спойлер
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char bin[64] = {
0b00000000,
0b00100000,
0b00010000,
0b00110000,
0b00001000,
0b00101000,
0b00011000,
0b00111000,
0b00000100,
0b00100100,
0b00010100,
0b00110100,
0b00001100,
0b00101100,
0b00011100,
0b00111100,
0b00000010,
0b00100010,
0b00010010,
0b00110010,
0b00001010,
0b00101010,
0b00011010,
0b00111010,
0b00000110,
0b00100110,
0b00010110,
0b00110110,
0b00001110,
0b00101110,
0b00011110,
0b00111110,
0b00000001,
0b00100001,
0b00010001,
0b00110001,
0b00001001,
0b00101001,
0b00011001,
0b00111001,
0b00000101,
0b00100101,
0b00010101,
0b00110101,
0b00001101,
0b00101101,
0b00011101,
0b00111101,
0b00000011,
0b00100011,
0b00010011,
0b00110011,
0b00001011,
0b00101011,
0b00011011,
0b00111011,
0b00000111,
0b00100111,
0b00010111,
0b00110111,
0b00001111,
0b00101111,
0b00011111,
0b00111111,
};
//переменные
unsigned char hour, min, sec;
ISR(TIMER2_OVF_vect){
if (sec++ > 59) { min ++; sec = 0;};
if (min > 59) { hour ++; min = 0;};
if (hour > 23) {hour = 0;};
}
void ShowTime(char h, char m, char s){
PORTB = bin[h];
PORTD |= (1 <<PD5);
_delay_ms(1);
PORTD &= ~(1 <<PD5);
PORTB = bin[m];
PORTD |= (1 <<PD6);
_delay_ms(1);
PORTD &= ~(1 <<PD6);
PORTB = bin[s];
PORTD |= (1 <<PD7);
_delay_ms(1);
PORTD &= ~(1 <<PD7);
}
int main(void) {
//SetUp
DDRB = 0b11111111;
DDRD = 0b11100000;
DDRC|= (0 << PC2)|(0<<PC3);
PORTC |= (1 << PC2)|(1<<PC3);
cli();
TIMSK &= ~((1<<OCIE2)|(1<<TOIE2));
ASSR = (1 << AS2);
TCNT2 = 0;
OCR2 = 32768;
TCCR2 |= (1<<CS22)|(1<<CS20);
while(ASSR & 0x0F);
TIMSK |= (1<<TOIE2 | 1<<OCIE2);
sei();
while(1){
if((PINC & (1<<PC2)) == 0){
_delay_ms(20);
while((PINC & (1<<PC2)) == 0){}
min++;
if (min > 59) min = 0;
}
if((PINC & (1<<PC3)) == 0){
_delay_ms(20);
while((PINC & (1<<PC3)) == 0){}
hour++;
if (hour > 23) hour = 0;
}
ShowTime(hour, min, sec);
}
return 0;
}
Lock: 3F. Hight: D9. Low:E4
Если вы мне поможете, и кого-то заинтересует, поделюсь печаткой.
Спойлер

UPD. Сама проблема заключается в том, что таймер не запускается и виснет на строчке while(ASSR & 0x0F);
Еще заметил странную особенность, если подать питание через юсб вход, часы начинают ресетиться с частотой примерно в один герц ( в случае если строчку ''while(ASSR & 0x0F);'' стереть)


