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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Есть примеры. Курю . Но встал вопрос о тестировании. Хотя бы примерчик запустить и посмареть что да как.
Я наугад выбрал (мне еще изернет и CAN понять надо). Думал юсб самое простое из всего.
Я то ни с чем не работал из перечисленного ((
Может вы посоветуете с чего начать?
Счас склоняюсь в изернету. А как тестировать? Через командную строку пингом? нужно же что бы мое устройство приняло пакет и ответила компу, на что он выдаст что нуль пакетов испорченно. Или есть еще какой софт для теста устройств по изернету ? :( не хочется распыляться. надо уже сосредоточиться на одной задаче. А на какой - выбрать не могу :( Хочется для начала что по легче :(
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула

Сообщение IfoR »

Bigcrash, ну а так вы сами посмотрите, что у вас в программе происходит:
1) Управление передаётся на 0-й адрес. Там rjmp перекидывает на start
2) на start-е происходит разрешение глобальных прерываний, настройка всяких регистров, инициализация стека (это, кстати, лучше делать с самого начала), ещё настройка портов.
3) Потом идёт выполнение func: здесь находится бесконечный цикл, в котором постоянной происходит установка вывода 0 и сброс вывода 1 порта C.
На этом основная программа заканчивается. Единственное внешнее проявление - это включение вывода 0. Всё.
Теперь, допустим, вы нажали кнопку и сработало внешнее прерывание. Что происходит:
1) Передаётся управление на адрес 0x001 ( 0x002): ext_int0. В стек кладётся адрес возврата на прерванную команду. Глобальные прерывания отключаются.
2) Производится попытка записи в регистр PIND - эта операция ничего не даст, т.к. PIND не может устанавливать своё состояние со стороны процессора. Он только показывает состояние выводов (есть или нет напряжения лог. единицы) порта D.
3) Происходит переход на main
4) В main начинает исполняться бесконечный цикл: постоянная установка вывода 1 и сброс вывода 0 порта C.
Всё. Внешнее проявление: Переключение установленного вывода с 0-го на 1-й.
На этом месте процессор впадает в тупик: он зациклен на выполнении бессмысленного бесконечного цикла. Прервать его ничто не может: прерывания глобально отключены. Ни на какие действия он больше реагировать не будет, кроме как аппаратного сброса или сторожевого таймера.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

IfoR писал(а):Bigcrash, ну а так вы сами посмотрите, что у вас в программе происходит:
Еще раз напомню для Bigcrash, все это можно наглядно увидеть, благо есть симулятор в студии и у вас есть протеус. Запускайте симуляцию и щелкайте кнопкой пошагового выполнения. Вы сами увидите где затык и какие значения у регистров и портов.
IfoR писал(а): 2) Производится попытка записи в регистр PIND - эта операция ничего не даст, т.к. PIND не может устанавливать своё состояние со стороны процессора. Он только показывает состояние выводов (есть или нет напряжения лог. единицы) порта D.
Не забываем модели контроллеров, которые при записи "1" в PINx переключают состояние PORTx...
Держит паяльник хвостом
Аватара пользователя
Сообщения: 975
Зарегистрирован: Ср дек 17, 2008 21:54:26
Откуда: Днепропетровск

Сообщение sputnic1436 »

А обязательно писать программы для микроконтроллеров на Си либо асемблере?
Или можно писать на других языках программирования например visual basic.net или C#...
Изготовление печатных плат + материалы для изготовления плат
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

Лучше на ассемблере, для 8-разрядных МК. А вообще, на любом языке, для которого есть компилятор в ассемблер для данного МК. Вроде даже на Бейсике можно. Только будет проигрыш в быстродействии и размере кода.
Реклама
Грызет канифоль
Сообщения: 294
Зарегистрирован: Пт мар 11, 2011 08:51:55

Сообщение 3DRaven »

В Atmega8 есть две GND и одна VCC. Соответственно обе земли подрубил на общую землю, а питание на +5В.
Напряжение между между каждой из земель (7-8 и 7-22 ноги) должно быть одинаковым? Думаю дело в макетке...
напряжения гуляют на земле и питании...то 1.3В разность на 7-8, а на 7-22 3.8, то еще как...коротит где то кажется.
Может быть такое, что между общей землей и одной из ног-земель контроллера (при том, что она с общей землей соединена напрямую, напряжение 3.3В?
Если кому не сложно померьте на живом контроллере.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1954
Зарегистрирован: Чт янв 20, 2011 16:47:18
Откуда: Старый Оскол

Сообщение Av4arik »

3DRaven,
AVCC - Напряжение питания аналого-цифрового преобразователя. Вывод подсоединяется к внешнему VCC через низкочастотный фильтр.
AREF - Вход аналогового напряжения сравнения для аналого-цифрового преобразователя. На этот вывод, для обеспечения работы аналого-цифрового преобразователя, подается напряжение в диапазоне между AGND и AVCC.
AGND - Этот вывод должен быть подсоединен к отдельной аналоговой земле, если плата оснащена ею. В ином случае вывод подсоединяется к общей земле.
3DRaven писал(а):обе земли подрубил на общую землю, а питание на +5В.
керамику, прямо на ноги МК попробуйте припаять, на те ноги, по которым питание.
Быстро, Качественно, Недорого.
Выбрать можно только 2 варианта.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Сообщение Bigcrash »

Такой мелкий вопрос. Есть у меня источник питания на 24В, а нужно обычную mega8 питать. Есть стабилизатор на 5В. Так вот вопрос, как лучше сделать, через резистивный делитель или поставить промежуточный стабилизатор. Вроде как на делителе как бы лучше (сделать 16В на верхнем плече падает и оставшиеся 8В на нижнем как раз получается 2 к 1 по номиналам), но тут встал такой вопрос, какой ток должен обеспечиваться на входе питания МК и следовательно какие номиналы брать. Где-то писали что до 200ма, но документации я не нашел, также не нашел и каково сопротивление на входе VCC, AVCC. В ДШ есть такая интересная штука
Power Consumption at 4MHz, 3V, 25C
- Active: 3.6mA
Но я так понял это потребление самого МК без учета периферии.
Вообщем сколько ему на ногу надо, как это все рассчитать/где поглядеть/как лучше сделать?
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

Bigcrash писал(а):сделать 16В на верхнем плече падает и оставшиеся 8В на нижнем
и этими 8 вольтами вы собрались питать микроконтроллер?

ставьте 7805 на небольшом радиаторе, и не ломайте голову.
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

Bigcrash
Современные МК довольно экономичные. Собственное потребление зависит, в основном, от тактовой частоты и напряжения питания. Есть эти графики в даташите. Но в любом случае лучше запитать через стабилизатор, 7805 или 78L05.

Конечно, если на выходы подключены какие-то низкоомные нагрузки, то ток потребления возрастет, и может превысить сотню мА. Тогда запитать через 7805 на радиаторе будет в самый раз.

Через резистивный делитель, в принципе можно, но не нужно. Напряжение не должно превысить максимально допустимое (5,5 В), и ток делителя должен быть на порядок больше, чем ток потребления МК (тут полезно понизить тактовую частоту для снижения потребляемого тока). Но и тогда уж лучше не делитель, а стабилизатор на стабилитроне КС147+резистор.
Chettuser

Сообщение Chettuser »

Видимо человек опасается что 24-мя Вольтами он спалит стабилизатор на 5В.
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

Ну может я не понял. У 7805 входное напряжение (зависит от производителя) может быть и 35 В, так что нет проблем. Только надо обеспечить нужный теплоотвод, в зависимости от рассеиваемой мощности, а она зависит от потребляемого тока.

В советские времена встречал, что понижали, например, напряжение с 35 до, скажем, 25В, на входе КРЕНки с напряжением стабилизации на 15В. Включали во входную цепь мощный стабилитрон Д815 (или КС815, как их там). Дешево и сердито.
Открыл глаза
Аватара пользователя
Сообщения: 49
Зарегистрирован: Вс дек 05, 2010 00:53:17
Откуда: Киев

Сообщение VannO))) »

Такой вопрос. По 8 битным АВР.
например, есть код
int varA = 0x00001001;
int varB = 0x00001010;
varA -= varB;
т.е. отнимаю большее от меньшего. Так вот, что в итоге будет? завис/незвис, флаг какой-нить установит, что запишет в varA.
Макетка в разборе, а писать код надо!
[color=#FF80FF]Не втыкать.[/color]
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

11111111 должно получиться и установятся флаги "переполнение" и "отрицательное значение"
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 49
Зарегистрирован: Вс дек 05, 2010 00:53:17
Откуда: Киев

Сообщение VannO))) »

Ага, спасибо. С флагами ясно, а с результатом... всегда будет писать единички, независимо от чисел? Т.е. энтропия информации в переменной стаёт нулевой?
И еще, в случае переполнения. 0х10000000 + 0х10001111 = чему? Снова единички?
[color=#FF80FF]Не втыкать.[/color]
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

VannO))) писал(а):всегда будет писать единички, независимо от чисел? Т.е. энтропия информации в переменной стаёт нулевой?
И еще, в случае переполнения. 0х10000000 + 0х10001111 = чему? Снова единички?
Единички получились исходя из чисел что вы дали. Другие числа дадут другой результат. Прочитайте про дополнительный код.
0х10000000 + 0х10001111=0x0001111+флаг переполнения, арифметика везде действует одинаково.
Последний раз редактировалось Engineer_Keen Пт фев 17, 2012 23:35:26, всего редактировалось 3 раза.
Открыл глаза
Аватара пользователя
Сообщения: 49
Зарегистрирован: Вс дек 05, 2010 00:53:17
Откуда: Киев

Сообщение VannO))) »

Шикарно. Я б сказал, то что надо. Спасибо за наводку.
[color=#FF80FF]Не втыкать.[/color]
Открыл глаза
Аватара пользователя
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Сообщение Bigcrash »

Chettuser писал(а):Видимо человек опасается что 24-мя Вольтами он спалит стабилизатор на 5В.
Именно. 8В я конечно же собирался питать не МК, а стибилизатор.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула

Сообщение IfoR »

Ну использовать резистивный делитель напряжения для питания - это как-то стрёмно.
Если использовать чисто один линейный стабилизатор, то взяв, что контроллер потребляет максимум 0.1 А, выделяемая на стабилизаторе мощность будет (24-5)*0,1 ~= 2 Ватта. Здесь достаточно к стабилизатору просто прикрутить к стабилизатору какую нибудь пластинку в качестве радиатора.

А если брать ещё резистивный делитель, то тут такая штука получается.
С учётом, что нам нужен ток для контроллера 0,1 А, то прикинуть сопротивления можно так.
I = I_R1 = I_R2 + I_K = I_R2 + 0.1
I_R2 = 8 / R_2
I_R1 = 16 / R_1

R_1 = 16 / (8 / R_2 + 0.1)

Мощность, выделяемая в "воздух":
W_R1 = 16^2 / R1 = 256 / R1
W_R2 = 8^2 / R2 = 64 / R2
W_S = (8-5)*0.1 = 0.3

В сумме:
W = 256 / R1 + 64 / R2 + 0.3

Зафиксируем здесь значение R2, тогда
W = 256 / (16 / (8 / R_2 + 0.1)) + 64 / R2 + 0.3 = 192 / R2 + 1,9

Отсюда следует, что минимальная выделяемая мощность, которую можно получить меняя значение R2: всё те же 2 Ватта. Но если мы полностью уберём R2, то напряжение на стабилизаторе может сильно меняться в зависимости от тока микроконтроллера. Что бы его более менее зафиксировать, нужно выполнить условие:
8 / R_2 >> 0.1 => R_2 << 80 Ом

Если, допустим, возьмём R2 10 Ом, то выделяемая мощность будет 21,1 Ватт!
И оно после этого надо?
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Контактная информация:
Грызет канифоль
Сообщения: 294
Зарегистрирован: Пт мар 11, 2011 08:51:55

Сообщение 3DRaven »

Нашел причину! Дело было, как я и писал ранее, в говенной макетной плате с механическими контактами. Закоротило один и вот результат МК шился но не стартовал. Всем спасибо за советы! Зато теперь я знаю как правильно подрубать МК, как уменьшить помехи на АЦП и еще кучу прочих как :)
Ответить

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