Большой Воронежский Форум
Страница 24 из 43
« Первая < 1418192021222324 25262728293034 > Последняя »
»Радиолюбитель>PIC контроллеры. Программаторы и первый проект на PIC
petrd 06:51 25.11.2010

Сообщение от VRTP:
Прерывания по таймеру запрещены.Вот и думаю как сделать!?

Посчитать время цикла выполнения подпрограммы, завести в подпрограмме счетчик, который будет считать циклы, как наберется на 1 сек - выход. [Ответ]
VRTP 08:46 25.11.2010
Примерно так и хотел,но в реальность пока не соображу как сделать.Буду пробывать.Спасибо. [Ответ]
otest 10:32 27.11.2010
Для тех кто пишет на асме и подсчитывае задержки на бумажке выкладываю програмку. Прога не моя гдето скачана.
Изображения
[Ответ]
Азат 11:13 28.11.2010
Здраствуйте Петр.Попробывал вашу прошивку RC5 все нормально работает.Моя почему то сбоит.Вроде все настройки выставил как у Вас.
Изображения
[Ответ]
Butik 19:57 28.11.2010
И вот все таки с работой компаратора (вернее с программированием компаратора в си) непонятно

вот фрагмент кода который работает...

Код:
unsigned short old_GPIO;

void init() {
  CMCON  = 0x07;
  TRISIO   = 0x28;
  OPTION_REG = 0b11000101;
  INTCON.GIE        = 0;
   }

void main() {
init() ;
    do {
   old_GPIO = GPIO;
   if(old_GPIO.F5 == 1)
   {TRISIO =0x28;
   old_GPIO.F1 = 1;
   old_GPIO.F4 = 0;
   GPIO = old_GPIO;}

  if(old_GPIO.F5 == 0)
  {
  CMCON = 0x04;
  VRCON = 0xA3;
  TRISIO = 0x2A;
  Delay_us(10);
  if(CMCON.F6==1){
  old_GPIO.F4 =1;
  GPIO = old_GPIO;}
  }
    }  while(1);

}
а вот так- не работает...


Код:
unsigned short old_GPIO;

void init() {
  CMCON  = 0x07;
  TRISIO   = 0x28;
  OPTION_REG = 0b11000101;
  INTCON.GIE        = 0;
   }

void main() {
init() ;
    do {
   old_GPIO = GPIO;
   if(old_GPIO.F5 == 1)
   {TRISIO =0x28;
   old_GPIO.F1 = 1;
   old_GPIO.F4 = 0;
   GPIO = old_GPIO;}

  if(old_GPIO.F5 == 0)
  {
  CMCON = 0x04;
  VRCON = 0xA3;
  TRISIO = 0x2A;
  Delay_us(10);
  while(CMCON.F6==1){
  old_GPIO.F4 =1;
  GPIO = old_GPIO;}
  }
    }  while(1);

}
где во втором варианте косяк- совсем непонятно.. при компиляции ошибки нет... но ни в протеусе ни в железе не работает
[Ответ]
VRTP 10:17 30.11.2010
Вот интересная инфа,для начинающих на Си.
Изображения
[Ответ]
Азат 14:55 30.11.2010
Что то Петр пропал! [Ответ]
romchik77 21:54 30.11.2010
я бы сначала сказал спасибо ему
жаль что по AVR нет подобной темки... [Ответ]
Азат 08:50 01.12.2010
Спасибо. [Ответ]
petrd 08:57 01.12.2010

Сообщение от Азат:
Здраствуйте Петр.Попробывал вашу прошивку RC5 все нормально работает.Моя почему то сбоит.Вроде все настройки выставил как у Вас.

Да не пропал я. Железо и исходники от этого hex временно недоступны (отпуск), поэтому точного ответа дать не могу, только виртуально. А что значит сбоит? [Ответ]
petrd 10:36 01.12.2010

Сообщение от Butik:
где во втором варианте косяк- совсем непонятно.. при компиляции ошибки нет... но ни в протеусе ни в железе не работает

а если сделать так?

Код:
....
if(old_GPIO.F5 == 0)
  {
     CMCON = 0x04;
     VRCON = 0xA3;
     TRISIO = 0x2A;
     Delay_us(10);
     while(CMCON.F6==1)
         {
           CMCON.F4 = 1;
           old_GPIO.F4 =1;
           GPIO = old_GPIO;
         }
  }
....
[Ответ]
Азат 12:00 01.12.2010
я же писал помните, то что через пять раз нажатия на пульте начинают на экране разные символы выводить, а потом зависает.А ваша прошивка работает идеально.Хорошего отпуска)). [Ответ]
Butik 23:02 01.12.2010

Сообщение от petrd:
а если сделать так?

Код:
....
if(old_GPIO.F5 == 0)
  {
     CMCON = 0x04;
     VRCON = 0xA3;
     TRISIO = 0x2A;
     Delay_us(10);
     while(CMCON.F6==1)
         {
           CMCON.F4 = 1;
           old_GPIO.F4 =1;
           GPIO = old_GPIO;
         }
  }
....

Так то работает.... Все правильно!!!! При такой конфигурации модуля компараторов VREF подключен к + выводу...

Но тогда непонятно почему работает так

Код:
CMCON = 0x04;
  VRCON = 0xA3;
  TRISIO = 0x2A;
  Delay_us(10);
  if(CMCON.F6==1){
  .......................
    }
потому как исходя из datasheet и логики работы компаратора...

Сообщение от :
bit 6 COUT: Comparator Output bit
When CINV = 0:
1 = VIN+ > VIN-
0 = VIN+ < VIN-
When CINV = 1:
1 = VIN+ < VIN-
0 = VIN+ > VIN-

bit 5 Unimplemented: Read as ‘0’

bit 4 CINV: Comparator Output Inversion bit
1 = Output inverted
0 = Output not inverted

[Ответ]
Азат 10:16 02.12.2010
Ребят а можно подключить четыре кнопки на один вход.Если да то киньте схему и примерный код? [Ответ]
petrd 20:54 02.12.2010

Сообщение от Азат:
Ребят а можно подключить четыре кнопки на один вход.Если да то киньте схему и примерный код?

http://www.microchip.com.ru/Support/tips.html [Ответ]
Азат 08:32 03.12.2010
Спасибо.
Программная последовательность:
1) Конфигурируем RA4 как выход с уровнем лог. "0" для разрядки конденсатора.
PORTA=16
2) Конфигурируем RA4 как один из входов компаратора, другой вывод компаратора подключается к внутреннему источнику опорного напряжения.
3) Запускаем таймер и измеряем время до срабатывания компаратора.

Давайте попробуем разобрать код сам не справлюсь? Каким номеналом поставить резисторы и конденсатор(нужен ли он)? И по схеме получается если при одновременном нажатие будет срабатывать первая кнопка? [Ответ]
petrd 11:35 03.12.2010

Сообщение от Butik:
Но тогда непонятно почему работает так

Когда написано:
Код:
....
  CMCON = 0x04;
......
 while(CMCON.F6 == 1)
                 {
                  old_GPIO.F4 =1;
                  GPIO = old_GPIO;
                 }
при включении проверяется состояние GP5, и если оно 0 (а такое легко может быть и вообще мы можем попасть в любой момент времени периода повторения импульсов синхронизации 50 Гц, что в итоге приведет к тому, что конденсатор либо вообще никогда не начнет заряжаться, либо не успеет зарядится до нужного уровня), то попадаем в проверку while, а так как у нас перед этим ни одного цикла зарядки конденсатора не было (или он был, но короткий, т.е. недозаряд), то и имеем COUT = 1 ( VIN+ > VIN-) и дальше незапланированный вечный цикл из которого можно выйти только когда конденсатор заряжен, а чтобы зарядить - надо выйти из цикла - замкнутый круг. И, вообще, мы же с сетью не синхронизированы, то рано или поздно такой момент возникает.
А когда используется if, то никакого вечного цикла быть не может.
Как-то так. [Ответ]
petrd 11:12 04.12.2010

Сообщение от Азат:
Давайте попробуем разобрать код сам не справлюсь? Каким номеналом поставить резисторы и конденсатор(нужен ли он)? И по схеме получается если при одновременном нажатие будет срабатывать первая кнопка?

А зачем вообще такое надо? Что ног у контроллера мало? Такой вариант вообще от безысходности, ибо он нестабилен по температуре, надо подбирать резисторы и конденсаторы, подбирать значения таймера. Сделать-то можно, но оно того не стоит. [Ответ]
pt200___dr.ON 11:18 04.12.2010
Ктонибудь знает решение данной проблемы?
ANSI C. Препроцессор? Заполнить const массив элементами другого const массива... [Ответ]
Азат 13:31 04.12.2010
Петр хочу попробывать сделать радиоуправление.Данный пример манчестера должен передать слово Микроэлектроника.(Т.е задумка в итоге сделать радиоуправление двумя кноками (При чем чтоб поддерживалось одновременное нажатие)).Правильно ли я делаю.

Сообщение от :
// Manchester module connections
sbit MANRXPIN at RA0_bit;
sbit MANRXPIN_Direction at TRISA0_bit;
sbit MANTXPIN at RA1_bit;
sbit MANTXPIN_Direction at TRISA1_bit;
// End Manchester module connections

char index, character;
char s1[] = "mikroElektronika";
char s2[] = "mikro";
unsigned short oldstate,oldstateo;

void main() {
oldstate=0;
oldstateo=0;
// ANSEL = 0; // Configure AN pins as digital I/O
// ANSELH = 0;
// C1ON_bit = 0; // Disable comparators
// C2ON_bit = 0;

Man_Send_Init(); // Initialize transmitter

while (1) { // Endless loop
if (Button(&PORTA, 2, 1, 0))
oldstate = 1;
if (oldstate && Button(&PORTA, 2, 1, 1)){
Man_Send(0x0B); // Send "start" byte
Delay_ms(100); // Wait for a while

character = s1[0]; // Take first char from string
index = 0; // Initialize index variable
while (character) { // String ends with zero
Man_Send(character); // Send character
Delay_ms(90); // Wait for a while
index++; // Increment index variable
character = s1[index]; // Take next char from string
}
Man_Send(0x0E); // Send "end" byte
Delay_ms(1000);
oldstate = 0;
}
if (Button(&PORTA, 3, 1, 0))
oldstateo = 1;
if (oldstateo && Button(&PORTA, 3, 1, 1)){
Man_Send(0x0B); // Send "start" byte
Delay_ms(100); // Wait for a while

character = s2[0]; // Take first char from string
index = 0; // Initialize index variable
while (character) { // String ends with zero
Man_Send(character); // Send character
Delay_ms(90); // Wait for a while
index++; // Increment index variable
character = s2[index]; // Take next char from string
}
Man_Send(0x0E); // Send "end" byte
Delay_ms(1000);
oldstateo = 0;
}
}
}


Изображения
Нажмите на изображение для увеличения
Название: 16.JPG
Просмотров: 37
Размер:	24.8 Кб
ID:	1052166  
[Ответ]
petrd 21:21 04.12.2010

Сообщение от Азат:
Петр хочу попробывать сделать радиоуправление.Данный пример манчестера должен передать слово Микроэлектроника.(Т.е задумка в итоге сделать радиоуправление двумя кноками (При чем чтоб поддерживалось одновременное нажатие)).Правильно ли я делаю.

1. Если код манчестера из примеров MikroC, то он рабочий. Но у него есть недостатки - код блокирующий, т.е пока выполняются подпрограммы манчестера ничего другого делать нельзя (прерываниями нельзя пользоваться, а это большой минус), вообщем эта библиотека как-бы только для пробы пера. Альтернатива - ШИМ модуляция (подобная манчестерскому кодированию). У микрочип этот документ, называется TB045, на стейт-машине как RC5.
2. На схеме передатчик RT4, а приемник RR4 у Вас есть? Эта сладкая парочка работает с АМ, что не есть хорошо. Пробовал эту парочку, работает, но лучше с ЧМ.
3. В Вашей схеме светодиод на RA4 работать не будет - там открытый коллектор. [Ответ]
Азат 07:22 05.12.2010
petrd, А rc5 у меня не совсем правильно работает выше есть проект пост #695.TB045 Там примеры все на ассеблере.Если бы я это понимал.Прочитал куча литературы про манчестер голова пухнет.Приемник и передатчик заказал но еще не пришли rt5 и rr10.Пообещал ребенку на новый год управляемую машину сообрать.Вот пытаюсь.Такое исполнение схем правильное?Если не затруднит давайте разберем этот проект вместе досканально от теории до кода думаю многих это заинтересует.
Изображения
Нажмите на изображение для увеличения
Название: 16F.JPG
Просмотров: 24
Размер:	34.4 Кб
ID:	1053101   Нажмите на изображение для увеличения
Название: RC5__1~1.JPG
Просмотров: 44
Размер:	104.1 Кб
ID:	1053110  

[Ответ]
Азат 16:58 06.12.2010
petrd, Петр т.е к примеру если я повешу на передатчик RB0 ик приемник?щелкну на пульт.И через шим отправлю на приемник.Где на приемники прошита Philips RC5 он должен выдать что эта за команда.Правильно?
Чтоб передать шим нужно выставить
pwm_init(37000) ?
pwm_change_duty(64)? [Ответ]
petrd 10:16 08.12.2010

Сообщение от Азат:
petrd, Петр т.е к примеру если я повешу на передатчик RB0 ик приемник?щелкну на пульт.И через шим отправлю на приемник.Где на приемники прошита Philips RC5 он должен выдать что эта за команда.Правильно?
Чтоб передать шим нужно выставить
pwm_init(37000) ?
pwm_change_duty(64)?

Теоретически по простому заменить RC5 на радио можно, а практически не знаю, что из этого получится. Можно попробовать вместо ИК диода в ПДУ подсунуть передатчик RT (c учетом питания) и посмотреть, что получится. А про ШИМ Вы меня не правильно поняли - ШИМ в данном случае это термин вида модуляции, а не модуль контроллера. [Ответ]
Азат 10:39 08.12.2010
petrd, Помогите с примером.И взгляните пожалуйста на проект пост #695,что в нем не так может настройки. [Ответ]
petrd 09:59 09.12.2010

Сообщение от Азат:
И взгляните пожалуйста на проект пост #695,что в нем не так может настройки.

Попробуйте вот это, в архиве проект полностью.
Изображения
[Ответ]
petrd 21:29 10.12.2010

Сообщение от Азат:
petrd, Помогите с примером.

Поглядите апноту AN744, там есть подпрограмма RXI.c.
Во вложении проект именно на ней сделан.
Изображения
[Ответ]
Азат 08:00 11.12.2010
petrd, Спасибо.
1. По проекту RC5.Вопрос такой что не так с Toggle т.е при нажатие на кнопку "1" он ставит "T" (т.е включен),еще раз при нажатие "1" убирает "T" (т.е выключен).При таком раскладе все правильно.
При нажатие на кнопку "1" он ставит "T" (т.е включен), при нажатие "2" убирает "T" (т.е выключен),при нажатие на кнопку "1" он ставит "T" (т.е включен),а по идеи должен выключить. [Ответ]
petrd 08:21 11.12.2010

Сообщение от Азат:
petrd, Спасибо.
1. По проекту RC5.Вопрос такой что не так с Toggle т.е при нажатие на кнопку "1" он ставит "T" (т.е включен),еще раз при нажатие "1" убирает "T" (т.е выключен).При таком раскладе все правильно.
При нажатие на кнопку "1" он ставит "T" (т.е включен), при нажатие "2" убирает "T" (т.е выключен),при нажатие на кнопку "1" он ставит "T" (т.е включен),а по идеи должен выключить.

Почитайте стандарт, тут все правильно. Этот бит меняется на противоположный каждый раз, когда нажимается кнопка. [Ответ]
Азат 12:30 11.12.2010
petrd,
1.А тогда как отследить если я хочу включить и выключить светодиод т.е при поступление команды 1 вкл еще раз выключить. Если просто без toggle то при удерживание кнопки он будет моргать.А если условие что toggle 1 вкл и 0 выкл(то проблема при нажатие других кнопок приходиться несколь раз нажимать на кнопку 1).
2.После компилирование прошивки на MikroC Pro 3.8 ошибка осталась. [Ответ]
Страница 24 из 43
« Первая < 1418192021222324 25262728293034 > Последняя »
Вверх