Большой Воронежский Форум

Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел.
Вернуться   Большой Воронежский Форум » Компьютеры и все, что с ними связано » »Радиолюбитель
Программирование микроконтролеров,ремонт аудио/видео/бытовой техники,полезные устройства для дома,телефония, обсуждение статей журнала Радио

Ответ
 
Опции темы
Старый 06.04.2009, 11:57   #61   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
ChipProg2 найти-то я нашёл, но вот подключить... он соединяется через LTP порт, коего у меня не ма...
Вопрос как можно соединить или что-то типа переходника какого нибудь...
  Ответить с цитированием
Старый 06.04.2009, 12:09   #62   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
ChipProg2 найти-то я нашёл, но вот подключить... он соединяется через LTP порт, коего у меня не ма...
Вопрос как можно соединить или что-то типа переходника какого нибудь...
Не, на LPT переходник так просто не найти. Есть такая микросхема от FTDI FT245 (конвертер USB-FIFO), но гемморойно это. И опять же оболочка от ChipProg с ней, наверное, не позволит работать. Так что нужен LPT. А может карточки расширения под LPT поискать?
  Ответить с цитированием
Старый 06.04.2009, 12:19   #63   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
карточки расширения под LPT
Ок! поищем.
  Ответить с цитированием
Старый 07.04.2009, 07:30   #64   
Gentoo
 
Сообщений: 115
Регистрация: 02.06.2007
Записей в дневнике: 1

cdm вне форума Не в сети
Есть такое чудо - мультикарта. Гость из 90-х. PCI-плата с набором портов. Покупал вариант с одним LPT в санях около строяка. Работает. Выглядит для софта как обычный LPT с необычным адресом.
  Ответить с цитированием
Старый 07.04.2009, 11:09   #65   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
есть задумка собрать терморегулятор в диаппазоне где-то 60 град до 110 и наверно на МК...
А для чего нужен терморегулятор? Поясняю, если допустим это водонагреватель, то пойдет двухпозиционное регулирование (нагреватель включен или нагреватель выключен), а если это инкубатор, с жестким требованием к поддержанию температуры, то уже напрашивается ПИД регулирование.
  Ответить с цитированием
Старый 07.04.2009, 12:21   #66   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
petrd, скорее всего это инкубатор, с жестким требованием к поддержанию температуры, но температуру должен задать сам пользователь.
А что такое ПИД ?
  Ответить с цитированием
Старый 07.04.2009, 12:44   #67   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
petrd, скорее всего это инкубатор, с жестким требованием к поддержанию температуры, но температуру должен задать сам пользователь.
Что температуру задает пользователь это понятно и проблем с этим нет.
Цитата:
А что такое ПИД ?
http://ru.wikipedia.org/wiki/ПИД-регулятор
  Ответить с цитированием
Старый 07.04.2009, 13:17   #68   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
ПИД регулирование.
взглянул, но наверно эт слишком, я думаю достаточно двухпозиционного регулирования.
  Ответить с цитированием
Старый 07.04.2009, 13:52   #69   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
взглянул, но наверно эт слишком, я думаю достаточно двухпозиционного регулирования.
Смотрите что получается. Нужно держать температуру 60 град. В начальный момент реально 25. Включается нагреватель и греет до 60, как только будет 60 нагреватель отключается, но моментально он не остывает, поэтому в зависимости от нагревателя, объема и т.д. реально температура поднимется больше 60 град. Остывает, температура падает до 60, включается нагреватель, но моментально он не разогреется, поэтому температура реально понизится ниже 60 град. и так и будет скакать около 60 град (так работает 2-х позиционный). И вот тут море вариантов, чтобы диапазон кол****ий температуры около 60 град был как можно меньше - программные хитрости - введение гистерезисов, отключение за 3 град до уставки и т.п. Но самый лучший вариант - это ПИД. Он будет уменьшать мощность нагревателя при подходе к уставке и увеличивать при отклонении от нее. При этом точность и скорость достижения нужного результата на порядки лучше двухпозиционного регулирования. И при этом это не очень-то и сложно.
  Ответить с цитированием
Старый 07.04.2009, 14:57   #70   
Форумец
 
Сообщений: 552
Регистрация: 17.06.2005
Возраст: 40

dr.ON вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
И при этом это не очень-то и сложно.
Я бы тоже с интересом последил за этим проектом( в особенности получение коэффициентов ПИД регулятора для ХХХ обьекта и ХХХ нагревателя)
т.е. как я понимаю необходимо будет провести эсперимент( а может пару) для получения параметров обьекта, а уже потом считать коэффициенты
  Ответить с цитированием
Старый 07.04.2009, 16:13   #71   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Но самый лучший вариант - это ПИД. Он будет уменьшать мощность нагревателя при подходе к уставке и увеличивать при отклонении от нее. При этом точность и скорость достижения нужного результата на порядки лучше двухпозиционного регулирования.
Можно конечно попробовать...
Цитата:
Сообщение от petrd Посмотреть сообщение
(так работает 2-х позиционный). И вот тут море вариантов, чтобы диапазон кол****ий температуры около 60 град был как можно меньше - программные хитрости - введение гистерезисов, отключение за 3 град до уставки и т.п
Хотя, для начала я думаю стоило бы двухпозиционный собрать. Или нет?...
  Ответить с цитированием
Старый 07.04.2009, 20:59   #72   
неламер
 
Аватар для $erega2net
 
Сообщений: 2,557
Регистрация: 29.11.2005

$erega2net вне форума Не в сети
petrd если конструкция имеет жесткую привязку к тену тому же, то стоит с ацп снимать температуру и по этому дрейфу давать задержку.
  Ответить с цитированием
Старый 08.04.2009, 07:47   #73   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
dr.ON
Пока с ПИД заморачиваться у меня нет времени (надо делать объект, собирать схему регулирования мощности нагревателя, опять же эксперименты с нагреванием-остыванием довольно длительный процесс), а программная реализация самого ПИД не сложная, тем более, что программные болванки под ПИД есть. А вот на примере ключевого DC/DC с ШИМ, наверное, попробую.
romchik77
Да, для простоты лучше сначала двухпозиционный, а там видно будет устраивает или нет.
$erega2net
АЦП нет, так как думаю использовать схему ранее приведенного термометра на DS18B20.
  Ответить с цитированием
Старый 08.04.2009, 08:43   #74   
неламер
 
Аватар для $erega2net
 
Сообщений: 2,557
Регистрация: 29.11.2005

$erega2net вне форума Не в сети
а смысл огород такой городить? не проще контроллер с ацп взять и на нем сразу термометр делать.
  Ответить с цитированием
Старый 08.04.2009, 09:13   #75   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от $erega2net Посмотреть сообщение
а смысл огород такой городить? не проще контроллер с ацп взять и на нем сразу термометр делать.
Какой огород? Схема термометра и программа есть, надо только немного изменить программу и один вывод на управление назначить и все.
  Ответить с цитированием
Старый 08.04.2009, 10:34   #76   
неламер
 
Аватар для $erega2net
 
Сообщений: 2,557
Регистрация: 29.11.2005

$erega2net вне форума Не в сети
ааа, там уже по цифре идет сигнал... я думал там термопара стоит и через отдельную микруху с нее читать температуру.
вообще у него минус есть. он тока до 85 градусов. я до 300 делаю счас. правда точность пониже.
  Ответить с цитированием
Старый 08.04.2009, 11:12   #77   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от $erega2net Посмотреть сообщение
он тока до 85 градусов.
это если точность 0,5 град. нужна. А от -55 до +125 точность +- 2 градуса.
  Ответить с цитированием
Старый 08.04.2009, 12:06   #78   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Да, для простоты лучше сначала двухпозиционный, а там видно будет устраивает или нет.
Ок!
petrd, завтра поеду в Воронеж на несколько дней. Заранее, какие детали и где посоветуете прикупить?
Как я понял - пост №48
  Ответить с цитированием
Старый 08.04.2009, 12:31   #79   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
Ок!
petrd, завтра поеду в Воронеж на несколько дней. Заранее, какие детали и где посоветуете прикупить?
Как я понял - пост №48
PIC16F628 и DS18B20 я брал в магазине "Радиодетали" (сейчас РАДИОН называется), возле м-на Электроника, но давно это было.
ЖКИ - может быть будут в РАДИОХИТ (чуть дальше в сторону ж/д вокзала) , в других местах не видел (знакосинтезирующий,4, 2 или 1 строка, 16-20 символов).
По собственному опыту: купите кварцы на 4, 8 и 20 МГц, панельку под PIC, 7805, кнопки тактовые, макетку.
Если будут вопросы (может чего нет, что на что заменить) то звоните тел. в личку сейчас закину.
А так может еще кто из форума подскажет, где глянуть.
  Ответить с цитированием
Старый 08.04.2009, 13:21   #80   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Термостат. Работает так. В верхней строке выводится текущая температура, в нижней уставка (целые градусы, шаг в один градус), в конце нижней строки выводится "0" (нагреватель выключен) или "1" (нагреватель включен). После прошивки и первом включении уставка - 25 градусов. Кнопка "Выше" увеличивает на 1 град, "Ниже" - уменьшает на 1 градус. После выключения уставка сохраняется в EEPROM. Уставка ограничена диапазоном 0-125 град, с шагом 1 градус. Если текущая температура меньше уставки на RA3 лог. "1" (на ЖКИ тоже "1") - включается исполнительное устройство, если текущая температура выше уставки на RA3 лог. "0" (на ЖКИ тоже "0") - исполнительное устройство выключается. Сравнение идет с целой частью текущей температуры.
Код:
const unsigned short TEMP_RESOLUTION = 12;
unsigned short SetTemp, old_SetTemp;
char *text = "000.0000";
char *set = "000";
unsigned temp;
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;         // 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, 7, text);
set[0]=SetTemp/100+48;
set[1]=(SetTemp/10)%10+48;
set[2]=SetTemp%10+48;
Lcd_Out(2,7,set);
if (SetTemp>temp_whole){   // если уставка выше
PORTA=8;                 // то включение
Lcd_Chr(2,14,'1');       // и отображение "1"
}
else{                      // если нет
PORTA=0;                 // выключение
Lcd_Chr(2,14,'0');       // и отображение "0"
}
}//~
void main() {
CMCON = 7;                               // Все выводы цифровые входы-выходы
TRISA=0b11110111;                        // все выводы PORTA на вход, RA3 - выход
Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // назначение выводов ЖКИ - PIC
Lcd_Cmd(LCD_CURSOR_OFF);
Lcd_Out(1, 1, "Temp:");
Lcd_Chr(1,15,223);          // вывод символа точки и "С" как единицы измерения
Lcd_Chr(1,16,'C');
Lcd_Out(2,1,"Set :");
Lcd_Chr(2,10,223);
Lcd_Chr(2,11,'C');
SetTemp=Eeprom_Read(0);     // читаем уставку из EEPROM
if (SetTemp>125){
SetTemp=25;
old_SetTemp=SetTemp;
delay_ms(50);
Eeprom_Write(0,SetTemp);
delay_ms(50);
}
//--- главный цикл
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;
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);
} while (1);
}
Термостат с алгоритмом как в TRM10 от ОВЕНа. Суть такова - ловится момент, когда температура падает на OFFSET градусов (в данном примере OFFSET=2 градуса) ниже уставки и только тогда включается. Реализация в виде state-машины (автомат конечных состояний).
Код:
const unsigned short TEMP_RESOLUTION = 12, OFFSET = 2;
unsigned short SetTemp, old_SetTemp, state;
char *text = "000.0000";
char *set = "000";
unsigned temp;
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;         // 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, 7, text);
set[0]=SetTemp/100+48;
set[1]=(SetTemp/10)%10+48;
set[2]=SetTemp%10+48;
Lcd_Out(2,7,set);
// далее код стейт-машины (автомат конечных состояний)
switch(state){
case 0: {
if(temp_whole<SetTemp){
PORTA=8;
Lcd_Chr(2,14,'1');
}
else {
PORTA=0;
Lcd_Chr(2,14,'0');
state=1;
}
}; break;
case 1: {
if(temp_whole<(SetTemp-OFFSET)){
PORTA=8;
Lcd_Chr(2,14,'1');
state=0;
}
else {
PORTA=0;
Lcd_Chr(2,14,'0');
}
}; break;
}
// окончание стейт-машины
}//~
void main() {
state=0;
CMCON = 7;                               // Все выводы цифровые входы-выходы
TRISA=0b11110111;                        // все выводы PORTA на вход, RA3 - выход
Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // назначение выводов ЖКИ - PIC
Lcd_Cmd(LCD_CURSOR_OFF);
Lcd_Out(1, 1, "Temp:");
Lcd_Chr(1,15,223);          // вывод символа точки и "С" как единицы измерения
Lcd_Chr(1,16,'C');
Lcd_Out(2,1,"Set :");
Lcd_Chr(2,10,223);
Lcd_Chr(2,11,'C');
SetTemp=Eeprom_Read(0);     // читаем уставку из EEPROM
if (SetTemp>125){
SetTemp=25;
old_SetTemp=SetTemp;
delay_ms(50);
Eeprom_Write(0,SetTemp);
delay_ms(50);
}
//--- главный цикл
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;
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);
} while (1);
}
Работа программы в железе проверена. Как поведет себя на реальном объекте надо будет смотреть.
Миниатюры
Нажмите на изображение для увеличения
Название: термостат.JPG
Просмотров: 431
Размер:	123.3 Кб
ID:	427813  

Последний раз редактировалось petrd; 28.04.2009 в 15:38. Причина: исправил код, ошибка при отображении сотен градусов
  Ответить с цитированием
Старый 09.04.2009, 12:36   #81   
mono all
 
Аватар для mono
 
Сообщений: 55
Регистрация: 12.07.2006

mono вне форума Не в сети
можете выложить пример работы pic12cxxx(например 12f683 12f675) для работы софтово с spi (MicroC), например с любым модулем памяти?
  Ответить с цитированием
Старый 09.04.2009, 12:49   #82   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от mono Посмотреть сообщение
можете выложить пример работы pic12cxxx(например 12f683 12f675) для работы софтово с spi (MicroC), например с любым модулем памяти?
Могу, но готового рабочего примера под PIC12 у меня нет, поэтому сначала надо сделать и проверить, реально могу сделать только на PIC12F629 (другого нет). А что сами не попробуете?
..........
Так Вас что больше интересует - софтовый SPI или карточка памяти. Если SPI, то проблем не вижу, если карточка типа MMC/SD, то PIC12 наверное не совсем то (да и две ноги свободных только останется), чтобы с ней работать (там же FAT все-таки). А если даже что и получится, то что с данными делать? В MikroC есть библиотека для работы с ними, но и та под PIC18. Так что меня "терзают смутные сомненья".

Последний раз редактировалось petrd; 09.04.2009 в 13:41.
  Ответить с цитированием
Старый 09.04.2009, 16:26   #83   
mono all
 
Аватар для mono
 
Сообщений: 55
Регистрация: 12.07.2006

mono вне форума Не в сети
я проверял в протеусе, подключил встроенную библиотеку soft_spi, попробывал считать ID флешки (at25f512a), так вот ничего не получилось, карточка конечно хорошо, и даже есть задумки как обойти фат, итого влезет вся прога даже 12f675 чип, d ,eleotv как разберусь хочу сделать муз. звонок или чего-нть даталогер. Проект могу выложить... (сойдёт под любой пик 12 серии, я думаю научусь даже на этом), прочитанные данные можно гнать по тому же spi в ЦАП c spi входом.
  Ответить с цитированием
Старый 09.04.2009, 17:15   #84   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от mono Посмотреть сообщение
я проверял в протеусе, подключил встроенную библиотеку soft_spi, попробывал считать ID флешки (at25f512a), так вот ничего не получилось, карточка конечно хорошо, и даже есть задумки как обойти фат, итого влезет вся прога даже 12f675 чип, d ,eleotv как разберусь хочу сделать муз. звонок или чего-нть даталогер. Проект могу выложить... (сойдёт под любой пик 12 серии, я думаю научусь даже на этом), прочитанные данные можно гнать по тому же spi в ЦАП c spi входом.
Проект выкладывайте, поковыряем. Только я протезом не пользуюсь (ну не люблю я его).
1. Думаю FAT обходить нет резона ибо тогда данные на карточку надо будет готовить отдельно и карточка станет уже не универсальной. Это как велик изобрететь. Кстати уже изобретено PIC16F628A+MMC только поискать, в том числе на www.microchip.su недавно об этом говорили. Опять же частоту PIC12F675 надо бы поднять до 20 МГц, а это внешний кварц, а ног-то всего 8, две из них питание, 4 на SPI, а выбирать между ЦАП и памятью уже чем. Ну не по задаче контроллер или задача не по контроллеру.
2. Звонок, ЦАП с SPI - опять велосипед, есть замечательный вариант вместо ЦАП использовать аппаратный ШИМ (Виктор Тимофеев (ник tester и testerplus) придумал RTOS OSA(http://wiki.pic24.ru/doku.php/osa/ref/intro), которая работает начиная с PIC10, так он на ней удивительные вещи творит, вот здесь пример http://wiki.pic24.ru/doku.php/osa/ref/appendix/quartet музыка без флешки на скромненьком PIC16F628A, я своему ребенку сделал - удивительная реализация.
Нет я не против Ваших задумок, чем могу помогу, просто железо должно быть адекватно задаче. А иначе и время можно убить и велосипед не изобрести.

Последний раз редактировалось petrd; 09.04.2009 в 18:50.
  Ответить с цитированием
Старый 09.04.2009, 20:59   #85   
mono all
 
Аватар для mono
 
Сообщений: 55
Регистрация: 12.07.2006

mono вне форума Не в сети
Вот, пожалуйста посмотрите, наверняка где-то глюк, делал подобное на авр всё было ок, в смысле "протеза".
Насчёт велосипеда согласен на 100%, уже некуда и незачем его изобретать!
Вложения
Тип файла: rar 14.rar (30.6 Кб, 126 просмотров)

Последний раз редактировалось mono; 10.04.2009 в 08:08.
  Ответить с цитированием
Старый 10.04.2009, 12:12   #86   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от mono Посмотреть сообщение
Вот, пожалуйста посмотрите, наверняка где-то глюк
Посмотрел, Вы были правы, глюки, причем все рукотворные. Вот смотрите:
Код:
/*
Надо настроить проект: в Project -> Edit Project должны стоять галки
_MCLRE_ON;
_WDT_OFF;
_INTRC_OSC_NOCLKOUT;  у Вас же стоял кварц HS
остальные не должны стоять.
*/
unsigned short take, buffer; // надо правильно определить тип данных,
// в данном случае не влияет, но все же
void main() {
ANSEL  = 0;
CMCON  = 7;
//TRISIO = 0x00000010;   // неверная запись, какой бит хотели установить? GPIO.4
//TRISIO = 0b000010;     // если GPIO.1, то надо так или 0x02
TRISIO=0;                     // нас интересует только GPIO.2 назначенный как CS,
// остальные компилятор сам назначит как надо под SPI и UART, поэтому я вот так написал
GPIO   = 0;
Soft_Spi_Config(&GPIO,4,1,5);    // надо переопределить SDI и SDO, у Вас SDO-SDO, SDI-SDI, надо SDI-SDO, SDO-SDI
Soft_Uart_Init(GPIO, 3, 0, 9600, 0);
do {
GPIO.F2=0;                    // выставили CS (при цикле обращения должен быть равен 0)
Delay_ms(50);
Soft_Spi_Write(0x15);         // команда чтения идентификатора
Delay_ms(5);
take=Soft_Spi_Read(buffer);
Delay_ms(50);
Soft_Uart_Write(take);
GPIO.F2=1;                    // убрали CS
Delay_ms(50);
}  while(1);
}
И все, по UART постоянно идет 1F, что и надо было. Так?
У меня такой памяти нет, поэтому смотрел в Протеусе.
  Ответить с цитированием
Старый 10.04.2009, 13:23   #87   
mono all
 
Аватар для mono
 
Сообщений: 55
Регистрация: 12.07.2006

mono вне форума Не в сети
Спасибо за разъяснения, попробую как правильно (как Вы написали), резалт должен быть 1F65h.
  Ответить с цитированием
Старый 10.04.2009, 13:31   #88   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от mono Посмотреть сообщение
Спасибо за разъяснения, попробую как правильно (как Вы написали), резалт должен быть 1F65h.
Извините, не дочитал datasheet, тогда вот так:
Код:
unsigned short take_1,take_2, buffer;
void main() {
ANSEL  = 0;
CMCON  = 7;
TRISIO=0;
GPIO   = 0;
Soft_Spi_Config(&GPIO,4,1,5);
Soft_Uart_Init(GPIO, 3, 0, 9600, 0);
do {
GPIO.F2=0;
Delay_ms(50);
Soft_Spi_Write(0x15);
Delay_ms(5);
take_1=Soft_Spi_Read(buffer);
take_2=Soft_Spi_Read(buffer);
Delay_ms(50);
Soft_Uart_Write(take_1);
Soft_Uart_Write(take_2);
GPIO.F2=1;
Delay_ms(50);
}  while(1);
}
  Ответить с цитированием
Старый 10.04.2009, 14:01   #89   
mono all
 
Аватар для mono
 
Сообщений: 55
Регистрация: 12.07.2006

mono вне форума Не в сети
Спасибо, всё работает как надо!
ещё один вопрос, нашёл самый простецкий программатор на LPT порт Epichttp://melabs.com/doclist.htm#EPIC
с ним возможно работать?
Вложения
Тип файла: pdf progschematic_969.pdf (13.9 Кб, 126 просмотров)
  Ответить с цитированием
Старый 10.04.2009, 14:15   #90   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от mono Посмотреть сообщение
нашёл самый простецкий программатор на LPT порт Epichttp://melabs.com/doclist.htm#EPIC
с ним возможно работать?
Я таким не пользовался, поэтому советовать именно этот не могу. Могу предложить не сложнее (вот этим я пользовался). Программатор называется AN589, его авторы сами из Microchip, а называется он так по одноименному аппноту этой фирмы. У меня он работал совместно с IC-Prog.
Миниатюры
Нажмите на изображение для увеличения
Название: AN589.JPG
Просмотров: 304
Размер:	15.8 Кб
ID:	429272  
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind