Toggling the Pin

Обсуждаем контроллеры компании Atmel.
Dessp
Встал на лапы
Сообщения: 136
Зарегистрирован: Ср янв 23, 2013 10:58:31

Toggling the Pin

Сообщение Dessp »

Спасайте народ.
Угробил кучу времини на нахождение ошибки, а оно вот какое дело :(((

контроллер attiny4313 datasheet:
Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn.
Note that the SBI instruction can be used to toggle one single bit in a port.

супер удобная фишка, юзаю очень часто, ну типо:

sbi PINB,0

Так вот, недавно пришлось писать код под контроллер atmega8!!!!!

и вот нежданчик, там эта фишка не работает!!!!!!!!!! И не генерит даже ошибку при компиляции, фсиё типо ок, иди, пиши себе дальше код. А нифига, не работает....

Теперь вопрос. Какого фига они там в атмеле обкуренные все? как можно в одном контроллере такую фишку писания кода предусматривать а в другом нет?? дайте плиз разумное обяснение, я угробил дня 3 на это дело + 2 контроллера :(
Реклама
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Toggling the Pin

Сообщение ILYAUL »

Они и дают . Называется DATASHEET
Реклама
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Toggling the Pin

Сообщение Kavka »

Dessp, тини4313 с более свежим ядром, чем мега8.
В старом ядре упомянутой вами возможности нет, а в новых есть. Читайте описание портов В/В в спецификации на конкретный чип.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3871
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Toggling the Pin

Сообщение Engineer_Keen »

Dessp писал(а): и вот нежданчик, там эта фишка не работает!!!!!!!!!! И не генерит даже ошибку при компиляции, фсиё типо ок, иди, пиши себе дальше код. А нифига, не работает....
Компилятор ничего не знает про внутреннее устройство контроллера, он знает только команды, имена регистров и границы памяти (которые ему в inc файлах объяснили). Исключение некоторые команды (BREAK, MULxx, IJMP).
Ядро одно? Одно, значит в PIN можно писать, даже если это никак не повлияет на работу. Это тоже самое что запаять ногу PB0 на землю, потом в PORTB,PB0 записать "1" и при запуске проги благополучно спалить эту ногу. Зато даже если Atmel изобретет новый контроллер с этим ядром, нужно будет всего-лишь сделать новый inc-файл с описанием регистров, а не переписывать компилятор чтобы он знал какие аргументы можно использовать с какими командами в каждом конкретном контроллере, а какие нет.

Так что как выше писали - читайте даташит.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Toggling the Pin

Сообщение BOB51 »

Вообще-то запись в порт лапок (PINx) как-то противошерстно для АВРок, имеющих раздельные регистры направления, защелки выходных значений и значений конкретно физических выводов МК.
При "нормальном" подходе таких "казусов" не встречается.
А вот ежли привыкнуть к "оригинальному решению" исключительно для конкретной модификации кристалла то на переходе к "стандартному ряду" можно и фигвамс огресть...
конкретно:
мега8_порт.GIF
(8.62 КБ) 313 скачиваний
и
тинька2313а_4313а.GIF
(8.43 КБ) 299 скачиваний
в которой добавлена фишка "записи в PINx" по факту выполняющаяся не в выводы а в регистр PORTx (по сути аналогия записи в PORTx).
8)
Реклама
Dessp
Встал на лапы
Сообщения: 136
Зарегистрирован: Ср янв 23, 2013 10:58:31

Re: Toggling the Pin

Сообщение Dessp »

Как бы эта фишка намного облегчает жизнь.
Когда записываешь в PIN единицу, то выход ИНВЕРТИРУЕТСЯ.
В прот слуции надо сначало читать что у тебя там на ноге, потом инвертировать, а потом уже пихать в PORT. не?
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Toggling the Pin

Сообщение BOB51 »

В некоторых приложениях удобнее содержимое буфера в порт пихать. Все операции с регистром файла РОН (или ОЗУ с пересылками), а вывод конечного продукта по требованию (маркеру времени/события).
Помимо прочего существует XOR - в приложении к АВРкам это будет EOR плюс представление порта как ячейки памяти.
Вобщем возможностей весьма много и в стандартном варианте.
8)
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Toggling the Pin

Сообщение Андрей СШ »

Но инверсия ноги записью в pin быстрее. Особенно если надо переключить больше одной.
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Toggling the Pin

Сообщение ILYAUL »

Андрей СШ писал(а):Но инверсия ноги записью в pin быстрее. Особенно если надо переключить больше одной.
Ну-ка ответь. Нач усл. PORTx = все единицы
Что быстрее OUT PORTx,zero или OUT PINx, FF
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 431
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: Toggling the Pin

Сообщение HardWareMan »

ILYAUL писал(а): Ну-ка ответь. Нач усл. PORTx = все единицы
Что быстрее OUT PORTx,zero или OUT PINx, FF
Ну-ка ответь. Нач усл. PORTx = 0xAA, требуется сделать 0x55
Что быстрее IN R16,PORTx/EOR R16,#0xFF/OUT PORTx,R16 или OUT PINx,0xFF?

Тогглинг на порту это супер, давно надо было сделать. И решение повесить его на запись в PINх тоже разумное решение, ИМХО.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3871
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Toggling the Pin

Сообщение Engineer_Keen »

Вот теперь думаю, всего-то в inc-файле и в даташите обозвали бы его как-нибудь TOGGLEx, и путаницы бы не было, ну разве что самые внимательные углядели бы что у него адрес с PINx совпадает...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Toggling the Pin

Сообщение ILYAUL »

HardWareMan писал(а):
ILYAUL писал(а): Ну-ка ответь. Нач усл. PORTx = все единицы
Что быстрее OUT PORTx,zero или OUT PINx, FF
Ну-ка ответь. Нач усл. PORTx = 0xAA, требуется сделать 0x55
Что быстрее IN R16,PORTx/EOR R16,#0xFF/OUT PORTx,R16 или OUT PINx,0xFF?

Тогглинг на порту это супер, давно надо было сделать. И решение повесить его на запись в PINх тоже разумное решение, ИМХО.
OUT PORTx,0x55
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Toggling the Pin

Сообщение ARV »

а никого не смущает, что в PORTx содержится одно, а фактически после "тогглинга" на выходах может быть другое?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Toggling the Pin

Сообщение ILYAUL »

Для этого и придумали PINx , чтобы понимать , что писали в порт. Фишка toggling-ка в том , что надо постоянно следить , что при большом коде , можно запросто потерять счёт.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Toggling the Pin

Сообщение ARV »

чтение PINx - это совсем не то же самое, что чтение PORTx, и придумали его как раз для того, чтобы считывать ВНЕШНИЕ сигналы, а не узнавать о ВНУТРЕННИХ.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Toggling the Pin

Сообщение ILYAUL »

PORTx может быть и просажен т.ч его чтение для операций чтение-наложения маски -запись , не есть правильно. Эффект не предсказуем.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Toggling the Pin

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Toggling the Pin

Сообщение ILYAUL »

Да , что-то подзабыл мат часть PINx реальный уровень на пине
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Toggling the Pin

Сообщение Pnjom-Penb »

ILYAUL писал(а):Ну-ка ответь. Нач усл. PORTx = все единицы. Что быстрее OUT PORTx,zero или OUT PINx, FF
HardWareMan писал(а):Ну-ка ответь. Нач усл. PORTx = 0xAA, требуется сделать 0x55. Что быстрее IN R16,PORTx/EOR R16,#0xFF/OUT PORTx,R16 или OUT PINx,0xFF?...
ILYAUL, HardWareMan, ну-ка, ответьте оба - нужно toggle'ить некоторые пины, а начальное их состояние неизвестно - и чё делать тогда этими OUT'ами? Даже если бы они были в тысячу раз быстрее всех остальных инструкций... :)
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Toggling the Pin

Сообщение Андрей СШ »

Бывают ситуации когда состояние пина не важно, а важен именно факт переключения (запись в PIN быстрее).
Бывают ситуации когда пин нужно переключить и состояние его известно (запись в PIN быстрее или равна по скорости).
Бывают ситуации когда состояние нужного пина известно, а остальных нет (запись в PIN быстрее).
Бывают ситуации, когда надо одновременно переключить два пина в противоположенных направлениях (запись в PIN быстрее).


Если состояние пина важно, но неизвестно, то переключать его не нужно. Это очевидно.

Никто никого не заставляет использовать запись в PIN если это не нужно или кому то не понятно.
Последний раз редактировалось Андрей СШ Чт сен 03, 2015 07:08:22, всего редактировалось 1 раз.
Ответить

Вернуться в «AVR»