Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

Здравствуйте. Опять спотыкнулся об avr ) Помогите и направьте в нужную сторону: немогу разобраться с RC5 - много уделил времени интернету - но есть вопросы с прерываниями и CVAVR - купил пультик для TV - переключает каналы и регулирует громкость (работает на RC5) - в наличии tiny2313 + IR датчик (17х TSOP'ов в магазине небыло - купил SM3374) - датчик реагирует только вблизи пульта, пытаюсь вывести данные по UART - не получается - через putchar выводит команду - но если пользовать printf - все обламывается - так как пользую UART + FT232R - вижу что сигнал даже не доходит (диод на переходнике не моргает) - программный код взял готовый - только переделал чтобы немного разобраться - но никак... :(

Вот код:

Код: Выделить всё

/*****************************************************
Chip type           : ATtiny2313
Clock frequency     : 8,000000 MHz
Data Stack size     : 64
*****************************************************/

#include <tiny2313.h>
#include <stdio.h>
#include <delay.h>
#include <string.h>                             
 
//Временные пределы
#define Tmin 40 //длинный промежуток
#define Tmax 68
#define TminK 22 //короткий промежуток
#define TmaxK 34

unsigned char sct_bit = 0;      //Счетчик битов RC5
unsigned char RC5_buffer [14];  //Буффер RC5
bit centre =  0;                //Флаг центра
bit not_korr = 0;               //Флаг попадания в промежутки
unsigned char Timer = 0;        //число в счетчике таймера
unsigned char trigger = 0;      //переменная тригера
unsigned int device = 0;        //переменная адреса ПДУ
unsigned char command = 0;      //переменная для команды

void rc5_cl_buf(void){            //очищаем буффер
  char i = 0;     
  for (i=0; i<14; i++){ RC5_buffer [i] = 0;  }
}   

void rc5_ti_stop(void){           //остановка таймера
   GIMSK|=0x00;
   TCCR0B = 0x00;
   TCNT0 = 0;
   sct_bit = 0;
}

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
Timer = TCNT0; //запоминаем значение счетчика   
TCNT0 = 0;     //обнуляем счетчик
not_korr = 1;                         
if(sct_bit==0){
                  TCCR0B = 0x04; //запускаем таймер  (31.250 KHz)
                  RC5_buffer [sct_bit] = !PIND.2;//записываем в эл.массива
                  sct_bit++;            //+1 к счётчику принятых битов
                  centre = 1;           
        }else{
                  if ((Timer>TminK)&&(Timer<TmaxK)){   // проверка короткого промежутка
                                                  if (centre) {
                                                              centre = 0;
                                                              not_korr = 0;
                                                  }else{
                                                              centre = 1;
                                                              RC5_buffer [sct_bit] = !PIND.2;
                                                              sct_bit++;
                                                              not_korr=0;
                                                  };
                  };
                  if ((Timer>Tmin)&&(Timer<Tmax)){ // проверка длинного промежутка
                                                  RC5_buffer [sct_bit] = !PIND.2;
                                                  sct_bit++;
                                                  not_korr = 0;
                  };                               
                  if (not_korr == 1) {             // если не попали ни в один из промежутков то 
                                       rc5_ti_stop();   //останавливаем таймер
                                       rc5_cl_buf();    //очищаем буффер
                  };
                  if (sct_bit == 14){        // если бит последний то
                    rc5_ti_stop();   //останавливаем таймер
                     
                    trigger = RC5_buffer [2];  //формируем переменную тригера
                   
                    device = (RC5_buffer [3] << 4)|(RC5_buffer [4] << 3)|(RC5_buffer [5] << 2)|(RC5_buffer [6] << 1)|RC5_buffer [7];                                    //формируем адрес ПДУ               
                    command = (RC5_buffer [8] << 5)|(RC5_buffer [9] << 4)|(RC5_buffer [10] << 3 )|(RC5_buffer [11] << 2)|(RC5_buffer [12] << 1)|RC5_buffer [13];        //формируем команду
                   
                    //выводим данные на дисплей   
                    //digit_out[0]=command%10;   //перевод для 1 цифры
                    //command=command/10;                //подготовка
                    //digit_out[1]=command%10;   //перевод для 2 цифры
                 
                    putchar(command);                                                 
                    //printf("Device id=%i, code=%u\n\r", device, command);
                   
                    EIFR=0x40;   // сбрасываем флаг прерывания по входу INT0 
                   
                       };                                                                         
        };   
}


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{   
rc5_ti_stop();        //останавливаем таймер
rc5_cl_buf();        //очищаем буффер
GIMSK|=0x40; //разрешаем прерывания по входу
EIFR=0x40;  //сбрасываем флаг прерывания (если произошло)
}

void main(void)
{

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Port A initialization
PORTA=0x00;
DDRA=0x00;
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port D initialization
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

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

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x40;
MCUCR=0x01;
EIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x82;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x98;   //0x18;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x33;

// Global enable interrupts
#asm("sei")

while (1)
      { 
      };
}


Пробовал выводить в UART до и после сброса флага-прерывания через printf - ноль эмоций ( подскажите пожалуйста - как быть ?..
Сразу предупрежу - не стал грешить на это, но после компиляции в первый раз - компилятор сказал, что Data Stack Size 40 байт - а выставлено 32 байта - я поправил в настройках на 40 байт...
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение shurikss123 »

RC5 не работает стабилно с приемниками 33кгц поэтому и не удивительно
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

shurikss123 писал(а):RC5 не работает стабилно с приемниками 33кгц поэтому и не удивительно


Этот приёмник на 36 кгц вроде :?

Да и так работает - хоть и на малом расстоянии...
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение shurikss123 »

Wereww писал(а):
shurikss123 писал(а):RC5 не работает стабилно с приемниками 33кгц поэтому и не удивительно


Этот приёмник на 36 кгц вроде :?

Да и так работает - хоть и на малом расстоянии...

в этомто прикол, только на малом и не понятно как (проходили тоже мучался с 33кгц :kill: ) взял TSOP1238 Все замечателно стало и растояние почти 8-10 метров. а вот ближе 10 см не работает. :(
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

shurikss123 писал(а):
Wereww писал(а):
shurikss123 писал(а):RC5 не работает стабилно с приемниками 33кгц поэтому и не удивительно


Этот приёмник на 36 кгц вроде :?

Да и так работает - хоть и на малом расстоянии...

в этомто прикол, только на малом и не понятно как (проходили тоже мучался с 33кгц :kill: ) взял TSOP1238 Все замечателно стало и растояние почти 8-10 метров. а вот ближе 10 см не работает. :(


Спасибо, что поделились, тоесть вы советуете взять соп 1238 ? - кстате пультик филлипс :?
Аватара пользователя
liv6125
Встал на лапы
Сообщения: 115
Зарегистрирован: Сб май 02, 2009 22:25:22
Откуда: Орловская область г. Ливны
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение liv6125 »

помогите с фьюзами.
Выставите фьюзы так: CKSEL0,1,2,3 = 1, CKOPT = 0, SPIEN = 0, SUT1 = 0, SUT0 = 1
подскажите правильно ли я выставил fuse-биты? в программе uniprof поставил галочки где =1 и убрал галочки где = 0
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение shurikss123 »

Wereww писал(а):Спасибо, что поделились, тоесть вы советуете взять соп 1238 ? - кстате пультик филлипс :?

не совсем филипс использую мульти пульт
http://www.corpcentre.ru/shop/catalog/871/33007/
и там куча пультов заменить можно, но одно могу сказать точно не все пульты филипс работают с RC5
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

shurikss123 писал(а):
Wereww писал(а):Спасибо, что поделились, тоесть вы советуете взять соп 1238 ? - кстате пультик филлипс :?

не совсем филипс использую мульти пульт
http://www.corpcentre.ru/shop/catalog/871/33007/
и там куча пультов заменить можно, но одно могу сказать точно не все пульты филипс работают с RC5


Всеравно не могу понять одного, датчик реагирует на пульт даже из другого угла комнаты (падение напряжение примерно до 4,5 вольта) - срабатывает прерывание и тд - также непонятно - если он реагирует столь далеко - возможно дело не в частоте ? ведь таймер настроен аж на 31,250 кГц ?..единственная проблема - он не выводит значения по UART в самом прерывании...
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

Прошу прощения, не обратил внимание на галочку в понипроге - CKDIV8, после добавления следующих строчек:

Код: Выделить всё

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


всё идеально заработало :oops: :lol:
Аватара пользователя
liv6125
Встал на лапы
Сообщения: 115
Зарегистрирован: Сб май 02, 2009 22:25:22
Откуда: Орловская область г. Ливны
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение liv6125 »

помогите с фьюзами.
Выставите фьюзы так: CKSEL0,1,2,3 = 1, CKOPT = 0, SPIEN = 0, SUT1 = 0, SUT0 = 1
подскажите правильно ли я выставил fuse-биты? в программе uniprof поставил галочки где =1 и убрал галочки где = 0 :o
Аватара пользователя
DiGiCat
Друг Кота
Сообщения: 4793
Зарегистрирован: Пт июл 11, 2008 09:42:35
Откуда: Made in USSR

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение DiGiCat »

liv6125 писал(а):в программе uniprof поставил галочки где =1 и убрал галочки где = 0 :o
Да
scio me nihil scire...
_______________________

Изображение <= Жалобная кнопка в правом нижнем углу... )
Аватара пользователя
zvukovik
Встал на лапы
Сообщения: 140
Зарегистрирован: Вт авг 03, 2010 15:21:20
Откуда: Екатеринбург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение zvukovik »

подскажите, в чём проблема...
собрал дозиметр (но суть не в нём) на atmega8, мк считает импульсы с помощью входа внешнего тактирования таймера, на отладочной плате это работало, а сейчас как только приходит импульс, мк сбрасывается, причём независимо от того, импульс от гейгера или это я питанием во вход тыкаю, думал, что это могут быть помехи от трансформатора ВВ преобразователя, отключил его, не помогло, керамику по питанию насовал везде, где место было, заранее спасибо за помощь
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

zvukovik писал(а):подскажите, в чём проблема...

Может, в плате?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
zvukovik
Встал на лапы
Сообщения: 140
Зарегистрирован: Вт авг 03, 2010 15:21:20
Откуда: Екатеринбург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение zvukovik »

вот, выкладываю печатку, посмотрите, если не трудно
Вложения
дозиметр.lay
(59.23 КБ) 309 скачиваний
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Wereww »

Ребята подскажите схему управления нагрузкой 220V (планируется использовать симистор BTA 08-600B), более-менее безопасную и без оптопары :)
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение К@Т »

Wereww писал(а):Ребята подскажите схему управления нагрузкой 220V (планируется использовать симистор BTA 08-600B), более-менее безопасную и без оптопары :)


Какой вопрос-такой ответ!
Изображение
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

А чем оптосимистор не устраивает? Гальваническая развязка.
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение aam »

Всем привет! У меня такой вопрос: у ATmaga32 несколько ножек питания и земли. Все ножки земли я соединил полигоном под корпусом TQFP, а вот соединить вместе все 3 ноги цифрового питания как-то не выходит. Аналоговое питание естественно подключил согласно правилам с дросселем 100 мкГн и керамикой 1 мкФ. Обязательно ли соединять на плате все 3 ноги цифрового питания или достаточно подключить одну-две?
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение *Trigger* »

К@Т писал(а):
Wereww писал(а):Ребята подскажите схему управления нагрузкой 220V (планируется использовать симистор BTA 08-600B), более-менее безопасную и без оптопары :)


Какой вопрос-такой ответ!

Картинки побольше нет??? :kill: :kill: :kill:
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
Av4arik
Поставщик валерьянки для Кота
Сообщения: 1954
Зарегистрирован: Чт янв 20, 2011 16:47:18
Откуда: Старый Оскол
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Av4arik »

Если не хотите оптопары, возьмите реле, транзисторные ключи и питайте другим источником питания, от схемы
Быстро, Качественно, Недорого.
Выбрать можно только 2 варианта.
Ответить

Вернуться в «Разные вопросы по МК»