BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
Пришлось лезть в файл attiny13.dat(самому слабО?). В векторах прерываний описан вообще только INT0.
Дальше даташит + attiny13.dat. Можно самому.
Дальше даташит + attiny13.dat. Можно самому.
- Реклама
- xorkrus
- Нашел транзистор. Понюхал.
- Сообщения: 151
- Зарегистрирован: Сб ноя 19, 2011 20:13:47
- Откуда: Тамбов
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Да, я тоже залез туда. Там INT0 и PCINT0.
даташит+дат = вы имеете в виду самому добавить ещё один вектор?
Upd: Хотя судя по даташиту, вектора прерывания кроме PCINT0 и нет. Т.е. срабатывает при любом PCINTx, а я там уж типа сам должон выявить оно или нет...
Upd2: Но в случае если нужно одно прерывание, то можно PCMSK и всё...
Спасибо за пинок в нужном направлении
даташит+дат = вы имеете в виду самому добавить ещё один вектор?
Upd: Хотя судя по даташиту, вектора прерывания кроме PCINT0 и нет. Т.е. срабатывает при любом PCINTx, а я там уж типа сам должон выявить оно или нет...
Upd2: Но в случае если нужно одно прерывание, то можно PCMSK и всё...
Спасибо за пинок в нужном направлении
Демократии нет и не будет!
Государство - это я!
Государство - это я!
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Есть прерывание группы выводов PCINT5...PCINT0. И при изменении уровня на любом разрешенном выводе (в регистре PCMSK можно настроить, на какие выводы реагировать), возникает одно прерывание PCINT0. А там уже по маске запросто можно вычислить, кто виновен. Это довольно удобно, на самом деле.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Поделитесь пожалуйста библиотекой Rainbow.lib
Если есть разные версии, то по возможности..
Добавлено after 1 hour 37 minutes 17 seconds:
Короче, попробовал зарегиться на сайте с предыдущей страницы, но там кроме того бабки надо. Это не наш вариант.
если кому надо. Светодиоды WS2812B, проверил с 10 штуками. Если больше то тайминги не уползают, должно работать.
Мне надо было включить только один пиксел из массива. Потом будет возможность проверить с 1000 светиками.
Если будете пользовать этот код, то кварц следует брать только на 16 мгц, с кварцом 12 мгц еще можно заставить работать, меньше - нет. Но надо тайминги подбирать.
Я подбирал с логическим анализатором.
Записывается значение так:
Call Write_color(R , G , B , Pixel_num)
$crystal = 16000000
Declare Sub Write_color(byval Green As Byte , Byval Red As Byte , Byval Blue As Byte , Byval Led_num As Word )
Config Portb.3 = Output 'Config output for pixel data
Const Pixels = 10 'total number of pixels
Dim Nn As Byte
Do
Waitms 100
'-----Pixel number(Max-65325)---|
'-----Blue chanel-----------| |(Max-255)
'-----Red chanel-------| | |(Max-255)
'---Green chanel--| | | |(Max-255)
Call Write_color(0 , 255 , 0 , Nn)
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
End
Zero:
sbi PORTb,3
Nop
nop
nop
nop
cbi PORTb,3
Ret
One:
sbi portb,3
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
cbi portb,3
Ret
Если есть разные версии, то по возможности..
Добавлено after 1 hour 37 minutes 17 seconds:
Короче, попробовал зарегиться на сайте с предыдущей страницы, но там кроме того бабки надо. Это не наш вариант.
если кому надо. Светодиоды WS2812B, проверил с 10 штуками. Если больше то тайминги не уползают, должно работать.
Мне надо было включить только один пиксел из массива. Потом будет возможность проверить с 1000 светиками.
Если будете пользовать этот код, то кварц следует брать только на 16 мгц, с кварцом 12 мгц еще можно заставить работать, меньше - нет. Но надо тайминги подбирать.
Я подбирал с логическим анализатором.
Записывается значение так:
Call Write_color(R , G , B , Pixel_num)
Спойлер
$regfile = "m328pdef.dat"$crystal = 16000000
Declare Sub Write_color(byval Green As Byte , Byval Red As Byte , Byval Blue As Byte , Byval Led_num As Word )
Config Portb.3 = Output 'Config output for pixel data
Const Pixels = 10 'total number of pixels
Dim Nn As Byte
Do
Waitms 100
'-----Pixel number(Max-65325)---|
'-----Blue chanel-----------| |(Max-255)
'-----Red chanel-------| | |(Max-255)
'---Green chanel--| | | |(Max-255)
Call Write_color(0 , 255 , 0 , Nn)
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
End
Zero:
sbi PORTb,3
Nop
nop
nop
nop
cbi PORTb,3
Ret
One:
sbi portb,3
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
cbi portb,3
Ret
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Поиском не пробовали пользоваться?vanyap1 писал(а):Поделитесь пожалуйста библиотекой Rainbow.lib
http://radiokot.ru/forum/viewtopic.php? ... 5#p2721085
http://radiokot.ru/forum/viewtopic.php? ... 0#p2721270
http://radiokot.ru/forum/viewtopic.php? ... 4#p2922234
http://radiokot.ru/forum/viewtopic.php? ... 9#p2922709
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
- Реклама
- xorkrus
- Нашел транзистор. Понюхал.
- Сообщения: 151
- Зарегистрирован: Сб ноя 19, 2011 20:13:47
- Откуда: Тамбов
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Прерывания это было интересно, но проблема нарисовалась в другом:
На ногах B1 B2 - p-канальные ключи, за которыми светодиоды. При включении оба светодиода часто моргают (примерно в районе 3 герц) и на кнопку не реагируют. Проблема в коде?
Спойлер
Код: Выделить всё
$regfile = "attiny13a.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 16
$framesize = 16
Dim S1 As Byte
S1 = 0
Config Portb.2 = Output
Config Portb.1 = Output
Portb.2 = 1
Portb.1 = 1
Config Pinb.3 = Input
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
Демократии нет и не будет!
Государство - это я!
Государство - это я!
- Microtech
- Поставщик валерьянки для Кота
- Сообщения: 2052
- Зарегистрирован: Вт ноя 03, 2009 21:02:38
- Откуда: Москва
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Резистор к плюсу от Portb. есть? Если его нет, запаяйте или поставьте после Config Pinb.3 = Input
Set Portb.3
Это включит внутренний подтягивающий резистор. Кнопка проверяется 1 раз в 10 секунд, это так задумано?
Set Portb.3
Это включит внутренний подтягивающий резистор. Кнопка проверяется 1 раз в 10 секунд, это так задумано?
- xorkrus
- Нашел транзистор. Понюхал.
- Сообщения: 151
- Зарегистрирован: Сб ноя 19, 2011 20:13:47
- Откуда: Тамбов
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Резистор 7кОм есть. 1 в 10... Разве это не 10мс? Пусть так будет задумано
В любом случае моргания-то есть...
Демократии нет и не будет!
Государство - это я!
Государство - это я!
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
xorkrus писал(а):Разве это не 10мс?
Код: Выделить всё
Waitms 10"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Microtech
- Поставщик валерьянки для Кота
- Сообщения: 2052
- Зарегистрирован: Вт ноя 03, 2009 21:02:38
- Откуда: Москва
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Какой смысл конфигурить входной регистр на вход? он и так вход.
Config Pinb.3 = Input
нужно писать Config Portb.3 = Input
p.s. в верхнем сообщении пропустил этот косяк с pin = input.
Config Pinb.3 = Input
нужно писать Config Portb.3 = Input
p.s. в верхнем сообщении пропустил этот косяк с pin = input.
- pavel123
- Грызет канифоль
- Сообщения: 268
- Зарегистрирован: Чт май 17, 2007 09:44:13
- Откуда: Украина, г. Кривой Рог
Re: BASCOM AVR в вопросах и ответах
Доброго времени.
Тираню UART. С программами разобрался, заработало как и ожидалось.
Возник вопрос технического воплощения.
Сейчас линия связи это просто 3-х метровый 4-х жильный телефонный провод подключенный непосредственно на ноги МК рх-тх. Правильно ли это? Или нужна какая-то буферная схема?
Питание общее. В проекте предполагается линия связи около 10 метров.
Еще заметил, что при отключении линии связи на принимающей стороне прерывание UART на прием срабатывает постоянно... Правильно ли это? Как можно проверить наличие линии, и если обнаружится обрыв линии, то запретить прерывание?
Спасибо.
Тираню UART. С программами разобрался, заработало как и ожидалось.
Возник вопрос технического воплощения.
Сейчас линия связи это просто 3-х метровый 4-х жильный телефонный провод подключенный непосредственно на ноги МК рх-тх. Правильно ли это? Или нужна какая-то буферная схема?
Питание общее. В проекте предполагается линия связи около 10 метров.
Еще заметил, что при отключении линии связи на принимающей стороне прерывание UART на прием срабатывает постоянно... Правильно ли это? Как можно проверить наличие линии, и если обнаружится обрыв линии, то запретить прерывание?
Спасибо.
Re: BASCOM AVR в вопросах и ответах
Да так и должно быть. Это конструктивная особенность порта - он таким образом целостность линии связи проверяет. Тут программно нужно обработать - обрыв линии воспринимается как стартовый бит. Если он не меняется - значит обрывпри отключении линии связи на принимающей стороне прерывание UART на прием срабатывает постоянно...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Bear2011, извини конечно, но ты написал бред.
Любая уважающая себя фирма, не сделает такой ляп в модуле UART своего продукта. Старт бит определяется по фронту, а если "что-то пойдёт не так", модуль должен вывалиться в ошибку, с дальнейшим запретом прерывания и установкой флага ошибки.
Любая уважающая себя фирма, не сделает такой ляп в модуле UART своего продукта. Старт бит определяется по фронту, а если "что-то пойдёт не так", модуль должен вывалиться в ошибку, с дальнейшим запретом прерывания и установкой флага ошибки.
Re: BASCOM AVR в вопросах и ответах
Аlex
Для начала посмотри на диаграмму протокола RS-232

Так что я все правильно написал. Человек явно не заморачивался с преобразователем уровня
Для начала посмотри на диаграмму протокола RS-232

Так что я все правильно написал. Человек явно не заморачивался с преобразователем уровня
Модуль я уверен и выдает ошибку. А вот как обрабатывается эта ошибка вопрос к тому кто программу писалесли "что-то пойдёт не так", модуль должен вывалиться в ошибку, с дальнейшим запретом прерывания и установкой флага ошибки.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Причём тут диаграммы, преобразователи, обработка ошибок, ... ? Ты о чём ?
Речь шла о постоянных вызовах прерывания. И твоё мнение, что "так и должно быть, так устроен модуль" - ошибочное, вводящее людей в заблуждение.
Ещё раз повторю - это не так ! Не будет модуль, при постоянном нуле не линии, детектировать его как чередующие старт биты. Модуль, вероятнее всего, вылетит в ошибку и поднимет флаг.
Речь шла о постоянных вызовах прерывания. И твоё мнение, что "так и должно быть, так устроен модуль" - ошибочное, вводящее людей в заблуждение.
Ещё раз повторю - это не так ! Не будет модуль, при постоянном нуле не линии, детектировать его как чередующие старт биты. Модуль, вероятнее всего, вылетит в ошибку и поднимет флаг.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: BASCOM AVR в вопросах и ответах
Нет, не правильно. MAX232, ADUM485 и т.д.pavel123 писал(а):линия связи это просто 3-х метровый 4-х жильный телефонный провод подключенный непосредственно на ноги МК рх-тх. Правильно ли это? Или нужна какая-то буферная схема?
Питание общее. В проекте предполагается линия связи около 10 метров.
Нет, не правильно. Как минимум подтянуть вход к устойчивому уровню, лучше поставить преобразователь уровней(см. выше).pavel123 писал(а): при отключении линии связи на принимающей стороне прерывание UART на прием срабатывает постоянно... Правильно ли это? Как можно проверить наличие линии, и если обнаружится обрыв линии, то запретить прерывание?
Определять соединение лучше на уровне протокола. Если устройство долго не отвечает, выключаем связь.
Re: BASCOM AVR в вопросах и ответах
Все верно. Вот только флаг ошибки нужно еще обработать. А если обработки нет то опять будет детектировать как стартовый бит.Не будет модуль, при постоянном нуле не линии, детектировать его как чередующие старт биты. Модуль, вероятнее всего, вылетит в ошибку и поднимет флаг.
Это ты видимо недопонял. UART воспринял обрыв линии как стартовый бит - вызвал прерывание. При обработке прерывания возникла ошибка. А вот обработка этой ошибки НЕ АППАРАТНАЯ а софтовая. И есть ли вообще эта обработка?Речь шла о постоянных вызовах прерывания. И твоё мнение, что "так и должно быть, так устроен модуль" - ошибочное, вводящее людей в заблуждение.
Судя вот по этому
Обработки ошибки НЕТ Поэтому и бесконечно вызываться прерывание.Как можно проверить наличие линии, и если обнаружится обрыв линии, то запретить прерывание?
Re: BASCOM AVR в вопросах и ответах
uk8amk А что такое ADUM485?
pavel123 писал(а):Тираню UART.
Да, нужны шинные формирователи, что-то типа 2 шт. ADM485. Одна на передачу, другая на приём, причем на каждой плате.pavel123 писал(а):Сейчас линия связи это просто 3-х метровый 4-х жильный телефонный провод подключенный непосредственно на ноги МК рх-тх. Правильно ли это? Или нужна какая-то буферная схема?
- pavel123
- Грызет канифоль
- Сообщения: 268
- Зарегистрирован: Чт май 17, 2007 09:44:13
- Откуда: Украина, г. Кривой Рог
Re: BASCOM AVR в вопросах и ответах
Благодарю за помощь. 



