Большой Воронежский Форум
Страница 23 из 43
« Первая < 1317181920212223 24252627282933 > Последняя »
»Радиолюбитель>PIC контроллеры. Программаторы и первый проект на PIC
Азат 09:06 18.11.2010
1.KS0108 хочу сделать меню как в телефоне т.е каждый рисунок это кнопка.
2.Почитал про Регистры TRISx но так и ничего не понял видимо не то читал.
TRISA=0b 1 1 1 1 0 0 1 1;
0b ? RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
Обьясните пожалуйста?
3.TRISA=0b11110011; // все выводы PORTA на вход, RA2 и RA3 - выход
#define Relay_On() PORTA=8 //этим включаем RA3, если поставить 7 то будет RA2 *почему 7 или 8?
4.Как включить одновременно RA2 и RA3 или с разных кнопок?
Изображения
 
[Ответ]
petrd 13:26 18.11.2010

Сообщение от Азат:
1.KS0108 хочу сделать меню как в телефоне т.е каждый рисунок это кнопка.
2.Почитал про Регистры TRISx но так и ничего не понял видимо не то читал.
TRISA=0b 1 1 1 1 0 0 1 1;
0b ? RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
Обьясните пожалуйста?
3.TRISA=0b11110011; // все выводы PORTA на вход, RA2 и RA3 - выход
#define Relay_On() PORTA=8 //этим включаем RA3, если поставить 7 то будет RA2 *почему 7 или 8?
4.Как включить одновременно RA2 и RA3 или с разных кнопок?

0b - сигнал компилятору, что далее будет число в двоичном коде. RA7-RA0 следуют так как Вы написали.
TRISA=0b11110011
для запоминания - 0 похоже на Out -выход.
для запоминания - 1 похоже на In -вход.
PORTA = 8 = 0x08 = 0b00001000 - единица на RA3
PORTA = 12 = 0x0C = 0b00001100 - единицы на RA3 и RA2
PORTA = 4 = 0x04 = 0b00000100 - единица на RA2 [Ответ]
Азат 14:17 18.11.2010
Спс работает.
8 = 0x08 = 0b00001000 8 это Decimal,0x08 Hex.Правильно я понимаю. [Ответ]
petrd 14:28 18.11.2010

Сообщение от Азат:
Спс работает.
8 = 0x08 = 0b00001000 8 это Decimal,0x08 Hex.Правильно я понимаю.

Да......... [Ответ]
Butik 19:10 18.11.2010
Спасибо!!!! Переустановил компилятор- и все работает!!!! Скачал 8200 с официального сайта [Ответ]
petrd 19:31 18.11.2010

Сообщение от Butik:
Переустановил компилятор- и все работает!!!! Скачал 8200 с официального сайта

Ну не знаю, не знаю. У меня в Протеусе (пришлось достать ради интереса) Ваш код под MikroC PRO 3.20 работает.
MikroC 8.2 - не вариант, PRO от 8.2 очень далеко ушел.

Сообщение от АЗАТ:
...... как реализовать bmp рисунок чтоб отобразился на дисплее.Т.е хочеться чтоб на экране было 4 рисунка подряд ввиде 4 кнопок.Навроде меню мобильного.Какой дисплей выбрать для этого.

Судя по сегодняшним вопросам тяжело с этим будет. Сперва надо научиться выводить разные картинки. А организация меню - это вообще отдельная песня. Для этого обязательно надо изучить указатели в Си, без них в меню никуда. [Ответ]
Butik 22:39 18.11.2010
Спасибо за советы- попробую разобраться еще с про.. может там я что то намудрил...или недосмотрел..
Петр, А вот можно еще вопрос- нет ли у Вас примерчика какого нибудь для работы со встроенным компаратором ПИКа - чет я там слегка запутался... В хелпе нет библиотеки с компараторами... а жаль... [Ответ]
Азат 08:28 19.11.2010
Сделал в MicroC pro свой проект всё равно в протезе через какое то время зависает.Видимо проблема с протезом. [Ответ]
Азат 12:10 19.11.2010
Ребят есть мотор DC
номинальное напряжение: 13 В диапазон напряжения: 3…13 В выдрал с магнитолы)
Чтобы подключить к пику как я понимаю нужен драйвер подойдет ли L293D или он не обязателен? Хочу побаловаться ШИМ. [Ответ]
petrd 12:42 19.11.2010

Сообщение от Азат:
Чтобы подключить к пику как я понимаю нужен драйвер подойдет ли L293D или он не обязателен? Хочу побаловаться ШИМ.

Драйвер обязательно, т.к. у выводов PIC максимальный ток до 25 мА. Должен подойти. [Ответ]
petrd 19:50 19.11.2010

Сообщение от Butik:
Спасибо за советы- попробую разобраться еще с про.. может там я что то намудрил...или недосмотрел..
Петр, А вот можно еще вопрос- нет ли у Вас примерчика какого нибудь для работы со встроенным компаратором ПИКа - чет я там слегка запутался... В хелпе нет библиотеки с компараторами... а жаль...

А может с битами конфигурации проблемы, код-то полностью Ваш.
Не, примеров с компаратором у меня нет. А с чем запутались-то? [Ответ]
Butik 22:56 19.11.2010
Та вот непонятно как организовать цикл чтения состояния выхода компаратора...
примерно тот же код что и ранее- только там активируется компаратор и отслеживается его выход- с установкой в 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.F0 = 0;
    GPIO = old_GPIO;}
    
  if(old_GPIO.F5 == 0)
  {
   CMCON = 0x04;
  VRCON = 0xA3;
  TRISIO = 0x2A;
  Delay_us(10);

  do
  {
  old_GPIO = GPIO;
  old_GPIO.F0 = 0;
  GPIO = old_GPIO;
  } while (CMCON.F6=0);
  old_GPIO = GPIO;
  old_GPIO.F0 = 1;
  GPIO = old_GPIO;
  }
  
    }  while(1);

}
[Ответ]
Азат 15:38 20.11.2010
Вращаеться вперед,назад.Не получаеться управлять скоростью мотора.Pwm_Change_Duty(speed) указываю.Почему?

Сообщение от :
#include <motor.h>
#define SetBut Button(&PORTB, 7,10,0)
//#define Relay_On() PORTA=8
//#define Relay_Off() PORTA=0
unsigned char j=0, i=0;
unsigned short oldstate, flag;

void LCD_Out_Rus(char row, char column, char *text)
{
const unsigned char russian_HD44780[]={0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45,
0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7,
0x4D, 0x48, 0x4F, 0xA8, 0x50, 0x43,
0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB,
0xAC, 0xE2, 0xAD, 0xAE, 0x62, 0xAF,
0xB0, 0xB1, 0x61, 0xB2, 0xB3, 0xB4,
0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9,
0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE,
0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78,
0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3,
0xC4, 0xC5, 0xC6, 0xC7};

if (*text)
{
if (*text > 191)
Lcd_Chr(row, column, russian_HD44780[(*text) - 192]);
else
Lcd_Chr(row, column, *text);
}
else
return;
*text++;
while(*text)
{
if (*text > 191)
Lcd_Chr_Cp(russian_HD44780[(*text) - 192]);
else
Lcd_Chr_Cp(*text);
text++;
}
}
void main()
{
CMCON = 7; // Все выводы цифровые входы-выходы
TRISA=0b11110000; // все выводы PORTA на вход, RA3 - выход
Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // назначение выводов ЖКИ - PIC
Lcd_Cmd(LCD_CURSOR_OFF);
LCD_Out_Rus(1,1," Инициализация");
while (1)
{delay_ms(100); j++; Lcd_Chr(2, j, 0xff); if(j==17) {break ;}
}
do
{LCD_Out(1,1," ");
for(;
{if (Button(&PORTB, 7, 10, 1)) oldstate = 1;
if (oldstate && SetBut)
{ flag = ~flag; oldstate = 0; }
if (flag)
{ LCD_Out_Rus(2,1,"Вкл ");
//Вот здесь управление******************************
Forward(255);//(полная скорость)
delay_ms(1000);
Forward(10)
уменьшаю скорость эффекта нет)
delay_ms(1000);
Motor_Stop();
delay_ms(1000);
Backward(255);
delay_ms(1000);
Motor_Stop();
delay_ms(1000);//Relay_On();
//Вот здесь управление******************************
}
else
{ LCD_Out_Rus(2,1,"Выкл ");
//Relay_Off();
}

}
} while(1);
}

***Управление мотором***

Сообщение от :
char motor_duty_=127;
char motor_init_=0;

void Motor_Init()
{ if (motor_init_==0)
{motor_init_=1;
TRISA.F2=0;
TRISA.F1=0;
TRISA.F0=0;
Pwm_Init(5000);
}
}

void Change_Duty(char speed)
{
if (speed != motor_duty_)
{
motor_duty_=speed;
Pwm_Change_Duty(speed);
}
}

void Motor_A_FWD()
{Pwm_Start();
PORTA.F2=1;
PORTA.F1=0;
PORTA.F0=1;
}
void Motor_A_BWD()
{Pwm_Start();
PORTA.F2=0;
PORTA.F1=1;
PORTA.F0=1;
}
void Motor_A_OFF()
{Pwm_Stop();
PORTA.F2=0;
PORTA.F1=0;
PORTA.F0=0;
}

void Forward(char speed)
{Motor_Init();
Change_Duty(speed);
Motor_A_FWD();
}
void Backward(char speed)
{Motor_Init();
Change_Duty(speed);
Motor_A_BWD();
}
void Motor_Stop()
{Motor_Init();
Change_Duty(0);
Motor_A_OFF();
}


Изображения
Нажмите на изображение для увеличения
Название: 201.jpg
Просмотров: 72
Размер:	102.4 Кб
ID:	1033105  
[Ответ]
VRTP 16:35 20.11.2010
petrd
Подскажите Плизз как включаются/отключаются подтягивающие резы на 16F72,очень надо.



Мож кто знает,что бы человека не напрягать??? [Ответ]
petrd 21:34 20.11.2010

Сообщение от VRTP:
как включаются/отключаются подтягивающие резы на 16F72,очень надо.

В принципе как и у остальных PIC16.
Подтягивающие резисторы имеет только PORTB и подключены они могут быть только когда входы настроены на вход. При переводе вывода на выход резистор этого вывода автоматически отключается. Подключение резисторов (после сброса отключены) производится через сброс бита 7 регистра OPTION. В MikroC PRO:
Код:
OPTION_REG  &= ~ (1<<7);
или
OPTION_REG.F7 = 0;
или
OPTION_REG.B7 = 0;
или 
NOT_RBPU_bit = 0;
P.S. В MikroC PRO есть волшебные кнопки Ctrl + Alt +D и все регистры заданного в проекте контроллера перед глазами. [Ответ]
petrd 22:22 20.11.2010

Сообщение от Азат:
Вращаеться вперед,назад.Не получаеться управлять скоростью мотора.Pwm_Change_Duty(speed) указываю.Почему?

1. Что у Вас находится в motor.h, догадываюсь, что это то, что ниже слов ***Управление мотором***, но надо бы уточнить.
2. Что-то Вы недопонимаете. Встроенная в MikroC библиотека ШИМ работает с аппаратным модулем CCP в режиме ШИМ. В PIC16F628A модуль CCP только один и сигнал аппаратного ШИМ выводится на RB3 и никуда кроме. А у Вас он по схеме куда подключен? (см. пост #45). Да и драйвер непонятно как включен. [Ответ]
VRTP 05:44 21.11.2010

Сообщение от petrd:
В принципе как и у остальных PIC16.
Подтягивающие резисторы имеет только PORTB и подключены они могут быть только когда входы настроены на вход. .

Спасибо!
За PORTB и настройки вход/выход,в курсе. [Ответ]
Азат 09:12 21.11.2010
Только резистор надо поставить между En1 и RB3.Каким номиналом?Или не нужен?
Так правильно?
Motor.h

Сообщение от :
char motor_duty_=127;
char motor_init_=0;

void Motor_Init()
{ if (motor_init_==0)
{motor_init_=1;
TRISB.F0=0;
TRISB.F1=0;
Pwm_Init(5000);
}
}

void Change_Duty(char speed)
{
if (speed != motor_duty_)
{
motor_duty_=speed;
Pwm_Change_Duty(speed);
}
}

void Motor_A_FWD()
{Pwm_Start();
PORTB.F0=0;
PORTB.F1=1;
}
void Motor_A_BWD()
{Pwm_Start();
PORTB.F0=1;
PORTB.F1=0;
}
void Motor_A_OFF()
{Pwm_Stop();
PORTB.F0=0;
PORTB.F1=0;
}

void Forward(char speed)
{Motor_Init();
Change_Duty(speed);
Motor_A_FWD();
}
void Backward(char speed)
{Motor_Init();
Change_Duty(speed);
Motor_A_BWD();
}
void Motor_Stop()
{Motor_Init();
Change_Duty(0);
Motor_A_OFF();
}

Сама программа

Сообщение от :
#include <motor.h>
void main()
{
CMCON=7;
PORTB = 0;
TRISB = 0;
while (1)
{
Forward(10);
delay_ms(2000);
Forward(255);
delay_ms(2000);
Motor_Stop();
delay_ms(1000);
Backward(255);
delay_ms(1000);
Motor_Stop();
delay_ms(1000);
}
}


Изображения
Нажмите на изображение для увеличения
Название: 202.jpg
Просмотров: 50
Размер:	51.8 Кб
ID:	1033853  
[Ответ]
petrd 20:53 21.11.2010

Сообщение от Азат:
Только резистор надо поставить между En1 и RB3.Каким номиналом?Или не нужен?

В принципе не нужен, но можно и поставить.

А кто научил в *.h файле писать код? Он не для этого предназначен. Об этом в help MikroC тоже говорится. Читайте - http://www.pic24.ru/doku.php/osa/articles/modules и http://www.pic24.ru/doku.php/osa/art...without_errors [Ответ]
Азат 06:48 22.11.2010
Спасибо это пример я взял из Робопика. [Ответ]
VRTP 19:30 22.11.2010

Сообщение от petrd:
Для расчета значений использовал программу PIC Timer Calculator скачать можно здесь http://pictimer.picbingo.com/download/index.php.

На мучался с этой прогой,если можно,то как с ней работать???Для себя пока нашол альтернативу,простенькая прога,но имеет русский фейс,считает только времена,и выдает код в АСМе.Если надо кому,скину. [Ответ]
petrd 20:06 22.11.2010

Сообщение от VRTP:
На мучался с этой прогой,если можно,то как с ней работать???

Во дела, в каком месте намучились? В ней даже хелпа нет, т.к. там и хелпить-то нечего, вся информация и так перед глазами. [Ответ]
VRTP 20:29 22.11.2010
Первым софтом пользуюсь,а вторым-как только не пытался вводить времена-без пользЫ.
Изображения
Нажмите на изображение для увеличения
Название: 223.JPG
Просмотров: 47
Размер:	48.3 Кб
ID:	1036897   Нажмите на изображение для увеличения
Название: 332.JPG
Просмотров: 53
Размер:	158.5 Кб
ID:	1036898  

[Ответ]
petrd 20:50 22.11.2010

Сообщение от VRTP:
Первым софтом пользуюсь,а вторым-как только не пытался вводить времена-без пользЫ.

Что их сравнивать? Это же разные вещи - расчет задержек без таймеров и расчет параметров таймеров. [Ответ]
Азат 09:08 23.11.2010
Ребят подскажите пожалуйста схему радиопередатчика и приемника на 4 и более канала.Хотелось бы собрать на каком бы нибудь пике. [Ответ]
VRTP 18:42 24.11.2010
petrd
А, не подскажите как сделать,что бы эта подпрограмма работала к примеру 1сек,а потом уходила на определенную метку?

k11

bsf LATА,0

movlw d'25'
movwf bank2
movlw d'12'
movwf bank1
decfsz bank1,f
bra $-2
decfsz bank2,f
bra $-10

;**************************************
bcf LATА,0

movlw d'25'
movwf bank2
movlw d'12'
movwf bank1
decfsz bank1,f
bra $-2
decfsz bank2,f
bra $-10


bra k11

return [Ответ]
petrd 19:14 24.11.2010

Сообщение от VRTP:
petrd
А, не подскажите как сделать,что бы эта подпрограмма работала к примеру 1сек,а потом уходила на определенную метку?

Не понятно, что значит определенная метка? Это типа - 1 сек подпрограмма выполняется, а после нет? [Ответ]
VRTP 20:21 24.11.2010

Сообщение от petrd:
Не понятно, что значит определенная метка? Это типа - 1 сек подпрограмма выполняется, а после нет?

Да,именно так(просто выходим из подпрограммы). [Ответ]
petrd 21:04 24.11.2010

Сообщение от VRTP:
Да,именно так(просто выходим из подпрограммы).

Например так. Таймер (1мс). Прерывание по таймеру. В прерывании счетчик, инкремент каждое прерывание. Перед входом в подпрограмму сбросить счетчик. В подпрограмме проверять счетчик, если значение меньше нужного (<1000) - продолжить подпрограмму, если равно (=1000) выйти из подпрограммы. [Ответ]
VRTP 21:49 24.11.2010

Сообщение от petrd:
Например так. Таймер (1мс). Прерывание по таймеру. В прерывании счетчик, инкремент каждое прерывание. Перед входом в подпрограмму сбросить счетчик. В подпрограмме проверять счетчик, если значение меньше нужного (<1000) - продолжить подпрограмму, если равно (=1000) выйти из подпрограммы.

Прерывания по таймеру запрещены.Вот и думаю как сделать!? [Ответ]
Страница 23 из 43
« Первая < 1317181920212223 24252627282933 > Последняя »
Вверх