Да, я тоже залез туда. Там INT0 и PCINT0. даташит+дат = вы имеете в виду самому добавить ещё один вектор?
Upd: Хотя судя по даташиту, вектора прерывания кроме PCINT0 и нет. Т.е. срабатывает при любом PCINTx, а я там уж типа сам должон выявить оно или нет... Upd2: Но в случае если нужно одно прерывание, то можно PCMSK и всё... Спасибо за пинок в нужном направлении
_________________ Демократии нет и не будет! Государство - это я!
Есть прерывание группы выводов PCINT5...PCINT0. И при изменении уровня на любом разрешенном выводе (в регистре PCMSK можно настроить, на какие выводы реагировать), возникает одно прерывание PCINT0. А там уже по маске запросто можно вычислить, кто виновен. Это довольно удобно, на самом деле.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Поделитесь пожалуйста библиотекой Rainbow.lib Если есть разные версии, то по возможности..
Добавлено after 1 hour 37 minutes 17 seconds: Короче, попробовал зарегиться на сайте с предыдущей страницы, но там кроме того бабки надо. Это не наш вариант. если кому надо. Светодиоды WS2812B, проверил с 10 штуками. Если больше то тайминги не уползают, должно работать. Мне надо было включить только один пиксел из массива. Потом будет возможность проверить с 1000 светиками. Если будете пользовать этот код, то кварц следует брать только на 16 мгц, с кварцом 12 мгц еще можно заставить работать, меньше - нет. Но надо тайминги подбирать. Я подбирал с логическим анализатором. Записывается значение так: Call Write_color(R , G , B , Pixel_num)
Incr Nn If Nn > Pixels Then : Nn = 1 : End If Loop
Sub Write_color(byval Green As Byte , Byval Red As Byte , Byval Blue As Byte , Byval Led_num As Word ) Local Pix_num As Word For Pix_num = 1 To Pixels If Pix_num = Led_num Then
If Green.7 = 0 Then Rcall Zero Else Rcall One If Green.6 = 0 Then Rcall Zero Else Rcall One If Green.5 = 0 Then Rcall Zero Else Rcall One If Green.4 = 0 Then Rcall Zero Else Rcall One If Green.3 = 0 Then Rcall Zero Else Rcall One If Green.2 = 0 Then Rcall Zero Else Rcall One If Green.1 = 0 Then Rcall Zero Else Rcall One If Green.0 = 0 Then Rcall Zero Else Rcall One
If Red.7 = 0 Then Rcall Zero Else Rcall One If Red.6 = 0 Then Rcall Zero Else Rcall One If Red.5 = 0 Then Rcall Zero Else Rcall One If Red.4 = 0 Then Rcall Zero Else Rcall One If Red.3 = 0 Then Rcall Zero Else Rcall One If Red.2 = 0 Then Rcall Zero Else Rcall One If Red.1 = 0 Then Rcall Zero Else Rcall One If Red.0 = 0 Then Rcall Zero Else Rcall One
If Blue.7 = 0 Then Rcall Zero Else Rcall One If Blue.6 = 0 Then Rcall Zero Else Rcall One If Blue.5 = 0 Then Rcall Zero Else Rcall One If Blue.4 = 0 Then Rcall Zero Else Rcall One If Blue.3 = 0 Then Rcall Zero Else Rcall One If Blue.2 = 0 Then Rcall Zero Else Rcall One If Blue.1 = 0 Then Rcall Zero Else Rcall One If Blue.0 = 0 Then Rcall Zero Else Rcall One Else Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero Rcall Zero End If Next End Sub
Do Wait 10 If Pinb.3 = 0 Then Incr S1 End If If S1 = 0 Then Portb.2 = 1 Portb.3 = 1 End If If S1 = 1 Then Portb.2 = 1 Portb.3 = 0 End If If S1 = 2 Then Portb.2 = 0 Portb.3 = 1 End If If S1 = 3 Then S1 = 0 End If
Loop
На ногах B1 B2 - p-канальные ключи, за которыми светодиоды. При включении оба светодиода часто моргают (примерно в районе 3 герц) и на кнопку не реагируют. Проблема в коде?
_________________ Демократии нет и не будет! Государство - это я!
Резистор к плюсу от Portb. есть? Если его нет, запаяйте или поставьте после Config Pinb.3 = Input Set Portb.3 Это включит внутренний подтягивающий резистор. Кнопка проверяется 1 раз в 10 секунд, это так задумано?
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн дек 26, 2016 18:26:24
Грызет канифоль
Зарегистрирован: Чт май 17, 2007 09:44:13 Сообщений: 268 Откуда: Украина, г. Кривой Рог
Рейтинг сообщения:0
Доброго времени. Тираню UART. С программами разобрался, заработало как и ожидалось. Возник вопрос технического воплощения. Сейчас линия связи это просто 3-х метровый 4-х жильный телефонный провод подключенный непосредственно на ноги МК рх-тх. Правильно ли это? Или нужна какая-то буферная схема? Питание общее. В проекте предполагается линия связи около 10 метров. Еще заметил, что при отключении линии связи на принимающей стороне прерывание UART на прием срабатывает постоянно... Правильно ли это? Как можно проверить наличие линии, и если обнаружится обрыв линии, то запретить прерывание? Спасибо.
при отключении линии связи на принимающей стороне прерывание UART на прием срабатывает постоянно...
Да так и должно быть. Это конструктивная особенность порта - он таким образом целостность линии связи проверяет. Тут программно нужно обработать - обрыв линии воспринимается как стартовый бит. Если он не меняется - значит обрыв
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн дек 26, 2016 22:43:26
Модератор
Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4587 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Bear2011, извини конечно, но ты написал бред. Любая уважающая себя фирма, не сделает такой ляп в модуле UART своего продукта. Старт бит определяется по фронту, а если "что-то пойдёт не так", модуль должен вывалиться в ошибку, с дальнейшим запретом прерывания и установкой флага ошибки.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт дек 27, 2016 09:31:55
Модератор
Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4587 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Причём тут диаграммы, преобразователи, обработка ошибок, ... ? Ты о чём ? Речь шла о постоянных вызовах прерывания. И твоё мнение, что "так и должно быть, так устроен модуль" - ошибочное, вводящее людей в заблуждение. Ещё раз повторю - это не так ! Не будет модуль, при постоянном нуле не линии, детектировать его как чередующие старт биты. Модуль, вероятнее всего, вылетит в ошибку и поднимет флаг.
линия связи это просто 3-х метровый 4-х жильный телефонный провод подключенный непосредственно на ноги МК рх-тх. Правильно ли это? Или нужна какая-то буферная схема? Питание общее. В проекте предполагается линия связи около 10 метров.
Нет, не правильно. MAX232, ADUM485 и т.д.
pavel123 писал(а):
при отключении линии связи на принимающей стороне прерывание UART на прием срабатывает постоянно... Правильно ли это? Как можно проверить наличие линии, и если обнаружится обрыв линии, то запретить прерывание?
Нет, не правильно. Как минимум подтянуть вход к устойчивому уровню, лучше поставить преобразователь уровней(см. выше). Определять соединение лучше на уровне протокола. Если устройство долго не отвечает, выключаем связь.
Не будет модуль, при постоянном нуле не линии, детектировать его как чередующие старт биты. Модуль, вероятнее всего, вылетит в ошибку и поднимет флаг.
Все верно. Вот только флаг ошибки нужно еще обработать. А если обработки нет то опять будет детектировать как стартовый бит.
Цитата:
Речь шла о постоянных вызовах прерывания. И твоё мнение, что "так и должно быть, так устроен модуль" - ошибочное, вводящее людей в заблуждение.
Это ты видимо недопонял. UART воспринял обрыв линии как стартовый бит - вызвал прерывание. При обработке прерывания возникла ошибка. А вот обработка этой ошибки НЕ АППАРАТНАЯ а софтовая. И есть ли вообще эта обработка? Судя вот по этому
Цитата:
Как можно проверить наличие линии, и если обнаружится обрыв линии, то запретить прерывание?
Обработки ошибки НЕТ Поэтому и бесконечно вызываться прерывание.
Сейчас линия связи это просто 3-х метровый 4-х жильный телефонный провод подключенный непосредственно на ноги МК рх-тх. Правильно ли это? Или нужна какая-то буферная схема?
Да, нужны шинные формирователи, что-то типа 2 шт. ADM485. Одна на передачу, другая на приём, причем на каждой плате.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения