Category: software

  • Creating .libs for kicad/eeschema semiautomatically

    Well, everyone has to eventually make one. Since we have a cool online utility from C. Rohrbacher http://kicad.rohrbacher.net/quicklib.php This is quite simple. Just fill in all the pins, orient them and you are ready to go…
    But if there are over 200 pins,this is getting tiresome. When I was making a lib for at91rm9200 I got tired at 30th pin. And there are 208 of them and it’s quite easy to screw up… So I got a nice idea. Unfortunately, I didn’t find C. Rohrbacher’s email on his site, as well as I saw no sources of the utility. So, it was time for a hackish solution.

    We’ll need:

    bash (Oh, yeah!)
    xdotool
    okular (Any other PDF viewr thatcan select text will do)

    Step one.
    Open the datasheet, find the pin list, select the pins:

    Step two.
    Copypaste them into a blank file. They should be strictly ordered

    Step three
    Now a little black magic. Save the following bash script somewhere:

    #!/bin/bash
    write_pin()
    {
    xdotool type "$1"
    xdotool key Tab Tab Tab Tab Tab Tab
    }
    
    if [ $# -lt 1 ]; then
      echo "Usage: fill-pins filename"
      exit
    fi
    
    echo "Starting in 5 seconds..."
    sleep 5
    
    cat $1|while read line; do
      write_pin "$line"
    done
    

    chmod+x, And give it the file with pins you’ve madeearlier. You have 5 seconds to open the browser on page withpins and select PIN1.
    The script will do everything by itself. Just relax – it looks pretty funny

    And by the way, kill all instances of skype, icq, kopete, irc – these things tend to steal focus from the browser and screw thing up.

  • Готовим фотошаблоны печаток из kicad’a при помощи latex

    Если вы начинали со Sprint Layout, то наверное помните диалог печати, который позволяет совместить на листе сколько-то копий одной и той же платы. К сожалению, одной единственной, или одного и того же слоя.
    В kicad’е нет и этого. Если плата здоровая, а изготавливать с первого раза уже получается почти всегда, то это нормально. Но если вдруг надо изготовить сразу пачку мелких плат, или отпечатать сразу два слоя рядом… В общем, облом.
    Посему, начал я думать над каким-нибудь костылем. kicad отлично выводит как в gerber (для производства) так и в postscript (для кустарного производства). Последнее-то мне и приглянулось.
    Рамку смело выкидываем в реактор, она нам не понадобится.
    После выведения в postscript мы имеем несколько .ps файликов, с каждым слоем. Каждый занимает A4 страницу.
    Первым делом надо их перегнать во что-то удобоваримое. Сначала я перегнал их в png imagemagic’ом и увидел здоровенный холст на страницу размером. Не вариант, ибо bounding box оно не считает, и картинка выйдет во весь лист. На помощь пришла маленькая утилитка ps2eps. Она создает векторное eps изображение из постсрипта и обсчитывает тот самый bounding box. Иными словами, в LaTeX документ можно будет эту картинку воткнуть тупо при помощи заклинания

    \includegraphics[scale=1]{jtagice-1.eps}

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

    Теперь, остается только автоматизировать процесс.
    Немного покумекав, я соорудил вот такой костыль.
    В виде аргументов скармливаем:
    1. Как обозвать проект в первой и единственной строчки текста.
    2. Сколько раз изпользовать каждый из файлов
    3. Сами файлики. Много их…

    Скрипт требует наличие LaTeX’a, а в конце запускает окуляр. Последние строчки скрипта можно подкрутить по вкусу, но смысл изменится врядли. В идеале, конечно, можно было подкрутить оформление. Была мысля соорудить рамку по ЕСКД ради прикола, но она много места на листе занимает, так что отправилась она прямиком в реактор.

    #!/bin/bash
    # This program is free software. It comes without any warranty, to
    # the extent permitted by applicable law. You can redistribute it
    # and/or modify it under the terms of the Do What The Fuck You Want
    # To Public License, Version 2, as published by Sam Hocevar. See
    # http://sam.zoy.org/wtfpl/COPYING for more detail
    
    usage()
    {
    echo "mkpcb.  (c) 2011, Necromant"
    echo "Generate a printable document out of several postscript images. "
    echo "usage: mkpcb project_name n file1.ps file2.ps ..."
    echo "where n is the number of times to use each file"
    echo "Great for exporting PCBs from kicad for batch printout"
    }
    
    if [ "$#" -lt "3" ]; then
    echo "Need moar args"
    usage
    exit 1
    fi
    
    if [ "$1" == "--help" ]; then
    usage
    exit 1
    fi
    
    gen_latex()
    {
    cat << EOF
    \documentclass[a4paper,14pt]{report} %размер бумаги устанавливаем А4, шрифт 12пунктов
    \usepackage[T2A]{fontenc}
    \usepackage{extsizes}
    \usepackage{listings}
    \usepackage{longtable}
    \usepackage{courier}
    \usepackage{tabularx}
    \usepackage{framed}
    \usepackage[utf8]{inputenc}%включаем свою кодировку: koi8-r или utf8 в UNIX, cp1251 в Windows
    \usepackage[english,russian]{babel}%используем русский и английский языки с переносами
    \usepackage{amssymb,amsfonts,amsmath,mathtext,cite,enumerate,float} %подключаем нужные пакеты расширений
    \usepackage[dvips]{graphicx} %хотим вставлять в диплом рисунки?
    \graphicspath{{data/images}}%путь к рисункам
    
    
    \makeatletter
    \renewcommand{\@biblabel}[1]{#1.} % Заменяем библиографию с квадратных скобок на точку:
    \makeatother
    
    %\usepackage{geometry} % Меняем поля страницы
    %\geometry{left=2cm}% левое поле
    %\geometry{right=1.5cm}% правое поле
    %\geometry{top=1cm}% верхнее поле
    %\geometry{bottom=2cm}% нижнее поле
    \usepackage[a4paper,left=30mm,right=15mm,top=25mm,bottom=25mm]{geometry}
    
    \renewcommand{\theenumi}{\arabic{enumi}}% Меняем везде перечисления на цифра.цифра
    \renewcommand{\labelenumi}{\arabic{enumi}}% Меняем везде перечисления на цифра.цифра
    \renewcommand{\theenumii}{.\arabic{enumii}}% Меняем везде перечисления на цифра.цифра
    \renewcommand{\labelenumii}{\arabic{enumi}.\arabic{enumii}.}% Меняем везде перечисления на цифра.цифра
    \renewcommand{\theenumiii}{.\arabic{enumiii}}% Меняем везде перечисления на цифра.цифра
    \renewcommand{\labelenumiii}{\arabic{enumi}.\arabic{enumii}.\arabic{enumiii}.}% Меняем везде перечисления на цифра.цифра
    \renewcommand{\lstlistingname}{Листинг \No}
    \renewcommand{\baselinestretch}{1.25}
    
    %\addtocounter{chapter}{0} % не хочу нумеровать главы
    %\setcounter{secnumdepth}{-1} % глубина оглавления
    
    
    
    
      
    
    \begin{document}
    EOF
    echo "Plots for Project $1 ($2 pieces each)\\"
    echo ""
    echo ""
    COUNT=$2
    shift
    shift
    
    ps2eps $*
    
    while [ "$COUNT" -gt "0" ]; do
    for plot in $*; do
    echo "\includegraphics[scale=1]{`basename $plot .ps`.eps}"
    let COUNT-=1
    #\includegraphics[scale=1]{2.eps}  
    
    #%\includegraphics[scale=1]{jtagice-1.eps}  
    #%\includegraphics[scale=1]{jtagice-1.eps}  
    done 
    done
    
    echo "\end{document}"
    }
    
    
    gen_latex $* > output.tex
    latex output.tex
    okular output.dvi