|
|
![]() ![]() |
|
|
![]() ![]() ![]() ![]() |
|
Опции темы | Поиск в этой теме |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 18.08.2013 Последняя активность: 29.11.2015 13:52
Сообщений: 441
Сказал(а) спасибо: 11
Поблагодарили: 23 раз(а) в 23 сообщениях
|
![]()
В общем, разобрался я со свей проблемой мерцания при плавном "розжиге" диода PWMом с Тайни13.
Все оказалось просто - ей памяти не хватало. Ардуино говно ![]() Ну в плане функции analogWrite() так уж точно. Оказалось (ну для меня лично это открытие), что она "жрет" 120 тактов в то время как обычная прямая запись в порт только 4. Соответственно в Меге, где памяти относительно много, это не было проблемой. А у Тайни13 памяти почти нет и из-за этого начинались тормоза. Для Меги есть хереды с функцией digitalWriteFast(), загуглите. Там макросы для всех чтений и записей, которые драматически быстрее ардуиновских. Сейчас у меня на тайни все работает прекрасно и код меньше в 1.5 раза. Но пришлось почитать про прямую запись в порты - гемор, конечно и до конца так и не разобрался. |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Ветеран Фонарёвки
Регистрация: 06.03.2013 Последняя активность: 15.08.2024 23:42
Сообщений: 4776
Сказал(а) спасибо: 657
Поблагодарили: 1914 раз(а) в 1180 сообщениях
|
![]() Цитата:
Без обид, но совать в неё ардуиновский код - я даже не знаю, как назвать, надо что-нибудь покурить покрепче, чтобы такое придумать ![]() |
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
![]() Регистрация: 07.04.2013 Последняя активность: 13.06.2023 02:24
Сообщений: 5759
Сказал(а) спасибо: 340
Поблагодарили: 8162 раз(а) в 2385 сообщениях
|
![]() [Исправлено: INFERION, 06.09.2013 в 03:04] |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
|||||||||||||||||||
Завсегдатай Фонарёвки
Регистрация: 04.08.2012 Последняя активность: 15.01.2023 14:58
Сообщений: 778
Сказал(а) спасибо: 83
Поблагодарили: 126 раз(а) в 81 сообщениях
|
![]() Цитата:
10 пин разъем
8 пин клипса
сопоставление 10 to 8 пин 1 --> пин 5 пин 2 --> пин 8 пин 5 --> пин 1 пин 7 --> пин 7 пин 8 --> пин 4 пин 9 --> пин 6 на 4,6 вроде бы висят Tx Rx порты меги (не уверен, вечером прозвоню) стандартный 8 пин шлейф который был с клипсой выкинул сразу вечером сфотаю то что у меня есть
__________________
Fenix E15 / Olight i1 / Nitecore SENS CR / Sunwayman C10R (5C1) Fenix PD32 / Zebra SC600w / Sunwayman C20C (S6 7D3) Convoy S2 / L2 (5C1) Zebra SC52w [Исправлено: censor, 06.09.2013 в 10:34] |
|||||||||||||||||||
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 16.10.2012 Последняя активность: 22.02.2022 02:51
Сообщений: 4358
Сказал(а) спасибо: 687
Поблагодарили: 2978 раз(а) в 1380 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|||
Увлеченный
Регистрация: 18.08.2013 Последняя активность: 29.11.2015 13:52
Сообщений: 441
Сказал(а) спасибо: 11
Поблагодарили: 23 раз(а) в 23 сообщениях
|
![]() Цитата:
Но у Ардуины одно преимущество - он прост. Я при свем интеллекте "выше среднего" откровенно затрахался в этими всеми регистрами и пинами. Принципы мне понятны и они логичны но реально геморно это все писать... Цитата:
Цитата:
Я открыл Ардуину и увидел: digitalWrite(pin, value). Все. Через 5 мин написал первую программу. Естественно, "моргалку" ![]() Когда я открыл гугл и даташит и прочитал про пины, регистры и т.п., то сам процесс минут 10 занял. Потом это все надо прикрутить к таймеру и ПВМ. Это в принципе ясно, но "что писать" - ХЗ. В итоге, кстати, я по-обезьяньи скопировал кусок кода и расставил в ужных мне местах. НО все же получил ровно обратное - там, где я в порт писал 0, лампа голела на 100%, а вместо разжигания затухала. В итоге тупо пеменял нули на 255 и наоборот и все заработало как надо. Думаю, что ПВМ инверсный получился или типа того. Короче, гемор. analogRead() так и оставил ардуиновский, благо и с ним "вытягивает" - времени и желания разбираться с чтением не было никакого. Хотя понимаю, что оно намного проще. Вот тебе плюсы ардуины - одна строка вместо 10. |
|||
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 18.08.2013 Последняя активность: 29.11.2015 13:52
Сообщений: 441
Сказал(а) спасибо: 11
Поблагодарили: 23 раз(а) в 23 сообщениях
|
![]()
Кстати, ребята написали макросами функции digitalReadFast() и подобные, которые, по сути, реализуют прямой доступ к портам и "стоят" практически столько же.
Но для Tiny они не работают. Я пока не понял, почему. Видимо, есть там инструкции, которые только в Меге. |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 06.03.2013 Последняя активность: 15.08.2024 23:42
Сообщений: 4776
Сказал(а) спасибо: 657
Поблагодарили: 1914 раз(а) в 1180 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 18.08.2013 Последняя активность: 29.11.2015 13:52
Сообщений: 441
Сказал(а) спасибо: 11
Поблагодарили: 23 раз(а) в 23 сообщениях
|
![]()
Да вроде не так все страшно:
http://www.itisopensource.c... |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
![]() Регистрация: 07.04.2013 Последняя активность: 13.06.2023 02:24
Сообщений: 5759
Сказал(а) спасибо: 340
Поблагодарили: 8162 раз(а) в 2385 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 18.08.2013 Последняя активность: 29.11.2015 13:52
Сообщений: 441
Сказал(а) спасибо: 11
Поблагодарили: 23 раз(а) в 23 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 18.08.2013 Последняя активность: 29.11.2015 13:52
Сообщений: 441
Сказал(а) спасибо: 11
Поблагодарили: 23 раз(а) в 23 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 06.03.2013 Последняя активность: 15.08.2024 23:42
Сообщений: 4776
Сказал(а) спасибо: 657
Поблагодарили: 1914 раз(а) в 1180 сообщениях
|
![]()
Его не надо учить. Да и не стоит. Просто открывается таблица команд (она может отличаться от контроллера к контроллеру) и команды пишутся в столбик. Всё. Собственно это и есть то, что будет выполнять контроллер.
А если всё это записать в виде числовых кодов, то и компилятор не нужен ![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
![]() Регистрация: 07.04.2013 Последняя активность: 13.06.2023 02:24
Сообщений: 5759
Сказал(а) спасибо: 340
Поблагодарили: 8162 раз(а) в 2385 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 18.08.2013 Последняя активность: 29.11.2015 13:52
Сообщений: 441
Сказал(а) спасибо: 11
Поблагодарили: 23 раз(а) в 23 сообщениях
|
![]()
INFERION, ога, но если это ПВМ, то там приготовления как к свадьбе
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Увлеченный
Регистрация: 18.08.2013 Последняя активность: 29.11.2015 13:52
Сообщений: 441
Сказал(а) спасибо: 11
Поблагодарили: 23 раз(а) в 23 сообщениях
|
![]() Цитата:
Есть для AVR таблица кодов? Я загуглю, но, может, у кого под рукой... |
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Увлеченный
Регистрация: 02.09.2013 Последняя активность: 28.05.2020 11:46
Сообщений: 193
Сказал(а) спасибо: 49
Поблагодарили: 30 раз(а) в 22 сообщениях
|
![]() Цитата:
Вот пример Код:
.MACRO SelectModem1; cbi PORTB,0 ; сброс бита 0 порта B .ENDMACRO [Исправлено: mws, 06.09.2013 в 17:52] |
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 06.03.2013 Последняя активность: 15.08.2024 23:42
Сообщений: 4776
Сказал(а) спасибо: 657
Поблагодарили: 1914 раз(а) в 1180 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
![]() Регистрация: 07.04.2013 Последняя активность: 13.06.2023 02:24
Сообщений: 5759
Сказал(а) спасибо: 340
Поблагодарили: 8162 раз(а) в 2385 сообщениях
|
![]()
В даташите есть всё, даже протоколы для прошивания. Но тут удобнее, на русском, и с примерами: http://www.gaw.ru/html.cgi/.... Хотя и не все инструкции (к примеру нет MOVW)...
Человеку, писавшему исключительно на ЯВУ, сложнее всего будет вкурить флаги статуса и работу с многобайтными переменными (когда необходимо эти флаги использовать). А так же проблемы с умножением и делением, поскольку придётся осознать, что подобные вещи в разных ситуациях оптимально делать по-разному, и инструкций делающих это непосредственно просто нет. А компилятор ЯВУ сам с такими задачами разбирается в меру своих возможностей... Система команд у AVR странная. Половину можно выкинуть, т.к. многие инструкции можно заменить другими. При этом у многих инструкций имеются различные ограничения из-за того, что требовалось впихнуть столько мусора в 2 байта. Т.е. жопой архитектуру делали. Причём маркетинговой, с громкими словами "много инструкций - гуд!", хотя даже Сишный компилятор только половину использует... Макросам так же можно передавать параметры, как и функциям. Макроассемблер хорошая штука, но реально мне ни разу ещё не надобился. Я вообще не люблю все эти абстрагирования, когда приходится держать кучу открытых файлов и постоянно скролить, чтоб что-то отследить... [Исправлено: INFERION, 06.09.2013 в 17:26] |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 06.03.2013 Последняя активность: 15.08.2024 23:42
Сообщений: 4776
Сказал(а) спасибо: 657
Поблагодарили: 1914 раз(а) в 1180 сообщениях
|
![]() |
![]() |
![]() ![]() |