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

Обсуждаем контроллеры компании Atmel.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Код: Выделить всё



#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 и не посмотрел его внимательно.
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Код: Выделить всё

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; - лишнее, он и так сбрасывается каждый в этом режиме до входа в прерывание.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

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

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

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

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

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

Добавлено after 3 minutes 46 seconds:
Одновременно читаю уроки по Атмеге, так вот там как-то все более логично...
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Не работает, да, там сказано что верхнее значение строго OCR0A.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

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

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

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

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

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

Добавлено after 2 minutes 51 second:
Изображение
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

не совсем... ядро тини, но у 2313 нет АЦП, зато есть 16-битный таймер с захватом, больше внешних прерываний, есть USI USART блоки...(это так, на вскидку различия)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Код: Выделить всё

/*****************************************************
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:
что бы меньше переписывать код...
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

если у тебя АЦП не задействован - переезжай на 2313...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Мудрый кот
Сообщения: 1808
Зарегистрирован: Пт мар 26, 2010 17:16:52
Откуда: Kazan

Сообщение pcb432 »

Или использовать драйвер дисплея типа TM1628.
Управляется по 3 проводам, выводит информацию на многоразрядный дисплей,сканирует клавиатуру.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

код глянул — про АЦП ни слова :)
я тоже сначала хотел пару сдвиговых регистров предложить (1 на выход и 1 на вход), но там 4 провода надо... (выход, вход, клок, выбор чипа) раз здесь хватит 3 - то тоже вариант...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

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

Что бы мне не переделывать, а заняться сразу выводом на дисплей (может быть это будет номер канала, тогда нужно всего 2 семисегметных дисплея)
и кнопками.
Мудрый кот
Сообщения: 1712
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Сообщение Novice user »

С аттини2313 можно вообще без регистров сдвига сделать,поищите тему "Маленькой радио" на CQHAM,там все это сделано
Ошибся,там регистры сдвига есть
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

[uquote="pcb432",url="/forum/viewtopic.php?p=3874567#p3874567"]Или использовать драйвер дисплея типа TM1628.[/uquote]
Это случайно не со старых спутниковых тюнеров типа Uston, Openboх. Хватит ли у меня ума его подключить.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="olegue",url="/forum/viewtopic.php?p=3874589#p3874589"]Заработает ли вышеприведенный код без доработок на Attiny 2313 ?[/uquote]
Должен ,т.к. никакой специфичеческой периферии не используется.
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

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

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15698
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Есть вот такая железяка
Изображение
...
Может работать и как приемопередатчик (радиоудлиннитель RS232)... И как самостоятельное ДУ...
JDY-40.pdf
(751.24 КБ) 214 скачиваний
А за основу пакета взять протокол для DS18B20 (блок из 8 байт с контрольной CRC)...
:roll:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

ARV писал(а):зато бывает, что из пачки в 250 один или двадцать один
т.е я понял, что импульсов должно быть поменьше, а порядка среди них побольше.

Добавлено after 5 minutes 42 seconds:
поэтому и применяют различные протоколы.
Но получается, что у радиоуправления люстрой на TP2262/tp2272 нет никакого протокола?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15698
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

[uquote="olegue",url="/forum/viewtopic.php?p=3887552#p3887552"]...
Но получается, что у радиоуправления люстрой на TP2262/tp2272 нет никакого протокола?[/uquote]
Очень даже есть:
PT2262_5.pdf
(588.6 КБ) 252 скачивания
PT2272.pdf
(1.38 МБ) 285 скачиваний
Только его вычитывать надо - достаточно примитивен и аппаратно закрыт (не во всех редакциях даташитов указывается).
8)
Ответить

Вернуться в «AVR»