©2004 Валентин Володин
Сайт Валентина Володина
Главная Статьи Книги и журналы Справочник Программы Ссылки
О себе RytmArc Схемы и описания Резервный форум Разное valvolodin.narod.ru
Калькуляторы Файловый архив Архив форума Форум ГОСТы Измерительные приборы
turbobit mega.co.nz fex.net files.dp.ua ... imageup ... ... ... ...

Power Electronics

Посвящается различным источникам электропитания
Текущее время: 29-03, 10:38

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 184 ]  На страницу Пред.  1 ... 9, 10, 11, 12, 13  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 00:58 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05-10, 23:25
Сообщения: 614
Melvin77 писал(а):
Вы считаете по другому

Что в книжках пишут не вызывать функции, особливо дэлай, из обработчика прерываний эт мы и сами знаем, тока надо понимать для чего это. А то некоторые начитавшись, например, тычут пальцем увидев гото в сишном коде... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 08:43 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
лег спать в 2 часа тут было пусот. встал - полно.
не серчайте, если чего не понял в лет. я с просонок смотрю ваш текст и пытаюсь вьехать..
nomos , Си он и в африке Си. действительно, применяя доплнительное прерывание во время обработки предыдущего можно наскочить. он их конечно в конвеер организует. ничего страшного, когда знаешь, что делать. но как-то настораживает. т.к. макросов и директив предпроцессора не видишь. ну да бог с ним. наверное знаете то делать.
у меня несколько другое пожелание, что-ли...
делать длИнные обработчики прерываний, ну как-то не очень красиво, что ли...
таймер разделили на ТИКИ - это в приципе хорошо.
Код:
 count_r++; // 
   if (count_r == 12) count_r=0; // 

тут навреное коррктнее так:
if(++ count_r > 11) {}
мало ли чего.

----
Вы выводите, как я понял по SPI в 595 8 битовый . беря маску с массива. т.е. разрядность и т.д. Вам до лампочки. теперь смотрите...
скорость вывода и количество сегментов соотносятся так, что Вы успеете вывести несколько тысяь раз. а на выходе защелки..
более того, этому регистру похрен clock как таковой были бы фронты и чтоб они соотносились по времени с др. т.е. всё весьма относительно . с любой частотой и пр. простая ж логика.
куда торопитесть? индикация статическая. т.е. в прерывании этого можно было не делать. достаточно позвать функцию в любом другом месте.
у меня в одном из вариантов, как всегда надо было быстро..
Код:
 for( bN =0; bN <15; bN++)   
      { _WDR();
     
          switch (insr) 
          {
          case 0:
            OuByte = decode_znac[ Inp_string[bN]-0x30];
            break;
            case 1:
            OuByte = decode_znac[ Inp_string1[bN]-0x30];
            break;
            case 2:
            OuByte = decode_znac[ Inp_string2[bN]-0x30];
            break;
            case 3:
            OuByte = decode_znac[ Inp_string3[bN]-0x30];
            break;
            case 4:
            OuByte = decode_znac[ Inp_string4[bN]-0x30];
            break;
          }
          //OuByte = decode_znac[ Inp_string[bN]-0x30];
     
             for( btN =0; btN < 8; btN++)  //биты выталкиваем младшим вперед   
              {  //т.к. массив перекодировки в прямом коде, а индикатор с ОА
                 // то выводить надо инверсно. еденицу - нулем.
                   if ((OuByte & Bit( btN ) ) != 0)  Clr_DS(); //Set_DS(); 
                   else  Set_DS(); //Clr_DS();
                           Strobicus(); // стробируем бит
                 _WDR();           
              }
       }
      Clr_Clock() ; Clr_DS(); //успокоимся
       //ну и теперь переносим в выходные триггера то чего натолкали в эту колбасу из 15ти регистров
         storage_register_clock_input(); //вывели.          ужаснулись.   
    }


это делается, когда совсем уже делать нечего. заметте, 15*8 сегментов.
тут ещё кусочек вывода на ЖКИ рядом со своей таблицей перекодировки . кириллица ж де попало.
так вот , зовется вся эта ерунда, когда таймер время нащелкает
это в таймере.
if( clock_count > 0 )clock_count--;
т.е. спешить точно некуда. и возиться с SPI особого смысла нет.
ну это мое мнение.

не знаю , как работает АЦПатор, но не увидел компенсации плавающего разряда.
мож не по глазам
у меня так.
фрагмент. (комментарии переносятся крякозябушками, ну и так понятно)

Код:
interrupt void ADC_interrupt(void){
U8 temp_adc_result = 0;
         temp_adc_result = Adc_get_8_bits_result();
        if( temp_adc_result >0xf0) temp_adc_result =0xf0;
switch (gv_adc_state) {
      case Vcc_tst_CONV:   
       gv_Vcc_tst = (U8) ( ( (U16)((U8)(temp_adc_result) + (U8)( gv_Vcc_tst)) ) >> 1 );
             gv_adc_state = V_os_PWR_CONV;
         Start_conv_channel(V_os_PWR_CHANNEL);   
      break;

      case V_os_PWR_CONV :
         gv_V_os_PWR = (U8) ( ( (U16)((U8)(temp_adc_result) + (U8)(gv_V_os_PWR)) ) >> 1 );
       gv_adc_state = middleCurrent_0_CONV ;
     Start_conv_channel(V_middleCurrent_0_CHANNEL); 
       break;

      case  middleCurrent_0_CONV:       // middleCurrent 1 canal
         gv__middleCurrent_0 = (U8) ( ( (U16)((U8)(temp_adc_result) + (U8)(  gv__middleCurrent_0)) ) >> 1 );
           gv_adc_state = middleCurrent_1_CONV ;
         Start_conv_channel(V_middleCurrent_1_CHANNEL);  //0x0A
      break;
      case  middleCurrent_1_CONV:        // middleCurrent 2 c
         gv__middleCurrent_1 = (U8) (((U16)((U8)(temp_adc_result)+(U8)( gv__middleCurrent_1))) >>1);
            gv_adc_state = SetUrovenUI_CONV ;
              Start_conv_channel(V_SetUrovenUI_CHANNEL);   //0x08
      break;
      case  SetUrovenUI_CONV:           // U ser R user
        gv_V_SetUrovenUI = (U8) (((U16)((U8)(temp_adc_result)+(U8)( gv_V_SetUrovenUI))) >>1);
              gv_adc_state = V_os_PWR_CONV;
         Start_conv_channel(V_os_PWR_CHANNEL);   
      break;

      default:
    .......
      break;
 }

т.е. усреднение тут
gv_V_os_PWR = (U8) ( ( (U16)((U8)(temp_adc_result) + (U8)(gv_V_os_PWR)) ) >> 1 );

вот это вызвало сомнение в действенности
GODONE=1;//çàï
while (GODONE);//æä
setIfors = ADRESH;
}

т.к. читать, как работает ШИМ нет охоты. пора тело завтраком кормить.
то по шиму ничего гавкнуть (мавкнуть, пардон, не могу)
=====
сухой остаток.
может лучше клоки формировать независимые. а в майн асинхронно звать кого надо. прерывания на что нить сгодятся и так.
пример писать сейчас не буду. есть хочу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 09:20 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05-10, 23:25
Сообщения: 614
MasterCat
Спасибо, за мыслю про спи, остальное надо переварить... Что-то не врубаюсь пока про компенсацию водоплавающего разряда. Усреднение буду писать еще, только, наверное, скользящее, а этот кусок :
GODONE=1;//...
while (GODONE);//ждем пока ацп полед. приближения насчитает до 1024 (10 разрядов, из них берем char сдвигая на два бита либо вправо, либо влево, или инт (для него объявлена глобальная структура из двух байтов)) и выбросит флаг окончания.
setIfors = ADRESH;
- это стандартный текст работы с адиком...
ПС. Что это в усреднении (U8) ( ( (U16)((U8)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 09:26 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
monos писал(а):
Что-то не врубаюсь пока про компенсацию водоплавающего разряда.

тело покормил. телу понравилось.

т.к. младший разряд вечно непонятно где, то либо начитываешь в кучу раз 10 - 100. потом делиштяс и имеем среднее. либо сразу на лету с со сдвинутым предыдущим.

monos писал(а):
(U8) ( ( (U16)((U8)

ааай.
10 разрядов шибко много и ацэпатор медленнее с нми работает. поэтому беру толко старшие, но это всё равно два байта , ну и к 8ми битовому виду на бегу это дело ...
ну а букофки понятное дело
typedef float Float16;

typedef unsigned char U8 ;
typedef unsigned short U16;
typedef unsigned long U32;
typedef signed char S8 ;
typedef short S16;
typedef long S32;


monos писал(а):
while (GODONE);//ждем пока ацп полед. приближения насчитает до 1024


вот с ним бы лучшее работать разрешив прерывание по окончанию преобразования. и в прерывании и формировать фактическое значение (что и привел). тогда в теле программы не привязан к циклам и пользуешь предыдущий результат когда захочешь, а не когда навяжут.
а где там байты хранить, да пофиг. НО! (не заю , как у пика, думаю везде одинаково) увлекаться указателями в прерываниях, которые дают критичные результаты , скорее всего не верно.. т.к. адресация по указателю в структуре - это ещё не малое время. а ацэпатор и так тормознутая вещь. это у силабсовских он молотит независимо на 10мгцах и там похрен что и как.[/code]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 11:11 
Не в сети
Завсегдатай

Зарегистрирован: 06-12, 19:13
Сообщения: 329
MasterCat писал(а):
вот с ним бы лучшее работать разрешив прерывание по окончанию преобразования.

Присоединяюсь, тильки так и надо делать. Не помню как в пиках сие обзывается , в авээрках этот модус обозван ака FR. Хэндлер адика тильки считывает валуе , сторит его и сдвигает канал преобразования. Новое преобразование стартует само по себе, по новому каналу. А вот кому и когда валуе понадобиться - это не его дело, это забота других нитей, от других прерывателей.
Никто ничего и никого не должен ждать. Всякие лупы и ожидания это плохой тонус в подобных системах. Все далжно крутися само по себе , на аппаратных прерываниях. Ну а мэйн, апосля иницыализыцыи типа - уайл( адын ); :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 11:16 
Не в сети
Завсегдатай

Зарегистрирован: 06-12, 19:13
Сообщения: 329
MasterCat писал(а):
это ещё где..?

вот тута, почитай. замечательное чтива.
http://www.millerwelds.com/resources/TIGhandbook/
Лучшего, для начинающего ТИГера , в сети я нивстречал


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 11:21 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
sam_soft писал(а):
Новое преобразование стартует само по себе, по новому каналу

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 14:39 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05-10, 23:25
Сообщения: 614
sam_soft писал(а):
Все далжно крутися само по себе , на аппаратных прерываниях.

У 16-х пиков такого модуса нет- можно только вызвать прерывание по окончании преобразования адика... Но только я в этом особого смысла пока не вижу: преобразование занимает 30мксек времени. Потом, там же все прерывания приходят на один вектор, т.е. надо программно выяснить от кого прерывание... В общем ждать окончания преобразования складывать результаты в инты (чары) получается проще и понятнее, а когда понадобиться- брать их оттуда..
MasterCat писал(а):
ну а букофки понятное дело
Это синтаксис такой или приведение типов?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 14:49 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
monos писал(а):
Это синтаксис такой или приведение типов

ну объявление типа разумеется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 14:59 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
monos писал(а):
мысла пока не вижу: преобразование занимает 30мксек времени

ну ... дело хозяйское. мне-то в pwmке прерывания лучше экономить. т.к. по отсечке ШИМа надо знать какой длительности сформирован импульс. а это прерывание. причем самое приоритетное после reset. паметёшка конвеер не потянет. поэтому лучше не выдираться. ну и циклов ожидание естественно нету в принципе. один явный есть. когда надо всё притормозить. но для спец применения.
вообщем я также за тезис "железо пусть само крутится, а main сама.
когда надо подкрутил чего и дальше само. так легче и шустрее среагировать на exception/ это всё таки основной критерий живучести.

однако оговорюсь всё же. все эти танцы на острие ножа ТОЛЬКО КОГДА РУЛИМ КЛЮЧАМИ. в остальных применениях похрен что и как.
ну в известных мазохистких пределах ес--но. для всяких выводов на индикатор или измерения напруги на конденсаторе прерывания вообще можно не пользовать. ну разве что по интерфейсу чего прилелит. Rx лучше всё же в прерывании. это когда РАСПРЕДЕЛЕННАЯ система. всё в одном флагоне с предпослыкой занять все ноги и все ресурсы, а то не дай бог пропадут. лучше не дразнить судьбу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 15:50 
Не в сети
Завсегдатай

Зарегистрирован: 06-12, 19:13
Сообщения: 329
monos писал(а):
У 16-х пиков такого модуса нет- можно только вызвать прерывание по окончании преобразования адика... Но только я в этом особого смысла пока не вижу: преобразование занимает 30мксек времени. Потом, там же все прерывания приходят на один вектор, т.е. надо программно выяснить от кого прерывание...

О-о-о-о блин, как всё запущено. Ну вот, а то ходил усюды и шашкой размахивал:
- У меня DSP пик, ща парву всех на куски. :) А на поверку этож кирпич, а не проц.
А что в пиках так и осталася дебильная сбер банковская адресацыя памяти ? Давно я пиками не занимался, уж гадков за десять точна. Мож что продвинулось в этом направлении? Или тожа кирпич ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 23:18 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05-10, 23:25
Сообщения: 614
sam_soft писал(а):
- У меня DSP пик, ща парву всех на куски.

:D Ну ты так не горячись... Этож я, модернизирую ужо сделанное, а оно на пик16ф886. Дспик попробовал, это который дспик30ф2020- вроде все ничего, только жрет ён аж 160 милиампер и при этом греется прилично... В общем, закупил пару dsPIC33FJ16GS504, только вот лежат уже пол года- не доходят руки... С тех пор, как стал писать на си, банки --проблема компилятора. Зайди интереса ради на сайт микрочипа, там появились новые камни 16-й серии (у них есть модуль для работы с лцд и еще разной всячины)- если не изменяет память там 12 банков, а может и более, а дспики без банков... Есть еще пики 24 серии (16-битники)- их хвалят...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 23:51 
Не в сети
Завсегдатай

Зарегистрирован: 06-12, 19:13
Сообщения: 329
monos писал(а):
С тех пор, как стал писать на си, банки --проблема компилятора

Так и есть, но сбербанки это впустую потраченное время. Так же как и пиковские машынныя цыклы. Я ваще поражаюся какой псих придумал их. Этож не бальшые машынки, где сегменты , страницы вполне оправданная штука в плане реализацыи перемещаемости програмного кода по адресному пространству и канешна защиты одного процесса от другога. Но для ембедеров флат модель памяти это то что дохтур прописал. Все просто и адресуется одним телодвижением.
Кстати насчот указателей хтота тута спич вёл. Дак вот тама хде есть у проца косвенная адресацая на уровне астмы , то они нипраблема в плане спида. Для сумневающихся предлагаю дать компайлеру сгенерить астму и посмотреть что и как тама шывелится .
MasterCat
А есть хде трехдетальный фри варе програматор шоб сапортил пэ эвм 316 ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27-08, 06:02 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
sam_soft писал(а):
А есть хде трехдетальный фри варе програматор шоб сапортил пэ эвм 316

нету, увы.
тока фирменный.
меня на этом деле они на бабки развели как пацана. аж два купил.
JTAG ACE mkII и AVR ISP mkII
собственно они не лишние. с Xмегой с тому же без них никак. ониж там всё поменяли. и вторая гадость - это работают из avr studio.
а что это такое по сравнению IAR известно. приходится эти грабли вечно к стенке прислонять.

может оно где-то есть, но не актуально. вот и не смотрю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27-08, 07:48 
Не в сети
Бывалый

Зарегистрирован: 18-09, 15:34
Сообщения: 665
Откуда: Новокузнецк
MasterCat писал(а):
нету, увы.
тока фирменный.

А я таки пользую AVR910 из под CodeVision для любых чипов.

_________________
Это не дым, это души погибших полупроводников ...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 184 ]  На страницу Пред.  1 ... 9, 10, 11, 12, 13  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


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

Перейти:  
Powered by Forumenko © 2006–2014
Русская поддержка phpBB
turbobit mega.co.nz fex.net files.dp.ua ... imageup ... ... ... ...
Рейтинг@Mail.ru