Большой Воронежский Форум
Страница 6 из 43
< 123456 78910111216 > Последняя »
»Радиолюбитель>PIC контроллеры. Программаторы и первый проект на PIC
Krivoy 13:42 08.05.2009
Он там один в нижнем новгороде chipnn кажется. Просто никогда по почте ничего не заказывал. Но тут такой вариант, пропустить жалко а в москву никак... Так что решил попробовать и рискнул 768 рублями , тем более шашлык 350р. уже. Ну не съем пару порций [Ответ]
petrd 13:58 08.05.2009

Сообщение от Krivoy:
нижнем новгороде chipnn кажется.

Ага http://www.chip-nn.ru. Да не, я думаю ничего стремного нет, они партнеры с Гамма-спб. Если что будет не так, то можно на www.microchip.su шум поднять. А я в www.trt.ru заказал, жду. [Ответ]
romchik77 20:45 08.05.2009
И я в www.trt.ru заказал, жду
petrd,С термостатом, не удивлюсь еще какому ни-будь навороту.
И все же как "создать" алгоритм. [Ответ]
romchik77 21:21 09.05.2009

Сообщение от petrd:
теперь можно минимальное и максимальное значение температуры выставлять независимо друг от друга

проверил, эт даже получше. Но замечу пару минусов. а)Индикацию дробной части температуры, считаю нужно округлить до десятых, а то и до целых, все равно точность +- 1.
б) Допустим нажав Кн.3 вошёл в меню уставки мин. или мах. и если в таком состоянии бросить, то девайс просто не работает, пока не выйдешь из настройки, что не допустимо.

Сообщение от petrd:
в железе проверю наверняка.

а что означает в железе..., Вы собираете и смотрите или же виртуально?
З.Ы. с праздничком
[Ответ]
petrd 15:16 10.05.2009

Сообщение от romchik77:
Но замечу пару минусов. а)Индикацию дробной части температуры, считаю нужно округлить до десятых, а то и до целых, все равно точность +- 1.
б) Допустим нажав Кн.3 вошёл в меню уставки мин. или мах. и если в таком состоянии бросить, то девайс просто не работает, пока не выйдешь из настройки, что не допустимо.

Ну по дробной части никаких проблем чтобы ее убрать, она используется только для индикации, а на работу не влияет, только в коде кое-что подправить. А по второму вопросу тоже поправим при помощи внутреннего таймера, секунд на 30 хватит?

Сообщение от :
а что означает в железе..., Вы собираете и смотрите или же виртуально?

Я в реальном железе смотрю, у меня вот эта штука есть для отладки http://www.mikroe.com/en/tools/easypic5/ [Ответ]
romchik77 16:47 10.05.2009

Сообщение от petrd:
у меня вот эта штука есть для отладки http://www.mikroe.com/en/tools/easypic5/

да, с этой штукой возможности не ограничены.

Сообщение от :
поправим при помощи внутреннего таймера, секунд на 30 хватит?

вполне, думаю будет почти идеал. А индикацию температуры наверно можно оставить как есть. [Ответ]
petrd 18:48 10.05.2009
Вот переделал. Теперь если после входа в режим уставки примерно в течении 30 сек. не будет нажатий кнопок "Выше" или "Ниже", то программа выйдет из режима уставки. Ну и для сравнения кодов убрал сотые, на их месте теперь будет пробел. Процедуру обработки нажатия кнопок вынес в отдельную подпрограмму и появилась подпрограмма обработки прерываний от TMR0 (таймер нужен для отсчета 30 сек.). Проверил - в железе вроде работает как надо, что не так - говорите.
Код:
#define Up          Button(&PORTA, 0,10,0)
#define Dn          Button(&PORTA, 1,10,0)
#define SetBut      Button(&PORTB, 7,10,0)
#define Relay_On()  PORTA=8
#define Relay_Off() PORTA=0
const unsigned short TEMP_RESOLUTION = 12;
unsigned short MaxTemp, old_MaxTemp, state, MinTemp, old_MinTemp;
char *text = "000.0", *maxT = "000", *minT="000";
unsigned temp, counter;
/*************  подпрограмма обработки прерываний **************************/
void interrupt(){
if(INTCON.T0IF){
counter++;
INTCON.T0IF=0;
}
}// interrupt
/*************подпрограмма обработки нажатия кнопок**************************/
void Control_Button(){
if(SetBut){         //нажимаем кнопку на RB7 (вход в режим уставки)
while(SetBut){}
counter=0;
INTCON.GIE=1;       // включили механизм прерываний
do{                           // изменение мин. температуры
Lcd_Out(2,5,"   ");
delay_ms(300);
Lcd_Out(2,5,minT);
delay_ms(300);
if (Up){                     // нажимаем кнопку на RA0 ("выше")
counter=0;
MinTemp++;
if (MinTemp>=MaxTemp)
MinTemp=MaxTemp;
}
if (Dn){                     // нажимаем кнопку на RA1 ("ниже")
counter=0;
MinTemp-- ;
if (MinTemp==255)
MinTemp=0;
}
minT[0]=MinTemp/100+48;
minT[1]=(MinTemp/10)%10+48;
minT[2]=MinTemp%10+48;
Lcd_Out(2,5,minT);
if (counter>450)
return;
}
while(!SetBut);
while(SetBut){}
do{                         // изменение макс. температуры
Lcd_Out(2,13,"   ");
delay_ms(300);
Lcd_Out(2,13,maxT);
delay_ms(300);
if (Up){                   // нажимаем кнопку на RA0 ("выше")
counter=0;
MaxTemp++;
if (MaxTemp>125)
MaxTemp=125;
}
if (Dn){                   // нажимаем кнопку на RA1 ("ниже")
counter=0;
MaxTemp-- ;
if (MaxTemp<MinTemp)
MaxTemp=MinTemp;
}
maxT[0]=MaxTemp/100+48;
maxT[1]=(MaxTemp/10)%10+48;
maxT[2]=MaxTemp%10+48;
Lcd_Out(2,13,maxT);
if (counter>450)
return;
}
while(!SetBut);
while(SetBut){}     // выход из режима уставки
INTCON.GIE=0;       // выключили механизм прерываний
}
}
/* подпрограмма форматирования, вывода на ЖКИ температуры и уставок, включение-выключение*/
void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
if (temp2write & 0x8000) {    // преобразование отрицательной температуры
text[0] = '-';
temp2write = ~temp2write + 1;
}
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;         // извлечение тысячных
//text[5] = (temp_fraction/100)%10 + 48;         // извлечение сотых
//text[6] = (temp_fraction/10)%10  + 48;       // извлечение десятых
//text[7] =  temp_fraction%10      + 48;       // извлечение единиц
Lcd_Out(1,7,text);                             // вывод температуры на ЖКИ
// код стейт-машинки
switch(state){
case 0: {
if(temp_whole<MaxTemp){
Relay_On();
Lcd_Chr(1,16,'1');
}
else {
Relay_Off();
Lcd_Chr(1,16,'0');
state=1;
}
}; break;
case 1: {
if(temp_whole<MinTemp){
Relay_On();
Lcd_Chr(1,16,'1');
state=0;
}
else {
Relay_Off();
Lcd_Chr(1,16,'0');
}
}; break;
} // окончание стейт-машинки
}//~
void main() {
CMCON = 7;                               // Все выводы цифровые входы-выходы
TRISA=0b11110111;                        // все выводы PORTA на вход, RA3 - выход
OPTION_REG = 0x87;  // настройка TMR0, прерывания будут каждые 66,304 ms
INTCON.T0IE=1;      // разрешили прерывания по переполнению TMR0
state=0;
Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // назначение выводов ЖКИ - PIC
Lcd_Cmd(LCD_CURSOR_OFF);
Lcd_Out(1, 1, "Temp:");
Lcd_Chr(1,13,223);                       // вывод символа точки и "С" как единицы измерения
Lcd_Chr(1,14,'C');
Lcd_Out(2,1,"Min");
Lcd_Out(2,9,"Max");
MaxTemp=Eeprom_Read(0);                  // читаем уставку из EEPROM
MinTemp=Eeprom_Read(1);
if (MaxTemp>125){
MaxTemp=25;
MinTemp=23;
old_MaxTemp=MaxTemp;
old_MinTemp=MinTemp;
delay_ms(50);
Eeprom_Write(0,MaxTemp);
Eeprom_Write(1,MinTemp);
delay_ms(50);
}
minT[0]=MinTemp/100+48;
minT[1]=(MinTemp/10)%10+48;
minT[2]=MinTemp%10+48;
Lcd_Out(2,5,minT);
maxT[0]=MaxTemp/100+48;
maxT[1]=(MaxTemp/10)%10+48;
maxT[2]=MaxTemp%10+48;
Lcd_Out(2,13,maxT);
//--- главный цикл
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;
Control_Button();                    // подпрограмма обработки нажатия кнопок
if (old_MaxTemp!= MaxTemp) {          // если было изменение макс. температуры
Eeprom_Write(0,MaxTemp);             // то сохраняем в EEPROM новое значение уставки
delay_ms(50);
old_MaxTemp = MaxTemp;               // и сохраняем для текущей работы
}
if (old_MinTemp!=MinTemp) {           // если было изменение мин. температуры
Eeprom_Write(1,MinTemp);             // то сохраняем в EEPROM новое значение уставки
delay_ms(50);
old_MinTemp = MinTemp;               // и сохраняем для текущей работы
}
//--- форматирование, вывод на ЖКИ температуры и уставки, включение-выключение
Display_Temperature(temp);
Delay_ms(500);
}while (1);
}
[Ответ]
romchik77 13:31 15.05.2009
petrd, вот вчера прошил МК включил. Через пару минут он заглючил (как только температура упала до уст МИН, нагрузка включилась и на дисплее 000,0 *С. После вообще чистый экран).
Прошиваю еще раз (перед прошивкой включаю сравнение - все Ок!). Включаю работает, но при подаче питания индикация температуры на 1 сек показывает 85.0 *С. Показания температуры сначала как бы подвисали потом нормально и вот еще заметил ставишь устав МИН 25, температура падает до 25.6 и включается нагрузка (остальные значения МИН работают нормально). Нулей на индикаторе больше не появлялось.
Может я в чем-то ошибся. Хотя конфигурация, флаги вроде те же.
Вот Нех:
Изображения
[Ответ]
petrd 13:55 15.05.2009

Сообщение от romchik77:
petrd, вот вчера прошил МК включил. Через пару минут он заглючил (как только температура упала до уст МИН, нагрузка включилась и на дисплее 000,0 *С. После вообще чистый экран).
Прошиваю еще раз (перед прошивкой включаю сравнение - все Ок!). Включаю работает, но при подаче питания индикация температуры на 1 сек показывает 85.0 *С. Показания температуры сначала как бы подвисали потом нормально и вот еще заметил ставишь устав МИН 25, температура падает до 25.6 и включается нагрузка (остальные значения МИН работают нормально). Нулей на индикаторе больше не появлялось.
Может я в чем-то ошибся. Хотя конфигурация, флаги вроде те же.
Вот Нех:

Если при включении показывает 85 град. - это нормально. В datasheet, по-моему, об этом говорится, что при первом чтении из DS18B20 читается 85 град. А по глюкам - это похоже на плохое питание (я на схеме блокировочные конденсаторы не показывал, а они должны быть). Я еще устройство погоняю, посмотрю и тогда скажу. [Ответ]
petrd 17:29 15.05.2009

Сообщение от romchik77:
petrd, вот вчера прошил МК включил. Через пару минут он заглючил (как только температура упала до уст МИН, нагрузка включилась и на дисплее 000,0 *С. После вообще чистый экран).

А у Вас какая нагрузка и как она управляется? Подозреваю, что при включении нагрузки проскочила помеха по питанию, что и послужило сбоем МК.Скорее всего Ваши проблемы связаны с питанием и наводками. Вот это можно почитать для общего развития - http://caxapa.ru/lib/emc_immunity.html.

Сообщение от :
Показания температуры сначала как бы подвисали потом нормально и вот еще заметил ставишь устав МИН 25, температура падает до 25.6 и включается нагрузка (остальные значения МИН работают нормально). Нулей на индикаторе больше не появлялось. Может я в чем-то ошибся. Хотя конфигурация, флаги вроде те же.
Вот Нех

Часа два как работает, все как задумано было. Включается четко ниже 25 град. Но у меня нет внешней нагрузки, DS18B20 грею паяльником или руками, а смотрю по ЖКИ. А Hex-файл правильный. Попробую еще собаку WDT поставить, чтобы сбрасывала МК, если что. И еще есть мысль про CRC, но это позже. [Ответ]
romchik77 13:32 16.05.2009
У меня схема пока собрана на макетке и нагрузка - светодиод! (в будущем будет 1кв тен, управляться через симистор) Датчик нагреваю руками и паяльником, как и Вы.
Да тоже подозреваю ИП. Хотя с ранней программой работает Ок!.
В общем спасибо, ссылка кстати. Завтра на работе буду пробовать.
З.Ы. Может питание и в другой теме (с триггером). ИП брался один и тот же. [Ответ]
petrd 18:41 16.05.2009

Сообщение от romchik77:
У меня схема пока собрана на макетке и нагрузка - светодиод! (в будущем будет 1кв тен, управляться через симистор) Датчик нагреваю руками и паяльником, как и Вы.
Да тоже подозреваю ИП. Хотя с ранней программой работает Ок!

Так глюки продолжают повторяться или нет? Если да, то расскажите еще раз поподробней как и что и при каких условиях.
Небольшой offtop - сегодня был в РАДИОХИТе и офигел - там столько отладочных средств и EasyPIC5, EasyAVR, родная шайба ICD2, куча отладок и макеток от Olimex, практически под все распространенные сегодня контроллеры всяких производителей, аж слюна потекла, но цены заставили ее сглотнуть назад. [Ответ]
romchik77 19:27 16.05.2009
Интересно вот эта штука для отладки http://www.mikroe.com/en/tools/easypic5/ сколько стоит в "Радиохит", если помните.
А на счет глюк, завтра буду проверять на работе, там вся аппаратура, да и программатор только там [Ответ]
petrd 21:29 16.05.2009

Сообщение от romchik77:
Интересно вот эта штука для отладки http://www.mikroe.com/en/tools/easypic5/ сколько стоит в "Радиохит", если помните.

Что-то в районе 6800-6900 руб. [Ответ]
romchik77 09:45 18.05.2009
Значит так, виновато питание. Пробовал и то и другое, сравнил, посмотрел осциллографом. Но даже с идеальным питанием бывают моменты когда проскакивают 000,0 *С, независимо от уставок! Думаю, эт от моего монтажа (ведь должна быть земля, а у мня куча проводов. Вот не думал, что МК такие капризные).
Петр, а не знаете какая должна быть схема питания МК, я имею ввиду фильтр, как с наименьшими усилиями сотварить. А может уже готовый какой есть? [Ответ]
$erega2net 10:20 18.05.2009
romchik77 попробуй поставить около ног микрухи кондючек по питанию. и там же дросселек небольшой. [Ответ]
petrd 10:21 18.05.2009

Сообщение от romchik77:
Но даже с идеальным питанием бывают моменты когда проскакивают 000,0 *С, независимо от уставок! ...... Вот не думал, что МК такие капризные)...а не знаете какая должна быть схема питания МК, я имею ввиду фильтр, как с наименьшими усилиями сотварить.

Нет, скорее МК не капризные, а мы "не умеем их готовить".
1. По поводу нулей, видимо что-то такое на шине 1-Wire происходит, что сбивает нормальный процесс чтения. Для этого разработчики предусмотрели в DS18B20 модуль вычисления CRC. Поэтому его надо будет использовать.
2. Схемы питания я всегда использую стандартные: трансформатор - диодный мост, конденсатор 1000 мкФ+ керамический 0,1 мкф - стабилизатор 7805 - конденсатор 100 мкФ+ керамический 0,1 мкф. И на выводы питания МК еще один керамический 0,1 мкф. И еще мне нравится на стандартных адаптерах питания делать - разъем на макетку запаял, 7805, 100 мкф+0,1 на выход и все, входной конденсатор можно не ставить, в адаптере обычно уже есть и мост и конденсаторы.
P.S. Да еще. Если адаптер без разъема, то на входе 7805 ставлю 1N4007, чтобы не пожечь, если полярность попутаю. [Ответ]
romchik77 15:22 18.05.2009
Попробую все вышесказанное. А какой индуктивности, $erega2net. дросселек небольшой.
petrd, хм... как я понял эта шина 1-Wire может тянуться до 300м.!!! (бред какой-то), или действительно так. И нужно ли экранировать? [Ответ]
petrd 16:23 18.05.2009

Сообщение от romchik77:
... как я понял эта шина 1-Wire может тянуться до 300м.!!! (бред какой-то), или действительно так. И нужно ли экранировать?

Разработчики от Dallas заявляют 300 м при соблюдении стандарта на протокол (что еще надо почитать), ну а на вскидку - протокол низкоскоростной + CRC, так что теоретически возможно, но практически я бы не рисковал, ибо для этого есть другие протоколы. [Ответ]
Krivoy 15:16 19.05.2009
Немного не в тему, но не смог удержаиться. Супер. Сам с удовольствием прочитал. Таким бы людям книги писать. В такой же манере, помниться на физфаке Власов паскаль преподовал году этак в 93...94.
http://vrtp.ru/index.php?showtopic=10583&st=0 [Ответ]
petrd 15:52 19.05.2009

Сообщение от Krivoy:
Немного не в тему, но не смог удержаиться. Супер. Сам с удовольствием прочитал. Таким бы людям книги писать. В такой же манере, помниться на физфаке Власов паскаль преподовал году этак в 93...94.
http://vrtp.ru/index.php?showtopic=10583&st=0

urry - вообще признанный в сети профессионал, он к тому же один из модераторов на www.remexpert.com и у него есть несколько таких доступных примеров, например, про USB и про работу со звуком с MMC. [Ответ]
petrd 21:05 26.05.2009
Сегодня получил посылку с PICKit2. [Ответ]
romchik77 08:38 27.05.2009
petrd, поздравляю! А я свой жду (с нетерпением), сказали выслано 22.05.09. [Ответ]
petrd 09:17 27.05.2009

Сообщение от romchik77:
petrd, поздравляю! А я свой жду (с нетерпением), сказали выслано 22.05.09.

Если Вам сообщили идентификатор отправления, проверьте здесь http://www.russianpost.ru/portal/ru/...tal/trackingpo, что отправили не наложенным платежем, а то я поимел гемморой с получением на почте. [Ответ]
romchik77 09:26 28.05.2009
petrd, не, я узнав, что зарегистрировавшиеся 29.04.09 уже получили PICKit2, написал Закатовой Татьяне (Тритон). Пришел ответ - Татьяна в отпуске, по заказу выслано 22.05.09 ждите! никакого идентификатора не сообщили. Так что пака ждемс... [Ответ]
EXPRESS 23:24 28.05.2009
petrd, А возможно запрограммировать PIC18F2550 на EXTRAPIC? [Ответ]
petrd 07:20 29.05.2009

Сообщение от EXPRESS:
petrd, А возможно запрограммировать PIC18F2550 на EXTRAPIC?

Я думаю, что да, если использовать программу WinPIC800 в режиме работы с JDM программатором. [Ответ]
EXPRESS 14:54 29.05.2009
petrd, Присматриваюсь к графическому дисплею PG 12864 (ars-ann-h) (т.к. стоит немножко дороже 1602 или 1604) как к универсальному изделию с бОльшими возможностями для макетирования конструкций. Возник вопрос, имеются ли различия в управлении в зависимости от буквенных маркировок изделия, т.к. в найденных даташитах (нашел для LRS-HNN-B) по последним буквам отличается от располагаемого для приобретения модуля, названного вначале этого сообщения. И если встречали в сети или разрабатывали, то подскажете пожалуйста примеры работы и инициализации этого дисплея или подобных, буду Вам крайне благодарен.
Огромное спасибо за тему! [Ответ]
petrd 15:34 29.05.2009

Сообщение от EXPRESS:
petrd, Присматриваюсь к графическому дисплею PG 12864 (ars-ann-h) (т.к. стоит немножко дороже 1602 или 1604) как к универсальному изделию с бОльшими возможностями для макетирования конструкций. Возник вопрос, имеются ли различия в управлении в зависимости от буквенных маркировок изделия, т.к. в найденных даташитах (нашел для LRS-HNN-B) по последним буквам отличается от располагаемого для приобретения модуля, названного вначале этого сообщения. И если встречали в сети или разрабатывали, то подскажете пожалуйста примеры работы и инициализации этого дисплея или подобных, буду Вам крайне благодарен.
Огромное спасибо за тему!

Главное - это какой тип контроллера, установлен в ЖКИ, остальное это цвет, подсветка, тип шрифта и т.п.. MikroC имеет библиотеки для работы с контроллерами KS0107, KS0108 в обычном режиме и в режиме SPI, также имеется библиотека для графических ЖКИ на контроллере T6963. У меня имеется ЖКИ LGM12864 с контроллером KS0108. На запуск LGM12864 с примером из MikroC у меня ушло минут 10, как пример код:
Код:
void main() {
Glcd_Init(&PORTB, 0, 1, 2, 3, 5, 4, &PORTD); // инициализация ЖКИ
Glcd_Set_Font(FontSystem5x8, 5, 8, 32); // установка шрифта
Glcd_Fill(0x00); //очистка экрана
Glcd_Write_Text("Hello world!", 10, 2, 1); // вывод текста
}
и на экране написано - "Hello world!". И все. [Ответ]
EXPRESS 15:51 29.05.2009
А на ASMе подпрограмм на них не втречали? Хочется очень детально проработать каждый нюанс взаимодействия (или это можно почувствовать и без АSMa?), т.к. делаю для души, никуда не спешу, а основной интерес не зажечь дисплей, а "поковыряться" Значит есть смысл ещё качать даташиты на контроллеры, которые на плате дисплея и разбираться? Я понял, что данный дисплей состоит из двух банков (секций), которые нужно переключать и есть два варианта построения битности данных, с задействованием 4 бит, (линий данных) и всех 8. И ещё попутно вопросик: на него можно отдельно купить тач скрин по размеру или лучше применить что то готовое, как единое целое? [Ответ]
Страница 6 из 43
< 123456 78910111216 > Последняя »
Вверх