1 проводной интефейс для тиньки
- Войдите на сайт для отправки комментариев
При работе с тинькой 13 возникает проблема узнать какие то значения для корректировки программы, но памяти мало, выводы ограничены и возникла следующая мысль:
с одного из свободных выводов отсылать инфу по 1 проводному интерфейсу. 1wire библиотека здесь не подойдет изза ограниченного размера флеша. отсылать инфу не проблема. например отправка 2 байт например значений с АЦП
void SendByte(int c){ for(byte i=0;i<16;i++) { if (c & 0x80) wire_on;; else wire_off; c <<= 1; delay(2); //скорость можно конечно и увеличить } }
тинька будет подключена к меге 8 с жк дисплеем nokia 1202 для отображения инфы
предполагаю посылка будет выглядеть так:
первые 3 бита будут идентификаторами того что мы отсылаем
следующие 2 байта данные.
мега в зависимости от идентификатора делает следующие функции:
например:
1. ИД = 1 : Переход в нужные координаты дисплея, координаты находятся в данных: 1 байт X, 2 байт Y
2. ИД = 2 : Вывод значений данных на дисплей
3. ИД = 3: Вывод символа по ASCII кодировке. номер по ASCII находятся в данных
4. ИД = 4: Очистка дисплея
это самое основное. жду ваших предложений
Я сделал так http://homes-smart.ru/index.php/oborudovanie/bez-provodov-433-315mgts/besprovodnoj-datchik-temperatury-i-vlazhnosti-na-baze-radiomodulej-433-315
Там есть примеры отправки и приема данных на страничке алгоритма.
если правильно написал получается следующее
занимает 318 байт. пока терпимо, но лучше бы меньше
для приемной стороны пока незнаю
но еще не сделал функцию объеденения координат из 2 байт в инт
спасибо за пример. постараюсь разобраться в нем, но судя по коду боюсь места она занимает много, и для основной программы места не останется
Я сделал так http://homes-smart.ru/index.php/oborudovanie/bez-provodov-433-315mgts/besprovodnoj-datchik-temperatury-i-vlazhnosti-na-baze-radiomodulej-433-315
Там есть примеры отправки и приема данных на страничке алгоритма.
к сожалению коды просто огромны даже для меги8
но в тиньке даже не будет работать (если я правильно понял, связано с прерываниями), не то что не влезет
А чего тинька должна отправлять конкретно ? состояние аналогового входа ? я насчитал 466 байт всего для этого )
Я сделал так http://homes-smart.ru/index.php/oborudovanie/bez-provodov-433-315mgts/besprovodnoj-datchik-temperatury-i-vlazhnosti-na-baze-radiomodulej-433-315
Там есть примеры отправки и приема данных на страничке алгоритма.
к сожалению коды просто огромны даже для меги8
но в тиньке даже не будет работать (если я правильно понял, связано с прерываниями), не то что не влезет
отправлять может без проблем, принимать - да не хватит,для этого подойдет только аттини85
отправлять уже описал что и где выводить на дисплей, очищать дисплей
данные могут быть любые до 2 байт размером. там и ацп, и шим в данный момент, расчетные данные. на ардуине это проще, в терминал отправил и посмотрел.
принимать тиньке ничего не надо. делается устройство для отладки программ на тиньке в железе, когда нужно знать данные с которыми работает тинька. тинька отправляет, мега принимает и выводит на дисплей
А чего тинька должна отправлять конкретно ? состояние аналогового входа ? я насчитал 466 байт всего для этого )
вы скомпилировали для тиньки и у вас получилось 466 байт? приведите код пожалуйста. может я не те примеры смотрел (честно сказать не все посмотрел, только 2)
-вот функция пример отправки в троичном коде ,она чуть больше,чем я написал ранее(там двоичный код) ,тут где-то выйдет байт 550..
честно сказать не понял про троичный код, почему он троичным называется?
компилировали в чем? в CVAVR или в самой ардуине?
проверил свой код в CVAVR, получилось конечно меньше
почему вы склоняетесь к троичному коду? в чем его преимущество?
Число раскладывается на троичный код и передается.
пример под avr-gcc ,но в арудине тоже будет работать,тут всего лишь функцию _delay_us надо заменить.
Троичный - просто пример ,взятый из библиотеки RemoteSwitch..
дайте пожалуйста ссылку почитать в чем его преимущество. хоть понять если смысл в такой простой задаче применения троичного кода
нашел следующее, незнаю вы об этом или нет
http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4
Не так просто передать данные ,тут нужна синхронизация и необходимо продумать прием
Я продложил готовый вариант
Не обязательно использовать троичный ,можно и двоичный -под оба варианта есть библиотеки-приемники
да над приемом я еще думаю. попробую получше разобраться с вашим примером
взял пример отправки данных на ардуине двоичным протоколом
на меге8 он компилируется
на тиньке нет, да даже бы если скомпилировалось врядли бы влезло
тот код что вы давали в 8 посте вообще не нашел, это кусок из библиотеки?
двоичный протокол вроде хорошо подходит. могли бы вы дать код для двоичного протокола как в 8 посте
Для двоичного протокола на базе RCswitch:от 0 до1048576. ( 220.)
подходит отлично. 16 бит данные, 4 бита идентификатор, ну это конечно если я правильно понял
P.S. да нет. как хотел не подойдет. в библиотеке сделано по другому
Если использовать через библиотеки,то не подойдет, вот чистый вариант на си подходит..
Пример из 8 сообщения там же имеется под заголовком "Пример подпрограммы для отправки данных на чистом Си (Передатчик)"
Передавать можно всей кучей в 20 битах ваши данные,просто собрав,а потом разбив биты
спасибо. но решил уйти от тиньки
я тут прикинул зачем мне нужна вообще тинька. выбор основан был на следующих моментах:
+ компактность
+ цена 15 рублей
+ под мелкие задачи лучше использовать тиньку, чтобы не было стрельбы из пушки по воробьям
+ внутренний опорник на 1.1В. очень удобно для измерения тока, где значения напряжения на шунте очень маленькие
- 2 аппаратных шима, к тому же совпадают с выводами программирования, поэтому требуется отключать от этих выводов оконечные устройства
- мало ножек
- нет аппаратного UART
- мало памяти
но мега 8 по многим параметрам выигрывает
+ размер совсем немного больше тиньки 13
+ цена 27 рублей всего
+ аппаратный UART (удобно отправить в терминал и посмотреть что происходит внутри)
+ много ножек
+ 3 аппаратных шим
+ достаточно памяти
Вот думаю зря я вооще к тинькам 13 полез. Хотя поработав с тиньками теперь проще писать программы для меги, код получается компактнее, с жк дисплеем работать теперь намного проще
поэтому тему закрываю. спасибо за ответы
Никто не мешает отлаживать на одном м/к,а использовать на другом м/к..
Никто не мешает отлаживать на одном м/к,а использовать на другом м/к..
тут сложнее. опорник разный. хотя можно конечно пересчитать при переходе на другой камень. но не нравится что когда заливаешь прошивку приходится отключать устройства. жутко неудобно
Здравствуйте!
Пробую текст для Си из поста номер 8 http://arduino.ru/forum/programmirovanie/1-provodnoi-intefeis-dlya-tinki...
скомпилировать в Кодевижине и получаю ошибки:
Error: F:\Progger\AVR\2262\2313\2262_2313.c(19): undefined symbol '_BV'
Error: F:\Progger\AVR\2262\2313\2262_2313.c(23): must declare first in block
Error: F:\Progger\AVR\2262\2313\2262_2313.c(27): must declare first in block
Error: F:\Progger\AVR\2262\2313\2262_2313.c(27): undefined symbol 'uint8_t'
Error: F:\Progger\AVR\2262\2313\2262_2313.c(29): undefined symbol 'i'
Error: F:\Progger\AVR\2262\2313\2262_2313.c(29): undefined symbol 'i'
Error: F:\Progger\AVR\2262\2313\2262_2313.c(29): undefined symbol 'i'
Error: F:\Progger\AVR\2262\2313\2262_2313.c(41): declaration syntax error
Error: F:\Progger\AVR\2262\2313\2262_2313.c(41): '(' expected
Error: F:\Progger\AVR\2262\2313\2262_2313.c(45): declaration syntax error
Первым делом - первая ошибка в этой строке 19: DDRB |= _BV(RC_BIT);
Как её исправить? Я понимаю, что компилятор не понимает команду _BV. Как "звучит эта команда на Си для AVR?
Ну и следующие тоже подскажите, пожалуйста, что б сто раз не спрашивать.
Спасибо.
AVL4ARDUINO, это макрос установки бита. Замените на DDRB |=1<<RC_BIT;
Спасибо, я уже сам додумался и написал так DDRB |= 1<<(RC_BIT);
Но Вы меня опередили. Спасибо!
Разбираем дальше?
Следующая ошибка в строке 23:
Error: F:\Progger\AVR\2262\2313\2262_2313.c(23): must declare first in block
unsigned short repeats = 1 << (((unsigned long)data >> 20) & 7); Чего тут не так?
Думаю, что проблемка в предыдущей строке: data |= 3L << 20;
А именно 3L не нравится. Да? Что это за data и 3L вникаю.