Cheshire Cat

Определение необходимых элементов для схемы на Attiny2313

14 сообщений в этой теме

image.png.b444bda9af1e7cbcb1bb37835e8cab67.png

Помогите правильно подобрать элементы. Ниже я опишу своё понимание точно, что нужно для этой схемы, если там будут ошибки поправьте меня.
Мне нужна:
1) Источник питания на 5В
2) Светодиод
3) Резистор. Сопротивление завит от рабочего напряжение светодиода, а рассеивающая мощность от тока от источника. 
4) Кнопка
5) Земля?
6) 2 конденсатора на 2 нф
7) Кварцовый генератор на 4 МГц

Вопросы у меня насчет питания:
1) Что использовать как источник питания
2) Как подключать? Вижу куда + подключать, а куда -?
3) Как питается контроллер
4) Почему если подать в PB.0 единицу, светодиод потухнет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sanya110    348
7 минут назад, Cheshire Cat сказал:

Сопротивление завит от рабочего напряжение светодиода, а рассеивающая мощность от тока от источника

Сопротивление зависит от напряжения источника питания, а также номинального тока светодиода. По минимуму ограничено допустимым нагрузочным током контроллера. Мощность зависит от тока через светодиод и величины рассчитанного выше сопротивления (законы Ома и Джоуля-Ленца Вам в помощь).

12 минуты назад, Cheshire Cat сказал:

Земля?

Землю – крестьянам, Вам совершенно не понадобится.

12 минуты назад, Cheshire Cat сказал:

2 конденсатора на 2 нф

На 22 пФ.

12 минуты назад, Cheshire Cat сказал:

Кварцовый генератор

Кварцевый резонатор.

13 минуты назад, Cheshire Cat сказал:

Что использовать как источник питания

Стабилизированный источник с требуемым выходным напряжением и допустимым током, превышающим ток, потребляемый Вашей схемой. Варианты многочисленны и определяются возможностями созидающего.

15 минут назад, Cheshire Cat сказал:

Вижу куда + подключать, а куда -?

К выводу 10 контроллера.

16 минут назад, Cheshire Cat сказал:

Как питается контроллер

По выводу 20.

16 минут назад, Cheshire Cat сказал:

Почему если подать в PB.0 единицу, светодиод потухнет?

На PD.0. Даташит Вам в помощь.

Сильно подозреваю, что Вы его вообще не читали, потому и задаетесь элементарными вопросами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
27 минут назад, sanya110 сказал:

Стабилизированный источник с требуемым выходным напряжением и допустимым током, превышающим ток, потребляемый Вашей схемой. Варианты многочисленны и определяются возможностями созидающего.

Как посчитать, который потребляет моя схема? 

Я совсем новичок, в схемотехнике совсем нешарю, всё что читал это "Белов А.В. Микроконтроллеры AVR. От азов программирования до создания практических устройств" и "FAQ для начинающих" с этого сайта. Может что ещё нужно почитать, чтобы разобраться как это всё работает и что к чему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Впервые на русском языке! Работаем с микроконтроллерами STM32F7(на основе STM32F7 Online Training)

Цикл материалов на основе STM32F7 Online Training от компании STMicroelectronics. Описаны функциональные блоки и инструменты разработки для семейства микроконтроллеров STM32F7, охватывающие тематику системной периферии, памяти, безопасности, аналоговой периферии, цифровой периферии, таймеров, экосистемы.

Подробнее>>

sanya110    348
4 минуты назад, Cheshire Cat сказал:

Как посчитать, который потребляет моя схема?

Строго говоря, общий потребляемый ток будет равняться сумме токов собственного потребления микроконтроллера (определяется из даташита и составляет десятки...сотни микроампер) и тока, потребляемого нагрузкой контроллера, т.е. светодиодом.

Значение тока нагрузки ограниченно максимально допустимой нагрузочной способностью контроллера, которая составляет (если мне не изменяет память) 6 мА. Для повышения надежности лучше задаваться максимальным выходным током не более 4...5 мА (этого будет достаточно для зажигания светодиода). Тогда при напряжении питания 5 В в зависимости от типа используемого светодиода сопротивление последовательного резистора по закону Ома составит примерно 510...620 Ом. Общий ток, потребляемый схемой от источника, можно считать примерно равным току нагрузки (т.е. 4...5 мА), поскольку собственным током потребления контроллера можно пренебречь в силу его относительной малости. Таким образом, для питания Вашей схемы потребуется источник с напряжением 5 В и током нагрузки более 5 мА, т.е.  любой произвольный стабилизированный источник, который Вы в состоянии собрать или приобрести.

29 минут назад, Cheshire Cat сказал:

Может что ещё нужно почитать, чтобы разобраться как это всё работает и что к чему?

Для расширения познаний в схемотехнике полезно почитывать, например, "Искусство схемотехники", авторы П.Хоровиц и У.Хилл (за один присест, конечно, не одолеть, но со временем понимание появится).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
20 минут назад, sanya110 сказал:

Значение тока нагрузки ограниченно максимально допустимой нагрузочной способностью контроллера

Я как-то не могу найти в даташите значение максимальной нагрузки, где его искать?

Изменено пользователем Cheshire Cat

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
KomSoft    401

Если речь идет о блоке питания - то для этой схемы 100мА хватит за глаза. Можно использовать блоки питания от мобилок (USB) 5В на любой ток (500мА- 1,5А). Но лучше блок питания с защитой, т.к. вы (как любой начинающий) по-любому рано или поздно накосячите. Все через это проходят.

А по остальному - читайте, начиная с азов. У вас слишком много вопросов. Микроконтроллер это хорошо, но вокруг него стоят обычные детали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, KomSoft сказал:

А по остальному - читайте, начиная с азов. У вас слишком много вопросов. Микроконтроллер это хорошо, но вокруг него стоят обычные детали.

Воот, какие книги про вот эти самые азы почитать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TIMIK74    595

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, TIMIK74 сказал:

Еще там программировать Мк надо, чтобы заработало.

Да, и я как раз читаю книгу ""Белов А.В. Микроконтроллеры AVR. От азов программирования до создания практических устройств""

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yuretskok    502
24 минуты назад, KomSoft сказал:

Можно использовать блоки питания от мобилок (USB) 5В на любой ток (500мА- 1,5А). Но лучше блок питания с защитой,

В нормальных блоках от мобилок защита присутствует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sanya110    348
1 час назад, Cheshire Cat сказал:

не могу найти в даташите значение максимальной нагрузки, где его искать?

http://cxem.net/beginner/beginner73.phphttp://chipenable.ru/index.php/programming-avr/item/148. Да, кстати, пишут, что выходной ток семейства AVR может достигать 40 мА. Можно дофига светодиодов навешать :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
KomSoft    401
1 hour ago, Yuretskok said:

блоках от мобилок защита присутствует

Во, в нормальных. Это я не стал развивать тему про ЛБП...

26 minutes ago, sanya110 said:

пишут, что выходной ток семейства AVR может достигать 40 мА.

На один пин. А есть еще

Although each I/O port can sink more than the test conditions (20mA at Vcc = 5V, 10mA at Vcc = 3V) under steady state conditions (non-transient), the following must be observed:
PDIP Package:
1] The sum of all IOL, for all ports, should not exceed 400 mA.

Т.е. суммарный ток по всем портам не может превышать определенное значение.

1 hour ago, Cheshire Cat said:

Воот, какие книги про вот эти самые азы почитать?

Все зависит от ваших знаний. Теоретически - со школьного курса физики и закона Ома. Потом теорию цепей, принципы работы элементов - резисторов, конденсаторов, транзисторов, ...
Мне тяжело сказать, я это давно прошел. А так - уже подсказали кое-что. В процессе разберетесь.

Про токи нагрузки - в даташите - раздел "Electrical Characteristics".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
25 минут назад, KomSoft сказал:

Все зависит от ваших знаний. Теоретически - со школьного курса физики и закона Ома. Потом теорию цепей, принципы работы элементов - резисторов, конденсаторов, транзисторов, ...

А книги какие то конкретные можете подсказать? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
KomSoft    401

Не могу.  :D Особо злостным тут советуют почитать Борисова "Юный радиолюбитель". Первое издание 1951 года, 7-е - 1985.  https://tehosnova.ru/index.php?tema=radio  Я не читал. Возможно, действительно начать с нее - пробежаться по диагонали, по азам. А потом - здесь же на сайте есть раздел для начинающих - http://cxem.net/beginner/beginner.php. Дальше - по необходимости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: shuks
      Добрый день!
      От товарища поступила просьба собрать на ардуино (либо изготовить плату на avr) детектор короткого замыкания.
      Есть у него на производстве ряд БП 12в 2квт и десяток потребителей на каждом, таких блоков порядка сотни, и поступила "хотелка" навесить на каждый БП ардуину (питание будет отдельное независимое) которая будет посылать по wifi уведомление когда будет возникать КЗ в блоке/потребителе (важна возможность определения именно КЗ).
      Опыта нет, первое что пришло в голову это:
      1) мониторить потерю напряжения 12в на БП (при КЗ блок уходит в защиту)
      2) при потере напряжения 12в подавать напряжение 3.3в от питания МК с управлением через ключ от ножки МК на "+" питания БП и переход на пп.3
      3) ноль от БП подключить к АЦП МК и замерять: если 0в то все норм и КЗ нет (поломка блока без КЗ либо отключение от сети 220в), если на АЦП будет 3.3в то имеем КЗ и отправляем уведомление.
      Т.к. опыта схемотехники почти нет, прошу помощи по схеме в даже в мелочах
       
    • Автор: Cheshire Cat
      Здравствуйте, почитав ответы на предыдущий вопрос понял, что эффективнее всего будет изучать программирование МК купив себе этот самый МК. Но тогда возникает следующий вопрос:

      Что и где покупать ? Я неработающий студент, поэтому хотелось бы несильно дорого. Локация - Казань.
    • Автор: Cheshire Cat
      Здравствуйте, только начал свой путь в программировании микроконтроллеров. Прошу советов в целом и ответов на вопросы в частности(они ниже).

      1) Какие книги читать? По порядку от начального уровня и далее. Я сейчас читаю книгу Белова А. В. "Микроконтроллеры AVR. От азов программирования до создания практических устройств".

      2) Какие программы использовать? В целом, не знаю какие вообще нужны программы для этого дела. Я сижу на Lunux, но могу и с вириальной машины запускать.

      2.1) Можно ли для написания программы использовать C++? я немного знаю C, но сильно хуже чем C++. 

      3) Можно ли обойтись без покупки реальных схем и инструментов? Хотя бы по первой. Понятно дело, что если развиваться в этом направлении, то без этого не обойтись. Но есть ли такая программа в которой можно собрать схему, в ней в микроконтроллер загрузить программу и посмотреть как она работает?
    • Автор: Григорий101
      Здравствуйте ! Я захотел поставить Bascom AVR на компьютер , но при установке возникли ошибки. Может у вас есть идея как помочь ?
       

    • Автор: GUM
      Всем привет! Начал разбираться с протоколом TWI(I2C) на авр, а именно atmega 8. Почитал статьи на изиэлектроник, написал обработку на прерываниях(подсматривая в пример), чтобы вникнуть. Начал тестить в протеус иии... Неизвестная бага не дает мне покоя. Старт производит, адрес слэйва передает(с битом на запись), адрес нужной ячейки передает, а уже при записи пишет ерунду, все время одно и то же, первый 0x00, второй 0xff, потом стоп(стоп запланирован) и какие бы байты я не писал в обработчике, передает 2 одинаковых 00 и ff... Ошибок не выдает, я поставил флаг на ошибки(1 на ноге), в нужное подпрерывание попадает ровно столько раз, сколько надо(тое ставил флаги туда), да и ставил флаги в другие обработчики прерываний(в которые не надо попадать в данном случае), но все норм. Я скину сюда часть кода, эквиваленты, озу нужные, макрос на отправку, и обработчики прерываний, которые используются для отправки байтов. Пишите, если нужна будет доп информация.
      Кстати, все прогнал по трассировщику в студии,  просто сделал rcall на нужную последовательность обработчиков
      .equ F_CPU = 8000;частота процессора
          
          
          .equ i2c_sarp   = 0b00000000    // Start-Addr_R-Read-Stop                   Это режим простого чтения. Например из слейва или из епрома с текущего адреса
          .equ i2c_sawp   = 0b10000000            // Start-Addr_W-Write-Stop          Это режим простой записи. 
          .equ i2c_sawsawp    = 0b10000001                // Start-Addr_W-WrPageAdr-Write-Stop    Это режим с предварительной записью нужного адреса страницы в 1 байт  а потом запись
          .equ i2c_saw2sawp       = 0b10000011            // Start-Addr_WrPageAdrH-WrPageAdrL-Write-Stop  Это режим с предварительной записью нужного адреса страницы в 2 байт  а потом запись
          .equ i2c_sawsarp        = 0b00000001            // Start-Addr_W-WrPageAdr-rStart-Addr_R-Read-Stop       Это режим с предварительной записью нужного адреса страницы в 1 байт  а потом чтение
          .equ i2c_saw2sarp       = 0b00000011
       
      .DSEG
              
              ;"******" - нужно вносить изменения в основном цикле!!!!!!
              I2C_SlaveAdres: .byte 1;регистр с адресом слэйва******************
              I2C_busy: .byte 1; байт флага занятости шины и2с 1-занято! 0-свободно!
              I2C_ERR: .byte 1;байт для ошибок
              
              I2C_DO: .byte 1;задание, читать или записывать, 2 байта адрес или 1?**********
              I2C_LOW_ADRES: .byte 1;младший байт адреса ячейки для чтения/записи(если адрес однобайтовый, то младший единственный)********
              I2C_HIGH_ADRES: .byte 1;старший байт адреса ячейки для чтения/записи***************
              I2C_KOL_BYTE: .byte 1; сколько байт нужно прочесть или записать? писать количетсво!!!!***********
              I2C_BUFER: .byte 5; байты, которые хотим пропихнуть*************
              I2c_ADRES_BUFER_IN: .byte 2;младший и старший байты адреса начала буфера данных для приема!***************
              I2C_ADRES_BUFER_OUT: .byte 2;младший и старший байты адреса начала буфера данных для отправки!****************
              I2C_INDEX_DATA: .byte 1;размер смещения,т.е. сколько байт уже отправлено, вначале отправки должен ранвться 0!
       
      TWSI:;перрывание i2c
      PUSHF;р16 и sreg в стэк
      PUSH R17;в стек
      PUSH R18
      PUSH R0;в стек
      PUSH R30;в стек
      PUSH R31;в стек
      CLR R0;нужен 0
      LDI ZH,HIGH(TWI_TABLE);заносим в индексную пару адрес таблицы причины прерывания и2с
      LDI ZL,LOW(TWI_TABLE);и младший байт
      UIN R16,TWSR;кода прерывания в р16
      LSR R16;сдвиг влево
      LSR R16;еще
      LSR R16;и еще
      ADD ZL,R16;прибавляем значение к адресу таблицы
      ICALL;переходим на причину прерывания

      POP R31;достаем из стека z пару
      POP R30;
      POP R0;р0 из стека
      POP R18
      POP R17;р17 из стека
      POPF;достаем р16 и sreg
      RETI;выход из прерывания
      TWI_TABLE:;таблица прерываний
      RJMP TWI_0x00;0x00 Bus Fail Автобус сломался… эээ в смысле аппаратная ошибка шины. Например, внезапный старт посреди передачи бита.
      RJMP TWI_0x08;0x08 Start Был сделан старт. Теперь мы решаем что делать дальше, например послать адрес ведомого
      RJMP TWI_0x10;0x10 ReStart Был обнаружен повторный старт. Можно переключиться с записи на чтение или наоборот. От логики зависит.
      RJMP TWI_0x18;0x18 SLA+W+ACK Мы отправили адрес с битом записи, а в ответ получили ACK от ведомого. Значит можно продолжать.
      RJMP TWI_0x20;0x20 SLA+W+NACK Мы отправили адрес с битом записи, а нас послали NACK. Обидно, сгенерим ошибку или повторим еще раз.
      RJMP TWI_0x28;0x28 Byte+ACK Мы послали байт и получили подтверждение, что ведомый его принял. Продолжаем.
      RJMP TWI_0x30;0x30 Byte+NACK Мы послали байт, но подтверждение не получили. Видимо ведомый уже сыт по горло нашими подачками или он захлебнулся в данных. 
      ;Либо его ВНЕЗАПНО посреди передачи данных украли инопланетяне.
      RJMP TWI_0x38;0x38 Collision А у нас тут клановые разборки — пришел другой мастер, 
      ;по хамски нас перебил, да так, что мы от возмущения аж заткнулись. Ничего I’l be back! До встречи через n тактов!
      RJMP TWI_0x40;0x40 SLA+R+ACK Послали адрес с битом на чтение, а ведомый отозвался. Хорошо! Будем читать.
      RJMP TWI_0x48;0x48 SLA+R+NACK Крикнули в шину «Эй ты, с адресом ХХХ, почитай нам сказки» А в ответ «Иди NACK!» 
      ;В смысле на запрос адреса с битом чтения никто не откликнулся. Видимо не хотят или заняты. Также может быть никого нет дома.
      RJMP TWI_0x50;0x50 Receive Byte Мы приняли байт. И думаем что бы ответить ведомому. ACK или NACK.
      RJMP TWI_0x58;0x58 Receive Byte+NACK Мы приняли байт от ведомого и сказали ему «иди NACK!» И он обиженый ушел, освободив шину.
      TWI_0x10: ;повторный старт
      TWI_0x08:;произвели старт!
      LDS R16,I2C_SlaveAdres;адрес слэйва
      LDS R17,I2C_DO;что нужно, запись или чтение?
      CPI R17,0
      BRNE TWI_0x10_WR
      ORI R16,1<<0
      TWI_0x10_WR:
      OUT TWDR,R16;отправляем адрес слейва по шине и2с
      OUTI TWCR,0<<TWEA|0<<TWSTA|0<<TWSTO|1<<TWEN|1<<TWIE|1<<TWINT ;флаг преывания, блок тви и разрешаем прерывания
      ;TWINT флаг прерывания
      ;TWEA 1-ACK, 0-NACK
      ;TWSTA 1-start, 0-no start
      ;TWSTO 1-stop
      ;TWEN блок TWI включен
      ;TWIE - разрешаем прерывания TWI
      RET;выход из подпрерывания
       
      TWI_0x18:;подтверждение после посылки байта адреса и бита записи
      LDS R16,I2C_DO;загружаем тех задание в регистр
      SBRS R16,0;проверяем, нужно ли нам только записать байт? если да, то переход БЕЗ АДРЕСОВ!
      RJMP TWI_0x18_sawp;чтение тут невозможно! т.к. на чтении будет другое подпрерывание
      SBRC R16,0;проверяем, а не нужно ли нам послать адрес ячейки? в которую хотим писать
      RJMP TWI_0x18_sawsawp;если нужно , то переход. Адрес ячейки состоит из одного байта! соответственно младшего
      ;если ничего не подошло, значит нужно отправить адрес состоящий из двух байт
      ;передачу начинаем со старшего байта, затем просто в тех задании поправим на пересылку оставшегося младшего байта
      LDS R17,I2C_HIGH_ADRES;загружаем старший байт
      ANDI R16,~(1<<0);обнуляем первый бит тех задания, тем самым переводим его на отправку еще одного байта адреса(младшего)
      STS I2C_DO,R16
      OUT TWDR,R17;загружаем старший байт адреса в тви
      RET;выход из подпрерывания
        
      TWI_0x18_sawsawp:;ЭТО КЛОООООН!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Запись только младшего байта адреса
      LDS R17,I2C_LOW_ADRES;загружаем младший байт адреса ячейки слейва
      DEC R16;первращаем sawsawp/sawsarp в просто в sawp или sarp!!!, т.е. загружаем в задание только запись! нужный байт адреса мы уже отослали! теперь только запись/чтение 
      STS I2C_DO,R16 ;закидываем в задания
      OUT TWDR,R17;загружаем адрес ячейки в тви для записи
      OUTI TWCR,0<<TWEA|0<<TWSTA|0<<TWSTO|1<<TWEN|1<<TWIE|1<<TWINT; передача младшего байта адреса!
      RET;выход из подпрерывания
       
      TWI_0x18_sawp:;ЭТО КЛОООООН!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! запись самих байтов
      ;(сюда я вставлял счетчик, сколько раз здесь бывает процессор, и все сходится)
      LDS R16,I2C_KOL_BYTE;считываем, сколько байт нам нужно записать????
      LDS R18,I2C_INDEX_DATA;счетчик, сколько байт скинули
      CP R16,R18; кончились байты то?
      BREQ TWI_0x18_STOP;если да, то переход и СТОП!!!! говорим слейву: хватит братан, но передаем последний байт)
      LDS ZL,I2C_ADRES_BUFER_OUT            //младший байт адреса буфера данных озу, откуда брать байты на отправку
      LDS ZH,I2C_ADRES_BUFER_OUT+1       //старший байт адреса буфера данных озу, откуда брать байты на отправку
      ADD ZL,R18;прибавляем к адресу  количество байт, которые отправили
      ADC ZH,R0
      INC R18;увеличиваем счетчик на 1
      STS I2C_INDEX_DATA,R18;отправляем в озу
      LD R17,Z;берем один из.. байтов по адресу индексной пары 
      ;(сюда я вставлял строчку LDI R17,1    но отправляет в итоге не одни 1, а опять таки 00 и ff)
      OUT TWDR,R17;отправляем в регистр для передачи
      OUTI TWCR,0<<TWEA|0<<TWSTA|0<<TWSTO|1<<TWEN|1<<TWIE|1<<TWINT ;передача очередного байта данных!
      RET;выход из подпрерывания
       
      TWI_0x18_STOP:;СТОПЭ братан слейв,наелся ты байтов, отдохни ЭТО КЛОООН!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      STS I2C_busy,R0;освобождаем линию тви
      OUTI TWCR,1<<TWEA|0<<TWSTA|1<<TWSTO|1<<TWEN|1<<TWIE|1<<TWINT ;запись ОКОНЧЕНА!
      RET;выход из подпрерывания
      TWI_0x28:
      LDS R16,I2C_DO;и так, м ыздесь потому что: 1-отправили адрес и нужна запись байтов в ячейки
      ;2- отправили адрес и нужно чтение и 3 - отправили старший байт памяти, нужно отправить младший.
      CPI R16,i2c_sawp;нужна запись?
      BREQ TWI_0x18_sawp;переход
      SBRC R16,0;нужно записать оставшийся младший байт?
      RJMP TWI_0x18_sawsawp;переход!
      ;а иначе повторный старт!!!!
      OUTI TWCR,1<<TWEA|1<<TWSTA|0<<TWSTO|1<<TWEN|1<<TWIE|1<<TWINT ;повторный старт, т.к. чтение!
      RET;выходи из подпрерывания
       
      .MACRO I2C_OUT;НУЖНО ПРЕДВАРИТЕЛЬНО ЗАКИНУТЬ ОТПРАВЛЯЕМЫЕ ДАННЫЕ В И2С БУФЕР!!!
          ;0-адрес слейва, младший байт = 0!!!
          ; 1-запись или чтение? если с адресом, то сколькибитный?
          ;2-младший байт адреса регистра слэйва
          ;3-старший байт адреса регистра слейва(если не нужен, то 0)
          ;4-сколько байт нужно записать, прочитать?
          ;5-какая скорость передачи нужна?
          ;6-откуда брать байты?
          CLR R16
          STS I2C_INDEX_DATA,R16
          LDI R16,1
          STS I2C_BUSY,R16
          OuTI I2C_SlaveAdres,@0
          //OUTI TWAR,@0;заружаем адрес слэйва
          
          LDI R16,@1;загружаем задание
          STS I2C_DO,R16
          
          .if @3>0x00
          LDI ZL,LOW(@2);адрес регистра слэйва для приема/передачи
          LDI ZH,HIGH(@3)
          STS I2C_LOW_ADRES,ZL
          STS I2C_HIGH_ADRES,ZH
          .else
          LDI ZL,LOW(@2)
          STS I2C_LOW_ADRES,ZL
          .endif

          LDI R16,@4;загружаем значение количества байт для приема/передачи
          STS I2C_KOL_BYTE,R16
          
          OUTI TWSR,0<<TWPS1|0<<TWPS0;предделитель 1
          LDI R16,((F_CPU/@5)-16)/2;расчетскорости приема/передачи данных
          UOUT TWBR,R16
          LDI ZL,LOW(@6)
          LDI ZH,HIGH(@6)
          STS I2C_ADRES_BUFER_OUT,ZL
          STS I2C_ADRES_BUFER_OUT+1,ZH
          OUTI TWCR,1<<TWINT|1<<TWEA|1<<TWSTA|0<<TWSTO|1<<TWEN|1<<TWIE;запуск! отправляем старт! 
      ;TWINT флаг прерывания
      ;TWEA 1-ACK, 0-NACK
      ;TWSTA 1-start, 0-no start
      ;TWSTO 1-stop
      ;TWEN блок TWI включен
      ;TWIE - разрешаем прерывания TWI
         .ENDM
      Тело:
      OUTI I2C_BUFER,1
      OUTI I2C_BUFER+1,2
      I2C_OUT 0xA2,i2c_sawsawp,0x03,0,2,200,I2C_BUFER - сюда больше не вернется
      Main:
      зацикливание
      Rjmp main
      П.С. вот что пишет i2c debuger в протеусе: S A2 A 03 A 00 A FF A P