Запаял сей микроконтроллер в плату. Прошивка заливается по SPI. Код:
Код
int main(void)
{
asm("cli");
SPCR &= ~(1<<SPE);
SFIOR &= ~(1<<PUD);
DDRB = (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
PORTB = 0x00;
while(1) {
PORTB |= (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
_delay_ms(1000);
PORTB &= ~((1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7));
_delay_ms(1000);
}
return 0;
}
1) Если включать все биты и выключать тоже все, то на всех кроме бита 4 держится напряжение 5 вольт, а на бите 4 меняется 0-5-0-5.
2) Если выключить хотя бы один любой бит (DDRn = 0 && PORTn = 0 всегда), а все остальные переключать, то на ножке бита n держится уровень напряжения 5 вольт, а все остальные биты переключатся.
На замыкание соседние пины проверял .. Смотрел какой код генерит avr-g++ -- все ок. Что это, баг или фича?
PS: до того как припаял эту микруху, на точно такойже плате стояла atmega8 и такого не наблюдалось.
Сообщение отредактировал Mar_K - May 17 2014, 06:50