Например TDA7294

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

Текущее время: Вт дек 16, 2025 20:29:27

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


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



Начать новую тему Ответить на тему  [ Сообщений: 8366 ]     ... , , , 142, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 10, 2011 17:29:28 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7014
Откуда: Ижевск
Рейтинг сообщения: 0
Код:
#define led_1 PORTC.5
#define led_2 PORTC.4
#define led_3 PORTC.3

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 10, 2011 19:51:49 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
pyzh_man, спасибо! Помогло! :beer:
Если не сложно, объясните, когда нужно использовать PIN а когда PORT? А что я что-то запутался. Изначально писал, как вы сказали, потом вспомнил, что меня как-то уже поправляли на PIN ...

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 10, 2011 20:16:48 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7014
Откуда: Ижевск
Рейтинг сообщения: 0
IN PIN считывает из порта, когда тот настроен на ввод. OUT PIN не имеет смысла. OUT PORT подключает/отключает подтягивающие резисторы, если порт настроен на ввод; выводит инфу, если порт настроен на вывод. IN PORT считывает инфу, ранее записанную в порт, настроенный на вывод.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 10, 2011 20:53:33 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
Ага, ещё раз спасибо. Кажется понял....

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 10, 2011 20:58:10 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7014
Откуда: Ижевск
Рейтинг сообщения: 0
Пожалуйста.
И еще. Вместо
Код:
if... else...else

используйте
Код:
switch()...case...case

Удобнее и читабельнее.
Да и частоту надо генерировать в прерывании. Но это меня уже понесло...

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 10, 2011 21:35:30 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
pyzh_man писал(а):
OUT PIN не имеет смысла.
OUT PIN имеет смысл во всех новых AVR. «Новых» -- это где-то так от tiny13, tiny2313, mega48/88/168, ... с любыми буквами -- т.е. практически все, кроме старушки attiny26 да обновленных atmega8A, atmega64A, которые просто совместимы со старыми.
Я на этом форуме уже приводил картинку из документации
Изображение
Вот где есть такой обведенный инвертор, там по сигналу WP (Write PIN) инвертируется триггер PORT.
Очень удобно.
Код:
    SBI PINB, 2 ; инвертировать PB2
    LDI  R16, 0x88
    OUT PINB, R16 ; инвертировать одновремённо PB3 и PB7

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 10, 2011 22:56:04 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1306
Рейтинг сообщения: 0
Мужики, а как в CV с областью видимости глобальных переменных? Видны во всех файлах проекта, без extern... Как то не аккуратненько. Или лыжи не едут?

"Интересно девки пляшут"! Этот фокус демонстрируется на v.1.25.9pro, с 2.04.4а всё как положено - глобальные (не static) не видны в других файлах проекта. Версиезависимость, однако, не солидно!


Последний раз редактировалось OKF Вс сен 11, 2011 10:04:55, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 10, 2011 23:06:25 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
pyzh_man, тоесть так?
Цитата:
switch(s) // s- переменная прерывателя
{
case '1': *делаем первую программу*; break;
case '2': *вторую*; break;
case '3': *третью*; break;
}


А что за частота, как и зачем оно нужно?

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс сен 11, 2011 11:49:16 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7014
Откуда: Ижевск
Рейтинг сообщения: 0
Да, так. А частота... Так это то, что вы делаете в
Код:
while(s== 1)
{
...
}

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт сен 13, 2011 09:58:40 
Первый раз сказал Мяу!

Зарегистрирован: Ср июн 08, 2011 11:32:49
Сообщений: 39
Рейтинг сообщения: 0
Подскажите почему не работает такой способ установки битов в регистре
TIMSK=(1<<TOIE1)|(1<<TOIE0);
ну и стольные регистры с названием битов .
и ели использовать такой вариант прокатит-будит лит аналогичен первому?
TIMSK=(1<<2)|(1<<0);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт сен 13, 2011 10:07:11 
Опытный кот

Карма: 2
Рейтинг сообщений: -2
Зарегистрирован: Ср мар 18, 2009 21:14:33
Сообщений: 812
Рейтинг сообщения: 0
Подскажите в какой версии CV пропадают глюки инициализации переменных?

Пользую 1.25.5 - при инициализации локальных переменных в строчку или присвоении им значений при инициализации в итоге в них совсем не то, что записывается явно в коде.

НЕ использовать же только глобальные.

ЗЫ Стек 1К, а использую 190 байт...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт сен 13, 2011 13:17:48 
Встал на лапы

Зарегистрирован: Пн июл 12, 2010 16:03:11
Сообщений: 136
Рейтинг сообщения: 0
Помогите пожалуйста. Вот написал программу - мигание светодиода с периодом 1с. Только почему-то у меня идет период не 1с, а 1,675с. МС - atmega324p. Частота - 20 МГц. Светодиод подсоедиен с PD2.
Код:
/*****************************************************
Chip type           : ATmega324
Clock frequency     : 20,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 512
*****************************************************/

#include <mega324.h>   
#include <delay.h>

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
PORTD.2=~PORTD.2;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Port D initialization
PORTD=0x00;
DDRD=0xff;

// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0b00000100;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x98;
OCR1AL=0x96;
OCR1BH=0x00;
OCR1BL=0x00;

TIMSK1=0x01;

#asm("sei")

while (1)
      {
      }
}


Последний раз редактировалось Valek87 Чт сен 22, 2011 14:54:40, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср сен 14, 2011 22:45:51 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
Подскажите, будет ли так работать антидребезг кнопки?
Код:
     interrupt [EXT_INT0] void ext_int0_isr(void) //обработка прерываний INT0
     {
        delay_ms(100); // антидребезг <===
        #asm("cli"); //запрещение прерываний на время обработки прерывания
        s=s+1;
        if (s==4) s=1;
        #asm("sei"); //разрешение прерываний
      }


Тоесть, излечиться ли он таким способом или нет?

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

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт сен 15, 2011 00:34:02 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 13
Рейтинг сообщений: 24
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Сообщений: 2029
Откуда: г. Тула
Рейтинг сообщения: 0
Эти команды:
Код:
#asm("cli"); //запрещение прерываний на время обработки прерывания
#asm("sei"); //разрешение прерываний

в прерывании не имеют смысла. Железо само заботится о разрешении прерываний здесь.

И работать это не будет, т.к. никакого антидребезга здесь нет. Только задержка. :dont_know: Хотя... почему? Вполне возможно. Ведь за 100 мс состояние кнопки успеет устаканиться. Другое дело, что на нажатие кнопки контролер будет реагировать дважды: первый раз на нажатие кнопки (появление дребезга) и второй при её отпуске (опять дребезг). :)

_________________
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт сен 15, 2011 08:04:12 
Поставщик валерьянки для Кота

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45
Сообщений: 1995
Откуда: Цветочный город
Рейтинг сообщения: 0
DataLife писал(а):
Просто для того, что бы его не было, после задержки нужно снова проверять состояние кнопки, в этом случае этого нет, если не ошибаюсь..
да, именно это важно, а то, что сделано - бесполезно и, скорее всего, приведет к "задваиванию" нажатий и, опять же скорее всего, к реакции на отжатие. Ну и, само собой, к заметным тормозам - с такой-то зедержкой!
IfoR писал(а):
в прерывании не имеют смысла. Железо само заботится о разрешении прерываний здесь.
еще как имеют! особенно sei - может таких чудес наделать...

_________________
битва с дураками проиграна, победители торжествуют. слава победителям!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт сен 15, 2011 12:58:06 
Опытный кот

Карма: 2
Рейтинг сообщений: -2
Зарегистрирован: Ср мар 18, 2009 21:14:33
Сообщений: 812
Рейтинг сообщения: 0
ТАк что- нико не подскажет с чем может быть связано повреждение локальных переменных в CV ?
Т.е. такой код

void modem_control(void)
{
unsigned char step;
unsigned char conflict;
unsigned char atc_retry_number;
unsigned char repeat;

step=1;
atc_retry_number=3;
repeat=3;
conflict=0;

while (step!=100)
{
/// вывод значения conflict в ком порт.
....

Всё - тут оно становится 0xC0 почемуто. Може настройки компилятора? Такие же фокусы выкидывает в функции main. При этом - это НЕ повторяющийся глюк... В том то и проблема - анализу сложно поддаётся. ЗАИПАЛСЯ. Уже мысли появились слинять с cvavr...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт сен 15, 2011 13:55:18 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
IfoR, просто я как думаю:

Код:
 interrupt [EXT_INT0] void ext_int0_isr(void) //обработка прерываний INT0
     {
        delay_ms(100); // антидребезг <===
        #asm("cli"); //запрещение прерываний на время обработки прерывания
        s=s+1;
        if (s==4) s=1;
        #asm("sei"); //разрешение прерываний
      }


1) кнопка нажата (пошёл некий дребезг)
2) сработало прерывание, но тут задержка, которая не даёт дребезгу несколько раз изменить значение переменной S
3) прошла задержка, дребезг устаканился, переменная увеличилась, как и должна

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

На счёт #asm("cli"); и #asm("sei"); - не знаю как правильно, в обучающих статьях по прерываниям я видел, что делают так. У меня так работает, места в прошивке они практически не занимают...

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт сен 15, 2011 15:53:44 
Поставщик валерьянки для Кота

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45
Сообщений: 1995
Откуда: Цветочный город
Рейтинг сообщения: 0
DataLife писал(а):
1) кнопка нажата (пошёл некий дребезг)
2) сработало прерывание, но тут задержка, которая не даёт дребезгу несколько раз изменить значение переменной S
3) прошла задержка, дребезг устаканился, переменная увеличилась, как и должна

Просто если бы не задержка сразу увеличивались бы переменная и дребезг мог бы тут подпортить картинку...
на самом деле все будет немного иначе:
1) нажали кнопку, пошел дребезг. по первому импульсу дребезга сработало прерывание. началась задержка.
2) импульсы дребезга устанавливают флаг запроса прерывания, пока длится задержка.
3) после задержки вы запрещаете прерывания - бессмысленно, т.к. в этот момент они и так запрещены. увеличиваете переменную, все путем.
4) разрешаете прерывания. тут, раз флаг запроса уже установлен (см. ранее), буквально ЕЩЕ ДО ВЫХОДА ИЗ ОБРАБОТЧИКА (Си генерирует на "закрывающую фигурную скобку" далеко не одну команду, а больше) снова осуществляется вызов обработчика, т.е. еще из него не вышли, но уже снова в него вошли. если очень не повезет - вы переполните стек, но скорее всего обработчик отработает ЕЩЕ РАЗ, т.е. ваша переменная увеличится на 2, а не на 1.
5) далее все по плану. однако, если кнопку держат нажатой больше 200 мс, то в момент отжатия снова скорее всего сгенерируется прерывание, и процесс повторится.

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

не мудрите, делайте, как положено: опрос-задержка-опрос, если оба опроса дают одинаковые уровни на пине - дребезг кончился, если разные - это надо игнорировать. для подавления дребезга ДОСТАТОЧНО 15-20 мс задержки.

_________________
битва с дураками проиграна, победители торжествуют. слава победителям!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт сен 15, 2011 16:14:49 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 22, 2011 22:31:01
Сообщений: 102
Рейтинг сообщения: 0
Мастер Ломастер писал(а):
в лучшем - получите задваивание показаний

не знаю не знаю... может и так. поделюсь своим опытом:

опрос кнопки в основном цикле программы:
если кнопка нажата, ставим флаг игнорировать кнопку и пускаем таймер на 20мс. ПО переполнению таймер сбрасывает флаг. Работал максимум с 4-6 кнопок, поэтому блочил все одновременно, но при желании можно сделать не тупой флаг, а битовую маску и проверять запрет на каждую кнопку.....

думаю в случае с прерыванием имеет смысл вручную сбросить флаг прерывания перед выходом из обработчика......


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт сен 15, 2011 16:36:04 
Опытный кот

Карма: 2
Рейтинг сообщений: -2
Зарегистрирован: Ср мар 18, 2009 21:14:33
Сообщений: 812
Рейтинг сообщения: 0
Народ - а сделать програмно фильтр дребезга ?

Простеший способ : запускаете таймер по срабатыванию кнопки на 10-20мкс и по прерыванию таймера опрашиваете её. В прерывании счётчик - если кнопка нажата ( 1 или 0 - в зависимости от реализации) , то к счётчику +1 и перезапускаете опять на 10-20 мкс. После 100 циклов - 1-2 мс - смотрите значение счётчика - если больше 60%( к примеру - в зависимоти от кнопки) - значит ктото её нажимал. Если пустить таймер в цикле, а на каждую кнопку завести свой счётчик - можно паралельно опрашивать целую клавиатуру.


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

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


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

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


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

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


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