Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Своими руками

Своими руками Завершенные и текущие проекты, хард & софт

Ответ
 
Опции темы Опции просмотра
Старый 21.04.2014, 09:49   #1
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию PIC16F877A и MCP41010, работа по SPI

Налетай, торопись, разбирай живопись ...

МК PIC16F877A и MCP41010, работа по SPI. Фрагмент кода и модель в Proteus.

-----------------------------------
"Hand-made, Open-source - Forever!"
Миниатюры
PIC16F877A+MCP41010_live.PNG  
Вложения
Тип файла: zip mcp41010.zip (34.1 Кб, 27 просмотров)
RTSAM вне форума   Ответить с цитированием
Старый 22.04.2014, 18:02   #2
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

А подскажите, уважаемые, кто-либо пытался получить логарифмическую характеристику регулировки с использованием MCP41010, как в обычном потенциометре группы В. И что из этого вышло? Гугля пока молчит...
RTSAM вне форума   Ответить с цитированием
Старый 25.04.2014, 10:12   #3
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

По программной реализации логарифмической зависимости регулировки пока ничего не нашел. Есть только реализация почти похожей характеристики с помощью схемотехники:

- или http://www.platan.ru/docs/library/maxim1.pdf
- или как на рисунке.
Миниатюры
RL 95 4 21_логарифмич_зависимость_R.jpg  
RTSAM вне форума   Ответить с цитированием
Старый 25.04.2014, 16:33   #4
PICstone
Senior Member
 
Аватар для PICstone
 
Регистрация: 30.04.2008
Адрес: 51° 46' северной широты 55° 6' восточной долготы
Сообщений: 395
Вес репутации: 1356/50
PICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud of
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Цитата:
Сообщение от RTSAM Посмотреть сообщение
По программной реализации логарифмической зависимости регулировки пока ничего не нашел.
Зачем Вам закладывать логарифмическую зависимость в устройство, которое изначально предназначено для людей с некоторым нарушением слуха. Это скорее подойдет для лиц с оптимальным (идеальным) слуховым восприятием.
Мне, например, эти лог. зависимости только мешали. Слух то не идеальный, к сожалению. И аудиограмма это подтвердила. Все очень индивидуально.
PICstone вне форума   Ответить с цитированием
Старый 26.04.2014, 10:13   #5
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Согласен с Вами в том, что все индивидуально. Это скорее сила привычки, использовать в усилительной аппаратуре для регулировки громкости потенциометры группы В, а для регулировки тембра - группы А.
RTSAM вне форума   Ответить с цитированием
Старый 26.04.2014, 18:08   #6
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,329
Вес репутации: 1908/67
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Цитата:
Сообщение от RTSAM Посмотреть сообщение
Согласен с Вами в том, что все индивидуально. Это скорее сила привычки, использовать в усилительной аппаратуре для регулировки громкости потенциометры группы В, а для регулировки тембра - группы А.
Сила привычки тут абсолютно не причем. А при том то, что регулируется напряжение, а звуковое давление (громкость) пропорционально ему не линейно а логарифмически.
Если поставить линейный потенциометр в регулировку громкости (советский - группа А, несовецкие - группа В или Lin), то вначале (от крайнего левого положения) громкость будет меняться очень быстро, а ближе к правому - почти не меняться вообще.
Поэтому ставят потенциометры нелинейные (советские - группа В, несовецкие - група А или Log), да еще и часто используют т.н. "тонкомпенсацию", т.к. ухо человека имеет разную АЧХ при разном уровне громкости. Для чего часто такие потенциометры имеют один или два отвода (т.е. 4 или 5 контактов в сумме).

А если не обычные потенциометры а в цифре по SPI/I2C, то надо использовать не MCP41010 а LM1972, PGA2310, 2311 и т.п.
DimaS вне форума   Ответить с цитированием
Старый 02.05.2014, 17:31   #7
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Попытался организовать работу по SPI между PIC12F683 и MCP41010. Тоже работает на передачу. Единственная проблема сейчас - настроить выводы PIC12F683 (GPIO4 и GPIO5) на работу в режиме цифрового входа для управления. Кто уже сталкивался с похожей проблемой, подскажите, как их правильно конфигурировать? На данный момент на нажатие кнопок подключенных к GPIO4 и GPIO5 не реагирует.

Код:
#define UP   GPIO4    
#define DOWN GPIO5
...
    OSCCON = 0b01100001;      // OSCILLATOR CONTROL REGISTER
    CMCON0 = 0x07;            // COMPARATOR CONFIGURATION REGISTER
    GPIO = 0b11111000;        // GENERAL PURPOSE I/O REGISTER
    TRISIO = 0b11111000;      // TRISIO GPIO TRI-STATE REGISTER 3 first pin port GP are output, 3 next pin is input
    ANSEL = 0x00;             // ANALOG SELECT REGISTER   ???
    ADCON0 = 0x00;            //
    VRCON = 0x00;
RTSAM вне форума   Ответить с цитированием
Старый 02.05.2014, 17:54   #8
PICstone
Senior Member
 
Аватар для PICstone
 
Регистрация: 30.04.2008
Адрес: 51° 46' северной широты 55° 6' восточной долготы
Сообщений: 395
Вес репутации: 1356/50
PICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud of
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

1. TRISIO = 0b11111000; посмотрите ассемблерный код после этой инструкции

2. GPIO = 0b11111000; ???
PICstone вне форума   Ответить с цитированием
Старый 02.05.2014, 18:29   #9
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Насчет GPIO - это пожалуй недоперебор за солидарность с трудящимися на 1 мая.

А насчет TRISIO могу предложить дамп памяти из MPLAB. Это поможет найти ответ?
Вложения
Тип файла: zip asm_from_proram_memory.zip (12.2 Кб, 7 просмотров)
RTSAM вне форума   Ответить с цитированием
Старый 02.05.2014, 18:49   #10
PICstone
Senior Member
 
Аватар для PICstone
 
Регистрация: 30.04.2008
Адрес: 51° 46' северной широты 55° 6' восточной долготы
Сообщений: 395
Вес репутации: 1356/50
PICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud of
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Где смотреть в дампе?

Вот "кусочек" ассемблера для PIC12F675 вырезанного из MPLAB Disassembley Listing.
Миниатюры
Снимок.PNG  
PICstone вне форума   Ответить с цитированием
Старый 02.05.2014, 19:25   #11
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

У меня этот фрагмент выглядит чуть по другому.

Это чудеса компиляции? И как с этим бороться, фрагментом кода на asm?
Миниатюры
Disassembly_listing.PNG  
RTSAM вне форума   Ответить с цитированием
Старый 02.05.2014, 19:39   #12
PICstone
Senior Member
 
Аватар для PICstone
 
Регистрация: 30.04.2008
Адрес: 51° 46' северной широты 55° 6' восточной долготы
Сообщений: 395
Вес репутации: 1356/50
PICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud of
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Дизассемблерный код абсолютно идентичен. Указанное число записывается в регистр GPIO который имеет адрес 5. Дальше смотрите.
PICstone вне форума   Ответить с цитированием
Старый 03.05.2014, 12:34   #13
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Разобрался с вопросом. В конфиге заменил строчку генератора
Код:
XT &                     // Crystal/resonator
на
Код:
INTIO &                  // Internal Oscillator (pic12f6x.h!)
и тогда выводы GP4 и GP5 стали цифровыми I/O. Фрагмент кода и модель в Proteus в довесок к теме.
Вложения
Тип файла: zip mcp41010+PIC12.zip (37.4 Кб, 7 просмотров)
RTSAM вне форума   Ответить с цитированием
Старый 01.08.2015, 22:29   #14
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Настало время вернуться к этой теме опять. Решил доделать проект на PIC12F675 с сохранением настройки регулятора в eeprom микроконтроллера. Получается как-бы частичный аналог чипа DS1669 работающий при питании 3.3...5 В.

Но что-то пошло не по написанному. В протеусе работает, а на макете в память почему-то не пишет. Может кто со стороны увидит и подскажет, где "ржавые гвозди"?
Вложения
Тип файла: zip mcp41010+PIC12f675.zip (107.9 Кб, 11 просмотров)
RTSAM вне форума   Ответить с цитированием
Старый 02.08.2015, 13:50   #15
ATAMAN
Senior Member
 
Регистрация: 09.01.2012
Возраст: 34
Сообщений: 429
Вес репутации: 373/28
ATAMAN is just really niceATAMAN is just really niceATAMAN is just really niceATAMAN is just really nice
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Управление цифровым потенциометром AD5290

Нажмите на изображение для увеличения
Название: AD5290.jpg
Просмотров: 21
Размер:	182.6 Кб
ID:	9226

Код:
unsigned short j = 0;
char txt[10];

void main() {
TRISB=0xFF;
TRISC.F6=0;
PORTC.F6=1;
TRISD=0;
OPTION_REG=0X7F;
Lcd_Init(&PORTD);
Lcd_Cmd(Lcd_CLEAR);
Lcd_Cmd(LCD_CURSOR_OFF);
Spi_Init();
while(1)
{
if(Button(&PORTB, 0, 50, 0))
{
IntToStr(j--, txt);
Lcd_Out(1,1,txt);
Delay_ms(10);
}
if(Button(&PORTB, 1, 50, 0))
{
IntToStr(j++, txt);
Lcd_Out(1,1,txt);
Delay_ms(10);
}
PORTC.F6=0;
Delay_ms(1);
Spi_Write(j);
PORTC.F6=1;
}
}
ATAMAN вне форума   Ответить с цитированием
Старый 02.08.2015, 15:20   #16
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,329
Вес репутации: 1908/67
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Транзистор не жалко?
DimaS вне форума   Ответить с цитированием
Старый 02.08.2015, 21:39   #17
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Любопытно. А как насчет сохранения положения регулятора во встроенной eeprom? У меня в протеусе работает сохранение, а на макете не хочет.
RTSAM вне форума   Ответить с цитированием
Старый 02.08.2015, 23:05   #18
ATAMAN
Senior Member
 
Регистрация: 09.01.2012
Возраст: 34
Сообщений: 429
Вес репутации: 373/28
ATAMAN is just really niceATAMAN is just really niceATAMAN is just really niceATAMAN is just really nice
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Не сохраняется?
Может не читается?
ATAMAN вне форума   Ответить с цитированием
Старый 02.08.2015, 23:13   #19
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Цитата:
Не сохраняется?
Может не читается?
Ни первое, ни второе однозначно утверждать не могу. Если в коде есть неучтенные технические моменты, то они наверное будут заметны опытному программисту или тому, кто уже использовал встроенную eeprom.
RTSAM вне форума   Ответить с цитированием
Старый 02.08.2015, 23:15   #20
ATAMAN
Senior Member
 
Регистрация: 09.01.2012
Возраст: 34
Сообщений: 429
Вес репутации: 373/28
ATAMAN is just really niceATAMAN is just really niceATAMAN is just really niceATAMAN is just really nice
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Вот в этом отрезки кода

Код:
    if ( oldlevel == 0 | oldlevel == 255 )     // if 0 or 255 then ...
        {
        oldlevel = level;
        eeprom_write(0, oldlevel);
        Send_Spi(oldlevel);
        }
    else
        Send_Spi(oldlevel);           // Restore last set level (old level)
эта палочка побитовое (включительное) OR; сравнивает пары соответствующих битов и возвращает 1, если хотя бы один из них равен 1, в противном случае возвращает 0

может надо две
Код:
    if ( oldlevel == 0 || oldlevel == 255 )     // if 0 or 255 then ...
        {
        oldlevel = level;
        eeprom_write(0, oldlevel);
        Send_Spi(oldlevel);
        }
    else
        Send_Spi(oldlevel);           // Restore last set level (old level)
тогда будет выполнить условие если oldlevel = 0 или oldlevel = 255.
ATAMAN вне форума   Ответить с цитированием
Старый 02.08.2015, 23:22   #21
ATAMAN
Senior Member
 
Регистрация: 09.01.2012
Возраст: 34
Сообщений: 429
Вес репутации: 373/28
ATAMAN is just really niceATAMAN is just really niceATAMAN is just really niceATAMAN is just really nice
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Может проще сразу считать из eeprom в Spi
Код:
void main(void)
{
Send_Spi(eeprom_read(0));
while(1)
{

}
}
}
ATAMAN вне форума   Ответить с цитированием
Старый 02.08.2015, 23:26   #22
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Спасибо за подсказку по поводу логического ИЛИ, возможно это и есть "ржавый гвоздь". В протеусе сейчас попробовал, работает как и раньше, все ОК. Завтра, если будет время, посмотрю в железе...

Последний раз редактировалось RTSAM; 02.08.2015 в 23:43.
RTSAM вне форума   Ответить с цитированием
Старый 03.08.2015, 23:58   #23
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Нет, тут что-то еще. Обнаружил еще один свой ляп. Когда выключишь питание, и в пределах нескольких секунд снова включишь, то настройка громкости еще сохраняется. Но стоит нажать на кнопку изменения громкости (любую), как громкость скачком изменяется на 25%. Сейчас пытаюсь разобраться почему.
RTSAM вне форума   Ответить с цитированием
Старый 16.08.2015, 22:47   #24
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/14
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Ошибку нашел и исправил. Исправления в коде приведены ниже.

Код:
    oldlevel = eeprom_read(0);          // Read eeprom data at 0 address location
    if ( oldlevel == 0 || oldlevel == 255 )     // if 0 or 255 then ...
        {
        oldlevel = level;
        eeprom_write(0, oldlevel);
        Send_Spi(oldlevel);
        }
    else
        {
        level = oldlevel;
        Send_Spi(oldlevel);           // Restore last set level (old level)        
        }
До этого было

Код:
    oldlevel = eeprom_read(0);          // Read eeprom data at 0 address location
    if ( oldlevel == 0 | oldlevel == 255 )     // if 0 or 255 then ...
        {
        oldlevel = level;
        eeprom_write(0, oldlevel);
        Send_Spi(oldlevel);
        }
    else
        Send_Spi(oldlevel);           // Restore last set level (old level)
И как результат, в работу постоянно подставлялось значение соответствующее громкости равное 25%.
RTSAM вне форума   Ответить с цитированием
Старый 17.08.2015, 05:31   #25
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,266
Вес репутации: 4411/101
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: PIC16F877A и MCP41010, работа по SPI

Цитата:
Сообщение от RTSAM Посмотреть сообщение
Ошибку нашел и исправил. Исправления в коде приведены ниже.

Код:
    oldlevel = eeprom_read(0);          // Read eeprom data at 0 address location
    if ( oldlevel == 0 || oldlevel == 255 )     // if 0 or 255 then ...
        {
        oldlevel = level;
        eeprom_write(0, oldlevel);
        Send_Spi(oldlevel);
        }
    else
        {
        level = oldlevel;
        Send_Spi(oldlevel);           // Restore last set level (old level)        
        }
До этого было

Код:
    oldlevel = eeprom_read(0);          // Read eeprom data at 0 address location
    if ( oldlevel == 0 | oldlevel == 255 )     // if 0 or 255 then ...
        {
        oldlevel = level;
        eeprom_write(0, oldlevel);
        Send_Spi(oldlevel);
        }
    else
        Send_Spi(oldlevel);           // Restore last set level (old level)
И как результат, в работу постоянно подставлялось значение соответствующее громкости равное 25%.
а зачем после каждого изменения сразу записывать? Ендурасу не жалко?
ampersant на форуме   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем/как отлаживать код написаный на Си в WinAVR Yokel Микроконтроллеры других производителей 49 30.09.2014 09:48
Присоветуйте тип и способ управления MOSFETом "верхнего" плеча dr_Sash Источники питания и силовая электроника 37 08.09.2012 18:50
gprs тарификация (конкретнее- по sim300) MaxB Общетехнические вопросы 4 21.08.2008 20:16
Управление MAX-ом 7221 по SPI Tanat Продукция MICROCHIP 9 20.05.2008 10:08


Часовой пояс GMT +3, время: 05:36.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot