Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт июл 25, 2025 23:54:21

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7669 ]     ... , , , 11, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 20, 2011 23:03:39 
Мудрый кот
Аватар пользователя

Карма: 25
Рейтинг сообщений: 79
Зарегистрирован: Вт окт 05, 2010 01:08:57
Сообщений: 1800
Рейтинг сообщения: 0
Друзья, подскажите в чем трабл
Вот так работает правильно
Код:
unsigned long int  x;
if ( x  &  (0x00000001 << ( 26 ) )==(0x00000001 << ( 26 )) ) {......}
А вот так почему то условие всегда верно, и когда 26 бит=0 и когда =1
Код:
unsigned long int  x;
unsigned char y;
y=26;
if ( x  &  (0x00000001 << ( y ) )==(0x00000001 << ( y )) ) {......}

_________________
KIT


Последний раз редактировалось O-LED Пт янв 21, 2011 02:59:45, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 20, 2011 23:28:27 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Кислый писал(а):
кхе кхе.. может кто поделится кодом работы с LPT ( линухоподобный ) ?
...
ругается на outb.
На мой взгляд, вопрос откровенно не для темы С/С++.
Это где-то в "интриги с ПК" надо тему "Линукс и LPT" создавать.

Конкретно по вопросу
  • outb и компания прописаны в <sys/io.h> (это не то же самое, что просто <io.h> ! )
  • Через /dev/io не работал. Не уверен, что в нынешних линуксах такое "устройство" вообще живёт.
  • Для прямой работы с портами получаю права не через открытие /dev/io, а запросом ioperm().
  • Именно с LPT можно работать честнее и без рутовых привилегий через /dev/parport, но это немного медленнее.


Если интересно продолжение разговора, то, может, пойдём таки в "Интеграция с ПК"?
Или прямо у меня на сайте в комментариях к avreal and LPT in Linux спрашивайте, поделюсь кусками кода :)

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 00:26:35 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2095
Откуда: Краснодар
Рейтинг сообщения: 0
и то верно.

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 07:50:24 
Опытный кот

Карма: 5
Рейтинг сообщений: 0
Зарегистрирован: Вс янв 17, 2010 15:32:19
Сообщений: 701
Откуда: Курган
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
lcd на lpt. пример.


Вложения:
main.c [2.26 KiB]
Скачиваний: 399
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 13:43:38 
Первый раз сказал Мяу!

Зарегистрирован: Чт дек 23, 2010 19:40:47
Сообщений: 34
Рейтинг сообщения: 0
Доброго времени суток.

Пытаюсь разобраться с прерыванями в контроллере pic16f631. Прерывание работает, но после него не происходит возврата в основную программу((. Если убрать прерывания, main работает.

В main светодиод на любой ножке порта С мигает медленно, при вызове прерывания по 7-ой ножка порта B несколько раз должен мигнуть быстро.

7-ая ножка порта B подтянута к +5 резистором 27к, при замыкании кнопки через резистор 1к подключается к земле.

Пробовал присваивать INTCON-у разные значения, безрезультатно(

компилятор МикроС 8.2.0.0.
Код:
unsigned char oldPortb;

void interrupt() {
  if (Portb==0) {                   //
    Delay_ms(5);                       // wait 5 mS
    oldPortb=Portb;
    PortC= 255;
    Delay_ms(50);
    PortC=0 ;
    Delay_ms(80);
    PortC= 255;
    Delay_ms(100);
    PortC=0 ;
    Delay_ms(80);
    PortC= 255;
    Delay_ms(50);
    PortC=0 ;
    Delay_ms(80);

    INTCON = 0x08;                     // clear RBIF, set RBIE
  }
}

void main() {
  PORTB = 0;
  TRISB = 0b11110000;

  WPUB= 0;                // отключаем подтяжки В

  IOCB=0b11110000;  // разрешаем прерывания на изменения уровня на  4-7 ножках В

  INTCON = 0x88;               // Set GIE, RBIE разрешаем прерывания вообще и по изменению на порте В

  ANSEL=0;
  PORTC = 0;                // Initialize PORTC
  TRISC = 0;                 //С на выход.

  do {
    PortC= 255;
    Delay_ms(400);
    PortC=0 ;
    Delay_ms(400);
  }  while(1) ;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 17:08:06 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
skader, главная ошибка в неверной проверке нажатия кнопки
if (portb == 0){}
возможно, это условие никогда не наступает, а значит, тело if'a не выполняется, следовательно, флаг прерывания не сбрасывается, и после выхода из прерывания контроллер влетает в него снова. Надо вынести сброс флага из if'a. Что на входах RB4:RB6? Они ведь тоже могут инициировать прерывание RBIF...
Сделайте так:
Код:
void interrupt isr (void) {
if (!RB7){
//Ваш обработчик нажатия кнопки
}
RBIF = 0;
}

"do" в основном цикле не нужно, лучше так:
Код:
PORTC = 0;
while (1){
PORTC = ~PORTC ;
__delay_ms(400);
}


Последний раз редактировалось stas00n Пт янв 21, 2011 17:25:38, всего редактировалось 1 раз.

Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 17:24:48 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
PS приведенный код для компилятора ht PICC.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 18:22:06 
Первый раз сказал Мяу!

Зарегистрирован: Чт дек 23, 2010 19:40:47
Сообщений: 34
Рейтинг сообщения: 0
спасибо, помогло!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 20:03:07 
Первый раз сказал Мяу!

Зарегистрирован: Чт дек 23, 2010 19:40:47
Сообщений: 34
Рейтинг сообщения: 0
Cпасибо, помогло!

И еще вопрос: стоит ли на время обработки прерывания отключать обработку прерываний (IOCB = 0), чтоб не было прерывания из прерывания?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 23:23:58 
Открыл глаза

Зарегистрирован: Пн окт 05, 2009 15:18:29
Сообщений: 48
Рейтинг сообщения: 0
Подскажите, может кто-то в курсе:
Делаю для тренировки простой вольтметр на меге8 и 16*2 ЖКИ.
И возник большой вопрос с выводом переведенных данных АЦП (от 0 до 1024).
Формула элементарная. Получается дробное число (2.78324923049203....). Если поставить ему тип "Float" на дисплее начинается полная ахинея. Начинают прыгать совершенно несвязанные числа как положительные так и отрицательные. Пытался что-то найти про это. Пишут, что при обработке таких громоздких чисел, как Float стек начинает накладываться на память МК и выходит глюк. Если ставить тип "INT" все выводится хорошо, но с точностью до 1 вольта :))
Напрашивается 2 варианта:
1) Разделить на целую и дробную часть. и выводить отдельно 3 части одного числа. Например так: 3 , 2768
2) Ограничить дробную часть после деления, например до 3х знаков.

Может кто знает как можно сделать эти пункты? А то совсем уже голову сломал :oops:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 23:37:44 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
да чего там ломать-то? в вашу элементарную формулу добавьте умножение на 1000 и вычисляйте все в целых числах. а при выводе сначала запишите результат в строку, а потом вставьте десятичную точку в нужное место. вот вам и будет и вычисления в целых и ограничение до 3-го знака одновременно :)

правда ахинея у вас на дисплее наверняка не из-за float, а из-за какой-то иной ошибки в программе... ибо с float AVR хоть и медленно, но работает вполне нормально.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 23:43:22 
Мудрый кот
Аватар пользователя

Карма: 25
Рейтинг сообщений: 79
Зарегистрирован: Вт окт 05, 2010 01:08:57
Сообщений: 1800
Рейтинг сообщения: 0
Я выше спрашивал, viewtopic.php?p=691601#p691601 но никто не ответил. Отвечаю сам. нужно было "y" привести к одному типу с "х"
Код:
unsigned long int  x;
unsigned char y;
y=26;
if ( x  &  (0x00000001 << ( (unsigned long int)y ) )==(0x00000001 << (  (unsigned long int)y )) ) {......}
Спасибо Danko

_________________
KIT


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 21, 2011 23:56:14 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
O-LED, у вас в коде тавтология:
if(a & (1<< b) == (1 << b)) содержит явно избыточную операцию проверки на равенство. достаточно написать
if(a & (1 << b)) - результат будет тот же самый

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 22, 2011 00:13:26 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2095
Откуда: Краснодар
Рейтинг сообщения: 0
есть вопросец. я вот озадачился.

допусти есть екоторый абстрактный код
Код:
    uint8_t i = 255;
    char D[15] = {};
    sprintf (D, "%.d", i);

пусть значение i появляется "вдруг" например приходит с usart ( вообще не важно ).
у нас приходит FF, мы преобразуем его в символьный вид, и выбрасываем на семисегментный индикатор условно бесконечной разрядности ( т.е. только Великий КОТ может нам сказать сколько разрядо в нем. может три, а может и 10..) .
Диапазон выбрасываемых символов:
Цитата:
0 1 2 3 4 5 6 7 8 9 A b c C d E F o P r L n _ -

т.е. eсли их загонять в индикатор через switch-case ( такой-то символ - такая-то комбинация на порте ), то с 22 символами еще можно играться.. но если их станет больше ? гораздо больше !?

вот тут я немножко не догоняю.. как справляются в этом случае на дисплеях 16х2 или на ЖК ?

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 22, 2011 06:00:55 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
skader писал(а):
стоит ли на время обработки прерывания отключать обработку прерываний (IOCB = 0), чтоб не было прерывания из прерывания?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 22, 2011 09:09:54 
Опытный кот
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 21:12:49
Сообщений: 703
Рейтинг сообщения: 0
Кислый писал(а):
есть вопросец. я вот озадачился.

Проще преобразовывать приходящий байт в выводимому символу таблицей констант.
const char D[] = { коды соответствия символам 0..9 A b c C d E F o P r L n _ - };
switch-case станет не нужен. Для более 8-и бит соответственно const int D[]...
Вывод sprintf (D[i], "%.d", i);

На символьных ЖК дисплеях 16х2, если они не поддерживают кодировку компилятора, так же через таблицы преобразовывают.
К примеру, IAR для Win имеет кодировку CP1251. Если взять индикатор поддерживающий точно такую, то и таблицы не надо. Что послал, то и увидел )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 22, 2011 14:17:25 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2095
Откуда: Краснодар
Рейтинг сообщения: 0
:))) не втёр :)))

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 22, 2011 15:24:04 
Первый раз сказал Мяу!

Зарегистрирован: Чт дек 23, 2010 19:40:47
Сообщений: 34
Рейтинг сообщения: 0
Плз, помогрите найти описание команд и процедур mikroC для pic-ов, надоело методом тыка по примерам и гуглем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 22, 2011 15:51:54 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
skader Установите лучше MPLAB, там в комплекте идет hi-tech PICC с мануалом и примерами. PRO версия включается бесплатно на месяц пробы, потом если понравится, можно и лекарство найти.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 22, 2011 16:44:28 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2095
Откуда: Краснодар
Рейтинг сообщения: 0
asteroid7 писал(а):
Кислый писал(а):
есть вопросец. я вот озадачился.

Проще преобразовывать приходящий байт в выводимому символу таблицей констант.
const char D[] = { коды соответствия символам 0..9 A b c C d E F o P r L n _ - };
switch-case станет не нужен. Для более 8-и бит соответственно const int D[]...
Вывод sprintf (D[i], "%.d", i);

На символьных ЖК дисплеях 16х2, если они не поддерживают кодировку компилятора, так же через таблицы преобразовывают.
К примеру, IAR для Win имеет кодировку CP1251. Если взять индикатор поддерживающий точно такую, то и таблицы не надо. Что послал, то и увидел )


код в студию :)

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


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

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


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

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


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

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


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