Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Вопрос по ATTiny461

Сообщений 1 страница 9 из 9

1

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

https://i.ibb.co/Tt9v7Cj/image.png

0

2

Вы же в программе конфигурируете I2C.
Config SDA = PortX.X : Config SCL = PortY.Y

+1

3

utnik написал(а):

Столкнулся с МК attiny461, по распиновке у него два SDA и два SCL.

Судя по д/ш - это просто дублированые на оба порта ножки I2C (TWI).
Возможно, ошибаюсь, но в д/ш ничего опровергающего не нашел...
В "нутрях" МК он (интерфейс) один.
Поэтому банально назначаете удобные вам ножки обычными силами Bascom.
Подозреваю (но не факт), что для удобства монтажа можно даже взять SCL с PORTA, а SDA с PORTB (или наоборот).
Главное - потом не влупить в порт на вывод полный байт... ;)

0

4

В "нутрях" МК он (интерфейс) один.
Поэтому банально назначаете удобные вам ножки обычными силами Bascom.

Покопал д/ш поглубже и повнимательнее... ;)
Нашел подтверждение, что модуль один, но ножки могут быть использованы разные ("перемешать", как я предположил изначально не получится):
https://upforme.ru/uploads/0000/25/b8/1743/t444924.jpg
Гуглоперевод (выделение мое):

Установка этого бита в единицу изменяет положение контакта 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

+2

5

Спасибо за разъяснения!

0

6

Вспомнил про это недавнее растряхивание даташита ;) и заморочился...

Результат заморочки:
- Bascom поддерживает эту функцию МК, но с некоторыми "но"...
- Proteus так же "знает" про эту функцию МК,
- "в железе" не проверял ввиду отсутствия этого МК.

Теперь про "некоторые "но""...
Привычный способ конфигурирования I2C:
Config SDA = PortB.0 : Config SCL = PortB.2 ... работает весьма криво.
1. Не переключает "на лету"...
2. Почему-то использует PORTA, даже при указании на PORTB...

Благо, что в Bascom есть функция Config i2cbus, которая позволяет применять I2C multibus.
Все переключается, все передается (думаю и принимается) верно.

Схема в Proteus 8.15
Скрин в режиме "Пауза", I2C - "по умолчанию".
https://upforme.ru/uploads/0000/25/b8/1743/t404832.jpg

Тестовая программа

$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 If

dalee:                            ' Выбор и переключение ножек I2C
If PINB.6 = 1 Then          ' Кнопка не нажата
      i2cbus=0                  '  выбираем I2C "по умолчанию"
      I2CSend &H40, b
End If

If PINB.6 = 0 Then          ' Кнопка нажата
      i2cbus=1                  ' выбираем I2C "альтернативный"
      I2CSend &H40, b
End If

Toggle PORTA.7
Waitms 250

Loop

End

+2

7

В продолжение предыдущего...

Решил поэкспериментировать и добавил в схему еще одну шину I2C.

И шо таки могу сказать - прекрасно работает ! ;)
Так можно весь МК этими шинами обвесить... ;)
https://upforme.ru/uploads/0000/25/b8/1743/t556752.jpg

Тестовая программа Bascom 2.0.8.5

$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 If

dalee:                                     ' Выбор и переключение ножек I2C
If PINB.5 = 0 Then              ' Кнопка 2 нажата
      i2cbus=2                         ' выбираем I2C "альтернативный-2"
      I2CSend &H40, b
      Goto label
End If

If PINB.6 = 1 Then               ' Кнопка 1 не нажата
      i2cbus=0                         '  выбираем I2C "по умолчанию"
      I2CSend &H40, b
End If

If PINB.6 = 0 Then              ' Кнопка 1 нажата
      i2cbus=1                         ' выбираем I2C "альтернативный-1"
      I2CSend &H40, b
End If

label:
Toggle PortA.7
Waitms 250

Loop

End

0

8

предлагаю в своём ПО указывать номер версии компилятора: то, что работает в старой иногда не работает в новой; и наоборот.

+2

9

Александр Д. написал(а):

предлагаю в своём ПО указывать номер версии компилятора: то, что работает в старой иногда не работает в новой; и наоборот.

Поддерживаю !
Исправлено...
Добавлено в Работа с Форумом

0