Ардуино и считыватель с 1-ware интерфейсом
- Войдите на сайт для отправки комментариев
Пнд, 11/03/2013 - 16:44
При вет всем!
По ходу возник такой вопрос. Устройства с 1-ware интерфейсом питаются фантомно. А как быть, когда у меня есть 12 вольтовый считыватель Proximity брелков, с 1-ware интерфейсом, и ардуина с питанием 3,3 -5в. Ключики TM читаю с ардуины без проблем по 1-ware, а со считывателем мне не надо лепить какие-то согласующие цепи? Или считыватель польностью эммулирует IButton (Touch Memory)?
Согласование логических уровней 5В и 3.3В устройств / Схемотехника / Сообщество EasyElectronics.ru
спасибо за ссылочку, но кажется это не то. Мне не надо согласовывать логические уровни. 1-варе интерфейс подразумевает подачу питания "мастер" -устройством на "слейв" и обмен данными со слейвом по шине питания
А я таки не понял, что Вы хотели узнать (это я автору топика).
Использование устрост разного уровня - подразумевает необходимость согласовывающих цепей. Я дал вам ссылку где расписанно как согласовывать. Как вы без согласование, не важно по шине питания или нет, будете "обмениватся данными" между 12-ти вольтовым и 5-вольтовым устройством? Как только 12-ти вольтовое скажет "один", 5-ти вольтовое скажет "упс!!! пш....", а в обратую сторону 5-ти вольтовое скажет "адин", а 12-ти вольтовое подумает "что-то на ноль похоже".
Ну это все, конечно, догадки. Так как ссылок что же за зверь у вас "12 вольтовый считыватель Proximity брелков" вы не дали. Даташита на него - нет. И сколько же вольтовый у него интрефейс - не известно (то что он сам питаетеся 12-ти вольтами может ничего не означать).
Более того, если верить http://www.1wire.org/Files/Articles/1-Wire-Design%20Guide%20v1.0.pdf , то 1-wire автоматом означает максимум 5-ти вольтовость. В этом случае "согласование" действительно не нужно, но... а причем тут тогда 12-ти вольтовость считывателя?
Да вообще, даже не очень ясно "кого к кому вы будете подключать" и чего вы хотите от этого считывателя добится. Что бы он эмулировал ключи? ИЛи ардуиной эмулировать ключ? Или каким-то образом настраивать его с помощью ардуины по 1-wire интерфейсу? Или читать с него какую-то статистику? Читать им ключи и отправлять считанное ардуине (подозреваю что это, но нужен даташит)?
Спасибо за потраченное время! Конечно как вы и предположили, 12В от которых питается считыватель скорее всего не играют никакой роли.
Весь вопрос был в следующем.
Есть хорошее наглядное пособие, (http://robocraft.ru/blog/arduino/118.html) где с помошью ардуины можно читать ключики ТouchМemory. Подаем на ключик землю и питание - в замен по шине питания обратно получаем его серийный номер. Все хорошо работает, причем ключик как известно не имее своего источника питания, а запитывается на момент считывания серийного номера от ардуины.
Теперь мне надо прочитать Proximity ключик. Для него продается куча считывателей, c напряжением питания 12в и интерфейсом 1-wire. Контроллеры сетевого доступа могут напрямую считывать по шине 1-ware как ТМ-ключики, так и проксимити-ключики (через считыватель с 1-ware интерфейсом) без каких либо переключений и перенастроек. Получается, что считыватель прокси-ключиков полностью эмулирует работу TM-ключика. Вот и стает вопрос, можно ли к ардуине просто взять и подключить считыватель прокси-ключиков?
кстати сейчас замерял напряжение на 1-ware от считывателя - 4,7В
Смотрите, вы намешали мухи и котлеты.
1-wire - это спецификация шины. Описание "как обмениватся командами", но... какие именно команды будут по ней передаватся - она ничего не говорит. Это как Serial/UART. Как байты кодируются-передаются - зафиксирвоанно, а уж что мы в Serial.print напишем - дело разработчика принимающего и передающего устройства.
Есть другая спецификация iButton. Вот она описывает именно "команды" шлеются по 1-wire в случае работы с таблетками-ключами. Это частный случай для чего может использоватся шина 1-wire. Один из возможных наборов команд.
Существует, к примеру, датчик температуры DS18B20 который тоже работает через 1-wire, но никакого отношения к ключам не имеет. У него совершенно другой набор команд/адресов. Кстати он имеет два варианта подключение - когда берет питание с шины и когда питание ему подается отдельно. Это к тому что использование 1-wire совсем не означает автоматом что устройство питается от нее же.
Далее. Ваш считыватель действительно может реализовывать интерфейс iButton и тогда читать его можно как описанно в вашей статье, но может имет и свой собственный интерфейс. Ваши контроллеры сетевого доступа (а это что за новый персонаж?) могут просто в себе реализовывать и iButton интерфейс и какой-то интерфейс считывателя. И никаких "переключений/перенастроек" для этого не требуется. На 1-wire шине может одновременно несколько разных устройств. Причем не обязательно однотипных (более того с разными - проще). Ваши контроллеры могут просто опросить шину. Нашли там iButoon устройсов - работают с ним, нашли считыватель - работают с ним понятными ему командами.
Итого: говорить про питание, какие интерфейсы реализует считыватель и т.п. не имея на него даташиты (документации) - можно только догадками.
У вас есть три варианта действий:
1. Искать документацию (или готовую ардуино библиотеку для него)
2. На удачу подключать его и надеятся что он заработает как iButton устройство
3. Брать считывать, контроллер доступа и с помощью логического анализатора (или какого-нибудь 1-wire снифера, к примеру из той же ардуины соорудить) смотреть как они общаются и заниматся ревер-инжинирингом их протокола.
Естественно первый вариант - наиболее феншуйный.
А еще, есть сильно подозрение что ваши Proxymity - это банальные RFID ридеры. Только дороже. Погуглите в это направление. Может там обычнй RFID справится, если только все не осложнено каким-нибудь хитропопым шифрованием.
кстати сейчас замерял напряжение на 1-ware от считывателя - 4,7В
Ну дык я же приводил ссылку на спецификацию где сказанно что это именно TTL уровни используются в этом протоколе. Вы подтвердили это :)
Хотя, конечно, тыкнуть тестером и убедится что ожидания оправдываются - весьма полезная привычка. Все правильно вы сделали :)
P.S. И да, 1-wire, не 1-ware. Может мешать при гуглении. wire - провод (eng).
так о банальных RFID ридерах и идет речь. Вы хотите сказать что этот ридер не иммитирует Ibutton когда подключается к контроллеры по 1-ware? Если нет, то можете ткнуть на информацию?
так о банальных RFID ридерах и идет речь. Вы хотите сказать что этот ридер не иммитирует Ibutton когда подключается к контроллеры по 1-ware? Если нет, то можете ткнуть на информацию?
Я понятия не имею про какой ЭТОТ РИДЕР идет речь. Вы где-то в своих постах видите ссылку на его описание? Или хотя-бы название/модель? Многие из них вообще по Serial работают и никаким iButton не пахнут в принципе.
И вообще я ничего не хочу сказать. Я помоему достаточно ясно выразился что без документации - только гадать. А вы по прежнему хотите из меня вытащить какие-то увтреждения, что-бы я вас куда-то ткнул. Ну могу ткнуть если хотите http://bit.ly/Wl2U1s
И почему вдруго "про RFID" идет речь если выше вы везде Proximity говорили?
так RFID считыватели и считывают Proximity-карточки и Proximity-брелки. Вот нашел статью (http://we.easyelectronics.ru/howwork/rfid-chast-1-rider.html), как раз про мой случай. Только не понятно как считыватель подключать к ардуине. В какое место влепить сопротивление ? Подключил считыватель к ардуине напряммую, без сопротивления, и питание соответственно не брал с ардуины, т.к напряжение ест ьна выходах 1-ware считывателя (как в статье http://robocraft.ru/blog/arduino/118.html) - не работает.
так RFID считыватели и считывают Proximity-карточки и Proximity-брелки. Вот нашел статью
Не знаю, мне гугл перво ссылкой выдал
http://www.ehow.com/facts_7412912_difference-between-proximity-id-rfid_....
Из которой видно что это родственные, но различные технологии (и в чем-то конкрурирущющи)
(http://we.easyelectronics.ru/howwork/rfid-chast-1-rider.html), как раз про мой случай.
Только не понятно как считыватель подключать к ардуине. В какое место влепить сопротивление ? Подключил считыватель к ардуине напряммую, без сопротивления, и питание соответственно не брал с ардуины,
Если у вас действительно такое же ридер как в статье - то ничего не нужно. Все резисторы/обвязка уже имеетеся.
Только соеденить линию данных и земли. Напрямую. Дальше он прикидывается iButton (вот этот конкретный, это не значит что ВСЕ ридеры поступают точно так же).
т.к напряжение ест ьна выходах 1-ware считывателя (как в статье http://robocraft.ru/blog/arduino/118.html) - не работает.
Значит либо ридер у вас другой, либо RFID и Proximity не одно и тоже. А еще, судя по коментам, карточки могу с ридером по разным протоколам общатся. И не все ридеры понимают все карточки.
http://irs.ua/product/pr_01 это ссылка на считыватель. Там написано, что по интерфейсу 1-ware считыватель иммитирует TouchMemory. Но при прямом подключении к ардуине не работает:( Таблетки ардуина читает, а со считывателя не хочет. Может все-таки надо воткнуть сопротивление куда-нибудь?
Ну если напрямую не сказанно (и не удается нагуглить более подробную документацию), то можно предположить что встроенного резистора нет. А по спецификации 1-wire должен быть (читали описание шины?). Только лепить его нужно не "куда-нибудь", а куда нужно. А нужно подтянуть линию данных к питанию. То есть к 5v дуины. Вообщем как на схеме из статьи про iButton. Раз он "прикидывается кнопкой", то логично что и схема должна быть такая же.
Разве что резистор, можно попытатся взять побольше. 4.7K более традиционный номинал. До 10K используют (если провода не сильно длинные).
Ну и убедится, прежде чем читать дуиной, что он сами брелки читает. У него же есть световая индикация и пищик (чуть не умер, с этого слова ;) Может вы пытаетесь выжать из него "волшебное слово" которое он сам не знает.
да читает брелки. Только что через вейганд-26 подключил к ардуине - все читает, но хочется через 1-ware. Поиграюсь с сопротивлением
подтянул к питанию +5в дуины шину данных от считывателя- без результатно:( может еще будут предложения по согласованию?
А что означает "без результатно", что оно при этом пишет в Serial?
Перепроверите подключение. Data, там с Data0 не перепутали? Бывает банальное "контакты плохие" или "рядом блок питания лежит и наводки дает".
А сами Data0,Data1 во время теста 1-wire отключали от дуины?
Эх, найти бы на него datasheet (мне не удалось, а то что на сайте - отписка краткая). У некоторых других ридеров, к примеру, что-бы включить 1-wire нужно Wegand0 и Wegand1 замкнуть между собой до включения. Но... стремно такое пробовать "по аналогии" без прямого указания в документации.
По хорошему, если у вас есть этот самый "контроллер сетевого доступа" - было-бы не плохо с ним протестить. Что-бы узнать "в коде/ардуине" у нас проблемы, или все-таки в самом ридере.
Если с ним заработает, то можно попытатся взять какой-нибудь логический анализатор (или из ардуины соорудить) и попытся посмотреть "что там происходит" на шине.
этот считыватель - разработка авторов этого сайта. Так никто естественно даташиты выкладывать не будет. Когда подключаюсь к выводу DATA, DATA0 и DATA1 - не задействованы. Насчет закорачивания DATA0 и DATA1 -врядли, пр подключении к контроллеру по 1-варе ничего не надо коротить. И по ходу эти считыватели типа универсальные, т.е должны без проблем подключаться к контроллерам сетевого доступа других разработчиков. Да и в описании написано конкретно - считыватель при работе по 1-варе прикидывается таблеткой TouchMemory. Почему не работает - не пойму.
С контроллером по 1-варе он работает - проверено
этот считыватель - разработка авторов этого сайта. Так никто естественно даташиты выкладывать не будет.
Это как раз "не естественно". Вы путаете "schema", разводку платы и "datasheet".
Последнее - это просто подробная документация (я не краткий userguide). И его выкладывает любой уважающий себя производитель любого устройства (если не поленился его написать). Раз авторы известны - то можно попытатся с ними списатся и просто попросить его.
Насчет закорачивания DATA0 и DATA1 -врядли, пр подключении к контроллеру по 1-варе ничего не надо коротить. И по ходу эти считыватели типа универсальные, т.е должны без проблем подключаться к контроллерам сетевого доступа других разработчиков. Да и в описании написано конкретно - считыватель при работе по 1-варе прикидывается таблеткой TouchMemory. Почему не работает - не пойму.
Сам интерфей 1-wire действительно не требует никаких "корочений". Универсальный и проч.... Он вообще ничего не знает про существование DATA0 и DATA1. Но... вот сам считыватель является конкретным устройством. И разработчики могли вложить в него любую логику. Например такую что активен одновременно только один интерфейс. А другой нужно "включать". Например вот
http://sector-sb.ru/catalog/kontrol_dostupa/scud_parsec/schityvateli_par...
С контроллером по 1-варе он работает - проверено
Я правильно вас понял что связка
таблетка->1-wire->arduino - работает
считыватель->1-wire->какой-то-покупной-контроллер - работает
А связь
считыватель->1-wire->arduino - не работает
Верно?
Если да, то....
1. Все-таки, в чем же именно проявляется "не работает", что пишется при этом в терминал?
2. Опишите как вы подключаете в случае с таблетки и считывателя.
3. Какие скетч и библиотеку вы используете? Если вы во взятый скетч вносили любые, самые незначительные изменения (подцепили на другой пин и проч.) - укажите их. А еще лучше - покажите тут скетч который вы используете.
4. Попробуйте дать на арудину внешние питание, а не от USB. Частенько бывает что бьешься с магическими глюками, а потом выяняется что "не хватало питания".
5. Укажите какую именно ардуину вы используете.
1) скетч взят вот отсюда http://robocraft.ru/blog/arduino/118.html. Ели подключить вместо таблетки считыватель в терминал выдает - No more addresses. Если подключить таблетку то выдает ее серийный номер.
2) Считыватель к ардуине подключю так:
А)земля ардуины - земля считывателя, пин 10 ардуины - Data считывателя.
или
Б) так же как в варианте А, только +5в ардуины подаю через сопротивление 2-3кОм на 10 пин ардуины. Как на рисунке по ссылке выше.
Теблетку к ардуине подключаю как на ссылке выше
4) ну тут врядли кроме самой ардуины больше ничего не висит в нагрузке. А внешнее питание конечно попробоват можно
5)Mega2560
Больше всего в этой истории меняы смущает то, что со стороны считывателя на выходе DATA постоянно присутствует напряжение около 5В, чего нельзы сказать о таблетке. Может в этом направлении надо копать? В считывателе не предусмотрено переключение между вейгандом и 1-варе, думаю, что они работают параллельно
Больше всего в этой истории меняы смущает то, что со стороны считывателя на выходе DATA постоянно присутствует напряжение около 5В, чего нельзы сказать о таблетке. Может в этом направлении надо копать? В считывателе не предусмотрено переключение между вейгандом и 1-варе, думаю, что они работают параллельно
Это можно означать, что резистор подтягивающий к 5v уже встроен в сам считыватель (как в статье с easyelectronics) и самому добавлять его - не нужно.
Тут бы конечно, очень помого какой-то логический анализатор или осцилограф, что-бы посмотреть "что там на шине происходит" и "в чем разница". Если под руками есть вторая ардуна - можно из нее соорудить простейший.
Возможно встроенный подтягивающий - слишком сильный (тогда добавлением своего - мы еще больше усугубляем пробелему) и у ардуины не хватает сил "придавить" линию к земле (или слишком медленно придавливается).
Можно попытатся поигратся: Data пин дуины подергать "вверх вниз", а другим пином в этот момент смотреть за какое время линия становится в ноль и востанавливается. Посмотреть сколько времени это занимает с таблеткой и сколько занимаете падение, востановление.
Еще можете просто покрутить в loop (и выводить что он возвращает) ds.reset(). Возвращает он, хоть иногда, при работе со считывателем единицу?
Что-то типа:
есть и логический анализатор вот - такой Saleae есть и вторая дуина, вопрос извечный - время. Хотя это хороший повод освоить анализатор, я его только получил.
Ну "время" - любое хобби требует времени :) Если нужно что-бы "просто работало", то купить готовый и дело с концом. Это и быстрее, а часто и дешевле.
Вторая дуина: ну простейший анализотор. Хотя-бы увидеть меняется там что-нибудь на data-линии или и нет, можно вот примерно таким скетчем увидеть:
Подсоединяем DATA линию к D2 второй дуины (без всяких резисторов), соединям земли, пускаем - пробуем читать. По идее он должен выводить сколько времени держится 0 и 1 на линии.
Хотя, если разберетесь с анализатором, то думаю там еще все проще и наглядней будет видно :)
Ну "время" - любое хобби требует времени :) Если нужно что-бы "просто работало", то купить готовый и дело с концом. Это и быстрее, а часто и дешевле.
Ну на то оно и хобби, чтобы на него тратить время. Просто дома идет настоящее сражение за него. Если час в день удается выкроить на хобби, то это уже много:)
водщем без логического анализатора не разобрался бы. Та библиотека что у меня есть работает так с ключиком ТМ (по диаграммам анализатора):
1) контроллер (ведущий) генерирует сигнал "ресет" с какойто периодичностью
2) если считать ключик ТМ (ведомый), то ключик выдает - "приветствие" после очередного "ресет" от контроллера
3)ведущий отправляет команду SEARCH ROM (ПОИСК ПЗУ) код FOh
4)ведмый выдает Family Code section from ROM=1
5) ведмый выдает ROM CODE section from ROM=XXXXXX (6 байт серийого номера ключика)
а контроллер СКД работает со считывателем Proximity таким образом (по диаграммам анализатора):
1) контроллер (ведущий) генерирует сигнал "ресет" с какойто периодичностью
2) если приложить ключ к считывателю(ведомый), то считыватель выдает сигнал - "приветствие" после очередного "ресет" от контроллера
3)контроллер посылает READ ROM command =33h
4)ведмый отвает Family Code section from ROM=1
5) ведмый отвает ROM CODE section from ROM=XXXXXX (6 байт серийого номера ключика)
когда подключаю считывател проху к ардуине с происходит следующее (по диаграммам):
1)ардуина (ведущий) генерирует сигнал "ресет" с какойто периодичностью
2)если приложить ключ к считывателю(ведомый), то считыватель выдает сигнал - "приветствие" после очередного "ресет" от контроллера
3)ведущий отправляет команду SEARCH ROM (ПОИСК ПЗУ) код FOh
4) считыватель Прокси - молчит
Все это наводит на мысль, что прокси-считыватель не понимает комманду SEARCH ROM (ПОИСК ПЗУ) код FOh, а прикидывается "таблеткой" в упрощенном варианте.
И действительно приложив ключик к Прокси считывателю, получаем приветствия от считывателя, отправляем считывателю запрос - READ ROM command =33h. Дальше даю комманду считать 9 байт.
первый считанный байт = 1 это Family Code section from ROM=1, отальные 8 байт - бред. Я уже незнаю, что и делать.
Первое что приходить в голову:
То есть попытатся максимально вопсроизвести поведение " контроллер СКД работает со считывателем Proximity таким образом" в пунктах 1-3, дальше если анализатор покажет что и дальше все идет по тому же сценарию (видны ответы такие как в 4-5, тогда пытатся их читать)
Первое что приходить в голову:
То есть попытатся максимально вопсроизвести поведение " контроллер СКД работает со считывателем Proximity таким образом" в пунктах 1-3, дальше если анализатор покажет что и дальше все идет по тому же сценарию (видны ответы такие как в 4-5, тогда пытатся их читать)
вобщем сделал как вы сказали. Вот код
if ( ds.reset()) {
ds.write(0x33);
for( i = 0; i < 8; i++) addr[i]=ds.read();
for( i = 0; i < 8; i++) {Serial.print(addr[i],DEC);
Serial.print(" ");}
Serial.println();
}
На анализаторе видно как считался сначала код Family=1, а потом 6 байт номер ключика - 11107850., потом СRC=7
Но на экране высвечивается- 1 10 126 169 0 0 0 7
Чтобы это могло быть? Кстати библиотека при чтении ключика из примера http://robocraft.ru/blog/arduino/118.html не использует функцию read(). Может функция коряво написана?
На анализаторе видно как считался сначала код Family=1, а потом 6 байт номер ключика - 11107850., потом СRC=7
Но на экране высвечивается- 1 10 126 169 0 0 0 7
Чтобы это могло быть? Кстати библиотека при чтении ключика из примера http://robocraft.ru/blog/arduino/118.html не использует функцию read(). Может функция коряво написана?
1 - Family
10 - младший байт номера ключа (0x0A)
126 - второй байт номера ключа (0x7E)
169 - третий байт номера ключа (0xA9)
Три нуля - три старших байта
7 - CRC
Объединяем номер ключав одно число, получаем 0xA97E0A или как раз 11107850 в десятичной системе.
Для начала прикрепленная тема форума :) Вставка программного кода в тему/комментарий
На анализаторе видно как считался сначала код Family=1, а потом 6 байт номер ключика - 11107850., потом СRC=7
Я правильно вас понял что, с точки зрения анализатора на шине теперь все выглядит точно так же как и при работе с СКД? То есть осталось только "правильно прочитать ардуиной", а сам ключь уже отсылается верно.
Объединяем номер ключав одно число, получаем 0xA97E0A или как раз 11107850 в десятичной системе.
Ага. Значит рак на горе уже свистнул, только мы не сразу поняли это ;) Выходит задача уже решена :)
очевидно так. Нечеловеческими усилиями :):) Тем не менее победа. Да и другим будет урок. Всем спасибо!
PS: кстати сам дошел до этого. Дошло до того что начал анализировать осцилограмму, раскладывать по битам... Решил доложиться о прогрессе, а вы опередили
очевидно так. Нечеловеческими усилиями :):) Тем не менее победа.
Да ладно. Обычное вазявканье/выяснение. Многие думаю что работа программиста это "придумывать и писать код". Ан нет :), иногда до 80% времени занимает "ну почему же зараза не работает". Так что это был совершенно обычный процесс разработки.
А в вашем случае еще и практически "без шанса проиграть". Только руки не опускать и все. Условия практически тепличные.
1. Есть устройства которые работают и нужно просто "воспроизвести". То есть у вас 100% уверенность в железе и просто нужно сыграть в игру "найди отличия".
2. У вас есть анализатор.
А вот представте что СКД у вас нет. Работает ли вообще считыватель - не ведомо. Анализатора нет.
Тогда нужно брать вторую дуину и на ней сооружать примитивный анализатор (да и это тоже время). Причем неизвестные добавляются (нет гарантии что сколхозенный анализатор правильно работает). А могло быть еще печальней - и второй дуины нет. Только одна и считыватель.
Тогда извращатся и ей же бытатся логгировать "что там на шине происходит...". И опять гадать "а не мешает ли это нормальной работе считывающего кода..."
И ничего... и в таких условиях "расковыриваются, ломают голову и догадываются...". Более того именно такие условия являются более привычными для самодельщиков. Когда нет проф. диагностического оборудования и кучи железа для эксперементов :)
Да и другим будет урок. Всем спасибо!
"Ветер слева будет мне уроком: Я на срез выскакиваю боком." (Гимн корабельных истебителей)
Ладно про других, а для вас урок в чем состоял-то? ;) Честно, не вижу я тут ничего "особо поучительного". Что помогло бы избежать подобных возявканий в будущем.
P.S. Надеюсь теперь понятно, почему вызвает нездоровый смех, когда где-то видишь от заказчика "да там все просто, для программиста на 15-ть минут работы". Забывают что написать правильно строчку коду может занять 2 недели и три банки кофе :) И это совсем не означает "плохой программист".
согласен с "тепличными условиями". Просто всему есть обьяснение.
Для опытного программиста это всего лищ очередная галочка, что мозги не усохли, квалификация в норме. Как для меня - так с анализатором и протоколом 1-варе я столкнулся первый раз в жизни...
Для опытного программиста это всего лищ очередная галочка, что мозги не усохли, квалификация в норме. Как для меня - так с анализатором и протоколом 1-варе я столкнулся первый раз в жизни...
Так эта ситуация "в первые в жизни" - это постоянное состояние. Что опытного, что нет. И программист никогда из него не выходит (если речь не про быдлокодера). В каждом новом проекте/следующем этапе есть новая библиотека, железка, API, протокол, методика, инструмент... Осваивать что-то новое - нужно постоянно. В этом и проклятие професии (с возрастом это трудней) и счастье. Поэтому, на определенном уровне развития для программиста становятся важны не конкретные знания, а привычки/методология как разбиратся с новыми проблемами.
Так что если надеетесь что "вот освоюсь и все пойдет как по маслу" - зря ;)