Обсуждаем контроллеры компании Atmel.
Ответить

Re: Программирование ATtiny13

Вт дек 17, 2019 22:28:50

Код:


#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
unsigned int i,k;

ISR(TIM0_COMPA_vect)    {
   i=i+1;
     if (i==38)
   {
     TCNT0=0x00;
      i=0;
      k=k+1;
      PORTB^=(1<<PORTB0);  // моргаем каждую секунду (инвертируем каждую секунду)
          }
       }
void main(void)
 {
     DDRB=0xFF;
    PORTB=0b00000001;
    TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);  //Счетный режим таймера с часторой....
    TCCR0A=(1<<WGM01) ;   // режим сравнения СТС
    OCR0A=0x1e;    // Заданное число сравления (30)
    TIMSK0=(0<<OCIE0B) | (1<<OCIE0A) | (0<<TOIE0); //Разрешаем выполнение прерывание по совпадению в OCR0A
   
    sei();
 
   while (1)
   {
 
      }
 }


добился что бы счетчик считал 1 секунду.

NStorm писал(а):Потому, чтобы он работал в таком режиме, надо ему такой режим установить в TCCR0A:
Код:
TCCR0A = (1 << WGM01);

Режим называется Clear Timer on Compare Match (CTC). Чтобы он считал до OCR0A, а НЕ до 0xFF.

NStorm, все правильно вы написали.

Но у меня почему-то не получалось пока не сформировал готовый код по совету roman.com и не посмотрел его внимательно.

Re: Программирование ATtiny13

Вт дек 17, 2019 22:42:07

Код:
TIMSK0=(0<<OCIE0B) | (1<<OCIE0A) | (0<<TOIE0); //Разрешаем выполнение прерывание по совпадению в OCR0A

Сдвигать нули ну никакого же смысла. Поэтому:
Код:
TCCR0B=0x05; //ДЕЛЕНИЕ НА 1024

И
Код:
 TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);

В общем-то ничего не отличаются, только 2ая запись визуально понятнее. Если еще б нули оттуда убрать, еще понятнее будет )
В прошлом варианте не хватало только TCCR0A = (1 << WGM01);. Должно было с ним заработать. Где-то в другом месте что-то не так написали.

Добавлено after 4 minutes 9 seconds:
Еще:
unsigned int i,k; - я же писал, надо volatile обязательно, если меняем в прерывании

TCNT0=0x00; - лишнее, он и так сбрасывается каждый в этом режиме до входа в прерывание.

Re: Программирование ATtiny13

Вт дек 17, 2019 23:06:08

А вот попробовал то же фокус проделать с OCR0B.

Так вот, ничего не вышло

OCR0B=0x1e; // Заданное число сравления (30)
TIMSK0=(1<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);

Прочитал в интернетах что СТС не работает с OCR0B

Ну да ладно, буду двигаться дальше, - к ШИМУ.

Добавлено after 3 minutes 46 seconds:
Одновременно читаю уроки по Атмеге, так вот там как-то все более логично...

Re: Программирование ATtiny13

Ср дек 18, 2019 07:41:34

Не работает, да, там сказано что верхнее значение строго OCR0A.

Re: Программирование ATtiny13

Пн авг 03, 2020 11:08:18

И снова здравствуйте!
Вот есть у меня такая задумка

Добавлено after 25 minutes 18 seconds:
есть синтезатор на аttiny13 и lm7001
Lm 7001 управляется с тиньки по 3 пинам
еще 3 пина свободных

Но программа для тинки написана на 1 фиксированную частоту.

Я бы хотел добавить кнопку или даже 2 кнопки, что бы "гонять" частоту туда-сюда. Для них нужно 2 пина
Ну и поняятно что бы видеть какую частоту я ставлю через сдвиговый регистр 74HC595 семисегнментный индикатор и для этого еще нужно 3 пина

И я подумал что ближайший многопиновый аналог аттини13 это attiny2313. В правильном ли направление я мыслю?

Добавлено after 2 minutes 51 second:
Изображение

Re: Программирование ATtiny13

Пн авг 03, 2020 11:10:04

не совсем... ядро тини, но у 2313 нет АЦП, зато есть 16-битный таймер с захватом, больше внешних прерываний, есть USI USART блоки...(это так, на вскидку различия)

Re: Программирование ATtiny13

Пн авг 03, 2020 11:22:26

Код:
/*****************************************************
Chip type               : ATtiny13A
AVR Core Clock frequency: 4,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 8
*****************************************************/
typedef  unsigned char byte ;
typedef  unsigned int  real ;

#include <tiny13.h>
#include <bcd.h>
#include <delay.h>


#define CE   PORTB.2       
#define CL   PORTB.1       
#define DA   PORTB.0       

void lm7001SendByte(byte k)
{
  byte i ;

  for (i = 0; i < 8; i++) {
    if (k&0x1) DA = 1;
    else
    DA = 0;
    delay_us(3);
    CL = 1;
    delay_us(3);
    CL = 0;
    k = k >> 1;
    delay_us(3);
    DA = 0;
  }
}

 
  // Формируем команды
void send_lm7001(){
  real divisor;

  divisor = (27135 + 465) / 10;  //делим на шаг заданный программно для микросхемы
  //         частота + ПЧ
  // пример: (частота + пч) * (кварц / шаг делителя) / реальный кварц
  //          (27135 + 455) * (7200 / 10) / 7200 = 2759
  //          (27135 + 455) * (7200 / 9) / 8000 = 2759

  CL = 0;
  CE = 1;
  delay_us(3);

  lm7001SendByte(divisor & 0x00FF);
  lm7001SendByte((divisor & 0xFF00)>>8);
  lm7001SendByte(0b11010000); 
  // Настройка делителя синтезатора (1-Fmin,101 - 9кГц шаг)
  //                                (1-Fmin, 001 - 10кГц шаг)
  delay_us(3);
  CE = 0;
}

void main(void)
{
PORTB=0x00;
DDRB=0x07;
delay_ms (20);
send_lm7001();      //  отправляем частоту 
delay_ms (200);
   
while (1)
{
#asm("sleep");
}
}     


Добавлено after 1 minute 1 second:
Ivanoff-iv, в каком направлении мне тогда двигаться. Как выбрать контроллер для расширения функционала?

Добавлено after 1 minute 29 seconds:
что бы меньше переписывать код...

Re: Программирование ATtiny13

Пн авг 03, 2020 11:30:38

если у тебя АЦП не задействован - переезжай на 2313...

Re: Программирование ATtiny13

Пн авг 03, 2020 16:11:31

Или использовать драйвер дисплея типа TM1628.
Управляется по 3 проводам, выводит информацию на многоразрядный дисплей,сканирует клавиатуру.

Re: Программирование ATtiny13

Пн авг 03, 2020 16:37:34

код глянул — про АЦП ни слова :)
я тоже сначала хотел пару сдвиговых регистров предложить (1 на выход и 1 на вход), но там 4 провода надо... (выход, вход, клок, выбор чипа) раз здесь хватит 3 - то тоже вариант...

Re: Программирование ATtiny13

Пн авг 03, 2020 17:18:34

Заработает ли вышеприведенный код без доработок на Attiny 2313 ?

Что бы мне не переделывать, а заняться сразу выводом на дисплей (может быть это будет номер канала, тогда нужно всего 2 семисегметных дисплея)
и кнопками.

Re: Программирование ATtiny13

Пн авг 03, 2020 17:28:18

С аттини2313 можно вообще без регистров сдвига сделать,поищите тему "Маленькой радио" на CQHAM,там все это сделано
Ошибся,там регистры сдвига есть

Re: Программирование ATtiny13

Пн авг 03, 2020 19:42:37

Или использовать драйвер дисплея типа TM1628.

Это случайно не со старых спутниковых тюнеров типа Uston, Openboх. Хватит ли у меня ума его подключить.

Re: Программирование ATtiny13

Пн авг 03, 2020 20:35:30

Заработает ли вышеприведенный код без доработок на Attiny 2313 ?

Должен ,т.к. никакой специфичеческой периферии не используется.

Re: Программирование ATtiny13

Чт сен 03, 2020 14:35:24

после довольно длительного перерыва решил снова поизучать Attiny13. Уже попробовал запускать шим и регулировать скважность через АЦП посредством переменного резистоора - получилось. Разбираю регистры и биты. Потихоньку складывается общая картинка как это все работает.
Счас перечитал предыдущие страницы.

Интересует опять вопрос радиоуправления. И вот хочу что бы специалисты снова покритиковали поток моего примитивного сознания.
На 4-5-6 страница этой темы много было уже исписано по поводу передачи импульсов и протоколов. Все это я заново перечитал и пересмотрел ссылки.
Мало того, у меня быль пульт от люстры. Я прошил атмегу328 загручиком Ардуинно, присобачилк к ней 1602 дисплей и с помощью RX радиомодуля и скетча принял сигнал. У меня получилось что-то наподобии код: 46465 и период 262мс. И я подумал, что , получается что бы управлять люстрой нужно всего лишь передать сигнал определенной частоты. (?????). Не факт что это умозаключение было правильным. Но натолкнуло меня на новую мысль.
Так что получается, что я отправляю имульсы определенной частоты , а на приемнике с помощню тиньки принимаю эти имульсы, считаю их, и если скажем, их оказывается 250 штук за 0.1 сек, то это и будет сигнал для исполнительногго механизма. Ну так же не бывает в природе, что бы гдето случайно появился похожий сигнал? Понятно, что здесь никакой защиты. Но тем не менее, правильно ли я мыслю?

Re: Программирование ATtiny13

Чт сен 03, 2020 15:31:14

olegue писал(а):Ну так же не бывает в природе, что бы гдето случайно появился похожий сигнал?
зато бывает, что из пачки в 250 один или двадцать один, или тридцать один, или семь... или сколько-нибудь импульсов не дойдут до приемника... и что тогда?
olegue писал(а):Понятно, что здесь никакой защиты
вот именно

Re: Программирование ATtiny13

Чт сен 03, 2020 16:19:52

Есть вот такая железяка
Изображение
...
Может работать и как приемопередатчик (радиоудлиннитель RS232)... И как самостоятельное ДУ...
JDY-40.pdf
(751.24 KiB) Скачиваний: 152

А за основу пакета взять протокол для DS18B20 (блок из 8 байт с контрольной CRC)...
:roll:

Re: Программирование ATtiny13

Чт сен 03, 2020 16:39:46

ARV писал(а):зато бывает, что из пачки в 250 один или двадцать один

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

Добавлено after 5 minutes 42 seconds:
поэтому и применяют различные протоколы.
Но получается, что у радиоуправления люстрой на TP2262/tp2272 нет никакого протокола?

Re: Программирование ATtiny13

Чт сен 03, 2020 16:49:10

olegue писал(а):у радиоуправления люстрой на TP2262/tp2272 нет никакого протокола?
понятия не имею.

Re: Программирование ATtiny13

Чт сен 03, 2020 20:18:20

...
Но получается, что у радиоуправления люстрой на TP2262/tp2272 нет никакого протокола?

Очень даже есть:
PT2262_5.pdf
(588.6 KiB) Скачиваний: 180

PT2272.pdf
(1.38 MiB) Скачиваний: 207

Только его вычитывать надо - достаточно примитивен и аппаратно закрыт (не во всех редакциях даташитов указывается).
8)
Ответить