Например TDA7294

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



Текущее время: Чт май 13, 2021 20:59:08

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


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



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 15:23:01 
Родился

Зарегистрирован: Ср дек 02, 2020 22:46:52
Сообщений: 9
Рейтинг сообщения: 0
Всем привет, делаю тахометр, на вход которого поступают импульсы, МК считает их по прерываниям и другой таймер отсчитывает секунды.

Код:
#include <mega8.h>
#include <delay.h>
int rps=0;
int pr=0;
    interrupt[TIM0_OVF]void timer0_overflow(void)
{
TCNT0=(0);
if (pr==30)
{
if (rps<17) {  PORTC.1=1 }   // zajigaem led esli rps<17
else { PORTC.1=0};         

rps=0;
pr=0;
PORTC.2=1;
}
else
{pr=pr+1;PORTC.2=0;}
}
    interrupt[EXT_INT1]void ext_int1(void)
{rps=(rps+1);}
void main()
{
DDRC = 0xff;//0xff = 0b11111111  все выводы порта A сконфигурировать как выходы
DDRD=0x00;
PORTD=0xff;
TCCR0=0x05;
TCNT0=(0);
TIFR=0;
TIMSK=0x02;
GIMSK=0x80;
MCUCR=0x09;
#asm
sei
#endasm
while(1)
{

}       
// 1000 rpm eto 17 rpsec



Добавил строчки для отладки, чтобы смотреть зажжет ЛЕД если рпс меньше 17 или нет. ЛЕДы на протеусе не горят. Может код кривой?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 15:45:42 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 801
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
код точно кривой - читать такое тяжко, отформатируйте отступы, междустрочность.
Пример:
Код:
#include <mega8.h>
#include <delay.h>

int rps=0;
int pr=0;

interrupt[TIM0_OVF]void timer0_overflow(void)
{
    TCNT0=(0);
    if (pr==30)
    {
         if (rps<17)
             PORTC.1=1  // zajigaem led esli rps<17
         else
             PORTC.1=0;         
       
         rps=0;
         pr=0;
         PORTC.2=1;
    }
    else
    {
        pr=pr+1;
        PORTC.2=0;
    }
}
   
interrupt[EXT_INT1]void ext_int1(void)
{
    rps=(rps+1);
}

void main()
{
    DDRC = 0xff;//0xff = 0b11111111  все выводы порта A сконфигурировать как выходы
    DDRD=0x00;
    PORTD=0xff;
    TCCR0=0x05;
    TCNT0=(0);
    TIFR=0;
    TIMSK=0x02;
    GIMSK=0x80;
    MCUCR=0x09;

    #asm
        sei
    #endasm

     while(1)
     {
     }
       
     // 1000 rpm eto 17 rpsec
} //в оригинале замыкающей скобки не было


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


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

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

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

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

Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 15:58:46 
Родился

Зарегистрирован: Ср дек 02, 2020 22:46:52
Сообщений: 9
Рейтинг сообщения: 0
Спасибо большое за поправку, совсем что-то замылился с разбором кода.
Но код все равно не работает.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 16:20:16 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 801
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 1
ну, надо поставить breakpoint в timer0_overflow на TCNT0=(0);, посмотреть, попадает ли туда вообще, и сколько раз, то есть, изменяется ли pr, и отключен ли watchdog?


Вернуться наверх
 
Вебинар «Экосистема MEAN WELL. Решения для любых задач электропитания» (20.05.2021)

Приглашаем 20 мая на вебинар, посвященный линейке поставок компании MEAN WELL и ее подходу к производству источников питания — как экосистемы продукции и услуг, которая позволяет подобрать оптимальный источник питания для любых задач электропитания. Рассмотрим весь спектр выпускаемой продукции MEAN WELL в области AC/DC-, DC/DC- и DC/AC-преобразователей с подробным разбором интересных и уникальных новинок, их применении и многое другое.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 19:19:00 
Родился

Зарегистрирован: Ср дек 02, 2020 22:46:52
Сообщений: 9
Рейтинг сообщения: 3
ну, надо поставить breakpoint в timer0_overflow на TCNT0=(0);, посмотреть, попадает ли туда вообще, и сколько раз, то есть, изменяется ли pr, и отключен ли watchdog?


пошел гуглить что это такое )


Вернуться наверх
 
Интеллектуальные ключи верхнего плеча семейства PROFET™+2 12V от Infineon

Компания Infineon представила новое семейство защищенных силовых ключей PROFET™+2 12V. Изделия объединяют в себе функции диагностики и различные защиты. Ключи PROFET™+2 12V имеют одно из самых низких в отрасли сопротивлений в открытом состоянии RDS(ON) (от 2,6 мОм) и выпускаются в миниатюрном корпусе TSDSO-14 с шагом выводов 0,65 мм. Благодаря функции ReverseON все семейство соответствует строгим требованиям по защите от обратной полярности питания, впервые реализованной в одном чипе.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 19:21:01 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 801
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
О, это полезно - дебаг, дебагер, дебаггинг. То бишь, отладка. Владение этим позволяет найти кучу проблемного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 19:39:17 
Мудрый кот

Карма: 18
Рейтинг сообщений: 509
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1874
Рейтинг сообщения: 3
Код:
    TCCR0=0x05;
    TIMSK=0x02;
    GIMSK=0x80;
    MCUCR=0x09;

За магические числа надо расстреливать. Ну блин, вот ненаглядно ведь нифига. Какие биты выставлены?
На какой частоте работает мега?
Частота прерывания таймера? Ну ок, предделитель стоит 1024 (надо не магические числа писать, а биты и комментарии! чтобы сразу было видно), значит прерывание будет в четверть частоты МК.

Добавлено after 43 seconds:
Что подключено на PORTC.2?

Добавлено after 1 minute 32 seconds:
Какой частоты входной сигнал на INT1?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 20:04:12 
Родился

Зарегистрирован: Ср дек 02, 2020 22:46:52
Сообщений: 9
Рейтинг сообщения: 0
да я с 12го года все пытаюсь обойтись без дебага. но пришло время этим заняться. насколько я помню это можно сделать только в Студии.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 20:08:38 
Мудрый кот

Карма: 18
Рейтинг сообщений: 509
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1874
Рейтинг сообщения: 3
Прям в протеусе можно и даже нужно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 03, 2020 20:39:40 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 801
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 3
странно, но многие не хотят и увиливают от дебага, и я тоже ведь был когда-то в их числе... а сейчас не представляю, как без него.
На своём любимом ST7FOX запустил ШИМ методом тыка меняя значения регистров в отладочном режиме (по документации ШИМ работать почему-то не хотел).
Без отладочного режима был бы полный пипец: поменял, скомпилил,прошил (симулятоа на него нет), запустил, поменял, скомпилил,прошил, запустил...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Чт дек 10, 2020 17:02:13 
Родился

Зарегистрирован: Ср дек 02, 2020 22:46:52
Сообщений: 9
Рейтинг сообщения: 3
странно, но многие не хотят и увиливают от дебага, и я тоже ведь был когда-то в их числе... а сейчас не представляю, как без него.
На своём любимом ST7FOX запустил ШИМ методом тыка меняя значения регистров в отладочном режиме (по документации ШИМ работать почему-то не хотел).
Без отладочного режима был бы полный пипец: поменял, скомпилил,прошил (симулятоа на него нет), запустил, поменял, скомпилил,прошил, запустил...


Да очень странно что я раньше не пользовался дебаггером, очень простая и интуитивная вещь. код исправил и запустил. все работает отлично )

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Пт дек 25, 2020 11:11:05 
Родился

Зарегистрирован: Ср дек 02, 2020 22:46:52
Сообщений: 9
Рейтинг сообщения: 0
Продолжая тему:
Счетчик работает правильно, синус на шиме генерирует, а вот все вместе не получается - на OCR выходе вместо ШИМа выходят хаотично импульсы.
На ПРОТЕУСе все отлично, а вот на железе - ерунду генерирует.
Гдето наткнулся на информацию, что АТмега либо чтото делает, либо генерит ШИМ, изза того что нет DMA. То есть если строим синус, то только на отдельной МК.
Может кто сталкивался с этим?
Кстати делаю тахометр, который берет сигнал с ДПКВ и на табло двигает стрелку, генерируя синус и косинус.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Пт дек 25, 2020 11:34:45 
Мудрый кот

Карма: 18
Рейтинг сообщений: 509
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1874
Рейтинг сообщения: 0
Цитата:
Гдето наткнулся на информацию, что АТмега либо чтото делает, либо генерит ШИМ, изза того что нет DMA. То есть если строим синус, то только на отдельной МК.

Бред какой-то. Что-то наверное вы не так поняли. ДМА нужен совсем не для того. ШИМ мега генерит аппаратно таймеров, вне зависимости от того, чем занят проц. Только менять его надо для записи в регистр проц задействовать.
Раз в протеусе работает, а в железе нет - скорее всего помехи по входу, которые не фильтруются и дают левые значения.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Ср дек 30, 2020 10:11:29 
Друг Кота
Аватар пользователя

Карма: 88
Рейтинг сообщений: 1050
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 11899
Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR)
Рейтинг сообщения: 0
Смотрим момент перезаписи нового значения из времянок в защелки.
Второе - не забываем, что запись в 16-битовые регистры не мгновенна (одной командой) - необходима защита от наложения прерываний "в разрыв" операции загрузки значения в таймер/OCRn.
8)
Насчет дебаггера...
Ядро всегда проверить можно, а вот аппаратные модули - смотреть "ограничения" - там самостоятельно пишем дополнительные отладочные модули с выводом данных на заведомо рабочую систему индикации.
(У адуриньи к примеру - печать сообщений в терминал ПК.)
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Ср дек 30, 2020 10:41:30 
Мудрый кот

Карма: 18
Рейтинг сообщений: 509
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1874
Рейтинг сообщения: 0
b526, а с одного аккаунта писать слабо? А код приложить не надо думаете? Что вы там за биты пишете, когда в регистре TIMSK только 1 бит от таймера 0?
Еще обратите внимание на то, что предделитель для таймеров 0 и 1 - общий, и есть нюансы при работе с обоими таймерами на меге8.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Ср дек 30, 2020 10:48:04 
Друг Кота

Карма: 59
Рейтинг сообщений: 866
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 3906
Откуда: Ижевск
Рейтинг сообщения: 1
...Вопрос: как влияет тимск на ШИМ на таймере 1 в меге8 ???
TIMSK mega8 работает для Т0 только с 0 битом прерывания по переполнению (кстати, вы оперируете с 1, а это необъявленный бит). Попробуйте управлять битом TOIE0 по или.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Ср дек 30, 2020 21:18:04 
Родился

Зарегистрирован: Ср дек 02, 2020 22:46:52
Сообщений: 9
Рейтинг сообщения: 0
akl писал(а):
...Вопрос: как влияет тимск на ШИМ на таймере 1 в меге8 ???
TIMSK mega8 работает для Т0 только с 0 битом прерывания по переполнению (кстати, вы оперируете с 1, а это необъявленный бит). Попробуйте управлять битом TOIE0 по или.


Большое спасибо, очень дельный комментарий.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Ср янв 06, 2021 12:17:36 
Родился

Зарегистрирован: Ср дек 02, 2020 22:46:52
Сообщений: 9
Рейтинг сообщения: 0
Выяснил, что
1. при
Код:
GICR = (1<<INT1)|(1<<INT0);

OCR2 генериурет ШИМ, однако не меняет скважность по заданному массиву:
Код:
ISR(TIMER1_COMPA_vect)
{
   OCR2=aSin[i];
   i++;
   if (i>127) i=0;

где aSin[i] это массив.
Чтобы заработало все, необходимо отключить INT1. Как это связано не понял, установил опытным путем :dont_know:
2. При таком подходе, когда генерируется ШИМ как показано выше, OCR1a почему-то не хочет генерировать:
Код:
ISR(TIMER1_COMPA_vect)
{
   OCR2=aSin[i];
        OCR1A=254;
   i++;
   if (i>127) i=0;

при настройках регистров:
Код:
TCCR0 = 0b0000101;         
         TCNT0 = 0;
    PORTB=0x00;
    DDRB = (1<<PB1) |(1<<PB2)| (1<<PB3);
    TCCR1A = (1<<COM1A1)|(0<<COM1A0)|(0<<WGM11)|(1<<WGM10)     ;          //delaem fast pwm na ocr1a
    TCCR1B = (0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);
   TCCR2=(1<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(0<<CS21)|(1<<CS20);
   TIMSK=(1<<OCIE1A);
   sei();


Вопрос: кто нибудь запускал ШИМ на двух выходах? и если да, то как?
п.с. Шим на OCR2 используется для СИНУСА, на OCR1a - постоянной скважности.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Ср янв 06, 2021 13:46:53 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 801
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
kotokot131313131313, https://radiokot.ru/artfiles/6607/ - вдруг, пригодится. Автор даже исходник приложил. МК, правда, не тот.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простой тахометр на atmega
СообщениеДобавлено: Ср янв 06, 2021 13:56:41 
Друг Кота

Карма: 59
Рейтинг сообщений: 866
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 3906
Откуда: Ижевск
Рейтинг сообщения: 1
А регистр MCUCR в каком состоянии? Если в исходном, то низкий уровень на лапе(ах)INT0,1 будет держать камень в прерывании, не давая работать остальному, т.к. у остальных приоритет слабее.


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

Часовой пояс: 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