Страница 6 из 11
Re: Программирование ATtiny13
Добавлено: Вт дек 17, 2019 22:28:50
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 и не посмотрел его внимательно.
Re: Программирование ATtiny13
Добавлено: Вт дек 17, 2019 22:42:07
NStorm
Код: Выделить всё
TIMSK0=(0<<OCIE0B) | (1<<OCIE0A) | (0<<TOIE0); //Разрешаем выполнение прерывание по совпадению в OCR0A
Сдвигать нули ну никакого же смысла. Поэтому:
И
Код: Выделить всё
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
olegue
А вот попробовал то же фокус проделать с OCR0B.
Так вот, ничего не вышло
OCR0B=0x1e; // Заданное число сравления (30)
TIMSK0=(1<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);
Прочитал в интернетах что СТС не работает с OCR0B
Ну да ладно, буду двигаться дальше, - к ШИМУ.
Добавлено after 3 minutes 46 seconds:
Одновременно читаю уроки по Атмеге, так вот там как-то все более логично...
Re: Программирование ATtiny13
Добавлено: Ср дек 18, 2019 07:41:34
NStorm
Не работает, да, там сказано что верхнее значение строго OCR0A.
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 11:08:18
olegue
И снова здравствуйте!
Вот есть у меня такая задумка
Добавлено 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
Ivanoff-iv
не совсем... ядро тини, но у 2313 нет АЦП, зато есть 16-битный таймер с захватом, больше внешних прерываний, есть USI USART блоки...(это так, на вскидку различия)
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 11:22:26
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:
что бы меньше переписывать код...
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 11:30:38
Ivanoff-iv
если у тебя АЦП не задействован - переезжай на 2313...
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 16:11:31
pcb432
Или использовать драйвер дисплея типа TM1628.
Управляется по 3 проводам, выводит информацию на многоразрядный дисплей,сканирует клавиатуру.
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 16:37:34
Ivanoff-iv
код глянул — про АЦП ни слова

я тоже сначала хотел пару сдвиговых регистров предложить (1 на выход и 1 на вход), но там 4 провода надо... (выход, вход, клок, выбор чипа) раз здесь хватит 3 - то тоже вариант...
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 17:18:34
olegue
Заработает ли вышеприведенный код без доработок на Attiny 2313 ?
Что бы мне не переделывать, а заняться сразу выводом на дисплей (может быть это будет номер канала, тогда нужно всего 2 семисегметных дисплея)
и кнопками.
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 17:28:18
Novice user
С аттини2313 можно вообще без регистров сдвига сделать,поищите тему "Маленькой радио" на CQHAM,там все это сделано
Ошибся,там регистры сдвига есть
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 19:42:37
olegue
[uquote="pcb432",url="/forum/viewtopic.php?p=3874567#p3874567"]Или использовать драйвер дисплея типа TM1628.[/uquote]
Это случайно не со старых спутниковых тюнеров типа Uston, Openboх. Хватит ли у меня ума его подключить.
Re: Программирование ATtiny13
Добавлено: Пн авг 03, 2020 20:35:30
NStorm
[uquote="olegue",url="/forum/viewtopic.php?p=3874589#p3874589"]Заработает ли вышеприведенный код без доработок на Attiny 2313 ?[/uquote]
Должен ,т.к. никакой специфичеческой периферии не используется.
Re: Программирование ATtiny13
Добавлено: Чт сен 03, 2020 14:35:24
olegue
после довольно длительного перерыва решил снова поизучать Attiny13. Уже попробовал запускать шим и регулировать скважность через АЦП посредством переменного резистоора - получилось. Разбираю регистры и биты. Потихоньку складывается общая картинка как это все работает.
Счас перечитал предыдущие страницы.
Интересует опять вопрос радиоуправления. И вот хочу что бы специалисты снова покритиковали поток моего примитивного сознания.
На 4-5-6 страница этой темы много было уже исписано по поводу передачи импульсов и протоколов. Все это я заново перечитал и пересмотрел ссылки.
Мало того, у меня быль пульт от люстры. Я прошил атмегу328 загручиком Ардуинно, присобачилк к ней 1602 дисплей и с помощью RX радиомодуля и скетча принял сигнал. У меня получилось что-то наподобии код: 46465 и период 262мс. И я подумал, что , получается что бы управлять люстрой нужно всего лишь передать сигнал определенной частоты. (?????). Не факт что это умозаключение было правильным. Но натолкнуло меня на новую мысль.
Так что получается, что я отправляю имульсы определенной частоты , а на приемнике с помощню тиньки принимаю эти имульсы, считаю их, и если скажем, их оказывается 250 штук за 0.1 сек, то это и будет сигнал для исполнительногго механизма. Ну так же не бывает в природе, что бы гдето случайно появился похожий сигнал? Понятно, что здесь никакой защиты. Но тем не менее, правильно ли я мыслю?
Re: Программирование ATtiny13
Добавлено: Чт сен 03, 2020 15:31:14
ARV
olegue писал(а):Ну так же не бывает в природе, что бы гдето случайно появился похожий сигнал?
зато бывает, что из пачки в 250 один или двадцать один, или тридцать один, или семь... или сколько-нибудь импульсов не дойдут до приемника... и что тогда?
olegue писал(а):Понятно, что здесь никакой защиты
вот именно
Re: Программирование ATtiny13
Добавлено: Чт сен 03, 2020 16:19:52
BOB51
Есть вот такая железяка

...
Может работать и как приемопередатчик (радиоудлиннитель RS232)... И как самостоятельное ДУ...
А за основу пакета взять протокол для DS18B20 (блок из 8 байт с контрольной CRC)...

Re: Программирование ATtiny13
Добавлено: Чт сен 03, 2020 16:39:46
olegue
ARV писал(а):зато бывает, что из пачки в 250 один или двадцать один
т.е я понял, что импульсов должно быть поменьше, а порядка среди них побольше.
Добавлено after 5 minutes 42 seconds:
поэтому и применяют различные протоколы.
Но получается, что у радиоуправления люстрой на TP2262/tp2272 нет никакого протокола?
Re: Программирование ATtiny13
Добавлено: Чт сен 03, 2020 16:49:10
ARV
olegue писал(а):у радиоуправления люстрой на TP2262/tp2272 нет никакого протокола?
понятия не имею.
Re: Программирование ATtiny13
Добавлено: Чт сен 03, 2020 20:18:20
BOB51
[uquote="olegue",url="/forum/viewtopic.php?p=3887552#p3887552"]...
Но получается, что у радиоуправления люстрой на TP2262/tp2272 нет никакого протокола?[/uquote]
Очень даже есть:
Только его вычитывать надо - достаточно примитивен и аппаратно закрыт (не во всех редакциях даташитов указывается).
