Доброго дня. Столкнулся с МК attiny461, по распиновке у него два SDA и два SCL. Баском позволяет как-то выбирать, каким пользоваться (аппаратно)?

Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Аппаратные возможности МК серии ATTiny » Вопрос по ATTiny461
Доброго дня. Столкнулся с МК attiny461, по распиновке у него два SDA и два SCL. Баском позволяет как-то выбирать, каким пользоваться (аппаратно)?

Вы же в программе конфигурируете I2C.
Config SDA = PortX.X : Config SCL = PortY.Y
Столкнулся с МК attiny461, по распиновке у него два SDA и два SCL.
Судя по д/ш - это просто дублированые на оба порта ножки I2C (TWI).
Возможно, ошибаюсь, но в д/ш ничего опровергающего не нашел...
В "нутрях" МК он (интерфейс) один.
Поэтому банально назначаете удобные вам ножки обычными силами Bascom.
Подозреваю (но не факт), что для удобства монтажа можно даже взять SCL с PORTA, а SDA с PORTB (или наоборот).
Главное - потом не влупить в порт на вывод полный байт... 
В "нутрях" МК он (интерфейс) один.
Поэтому банально назначаете удобные вам ножки обычными силами Bascom.
Покопал д/ш поглубже и повнимательнее... 
Нашел подтверждение, что модуль один, но ножки могут быть использованы разные ("перемешать", как я предположил изначально не получится):
Гуглоперевод (выделение мое):
Установка этого бита в единицу изменяет положение контакта USI.
По умолчанию контакты PB2:PB0 используются для функций контактов USI, но при записи этого бита в единицу устанавливается бит USIPOS, функции контактов USI выполняются на контактах PA2:PA0.
Поэтому "по умолчанию" делаем:
Config SDA = PortB.0 : Config SCL = PortB.2
Для переключения:
USIPP.0 = 1 - возможно и не потребуется, если Bascom "знает" про эту фичу данного МК
Config SDA = PortA.0 : Config SCL = PortA.2
Спасибо за разъяснения!
Вспомнил про это недавнее растряхивание даташита
и заморочился...
Результат заморочки:
- Bascom поддерживает эту функцию МК, но с некоторыми "но"...
- Proteus так же "знает" про эту функцию МК,
- "в железе" не проверял ввиду отсутствия этого МК.
Теперь про "некоторые "но""...
Привычный способ конфигурирования I2C:
Config SDA = PortB.0 : Config SCL = PortB.2 ... работает весьма криво.
1. Не переключает "на лету"...
2. Почему-то использует PORTA, даже при указании на PORTB...
Благо, что в Bascom есть функция Config i2cbus, которая позволяет применять I2C multibus.
Все переключается, все передается (думаю и принимается) верно.
Схема в Proteus 8.15
Скрин в режиме "Пауза", I2C - "по умолчанию".
$Regfile="attiny461.dat"
$Crystal=8000000
$hwstack=40
$swstack=16
$framesize=32'==============================================
Config i2cbus=0, SCL=portb.2, SDA= portb.0 ' I2C "по умолчанию"
Config i2cbus=1, SCL=porta.2, SDA= porta.0 ' I2C "альтернативный"Config PORTB.6 = Input
Config PORTA.7 = Output
PORTA.7 = 1'==============================================
Dim b As Byte
Dim c As Byte'==============================================
Do
If c = 0 Then
b = 170
c = 1
Goto dalee
End If
If c = 1 Then
b = 85
c = 0
End Ifdalee: ' Выбор и переключение ножек I2C
If PINB.6 = 1 Then ' Кнопка не нажата
i2cbus=0 ' выбираем I2C "по умолчанию"
I2CSend &H40, b
End IfIf PINB.6 = 0 Then ' Кнопка нажата
i2cbus=1 ' выбираем I2C "альтернативный"
I2CSend &H40, b
End IfToggle PORTA.7
Waitms 250Loop
End
В продолжение предыдущего...
Решил поэкспериментировать и добавил в схему еще одну шину I2C.
И шо таки могу сказать - прекрасно работает ! 
Так можно весь МК этими шинами обвесить... 

$Regfile="attiny461.dat"
$Crystal=8000000
$hwstack=40
$swstack=16
$framesize=32'===============================================================
Config i2cbus=0, SCL=portb.2, SDA= portb.0 ' I2C "по умолчанию"
Config i2cbus=1, SCL=porta.2, SDA= porta.0 ' I2C "альтернативный-1"
Config i2cbus=2, SCL=portB.4, SDA= portB.3 ' I2C "альтернативный-2"Config PORTB.5 = Input
Config PORTB.6 = Input
Config PORTA.7 = Output
PortA.7 = 1'===============================================================
Dim b As Byte
Dim c As Byte'===============================================================
Do
If c = 0 Then
b = 170
c = 1
Goto dalee
End If
If c = 1 Then
b = 85
c = 0
End Ifdalee: ' Выбор и переключение ножек I2C
If PINB.5 = 0 Then ' Кнопка 2 нажата
i2cbus=2 ' выбираем I2C "альтернативный-2"
I2CSend &H40, b
Goto label
End IfIf PINB.6 = 1 Then ' Кнопка 1 не нажата
i2cbus=0 ' выбираем I2C "по умолчанию"
I2CSend &H40, b
End IfIf PINB.6 = 0 Then ' Кнопка 1 нажата
i2cbus=1 ' выбираем I2C "альтернативный-1"
I2CSend &H40, b
End Iflabel:
Toggle PortA.7
Waitms 250Loop
End
предлагаю в своём ПО указывать номер версии компилятора: то, что работает в старой иногда не работает в новой; и наоборот.
предлагаю в своём ПО указывать номер версии компилятора: то, что работает в старой иногда не работает в новой; и наоборот.
Поддерживаю !
Исправлено...
Добавлено в Работа с Форумом
Вы здесь » Программирование ATMEL в BASCOM. » Аппаратные возможности МК серии ATTiny » Вопрос по ATTiny461