для тини13, у меня две кнопки пин3 и пин4 и один выход порт 0. Нужно при нажатом пин3 горит светодиод на порту0 а при отпускании гаснет, следующий алгоритм при нажатом пине3 нажимаем пин4 и светодиод на порту 0 через 20сек должен погаснуть
Вот прошивка по твоему алгоритму... МК тактируется на заводских установках (фьюзы прошивать не нужно).
Карма: -2
Рейтинг сообщений: -166
Зарегистрирован: Вт мар 13, 2012 12:16:13 Сообщений: 4418 Откуда: Россия
Рейтинг сообщения:0
olegue писал(а):
В общих чертах, что такое протокол?
В общих чертах... слишком большое понятие... )) Протокол - это некое соглашение. Конкретно протокол передачи данных — набор соглашений интерфейса логического уровня, которые определяют обмен данными между различными программами - https://ru.wikipedia.org/wiki/Протокол
NStorm писал(а):
Банально функции написать для отправки бита и пакета... Таймеры освойте... попробуйте на _аппаратном_ ШИМ...
Какие ещё функции... ШИМ... и т.д. Это я специально для olegue написал, который ещё не до конца разобрался как вообще работает порт в МК.
olegue писал(а):
это мой уровень - это 100% попадание.
NStorm писал(а):
А вот принять сложнее будет. Надо будет выделить сигнал из мусора.
Вообще не проблема))
NStorm писал(а):
А еще нужна какая-то последовательность, для отделения данных от мусора.
Не нужна. В радиоэфире нет мусора. В радиоэфире есть шум))
NStorm писал(а):
Можно ИК-протокол какой-нибудь за основу взять.
Нельзя. Точнее можно, но будет работать через жопу.)) Ни один ИК-протокол не соответствует требованиям передачи по радиоканалу.
olegue писал(а):
не могу дать профессиональную оценку как NStorm
Эта типа шутка такая ? )) Да, смешно))
olegue писал(а):
получаю сигнал, измеряю длительность, если длительность соответствует, запоминаю в переменную получаю слещущий измеряю длительность....
Всё верно.
olegue писал(а):
а потом сравниваю с тем, кодом который должен быть.
Не потом, а сразу. Потом поздно будет))
1-получаю сигнал, измеряю длительность импульса: Если длительность соответствует, прибавляю в переменную +1. Если не соответствует, записываем в переменную 0 и переходим к пункту 1. Начинаем всё с начала)) 2-получаю сигнал, измеряю длительность импульса: Если длительность соответствует, прибавляю в переменную +1. Если не соответствует, записываем в переменную 0 и переходим к пункту 1. Начинаем всё с начала)) ... ... и т.д. ... ... когда в переменной будет число равное количеству "правильных" импульсов, выполняем команду (включаем реле) записываем в переменную 0 и переходим к пункту 1. Начинаем всё с начала))
Поправка)) В начале пакета нужна преамбула. Типа 101010101... Нафига ? А чтоб тинька сбросила переменную в 0 и перешла к пункту 1. В начало. А то ещё застрянет посередине цикла... и пропустит нужный пакет)) Ну или како-нибудь спец символ. Только это не разделитель данных. У нас данных нет. Это составная часть пакета. Хотя нет. Это скорее заголовок пакета. Так будет правильней))
всё))
короче... мы расписали работу обычного цифрового радиомодуля)) ничего нового мы не изобрели))
Карма: 13
Рейтинг сообщений: 80
Зарегистрирован: Сб май 21, 2016 11:04:52 Сообщений: 2231 Откуда: Беларусь
Рейтинг сообщения:0
Буду пробовать. Счас нужно понять как посчитать длительность входящего импульса Как раз думал заняться таймерами на тиньке. Вот с прицелом на это и буду их рассматривать.
Нельзя. Точнее можно, но будет работать через жопу.)) Ни один ИК-протокол не соответствует требованиям передачи по радиоканалу.
Я не говорил 1 в 1 взять. Но ту же самую идею с преамбулой и коцном передачи можно взять.
Цитата:
Какие ещё функции... ШИМ... и т.д. Это я специально для olegue написал, который ещё не до конца разобрался как вообще работает порт в МК.
И поэтому советовать как писать НЕ надо? Ардуино-стайл повторяющихся blink-delay? Надо сразу учиться нормально делать, а не через одно место. Функции элементарно освоить, они уже были тут местами в теме.
Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.
А если уж send_byte/send_packet дальше дописать, то и вообще нормальный вид будет.
Вид будет... а работать плохо будет)) Будет куча функций... функции выполняются за разное количество тактов процессора, в зависимости от выполнений условий... и т.д. А для передачи по радио в идеале нужно чёткий сигнал - постоянная длительность и пауза между импульсами, с высокой точностью. Это короче придётся ломать себе голову и считать такты процессора... писать на асме... добавлять всякие NOP... и т.д.
Пипец... нафиг оно надо)) Для таких задач есть аппаратный ШИМ. Который работает от кварца и не зависит от тактов процессора. На выходе имеем сигнал с абсолютной точностью (постоянная длительность и пауза между импульсами).
Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.
Бред какой-то. Функции за разное количество тактов... а delay_ms при этом используем. Сначала давай ногодрый простыней, какой там ШИМ аппаратный! А теперь функции говно, потому что ногодрыг, надо только аппаратный ШИМ. Где логика?
Карма: 13
Рейтинг сообщений: 80
Зарегистрирован: Сб май 21, 2016 11:04:52 Сообщений: 2231 Откуда: Беларусь
Рейтинг сообщения:0
У меня по работе с портами есть вопрос.
Вот есть кнопка настроенная на прерывание, по нажатию которой включается (инвертируется ) светодиод.
А если я вместо кнопки подам сигнал с генератора на к155ла3 , будет ли светодиод мигать реагируя на импульсы генератора? Если я нажимаю на кнопку то уровень на этой ножке меняется с высокого на низкий
А если подам с генератора, то на ногу придет либо высокий, либо его отсутсвие (высокого). Будет ли отсутсвие выского уровня расценено Тинькой как низкий?
Карма: 76
Рейтинг сообщений: 1150
Зарегистрирован: Пт мар 29, 2019 10:45:58 Сообщений: 2152 Откуда: Тюмень
Рейтинг сообщения:0
Цитата:
А если подам с генератора, то на ногу придет либо высокий, либо его отсутсвие (высокого). Будет ли отсутсвие выского уровня расценено Тинькой как низкий?
Выход у 155ЛА3 не может формировать Z-состояние… на выходе или лог 1, или лог 0. А значит МК будет реагировать на выход ЛА3 (генератор) как и на кнопку.
PS. Зачем реализовывать генератор на дополнительной микросхеме, когда МК и сам может формировать данный сигнал «генератора»?
_________________ Профессия нужна человеку, чтобы заниматься любимым делом, применять свои таланты и знания, приносить пользу другим людям.
Карма: 13
Рейтинг сообщений: 80
Зарегистрирован: Сб май 21, 2016 11:04:52 Сообщений: 2231 Откуда: Беларусь
Рейтинг сообщения:0
olegue писал(а):
Выход у 155ЛА3 не может формировать Z-состояние… на выходе или лог 1, или лог 0.
с вашей подачи почитал немножко про z состояние, но z состояние можно расспатривать как обрыв, т.е не включенную кнопку. Не понял для чего это здесь. Поясните.
Самсусамыч писал(а):
Зачем реализовывать генератор на дополнительной микросхеме, когда МК и сам может формировать данный сигнал «генератора»?
да, вопрос из рубрики, "А Что будет если...."
а еще подумал, где взять импульсы, что бы их например посчитать потом
Ну кнопка и есть "обрыв", пока она не нажата. Подтяжка к питанию или к земле - это уже не часть кнопки. А тут при том, что если "нет Z-состояния", то нет и "отсутствия высокого уровня". Когда на выходе 0 - это низкий уровень, к земле притягивается вывод. А кнопка в воздухе болтается в отличии от. Поэтому кнопку со стороны МК к + или - питания подтягивают, чтобы от наводок не было шума на входе.
Вывод порта МК сконфигурированный на вход (далее просто вход) не должен висеть в воздухе. Иначе он будет ловить любые наводки… вход в зависимости от требований необходимо подтянуть через резистор, или к общей шине GND, или к плюсу питания. К общей шине вход можно подтянуть только внешним резистором, а вот к плюсу питания, можно подтянуть как внешним, так и внутренним резистором (на выбор разработчика)… так вот в твоём случае (для кнопки), вход подтянут к плюсу питания и если кнопка не подсоединена или не нажата (что для входа МК одно и тоже), то МК на это не будет и реагировать. Что касается генератора на 155ЛА3… на выходе логического элемента 2И-НЕ всегда присутствует логический сигнал, или 0, или 1 – другого не дано. Таким образом твоё предположение, что на вход МК от генератора будет приходить «то на ногу придет либо высокий, либо его отсутсвие (высокого)» звучит не корректно, так как на вход МК от генератора на ЛА3 будет приходить периодически 1 и 0. Это говорит о том, что алгоритм будет отрабатываться на МК корректно – светодиод будет мигать.
_________________ Профессия нужна человеку, чтобы заниматься любимым делом, применять свои таланты и знания, приносить пользу другим людям.
Добавлено after 1 minute 37 seconds: без привязки по времени, не частоту.
Самое простое - программно в прерывании увеличивать некую переменную. Можно аппаратно, заведя сигнал на ногу T0 включить таймер на внешний клок и тогда МК аппаратно будет увеличивать регистр TMR0 на один каждый фронт.
Самсусамыч, есть. На вашем скрине даже. Пин 7 смотрите. И в ДШ прекрасно описан его режим работы по спаду или подъему.
Добавлено after 14 minutes 43 seconds: Чтобы включить этот режим, надо ногу PB2 (пин 7) переключить на вход и сделать TCCR0B = (1 << CS2) | (1 << CS1) | (1 << CS0); Это включит режим тиканья таймера по сигналу на PB2 (T0). После этого регистр TCNT0 будет увеличиваться каждый восходящий фронт. На счет переполнения его после 255 сами подумайте )
Карма: -2
Рейтинг сообщений: -166
Зарегистрирован: Вт мар 13, 2012 12:16:13 Сообщений: 4418 Откуда: Россия
Рейтинг сообщения:1
olegue писал(а):
А если подам с генератора, то на ногу придет либо высокий, либо его отсутсвие (высокого). Будет ли отсутсвие выского уровня расценено Тинькой как низкий?
У к155ла3 на выходе два транзистора (верхний и нижний). -Если верхний открыт , то на выходе высокий уровень. -Если нижний открыт , то на выходе низкий уровень уровень.
Вывод: на ноге к155ла3 будет или высокий или низкий уровень. Другого не дано))
olegue писал(а):
почитал немножко про z состояние, но z состояние можно расспатривать как обрыв...
В z-состоянии сигнал поступает на затвор полевого транзистор (обычный полевой транзистор с изолированным затвором). Поэтому входное сопротивление в z-состоянии более 1 МОм (точно не мерил). А ещё там есть подтягивающий резистор ~33 кОм , который подключается к плюсу питания... Смотрите и изучайте даташиты))
Посчитать к155ла3 не проблема. Можно любым удобным способом)) Через таймер... Через прерывание... как угодно.
P.S. Только не вздумайте подключать счётный таймер к своему приёмнику.)) На выходе приёмника куча помех... Если надо посчитать импульсы с приёмника , то это делается по другому.
TCCR0B=0x03; //Счетный режим таймера с часторой.... OCR0A=0xF0; // Заданное число сравления TIMSK0=0x04; //Разрешаем выполнение прерывание по совпадению в OCR0A
sei();
//PORTB|=(1<<PORTB4); // Write your code here while (1) {
и вот ошибки , ругается на функциию interrupt...
Код:
avr-gcc.exe -Wall -gdwarf-2 -fsigned-char -MD -MP -DF_CPU=1000000 -O1 -mmcu=attiny13 -o "main.o" -c "../main.c" ../main.c:11: error: 'TIM0_COMPA' undeclared here (not in a function) ../main.c:11: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void' ../main.c:16: warning: return type of 'main' is not 'int' make: *** [main.o] Error 1
Error code 2
у меня 8-ой протеус, посмотрите в своих протеусах будет ли работать.
WinAVR-20100110
Добавлено after 1 minute 6 seconds: спасибо заранее
Вы пример под CVAVR берете и в WinAVR пытаетесь его собрать. Так не будет работать. В avr-gcc прерывания вот так записываются: ISR(TIM0_COMPA_vect) Замените на это объявление interrupt [TIM0_COMPA] void timer0_compa_isr(void), так только в CVAVR пишется.
void timer_ini(void) { //TCCR0B=0x05; TCCR0B|=(1<<CS02); // УСТАНОВИМ ДЕЛИТЕЛЬ 1024 TCCR0B|=(1<<CS00); // Эти 2 бита в 1 OCR0A=0xFF; // 255; 1200000/1024=1172 ГЦ и делим на число 0xff (255)= 4.5 гц TIMSK0=0x04; // разрешаем таймер по совпадению с числом в OCR0A }
вот получил я скажем 4.5 гц, а как получить 1 гц?
Пробовал гуглить, но ниччего конкретного Я ведль не могу записать как в Атмеге 2х битное число и скоректировать им на нужную мне частоту. Например я бы мог запсать в OCR0A 1172 и тогда у меня получился бы 1 гц Или еще подумал что можно наверно ка-то понизить частоту внутреннего генератора???? Возможно ли это?
Вопрос чисто академичесий, никакого прикладного значения.
Сейчас этот форум просматривают: Starichok51, xido и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения