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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

hybroid , спасибо большое, все получилось буквально за минуту, аж не верится. До этого два дня не получалось.
Что я сделал: все #define перенес в файл lcd_lib.h, а функции наоборот в файл lcd_lib.c. После этого сразу откомпилировалось и заработало.
С прошивкой имел дело первый раз, решил в готовом проекте перейти с параллельного интерфейса на аппаратный I2C с помощью переходника PCF8574 на дисплей 1602.
И хоть я в основном копипастил, для себя это считаю прогрессом :)
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

не перестаю удивляться. Почему после таког выражения v_batt = (150*280) / 128;
в переменной v_batt находится число 65353?

Удалось победить только так:
unsigned int aa;
aa = 150*280;
v_batt = aa / 128;

Это нормально, так и должно быть? Просто в других примерах видел там одновременно умножаются и делятся большие числа и все работает.
Последний раз редактировалось hosturik Чт ноя 10, 2016 21:40:17, всего редактировалось 1 раз.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

150*280 в 16 бит со знаком не влезает. Наверное, в этом проблема.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
АСУ
Друг Кота
Сообщения: 3342
Зарегистрирован: Ср янв 02, 2013 08:37:35

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

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

*Trigger* писал(а):150*280 в 16 бит со знаком не влезает.

Как число 42000 не может входить в 16 битную переменную… с каким знаком?
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

Тип unsigned так что число 42000 поместиться в два байта
Последний раз редактировалось hosturik Чт ноя 10, 2016 22:04:56, всего редактировалось 1 раз.
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

hosturik писал(а):не перестаю удивляться. Почему после таког выражения v_batt = (150*280) / 128;
в переменной v_batt находится число 65353?

У меня 65353 получается. Все правильно.
150*280=42000
так как знаковое 16-тибитное число может быть только в пределах от +32767 до -32768, то данное число должно интерпертироваться, как отрицательное 65536-42000=23536
-23536/128=-183
Теперь знаком присваивания мы -183 преобразуем в беззнаковое 16-тибитное число. 65536-183=65353

Вывод, пишите U после хотя бы одного из чисел. Например так: (150U*280) / 128
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

Спасибо. А что будет если напишу U возле числа, это означает unsigned?

И то, что у меня v_batt объявлена так: volatile unsigned int v_batt; ничего не дает?
Последний раз редактировалось hosturik Чт ноя 10, 2016 22:13:33, всего редактировалось 1 раз.
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

Да. U - unsigned. L - long. Можно их комбинировать вместе

Добавлено after 3 minutes 40 seconds:
hosturik писал(а):
И то, что у меня v_batt объявлена так: volatile unsigned int v_batt; ничего не дает?

Если бы она участвовало в правой части оператора присваивания, то давало бы, так как когда производится операция между знаковым и беззнаковым целым, до операции знаковое будет преобразовано в беззнаковое.
Но так как оно в правой части оператора присваивания не фигурирует, то и на вычисление выражения в правой части никак не влияет.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);
часто встречаю такую конструкцию. Но разве так нули записываются?

Нули же вроде так нужно - ADMUX &=~(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0);
Чего я не понимаю?
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

hosturik писал(а):ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);

Данная запись эквивалентна ADMUX = (1<<REFS0)|(1<<ADLAR);
Указание остальных нулевых битов компилятором будет игнорировано и никакого влияния на результирующий код не оказывает. Приведенная Вами запись используется исключительно для более удобного copy-paste )

Иными словами, сколько ноль не сдвигай, он все равно нулем останется.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

Всем доброго времени суток. Решил написать тут.
Задумался я над изготовлением устройства представленного здесь:
http://phreakerclub.com/forum/showthread.php?t=29
но не на пик, как там, а на авр, а именно мега8 (понимаю, что жирно, но скопилось у меня их аж 4 штуки). Занимаюсь переписыванием кода под мегу. Очередной затык возник в следующем:
Устройство просто перебирает все комбинации от двенадцати нулей до двенадцати единиц (с выплевыванием в эфир). Поскольку РОН у меги 8-ми битные, а комбинации состоят из 12 бит, то необходимо регистр (из которого методом логического сдвига данные по очереди выдаются в эфир) представить как один 12-ти битный регистр. Знаю, что в меге есть регистровые пары и можно использовать их, НО из спортивного интереса хочется понять какие есть альтернативные методы? У автора не применяются регистровые пары - он использовал пик 18f252, а там я вообще не обнаружил сдвоенные регистры, но каким-то образом данные у него поступают как из одного 16-ти битного регистра. (4 пустых сдвига + 12 бит данных). Прошу помощи опытных котов.
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

У любого процессора есть флаг переноса, в который попадает старший бит при логическом сдвиге влево или младший бит при логическом сдвиге вправо. И есть команды циклического сдвига, когда в при сдвиге влево в младший бит попадает бит переноса, а при сдвиге вправо в старший бит попадает бит переноса. Используя это можно хоть все регистры объединить в единое целое и сдвигать их совместно.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

спасибо. Полагаю так?
00000000 <----- 10000000
1. Сдвигаем сначала левое значение (где все нули) в бит переноса попадает ноль.
2. Затем этот флаг чистим (для надежности).
3. сдвигаем на один правое значение. Во флаг попала единица.
4. "копируем" эту единицу из флага в младший разряд левого числа и получаем
00000001 00000000

сдвиги при этом используем логические.
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

На примере AVR. Пусть у нас число располагается в двух регистрах. Старший байт в r20 и младший в r21

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

; 16 bit right shift 
  lsr r20
  ror r21
;
; 16 bit left shift
  lsl r21
  rol r20
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

ptr128 писал(а):На примере AVR. Пусть у нас число располагается в двух регистрах. Старший байт в r20 и младший в r21

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

; 16 bit right shift 
  lsr r20
  ror r21
;
; 16 bit left shift
  lsl r21
  rol r20

Благодарю. Думаю в моем случае можно сделать так

16 bit left shift
rol r21
rol r20

Потому что мы производим 16 сдвигов и после 16го остановим цикл. У автора применено именно 2 циклических сдвига и благодаря Вам я понял почему так, а не иначе. Сейчас проверю.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

У PIC, вроде, нет логических сдвигов, поэтому действие было вынужденное. У AVR такой сдвиг есть, поэтому
ptr128 писал(а):

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

; 16 bit left shift 
  lsl r21
  rol r20
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

Сдвиги замечательно работают. Два вечера разбирался чуть сам не получил сдвиг (по фазе) уже. Всем спасибо. :))
Jack_AubreyRUS
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пн ноя 14, 2016 22:17:33

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

Сообщение Jack_AubreyRUS »

Нашел вот это: http://radioskot.ru/publ/raznoe/chasy_radiogika/18-1-0-938. Захотелось собрать такие, но проблема в том, что с микроконтроллерами никогда не работал. В связи с этим возникают 2 вопроса:
1. Как программировать микроконтроллер?
2. Как паять SMD компоненты, если есть только паяльник?
Настоящий чайник. Без шуток. Паяльник купил в сентябре. Нихрена не знаю. Прошу не ругаться на мои тупые вопросы.
Chettuser

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

Сообщение Chettuser »

1. Начать хотя бы с программатора:
Изображение
Я с него начинал когда то лет 15 назад.
http://lancos.com/prog.html#avrisp - тут сайт по программаторам.
2. У паяльника заточить жало, использовать тонкий пинцет (типа такого - http://tixer.ru/catalog/instruments-and ... _id=314400) и спирто-канифольный флюс.
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

А можно купить готовый программатор. Например такой

https://ru.aliexpress.com/item/USBasp-U ... 8f8fd8a8f3
Ответить

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