Скорость обмена данными UART + l2c

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

kotriks писал(а):не желательно повышать частоту так как у меня потребление возрастёт
Скорость а с ним и потребление девайса пропорциональны частоте. Физику обмануть пока никому не удалось.
Другое дело что возможно оптимизировать работу программы под низкое потребление. Динамически настраивать тактирование ядра через регистр CLKPR.
Те же режимы сна использовать. Вот я увидел в вашем исходнике попытку настроить мегу для сна Power Save. Только сам сон почему-то не используется...
Потом сама периферия, что там у вас, память I2C, MAX232 наверное для связи с ПК. Они тоже ток кушают. И им питание отрубать можно, ключиком или лапкой МК.
kotriks писал(а):ругается при компиле на
Значит где-то еще определены эти значения.
Причем здесь определены значения битов, а не их номера.
Если у вас прописаны классические определения битов в виде их номеров в регистрах(0...7), то нужно в коде писать:

Код: Выделить всё

if(ACK) TWCR=(1<<TWINT)|(1<<TWEA)|(1<<TWEN);

kotriks писал(а):для чего они вообще нужны?
:shock: Может вам для начала хотя бы обзорно полистать даташит на М168, особенно его главу 2-wire Serial Interface. Или книжку Евстифеева если с английским совсем плохо.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Пт сен 21, 2007 17:53:23
Откуда: Зарайск

Сообщение mrFox »

kotriks писал(а):Народ помогите увеличить скорость считки данных с eeprom, а то она очень медленная. вот код.

Код: Выделить всё

...
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) {
if (data=='1') [b]ReadMem();[/b]
}
}
...
1 нужно поднять частоту (поднимет частоту обмена) и переводить ядро в спячку
потребление зависит не от частоты а от количества переключений 0-1
и в спящем режиме ядро не потребляет
2 вынести длительную ReadMem(); из прерывания в основной цикл main()
придется сделать буферизованную отправку по USART
3 после прерывания от I2C или USART ядро выходит из спячки - проверяем что пришло
отправляем дальше и снова спать
Реклама
Ответить

Вернуться в «Периферия»