ATtiny13 Передатчик 433МГц
- Войдите на сайт для отправки комментариев
Сб, 28/01/2017 - 02:10
Пытаюсь использовать ATtiny13 как пульт, код вроде оптимизировал но все равно 2 082 байт.
что еще можно изменить?
#include <RCSwitch.h> #include <avr/io.h> #include <util/delay.h> RCSwitch mySwitch = RCSwitch(); int main( void ) { mySwitch.enableTransmit(3); while(1) { mySwitch.send(11235377, 24); _delay_ms(500); } return 0; }
Хотел по кнопке отправлять сигнал
#include <RCSwitch.h> #include <avr/io.h> #include <util/delay.h> const int button = 3; RCSwitch mySwitch = RCSwitch(); int main( void ) { mySwitch.enableTransmit(0); pinMode(button, INPUT); } void loop() { if(digitalRead(button) == LOW){mySwitch.send(11235377, 24);} _delay_ms(500); }
Код уже весит 640 байт а функционал не пашет(( Где оступился?
Попробуйте _delay_ms(500); в фигурные скобки перенести, а не после них. А то получается Вам нужно держать кнопку, чтобы сработало наверняка. А если перенести, то будет в любое время от короткого нажатия.
Попробуйте _delay_ms(500); в фигурные скобки перенести, а не после них. А то получается Вам нужно держать кнопку, чтобы сработало наверняка. А если перенести, то будет в любое время от короткого нажатия.
?
Да
Да
я просто не понимаю почему кнопка не срабатывает, цепляю через резюк на 10к к земле дальше на пин что в коде и тишина
А сразу не заметил, а зачем Вы используете loop, без setup (как в ардуино), если уж оттуда пример, то надо main убирать, или в main так и делать, как там:
Хотя может это не главное, и в ардуино ide это предусмотрели, а почему у Вас enableTransmit, то 0, то 3, нужно определиться, как именно у Вас работает.
А кнопку можно подключить так: pinMode(button, INPUT); заменить на pinMode(button, INPUT_PULLUP);, а пин 3 на кнопку, а от кнопки к земле без резистора, только не перепутайте ничего. Потом надо не забывать, что если вдруг сделаете этот пин на выход, то уже на землю или питание замыкать нельзя, а то сгорит.
Да
тишина((( может что то не так?
тишина((( может что то не так?
Причин очень много, у Вас без кнопки то точно все работает? С mySwitch.enableTransmit 0 или 3? Может кнопка не на 3 пине, и так как Вы подключили будет отправлять сигнал даже без нажатия кнопки, так как когда кнопка не нажата, то пин висит в воздухе и принимает наводки, а там то Low, то High будет, то есть он просто сам будет отправлять, поэтому надо подтягивающий резистор внешний или внутренний, как выше написал.
А сразу не заметил, а зачем Вы используете loop, без setup (как в ардуино), если уж оттуда пример, то надо main убирать, или в main так и делать, как там:
код больше становиться весом потому что
тишина((( может что то не так?
Причин очень много, у Вас без кнопки то точно все работает? С mySwitch.enableTransmit 0 или 3? Может кнопка не на 3 пине, и так как Вы подключили будет отправлять сигнал даже без нажатия кнопки, так как когда кнопка не нажата, то пин висит в воздухе и принимает наводки, а там то Low, то High будет, то есть он просто сам будет отправлять, поэтому надо подтягивающий резистор внешний или внутренний, как выше написал.
резистор стоит, открыт последовательный порт и смотрю прием но что с кнопкой что просто отправка сигнала тишина, а код в дуинке пашет
Если как я написал, и как Вы, разница в размере большая, значит точно, в Вашем случае, код loop просто удаляется компилятором, потому что не используется в main, он существует просто как внешняя функция, но так как не используется, удаляется, а поэтому и не выполняется, и не работает. Раз не помещается, значит Вам надо вручную делать отправку нужного пакета без библиотеки, это не очень сложно, зато занимать будет мало места. Можно просто менять состояния пина на передатчик low/high с delay, в цикле, главное разобраться с длительностями. Также попробуйте другие библиотеки, RemoteSwitch, и тому подобное, может что-нибудь влезет в attiny13
Кнопка на 3 передатчик на 0
в этом случае код весит 640 байт
а если поставлю void setup 2 262 байт
код работающий на ардуинке
Потом надо не забывать, что если вдруг сделаете этот пин на выход, то уже на землю или питание замыкать нельзя, а то сгорит.
а не могли бы пояснить
Если как я написал, и как Вы, разница в размере большая, значит точно, в Вашем случае, код loop просто удаляется компилятором, потому что не используется в main, он существует просто как внешняя функция, но так как не используется, удаляется, а поэтому и не выполняется, и не работает. Раз не помещается, значит Вам надо вручную делать отправку нужного пакета без библиотеки, это не очень сложно, зато занимать будет мало места. Можно просто менять состояния пина на передатчик low/high с delay, в цикле, главное разобраться с длительностями. Также попробуйте другие библиотеки, RemoteSwitch, и тому подобное, может что-нибудь влезет в attiny13
RemoteSwitch пробовал, тишина.
Ребят, перекопал инет, хоть кто нибудь собирал простой пульт с одной кнопкой на Attiny 13? библиотека
RCSwitch.
Отзовитесь пожалуйста(((
Не знаю, что у Вас за _delay_ms, но если стандартный из атмеловской библиотеки, то он 500 не бывает. Максимально, что можно, это 262.14 ms / F_CPU_M, где F_CPU_M таковая частота в Мегагерцах.
Попробуйте исправить. Если Ваш код с main не заработает, опубликуйте свежую версию - посмотрим.
Не знаю, что у Вас за _delay_ms, но если стандартный из атмеловской библиотеки, то он 500 не бывает. Максимально, что можно, это 262.14 ms / F_CPU_M, где F_CPU_M таковая частота в Мегагерцах.
Попробуйте исправить. Если Ваш код с main не заработает, опубликуйте свежую версию - посмотрим.
Так или нужно прописывать пределитель?
Ну, я не знаю. Вот Вы написали во второй строке 1,2МГц, а реальная-то частота какая? Она должна совпадать. На какой частоте Ваша тинька работает?
Ну, я не знаю. Вот Вы написали во второй строке 1,2МГц, а реальная-то частота какая? Она должна совпадать. На какой частоте Ваша тинька работает?
на 1.2 и работает
Потом надо не забывать, что если вдруг сделаете этот пин на выход, то уже на землю или питание замыкать нельзя, а то сгорит.
а не могли бы пояснить
Как я написал, пин у вас будет на вход, и когда нажимаете на кнопку, будет замыкаться на землю, всё как положено. Но если вдруг в будущем Вы измените код, и этот пин у вас будет на выход OUTPUT + digitalWrite(HIGH), и Вы забудете, что у вас на этом пине кнопка и нажмете ее, то произойдет короткое замыкание и сгорит или один пин, или микроконтроллер. Поэтому при тестировании разных скетчей, надо не забывать об этом.
Ув.ТС! Код ваш "не жужжит и в дырку не лезет" потому, что Вы подключаете очень толстую библиотеку.
Я никогда такой не пользовался, но пять мин потратил.
В программе своей вы используете ТОЛЬКО сенд кода.
если по шагам пройти все, что делает библиотека это превращает ваше числов 24 бита, дополнив старшими нулями, а потом посылает на передатчик.
"0"- 350 мкс HIGH потом 1050 мкс LOW
"1" - 1050 мкс HIGH потом 350 мкс LOW
и ВСЁ!!!! для этого не нужно подключать никакую библиотеку!
я с экрана напишу, без проверки, ошибки сами найдете,, если что: (всякие номера ваших пинов я не проверял)
RemoteSwitch пробовал, тишина.
А Вы как пробовали? Там надо с помощью тестового скетча через приемник получить код, который хотите отправлять, записать куда-нибудь и используя эти числа, другим скетчем отправлять. Собственно как Вы наверное и делали с RCSwitch, только чисел по-больше.
и, конечно, библиотечные digilWrite() и подобное нужно наменить на прямое обращение.
Все есть в ветке про тиньку13, которая "прилеплена" вверху раздела.
Спасибо что дали понять что библиотека может быть тяжелый для всего этого. Даже если код компилируется?
а кнопку нужно обьявлять ? boolean button_is_pressed; ?
#define BTN_PIN 0
Я же говорю, код компилируется, но loop выбрасывается из кода, чтобы это проверить, попробуйте переименовать loop в любой набор букв abcdefg, и скомпилировать, ничего не изменится в размере, потом скопируйте 10 раз этот loop и все назовите по-разному loop1, loop2, loop3 и размер останется точно таким же. Или вообще удалите loop из своего примера, размер останется такой же, что и с loop.
Кнопку объявлять необязательно, можно также в if писать сразу digitalRead
терпение есть истино христианская добродетель.
Я, конечно, православный, но выкрест, если понимаете, о чем я.
Не чувствую в себе силы объяснять больше, чем может дать гугль, да благославит Б..г его, и апостолы его в Википедии.
ЗЫ: Вы в самом деле не способны применить без сторонних советов то, что я написал?
.... сорри за невнятность.... алкоголизм == часть духовных скреп....
...но это ведь пи...дец!! как мне кажеться или кажеццо, х..й его знает про современную грамматику.
у меня приемник с примерами не работает. передатчик работает-проверял. скиньте пожалуйста тест-передатчик шлет код-приемник принимает в сериал порта
Я же говорю, код компилируется, но loop выбрасывается из кода, чтобы это проверить, попробуйте переименовать loop в любой набор букв abcdefg, и скомпилировать, ничего не изменится в размере, потом скопируйте 10 раз этот loop и все назовите по-разному loop1, loop2, loop3 и размер останется точно таким же. Или вообще удалите loop из своего примера, размер останется такой же, что и с loop.
Кнопку объявлять необязательно, можно также в if писать сразу digitalRead
loop менял, компилируется но опять тишина...
ЗЫ: Вы в самом деле не способны применить без сторонних советов то, что я написал?
.... сорри за невнятность.... алкоголизм == часть духовных скреп....
...но это ведь пи...дец!! как мне кажеться или кажеццо, х..й его знает про современную грамматику.
я рад вашим бурным эмоциям но не работает, я просто не знаю куда копать, модуль работает, с питанием все норм, тинька шьется, вроде все норм
опишите свою цель просто русским языком, без терминов.
Обе стороны и передачу и прием. У меня, само-собой, дома есть все типы железок и модулей.
Я сделаю по-своему, у меня все равно творческий кризис и других дел нет, и расскажу как это нужно делать, ОК?
Объяснять ничего не буду, так как без мата - не получится. ;).
опишите свою цель просто русским языком, без терминов.
Обе стороны и передачу и прием. У меня, само-собой, дома есть все типы железок и модулей.
Я сделаю по-своему, у меня все равно творческий кризис и других дел нет, и расскажу как это нужно делать, ОК?
Объяснять ничего не буду, так как без мата - не получится. ;).
Просто есть Attiny 13, есть код считанный с ду пульта, нужно этот код отправлять через модуль 433Мгц если нажата кнопка.
По сути такой же ду с одной кнопкой на Attiny 13. и так и сяк уже, и Loop убирал и оптимизацию делал, и проверял ваш код только немного изменив с кнопкой и все равно никак, и просто пытался вещать код без кнопки.
на ардуинке приемник для проверки, и каждый раз когда Attiny 13 прошиваю, смотрю в монитор порта и тишина((
у меня все равно творческий кризис и других дел нет
и просто для размышления тогда, как бы дольше можно было использовать батарейку типа CR2032 посылая Attiny в сон, ну а при нажатие кнопки просыпалась бы и отправляла код ду пульта
сорри за май френч, но Вы можете написать то, что спрошено?
Кого е..бет происхождение кода?
Есть тинька13 - передатчик, должна что-то передать при неких условиях, есть некая ардуина - приемник, должна что-то принять и, поскольку я буду моделировать, то написать в порт или зажечь лампочку. ВСЕ МЛЯ!!!!!!
Если есть требования к протоколу, чтобы неведома херня тоже могла принять эту передачу, то такую задачу Вы станете решать сами, когда писька волосотая станет. На таком языке понятно?
у меня все равно творческий кризис и других дел нет
и просто для размышления тогда, как бы дольше можно было использовать батарейку типа CR2032 посылая Attiny в сон, ну а при нажатие кнопки просыпалась бы и отправляла код ду пульта
ВОт про такое - сколько угодно расскажу. только завтра, после пива, ОК?
сорри за май френч, но Вы можете написать то, что спрошено?
Кого е..бет происхождение кода?
Есть тинька13 - передатчик, должна что-то передать при неких условиях, есть некая ардуина - приемник, должна что-то принять и, поскольку я буду моделировать, то написать в порт или зажечь лампочку. ВСЕ МЛЯ!!!!!!
Если есть требования к протоколу, чтобы неведома херня тоже могла принять эту передачу, то такую задачу Вы станете решать сами, когда писька волосотая станет. На таком языке понятно?
Да *ля, говорю есть Attiny 13, просто должна отправлять команду по нажатию кнопки
Нет приемников, лампочек просто тупо отпралять 11235377, 24bit по нажатию
и просто для размышления тогда, как бы дольше можно было использовать батарейку типа CR2032 посылая Attiny в сон, ну а при нажатие кнопки просыпалась бы и отправляла код ду пульта
ВОт про такое - сколько угодно расскажу. только завтра, после пива, ОК?
ок))
так, пока не уснул....
нет понятия отправить число.
FS1000 это просто генератор на 433 и что-то та МГц.
по линии "дата" он включаеццо и выключаеццо.
"Передача" числа, или кода, как Вам нравиться, состоит в манипуляции вкл и выкл.
Откройте же, к екарной матери, ТЕКСТ своей библиотеки!!!!
В ней есть ТРИ типовых способа кодирования нуля и единицы и возможность пользователю указать собственный.
----------------------
Так что НЕТ, мля, НЕТ НЕТ и НЕТ! способа "просто передать код".
Поэтому я и написал, что я напишу работающий передатчик и приемник, передатчик - на тиньке, приемник - на любой Ардуинке, и они достигнут огразма одновременно.
------
НО!!!!
Если Вам нужно, чтобы некое иное устройство, тоже поняло переданный код, то нужно иметь уровень знаний сильно выше Вашего.
Или, начиная с завтрашеного дня, я укажу путь, по которому можно достичь цели. Но без дискуссий и ссылок, что "мне тут на форуме сказали".
Я - пишу что и где сделать, Вы делаете. Полный нацизм! ;) ;) ;)
Мазл тов!
----------------------
Так что НЕТ, мля, НЕТ НЕТ и НЕТ! способа "просто передать код".
Поэтому я и написал, что я напишу работающий передатчик и приемник, передатчик - на тиньке, приемник - на любой Ардуинке, и они достигнут огразма одновременно.
------
думаю будет достаточно
loop менял, компилируется но опять тишина...
Я это написал, не для того чтобы заливать в микроконтроллер, а для того, чтобы Вы поняли, что этот код не доходит до микроконтроллера, а выбрасывается как комментарий. Именно поэтому он мало занимает места, потому что loop выбрасывается, а main почти пустой остается. Вы же видите размер после компиляции без загрузки, поэтому я и написал, скопируйте loop 10 раз и размер останется тот же самый, что с loop, что без. Вам в чужой код осталось кнопку через if обернуть и setup прописать как и раньше, заработает если пакеты правильные. Правда еще лучше бы обернуть в for и раза 3 отправлять, а не один раз, хотя из-за того что кнопка какое-то время будет нажата, то он сам несколько раз отправится, только в конец надо задержку поставить, около 10 ms, а не 500 как раньше.
loop менял, компилируется но опять тишина...
Я это написал, не для того чтобы заливать в микроконтроллер, а для того, чтобы Вы поняли, что этот код не доходит до микроконтроллера, а выбрасывается как комментарий. Именно поэтому он мало занимает места, потому что loop выбрасывается, а main почти пустой остается. Вы же видите размер после компиляции без загрузки, поэтому я и написал, скопируйте loop 10 раз и размер останется тот же самый, что с loop, что без. Вам в чужой код осталось кнопку через if обернуть и setup прописать как и раньше, заработает если пакеты правильные. Правда еще лучше бы обернуть в for и раза 3 отправлять, а не один раз, хотя из-за того что кнопка какое-то время будет нажата, то он сам несколько раз отправится, только в конец надо задержку поставить, около 10 ms, а не 500 как раньше.
спасибо большое, я очень ценю то что вы расписываете, и глубже погружаюсь в это, буду расти. Спасибо что направляете, тюкаете. Сейчас посмотрю что тут
вот так же много пробовал но почему то все равно не транслирует(( не пойму в чем дело. модуль вроде пашет тинька тоже
кнопка я так понимаю на землю?
Да, может частота не та, можно проверить, подключить вместо передатчика светодиод через резистор, в скетче сделать blink 1 сек, и проверить точно ли 1 секунду горит, одну не горит, а если 0,5 сек или 2 сек и т.д., значит что-то не так.
Да, может частота не та, можно проверить, подключить вместо передатчика светодиод через резистор, в скетче сделать blink 1 сек, и проверить точно ли 1 секунду горит, одну не горит, а если 0,5 сек или 2 сек и т.д., значит что-то не так.
наконец то я получил данные))ураа! нооо
я получаю Received 8388607 / 23bit Protocol: 6
куда копать?
Я дико извиняюсь, но если вы используете свой main, то не происходит init и не инициализируются таймеры и не работают задержки. Используйте стандартные setup и loop. Без библиотеки и с ними места хватит. И работать будет с правильными таймингами.
Да, может частота не та, можно проверить, подключить вместо передатчика светодиод через резистор, в скетче сделать blink 1 сек, и проверить точно ли 1 секунду горит, одну не горит, а если 0,5 сек или 2 сек и т.д., значит что-то не так.
работала работала потом перестала посылать что то и теперь при залитии кода ошибка
avrdude: stk500_getsync(): not in sync: resp=0x15
спалил что ли, кнопка через резюк 10к стоит
Вот код, как и обещал.
Он проверенно работает на тиньке. Ядро для тиньки взято из ветки про нее. Там есть ссылка, я пользую то ядро, где нормально переключаются частоты.
Переданный код ловится на Леонардо, программой из примера библиотеки RCswitch. Библиотека была взята утром, с гитхаба, самая свежая.
пин передатчика - 3, кнопки - 0, светодиод мне нужен был для наглядности - на 4ом пине (нумерация PB0,1,2,3,4...)
Что еще? Антидребезг возможно неочевиден, он без миллис, просто на колисестве повторов. Осцилографом смотришь и определяешь к-во повторов на своей частоте.
----
Еще - это китайское говно (FS1000a) вымотало мне всю душу!!!! загоняешь в передатчик просто меандр 100+100 мкс, а приемник его нихрена не видит, пока не попляшешь с передатчиком вокруг - просто поворачивая его во все стороны.
Короче Вам понадобятся антенны - смотрите в поиске - там много вариантов есть.
Все, код - ниже, комменты - завтра, если что непонятно. Код, по нажатию кнопки (на землю) 10 раз передает число в эфир.
=======================
Да, Вы вроде просили на 1200 КГц? я так собирал.
Три первых ифа, после объявления переменных - это и есть новый тип дебонсера. Я к такому проникся ;). если не понятно, как он работает - то спрашивайте - я завтра объясню.
---
Для отладки я использовал осцил и логанализатор. Без них я бы не понял причину. Только логанализатор дал понять, что библиотека хочет множественную передачу с повторами.
Короче коллеги! Не жалейте 1000р на DSO138 и 300р на SaleaeLogic! После паяльной станции - самая нужная мелочевка!
7am, ВНИМАНИЕ!!! хочу предостеречь от порчи микросхемы, в коде wdrakula если Вы замените только пины 0 на 3, а 3 на 0, то этого недостаточно, так как в строках
24
#define TX_HI() (PORTB |= 0B00001000)
25
#define TX_LO() (PORTB &= 0B11110111)
так сказать тоже есть пин, и он останется также 3, а не заменится на 0.
Для 0 tx пина, видимо надо так:
24
#define TX_HI() (PORTB |= 0B00000001)
25
#define TX_LO() (PORTB &= 0B11111110)