Могу сказать что отлично дружит.sphincs писал(а):подозреваю, что протеус может просто плохо дружить с прерываниями от таймеров
Мелкие вопросы по МК и ПЛИС.
Re: Мелкие вопросы по МК и ПЛИС.
- Реклама
Re: Мелкие вопросы по МК и ПЛИС.
Хочу оптимизировать данную функцию на скорость.
y - это данные с ADC
x - это то к чему мы равняемся но умноженное на m (К примеру мерю напряжение на аккумуляторе через делитель 1:11, Ref = 4.94V, делитель m =10, тогда x = 4.94*11*10=543.4 ставим 543)
z - это куда закинуть обработанные данные.
y - это данные с ADC
x - это то к чему мы равняемся но умноженное на m (К примеру мерю напряжение на аккумуляторе через делитель 1:11, Ref = 4.94V, делитель m =10, тогда x = 4.94*11*10=543.4 ставим 543)
z - это куда закинуть обработанные данные.
Код: Выделить всё
void DigitalV(unsigned char y, unsigned int x, unsigned char z, unsigned char m){ //y number to digitalize x-reference
unsigned char point=3;
unsigned long number;
unsigned int last=0;
unsigned char sut=0, zeci=0;
if (y==0){last=0;}else{
number=y;
number=((number*x*100)/255)/m;
/*Final_nr<100*/ if ((number<10000)&(number>999)) {last=number/10;point = 1;}
/*Final_nr <10*/ else if (number<1000) {last=number;point = 0;}
else {last=number/100;}
}
while(last>99)
{
sut++;last=last-100;
}
while(last>9)
{
zeci++;last=last-10;
}
MENU_Data[z][0]=dig[sut];
MENU_Data[z][1]=dig[zeci];
MENU_Data[z][2]=dig[last];
if (point<3) {MENU_Data[z][point]=(MENU_Data[z][point]) | (0b00000001);}
}- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Посмотрел код 32-й меги.sphincs писал(а):да нет, просто осваиваю AVR на примере игрушки для себя. подозреваю, что протеус может просто плохо дружить с прерываниями от таймеров, не имел с ними дел еще.
общие замечания:
1) Если Вы не используете для вывода строки стандартную библиотечную функцию, а в своей функции просто выводите фиксированное значение символов, то добавлять в конце строки NULL не имеет смысла.
2) При настройке таймера в асинхронном режиме и дальнейшем изменении его регистров необходимо учитывать, что изменение этих регистров в контроллере происходит не мгновенно, а с некоторой задержкой. Поэтому факт самого изменения регистров нужно отслеживать по изменению флагов в регистре ASSR.
3) В функции if (PINC.2==1) //СБРОС
Код: Выделить всё
#asm("cli"); // Запретили прерывания
TCCR2=0x01;
time1=0;
//#asm("sei"); // Забыли разрешить прерывания5) переменная mode у Вас принимает значения 0..2. можно выделить для нее тип данных char (занимает в два раза меньше места). Важно понимать, что перевод типов данных char(символ) и integer(целое число) никак не соотносятся с целевым применением этих типов и обозначают всего лишь размер места в памяти. char занимает 1 байт и может содержать как число, так и символ (кодировка ASCII); integer занимает (для AVR) 2 байта и также может содержать число или символ (кодировка UNICODE).
6) Не работают остальные кнопки у Вас потому, что в начале идет кусок кода, который заключен в бесконечный цикл while(1). Оператора выхода из цикла (break) я у Вас там что-то не увидел. Т.е. все банально просто - у Вас молотит все время первый кусок, а до остальных дело не доходит.
Дальше не смотрел.
Тогда изучайте Ассемблер.amd9800 писал(а):Хочу оптимизировать данную функцию на скорость.
Fucking static initialization order fiasco
- sphincs
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Вт сен 11, 2012 09:13:52
- Откуда: Брест, Беларусь
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
нет, тут все нормально, прерывания разрешаются по нажатию кнопки СТАРТ, пока устройство простаивает мне нет необходимости считать времяPink-Pank писал(а): 3) В функции if (PINC.2==1) //СБРОСКод: Выделить всё
#asm("cli"); // Запретили прерывания TCCR2=0x01; time1=0; //#asm("sei"); // Забыли разрешить прерывания
согласен, обычно unsigned char выделяю, тут просто просмотрелPink-Pank писал(а): 5) переменная mode у Вас принимает значения 0..2. можно выделить для нее тип данных char
а вот это действительно так. блин. криво скопипастил похоже из первоначального проектаPink-Pank писал(а): 6) Не работают остальные кнопки у Вас потому, что в начале идет кусок кода, который заключен в бесконечный цикл while(1). Оператора выхода из цикла (break) я у Вас там что-то не увидел. Т.е. все банально просто - у Вас молотит все время первый кусок, а до остальных дело не доходит.
Дальше не смотрел.
спасибо за помощь!
Re: Мелкие вопросы по МК и ПЛИС.
Я смотрю на то чтоб программировать в С с ассемблерными вставками.Pink-Pank писал(а):Тогда изучайте Ассемблер.amd9800 писал(а):Хочу оптимизировать данную функцию на скорость.
- Реклама
- sphincs
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Вт сен 11, 2012 09:13:52
- Откуда: Брест, Беларусь
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
delete
Спойлер
проблема с дисплеем была в неправильной библиотеке- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Ну... Это бывает полезно в исключительных ситуациях. А так, чтобы обработать переменные Вам нужно, например, засунуть их стек перед вызовом ассемблерной вставки. А в самой вставке их оттуда извлечь, что-то с ними сделать, засунуть обратно в стек. При этом, перед всеми действиями сначала сохранить используемые регистры и регистр флагов, а в конце их восстановить. В общем, тоже мало хорошего. либо изучать документацию на Ваш компилятор. Большинство компиляторов оставляет часть регистров не используемыми - и их можно задействовать в Вашей вставке без последствий. Либо икать в листинге, по каким адресам записаны переменные и какие регистры свободны.amd9800 писал(а):Я смотрю на то чтоб программировать в С с ассемблерными вставками.
Fucking static initialization order fiasco
Re: Мелкие вопросы по МК и ПЛИС.
А можно компилятору задать какие регистры резервировать?
Таким образом буду резервировать, а потом использовать в асемблере.
Таким образом буду резервировать, а потом использовать в асемблере.
Re: Мелкие вопросы по МК и ПЛИС.
Есть горсть плат, на каждой плате припаяна микросхема модели %defaul_MCU% (в названии производителя первая буква А, всё правильно). Тактируется от внешнего источника.
Но у внешнего источника частота слегка не та оказалась внезапно.
Решение: допаять кварцы на весу. И по два конденсатора, как на картинке в инструкции.
Кварцы допаяли, а конденсаторов нет в наличии. Подходящих для именно навесного монтажа.
И сомнения: то ли оставить работать как есть, то ли морочиться сначала с закупкой, потом опять разборкой и допаиванием уже конденсаторов...
Но у внешнего источника частота слегка не та оказалась внезапно.
Решение: допаять кварцы на весу. И по два конденсатора, как на картинке в инструкции.
Кварцы допаяли, а конденсаторов нет в наличии. Подходящих для именно навесного монтажа.
И сомнения: то ли оставить работать как есть, то ли морочиться сначала с закупкой, потом опять разборкой и допаиванием уже конденсаторов...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18614
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
в AVR-GCC можно, но зарезервированные регистры все равно могут быть испорчены, если используются сторонние библиотеки (в том числе avr-libc).amd9800 писал(а):А можно компилятору задать какие регистры резервировать?
Таким образом буду резервировать, а потом использовать в асемблере.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
О, а как?ARV писал(а):в AVR-GCC можно
Fucking static initialization order fiasco
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18614
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
опция компилятора -ffixed-x: в этой опции вместо х должен быть указан номер резервируемого регистра. например, если надо зарезервировать R6, то следует указать при компиляции опцию -ffixed-6. если резервируются несколько регистров, на каждый должна быть своя опция.Pink-Pank писал(а):О, а как?
не пытайтесь зарезервировать "предопределенные" регистры!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Это, я так понимаю, указывается в коммандной строке компилятора. А чтобы в тексте программы указать такого нет?
Fucking static initialization order fiasco
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18614
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
в тексте - нет. и причина проста: при сборке программы из нескольких файлов необходимо, чтобы каждый файл компилировался с одним и тем же набором резервируемых регистров, в противном случае никакого смысла в резервироваии не будет. именно по этой причине при подключении некоторых библиотек avr-libc, которые были скомпилированы без учета резервирования, смысл резервирования в вашей программы теряется.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Мелкие вопросы по МК и ПЛИС.
На меге 48 я подал питание на саму микруху с одного стабилизатора 78L05 и на AVCC c другой 78L05.
Схема начинает шипеть.
Если питаю ее через LC цепь и ставлю индуктивность 50uH и конденсатор 8,8uH керамика, то когда начинает работать шим то наблюдаются помехи притом помехи(смотрю осцилографом) в на стороне AVCC больше чем на VCC.
Схема начинает шипеть.
Если питаю ее через LC цепь и ставлю индуктивность 50uH и конденсатор 8,8uH керамика, то когда начинает работать шим то наблюдаются помехи притом помехи(смотрю осцилографом) в на стороне AVCC больше чем на VCC.
- КРАМ
- Друг Кота
- Сообщения: 25300
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
Питание AVcc нужно подавать через RC цепь. Причем резистор следует взять совсем не большой 5...10 Ом.
Если в качестве опоры АЦП взят именно AVcc, а при этом требуется долговременная стабильность этой опоры (для вольтметра, например), то тогда лучше использовать специальный источник опоры с малым падением и понизить AVcc до 4,096 вольт.
Если в качестве опоры АЦП взят именно AVcc, а при этом требуется долговременная стабильность этой опоры (для вольтметра, например), то тогда лучше использовать специальный источник опоры с малым падением и понизить AVcc до 4,096 вольт.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
А как же Analog Supply Voltage — Vcc ± 0,3 В?КРАМ писал(а):специальный источник опоры с малым падением и понизить AVcc до 4,096 вольт.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- КРАМ
- Друг Кота
- Сообщения: 25300
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
Если честно, то я у Меги конкретно не смотрел.
При таком требовании остается вариант с RC.
А опору уже сделать отдельно с референсного источника.
При таком требовании остается вариант с RC.
А опору уже сделать отдельно с референсного источника.
Re: Мелкие вопросы по МК и ПЛИС.
Ну да, их обычно либо соединяют (цифровое и аналоговое питание), либо подают через свои раздельные дроссель + конденсатор (скажем, 0,1мкФ). У amd9800 стоит блокировочный конденсатор по питанию 8,8нФ - думаю, мало. Можно попробовать добавить параллельно керамике 0,1мкФ электролитический, скажем, 20мкФ.
- КРАМ
- Друг Кота
- Сообщения: 25300
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
Дроссель в обсуждаемом случае не годится, поскольку он не столько является элементом фильтра, сколько приемником паразитных магнитных полей...


