реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ATMega8a AU глюк порта В?, epic fail
Mar_K
сообщение May 17 2014, 06:48
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727



Запаял сей микроконтроллер в плату. Прошивка заливается по 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
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение May 17 2014, 07:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Может, убрать
SPCR &= ~(1<<SPE);
SFIOR &= ~(1<<PUD);
???
И без затей
DDRB = 0xFF
PORTB = 0xFF
PORTB = 0;
Go to the top of the page
 
+Quote Post
Mar_K
сообщение May 17 2014, 07:28
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727



Цитата(RabidRabbit @ May 17 2014, 11:09) *
Может, убрать
SPCR &= ~(1<<SPE);
SFIOR &= ~(1<<PUD);
???
И без затей
DDRB = 0xFF
PORTB = 0xFF
PORTB = 0;


Делал уже так. Все равно не работает. Такой код написал, чтобы легче было проверять какой бит глючит. А первые две строки для перестраховки. Кстати, проверил на порту D -- таже фигня.

Сообщение отредактировал Mar_K - May 17 2014, 07:29
Go to the top of the page
 
+Quote Post
zombi
сообщение May 17 2014, 08:47
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Питание и клок согласно DS?!
Go to the top of the page
 
+Quote Post
Mar_K
сообщение May 18 2014, 02:30
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 7-12-11
Пользователь №: 68 727



Цитата(zombi @ May 17 2014, 12:47) *
Питание и клок согласно DS?!

Да. Клок от внутреннего генератора. Пробовал на разных клоках 1-8МГц -- один фиг.

Все, разобрался. Дело было не в машине. Забыл волшебный флаг линкеру указать -mmcu=atmega8. В результате прога начиналась не с main sm.gif

Всем спасибо.

Сообщение отредактировал Mar_K - May 18 2014, 02:30
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016