Перейти к содержанию

Помогите студенту-чайнику по МК


Рекомендуемые сообщения

Сумматоры, наверно? Знаешь что такое справочник? Сначала высчитай какую надо иметь тактовую частоту для вывода синусоиды максимальной частотой, потом просчитать разрядность сумматора для достижения необходимого перекрытия по частоте.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Всем добрый день.... тут с курсачом завис.... нужно сравнить Analog Devices Blackfin и NEC V850 семейств, по возможностям и быстродействию...

так понял что по быстродействию они одинаковы, но нек надежнее, а блекфин переферией натыкан побольше...

Изменено пользователем Monomah174
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

WH-1602A например, описанием интернет полон.

или с цифрами 0802 если много выводить не надо (8 символов 2 строки) Но как по мне, если такой индикатор брать так он дороже получается из-за низкого спроса.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Разработать контроллер, реализующий следующие функции: преобразование напряжения в диапазоне 0…5 В, количество каналов – 8, количество измерений на один канал – 16, погрешность преобразования – 0,2%, режим опроса каналов – циклический, частота – 50 кГц (т.е. период 20 мкс – для одного канала). Ввод данных – программный, по сигналу готовности.

в прикрепленных файлах мои попытки реализовать(схема в протеусе+код на С+скомпилированный hex)..

если не сложно, укажите пожалуйста на ошибку...

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.8 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Chip type           : ATtiny861
Clock frequency     : 10,000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 32
*****************************************************/

#include <tiny861.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x00

void main(void)
{
char j;                        //номер канала с максимальным средним значением 
char i;                        //cчетчик числа итераций цикла 
unsigned int USR;              //среднее арифметическое
unsigned int channel0[16];     //массив 16 измерений канала 0
unsigned int channel1[16];     //массив 16 измерений канала 1
unsigned int channel2[16];     //массив 16 измерений канала 2
unsigned int channel3[16];     //массив 16 измерений канала 3
unsigned int channel4[16];     //массив 16 измерений канала 4
unsigned int channel5[16];     //массив 16 измерений канала 5
unsigned int channel6[16];     //массив 16 измерений канала 6
unsigned int channel7[16];     //массив 16 измерений канала 7
unsigned int srednee[8];       //массив средних арифметических значений

// Коэффициент деления тактовой частоты: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Инициализация портов
// Инициализация порта A
PORTA=0x00;
DDRA=0x00;
// Инициализация порта В
PORTB=0x00;
DDRB=0x02;

// Инициализация интерфейса USI
// режим работыe: SPI
// тактовая частота: задается с входа USICLK
// прерывание: нет
USICR=0x12;

// Выключение аналогового компаратора
ACSRA=0x80;
ACSRB=0x00;

// Инициализация АЦП
// Тактовая частота АЦП: 625,000 кГц
// Опорное напряжение: напряжение питания
// Входное напряжение: однополярное
DIDR0=0x00;
DIDR1=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8C;
ADCSRB&=0x7F;
ADCSRB|=0x00 | ((ADC_VREF_TYPE & 0x100) >> 4);

while (1)
     {
     // Измерение напряжения при помощи встроенного АЦП
     for (i=0; i<=15; i++)     
     {
         ADMUX=0;                        //выбираем канал 0 АЦП
         ADCSRA|=0x40;                   //запускаем преобразование
         while (j=0) 
             {
                 j=ADCSRA,4;             //определяем состояние флага завершения преобразования АЦП   
             }                           //ждем завершения преобразования
         channel0[i]=ADCW;               //содержимое АЦП присваиваем массиву данных
         ADMUX=1;                        //выбираем канал 1 АЦП
         ADCSRA|=0x40;                   //запускаем преобразование
         while (j=0) 
             {
                 j=ADCSRA,4;             //определяем состояние флага завершения преобразования АЦП   
             }                           //ждем завершения преобразования
         channel1[i]=ADCW;               //содержимое АЦП присваиваем массиву данных
         ADMUX=2;                        //выбираем канал 2 АЦП
         ADCSRA|=0x40;                   //запускаем преобразование
         while (j=0) 
             {
                 j=ADCSRA,4;             //определяем состояние флага завершения преобразования АЦП   
             }                           //ждем завершения преобразования
         channel2[i]=ADCW;               //содержимое АЦП присваиваем массиву данных
         ADMUX=3;                        //выбираем канал 3 АЦП
         ADCSRA|=0x40;                   //запускаем преобразование
         while (j=0) 
             {
                 j=ADCSRA,4;             //определяем состояние флага завершения преобразования АЦП   
             }                           //ждем завершения преобразования
         channel3[i]=ADCW;               //содержимое АЦП присваиваем массиву данных
         ADMUX=4;                        //выбираем канал 5 АЦП
         ADCSRA|=0x40;                   //запускаем преобразование
         while (j=0) 
             {
                 j=ADCSRA,4;             //определяем состояние флага завершения преобразования АЦП   
             }                           //ждем завершения преобразования
         channel4[i]=ADCW;               //содержимое АЦП присваиваем массиву данных
         ADMUX=5;                        //выбираем канал 5 АЦП
         ADCSRA|=0x40;                   //запускаем преобразование
         while (j=0) 
             {
                 j=ADCSRA,4;             //определяем состояние флага завершения преобразования АЦП   
             }                           //ждем завершения преобразования
         channel5[i]=ADCW;               //содержимое АЦП присваиваем массиву данных
         ADMUX=6;                        //выбираем канал 6 АЦП
         ADCSRA|=0x40;                   //запускаем преобразование
         while (j=0) 
             {
                 j=ADCSRA,4;             //определяем состояние флага завершения преобразования АЦП   
             }                           //ждем завершения преобразования
         channel6[i]=ADCW;               //содержимое АЦП присваиваем массиву данных
         ADMUX=7;                        //выбираем канал 7 АЦП
         ADCSRA|=0x40;                   //запускаем преобразование
         while (j=0) 
             {
                 j=ADCSRA,4;             //определяем состояние флага завершения преобразования АЦП   
             }                           //ждем завершения преобразования
         channel7[i]=ADCW;               //содержимое АЦП присваиваем массиву данных
     }
     // Расчет среднего арифметического значения напряжения по каналу 0
     USR=0;
     for (i=0; i<=15; i++)     
     {
         USR=USR+channel0[i];            //суммируем значения массива данных
     }
     USR=USR/16;                         //находим среднее значение
     srednee[0]=USR;                     //присваиваем результат массиву средних значений
     // Расчет среднего арифметического значения напряжения по каналу 1
     USR=0;
     for (i=0; i<=15; i++)     
     {
         USR=USR+channel1[i];            //суммируем значения массива данных
     }
     USR=USR/16;                         //находим среднее значение
     srednee[1]=USR;                     //присваиваем результат массиву средних значений
     // Расчет среднего арифметического значения напряжения по каналу 2
     USR=0;
     for (i=0; i<=15; i++)     
     {
         USR=USR+channel2[i];            //суммируем значения массива данных
     }
     USR=USR/16;                         //находим среднее значение
     srednee[2]=USR;                     //присваиваем результат массиву средних значений
     // Расчет среднего арифметического значения напряжения по каналу 3
     USR=0;
     for (i=0; i<=15; i++)     
     {
         USR=USR+channel3[i];            //суммируем значения массива данных
     }
     USR=USR/16;                         //находим среднее значение
     srednee[3]=USR;                     //присваиваем результат массиву средних значений
     // Расчет среднего арифметического значения напряжения по каналу 4
     USR=0;
     for (i=0; i<=15; i++)     
     {
         USR=USR+channel4[i];            //суммируем значения массива данных
     }
     USR=USR/16;                         //находим среднее значение
     srednee[4]=USR;                     //присваиваем результат массиву средних значений
     // Расчет среднего арифметического значения напряжения по каналу 5
     USR=0;
     for (i=0; i<=15; i++)     
     {
         USR=USR+channel5[i];            //суммируем значения массива данных
     }
     USR=USR/16;                         //находим среднее значение
     srednee[5]=USR;                     //присваиваем результат массиву средних значений
     // Расчет среднего арифметического значения напряжения по каналу 6
     USR=0;
     for (i=0; i<=15; i++)     
     {
         USR=USR+channel6[i];            //суммируем значения массива данных
     }
     USR=USR/16;                         //находим среднее значение
     srednee[6]=USR;                     //присваиваем результат массиву средних значений
     // Расчет среднего арифметического значения напряжения по каналу 7
     USR=0;
     for (i=0; i<=15; i++)     
     {
         USR=USR+channel7[i];            //суммируем значения массива данных
     }
     USR=USR/16;                         //находим среднее значение
     srednee[7]=USR;                     //присваиваем результат массиву средних значений
     // Расчет максимального значения среди средних арифметических
     USR=0;
     j=0;
     for (i=0; i<=7; i++)     
     {
         if (USR>srednee[i]) 
             { 
                   USR=srednee[i];       //суммируем значения массива данных
                   j=i;                  //меняем номер канала
             };

     };
     };
}

заранее спасибо за помощь

adc.zip

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

ошибка в исходнике.

Что именно не работает? а памяти точно хватит? а зачем хранить значения по каждому каналу? Встроенный АЦП успеет с такой скоростью работать? обычно там не более 10К выборок/сек дальше начинает страдать точность.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

  • 5 недель спустя...

а такая точно есть? Гугль выдает только по ПЦ1, что слегка намекает.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Аааа, это преобразователь из двоично-десятичного кода в двоичный, я в справочнике нашел только в серии 155ПР6, видимо в 555 серии она появилась уже после выпуска справочника. 5 бит входа и 5 бит выхода, плюс вывод разрешения работы(RE - 15выв.), на котором должен быть лог."0".

На вход подается код с весом 1-2-4-5-10, на выходе 1-2-4-8-16.

ПР7 выполняет обратное преобразование.

По сути это ПЗУ на 256 бит с заранее занесенными значениями при изготовлении микросхемы.

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Нет, именно 1-2-4-5-10 там таблица истинности приводится, 4-й бит(по счету) имеет вес именно "5".

post-43523-0-96258600-1326316166_thumb.jpg

post-43523-0-24793700-1326316172_thumb.jpg

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

А существуют ли двоично-десятичные счётчики, работающие на частоте, не меньшей 64 МГц? ТТЛ...

Исправил.

Изменено пользователем Zorro182
Ссылка на комментарий
Поделиться на другие сайты

64 мГц
любые, КМОПы, например, 561 серия, работают до 1МГц

Если же имелось в виду 64 МГц, то смотрите в сторону 74HC - КР(КФ)1564

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Добрый вечер. Решил осваивать МК. Хочу купить программатор. Всат вопрос: atavrisp или jtag. Во втором случае есть возможность отладки. Правда непосредственно программированием заниматься начну не скоро. Но неплохой задел на будущее. Правда нашел такую информацию, что жтаг поддерживают не все контроллеры. Или это относится только к отладке, а прошивать жтаг модет любые контроллеры?

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

Ссылка на комментарий
Поделиться на другие сайты

Если имеется в виду AVR то интерфейс JTAG поддерживают очень немногие, в основном "навороченные" серии вроде ATmega128. В частности, один из наиболее распространенных контроллеров, ATmega8, им не прошить. С другой стороны JTAG поддерживают ARM'ы, зато они не поддерживают SPI. Так что если "решил осваивать" лучше ISP а еще лучше - параллельный (на случай запоротых фузов), но тут достаточно не лезть куда не знаешь.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Глупый вопрос.

Контроллер PIC16F873A

Переполюсовка (не спрашивайте как получилось)

Задымился естественно. Думал выкидать. Подключил к програматору. Оказалось - жив. Слетела прошивка. Я его стер и заново записал, провел верификацию. Зписался. Как думаете, он рабочий? В работе не могу проверить, устройство (LCFR метр :) ) еще не до конца собрано. Можно ли с помощью програматора (самодельный PICKIT2) проверить на работоспособность порты контроллера?

Изменено пользователем Jeniok
Ссылка на комментарий
Поделиться на другие сайты

Прошей программу которая по очереди "мигает" каждым выводом порта и по-очереди переводит их на ввод/вывод. Тогда обычным тестером узнаешь насколько функционален контроллер. Насколько можно судить, контроллер может быть функционален но его характеристики ухудшились - где-то появится утечка и потреблять будет больше в простое, может так выйти что он при низком напряжении не заведется и т.д.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Подскажите чайнику.Вот программа (не я её писал )которая как я понимаю должна работать так : при нажатии на кнопку светодиод должен мигать,а у меня почему то он сразу моргает а при нажатии кнопки тухнет.Как изменить программу чтобы светодиод моргал при нажатии кнопки?

#include <pic.h>

__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);

#define knopka RA1 // кнопка
#define diod RB3 // светодиод


void podgot (void); // подготовка МК
void migalka (void);
void pauza (void);

void main (void){
podgot();
if (knopka = 0) {migalka ();}//можно и так для красоты
//else в данном случае если противное условие не используется то и писАть не нужно
}
void podgot (void)
{
TRISA = 0b00000010; // направление работы ножек порта А
TRISB = 0b00000000; // направление работы ножек порта В
CMCON = 0x07; // отключение компараторов
PORTA = 00000000; // очищаем порт А
PORTB = 00000000; // очищаем порт Б
RBPU = 0; // подтягивающие R (0-вкл, 1-выкл)
}
void migalka (void){
diod=1;
pauza ();
diod=1-diod;
pauza ();
}
void pauza (void){
unsigned int tmp; // локальная переменная
tmp = 65000; // в tmp поместить некое максимальное число
while (tmp-->0); /* выполнять декрементирование tmp
до тех пор, т.е. ПОКА tmp больше нуля */
}

Изменено пользователем Alex
Ссылка на комментарий
Поделиться на другие сайты

Эта программа мигает, когда на входе RA1 действует "0", и не мигает, когда на этом входе "1". А кнопка может быть какой-угодно в смысле выдаваемого сигнала при нажатии или отпускании.

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...