Мелкие вопросы по МК и ПЛИС.
Хвост от программатора длинный. Без кондера - нельзя! Сделайте как я сказа, должно получиться. Ну если только Тиня не "фуфло" и пустая внутри, как иногда бывает в современном мире...
- Реклама
Все, заработала! Поставил кондер 0.1 мкф по питанию и подтянул Reset через 10кОм к плюсу. Но скорее всего был плохой контакт с тинькой, потому как она просто лежала на дорожках переходника.
Начал только осваивать MK AVR, поэтому будет возможно глупый вопрос по UART.
Почему перед тем как писать данные в регистр UDR (чтобы передать) их нужно предварительно обработать функциями?
Причем для строк это одна функция а для числового типа другая. Если не обработать то даже компилировать откажется, не говоря уже о работоспособности.
Не хочется терять в быстродействии из за функций
И еще вопросик. Насколько будет быстрым этот код?
Почему перед тем как писать данные в регистр UDR (чтобы передать) их нужно предварительно обработать функциями?
Причем для строк это одна функция а для числового типа другая. Если не обработать то даже компилировать откажется, не говоря уже о работоспособности.
Не хочется терять в быстродействии из за функций
И еще вопросик. Насколько будет быстрым этот код?
Спойлер
Код: Выделить всё
void send_Uart(unsigned char c)// Отправка байта
{
while(!(UCSRA&(1< <UDRE))) // Устанавливается, когда регистр свободен
{}
UDR = c;
}
void send_Uart_str(unsigned char *s)// Отправка строки
{
while (*s != 0) send_Uart(*s++);
}
void send_int_Uart(unsigned int c)// Отправка числа от 0000 до 9999
{
unsigned char temp;
c=c%10000;
temp=c/100;
send_Uart(temp/10+'0');
send_Uart(temp%10+'0');
temp=c%100;;
send_Uart(temp/10+'0');
send_Uart(temp%10+'0');
}во-первых, USART передаст ровно те данные, что вы запишите в UDR. если вы сумеете передать нужные вам данные без "функций" - пожалуйста, передавайте.hosturik писал(а):Почему перед тем как писать данные в регистр UDR (чтобы передать) их нужно предварительно обработать функциями?
Причем для строк это одна функция а для числового типа другая. Если не обработать то даже компилировать откажется, не говоря уже о работоспособности.
во-вторых, компилировать откажется, если в программе будут ошибки, обработка функциями или отсутствие таковой на это никак не влияет.
скорость передачи байта будет определяющим фактором для работы скорости работы этого кода, т.к. всякий раз будет происходить ожидание конца передачи байта. т.е. время на передачу информации есть произведение количества байт на время передачи одного байта. скорость исполнения остальной части будет многократно выше и существенного влияния на общую скорость работы не окажет.hosturik писал(а):Насколько будет быстрым этот код?
P.S. функции используют для того, чтобы было удобнее работать с данными. поэтому без них вряд ли получится обойтись...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 129
- Зарегистрирован: Пн окт 04, 2010 17:58:31
Всем доброго времени суток! Прошу помощи котов.
Atmega328p + CVAVR 2.04.4
Стандартная оптимизация:

Контроллер просто зависает на месте цикла for, просто висит и все
с чем это может быть связано ? Китайские мозги камня или компилятор ???
Atmega328p + CVAVR 2.04.4
Стандартная оптимизация:
Контроллер просто зависает на месте цикла for, просто висит и все
Код: Выделить всё
void SendCommandPacket(char pType, char pCommand)
{
<......>
for(d=7;d>=0;d--) // Висит на этом цикле и всё тут, даже если тело цикла пусто...
}
while (1)
{
delay_ms(500);
SendCommandPacket(0x34,0x00);
PORTB ^= (1 << 5); // blink LED for test activity
delay_ms(2000);
};
- Реклама
Потому, что d, вероятнее всего, - беззнаковая переменная.
Вообще, на такие вещи, компилятор должен варнинговать.
Вообще, на такие вещи, компилятор должен варнинговать.
- Сообщения: 129
- Зарегистрирован: Пн окт 04, 2010 17:58:31
Все верно, был unsigned char, но ставил int и все тоже самое (полагаю это оптимизация), попробую тогда указать явно...Аlex писал(а):Потому, что d, вероятнее всего, - беззнаковая переменная.
Вообще, на такие вещи, компилятор должен варнинговать.
Спасибо за ответ, всё прекрасно заработало! Первый раз вижу такую премудрость, поставил signed и повисание изчезло, хотя аналогичный код в винде работает, что за убогий компилятор ??? мог бы ведь вместо char ставить signed в этом месте, или хотя бы один варнинг был бы...
Еще раз откланиваюсь, долго бы разбирал полёты )
Ммм... возможно где-то в алгоритме ошибка, и значение местами становится отрицательным?
На Вашем скриншоте :Wereww писал(а):что за убогий компилятор ??? мог бы ведь вместо char ставить signed в этом месте
- Сообщения: 129
- Зарегистрирован: Пн окт 04, 2010 17:58:31
Мда..был очень невнимателен, и еще раз благодарю
И еще один вопросик, никак не вникну в даташит (TSOP4856)
Какая должна быть длительность импульса для модуляции, длительность пачки, и задержка между пачками импульсов, чтоб приёмник адекватно реагировал ?
Или как лучше запустить таймер для генерации несущей частоты ? Хочу понять, что к чему, буду очень благодарен )
Как я понял на 10 миллисекунд должно идти 30 импульсов (60 изменений) и из этого остальные расчёты ?
И еще один вопросик, никак не вникну в даташит (TSOP4856)
Какая должна быть длительность импульса для модуляции, длительность пачки, и задержка между пачками импульсов, чтоб приёмник адекватно реагировал ?
Или как лучше запустить таймер для генерации несущей частоты ? Хочу понять, что к чему, буду очень благодарен )
Как я понял на 10 миллисекунд должно идти 30 импульсов (60 изменений) и из этого остальные расчёты ?
Последний раз редактировалось Wereww Сб авг 06, 2016 00:48:41, всего редактировалось 1 раз.
Для этого фотоприёмника импульсы -- меандр 56кГц, ибо TSOP4856. Длительность пачки/паузы от 600мкс и более, в соответствии с Fig.3. 
- Сообщения: 129
- Зарегистрирован: Пн окт 04, 2010 17:58:31
Спасибо за пояснение ) но меня больше интересует сама модуляция, если просто дёргать ногой с частотой 56 кГц и соблюдая паузы и тд - то приемник не реагирует, нужно вписываться строго в определённые диапазоны, ровное кол-во импульсов на энное время как я понял, но не до конца )просто КОТ писал(а):Для этого фотоприёмника импульсы -- меандр 56кГц, ибо TSOP4856. Длительность пачки/паузы от 600мкс и более, в соответствии с Fig.3.
Судя по фигуре 3, нужны пачки по 600мкс, это приблизительно по 33 импульса... Попробуйте что-то такое.
- Сообщения: 129
- Зарегистрирован: Пн окт 04, 2010 17:58:31
В том - то и дело, вы попали в точку, пробую по 33 импульса, но срабатывает приёмник раза с 30-50го , почему - опять же непонятно, поэтому и грешу на продолжительность и число импульсов, хотя все вымеряно...просто КОТ писал(а):Судя по фигуре 3, нужны пачки по 600мкс, это приблизительно по 33 импульса... Попробуйте что-то такое.
Ммм... делаем в цикле счётчик 0...60, и шлём соответственно пачки в 1, 2, 3 ... 30, 31, 32, 33, 34 ... 58, 59, 60 импульсов. Смотрим осциллографом что на той стороне. Думаю, всё встанет на свои места. 
- Сообщения: 129
- Зарегистрирован: Пн окт 04, 2010 17:58:31
Спасибо за наводку, завтра куплю приёмник и пощупаю выход на звуковухе ))просто КОТ писал(а):Ммм... делаем в цикле счётчик 0...60, и шлём соответственно пачки в 1, 2, 3 ... 30, 31, 32, 33, 34 ... 58, 59, 60 импульсов. Смотрим осциллографом что на той стороне. Думаю, всё встанет на свои места.
- Сообщения: 129
- Зарегистрирован: Пн окт 04, 2010 17:58:31
Спасибо еще раз, с сигналом разобрался, т.к мир не идеален, выровнял задержки nop'ами и sleep'ами, всё чётко срабатывает
Я с очередным вопросом, имеем TINY13A и схему управления питанием одной кнопкой, для тотальной экономии батареек:

Как я понимаю из схемы, во время пуска устанавливаем PD1=0 и внутренними цепями МК на базе T1 формируется (отрицательное?) открывающее напряжение, схема оживает, для отключения подаём лог 1 в PD1.
Так же можно управлять и полевиком, заряжая затвор во время включения, вобщем не суть, суть вопроса вот в чём: после включения МК выполняет функцию и идёт в глубокий POWERDOWN, как выяснилось на практике в этом режиме отключаются и все порты (все ноги с лог уровнем 1 отключаются и переходят в 0), так вот, заряжая затвор и затем уйдя в POWERDOWN режим мы автоматом выключаемся, если же брать во внимание схему выше, где управление идет лог уровнем 0 то в режиме POWERDOWN МК будет запитан или I\O переферия переходит в Z состояние и мы опять же выключаемся ?
Я с очередным вопросом, имеем TINY13A и схему управления питанием одной кнопкой, для тотальной экономии батареек:

Как я понимаю из схемы, во время пуска устанавливаем PD1=0 и внутренними цепями МК на базе T1 формируется (отрицательное?) открывающее напряжение, схема оживает, для отключения подаём лог 1 в PD1.
Так же можно управлять и полевиком, заряжая затвор во время включения, вобщем не суть, суть вопроса вот в чём: после включения МК выполняет функцию и идёт в глубокий POWERDOWN, как выяснилось на практике в этом режиме отключаются и все порты (все ноги с лог уровнем 1 отключаются и переходят в 0), так вот, заряжая затвор и затем уйдя в POWERDOWN режим мы автоматом выключаемся, если же брать во внимание схему выше, где управление идет лог уровнем 0 то в режиме POWERDOWN МК будет запитан или I\O переферия переходит в Z состояние и мы опять же выключаемся ?
кошмар какой...Wereww писал(а):с сигналом разобрался, т.к мир не идеален, выровнял задержки nop'ами и sleep'ами
зачем такие сложности?! тинька в глубоком сне потребляет 1 микроампер, не более. я, например, делал такой пульт управления:Wereww писал(а):имеем TINY13A и схему управления питанием одной кнопкой, для тотальной экономии батареек

принцип "экономии" - глубокий сон и пробуждение, описание и исходник по ссылке.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 129
- Зарегистрирован: Пн окт 04, 2010 17:58:31
Спасибо за совет! Разбирал и такой вариант с постоянным питанием, но в итоге пришел к такому варианту, отсекать источник питания полностью, CR2032 Li-Ion 320 mAh, маловато конечно, а места очень мало в корпусе.
Возможно речь не о самой тиньке, а о питании остальной части схемы...





