Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

Хвост от программатора длинный. Без кондера - нельзя! Сделайте как я сказа, должно получиться. Ну если только Тиня не "фуфло" и пустая внутри, как иногда бывает в современном мире...
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 305
Зарегистрирован: Пт сен 03, 2010 19:29:56
Откуда: Планета Земля

Сообщение svetl1928 »

Все, заработала! Поставил кондер 0.1 мкф по питанию и подтянул Reset через 10кОм к плюсу. Но скорее всего был плохой контакт с тинькой, потому как она просто лежала на дорожках переходника.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Сообщение hosturik »

Начал только осваивать MK AVR, поэтому будет возможно глупый вопрос по UART.
Почему перед тем как писать данные в регистр 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');
}
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18795
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

hosturik писал(а):Почему перед тем как писать данные в регистр UDR (чтобы передать) их нужно предварительно обработать функциями?
Причем для строк это одна функция а для числового типа другая. Если не обработать то даже компилировать откажется, не говоря уже о работоспособности.
во-первых, USART передаст ровно те данные, что вы запишите в UDR. если вы сумеете передать нужные вам данные без "функций" - пожалуйста, передавайте.
во-вторых, компилировать откажется, если в программе будут ошибки, обработка функциями или отсутствие таковой на это никак не влияет.
hosturik писал(а):Насколько будет быстрым этот код?
скорость передачи байта будет определяющим фактором для работы скорости работы этого кода, т.к. всякий раз будет происходить ожидание конца передачи байта. т.е. время на передачу информации есть произведение количества байт на время передачи одного байта. скорость исполнения остальной части будет многократно выше и существенного влияния на общую скорость работы не окажет.

P.S. функции используют для того, чтобы было удобнее работать с данными. поэтому без них вряд ли получится обойтись...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Сообщение Wereww »

Всем доброго времени суток! Прошу помощи котов.

Atmega328p + CVAVR 2.04.4

Стандартная оптимизация:
Изображение

Контроллер просто зависает на месте цикла for, просто висит и все :shock: с чем это может быть связано ? Китайские мозги камня или компилятор ??? :dont_know:

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


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);
      };
Реклама
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Потому, что d, вероятнее всего, - беззнаковая переменная.
Вообще, на такие вещи, компилятор должен варнинговать.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Сообщение Wereww »

Аlex писал(а):Потому, что d, вероятнее всего, - беззнаковая переменная.
Вообще, на такие вещи, компилятор должен варнинговать.
Все верно, был unsigned char, но ставил int и все тоже самое (полагаю это оптимизация), попробую тогда указать явно...


Спасибо за ответ, всё прекрасно заработало! Первый раз вижу такую премудрость, поставил signed и повисание изчезло, хотя аналогичный код в винде работает, что за убогий компилятор ??? мог бы ведь вместо char ставить signed в этом месте, или хотя бы один варнинг был бы...

Еще раз откланиваюсь, долго бы разбирал полёты )
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Ммм... возможно где-то в алгоритме ошибка, и значение местами становится отрицательным?
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Wereww писал(а):что за убогий компилятор ??? мог бы ведь вместо char ставить signed в этом месте
На Вашем скриншоте :
Изображение
116lnbfjki.jpg
(56.58 КБ) 739 скачиваний
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Сообщение Wereww »

Мда..был очень невнимателен, и еще раз благодарю :)

И еще один вопросик, никак не вникну в даташит (TSOP4856)
tss.jpg
(64.82 КБ) 342 скачивания
Какая должна быть длительность импульса для модуляции, длительность пачки, и задержка между пачками импульсов, чтоб приёмник адекватно реагировал ? :oops:
Или как лучше запустить таймер для генерации несущей частоты ? Хочу понять, что к чему, буду очень благодарен )

Как я понял на 10 миллисекунд должно идти 30 импульсов (60 изменений) и из этого остальные расчёты ?
Последний раз редактировалось Wereww Сб авг 06, 2016 00:48:41, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Для этого фотоприёмника импульсы -- меандр 56кГц, ибо TSOP4856. Длительность пачки/паузы от 600мкс и более, в соответствии с Fig.3. :beer:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Сообщение Wereww »

просто КОТ писал(а):Для этого фотоприёмника импульсы -- меандр 56кГц, ибо TSOP4856. Длительность пачки/паузы от 600мкс и более, в соответствии с Fig.3. :beer:
Спасибо за пояснение ) но меня больше интересует сама модуляция, если просто дёргать ногой с частотой 56 кГц и соблюдая паузы и тд - то приемник не реагирует, нужно вписываться строго в определённые диапазоны, ровное кол-во импульсов на энное время как я понял, но не до конца )
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Судя по фигуре 3, нужны пачки по 600мкс, это приблизительно по 33 импульса... Попробуйте что-то такое.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Сообщение Wereww »

просто КОТ писал(а):Судя по фигуре 3, нужны пачки по 600мкс, это приблизительно по 33 импульса... Попробуйте что-то такое.
В том - то и дело, вы попали в точку, пробую по 33 импульса, но срабатывает приёмник раза с 30-50го , почему - опять же непонятно, поэтому и грешу на продолжительность и число импульсов, хотя все вымеряно...
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Ммм... делаем в цикле счётчик 0...60, и шлём соответственно пачки в 1, 2, 3 ... 30, 31, 32, 33, 34 ... 58, 59, 60 импульсов. Смотрим осциллографом что на той стороне. Думаю, всё встанет на свои места. :beer:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Сообщение Wereww »

просто КОТ писал(а):Ммм... делаем в цикле счётчик 0...60, и шлём соответственно пачки в 1, 2, 3 ... 30, 31, 32, 33, 34 ... 58, 59, 60 импульсов. Смотрим осциллографом что на той стороне. Думаю, всё встанет на свои места. :beer:
Спасибо за наводку, завтра куплю приёмник и пощупаю выход на звуковухе ))
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Сообщение Wereww »

Спасибо еще раз, с сигналом разобрался, т.к мир не идеален, выровнял задержки nop'ами и sleep'ами, всё чётко срабатывает :)

Я с очередным вопросом, имеем TINY13A и схему управления питанием одной кнопкой, для тотальной экономии батареек:
Изображение

Как я понимаю из схемы, во время пуска устанавливаем PD1=0 и внутренними цепями МК на базе T1 формируется (отрицательное?) открывающее напряжение, схема оживает, для отключения подаём лог 1 в PD1.

Так же можно управлять и полевиком, заряжая затвор во время включения, вобщем не суть, суть вопроса вот в чём: после включения МК выполняет функцию и идёт в глубокий POWERDOWN, как выяснилось на практике в этом режиме отключаются и все порты (все ноги с лог уровнем 1 отключаются и переходят в 0), так вот, заряжая затвор и затем уйдя в POWERDOWN режим мы автоматом выключаемся, если же брать во внимание схему выше, где управление идет лог уровнем 0 то в режиме POWERDOWN МК будет запитан или I\O переферия переходит в Z состояние и мы опять же выключаемся ?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18795
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Wereww писал(а):с сигналом разобрался, т.к мир не идеален, выровнял задержки nop'ами и sleep'ами
кошмар какой...
Wereww писал(а):имеем TINY13A и схему управления питанием одной кнопкой, для тотальной экономии батареек
зачем такие сложности?! тинька в глубоком сне потребляет 1 микроампер, не более. я, например, делал такой пульт управления:
Изображение
принцип "экономии" - глубокий сон и пробуждение, описание и исходник по ссылке.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Сообщение Wereww »

Спасибо за совет! Разбирал и такой вариант с постоянным питанием, но в итоге пришел к такому варианту, отсекать источник питания полностью, CR2032 Li-Ion 320 mAh, маловато конечно, а места очень мало в корпусе.
Друг Кота
Аватара пользователя
Сообщения: 15802
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Возможно речь не о самой тиньке, а о питании остальной части схемы...
:roll:
Ответить

Вернуться в «Разные вопросы по МК»