Jump to content

Таймер ATtiny13A каждый такт на частоте 9.6 МГц


dubrovkin
 Share

Recommended Posts

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Реле, разъемы, вентиляторы, корпуса, микросхемы, конденсаторы и много другое!

Скидки до 20% на сайте электронного дискаунтера ТМ Электроникс.

Бесплатная доставка в любую точку России + кэшбэк 15%.

Подробнее

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

И...? До запятой "Запись логической единицы в PINx переключает значение PORTx,...". Что не так?

Записали единичку в PINx - PORTx из нуля переключился в единичку, записали еще раз единичку в PINx - PORTx переключился обратно, из единички в ноль.

Link to comment
Share on other sites

Материалы вебинара «Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока»

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Posted (edited)

Всё верно, цитата только для подтверждения. Ну и обратить внимание на то, что это всё independent on the value of DDRxn

Edited by Огонёк
Link to comment
Share on other sites

Комплексные решения с литиевыми батареями EVE для интеллектуальных систем безопасности

Литиевые химические источники тока EVE по своим характеристикам являются идеальным выбором для современных интеллектуальных систем безопасности. EVE разрабатывает литиевые батареи, опираясь на многолетние исследования таких областей применения, как беспроводная связь стандартов Bluetooth, LoRa, Wi-Fi, NB-IoT и ZigBee. Рассмотрим решения для систем безопасности с использованием батарей EVE. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

2 минуты назад, Огонёк сказал:

...independent on the value of DDRxn

"Независимо от значения DDRxn", т.е. от направления порта. Значит такой же операцией можно включать/отключать резисторы подтяжки, если DDRx = 0. Мне так думается.

Link to comment
Share on other sites

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Posted (edited)
11 часов назад, dubrovkin сказал:

Мне как раз говорили, что устанавливать уровень сигнала на выходе можно через PINB, вместо PORTB.

Да, можно, только не у всех МК это можно реализовать. Регистр PINx это регистр состояния порта и как правило доступен только для чтения. Но в некоторых МК (в частности у tiny13) имеется в даташите такая оговорка:

Цитата

 

However, writing a logic one to a bit in the PINx Register, will result in a toggle in the corresponding bit in the Data Register.

Однако запись логической единицы в бит регистра PINx приведёт к переключению соответствующего бита в регистре данных.

 

 То есть произойдёт переключение логического состояния на противоположный если вывод настроен на выход. Если настроен на вход, то будет управлять подтяжкой резистора.   

Вот потому данная процедура работает не на всех МК. К примеру у atmega8 такой оговорки нет, а значит и переключение состояния не произойдёт. :)

Edited by Просто зашёл
Link to comment
Share on other sites

6 часов назад, Просто зашёл сказал:

Вот потому данная процедура работает не на всех МК.

Вот потому данную процедуру не нужно применять  .

Link to comment
Share on other sites

39 минут назад, dodik сказал:

данную процедуру не нужно применять 

Для переносимости кода, лучше не применять. Если конкретно для ATtiny13, то почему бы и нет.

Link to comment
Share on other sites

3 часа назад, ДядяВован сказал:

то почему бы и нет.

Ну нет, так нет. :)

вот такой трэш на Си
 

Спойлер
/*******************************************************
Chip type               : ATtiny13A
AVR Core Clock frequency: 9,600000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 16
*******************************************************/

#include <tiny13a.h>

void write_WS2812B(unsigned char _Green,unsigned char _Red,unsigned char _Blue);

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out 
DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
// State: Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0 
PORTB=(0<<PORTB5) | (1<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);


while (1)
      {
        write_WS2812B(0xAA,0x55,0xFF);

      }
}

void write_WS2812B(unsigned char _Green,unsigned char _Red,unsigned char _Blue)
{
 unsigned char Green = _Green;
 unsigned char Red = _Red;
 unsigned char Blue = _Blue;
 unsigned char caunt_bit=8; 
#pragma optsize-
  do{
     Green<<=1;

      #asm            
        brcc send_zero_G 
      send_one_G: 
        sbi 0x18,0 
        nop  
      send_zero_G:  
        sbi 0x18,0 
        nop
        cbi 0x18,0	
	  #endasm            
  } while (--caunt_bit); 
 
  caunt_bit=8;
  do{
     Red<<=1;
      #asm            
        brcc send_zero_R 
      send_one_R: 
        sbi 0x18,0 
        nop  
      send_zero_R:  
        sbi 0x18,0 
        nop
        cbi 0x18,0	
	  #endasm            
  } while (--caunt_bit);  
  
  caunt_bit=8;
  do{
     Blue<<=1;
      #asm            
        brcc send_zero_B 
      send_one_B: 
        sbi 0x18,0 
        nop  
      send_zero_B:  
        sbi 0x18,0 
        nop
        cbi 0x18,0	
	  #endasm            
  } while (--caunt_bit);  
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif    
}

 

 

Link to comment
Share on other sites

Posted (edited)

Ребят, а поясните по поводу некоторых команд и их времени выполнения. Например, команда SBRC (Set Bits in Register). В официальном Datasheet по ATtiny13A написано в поле #Clocks значение 1/2/3. Я видел команды, которые выполняются либо 1 либо 2 такта, в зависимости от условий (например команда BRCC), как раз для них пишут 1/2. Но, в Datasheet по ATtiny13A нет описания команд. Поэтому я пошёл в другой официальный документ от Microchip - AVR Instruction Set Manual. Нашёл там команду SBRC. И там для данной команды, для всех архитектур (AVRe, AVRxm, AVRxt и AVRrc) стоит время выполнения в 1 такт. Тогда что за 1/2/3? Вот Вы говорите, смотрите Datasheet...

Edited by dubrovkin
Link to comment
Share on other sites

6 минут назад, dubrovkin сказал:

команда SBRC (Set Bits in Register)

а тогда что делает команда SBR?

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

Posted (edited)

Отставить. В PDF не хорошо переходит по ссылкам. Я нажимал на одну команду, а он мне переходил на другую.

Edited by dubrovkin
Link to comment
Share on other sites

21 минуту назад, dubrovkin сказал:

Ребят, а поясните по поводу некоторых команд и их времени выполнения. Например, команда SBRC...

Пропустить следующую команду, если бит РОН сброшен.

Вам бы скачать книгу Евстифеева А.В. "Микроконтроллеры AVR семейства Tiny" или/и "Микроконтроллеры AVR семейства Mega". Там все найдете... и на русском. 

28 минут назад, dubrovkin сказал:

...Тогда что за 1/2/3? Вот Вы говорите, смотрите Datasheet...

Кол-во тактов выполнения зависит от условий:

1т. - нет пропуска.

2т. - размер пропускаемой команды 1 слово.

3т. - размер пропускаемой команды 2 слова.

Link to comment
Share on other sites

10 часов назад, Геннадий сказал:

Кол-во тактов выполнения зависит от условий:

1т. - нет пропуска.

2т. - размер пропускаемой команды 1 слово.

3т. - размер пропускаемой команды 2 слова.

и в зависимости от кейса вставить нужное количество nop .

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

Link to comment
Share on other sites

Блин, ребят, да не, Вы не так всё поняли. Смысл какой. Я открыл Datasheet по ATtiny13A. Перешёл там к главе Instruction Set Summary. Там долистал до команд BRANCH INSTRUCTIONS. И начал разглядывать колонки. Увидел 1/2/3 и ряда инструкций и увидел 1/2. Так как тут описаний нет, пошёл в AVR Instruction Set Manual. Решил прочитать про команду BRCC, у которой стоит 1/2 и в документе AVR Instruction Set Manual, в содержании тыкнул на неё мышкой. Открылась страничка с этой командой, где я пролистал вниз (хотя там и так на экране уже видно было) до раздела Cycles. И там увидел как расписано когда будет 1 такт, а когда 2. Далее я вернулся в Datasheet от ATtiny13A и обратил внимание на команду SBRC, где указано 1/2/3. Пошёл в AVR Instruction Set Manual. Нашёл её в содержании и тыкнул (там когда на команды тыкаешь, идёт переход на главу с описанием этой команды). И вот переход сработал. А ищу раздел Cycles и вижу там только то, что там всё выполняется за 1 такт. Вот и у меня сразу паника. А как оказалось, там ошибка в переходе была, притыке на команду SBRC, меня кинуло на команду SBR. А я это не увидел. И когда начал сюда писать, я название конмады взял (точнее её мнемонику) из Datasheet'а по ATtiny13A, а расшифровку скопировал уже из того места, куда меня перенесли в AVR Instruction Set Manual. Копировал прям из этой строки "SBR – Set Bits in Register". Но меня интересовала только правая часть от -. В общем, я и не заметил что речь идёт про другую команду. В общем вот так получилось. Переходы у них сделаны с ошибкой. Ну, или так офигенно переходит Microsoft Edge (я в их браузере эти pdf открываю).

Ребят, а на счёт входов. Вот настрою я в DDRB какой-нибудь пин на вход. Через PORTB могу настроить этот же пин на то, будет ли подтягивающий резистор или нет. Для подключения кнопки, какой из вариантов (с подтягивающим резистором или без) предпочтительно использовать? Я так понимаю, предпочтительно именно с подтягивающим резистором? Тогда вопрос, обязательно ли тогда ставить резистор от минуса и через кнопку до входа в микроконтроллер (чтобы при замыкании, ножка микроконтроллера не напрямую была подключена к минусу, а через резистор) и если да, то какого номинала?

Ещё по поводу дребезка контактов при нажатии. Как с этим обстоя дела. Сам микроконтроллер с этим умеет работать или нужно на ассемблере что-то выдумывать?

И ещё вопрос по поводу прерываний. Так как для меня важно точно срок в срок отправлять сигналы, я буду отключать прерывания. Но, мне нужно будет всё равно получать уведомление что на кнопку нажали и отправлять другой цвет. Я так понимаю, я мог бы это сделать и без прерываний, а просто после отправки опрашивать какое там состояние на входе. Но что-то мне кажется это не очень хорошей идеей. Вот что на счёт прерываний. Вопросы такие:

  1. Если я отключил прерывания, нажал кнопку, затем отжал и затем включил прерывания. Придёт ли мне прерывание (то есть может он запоминает, но пока не обрабатывает)? Думаю что не придёт.
  2. Если я отключил прерывания, нажал кнопку, включил прерывания и затем отжал кнопку. Придёт прерывание?

Ещё я так и не понял, почему прерывания называются внешние (там, вроде для пина INT0) и внутренние для всех остальных (включая и PCINT1, что является той же ножкой, что и пин INT0). В чём различие такое внутренние и внешние? Они же все один фиг приходят от того, если извне сигнал поменяется. Да, я знаю что у внутреннего условий больше для срабатываний, но всё же, названия внутренние и внешние - это громко звучит.

Link to comment
Share on other sites

Posted (edited)

А на счёт вопросов про прерывания, где 1 и 2. Там я имел в виду про сигнал в момент нажатия. То есть, если подтягивающий резистор, то там же всё инвентируется. То есть, всегда +, а в момент нажатия -. А если без него, то всегда -, а в момент нажатия +. В общем, там вопрос относится к тому, что первое нажатие должно бы выдать прерывание.

Edited by dubrovkin
Link to comment
Share on other sites

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

ставить резистор от минуса и через кнопку

Не надо.

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

предпочтительно именно с подтягивающим резистором?

Да.

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

нужно на ассемблере что-то выдумывать?

Да

17 минут назад, dubrovkin сказал:

кажется это не очень хорошей идеей

Кнопка штука медленная, поэтому можно из без прерываний. Достаточно опрашивать с периодом 20-30 мс. 

 

Link to comment
Share on other sites

И кстати да, я видимо перепутал терминологии. Не внутренние и внешние, а аппаратное и программное. Но вопрос остался)

Link to comment
Share on other sites

"Огласите, пожалуйста, весь список..." (к/ф "Операция Ы и другие приключения Шурика").:)

Опишите весь проект, тогда будет возможность правильнее выбрать направление решения задачи.

Link to comment
Share on other sites

Не не не) Я как хочу, Вы меня только правилам игры в шахматы научите, а играть я сам буду) Так же и тут. Я видел что Выше там шлют сообщения как биты отправляют. Я даже не читаю их. Я уже составил как я буду отправлять. То есть, мне нужны только ядровые вещи, правила работы. Далее я сам всё придумаю. В том и интерес.

Link to comment
Share on other sites

Прерывание от кнопки не очень хорошая идея, из-за дребезга. Я обычно делаю опрос кнопок в прерывании по таймеру, либо как-то ещё с определенным интервалом. Таким образом и с дребезгом проще бороться. Если у Вас в программе уже будут определены тайминги для иных процессов, то привяжите к ним опрос кнопки. Допустим закончили передачу, опросили кнопку, запомнили её состояние в переменной.

Link to comment
Share on other sites

У меня, конечно была идея, написать программу, чтобы определить как обрабатываются прерывания. Скажем, смысл программы такой. Каждые N времени (скажем 1-2 секунды) включаются и выключаются прерывания. Чтобы я понимал когда какое состояние, выдавать сигнал - будет гореть светодиод. Подключаю кнопку. И, когда светодиод не горит (прерывания отключены), нажать на кнопку и отпустить её тогда, когда светодиод загорится (прерывания разрешены). Ну и, в обработчике прерываний инвентировать сигнал на другую ножку, где тоже будет светодиод, по которому можно будет понять отработало ли прерывание. Просто быстрее спросить тут, чем это всё составлять.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

  • Сообщения

    • Ля как все печально, из подручных средств ни чем, никак не померить?
    • Так это 2104 сходит с ума от помех ?
    • Ловлей блох занимаются и так во всем, что касается усилителей, не только с диодами в блоке питания - это лишь одна шиза из многих. Гонятся за недостижимым идеалом, но почему-то только когда дело касается усилителей, в остальных сферах жизни у них как правило бардак и хаос.  Совершенно верно. Только учиться тоже нужно не лишь бы как и не у лишь бы кого, иначе могут научить такому, что например Земля плоская и стоит на трех слонах. 
    • Попробовал симуляцию, не хочет работать, возбуждается.
    • Трёхфазный промышленный преобразователь "Симметра" на 10 кВт имеет батарею в 96 вольт напряжением.Стоят на АЗС.Рассчитан на 5 минут работы пока ДГУ на режим выйдет и АВР питание на генератор не переключит.Питают насосы ТРК.Они трёхфазные.Кассы и освещение питают обычные UPC на 1500 Вт. АЗС-Автозаправочная станция ДГУ-Дизельгенераторная установка АВР-Автоматический ввод резерва ТРК-Топливораздаточная колонка.
    • Матрица семь на восемь и микроконтроллер, опрашивающий её в цикле. Концептуально ничего сложного. Не, фигня какая-то. Чего-то я недодумал.
    • c того вывода потенциометра, куда подаётся сигнал. Со второго вывода, который на землю, будет картина наоборот: сначала сопротивление почти не растёт, а потом резко увеличивается.    Я как-то измерял имеющиеся у меня такие советские переменники разных лет, оказалось, что: Многие имеют сильное отклонение сопротивления от номинала, чуть ли не в половину Выводы часто имеют плохой контакт к токопроводящему слою. Меряешь между отводом и средним выводом. У одних резисторов минимум где-то сотня ом, а у некоторых – килоомы. Причём даже на одном и том же резисторе с двумя отводами получалось, что эти минимальные сопротивления (когда ползунок возле отвода) различались. 
×
×
  • Create New...