LINUX.ORG.RU

[Спецам по Arduino] Семисегментный индикатор и нехватка ножек у порта?


0

1

Доброго времени суток. Сидел вчера игрался с arduino nano, решил попробовать подключить к нему семисегментный индикатор. Я столкнулся с тем, что мне не хватило пеинов на порту, я подключал к порту D(PORTD). Как сказано в документации порт D это выводы с 0 по 7, выводы 0 и 1, тоже входят в порт(RX/TX) и тут у меня появилось несколько вопросов:

  • Почему я не могу их использовать? Да и можно ли вообще их использовать? Это пины приема передачи данных, судя по доками использовать их можно. Я подключал к этому выводу светодиод, подавал логический уровень, чтобы зажечь, но он так и не засветился(Поэтому пришлось подключать на пины с D2 по D9)
  • Как правильно писать в порт, ведь это можно сделать двумя способами:
    • digitalWrite(pin, HIGH) - подать на pin лог. 1.
    • PORTD |= (1<<5) - подать на 5 ножку лог. 1 Либо так: PORT = b00100000 - что тоже самое

Второй путь мне представляется более изящным и удобным. Именно так я попытался зажечь свои сегменты на индикаторе. Но здесь возникла проблема из-за тех самых выводов RX/TX. Так как использовать их у меня не получилось, то оставшиеся выводы(те, что не влезли в порт D) я подцепил на выводы 8 и 9, а это уже порт B, а как их теперь согласовывать то. Я теперь не могу просто написать: PORTD |= (1<<3), часть индикаторов не зажгётся. Как же с помощью второго способа заюзать сразу 2 порта? Хочется всё сделать по пацански, правильно, а не вызывать постоянно digitalWrite.

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

P.P.S. Семисегментный индикатор, как и светодиод, нужно подключать через резистор, дабы сбавить ток, я же решил сэкономить и подключил всего через 1 резистор и тот на питании, и походу спалил пины 8 и 9 :(

В документациях всё красиво написано, у всех всё получается, как сам сядешь делать, вечно, что-нибудь да не так... эх :(

★★★★★

этот digitalWrite скорее всего раскрывается в в твоё shift+or

я же решил сэкономить и подключил всего через 1 резистор и тот на питании

да, нубы традиционно так усовершенствуют схему
теперь понимаешь, куда пошёл ток?

anonymous
()

А посмотреть в документации как заставить 0 и 1 бит порта D работать не как RX/TX? Емнип это как-то флагами или фузами управляется.

Delirium_veritas
()
Ответ на: комментарий от anonymous

Да ладно. Я тоже так делал когда-то. Жаль, конечно atmeg'у. Хорошо казённая была.

Delirium_veritas
()
Ответ на: комментарий от anonymous

В контроллер он пошёл, на пины. Лень было в магазин идти, думаю, «ай, ладно, ничо ему не будет»... я разок попробую и всё, попробовал :(

xterro ★★★★★
() автор топика
Ответ на: комментарий от Delirium_veritas

Надо будет попробовать так, только не нашёл как переключить пин на определённый режим.

xterro ★★★★★
() автор топика
Ответ на: комментарий от Delirium_veritas

На нём выводов достаточно, с 0 по 7, как раз на 7 разрядов хватит. А раз два пина не использовал, то стало всё равно что использовать, порт D или B.

xterro ★★★★★
() автор топика

... а потом захочется два семисегментника, три... используй уже сразу сдивговый регистр, заодно и решение будет более масштабируемым, а от контроллера потребуется всего три ноги, если я правильно помню: по одной ты будешь последовательно гнать данные в регистр, другой тактировать, а третьей защелкивать, когда всё передано.

aol ★★★★★
()
Ответ на: комментарий от aol

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

xterro ★★★★★
() автор топика
Ответ на: комментарий от quickquest

В простом примере идёт подключение к одному порту, не подскажите как сделать чтобы пины rx и tx(порт D, pd0 и pd1) тоже можно было использовать, как и все остальные?

xterro ★★★★★
() автор топика

читай даташит по контроллеру, там есть, как включать/отключать RX/TX

P.S. Arduino не нужен, Ъ покупают отдельно контроллер, плату, детальки и сами паяют :)

anonymous
()

В регистре UCSRB соответствующего uart'а надо сбросить флаги RXEN и TXEN. P.S.: ардуино - для быдла, которое не смогло осилить даже колхозные авры по докам производителя.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

P.S.: ардуино - для быдла, которое не смогло осилить даже колхозные авры по докам производителя.

Полностью согласен, но почему колхозные?

anonymous
()
Ответ на: комментарий от xterro

как сделать чтобы пины rx и tx(порт D, pd0 и pd1) тоже можно было использовать, как и все остальные?

Не помню, там у rx и tx есть какие-то особенности, посмотри на форуме.

quickquest ★★★★★
()
Ответ на: комментарий от anonymous

Очень поплурны в народе потому что, в силу примитивности по сравнению с кортексами М-серии, хотя кортексы всем лучше. Ну, кроме наличия народных версий в dip-корпусах, лол.

Для въезжания в тему они хороши, конечно, но на них не стоит засиживаться и уж точно не стоит использовать какие-нибудь иде с программированием мышкой.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от anonymous

P.S. Arduino не нужен, Ъ покупают отдельно контроллер, плату, детальки и сами паяют :)

+100500

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от xterro

ЕМНИП, ардуину даже по-человечески запрограммировать нельзя: там какой-то псевдоязык с интерфейсом на дурацкой яве.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от prischeyadro

Ну не начинать же новичку с Cortex М3 или М0. У меня помимо ардуины, есть ещё STM32 Discovery, взял «на вырост». Сейчас поиграюсь с ардуиной, уясню основные принципы, потом можно и с кортексом поиграть. Хотя мне кажется что для простых поделок он уже избыточен.

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

Без понятия: я с ними еще не работал. Но ассемблер я не знаю: PIC'и программирую на сях, компилирую при помощи sdcc.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от xterro

Си и асм.

Хотя мне кажется что для простых поделок он уже избыточен.

Это не повод покупать вместо него AVR, которые стоят зачастую дороже.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

Дело не в том, что он дороже, дело в том что он имхо проще на начальном этапе. Это как водить машину, имхо новички же не начинают водить сразу с автобуса. Да и плюс его ещё в том, что не надо париться с паянием, купил, подключил и можешь сразу приступать к изучению :)

xterro ★★★★★
() автор топика

Ещё тут вопрос появился. На плате arduino усть ISP выход, можно ли распаять свой контроллер на плате и потом запрограммировать его с помощью arduino, т.е использовать её как программатор?

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

Ну и где здесь романтика?

Если сам спаял, то удовольствия от программирования в разы больше :)

adzeitor
()
Ответ на: комментарий от Eddy_Em

Изменяет, можешь точно также шить любой код через дудку

anonymous
()
Ответ на: комментарий от prischeyadro

Действительно, для домашней автоматизации можно набрать их пару пачек :)

xterro ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

к PIC-у нужен программатор, а для AVR сойдет «5 проводков в LPT порт», у AVR стройная красивая архитектура и набор команд, а у PIC костыльно-подпорочная, AVR исполняет большинство инструкций за 1 такт, а PIC за 4

Harald ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.