Jump to content

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


dubrovkin
 Share

Recommended Posts

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

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

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

Подробнее

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

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

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

Link to comment
Share on other sites

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

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

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

Posted (edited)

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

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

Литиевые ХИТы EVE Energy на складе в Компэл

На склад КОМПЭЛ поступил ассортимент литиевых химических источников тока EVE. На данный момент доступны батарейки серии ER типоразмеров 1/2АА, С, D и аккумуляторы серий ICR, INR с типоразмером 18650. 

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

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

...independent on the value of DDRxn

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

Link to comment
Share on other sites

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.

  • Сообщения

    • Если бы я ранее хоть намек где-нибудь встретил, что мне можно будет сделать двухтактный генератор с чистым синусом, то я бы пошел именно по этому пути. Тем более изначально я делал на двухтактном генераторе без синуса (мультивибратор на транзисторах). Но то оборудование (скважинный глубинный насос на 750 Вт, циркуляционный насос отопления, холодильник), из-за которого я все это делаю без синусоиды работают очень плохо. Уже что-то менять мне бессмысленно, т.к. я даже трансформатор намотал под схему с eg8010 и нашел компромисс холостого хода (30 вт для 15-ти кг трансформатора) и мощности. Понял, он должен соединяться к питанию после диода.
    • "Рубрика эксперименты". Подключил модуль на AD8495, которые когда-то предназначались сюда к тестовой плате АЦП. Примерно подобрал сопротивления резисторов для делителя, не прямо так точно, но близко. Итоги такие вот, достаточно хорошие. Наверное стоит многооборотниками точно выставить номиналы, да и потом по факту отрегулировать. Лабораторный ртутный где-то есть)  Опорник тут это просто кс113а Сейчас показания 269-270. 
    • Богатые такого слова не знают
    • Это из ряда "позолоченные мобилки с брюликами", как и прочие предметы роскоши с сомнительной практичностью.
    • Спасибо тебе большое, @Огонёк! Есть уже прояснение. Касаемо тех.инфы. Условно, у меня одно обозначение на нерабочей микросхеме с матплаты, а заказал я микросхемы такие же, но обозначение другое, имеется ввиду тех.инфа, подойдут ли они? Или же для замены нерабочей микросхемы мне нужна абсолютно такая же микросхема, с теми же обозначениями вплоть до каждой цифры?  и снова большое спасибо!     Ты реально думаешь, что я не прошелся по даташитам? Я покурил все форумы, прочитал даташиты на каждый из резисторов и микросхем и нигде нет информации по последним буквам и цифрам.    Каким образом это относится к моему вопросу? Какая разница, кто их будет паять? К чему этот вопрос? Черным по белому (в зависимости от настроек браузера) в посте написано, что будет работой заниматься другой человек, а не тот, кто спрашивает. Его квалификация высока. Не волнуйся так сильно на мой счет.    Потому люди и задают вопросы, чтоб понять то, чем интересуются. Будь то из любопытства или повышения квалификации. 
    • Специально-нестандартным местам нестандартные значения ёмкости)
    • 150*2=300 Это не мощник, ест мало. Удвоитель норм прокатит
×
×
  • Create New...