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

a_sergeevich

Members
  • Постов

    328
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные a_sergeevich

  1. Вы в курсе, что хайтек - это тоже Си-компилятор? И фирма хайтек уже пару лет принадлежит Микрочипу. Мне видится Вы не поняли моего предложения...

    Я в курсе чем является HI-TEC, ещё раз, тема не про выбор компилятора, среды разработки и бла, бла, бла... тема про написание программ для МК PIC на языке Си, поэтому думаю по этому поводу никаких вопросов возникать не должно.

    Еще раз благодарю за помощь.

    Заходите к нам ещё. :rolleyes:

  2. -=lowbyte=-

    Ну если не считать отказа от микроС в пользу хайтека.

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

    ut3mk

    Вам, mil_alex в своём посте №335 дал верное решение, оформите только цикл for по правилам Си и сделайте его на столько итераций сколько Вам нужно.

  3. У этого термометра погрешность +-1 градус в диапазоне +10...+60 градусов и в статье написано, что при выходе за границы этого диапазона она возрастает, до скольки не сказано, но схема ИМХО не предназначена для её дальнейшего улучшения. А если нужно +125 то DS18b20 и PIC вам помогут лучше всего, при этом точность составит 0.1 градус и расширять функционал можно всего лишь добавляя в программу нужные блоки кода.

  4. В хелпе на МикроСи есть всё, надо просто чуток внимательней читать. Ну, а чтобы было понятней вот пример вывода в МикроСи чисел на ЖК:

    
    //Термометр с датчиком на DS18B20, МК PIC16F877A, F = 20 Мгц
    //Предел измерения от - 55 до + 125
    //Точность +- 0.1
    //Проект сделан с помощью Alex с форума forum.cxem.net
    int main (void)
    {
       unsigned char byte0,byte1,z; //байты приёма 0,1 z - знак
       signed int tm; //tm - для соединения 0 и 1 байтов
       signed char  eden;
       unsigned char des;
    
       ADCON1 = 0xFF;
       PORTA = 0x00;
       TRISA = 0x02;  //RA1 - вход, все остальные выходы
       PORTC = TRISC = 0x00;
       OPTION_REG = 0x7F;
       PORTB = 0xFF;
       TRISB = 0xD8; // выходы для ЖК
       Lcd_Custom_Config ( &PORTB, 5, 2, 1, 0, &PORTC, 0, 1, 5);//Иниц.ЖКИ
       Lcd_Custom_Cmd ( Lcd_CURSOR_OFF ); // Выключить курсор
    
       Lcd_Custom_Out ( 1,3,"PIC Foreva" ); //Начальная надпись
       Delay_ms ( 1000 );
       Lcd_Custom_Cmd(Lcd_Clear); //Очистка ЖКИ
    
       while ( 1 )
       {
             Ow_Reset ( &PORTA,1 ); //Сброс, начало команд
             Ow_Write ( &PORTA,1,0xCC );  //Пуск
             Ow_Write ( &PORTA,1,0x44 );  //Пуск
             Delay_ms ( 750 );            //Задержка по даташиту для замера тем-ры
             Ow_Reset ( &PORTA,1 );   	//Сброс, начало новой команды
             Ow_Write ( &PORTA,1,0xCC );  //Чтение тем-ры
             Ow_Write ( &PORTA,1,0xBE );  //Чтение тем-ры
             byte0 = Ow_Read ( &PORTA,1 );  //Младший байт тем-ры
             byte1 = Ow_Read ( &PORTA,1 ); //Старший байт тем-ры
    
             tm = byte0 + (int)(byte1 << 8 ); //Соединяем байты в одну переменную
    
             if ( ( tm & 0x8000 ) ) { tm = -tm; z = '-'; }//отриц или положительная
             else z = '+';
             eden = tm >> 4;  // Делим на 16. Вычеслили целое значение
             des = ((char)(tm)) & 0b1111; // Выделяем отсечёные 4 бита
             des = ( des * 10 ) >> 4; // Приводим их к целым (*10) и так-же делим на 16
    
             Lcd_Custom_Chr ( 1,3,z ); //выводим знак
    
             if ( eden <= 9 )  // а это блоки вывода значения тем-ры
               {           	//в зависимости от величины тем-ры
            	Lcd_Custom_Chr ( 1,7,' ' );
            	Lcd_Custom_Chr ( 1,4,eden + 0x30 );
               }
             if ((eden >= 10) && (eden < 100) )
               {
               Lcd_Custom_Chr ( 1,8,' ' );
               Lcd_Custom_Chr ( 1,4, ((eden/10)%10) + 0x30 );//0х30 для правильного отображения чисел
               Lcd_Custom_Chr_Cp ( ((eden/1)%10) + 0x30 );
               }
             if (eden >= 100 )
               {
    
               Lcd_Custom_Chr ( 1,4, ((eden/100)%10) + 0x30 );
               Lcd_Custom_Chr_Cp ( ((eden/10)%10) + 0x30 );
               Lcd_Custom_Chr_Cp ( ((eden/1)%10) + 0x30 );
               }
             Lcd_Custom_Chr_Cp ( '.' );  //вывод разделителя
             Lcd_Custom_Chr_Cp ( des + 0x30 ); //вывод десятых
    
    	}
    }
    
    
    

    Как видно из примера к выводимому числу для того, чтобы оно правильно отобразилось надо прибавить 0х30 или в десятичной системе 48.

    Можно также использовать функции преобразования чисел в строки, но это расходует ресурсы МК, так что в данном случае ни к чему.

  5. Зачем, тебе обрабатывать, что-то в прерывании ? Функция обработки прерывания должна быть минимально короткой, поэтому делай следующим образом, в функции обработчике прерывания просто фиксируешь сам факт прерывания с помощью флага, а уже в основном цикле программы, анализируя состояние флага, выполняешь каки тебе необходимо действия.

    Запись приведённую тобой компилятор не поймёт т.к она не правильна, читай учебник по Си, там всё есть.

    Если тебе надо выбирать какой либо элемент массива в зависимости от того в какой диапазон попадает выходное значение ацп то тут тебе в помощь только условный оператор if.

    Получится типа этого:

    Функция обработки прерывания () {

    Если прерывание произошло ФЛАГ =1

    Сбросим флаг прерывания

    } конец ф-ции обр прерывания

    Основной цикл {

    Если ФЛАГ == 1 тогда {

    Нужные тебе действия

    ФЛАГ = 0

    }

    Всё.

  6. Я вот почитал Ваши измышления и никак не пойму, зачем Вам для программирования МК такие функции как scanf и printf, что Вы с ними делать то собираетесь ? Есть у микроСи свои библиотеки для вывода в UART чем они Вам не угодили ? Ни один компиль для МК не работает полностью по стандартам Си т.к у МК есть определённые ограничения. А если так уж нужен "стандарт" то берёте и делаете вывод с помощью ассемблерной вставки по примерам микрочипа. К тому же в хелпе на микроСи есть раздел, который так и называется особенности и ограничения компилятора микроСи. Если Вы не хотите использовать готовые библиотеки микроСи, пишите свои, Вам это никто не запрещает.

    К Вашей проблеме по поводу printf, вот что сказано в мануале :

    MikroC предоставляет библиотеку функций вывода sprint.

    Примечание: В дополнение к стандарту ANSI Си mikroC предоставляет ограниченные версии sprinti, sprintl, которые занимают меньше ROM, RAM и могут быть удобны в некоторых случаях для PIC.

    Ползуйтесь sprintf тоже самое, что и printf.

    Про ограничения: Местами mikroC отличается от ANSI Cи. Некоторые из этих отличий являются улучшениями, способствующими облегчению программирования для PIC, тогда как другие являются следствиями аппаратных ограничений, присущих PICmicro

  7. А зайти на сайт овена и попросить про консультировать овеновцев по приборам, перед этим описав им вашу задачу несудьба, да ? Лучше самого производителя никто консультации не даст. Сайт: www.owen.ru

  8. А, что такого крутого в программе вольтамперметра с выводом на дисплей от нокии ? Я такую прогу напишу за 10-ть минут в том же микроСи, не смешите меня когда сравниваете флоукоде с экскаватором.

    FLOWCODE - в ней создаётся алгоритм работы, смотрите как работает, а после этого можно скомпилировать этот алгоритм в текст на языке СИ и доработать как хотите...

    А не кажется ли Вам, что проще сразу самому написать так как надо, на том же Си и потом если потребуется разбираться в СВОЁМ коде, а не в том, что там нагенерировал флоукод.

    Ладно, все эти споры уже выходят за рамки темы ТС, поэтому прекратим их. Я ТС-у дал готовые кубики для его устройства, ему их нужно всего лишь обьеденить в одну программу и всё.

  9. Вот, Вам примеры по работе с датчиком температуры DS18B20, организации динамической индикации и пример по работе с часами реального времени DS1307, всё это при должном старании поможет Вам написать любые часы с термометром и т.д и т.п, а про всякие флоукоды забудьте как про страшный сон, пользуйте те инструменты по которым Вы сможете получить любую помощь. Все примеры приведены для HI-TEC компилятора, т.е на языке Си. Начинайте с правильных вещей, а не с ерунды.

    Качайте:Primer.rar

    Кстати в этой теме http://forum.cxem.net/index.php?showtopic=57524 вопрос термометра очень подробно описан, для двух МК и для двух компилей.

  10. Я тут начал собирать ЛБП, который сам и выкладывал http://forum.cxem.net/index.php?showtopic=37966&view=findpost&p=821536, просто смотрю, что скачали архив 61 человек, просто хочеться узнать кто-нибудь уже собрал или нет, мне лично осталось чуток и буду проверять, если всё будет хорошо, выложу фотки всего, что потребуете, аппаратурка кое какая имется:). У меня сейчас, кстати на службе стоит БП с регулировкой напруги от 0 до 30 вольт регулируемым током защиты и всё это на двух транзисторах, правда ток 1,5А, работает идеально, но вот захотелось собрать, что-то по круче :)

  11. olegrmz, для того, чтобы, организовать защиту по току, которая будет отрубать оба канала независимо в каком она сработала ( при последовательном соединении ) мне надо контролировать ток в плюсе одного и минусе другого + будет показывать ток, в каждом канале. По промышленным БП скажу честно, ниразу не соединял их последовательно, но вот, что-то мне подсказывает, что при соединении двух одинаковых БП последовательно, один будет ток показывать правильно, а второй, шунт, которого попадёт в общую шину, при одинаковом потреблении тока каждым плечом нагрузки, покажет ноль, а если будет перекос, то разницу токов.

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

    Возможно я и ошибаюсь если, что поправте.

  12. Starichok , подскажите, пожалуйста по измерителю тока. Тут он меряет ток в минусовой цепи, а как его подключить, чтобы он мерял ток также в плюсовой цепи ?

    Я это спрашиваю для того, чтобы можно было включить два БП последовательно, получить двухполярное напряжение и соответственно мерять ток у одного канала в плюсе, а у другого в минусе, а затем завести это в МК и организовать индикацию по каждому каналу отдельно + сделать ещё одну защиту по току на том же МК.

    Если нетрудно нарисуйте схемку.

  13. Если качали из первого сообщения, то там версия не самая последняя, а довольно старенькая, вот отсюда можно скачать http://www.mikroe.com/en/compilers/mikroc/pro/pic/ последнюю версию, конечно же ограниченную, кряк ищите сами если надо, но думаю Вам на первое время вполне хватит и ограниченной, тем более ограниений в функционале нет, а только на размер программы.

    Вот описание, что в этой версии нового:

    Раньше пользователи при отладке могли использовать только симулятор встроенный в компилятор или же аппаратный отладчик на базе mikroICD от mikroE, продукты от mikroE никак не интегрировались в среду разработки MPLAB IDE и невозможна была симуляция в Proteus-е. По неоднократным просьбам пользователей команда mikroE включила в компилятор возможность генерации COFF файлов, используя которые теперь можно проводить отладку в среде MPLAB IDE ( как при помощи симулятора MPLAB SIM, так и при помощи программатора-отладчика ICD2 (ICD3)), а как известно в симуляторе MPLAB уже работают таймеры и т.д. Все это можно найти в help-файле.

    П.С. Может уже и новее вышла. :)

    Ещё для тех кто пользуется микроСи. Данный компилятор не очень дружит с выводом русских букв на ЖКИ, вот программа, которая поможет решить данную проблему.

    Ссылка: http://narod.ru/disk/17508096000/MikroCStringTranslate.rar.html

  14. Я хоть и не модератор, но скажу. Первое, помещайте код в теги code в редакторе они есть. Второе, есть тема где рассматриваются все нюансы программирования на Си для Пиков, зачем плодить 100500 тем не понимаю.

    На вскидку ошибка тут:

    
    TRISB = 0;      сначала правильно ставите порт В на выход
    PORTB = 0xFF;  эта строчка тут тоже не нужна
    TRISB = 0xff;   а тут зачем то переключаете на вход
    

    Поэтому и не работает.

    И ещё совет, возьмите лучше не про версию микроСи, на неё есть русский мануал + там всё же по проще сделана работа с ЖКИ.

  15. Да без проблем, вот тебе расписаны все функции с комментариями, плюс они уже скомпонованы в хедер и исходник, из них делаешь два файла с расширением .h и .c кидаешь в папку со своим проектом, подключаешь и получаешь удовольствие. Так же приведён пример программы считывания номера прибора и программа для считывания температуры по номеру прибора, короче всё, что тебе нужно. В конце есть вопросы для тренировки. Также в программах приведён пример динамической индикации. Всё это для HI-TEC компиля написано.

    Дерзай и если, что спрашивай.

    Вот учись : (1-Wire).rar

  16. а вот как ты думаешь измерять ток по плюсу и минусу контроллером?

    Я думал применить измеритель тока из схемы, которая рассматривается в теме Простой И Доступный Бп 0...50В, соответственно поставлю доп резисторы в плюсовое плечо и минусовое и с помощью этого измерителя меряю падение на них и с его выхода на АЦП МК, возможен ли такой вариант ?

    И ещё в теме Простой И Доступный Бп 0...50В измеритель меряет ток в минусовом плече, что нужно в нём изменить, чтобы мерять также ток в плюсовом ?

    Кстати, ваша идея использовать для этих целей VT3, вообще упрощает мою задачу. А можно просто к коллектору VT3 подрубить ещё один транзистор, который и будет включать реле ? Сделать так в каждом канале, применить два реле и готово, не надо заморачиваться с этой функцией на МК, так же уменьшается кол-во разных кнопок для задания велечины ограничения по току. Как, Вы думаете, что лучше ? Я склоняюсь к вашей идее.

  17. Starichok

    Большое спасибо за развёрнутый ответ. Мне главное, что

    да, можно включать последовательно два независимых (с раздельным питанием) блока. и защита в каждом будет нормально работать.
    т.к во многих схемах БП при последовательном включении защита просто перестаёт работать.

    Плюс я хочу собрать свой индикатор тока и напряжения и добавить в него функцию задачи макс тока защиты, т.е дополнительно к уже существующей, только управлять у меня МК будет реле, которое я установлю на выходе обоих каналов, т.е если срабатывает защита в одном, отключается напруга в обоих. Это я делаю для того, что если допустим при испытании УМЗЧ в одной его половинке возникнет какая-либо авария, например, где-то коротнуло, чтобы не происходил перекос по питанию плеч УМЗЧ т.к в исходном варианте отключится лишь один канал БП, а второй будет продолжать работать и возникнет перекос, который может вывести из строя второе плечо УМЗЧ, особенно это касается микросхемных усилителей.

    Правильно ли я размышляю или нет, может всё это не нужно ?

    П.С. Индикатор буду делать на МК PIC 16F877 с ЖК дисплеем.

  18. А ещё, подскажите, как можно два датчика ds18b20 на одну шину посадить. Вот здесь вроде что-то похожее на решение, но осилить это всё я так и не смог.

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

    Я тут выкладывал полностью документацию по этим датчикам, от производителя, в ней представлен код на Си всех функций для работы с этими датчиками, полистай тему, страниц не так много, быстро найдёшь.

  19. Уважаемый, Starichok подскажите если не трудно, я тут остановился на схеме Анатолия Патрина ( в прикреплённом файле ), так вот, могли бы вы посмотреть и дать свою оценку ( собирать или не стоит тратить время ) данному девайсу, а также ответить на вопрос: если я соберу два такиких БП и соединю их последовательно ну т.е для получения двухполярного напряжения, будет ли работать защита по току как в одноканальном варианте ? Просто я иногда собираю разные УМЗЧ и раньше для проверки применял авто преобразователь, который питал от компового БП, сам ПН без защит, а вот комповский БП не раз спасал от дыма транзисторов, в нём защита чётко работает. Поэтому и возник вопрос, который выше. Или подскажите, что надо будет переделать или доделать, чтобы защита работала.

    Заранее благодарю.

    Вот сама схема БП и индикатора тока и напряжения + их печатки в формате lay + прошивка для МК индикатора.

    LBP.rar

    П.С. Индикатор я собирать не буду.

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