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

NickSmith

Участник
  • Постов

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

  • Посещение

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


  1. Добрый день коллеги.

    Имеется микровольтметр В3-57, который достался мне в нерабочем состоянии и я его восстановил. 

    Теперь хотелось бы сделать ему настройку, но эталонных источников у меня нет. 

    Сунулся к коммерческим метрологам, но цены там конские.

    Может кто то поможет в его настройке за денежку или подскажет куда можно обратиться?

    Нахожусь в Спб.

     

  2. Спрятали в самом странном месте: Правка->Поворот. Внезапно.

    Какие слои при повороте будут включены, те и повернутся. Тоже странное поведение, правда?

    Спасибо добрый человек. Все получилось.

    А о том, как работать в CAMtstic где бы можно было почитать, а то все пытаюсь ковырять, но много чего не понятно. Например, как размножить платы? Как задать размер заготовки? Как сделать технологические переходы и фрезеровку по контуру??

  3. Чего вы людей пугаете. Богу Богово, кесарю кесарево. Пусть технологи подготовкой производства в CAM-e или в CAMtastic-e занимаются (вращают, мультиплицируют и т.д.) Конструктору печатных плат и без этого есть чем заняться. :biggrin:

    А вот с этого момента можно поподробней. Я так понимаю, что в трассировщике крутить плату не камельфо. Ее надо крутить и готовить к выводу в Cam редакторе, но вот как ее повернуть в CAMtastic я честно говоря не нашел. Логично предположить, что при повороте изменится и сверловка??

    Проясните ситуацию. Пожалуйста..

  4. Здравствуйте!

     

    Есть разведенная плата. По техническим причинам мне необходимо ее повернуть на 90 градусов, нашел только как проводники повернуть а вот как саму плату с проводниками повернуть нет.

     

    Что бы было понятно. Ширина платы больше рабочего поля моего ЧПУ станка. Что бы вписаться в рабочее поле мне нужно развернуть ее на 90 градусов что бы получить N/C drill файл нужной конфигурации. Может быть это можно сделать в CAMtastic ??

  5. В общем возвращаюсь к теме.

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

    Напрямую Mach файлы из Altiuma не жрет.

    Попробовал экспортировать гербер и сверловку в DipTrace. Гербер получился хорошо, а вот сверловка вся кривая получилась. Может быть есть какой то другой, пускай более сложный но с гарантированным результатом путь?

  6. Кстати, в теме указано именно про сверловку. Формат сверловки из альтиума по сути тот же HPGL, который должен пониматься MACH3. У меня станок управляется WinPCNC - так вот туда если подсунуть выгнанный из альтиума файл сверловки, то он начинает спокойно сверлить в соответствии с параметрами глубины, заданные в настройках программы управления.

    А контроллер там для матча подойдет?

  7. Читал все это. Одна вода, абстрактные теории ни какой конкретики.

     

    Пользуюсь CopperCAM. Просто и удобно. Надо только найти рабочую версию.

    Ну да, это пока что единственная удобная рабочая технология:-) Я конечно понимаю, что в задачи Алтиума это не входит, но при его гибкости добавить плагин для вывода не архисложная задача.

    В Diptrace это все есть. Но вот пользоваться им я не очень хочу:-)

  8. Добрый день!

     

    Возникла необходимость подготовить управляющую программу для Mach3. Порывшись в интернете информации толком не нашел. Самый удобоваривмй способ экспортировать гербер и сверловку , далее открывать все это в CoppiCam и там уже совершать все необходимые шаманства. Но по отзывам эта связка часто глючит да и весьма примитивна.

    Существуют ли какие нибудь другие способы подготовки УП для Mach3 из альтиума без серьезных шаманств? Или осваивать VisualCam или CAM350?

  9. Добрый день!

    Имеется изрядно раздолбанный намоточный станок СРН 0.5 М2. Когда то вырвал из лап металлистов.

    начал его восстанавливать и подумал заменить старинную систему управления двигателем УЛ-062 У4 на более современную.

    Вот описание двигателя : http://www.laborant.ru/eltech/01/8/5/03-97.htm

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

    Все естественно аналоговое, увесистых габаритов.

    Регулировка оборотов была сделана на принципе смещения фазы. Торможение - откидывание релюхами питающего напряжения и подача на обмотки статора постоянки и замыкания между собой якоря.

    Прилагаемая схема от следующей модификации (М3), но общий смысл не изменный.

    К сожалению опыта разработки таких контроллеров нет. Есть общее представление.

    В голову приходит управление с помощью ШИМа. Это еще не очень сложно реализуемо, но вот как систему торможения сделать более современную ума не приложу?

    Просветите в этом вопросе.

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

    post-53117-1355122279_thumb.jpg

    post-53117-1355122291_thumb.jpg

    post-53117-1355122301_thumb.jpg

  10. __flash является расширением языка. Поэтому его реализация полностью отдана IAR. В его описании компилятора приведен ваш случай:

     

    Фактически IAR реализовал концепцию нескольких адресных пространств, которой тогда еще не было в стандарте языка. Сейчас адресные пространства являются частью стандарта, и именно по стандарту в случае char __flash * __flash pm="Words" строковый литерал "Words" должен располагаться в основном адресном пространстве (ОЗУ), после чего его адрес должен быть присвоен указателю pm с соответствующим приведением типа (а в этом случае такое приведение невозможно и должно выдаваться сообщение об ошибке). Недавно мне встречалось развернутое объяснение этого в рассылке gcc, но сейчас сразу не могу найти ссылку на него, пока нашел только его результат: http://www.avrfreaks.net/index.php?name=PN...p=994863#994863.

     

    Если вы хотите иметь и строку и отдельный указатель на нее и чтобы оба они лежали во флеше, вам надо делать это в два шага:

    __flash char str1[] = "abcdef";
    __flash char __flash * pm = str1;

    Спасибо большое. Теперь мне все понятно.

  11. Имя массива есть указатель на его первый (нулевой) элемент. Пишите __flash char s[]="1234"; и используйте s как указатель.

    Я все это понимаю, с этой записью мне все понятно.

     

    Я еще только изучаю язык и хочу понять почему вроде бы стандартное объявление не хочет прокатывать в случае объявления указателя и строки в flash Понятно, что сделать можно инициализировав массив каи вы пишите, но ведь синтаксис char *pm="Words"; эквивалентен. В юниксе эта конструкция без вопросов инициализируется при объявлении, а тут не хочет.

    Ведь считается, что IAR полностью соответствует стандарту.

  12. Так не пойдёт:

    __flash char s[]="1234";
    char __flash * __flash fptr=s;

    ?

    Хм, такой вариант еще не пробовал. Испытаю.

    Заранее спасибо.

     

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

     

    Если конструкция

    __flash char pm[]="Words";

    понятна не только компилятору, но и ежу, то чем она вас не устраивает? Вы бы сперва толково объяснили, где (в ОЗУ или во флеше?) вы хотите разместить строку "Words" и где (снова в ОЗУ или во флеше?) хотите разместить на нее указатель. Когда вам предлагают решение, в котором строка находится во флеше, а указатель в ОЗУ, то воротите нос. А что вам нравится?

     

    Существуют 4 возможности:

    1) Строка во флеше, указатель в ОЗУ.

    2) Строка во флеше, указатель тоже во флеше.

    3) Строка в ОЗУ, указатель во флеше.

    4) Строка в ОЗУ, указатель тоже в ОЗУ.

    Вариант № 1 вы отвергли за понятность ежу, остаются еще 3 варианта. Вас как, по частям дожимать или сами признаетесь, чего вам надо?

    Я веду речь за стандарт Си.

    У Керниган & Ритчи говорится, в главе 5.5 , что по мимо записи

    char pm[] ="Words";
    есть еще вариант
    char *pm= "Words";

    В последнем случае получается не массив, а простая, строковая переменная в памяти с указателем на нее.

     

    Я естественно хочу разместить и указатель и саму строку в flash

    __flash char * __flash pm="Words"

    в такой записи, компилятор все проглатывает, но слово все равно размещается в ОЗУ.

    Если записывать

    char __flash * __flash pm="Words"

    Компилятор ругается:

    Error[Pe144]: a value of type "char *" cannot be used to initialize an entity of type "char __flash *"

    Мне просто хочется понять, как делать такое объявление указателя и размещать строку и указатель на нее в flash.

     

     

  13. Пишите так:

    __flash char pm[]="Words";

    а звёздочков не надо. :)

    Так я же писал, что это и ежу понятно.

    Хочется с описанной мной ситуацией разобраться. Как инициализировать переменную.

    Как я понимаю, компилятору не нравится, что я пихаю в переменную во flash данные не из flash

    как компилятору это объяснить.

  14. Добрый день!

     

    Никак не могу одолеть задачку.

    В си возможна конструкция

     

    char *pm="Words";

     

    Т.е указатель на это слово, по которому можно ссылаться на это слово.

     

    Попробовал реализовать это в IARavr

     

    __flash char * __flash pm="Words";

    Ругается на не соответствие типов памяти. Т.е компилятор говорит, что я пытаюсь тип char скормить __flash char

     

    Если сделать так:

     

    __flash char *pm="Words";

    В таком случае все естествен пихается в озу, но такая конструкция проходит.

     

    P.S.

    Понятно, что проблему можно решить через массив, но хочется разобраться именно с такой конструкцией.

  15. У вас не совпадают типы массивов. Ваши исходные массивы (m?) являются 2х мерными массивами (во FLASH). Соответственно bdz должен быть массивом указателей на 2х мерные массивы во FLASH'е, а не массивом указателей на unsigned во FLASH'е

    Спасибо!

  16. Массив bdz по Вашей задумке должен содержать указатели на что? На массивы m3, m4, m7 ? Вспомните - что такое многомерный массив? В конце концов Вам, наверное, всего то и нужно;[/code]Или опять: что-то не так? Что же Вы хотите?

    Спасибо. Именно так и надо, только я почему то начитавшись книжек подумал, что это не правильно. Сейчас понял, что так же тоже правильно. Только с точки зрения памяти это немного расточительно по моему.

    Через ссылки будет будет по экономичней но меня в принципе и такой вариант устраивает полностью или я не прав??

     

     

    upd: а может Палыч дело говорит и оно вообще вам не надо?

    Палыч действительно прав, но теперь уже хочется разобраться до конца как такой вариант реализовывать.. Два дня убил на него.

    unsigned int __eeprom *bdz[]={&m3,&m4,&m7};

    И

    unsigned int __eeprom *bdz[]={*m3,*m4,*m7};

    Оба работают. Если я например обращаюсь так

    temp=*bdz[1]

    Получаю значение 0.0 из массива m4. Если пишу так:

    temp=*(bdz[1]+3)

    То соответственно могу сместить адрес и получить ячейку..

    При любой записи при организации ссылочного массива результат одинаковый???

     

    Может вам надо так:

    ?

     

     

    Если же вам нужен именно оригинал, то

    [или без typedef

    Попробовал без typedef. Не прошло.

     

    Если не сложно в двух словах поясните что я делал не так в данном решении. Очень хочется разобраться в ссылках и массивах. И если не сложно ткните какие разделы у K&R проработать...

    И еще вопрос возник.

    Я делаю инициализацию массива. В настройках IAR говорю, что бы он мне сделал файл с содержимым eeprom. Он мне это делает, но когда я в него смотрю, то там всякая ерунда. Т.е какие то значения появляются, но они не соответствую заданным.

    При подключении этого файла к модели в протеусе, от туда читается всякая ерунда.. В чем дело??

    P.S. Вывод фала eeprom настраивал как тут много раз писалось

    -y(CODE)
    -Ointel-extended,(XDATA)=$EXE_DIR$\$PROJ_FNAME$_data.bin

  17. Никак не могу одолеть следующую проблему:

    Необходимо создать несколько многомерных массивов, а для удобства работы с ними создать массив с ссылками на них:

    Создаю:

    __eeprom unsigned int m3 [10][2]; 
    __eeprom unsigned int m4 [10][2]; 
    __eeprom unsigned int m7 [10][2]; 
    unsigned int __eeprom *bdz[]={*m3,*m4,*m7};

    Теперь хочу обратится например к m4 строке 3 ячейке 0.

    Типа temp=bdz[1][3][0]

    Пишу

    unsigned int temp;
    int main( void )
    {
    temp=*(bdz[2]{[3][0]});
    }

    Компилятор ругается, пробовал по всякому. Много раз перечитывал K&R главу 5 . Указатели и массивы. В общем понимание есть, но как это правильно описать хоть убей не могу понять.. Хоть на case это делай...

  18. Ну и каша у Вас в голове "указатель unsigned int" это и есть совершенно САМОСТОЯТЕЛЬНЫЙ тип данных и будет занимать столько, сколько нужно на Вашей платформе и не Ваше дело в общем случае каков его размер.

     

    bdz НЕ трехмерный массив. Это массив указателей на двумерные массивы из unsigned int.

    Учитесь читать сообщения компилятора. И главное думать, зачем делать это через анальное отверстие.

     

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

     

     

    Я Си изучаю еще только вторую неделю а с IAR ковыряюсь третий день. Столько информации, что еще все в голове не систематизировалось...

    Так что не судите строго за нелепые вопросы.

  19. Что "'это" и что "не нужно" для указателя unsigned char я совсем не понял :(.

    Я имел в виду тип данных для хранения указателей unsigned int. Можно ли использовать char?

     

    Теперь не могу разобраться как при помощи bdz получить данные из нужнго мне массива..

    Например мне нужно записать данные в строку 5 ячейку 1 m4 их temp

    ...

    bdz[1][4][1]=temp;

    Работать не хочет??

  20. хотение надо уметь описать словами:

    __eeprom unsigned int __eeprom *bdz[] = { m3[0], m4[0], m7[0] };

     

    но для читабельности я бы так то-же самое описал:

    __eeprom unsigned int __eeprom *bdz[] = { &m3[0][0], &m4[0][0], &m7[0][0] };

     

     

    С вероятностью 95% это очень неудачная мысль хранить в EEPROM рабочие указатели. EEPROM это не RAM.

    Т.е это лучше в озу хранить??

    И как я понимаю для указателя unsigned char не нужно??

  21. Что не так, написано черным по белому ТРИ раза подряд.

    1) указатель на EEPROM и указатель на RAM это разные указатели.

    2) имя двухмерного массива есть указатель на одномерный массив а не на элемент одномерного массива.

     

    Думать. Читать K&R и думать.

     

     

    Оба СОВСЕМ неверные :(.

     

    K&R читаю постоянно, но пока не все понятно..

     

    Мне нужно организовать три массива для сохранения трех типов параметров.

    Хочу создать массив с указателями, что бы можно было было работать с массивами через указатели...

  22. Переполз на IAR и опять те же грабли..

    делаю так:

    __eeprom unsigned int m3 [10][2];
    __eeprom unsigned int m4 [10][2];
    __eeprom unsigned int m7 [10][2];
    __eeprom unsigned int *bdz[]={m3,m4,m7};

    Error[Pe144]: a value of type "unsigned int __eeprom (*)[2]" cannot be used to initialize an entity of type "unsigned int *" 
    Error[Pe144]: a value of type "unsigned int __eeprom (*)[2]" cannot be used to initialize an entity of type "unsigned int *"  
    Error[Pe144]: a value of type "unsigned int __eeprom (*)[2]" cannot be used to initialize an entity of type "unsigned int *"  
    Error while running C/C++ Compiler

     

    Что не так??

  23. Собственно, это CV - чёрти что, а не транслятор языка Си... Как раз IAR - в соответствии со стандартом, так что, любая хорошая книга (например, Керниган и Ричи) вполне помогут с освоением языка. Другое дело: микроконтроллеры имеют свои особенности и, поэтому, язык дополнен конструкциями, специфичными для разных трансляторов (отдано это на "откуп" разработчикам трансляторов, а они делают по-своему: при переходе от одного транслятора к другому могут возникнуть трудности - лучше сразу начинать с "серьезного" транслятора).

    Ну да, пишут, что IAR разрабатывался совместно с производителями.. По первым граблям, на которые я наступил тоже стало понятно что CV это язык пионерии.. Мигающие светодиоды и данные с датчика считать в простую можно, а как только что то серьезное, то тут же бяки выползают...

    В общем будем изучать IAR...

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