domingo, 24 de septiembre de 2017

Baricentro de un triangulo escaleno (geometría analítica)



Recuperando un ATmega48PA con USBASP y AVRBur-o-matic en windows

Bueno sucede que un estudiante me dijo que tenia 3 circuitos atmega48pa que no los podia programar, y la cuestion es que se hizo bolas con los FUSES y por otra cosa que me dijo, habia conectado de forma incorrecta los micros.

En esta maquina desde la que escribo cuento con el programa AVRBurn-o-matic que es una interfaz para el AVRDUDE que viene con winAVR, sin embargo aqui no teniada dado de alta la programacion del atmega48pa, solo la del atmega48, los cuales tienen diferentes "signatures"

Como segurantemen en los fuses habia un problema con el socilador, lo que hago es poner un cristal de cualquier valor (que no sea mayor a 16MHz) en las terminales PB7 y PB6 con sus respectivos capacitores.

en cuanto al software hay que editar el archivo que se encuentra en C:/winavr/bin/avrdude.conf al agregar las siguientes lineas (http://electronics.stackexchange.com//questions/3721/avrdude-and-atmega48pa)

#------------------------------------------------------------
# ATmega48PA
#------------------------------------------------------------
part
    id               = "m48pa";
    desc             = "ATMEGA48PA";
     has_debugwire = yes;
     flash_instr   = 0xB6, 0x01, 0x11;
     eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
                     0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
                     0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode   = 0x59;
    signature        = 0x1e 0x92 0x0a;
    pagel            = 0xd7;
    bs2              = 0xc2;
    chip_erase_delay = 45000;
    pgm_enable       = "1 0 1 0  1 1 0 0    0 1 0 1  0 0 1 1",
                       "x x x x  x x x x    x x x x  x x x x";

    chip_erase       = "1 0 1 0  1 1 0 0    1 0 0 x  x x x x",
                       "x x x x  x x x x    x x x x  x x x x";

    timeout        = 200;
    stabdelay        = 100;
    cmdexedelay        = 25;
    synchloops        = 32;
    bytedelay        = 0;
    pollindex        = 3;
    pollvalue        = 0x53;
    predelay        = 1;
    postdelay        = 1;
    pollmethod        = 1;

    pp_controlstack     =
    0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
    0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
    0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
    0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay    = 100;
    progmodedelay       = 0;
    latchcycles         = 5;
    togglevtg           = 1;
    poweroffdelay       = 15;
    resetdelayms        = 1;
    resetdelayus        = 0;
    hvleavestabdelay    = 15;
    resetdelay          = 15;
    chiperasepulsewidth = 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    memory "eeprom"
        paged           = no;
        page_size       = 4;
        size            = 256;
        min_write_delay = 3600;
        max_write_delay = 3600;
        readback_p1     = 0xff;
        readback_p2     = 0xff;
    read            = "  1   0   1   0      0   0   0   0",
                          "  0   0   0   x      x   x   x   x",
                          " a7  a6  a5  a4     a3  a2  a1  a0",
                          "  o   o   o   o      o   o   o   o";

    write           = "  1   1   0   0      0   0   0   0",
                          "  0   0   0   x      x   x   x   x",
                          " a7  a6  a5  a4     a3  a2  a1  a0",
                          "  i   i   i   i      i   i   i   i";

    loadpage_lo    = "  1   1   0   0      0   0   0   1",
              "  0   0   0   0      0   0   0   0",
              "  0   0   0   0      0   0  a1  a0",
              "  i   i   i   i      i   i   i   i";

    writepage    = "  1   1   0   0      0   0   1   0",
              "  0   0   x   x      x   x   x   x",
              " a7  a6  a5  a4     a3  a2   0   0",
              "  x   x   x   x      x   x   x   x";

    mode        = 0x41;
    delay        = 5;
    blocksize    = 4;
    readsize    = 256;
      ;
    memory "flash"
        paged           = yes;
        size            = 4096;
        page_size       = 64;
        num_pages       = 64;
        min_write_delay = 4500;
        max_write_delay = 4500;
        readback_p1     = 0x00;
        readback_p2     = 0x00;
        read_lo         = "  0   0   1   0    0   0   0   0",
                          "  0   0   0   0    0 a10  a9  a8",
                          " a7  a6  a5  a4   a3  a2  a1  a0",
                          "  o   o   o   o    o   o   o   o";

        read_hi         = "  0   0   1   0    1   0   0   0",
                          "  0   0   0   0    0 a10  a9  a8",
                          " a7  a6  a5  a4   a3  a2  a1  a0",
                          "  o   o   o   o    o   o   o   o";

        loadpage_lo     = "  0   1   0   0      0   0   0   0",
                          "  0   0   0   x      x   x   x   x",
                          "  x   x   x  a4     a3  a2  a1  a0",
                          "  i   i   i   i      i   i   i   i";

        loadpage_hi     = "  0   1   0   0      1   0   0   0",
                          "  0   0   0   x      x   x   x   x",
                          "  x   x   x  a4     a3  a2  a1  a0",
                          "  i   i   i   i      i   i   i   i";

        writepage       = "  0   1   0   0      1   1   0   0",
                          "  0   0   0   0      0 a10  a9  a8",
                          " a7  a6  a5   x      x   x   x   x",
                          "  x   x   x   x      x   x   x   x";

    mode        = 0x41;
    delay        = 6;
    blocksize    = 64;
    readsize    = 256;
      ;

    memory "lfuse"
        size            = 1;
        min_write_delay = 4500;
        max_write_delay = 4500;
        read            = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0",
                          "x x x x  x x x x   o o o o  o o o o";

        write           = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0",
                          "x x x x  x x x x   i i i i  i i i i";
      ;

    memory "hfuse"
        size            = 1;
        min_write_delay = 4500;
        max_write_delay = 4500;
        read            = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0",
                          "x x x x  x x x x   o o o o  o o o o";

        write           = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0",
                          "x x x x  x x x x   i i i i  i i i i";
      ;

    memory "efuse"
        size            = 1;
        min_write_delay = 4500;
        max_write_delay = 4500;
        read            = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0",
                          "x x x x  x x x x   x x x x  x x x o";

        write           = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0",
                          "x x x x  x x x x   x x x x  x x x i";
      ;

    memory "lock"
        size            = 1;
        min_write_delay = 4500;
        max_write_delay = 4500;
        read            = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0",
                          "x x x x  x x x x   x x o o  o o o o";

        write           = "1 0 1 0  1 1 0 0   1 1 1 x  x x x x",
                          "x x x x  x x x x   1 1 i i  i i i i";
      ;

    memory "calibration"
        size            = 1;
        read            = "0  0  1  1   1  0  0  0   0  0  0  x   x  x  x  x",
                          "0  0  0  0   0  0  0  0   o  o  o  o   o  o  o  o";
      ;

    memory "signature"
        size            = 3;
        read            = "0  0  1  1   0  0  0  0   0  0  0  x   x  x  x  x",
                          "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
      ;
  ; 

Pero esto no basta, ya que el AVRBURN-o-matic accesa a su menu desde un archivo XML que se encuentra en C:\Program Files (x86)\AVR Burn-O-Mat/AVR8_Burn_O_Mat_config.xml

y se agregan las siguientes lìneas

           
     
     
     
     
     
     
     
     

     
     
     
     
     
     
     
     

     
     
     
     
     
     
     
     

     
       
       
       
       
       
       
       
     


     

   


Ejemplo de uso de condiciones no importa en Mapas de Karnaugh de 4 variables




jueves, 25 de mayo de 2017

icestorm, apio-ide y icestudio en Fedora 25

Animado por la adquisición de una tarjeta icestick, así como lo que ha compartido @obijuan_cube sobre el mundo de las FPGA's Libres, me he animado a realizar la instalación del software para realizar las prácticas para mis estudiantes de electrónica digital del ITS Teziutlán, naturalmente apoyado del material que en FPGAWARS existe.

No me queda mas que decir que, la instalación es muy cómoda para el sistema Fedora 25, en relación al iceStorm de Clifford Wolf y Mathias Lasser, las instrucciones para la instalación es muy simple, tal cual están los comandos en su sitio (git clone, make y make install), funcionan perfectamente. Por otro lado, solo unos pequeños traspiés en la instalación de ATOM,  el IDE para trabajar con el ecosistema APIO, que para FEDORA, se debe descargar el RPM y realizar la instalación por medio de dnf

sudo dnf install ./atom.x86_64.rpm

ademas, para que funcione adecuadamente la simulación en APIO-IDE, es necesario realizar un link simbólico a la librerias del bzip2 de la forma siguiente

sudo ln -s /usr/lib64/libbz2.so.1.0.6 /usr/lib64/libbz2.so.1.0

Para el ICESTUDIO, elegi usar el appimage x64 que viene en formato .ZIP, solo se trata de descomprimir y ejecutar, creo mas sencillo no puede ser!!!

Les dejo algunos pantallazos


Referencias
http://www.clifford.at/icestorm/
https://github.com/FPGAwars/apio-ide/wiki
https://atom.io/
https://fedoramagazine.org/install-atom-fedora/
https://github.com/wireapp/wire-desktop/issues/532
https://github.com/FPGAwars/icestudio
https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki