Сообщение от Азат:
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 или с разных кнопок?
Сообщение от Азат:
Спс работает.
8 = 0x08 = 0b00001000 8 это Decimal,0x08 Hex.Правильно я понимаю.
Сообщение от Butik:
Переустановил компилятор- и все работает!!!! Скачал 8200 с официального сайта
Сообщение от АЗАТ:
...... как реализовать bmp рисунок чтоб отобразился на дисплее.Т.е хочеться чтоб на экране было 4 рисунка подряд ввиде 4 кнопок.Навроде меню мобильного.Какой дисплей выбрать для этого.
Сообщение от Азат:
Чтобы подключить к пику как я понимаю нужен драйвер подойдет ли L293D или он не обязателен? Хочу побаловаться ШИМ.
Сообщение от Butik:
Спасибо за советы- попробую разобраться еще с про.. может там я что то намудрил...или недосмотрел..
Петр, А вот можно еще вопрос- нет ли у Вас примерчика какого нибудь для работы со встроенным компаратором ПИКа - чет я там слегка запутался... В хелпе нет библиотеки с компараторами... а жаль...
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); }
Сообщение от :
#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();
}
Сообщение от VRTP:
как включаются/отключаются подтягивающие резы на 16F72,очень надо.
OPTION_REG &= ~ (1<<7); или OPTION_REG.F7 = 0; или OPTION_REG.B7 = 0; или NOT_RBPU_bit = 0;
Сообщение от Азат:
Вращаеться вперед,назад.Не получаеться управлять скоростью мотора.Pwm_Change_Duty(speed) указываю.Почему?
Сообщение от petrd:
В принципе как и у остальных PIC16.
Подтягивающие резисторы имеет только PORTB и подключены они могут быть только когда входы настроены на вход. .
Сообщение от :
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);
}
}
Сообщение от Азат:
Только резистор надо поставить между En1 и RB3.Каким номиналом?Или не нужен?
Сообщение от petrd:
Для расчета значений использовал программу PIC Timer Calculator скачать можно здесь http://pictimer.picbingo.com/download/index.php.
Сообщение от VRTP:
На мучался с этой прогой,если можно,то как с ней работать???
Сообщение от VRTP:
Первым софтом пользуюсь,а вторым-как только не пытался вводить времена-без пользЫ.
Сообщение от VRTP:
petrd
А, не подскажите как сделать,что бы эта подпрограмма работала к примеру 1сек,а потом уходила на определенную метку?
Сообщение от petrd:
Не понятно, что значит определенная метка? Это типа - 1 сек подпрограмма выполняется, а после нет?
Сообщение от VRTP:
Да,именно так(просто выходим из подпрограммы).
Сообщение от petrd:
Например так. Таймер (1мс). Прерывание по таймеру. В прерывании счетчик, инкремент каждое прерывание. Перед входом в подпрограмму сбросить счетчик. В подпрограмме проверять счетчик, если значение меньше нужного (<1000) - продолжить подпрограмму, если равно (=1000) выйти из подпрограммы.