Например TDA7294

Форум РадиоКот • Просмотр темы - Программирование ATtiny13
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пн дек 09, 2019 15:31:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 49 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Вт ноя 12, 2019 09:55:49 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 191
Рейтинг сообщения: 0
Ежли охота Си освоить - то тинька 13я не самое лучшее из имеющегося.

Как разница на таких простых примерах?

Другое дело - на чистом ассемблере в АВР студии 4.19 - там и симулятор работает
и места будет в достатке, и понятнее на уровне "железа".

Да ну. Не нулевые года на дворе в конце-концов. Симулятор работает и в протеусе прекрасно на C.

Добавлено after 6 minutes 42 seconds:
между циклами ожидающими отпускания кнопки вставь циклы, ожидающие нажатия...

Всё верно, только чуть поправлю - ожидающие отпускания )

olegue, соб-но вам Ivanoff-iv правильно подсказал - между while ((PINB & (1 << PB1))){}; и while ((PINB & (1 << PB1))){ PORTB^=(1<<PB0); ... у вас нет ничего. Вы нажимаете кнопку раз, переходите ко 2му while, который сразу же не срабатывает, потому что кнопка еще нажата. Ведь кнопка - не сферическая в вакууме, она не моментально отжимается, а нажата сколько-то там времени, которое много больше, чем 3-4 инструкции МК выполнить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Вт ноя 12, 2019 10:53:04 
Говорящий с текстолитом
Аватар пользователя

Карма: 12
Рейтинг сообщений: 39
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 1650
Рейтинг сообщения: 0
NStorm писал(а):
Ведь кнопка - не сферическая в вакууме, она не моментально отжимается, а нажата сколько-то там времени, которое много больше, чем 3-4 инструкции МК выполнить.


вот потихоньку уже начинаю это понимать.


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Вт ноя 12, 2019 14:08:05 
Собутыльник Кота
Аватар пользователя

Карма: 23
Рейтинг сообщений: 252
Зарегистрирован: Пт мар 09, 2007 15:01:52
Сообщений: 2868
Откуда: Биробиджан
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Правильней проверять кнопку не постоянно, зависая на ней в бесконечном цикле, а в ходе выполнения основной программы. Для простого мигания это не критично, но лучше как можно реже использовать _ms_delay(), это тормозит основную программу.

olegue, проверяй нажатия не в цикле while, а в проверке if. Я вижу примерно следующий алгоритм:
Код:
переменная A = 0
бесконечный цикл {

  если нажата кнопка{
    подождать
    если кнопка всё ещё нажата {присвоить переменной A значение противоположное тому что в ней было}
  }

  если переменная A разрешает мигание {
    включить порт
    подождать
    выключить порт
  }
  иначе {
    выключить порт
  }
}


Но опять же повторюсь что не стоит применять в основном цикле задержки если они действительно не нужны


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Вт ноя 12, 2019 14:52:35 
Говорящий с текстолитом
Аватар пользователя

Карма: 12
Рейтинг сообщений: 39
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 1650
Рейтинг сообщения: 0
да, кстати, я тоже нахожу довольно трудным управление сразу несколькими вложенными циклами.
Хотя, возможно, это более правильный способ. Но удержать его в голове просто немыслимо пока.


Вернуться наверх
 
Видеокурс «Работаем с микроконтроллерами STM32G0». Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Вт ноя 12, 2019 15:44:59 
Собутыльник Кота
Аватар пользователя

Карма: 23
Рейтинг сообщений: 252
Зарегистрирован: Пт мар 09, 2007 15:01:52
Сообщений: 2868
Откуда: Биробиджан
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А зачем удерживать в голове если можно нарисовать алгоритм на бумаге?


Вернуться наверх
 
Финальные результаты тестирования литиевых батареек FANSO при нормальных условиях

Перед разработчиком устройства, в котором предполагается использование батарейки, всегда стоит задача выбора того или иного бренда. Конечно, наиболее объективный результат по качеству можно получить при реальном тестировании в режиме работы самого устройства. Для того чтобы у разработчиков была некоторая информация о реальных значениях основных параметров ЛХИТ, инженеры компании КОМПЭЛ решили провести серию из трех тестов. Первый тест на постоянный разряд в нормальных климатических условиях, начатый в апреле 2019 г., мы завершили.

Узнать финальный результат тестирования>>
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Вт ноя 12, 2019 16:00:31 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 191
Рейтинг сообщения: 0
olegue, функции и макросы могут помочь визуально сделать код более легко читаемым.
Еще советую - почитайте про конечные автоматы. Очень часто на них реализуются в МК задачи.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Вт ноя 12, 2019 22:36:24 
Говорящий с текстолитом
Аватар пользователя

Карма: 12
Рейтинг сообщений: 39
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 1650
Рейтинг сообщения: 0
Вот что у меня получилось с миганеим светодиода
Одно нажатие - включить мигание
Второе нажатие - выключить мигание
Привожу с коментами. Посмотртие. Учел нажатие и отпускание, как и советовали

Код:
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{

DDRB =(1<<PB0);  // это будет выход, т.е на PB0 будет светодиод)
PORTB=(1<<PB1); //(по аналогии с атмегой PB1=1 (подключен подтягивающий резистор),

while(1)
{
   
      while ((PINB&(1 << PB1))){} //  (Жднем нажатия)
   _delay_ms(20); // Нажали Задержка 20мс. Дребезг
     
       while (!(PINB&(1 << PB1))){ } //  (Жднем отпускания)
   _delay_ms(20); // Отпустили Задержка 20мс Дребезг
     
       while ((PINB&(1 << PB1))){ //  (Жднем нажатия) И входим в цикл Моргания (Моргаем)
           PORTB ^= (1 << PB0);_delay_ms(200);PORTB ^= (1 << PB0);
       }
       _delay_ms(20); // Нажали Задержка 20мс, Дребезг Выходим из цикла моргания.
       
        while (!(PINB&(1 << PB1))){ } //  (Жднем отпускания)
   _delay_ms(20); // Отпустили и вернулись в начало Задержка 20мс Дребезг
}
}


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 04:11:59 
Друг Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 996
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 3853
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
1) моргать не будет... точнее будет, но это глазу не будет видно...
нужно внутри цикла только одно переключение порта оставить.
2) при выходе из моргания светодиод стоит тушить принудительно т.к. если выйти при включенном светодиоде, то он так и останется гореть...
3) в целом для изучения неплохо, но для работы этот код подойдет только если мк кроме мигания ничего не делает - АЛУ всё время занят и ему некогда обрабатывать другие инструкции... если их ему подсовывать через прерывания, то будет немного сбиваться частота мигания светодиодом... (проблема тут в программных задержках делай_мс)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством.
Не берись за много дел сразу - можешь обделаться :)


Вернуться наверх
 
Распродажа паяльных станций ATTEN и аксессуаров!
Индукционная паяльная станция AT315D - 3 977 ₽, станция паяльная AT80D – 2177 ₽, станция паяльная AT936b – 1000 ₽!

Заходите в раздел акции и спецпредложения на сайте prist.ru, покупайте измерительные приборы, инструмент и паяльно-ремонтное оборудование по специальным ценам.
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 09:05:41 
Говорящий с текстолитом
Аватар пользователя

Карма: 12
Рейтинг сообщений: 39
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 1650
Рейтинг сообщения: 0
Ivanoff-iv писал(а):
1) моргать не будет... точнее будет, но это глазу не будет видно...


Как не видно будет . Там задержка 200 мс...??
PORTB ^= (1 << PB0);_delay_ms(200);PORTB ^= (1 << PB0);


Ivanoff-iv писал(а):
при выходе из моргания светодиод стоит тушить принудительно т.к. если выйти при включенном светодиоде, то он так и останется гореть...


да, я его гасил, а потом убрал этот код, тут согласен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 11:01:39 
Друг Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 996
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 3853
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
вот смотри: первая инструкция его (допустим) зажгет, потом ждем, потом гасим, тутже начинается новый виток цикла и светодиод зажигается снова... светодиод будет выключен около десяти тактов или (при тактовой 8 МГц) 1,25 мкс...
(а включен 200мс - т.е. в 160000 раз дольше чем выключен...)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством.
Не берись за много дел сразу - можешь обделаться :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 11:08:09 
Говорящий с текстолитом
Аватар пользователя

Карма: 12
Рейтинг сообщений: 39
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 1650
Рейтинг сообщения: 0
вот смотри: первая инструкция его (допустим) зажгет, потом ждем, потом гасим, тутже начинается новый виток цикла и светодиод зажигается снова... светодиод будет выключен около десяти тактов или (при тактовой 8 МГц) 1,25 мкс...
(а включен 200мс - т.е. в 160000 раз дольше чем выключен...)


я пытаюсь понять, что Вы пояснили, но то что я вижу в Протеусе получается неправильно?
В протеусе диод моргает, в железе не проверял, но теперь хочуется уже вшить этот код в тинку и посмотреть.

Кстати, смотрел Таймеры. Ну там конечно, на первых порах можно мозг сломать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 13:46:19 
Друг Кота
Аватар пользователя

Карма: 83
Рейтинг сообщений: 817
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 9811
Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR)
Рейтинг сообщения: 0
Мигание заметно только до 15Гц.
0,06 секунды на период и больше.
И то... не всяким глазом... А ШПРОТ это все равно покажет.
Лучше раз в пол секунды состояние менять для наглядности.
500 и более миллисекунд.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 14:39:39 
Говорящий с текстолитом
Аватар пользователя

Карма: 12
Рейтинг сообщений: 39
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 1650
Рейтинг сообщения: 0
Помогайте опять, хотел было тут уже в прерывания влезьть да не тут то было: асадзи назад.

Цитата:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


int main(void)
{

DDRB =(1<<PB0);
PORTB=(1<<PB0);

DDRB =(1<<PB1);
PORTB=(1<<PB1);


while (1)
{
PORTB^=(1<<PB0); _delay_ms(500);
PORTB^=(1<<PB1); _delay_ms(500);
// PORTB^=(1<<LED2); _delay_ms(500);


}
}


должно моргать 2 ламоптчик попеременно, но моргает только последняя обьявленная-инициализированная строками DDRB и PORTB
Что опять не так? Если PB1 убираю то тогда мограет pb0, если еще доБавляю pb2, то она моргает - первые 2 нет!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 14:56:52 
Друг Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 996
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 3853
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
порт настроил неправильно
у тебя последующая настройка затирает результат предыдущей
надо так:
ддр=((1<<порт0)|(1<<порт1));
или так
ддр=1<<порт0;
ддр|=1<<порт1;

Добавлено after 2 minutes 32 seconds:
П.С.: ддр здесь взят для примера...

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством.
Не берись за много дел сразу - можешь обделаться :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 16:05:16 
Говорящий с текстолитом
Аватар пользователя

Карма: 12
Рейтинг сообщений: 39
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 1650
Рейтинг сообщения: 0
Спасибо. Теперь работает
Цитата:
int main(void)
{

DDRB =((1<<PB0)| (1<<PB1) | (1<<PB2));
PORTB=((1<<PB0) | (1<<PB1) | (1<<PB2));



while (1)
{
PORTB^=(1<<PB0); _delay_ms(500);
PORTB^=(1<<PB1); _delay_ms(500);
PORTB^=(1<<PB2); _delay_ms(500);
// PORTB^=(1<<LED2); _delay_ms(500);


}
}


Добавлено after 50 seconds:
можно дальше идти

Добавлено after 52 minutes 49 seconds:
я разобрал вот этот код. Здесь работа с кнопками через програмные прерывания
У меня он почему то не работает. Вероятно где -то ошибка ,но найти ее я немогу
С моей точки здения вроде все правильно написано.

Код:
*/

//#define F_CPU 1200000UL
#define LED PB2
#define BUTTON1 PB3 // PCINT3
#define BUTTON2 PB4 // PCINT4

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

// Обработчик прерывания PCINT0
ISR(PCINT0_vect)
{
   _delay_ms (50); // антидребезг (использовать задержки в прерываниях некошерно, но пока и так сойдёт)
  if ( (PINB & (1<<BUTTON1)) == 0 || (PINB & (1<<BUTTON2)) == 0 ) // если нажата одна из кнопок
  {
    PORTB ^= (1<<LED); //переключаем состояние светодиода (вкл./выкл.)
    while ( (PINB & (1<<BUTTON1)) == 0 || (PINB & (1<<BUTTON2)) == 0 ) {} // ждём отпускания кнопки
  }
}

int main(void)
{

  // Пины кнопок
  DDRB &= ~((1<<BUTTON1)|(1<<BUTTON2)); // входы
  PORTB |= (1<<BUTTON1)|(1<<BUTTON2); // подтянуты
  // Пин светодиода
  DDRB |= (1<<LED); // выход
  PORTB &= ~(1<<LED); // выключен
  // Настройка прерываний
  GIMSK |= (1<<PCIE); // Разрешаем внешние прерывания PCINT0.
  PCMSK |= (1<<BUTTON1)|(1<<BUTTON2); // Разрешаем по маске прерывания на ногак кнопок (PCINT3, PCINT4)
  sei(); // Разрешаем прерывания глобально: SREG |= (1<<SREG_I)
    while (1)
    {
    }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 18:59:48 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 191
Рейтинг сообщения: 0
PORTB^=(1<<PB0); _delay_ms(500); - никогда так не пишите. В одну строчку. Сами потом запутаетесь. Поставили ; - перешли на новую строку. И отступы и форматирование научитесь делать правильно. Это только кажется, что мелочи, но с ними код намного читаемей. https://codebeautify.org/c-formatter-beautifier в помощь

Вот это - "while ( (PINB & (1<<BUTTON1)) == 0 || (PINB & (1<<BUTTON2)) == 0 ) {} // ждём отпускания кнопки" в прерывании не нужно уже. У вас входит в обработчик прерывания при смене состояния порта только. Поэтому ждать отпускания кнопки уже не нужно. И даже очень плохо, в прерывании так нельзя делать. Это хуже чем _delay_ms даже там.

А код так-то рабочий. Что-то не то делаете.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 19:58:07 
Вымогатель припоя

Карма: 10
Рейтинг сообщений: 60
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 510
Рейтинг сообщения: 0
NStorm писал(а):
А код так-то рабочий. Что-то не то делаете.
Полагаю отсутствует
Код:
GIFR |= (1<<PCIF);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Ср ноя 13, 2019 21:52:45 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 191
Рейтинг сообщения: 0
Dimon456, зачем и где? Исходя из описание ручками его мало когда надо выставлять:
When a logic change on any PCINT5:0 pin triggers an interrupt request, PCIF becomes set (one). If the I-bit in SREG and the PCIE bit in GIMSK are set (one), the MCU will jump to the corresponding Interrupt Vector. The flag is cleared when the interrupt routine is executed. Alternatively, the flag can be cleared by writing a logical one to it.

В протеусе код, указанный выше, на тини13 работает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Чт ноя 14, 2019 09:18:59 
Говорящий с текстолитом
Аватар пользователя

Карма: 12
Рейтинг сообщений: 39
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 1650
Рейтинг сообщения: 0
NStorm писал(а):
В протеусе код, указанный выше, на тини13 работает.


т.е Вы у себя попробовали этот код? И все в порядке. Работает?

я тоже даже на 2-ом компьютере уже попробовал и нифига. Что за чертовщина
Я даже попробовал упрощать его до минимума. Все равно ничего. Не могу добиться хоть какой-то работы на прерываниях
Пробовал даже и на INTO настраивать - не получается запустить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование ATtiny13
СообщениеДобавлено: Чт ноя 14, 2019 09:49:42 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 191
Рейтинг сообщения: 0
Да, работает: https://yadi.sk/i/grOfcR6a8E6u5g / https://youtu.be/RkHESK57hRg
Смотрите видео, в чем у вас отличие ищите.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 49 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y