Большой Воронежский Форум
Страница 30 из 43
« Первая < 2024252627282930 31323334353640 > Последняя »
»Радиолюбитель>PIC контроллеры. Программаторы и первый проект на PIC
Serj 14:48 11.11.2011
Всем привет, нужна помощь владельца PICkit 2 - прошить устройство.
есть инструкция
http://autoterm.ru/download/programmer_pickit_2.pdf
спец программа для прошивки
http://autoterm.ru/download/programing_bi_5.zip
прошивка
http://autoterm.ru/download/b5-1014-2014.zip
и коньяк (или какие другие ништяки)

девайс установлен на машине, так что прошиватся надо будет с ноутбука
если нету - я со своим приеду.
связь - лс. [Ответ]
Teeen 12:07 15.11.2011
Подскажите пожалуйста, для PIC 16F877A подцепил кварцевый резонатор на 4MHz и по 30пФ конденсаторы - схема работает стабильно, попробовал увеличить частоту до 16MHz (маркировка кварца: D160G0I) - схема при подаче питания не запускается, но при программировании PICKit2 с включенным питанием на схему - запускается, конденсаторы оставил для нового кварца те же по 30пФ, правильно ли я понимаю, что необходимо пробовать подбирать другие конденсаторы? Есть готовое решение чтобы запустить схему, кварц купил новый. Смущает то, PIC с ним работает после программирование, когда на схему подано питание ч/з PICKit2. [Ответ]
petrd 12:26 15.11.2011

Сообщение от Teeen:
Подскажите пожалуйста, для PIC 16F877A подцепил кварцевый резонатор на 4MHz и по 30пФ конденсаторы - схема работает стабильно, попробовал увеличить частоту до 16MHz (маркировка кварца: D160G0I) - схема при подаче питания не запускается, но при программировании PICKit2 с включенным питанием на схему - запускается, конденсаторы оставил для нового кварца те же по 30пФ, правильно ли я понимаю, что необходимо пробовать подбирать другие конденсаторы? Есть готовое решение чтобы запустить схему, кварц купил новый. Смущает то, PIC с ним работает после программирование, когда на схему подано питание ч/з PICKit2.

В битах конфигурации режим HS для 16 МГц поставили? [Ответ]
Teeen 03:07 16.11.2011

Сообщение от petrd:
В битах конфигурации режим HS для 16 МГц поставили?

Да, конечно. Сегодня попробую конденсаторы подобрать...
Понял, что схема запускается после MCLR Reset - после программирования PIC - не убирая галку на питание схемы +5В - ставишь галочку и затем снимаешь с MCLR - и схема запускается. В чем может быть причина такого поведения?

P.S.
1). Интересно, насколько близко необходимо располагать кварцевый резонатор от самой микросхемы или нет разницы?
2). При какой частоте работы PIC осуществляется влияние дорожек на плате?
3). Или это не мой случай? [Ответ]
petrd 12:57 16.11.2011

Сообщение от Teeen:
Да, конечно. Сегодня попробую конденсаторы подобрать...
Понял, что схема запускается после MCLR Reset - после программирования PIC - не убирая галку на питание схемы +5В - ставишь галочку и затем снимаешь с MCLR - и схема запускается. В чем может быть причина такого поведения?

P.S.
1). Интересно, насколько близко необходимо располагать кварцевый резонатор от самой микросхемы или нет разницы?
2). При какой частоте работы PIC осуществляется влияние дорожек на плате?
3). Или это не мой случай?

Мой обычный комплект - кварц 20 МГц и конденсаторы 15-22 пФ (SMD 0805 или выводные К10-17) расстояние от PIC 10-15 мм. Не помню даже, чтобы были подобные проблемы.

При быстром запуске использую такие правила.
1. Все выводы питания PIC должны быть подключены (для 877А их две пары, у других может быть и больше) .
2. На выводах питания обязательно стоит керамика - 0,1 мкФ (электролит по обстоятельствам).
3. MCLR (если он внешний) подтянут через 10 кОм к "+" питания.
После этого проблем с запуском обычно нет.

Почитайте - может тут ответ для себя найдете http://www.microchip.su/showthread.p...highlight=MCLR [Ответ]
Teeen 05:55 17.11.2011
Спасибо, буду пробовать... А вот конденсаторы в нашем городке от 15 до 25пФ не продают... город маленький. Но я знаю где взять
Что значит

Сообщение от petrd:
3. MCLR (если он внешний)

- я так и сделал.

Для PIC16F877A MCLR/VPP - 1 ножка.

[Ответ]
Teeen 08:10 18.11.2011
petrd, подскажите пожалуйста, мне на будущее, как правильно подключить выход микроконтроллера к нагрузке больше 100мА ? Просто ч/з транзистор достаточно будет. Выход МК будет использоваться как ключ. [Ответ]
petrd 08:43 18.11.2011

Сообщение от Teeen:
как правильно подключить выход микроконтроллера к нагрузке больше 100мА ? Просто ч/з транзистор достаточно будет.

Не просто через транзистор, а через транзисторный ключ, собранный по всем правилам электроники. [Ответ]
Teeen 11:25 21.11.2011
Вообщем решил проблему: как я понял программа начинает выполняться раньше, знаний не хватает выразить мысль, чем либо кварцевый резонатор "выйдет" на рабочую частоту, либо МК полностью инициализируется?
В AN607 "Power-up Trouble Shooting" имеется TABLE 2: TIME-OUT IN VARIOUS SITUATIONS (TYPICAL)
Oscillator Configuration Power-up Wake-up from SLEEP
XT, HS, LP(1) 18 ms 18 ms
которая меня натолкнула на мысль выставить бит конфигурации "Power Up Timer" = ON, но этой задержки не хватило, также в процедуру инициализации добавил:
void Init(){
delay_ms(1); // задержка выполнения программы в 1мс
...

и все заработало, теперь вопрос, что я сделал?
Повторюсь, с кварцем на 4 Мгц все работало замечательно... [Ответ]
Teeen 12:05 21.11.2011
Serj, а вы откуда? У меня есть такой программатор. [Ответ]
Teeen 11:01 23.11.2011
petrd, прокомментируйте пожалуйста пост №879 [Ответ]
petrd 12:29 23.11.2011

Сообщение от Teeen:
petrd, прокомментируйте пожалуйста пост №879

ИМХО. Поиски черной кошки в темной комнате, которой к тому же в ней нет.

1. Устройство от чего питается? PICKit2 может отдавать не больше 25 мА.
2. Смотрите, что Вы там накодили. [Ответ]
Teeen 06:20 24.11.2011

Сообщение от petrd:
ИМХО. Поиски черной кошки в темной комнате, которой к тому же в ней нет.

1. Устройство от чего питается? PICKit2 может отдавать не больше 25 мА.
2. Смотрите, что Вы там накодили.

1. Пробовал от компьютерного БП - эффект тот, же.
2. Мой код:
// Контроллер: PIC16F877A, датчик t: DS18B20, LCD: 16х2 с контроллером HD44780, Bipolar Step-motor
// Среда программирования: MikroC PRO for PIC v.4.60.0.0
// Автоматическое управление воздушной заслонкой бензинового генератора...
// при запуске анализируется текущая t, если она < уставки (SetTemp), то закрываем заслонку
// иначе открываем воздушную заслонку (регулируется кол-вом полных оборотов ротора и
// равна константе KolOborotov.
// Автор: я
// Дата: 16_02_2011г.
// Версия: 1.0.0
// Определение констант
// //Разрешение DS18B20 //Смещение t в C
const unsigned short TEMP_RESOLUTION = 12, OFFSET = 2;
const unsigned short FaseMax=4; // кол-во табличных значений для Step_Motor
//const unsigned int KolOborotov=FaseMax*100;// кол-во оборотов двигателя до момента полного открытия заслонки

// Определение переменных
// кол-во оборотов двигателя до момента полного открытия заслонки
unsigned int KolOborotov, CurOborotov;
unsigned short SetTemp, old_SetTemp;
unsigned short counter, curFase;
bit state, RotateForOpen;
signed short int intMinus;
char *text = "000";
char *set = "000"; // НЕ УДАЛЯТЬ! появится 4-ый знак 0 в уставки если убрать.
char *ust = "000";
unsigned temp;

// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

// подпрограмма обработки прерывания
void interrupt(){
if(INTCON.T0IF){
switch (RotateForOpen){
case 1: { // вращение влево
curFase++; // меняем последовательность включения обмоток двигателя
if (curFase>FaseMax)
{curFase=1;} // задействуем первую обмотку двигателя
};break;// end case
case 0: { // вращение вправо
curFase--; // меняем последовательность включения обмоток двигателя
if (curFase<1)
{curFase=4;} // задействуем последнюю обмотку двигателя
};break;
}// end switch
CurOborotov++; // кол-во оборотов, совершенных ротором
INTCON.T0IF=0;
}// end INTCON.T0IF
}// end interrupt

// Процедура вращения двигателя,
// если Open=0 - закрываем заслонку
// если Open=1 - открываем заслонку
void RotateMotor(unsigned short int Open){
CurOborotov=0; // текущие обороты ротора
RotateForOpen=Open; // задаем направление для вращения ротора Step-motor// задаем вращение
if (Open){curFase=4;}else{curFase=1;}
// ОТКРЫВАЕМ ИЛИ ЗАКРЫВАЕМ ЗАСЛОНКУ
while (CurOborotov<KolOborotov){
switch (curFase){
case 1: {PORTC=0b00001001;};break; //17&18 pins PIC16F877A
case 2: {PORTC=0b00000101;};break; //
case 3: {PORTC=0b00000110;};break;
case 4: {PORTC=0b00001010;};break;
}// end switch
// RA4_bit=0 - кнопка нажата, RA4_bit=1 - кнопка отпущена
// Если при закрывании заслонки была нажата кнопка, то останавливаем двигатель
if (!RA4_bit&!Open){
Eeprom_Write(0x0F,CurOborotov); // запоминаем кол-во оборотов ротора до нажатия кнопки
delay_ms(50);
CurOborotov=KolOborotov;
} // останавливаем ротор!
}// end while
PORTC=0; // Снимаем напряжение с двигателя!!!
}// end RotateMotor

void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
// преобразование отрицательной температуры
if (temp2write & 0x8000) {
intMinus=-1;
Lcd_Chr(1,3,'-');
temp2write = ~temp2write + 1;
}
else{
intMinus=1;
Lcd_Chr(1,3,' ');}
// извлечение целой части
temp_whole = temp2write >> RES_SHIFT ;
// преобразование целой части температуры в символы
text[0] = temp_whole/100 + 48; // извлечение сотен
text[1] = (temp_whole/10)%10 + 48; // извлечение десятков
text[2] = temp_whole%10 + 48; // извлечение единиц
// извлечение и преобразование дробной части
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
// преобразование дробной части в символы
text[4] = temp_fraction/1000 + 48; // extract thousands digit
text[5] = (temp_fraction/100)%10 + 48; // extract hundreds digit
text[6] = (temp_fraction/10)%10 + 48; // extract tens digit
text[7] = temp_fraction%10 + 48; // extract ones digit
// вывод температуры на ЖКИ
Lcd_Out(1, 4, text);
//Вывод уставки на ЖКИ
ust[0]=SetTemp/100+48;
ust[1]=(SetTemp/10)%10+48;
ust[2]=SetTemp%10+48;
// обрезаем дробную часть уставки
ust[3]=0;
ust[4]=0;
Lcd_Out(1,12,ust);

//if (RA3_bit){Lcd_Out(2, 10, "CLOSE");}else{Lcd_Out(2, 10, "OPEN ");}//08_11_2011
if (!RA4_bit){Lcd_Out(2, 10, "CLOSE");}else{Lcd_Out(2, 10, "OPEN ");}

intMinus*=temp_whole;
switch (state){
case 0:{
// если уставка выше
if (SetTemp>intMinus){PORTA=8;}// то включение
else{ // если нет
PORTA=0; // выключение
state=1;
}
};break;
case 1:{
// если уставка выше
if (SetTemp-OFFSET>intMinus){
PORTA=8; // то включение
state=0;}
else{PORTA=0;} // выключение
};break;
}// end switch (state)
}// end Display_Temperature

void Init(){
delay_ms(1); // задержка перед выполнением программы! --Не убирать! Нужно подбирать если программа не запускается!

ADCON1=6;
TRISA=0b11110111;
TRISC=0;
PORTC=0; // двигатель СТОП!
//OPTION_REG = 0x87; // настройка TMR0, прерывания будут каждые 66,304 ms - в HEX
OPTION_REG = 0b10000111; // настройка TMR0, прерывания будут каждые 66,304 ms - в Binary
INTCON.T0IE=1; // разрешили прерывания по переполнению TMR0
INTCON.GIE=1; // разрешили все прерывания
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Очистить дисплей
Lcd_Cmd(_LCD_CURSOR_OFF); // Курсор не отображать
Lcd_Out(1, 1, "t="); // вывод t=
Lcd_Out(1,8,"C;u="); // вывод C;u=
Lcd_Chr(1,7,223); // вывод символа точки и "С" как единицы измеренияLcd_Chr(1,16,'C');
Lcd_Chr(1,15,223); // вывод символа точки и "С" как единицы измеренияLcd_Chr(1,16,'C');
Lcd_Chr(1,16,'C'); // вывод С
Lcd_Out(2, 1, "DUMPER = "); // вывод DUMPER =
SetTemp=Eeprom_Read(0); // читаем уставку из EEPROM
delay_ms(50);
if (SetTemp>125){
SetTemp=25;
old_SetTemp=SetTemp;
Eeprom_Write(0,SetTemp); // если больше 125 градусов сохраняем в EEPROM t=25C
delay_ms(50);
} //end if (SetTemp>125)
} // end Init()

void main() {
unsigned short iDO, KolClose, KolOpen;
Init(); // Инициализируем LCD и читаем уставку

KolOborotov=Eeprom_Read(0x0F);// читаем кол-во оборотов ротора из EEPROM
delay_ms(50);
if (KolOborotov < 10){
KolOborotov=FaseMax*100;
Eeprom_Write(0x0F,KolOborotov);
delay_ms(50);
}

iDO=0; // счетчик, играет роль задержки для измерения t, а потом уже двигаем заслонку
KolClose=1; // разрешаем закрытие заслонки только один раз (если не сработает кнопка)
KolOpen=1; // разрешаем открытие заслонки только один раз (если не сработает кнопка)
//--- главный цикл
do {
//--- чтение температуры из DS18B20
Ow_Reset(&PORTA,2); // сигнал сброса
Ow_Write(&PORTA,2,0xCC); // команда SKIP_ROM
Ow_Write(&PORTA,2,0x44); // команда CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA,2);
Ow_Write(&PORTA,2,0xCC); // команда SKIP_ROM
Ow_Write(&PORTA,2,0xBE); // команда READ_SCRATCHPAD
temp = Ow_Read(&PORTA,2);
temp = (Ow_Read(&PORTA,2) << 8) + temp;
//--- чтение температуры из DS18B20

if (Button(&PORTA, 0,1,0)){ // нажимаем кнопку на RA0 ("уставка выше")
SetTemp++;
if (SetTemp>125){SetTemp=125;}}
if (Button(&PORTA, 1,1,0)){ // нажимаем кнопку на RA1 ("уставка ниже")
SetTemp-- ;
if (setTemp==255){SetTemp=0;}}
if (old_SetTemp!= SetTemp) { // если было изменение уставки
Eeprom_Write(0,SetTemp); // то сохраняем в EEPROM новое значение уставки
delay_ms(50);
old_SetTemp = SetTemp; // и сохраняем для текущей работы
}
//--- форматирование, вывод на ЖКИ температуры и уставки, включение-выключение
Display_Temperature(temp);
Delay_ms(500);

//RA3_bit=0, если измеренная t>t уставки
//RA3_bit=1, если измеренная t<t уставки
//RA4_bit=0, если заслонка закрыта (кнопка замкнута на массу)
//RA4_bit=1, если заслонка открыта (кнопка отпущена - высокий уровень)
iDO++;
if (iDO>2){
if (!RA3_bit&!RA4_bit&KolOpen<2){
RotateMotor(1); // открываем заслонку
KolClose=1; // разрешаем закрыть заслонку, т.к. она 100% открыта
KolOpen=2;
}// end if
// Ввели переменную
else if (RA3_bit&RA4_bit&KolClose<2){
RotateMotor(0); // закрываем заслонку
KolClose=2; // если вдруг кнопка не замкнулась на массу, то чтобы двигатель
KolOpen=1;
}// end else if // не пытался бесконечно это делать - останавливаем его
iDO=5;}// end if iDO
}// end do

while(1);
}// end main [Ответ]
petrd 21:37 24.11.2011

Сообщение от Teeen:
1. Пробовал от компьютерного БП - эффект тот, же.
2. Мой код......

Напишите моргалку с этим кварцем, если работает, то затем свой код по частям подставляйте. [Ответ]
alex56 15:44 08.12.2011
petrd раскажите пожалуста по подробние что это CMCON=7; какой её смысл [Ответ]
petrd 16:16 08.12.2011

Сообщение от alex56:
petrd раскажите пожалуста по подробние что это CMCON=7; какой её смысл

Один вывод контроллера может быть связан с несколькими модулями (АЦП, компратор, USART, цифровой I/O и т.д.), поэтому при включении контроллера нужно определить в каком режиме будут использоваться соответствующие выводы. В данном случае речь идет о компараторе. При включении питания соответствующие выводы, связанные с компаратором к нему и подключаются, а нам они будут нужны как цифровые I/O. Команда CMCON=7 в данном случае переключает выводы с компаратора на функцию цифровых входов-выходов. [Ответ]
alex56 08:36 09.12.2011

Сообщение от petrd:
Один вывод контроллера может быть связан с несколькими модулями (АЦП, компратор, USART, цифровой I/O и т.д.), поэтому при включении контроллера нужно определить в каком режиме будут использоваться соответствующие выводы. В данном случае речь идет о компараторе. При включении питания соответствующие выводы, связанные с компаратором к нему и подключаются, а нам они будут нужны как цифровые I/O. Команда CMCON=7 в данном случае переключает выводы с компаратора на функцию цифровых входов-выходов.

спасибо я просто на страничке 2 не могу разобраться что к чему с 628 я делаю в норме а когда меняю на 84 проблема выхода у контролеров вроде одинаковы теперь кое что ясно будем дальше разбиратьсяю))) [Ответ]
petrd 08:41 09.12.2011

Сообщение от alex56:
спасибо я просто на страничке 2 не могу разобраться что к чему с 628 я делаю в норме а когда меняю на 84 проблема выхода у контролеров вроде одинаковы теперь кое что ясно будем дальше разбиратьсяю)))

У PIC16F84A нет компаратора, поэтому и регистра CMCON тоже нет. [Ответ]
alex56 10:42 09.12.2011

Сообщение от petrd:
У PIC16F84A нет компаратора, поэтому и регистра CMCON тоже нет.

PIC16F84A у меня их целых 5 штук
поэтому я всё на него научусь медведей в цирке и то учат я же не хуже
спасибо тебе большое petrd я читаю
чьёто не хочу мне свое надо а готовое проще купить [Ответ]
Teeen 04:11 14.12.2011
Здравтсвуйте petrd!
Подскажите пожалуйста направление...
Хочу связать PIC+GSM для удаленного контроля темературы в помещении, если температура достигла заданного минимального порога - схема должна включать обогреватель (сделаю без проблем) и оповещать меня об этом посредством SMS, при достижении выше минимальной на 2-5 градусов - выключать обогрвеватель и также оповещать. Дополнительно хочу - удаленно (с помощью SMS) управлять включением данного обогревателя независимо от температуры в помещении.
Что у меня есть: фактически рабочий проект по заданию минимальной и дельты в сторону максимальной температуры + LCD, где все это отображается, теперь хочется прикрутить GSM-модуль (какой проще?) и поэкспериментировать с его работой. Т.е. хотя бы для начала - при достижении min температуры слать сгенерированное sms на мой номер. [Ответ]
petrd 07:12 14.12.2011

Сообщение от Teeen:
Здравтсвуйте petrd!
Подскажите пожалуйста направление...
Хочу связать PIC+GSM для удаленного контроля темературы в помещении, если температура достигла заданного минимального порога - схема должна включать обогреватель (сделаю без проблем) и оповещать меня об этом посредством SMS, при достижении выше минимальной на 2-5 градусов - выключать обогрвеватель и также оповещать. Дополнительно хочу - удаленно (с помощью SMS) управлять включением данного обогревателя независимо от температуры в помещении.
Что у меня есть: фактически рабочий проект по заданию минимальной и дельты в сторону максимальной температуры + LCD, где все это отображается, теперь хочется прикрутить GSM-модуль (какой проще?) и поэкспериментировать с его работой. Т.е. хотя бы для начала - при достижении min температуры слать сгенерированное sms на мой номер.

1. Какой-нибудь пожилой GSM телефон с RS232, которым можно управлять AT командами.
2. SIM900 и т.д. [Ответ]
Teeen 08:15 15.12.2011

Сообщение от petrd:
1. Какой-нибудь пожилой GSM телефон с RS232, которым можно управлять AT командами.
2. SIM900 и т.д.

Это понятно, мне интересна последовательность (блочность) программирования PIC, т.е. сначала делаем связку этого с этим, затем и т.д. ?
Т.е. как это должно выглядеть на пальцах (просто технология), тонкости как именно не нужны.
Просьба большая напишите пожалуйста.

Забыл написать: 1 вариант не нравится, только второй. Как?

petrd Я правильно понимаю: берем PIC с встроенным UART и шлем/принимаем команды в/из GSM модуль(я) и все? [Ответ]
zver-diman 14:29 19.12.2011
Подскажите где в Воронеже купить PICKIT2? [Ответ]
petrd 06:55 20.12.2011

Сообщение от Teeen:
petrd Я правильно понимаю: берем PIC с встроенным UART и шлем/принимаем команды в/из GSM модуль(я) и все?

Да.

Сообщение от zver-diman:
Подскажите где в Воронеже купить PICKIT2?

Придти и купить в Воронеже вряд ли получится. Или под заказ или с рук или самодельный. [Ответ]
zver-diman 16:21 20.12.2011
Тока что купил в магазине Радио Хит, как не странно был в наличии, цена чуть меньше 2000р [Ответ]
petrd 16:43 20.12.2011

Сообщение от zver-diman:
Тока что купил в магазине Радио Хит, как не странно был в наличии, цена чуть меньше 2000р

Поздравляю! [Ответ]
zver-diman 17:01 20.12.2011
Научите меня им пользоваться

В том смысле что есть низковольтное программирование, высоковольтное, debug?
Нужно шить и дебагить PIC18F452
[Ответ]
petrd 18:19 20.12.2011

Сообщение от zver-diman:
Научите меня им пользоваться

В том смысле что есть низковольтное программирование, высоковольтное, debug?
Нужно шить и дебагить PIC18F452

http://pickit2.ru/doku.php/%D1%80%D1...%D1%8F.pickit2

Смотрите, что не поймете спросите. [Ответ]
zver-diman 18:41 20.12.2011
Спасибо, читаю. [Ответ]
Teeen 04:09 29.12.2011
petrd, здравствуйте и с наступающим Новым годом!
Подскажите пожалуйста, можно порты TXD и RXD модуля http://www.olimex.com/dev/pdf/OTHER/MOD-GSM.pdf соединить напрямую с портами PIC без использования промежуточной микросхемы MAX232 например? И будет достаточно этих 2-ух портов и общей земли для передачи сигналов на MOD-GSM и обратно в PIC?
PIC16F877A с аппартаным USART. [Ответ]
Страница 30 из 43
« Первая < 2024252627282930 31323334353640 > Последняя »
Вверх