Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   IT, компьютеры, электроника (http://www.trainsim.ru/forum/forumdisplay.php?f=32)
-   -   Микроконтроллеры. Всё обо всём. (http://www.trainsim.ru/forum/showthread.php?t=18179)

Dublin 19.07.2017 00:57

Микроконтроллеры. Всё обо всём.
 
Решил я немного поизучать эти все дела микроконтрольные (через книжки естественно), и весь вечер ломаю голову над одной проблемой.
Покажу фрагмент программы (микро attiny 2313)
[SPOILER]
if ((PIND&(1<<PD0))==0)
{
perem=0b10000000;
while(perem !=0)
{
PORTB = ~perem;
perem= perem >> 1;
_delay_ms(200);

}
}
else {
perem=0x00000001;
while (perem !=0) {
PORTB = ~perem;
perem= perem << 1;
_delay_ms(200);
[/SPOILER]
Программа простая как двери: есть 8 светодиодов, которые должны переключатся одна за другой. Не понятен принцип работы цикла с инверсией(~). Если убрать инверсию, то переключение ламп в этом случае происходит, но горят одновременно все лампы.
Если изначально включить инверсию (~perem) то байт 0x00000001 станет 0x11111110, тогда за счет открытости порта должны гореть 7 из 8 ламп (я так думаю, но так не происходит) А дальше по программе если двигать единицу и инвертировать байт, то вообще нифига не пойму, как тогда переключение происходит. Вообщем кто в этом понимает, - объясните на пальцах, пожалуйста.:o

Dublin 19.07.2017 21:11

Разобрались с ситуацией. Кому интересно - объясню.
[SPOILER][img]http://savepic.ru/14992829.jpg[/img][/SPOILER]
Так как один конец диода запитан на "+", другие соответственно подключены на выводы микроконтроллера (то есть необходимо для зажигания подавать "-" (или логический 0) на выход, этот момент мимо головы и пролетел).
А теперь по циклу: Переменной изначально присваивается значение 0b10000000. Далее, в соответствии с циклом, это значение инвертируется, присваивается порту выхода (PORTB) и становится 0b01111111. 7 диод загорелся. Далее происходит побитовый сдвиг единицы в байте (0b01000000) и его инверсия с присвоением (0b10111111). Таким образом происходит поочередный перебор всех светодиодов в одном направлении. (с условием что переменная не равна 0b00000000. Если бы это было так, то 8 светодиодов последовательно бы зажглись и цикл бы закончился). В цикле else же светодиоды мигают в другую сторону.

RUSHPIL 20.07.2017 00:59

Знакомые картинки с Шпротеуса:) Тоже пишу программы под чипы Atmel. Правда в Bascom-AVR. Так уж сложилось, что несколько лет назад нужно было править исходник одной железяки и на тот момент я не понимал в программировании ни грамма. А исходник был написан в Баскоме. Поэтому пришлось сесть и начать... С тех пор пишу на Бейсике прошивки. Но посматриваю в сторону Си. Вы в Win AVR пишите или подобном?

Отработку в железе делал сперва на макетках с Atmega8, но когда появились Ардуины, то перешел на них. Гораздо дешевле, чем покупать специализированные отладочные платы за несколько тысяч рублей. Ну а когда устройство отработано, то адаптирую прошивку под нужный камень, делаю печатную плату и юзаю.

Сейчас заинтересовался HMI Nextion:

[url=http://savepic.net/9540872.htm][img]http://savepic.net/9540872m.jpg[/img][/url]

Позволяет выводит на дисплей инфу из микроконтроллера и вводить данные в него. Все по UART интерфейсу.

Dublin 20.07.2017 10:52

[QUOTE=RUSHPIL;565752]Вы в Win AVR пишите или подобном? [/QUOTE]
Ну почти - Atmel Studio. Я раньше немного интересовался С++, поэтому выбор языка для меня уже был очевиден. Базовый материал прохожу по книжке Белова А.В, так он там использует и ассемблер и Си; с ассемблером как то я сразу не подружился, а Си он использовал в Codevisionavr, в котором отладчика нет, да и свои подводные камни есть. Единственное чем понравился Codevisionavr - при создании проекта он сразу выдаёт "шпаргалку" на инициализацию портов, таймеров и т.д.

[size="1"][color="Silver"]Добавлено через 5 минут[/color][/size]
Вот с Ардуино еще не знаком. Рановато пока туда лезть)

RUSHPIL 21.07.2017 19:26

В итоге все равно придете к Ардуино. Ибо на сегодняшний день нет удобнее и дешевле платформы с Atmel контроллерами на борту. Мне нравится в ней наличие встроенного USB-Uart конвертера, который позволяет прошивать контроллер по USB, не прибегая к использованию ISP программаторов типа USBASP. Плюс куча различных модулей периферрии на все случаи жизни, совместимые с этой платформой. Даже если самому по раздельности покупать микроконтроллер, обвязку к нему из кварца, кондеров и резистора на Reset, сделать плату самому, то выйдет дороже, чем купить Arduino Pro Mini, к примеру.
Ну а раз Вы на Си пишите, то стандартная программная оболочка для разработки программ Ардуины (Arduino IDE) Вам придется по душе;)

Dublin 21.07.2017 20:18

Читал раньше, читал, не вкурил, а теперь Вы открыли мне глаза. Получается есть готовый модуль, уже с готовой обвязкой, с МК, а к этому модулю можно подсоединять дополнительные модули, которые уже доведенные до ума. Так? То есть не надо заниматься ерундой по изготовлению плат, если есть уже готовые решения. Правда заметил, что младшие модели уже с впаянным процессором, и подбирать соотв. модель платы нужно под свои нужды. Так выходит.

Zlodey 21.07.2017 20:50

Ардуино - штука удобная.
К ней всяких доп. модулей, от LAN и Card Reader и до всяких там термодатчиков, акселерометров, GPS и магнитных компасов, дисплеев, сервоприводов (хоть простеньких, хоть мощных, на своём питалове через релюшку) готовых продаётся уйма. И софтину готовую найти можно в виде открытого исходного кода.

Кто роботов лепит из них, кто охранные системы в авто, кто свистелки-перделки, кто "умный дом". У кого на что фантазии хватит.

На работе с Mega, Uno и Pro Mini баловался. Ценники приемлемые вполне.

RUSHPIL 22.07.2017 01:52

[QUOTE=Dublin;565856]Получается есть готовый модуль, уже с готовой обвязкой, с МК[/QUOTE]

Именно. Если взять младшую модель из линейки - Arduino Pro Mini, то там МК с обвязкой, кнопка сброса, подключенная к Reset контроллера и стабилизатор на 3,3 Вольта для питания периферии (типа дисплеев от Нокиа).

[QUOTE=Dublin;565856]заметил, что младшие модели уже с впаянным процессором, и подбирать соотв. модель платы нужно под свои нужды. [/QUOTE]

Все модели идут с контроллером на борту. В большинстве случаев это ATMega328, которая нафарширована всем необходимым. Если портов мало, то можно использовать Arduino Mega c ATmega2560.
ATTiny есть смысл использовать, если кране критично энергопотребление. Из готовых модулей на Тини могу посоветовать Digispark с ATTiny85 на борту и софтовой эмуляцией USB интерфейса. На ATTiny2313 готовых решений не встречал.

Dublin 23.07.2017 00:16

Почитав интернет про ардуино меня навеяло на такие мысли: а везде ли полезна эта платформа? Я сейчас, например, изучая регистры, таймеры, биты-байты (про которые и понятия не имел) не вижу смысла лезть в ардуино. Я так понял такая платформа годится для "собрал и готово". То есть не надо думать какие куда регистры лепить, - всё уже на ладони - подключай библиотеки и оперируй ими. Имхо, это моё мнение. Для меня полезнее изучить все основы программирования и программирования МК, чем так с воздуха пересесть на ардуино. Кто то писал (на просторах), мол, и школьного курса информатики для этого хватит:) Повторю, это сугубо моё мнение, несомненно есть и инакомыслящие люди:)

RUSHPIL 24.07.2017 02:05

Я тоже не приветствую программную оболочку Ардуины, т.к. привык дергать регистрами и отключать ненужную периферию МК, которая по умолчанию запускается при работе в Arduino IDE. Поэтому серьезные программеры не жалуют её из-за отсутствия оптимизации.
Но никто нам не запрещает использовать Ардуины как кусок текстолита с распаянными МК. Тобишь чисто железо. А программы писать в том компиляторе, где нам удобно. В этом весь смак. Вы можете и дальше писать в Atmel Studio и заливать скомпиленный hex в Arduino через штатный загрузчик. Я пользую программу XLoader для заливки своей прошивки в Arduino. При этом пишу прогу в Bascom'e. В платформе Arduino нет жесткой привязки ихнего софта и железа между собой, поэтому спокойно пользуем её как печатную плату с МК и разведенными ногами.

Dublin 24.07.2017 23:05

Я правильно понимаю - создать свои программку, отладить, а потом через стороннюю программу просто экспортнуть hex в МК? А не будет ли проблем с фьюзами или это уже неважно (в данном случае)?
На просторах гугла увидел еще вариант использовать ардуино как программатор. Интересная идея, если на борту вшитый МК. Хотя с другой стороны, можно ведь взять ардуино уно, менять МК (главное чтоб подходил) и прошивать как душе угодно?

E69 25.07.2017 14:58

[QUOTE]Вот с Ардуино еще не знаком. Рановато пока туда лезть) [/QUOTE]Наоборот, он создан для начинающих и проще, чем Атмеловские официальные продукты. Собственная плата ускоряет разработку и действительно может быть дешевле в розницу, хотя для компактных и массовых проектов её применение неудобно. И да, на низкий уровень залезть сложнее, но сейчас возможности таковы, что это оказывается действительно необходимым не так часто.
Единственное, для Ардуино нет симулятора, как у Атмел/avr, тестить программы можно только в железе.
[QUOTE]можно ведь взять ардуино уно, менять МК (главное чтоб подходил) и прошивать как душе угодно?[/QUOTE]В принципе это можно (обвязку, разумеется, каждый раз придется паять для новых мест установки). Более того, с уно в принципе можно программировать и некоторые другие контроллеры АВР, например, тот же про мини, не имеющий встроенного программатора (хотя удобнее купить программатор для него, чем тянуть провода).


Текущее время: 19:51. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim