Микроконтроллер(mega8) ТУПИТ

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Чт сен 04, 2014 18:21:01

Сообщение KaiTheKat »

Устройство в котором задействованы (UART, SPI и таймер (Mode: CTC, OC1A output: Toggle, 38Кгц). USART и SPI работают сами по себе, никому не мешают, но если перед включением МК на ножку OC1A (PB1) подать резистор (см. изображение) МК тупо перестает работать. Если сначала включить МК, потом подключить резистор, то он несколько сек работает и все. Не важно плюс транзистора подключен к питании или нет, также тупит. Так происходит, только если резистор подключить к OC1A (PB1) или OC1B (PB2). При подачи резистора к остальным ножкам все работает нормально. Кто нибудь сталкивался с похожей проблемой?

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Toggle
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(1<<COM1A0);
TCCR1B=(1<<WGM12)|(1<<CS10);
ICR1H=0x00;
ICR1L=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1A=12;
OCR1B=0x00;

//SPE: SPI Enable
//MSTR: Master
//SPR1, SPR0: fclk/128
SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 2400
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=25;

DDRD=255;
PORTD=0;

DDRB=0b11111111;
PORTB=0b00000000;

Изображение
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

Непропай положительной шины питания, высокий уровень нагрузки на порт. У меня было подобное: контроллер шился, получая через диоды на входах паразитное питание, но не работал. До тех пор, пока не пропаял земляной вывод. У Вас, похоже, нет +5 вольт.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Чт сен 04, 2014 18:21:01

Сообщение KaiTheKat »

Не совсем понял. Что значит "пропаял земляной вывод"?
У меня МК работает, если не подключать резистор к OC1A (OC1B). UART, SPI - все передает, принимает. Вот только, когда подключаешь резистор к OC1A (OC1B) МК перестает работать (UART, SPI перестает передавать-принимать).
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

МК может работать с неподключенным к ноге питания собственно питанием, но при этом имеются глюки типа как у вас.
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Чт сен 04, 2014 18:21:01

Сообщение KaiTheKat »

У меня ноги питания МК подключены всегда, и при прошивки подключал.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Чт сен 04, 2014 18:21:01

Сообщение KaiTheKat »

Попробовал убрать из кода (инициализацию и работу SPI). При выключенном SPI все прекрасно работает. Подключение резистора к OC1A, не приводит к остановке МК, UART данные передает. Кто-нибудь знает, может одновременная работа SPI и таймера (Mode: CTC, OC1A output: Toggle) запрещена?
Реклама
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

KaiTheKat писал(а):Кто-нибудь знает, может одновременная работа SPI и таймера (Mode: CTC, OC1A output: Toggle) запрещена?
Такого точно нет. Они работают независимо друг от друга. По-крайней мере, с точки зрения программы это именно так.
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Чт сен 04, 2014 18:21:01

Сообщение KaiTheKat »

В общем по экспериментировал я, и вот, что выяснил:
Если просто инициализировать SPI, все работает SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);
МК у меня оказывается всегда работает, только если на OC1A подать резистор он зацикливается тут:
SPDR=120;
while(!(SPSR&(1<<SPIF)));

При подключенном резисторе дальше цикла не идет, при отключенном идет дальше цикла.

Вот полный код:

unsigned char data=0;
while(1) {
_delay_ms(10); //пауза 10 мс
SPDR=120; // передаем 120 по SPI
while(!(SPSR&(1<<SPIF))); // Ожидание окончания передачи SPI
data=SPDR; // в data записываем из SPI
while(!(UCSRA&(1<<UDRE))); // готовность uart
UDR=data; ..передача по uart
}
Ответить

Вернуться в «AVR»