Autor Tema: Electroestimulador + generador de funciones + inversor DC-AC  (Leído 7157 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ktuluapalo

  • PIC12
  • **
  • Mensajes: 82
Electroestimulador + generador de funciones + inversor DC-AC
« en: 10 de Junio de 2011, 09:46:06 »
Ya llevo mucho tiempo en la sombra absorviendo conocimientos sin aportar nada a este foro (¡el mejor de PICs!).

He fabricado este cacharro, un inversor DC/AC que pega calambrazos...
Con este hardware se pueden generar todo tipo de ondas, es como una salida analógica de mucha potencia.

El software que tiene el PIC ahora mismo está orientado a dar calambres (electroestimulador).
Los pulsos son completamente configurables (en retardo y cantidad de pulsos), y se puede configurar la frecuencia hasta un máximo de 1,03kHz.
Funciona con un pic 18F2420 sin reloj externo.
El trafo le he sacado de un cargador de Nokia (al que le he quitado unas pocas vueltas en el secundario original para que al conectarle al revés dé más tensión en el primario)
Y para conseguir la onda sinusoidal necesaria he usado un amplificador operacional de potencia en configuración sumador que tenía por casa (LM675) por cierto no se calienta casi nada, no necesita disipador (ni tan siquiera le he atornillado a la placa).
Usa 8 pilas AAA y genera algo más de 200Vpp (100Vca) (aunque ahí se distorsiona la onda por saturarse el operacional)











Y ahora a soltar calambrazos por ahí...

Si alguien está interesado en hacerle puedo dar datos de las resistencias usadas y dejar el fichero .HEX del pic (además de la ayuda que necesiteis).

Se lo dedico a 3:
- vszener por sus "Ejemplitos en C para 16F648A"  http://www.todopic.com.ar/foros/index.php?topic=4530.0
- Redpic por su página web: http://picmania.garcia-cuervo.net/ Sin desperdicio. Me la sé de memoria. Excelente.
- Suky: por su librería FAT y toda su contribución.
Gracias maestros por todo!

Un saludo!
e^(i·pi)+1=0

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Electroestimulador + generador de funciones + inversor DC-AC
« Respuesta #1 en: 10 de Junio de 2011, 11:25:51 »
Interesante proyecto! Gracias por compartirlo!  :) Veo esas resistencias y me pongo de los pelos!  :D Ya con las 1206 sufro para soldarlas :undecided:


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado ktuluapalo

  • PIC12
  • **
  • Mensajes: 82
Re: Electroestimulador + generador de funciones + inversor DC-AC
« Respuesta #2 en: 10 de Junio de 2011, 14:51:53 »
Suky: estas creo que son 0805, desde que me compré el soldador:

todo se facilitó bastante. Aun así cuesta.
Un saludo!

Sobre el electroestimulador:
No me hago RESPONSABLE DE NADA.
Simplemente lo expongo para que me aporten ideas. Que nadie copie nada.
Si alguien lo copia que sea bajo su responsabilidad.
No quiero que nadie se electrocute y luego me pidan responsabilidades...

Dicho esto, si teneis alguna duda de lo que sea me lo decís.

Aquí os dejo todo:

El código en C:

Código: [Seleccionar]

///////////////////////////////////////////////////
// Electrocutador by ktuluapalo                  //
// No usar sobre personas ni animales.           //
// No usar nunca.                                //
// PELIGRO DE MUERTE!!!!!                        //
///////////////////////////////////////////////////


#include <18F2420.h>
#device adc=8
//#device *=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC_IO                    //Internal RC Osc
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES NOMCLR                   //Master Clear pin enabled
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=32000000)

int8 sin[]={127, 129, 131, 133, 136, 138, 140, 142, 144, 147, 149, 151, 153, 155,
 158, 160, 162, 164, 166, 168, 170, 172, 174, 177, 179, 181, 183, 185, 187, 189,
 191, 192, 194, 195, 197, 199, 201, 203, 205, 206, 208, 210, 211, 213, 215, 216,
 218, 219, 221, 222, 224, 225, 227, 228, 229, 231, 232, 233, 234, 235, 237, 238,
 239, 240, 241, 242, 243, 244, 244, 245, 246, 247, 247, 248, 249, 249, 250, 250,
 251, 251, 252, 252, 252, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 253,
 253, 253, 253, 253, 252, 252, 252, 251, 251, 250, 250, 249, 249, 248, 247, 247,
 246, 245, 244, 244, 243, 242, 241, 240, 239, 238, 237, 235, 234, 233, 232, 231,
 229, 228, 227, 225, 224, 222, 221, 219, 218, 216, 215, 213, 211, 210, 208, 206,
 205, 203, 201, 199, 197, 195, 194, 192, 191, 189, 187, 185, 183, 181, 179, 177,
 174, 172, 170, 168, 166, 164, 162, 160, 158, 155, 153, 151, 149, 147, 144, 142,
 140, 138, 136, 133, 131, 129, 127, 125, 123, 120, 118, 116, 114, 111, 109, 107,
 105, 103, 100, 98, 96, 94, 92, 90, 88, 86, 83, 81, 79, 77, 75, 73, 71, 69, 67,
 65, 64, 62, 60, 58, 56, 55, 53, 51, 49, 47, 46, 44, 42, 41, 39, 37, 36, 34, 33,
 31, 30, 28, 27, 26, 24, 23, 22, 21, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9,
 8, 8, 7, 6, 6, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15,  16,
 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 30, 31, 33, 34, 36, 37, 39, 41, 42, 44,
 46, 47, 49, 51, 53, 55, 56, 58, 60, 62, 64, 65, 67, 69, 71, 73, 75, 77, 79, 81,
 83, 86, 88, 90, 92, 94, 96, 98, 100, 103, 105, 107, 109, 111, 114, 116,  118,
 120, 123, 125};
//                  tFus 1on  2on  2oms 3on  3oms 4oms  volt
int16 configdata[]={0,   100,  10,   250, 4,  500, 2000,0};
#include <flex_lcd.c>

//Input:
// - Más:   b7
// - Menos: b6
// - Menú:  a0

//Output:
// - Al amplificador operacional: port_C entero
// - LCD:
//    - rs: b0
//    - e:  b1
//    - d4: b2
//    - d5: b3
//    - d6: b4
//    - d7: b5
#DEFINE mas pin_b7
#DEFINE menos pin_b6
#DEFINE menu pin_a0
void lcdclr(int lin)
{
switch(lin){
case 1: lcd_gotoxy(1,1); printf(lcd_putc,"                "); break;
case 2: lcd_gotoxy(1,2); printf(lcd_putc,"                "); break;
default: lcd_gotoxy(1,1); printf(lcd_putc,"                ");
lcd_gotoxy(1,2); printf(lcd_putc,"                "); break;
}
}
void config()
{
//1ONDAS(NUM) XXXX
//2ONDAS(NUM) XXXX
//2ONDAS(MS)  XXXX
//3ONDAS(NUM) XXXX
//3ONDAS(MS)  XXXX
//4ONDAS(MS)  XXXX
int sel=0;
int1 cambiar=false;
lcdclr(3);
delay_ms(500);
while(sel!=10)
{
delay_ms(100);                  //1234567890123456
lcd_gotoxy(1,1); printf(lcd_putc,"Configuracion:");
switch(sel)
{                                                  //1234567890123456
case 0: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"1.- TFREC(US)"); break;
case 1: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"2.- 1ONDAS(NUM)"); break;
case 2: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"3.- 2ONDAS(NUM)"); break;
case 3: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"4.- 2ONDAS(MS)"); break;
case 4: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"5.- 3ONDAS(NUM)"); break;
case 5: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"6.- 3ONDAS(MS)"); break;
case 6: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"7.- 4ONDAS(MS)"); break;
case 7: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"8.- CTE VOLTIOS"); break;
case 8: lcdclr(2); lcd_gotoxy(1,2); printf(lcd_putc,"GUARDAR CAMBIOS"); break;
default: sel=0; break;
}
if(input(menu) && sel<7) {cambiar=!cambiar; lcd_gotoxy(1,1); printf(lcd_putc,"*"); while(input(menu)) delay_ms(50);}
if(input(menos) && !cambiar && sel<8) {sel++; delay_ms(200);}
if(input(mas) && !cambiar && sel>0) {sel--; delay_ms(200);}
if(input(menu) && sel==8) sel=10;
if(input(menu) && sel==7) {lcd_gotoxy(1,1); printf(lcd_putc,"*"); while(input(menu)) delay_ms(50); lcdclr(2); lcd_gotoxy(1,2);
                             printf(lcd_putc,"DANGER! DANGER!");
                           while(!input(menu))
                            {
                             if(configdata[7]>359) configdata[7]=127;
                             lcdclr(1);
                             lcd_gotoxy(1,1);
                             printf(lcd_putc,"%Lu",configdata[7]);
                             if(input(mas) && configdata[7]<359) configdata[7]++;
                             if(input(menos) && configdata[7]>0) configdata[7]--;
                             output_c(configdata[7]);
                             delay_ms(200);
                            }
                            output_c(127);
                            lcd_gotoxy(1,1); printf(lcd_putc,"*");
                            while(input(menu)) delay_ms(50);
                           }
if(cambiar) { while(!input(menu)) //al presionar menu se activan a la vez esta y la del cambiar=!cambiar;
 {
 lcdclr(1);
 lcd_gotoxy(1,1);
 printf(lcd_putc,"%Lu",configdata[sel]);

 switch(sel) //Una velocidad para cada modo
 {
  case 0: delay_ms(200); break;
  case 1: delay_ms(50); break;
  case 2: delay_ms(100); break;
  case 3: delay_ms(50); break;
  case 4: delay_ms(200); break;
  case 5: delay_ms(50); break;
  case 6: delay_ms(5); break;
  default:  break;
 }
 if(input(mas)) configdata[sel]++;
 if(input(menos)) configdata[sel]--;
 } }
}



}


void run()
{
int16 i,i1,i2,i3;
lcdclr(3);                      //1234567890123456
lcd_gotoxy(1,1); printf(lcd_putc,"DANGER! DANGER!");
lcd_gotoxy(1,2); printf(lcd_putc,"HIGH VOLTAGE!!");
//                    tFus 1on  2on  2oms 3on  3oms 4oms
//int16 configdata[]={0,   100,   5,   5,   2,  100, 600};
//                    0      1    2    3    4     5    6
while(!input(menu)) { //4ondas hasta que se apriete menu
for(i3=0;i3<configdata[4];i3++) //3ondas
{
 for(i2=0;i2<configdata[2];i2++) //2ondas
 {
  for(i1=0;i1<configdata[1];i1++) //1ondas
  {
   if(configdata[0]==0) for(i=0;i<360;i++) output_c(sin[i]);
   else { for(i=0;i<360;i++) {output_c(sin[i]); delay_us(configdata[0]);} }
   if(input(menu)) i1=configdata[1];
  }
  delay_ms(configdata[3]);
  if(input(menu)) i2=configdata[2];
 }
 delay_ms(configdata[5]); //retraso de la 3onda
 if(input(menu)) i3=configdata[3];
}
delay_ms(configdata[6]); //retraso de la 4onda
}

while(!input(menu)) { for(i=0;i<360;i++) output_c(sin[i]); }
}




void main()
{
int gemma=0;
setup_oscillator(OSC_32MHZ);
lcd_init();
output_c(127);

while(true)
{
output_c(127); //así el operacional saca 0v y no se calienta
switch(gemma)
{
                                                   //1234567890123456
case 0: //Menú general
        lcdclr(3); lcd_gotoxy(1,1); printf(lcd_putc,"Menu: [+] RUN");
                   lcd_gotoxy(1,2); printf(lcd_putc,"      [-] CONFIG");
        if(input(mas)) gemma=1;
        if(input(menos)) gemma=2;
        delay_ms(200);
        break;
case 1: //RUN
        delay_ms(500);
        run();
        gemma=0;
        break;
case 2: //CONFIG
        delay_ms(500);
        config();
        gemma=0;
        break;
default: gemma=0; break;
}
}

}


Los valores del array sin[] han sido adaptados a los valores exactos de mis resistencias (no es un seno exacto y ya está) pero esto no tiene que influir demasiado.


El .hex
Código: [Seleccionar]
:1000000087EF05F0F76A140FF66E000EF72209006D
:10001000F5501200280C010620202020202020204E
:100020002020202020202020000020202020202010
:100030002020202020202020202000002020202000
:1000400020202020202020202020202000002020F0
:1000500020202020202020202020202020200000E0
:10006000436F6E66696775726163696F6E3A00000F
:10007000312E2D2054465245432855532900322E07
:100080002D20314F4E444153284E554D2900332EDB
:100090002D20324F4E444153284E554D2900342EC9
:1000A0002D20324F4E444153284D53290000352E08
:1000B0002D20334F4E444153284E554D2900362EA6
:1000C0002D20334F4E444153284D53290000372EE5
:1000D0002D20344F4E444153284D53290000382ED3
:1000E0002D2043544520564F4C54494F53004755FB
:1000F00041524441522043414D42494F53004441F3
:100100004E474552212044414E474552210044412B
:100110004E474552212044414E474552210048490F
:10012000474820564F4C54414745212100004D651A
:100130006E753A205B2B5D2052554E00202020200A
:1001400020205B2D5D20434F4E4649470000010EA5
:10015000EA6E8B0EE96EEF500DE00A0E016E006A3A
:10016000002EFED7012EFBD75F0E006E002EFED7AD
:10017000EF2EF3D7000C010192B102D08A9401D086
:100180008A84939492B302D08A9601D08A869396F9
:1001900092B502D08A9801D08A88939892B702D0FB
:1001A0008A9A01D08A8A939A000093928A82050ED5
:1001B000006E002EFED793928A920001000C93905D
:1001C0008A909F0E006E002EFED700D001018F5343
:1001D00003E093908A8002D093908A9000009392DB
:1001E0008A929039916F0F0E911791C192F100018F
:1001F000C2DF010190510F0B916F926F0001BBDFC5
:10020000000C93908A9093928A920F0E01018B6F4B
:1002100000019DDF01017D6B7D5102080CE3030E9F
:10022000926F0001A8DF050E01018B6F00018FDFC7
:1002300001017D2BF1D7020E926F00019CDF0101BD
:100240007D6B7D51030812E3036A7D510001DADE04
:1002500001017E6F8F6B906F0001B1DF050E010110
:100260008B6F000174DF01017D2BEBD700017DEF67
:1002700008F001018C2D01D003D0400E8D6F01D00C
:100280008D6B010E8B5D8D278D5180098E6F8F6B6D
:10029000906F000194DF000C01018A510C0A0001EB
:1002A00005E0060A0FE0020A15E01BD001018F6B82
:1002B000010E906F000183DF020E01018B6F0001C0
:1002C00046DF17D0010E01018B6F020E8C6F00010B
:1002D000D0DF0FD001018F6B100E906F00016FDF28
:1002E00008D0010E01018F6F8AC190F1000167DF14
:1002F00000D0000C0900F5520CE0F6CF86F1F7CFE4
:1003000087F1F5CF8AF1C8DF86C1F6FF87C1F7FF15
:10031000F1D7000C01018551010A000103E0030A35
:100320000DE019D0010E01018B6F8C6F0001A1DF70
:10033000180EF66E000EF76EDDDF25D0010E0101FE
:100340008B6F020E8C6F000194DF2A0EF66E000E8A
:10035000F76ED0DF18D0010E01018B6F8C6F00019A
:1003600088DF3C0EF66E000EF76EC4DF010E010151
:100370008B6F020E8C6F00017CDF4E0EF66E000E4E
:10038000F76EB8DF00D0000C020E0101865F0CE3AF
:10039000010EEA6E860EE96EEF5006E003D000D043
:1003A00000D00000EF2EFBD70001000C030E01016E
:1003B000856F0001AFDF010E01018B6F8C6F0001B3
:1003C00058DF0E0EF66E010EF76E94DF010E01017E
:1003D0008B6F020E8C6F00014CDF1E0EF66E010E4D
:1003E000F76E88DF928080B0BAD00101846B836B96
:1003F0008451755DD8A0A2D004E17451835DD8B05A
:100400009DD0826B816B8251715DD8A07BD004E15D
:100410007051815DD8B076D0806B7F6B80516F5DFD
:1004200055E303E16E517F5D51E26C531BE16D5367
:1004300019E17E6B7D6B7E51010813E303E17D5171
:1004400067080FE3040E7D25E96E000E7E21EA6E3B
:10045000EFCF85F1946A85C18BFF7D2BD8B47E2BBD
:10046000EAD729D07E6B7D6B7E51010824E303E13E
:100470007D51670820E3040E7D25E96E000E7E2184
:10048000EA6EEFCF85F1946A85C18BFF6DC185F16E
:10049000852B8507D8B406D0FF0E866F000174DF68
:1004A0000101F7D76CC186F100016EDF01017D2BE0
:1004B000D8B47E2BD9D7928080A004D06FC180F1B0
:1004C0006EC17FF17F2BD8B4802BA8D773C185F183
:1004D000852B8507D8B406D0FF0E8B6F000137DE61
:1004E0000101F7D772C18BF1000131DE928080A04B
:1004F00004D071C182F170C181F10101812BD8B4A6
:10050000822B81D777C185F1852B8507D8B406D09A
:10051000FF0E8B6F00011BDE0101F7D776C18BF157
:10052000000115DE928080A004D073C184F172C1F5
:1005300083F10101832BD8B4842B5AD779C185F17B
:10054000852B8507D8B406D0FF0E8B6F0001FFDD29
:100550000101F7D778C18BF10001F9DD43D7928013
:1005600080B01BD001017E6B7D6B7E51010813E3CF
:1005700003E17D5167080FE3040E7D25E96E000E4F
:100580007E21EA6EEFCF85F1946A85C18BFF7D2BCA
:10059000D8B47E2BEAD70001E2D7D0EF08F0EACF3B
:1005A00089F1E9CF88F101018239F009846F84274C
:1005B000E20F856F320F876F82510F0B85278527DA
:1005C0008727E90F866F8627862781390F0B8627B5
:1005D000872786378737871F873781510F0B8727F4
:1005E0008437070E836F0A0E86078727FDE385078A
:1005F0008627FDE384078527FDE383078427FDE342
:10060000010EEA6E830EE96E070E8815889DE926B5
:10061000870EE95CD8B4888DEF50006E08E188BD84
:1006200006D088B915D088B702D0200E03D08887AD
:100630008899300E0026EACF82F1E9CF81F100C01F
:100640008AF1000129DE82C1EAFF81C1E9FF0101CF
:10065000EE5088ADDDD70001000C01017D6B7E916D
:10066000030E856F000156DE020E01017F6FFA0E48
:100670008B6F00016CDD01017F2FF9D77D510A08D6
:10068000D8B442D2640E8B6F000161DD010E01010E
:100690008B6F8C6F0001EDDD600EF66E000EF76E55
:1006A00029DE01017D51000A000114E0010A24E065
:1006B000030A34E0010A44E0070A54E0010A64E056
:1006C000030AD8B473D0010AD8B482D00F0AD8B4C0
:1006D00091D0A2D0020E0101856F00011BDE010E38
:1006E00001018B6F020E8C6F0001C3DD700EF66E80
:1006F000000EF76EFFDD94D0020E0101856F000140
:1007000009DE010E01018B6F020E8C6F0001B1DD5D
:100710007E0EF66E000EF76EEDDD82D0020E010148
:10072000856F0001F7DD010E01018B6F020E8C6FEA
:1007300000019FDD8E0EF66E000EF76EDBDD70D0D1
:10074000020E0101856F0001E5DD010E01018B6FD5
:10075000020E8C6F00018DDD9E0EF66E000EF76EA0
:10076000C9DD5ED0020E0101856F0001D3DD010EEF
:1007700001018B6F020E8C6F00017BDDAE0EF66EF9
:10078000000EF76EB7DD4CD0020E0101856F00013F
:10079000C1DD010E01018B6F020E8C6F000169DD5E
:1007A000BE0EF66E000EF76EA5DD3AD0020E010108
:1007B000856F0001AFDD010E01018B6F020E8C6FA2
:1007C000000157DDCE0EF66E000EF76E93DD28D0D9
:1007D000020E0101856F00019DDD010E01018B6F8D
:1007E000020E8C6F000145DDDE0EF66E000EF76E18
:1007F00081DD16D0020E0101856F00018BDD010E37
:1008000001018B6F020E8C6F000133DDEE0EF66E70
:10081000000EF76E6FDD04D001017D6B000100D08A
:10082000928080A01BD001017D510608D8B002D073
:10083000000114D07E71010E8B6F8C6F000119DDE9
:100840002A0E01018A6F000127DD928080A006D068
:10085000320E01018B6F00017ADCF7D7938C81ACEB
:1008600010D001017EA102D000010BD07D510708FC
:10087000D8B002D0000105D07D2BC80E8B6F0001CF
:1008800066DC938E81AE0FD001017EA102D0000103
:100890000AD07D53D8A402D0000105D07D07C80E30
:1008A0008B6F000154DC928080A00AD001017D5141
:1008B0000808D8B402D0000103D00A0E7D6F0001F1
:1008C000928080A092D001017D510708D8B402D057
:1008D00000018BD0010E8B6F8C6F0001CADC2A0ED9
:1008E00001018A6F0001D8DC928080A006D0320E10
:1008F00001018B6F00012BDCF7D7020E0101856F20
:10090000000108DD010E01018B6F020E8C6F0001EA
:10091000B0DCFE0EF66E000EF76EECDC928080B05E
:100920004CD001017B51000808E2FF0A03E17A5133
:10093000670803E27B6B7F0E7A6F010E856F000103
:10094000E9DC010E01018B6F8C6F000192DC100E4F
:10095000E96E7BC182F17AC181F121DE938E81AE95
:1009600012D001017B510108D8B002D000010BD098
:1009700006E17A516608D8B002D0000104D07A2B83
:10098000D8B47B2B0001938C81AC0DD001017A533C
:1009900005E17B53D8A402D0000105D07A51D8B428
:1009A0007B077A070001946A7AC18BFFC80E0101A8
:1009B0008B6F0001A7EC00F0B1D7946A7F0E8B6EAD
:1009C000010E01018B6F8C6F000153DC2A0E0101B7
:1009D0008A6F000161DC928080A007D0320E010195
:1009E0008B6F0001A7EC00F0F6D701017EA18BD040
:1009F000928080B088D0010E856F00018BDC010EE3
:100A000001018B6F8C6F000134DCD89001017D35C2
:100A1000036A6C0FE96E010E0320EA6EECCF80F1E1
:100A2000ED52EFCF7FF1100EE96E80C182F17FC1F0
:100A300081F10001B4DD01017D51000A00010DE0EA
:100A4000010A12E0030A17E0010A1CE0070A21E08C
:100A5000010A26E0030A2BE031D0C80E01018B6F9A
:100A60000001A7EC00F02BD0320E01018B6F0001CA
:100A7000A7EC00F024D0640E01018B6F0001A7ECFD
:100A800000F01DD0320E01018B6F0001A7EC00F0C9
:100A900016D0C80E01018B6F0001A7EC00F00FD03B
:100AA000320E01018B6F0001A7EC00F008D0050E9B
:100AB00001018B6F0001A7EC00F001D000D0938EF4
:100AC00081AE0ED0D89001017D35036A6C0FE96EBE
:100AD000010E0320EA6E010EEE2601E3EF2A00016B
:100AE000938C81AC0ED0D89001017D35036A6C0FD8
:100AF000E96E010E0320EA6EFF0EEF2602E2EE52CF
:100B0000ED06010175D7BAD50001E2EF08F0F86AE9
:100B1000D09EEA6AE96A700ED36E400E9B6ED35087
:100B2000C150C00B0F09C16E070EB46E7F0E046E6C
:100B3000810E056E830E066E850E076E880E086E9A
:100B40008A0E096E8C0E0A6E8E0E0B6E900E0C6E57
:100B5000930E0D6E950E0E6E970E0F6E990E106E13
:100B60009B0E116E9E0E126EA00E136EA20E146ED0
:100B7000A40E156EA60E166EA80E176EAA0E186E8F
:100B8000AC0E196EAE0E1A6EB10E1B6EB30E1C6E4D
:100B9000B50E1D6EB70E1E6EB90E1F6EBB0E206E0B
:100BA000BD0E216EBF0E226EC00E236EC20E246ECD
:100BB000C30E256EC50E266EC70E276EC90E286E93
:100BC000CB0E296ECD0E2A6ECE0E2B6ED00E2C6E55
:100BD000D20E2D6ED30E2E6ED50E2F6ED70E306E1A
:100BE000D80E316EDA0E326EDB0E336EDD0E346EE1
:100BF000DE0E356EE00E366EE10E376EE30E386EA9
:100C0000E40E396EE50E3A6EE70E3B6EE80E3C6E72
:100C1000E90E3D6EEA0E3E6EEB0E3F6EED0E406E3F
:100C2000EE0E416EEF0E426EF00E436EF10E446E0C
:100C3000F20E456EF30E466EF40E476EF40E486EDD
:100C4000F50E496EF60E4A6EF70E4B6EF70E4C6EB1
:100C5000F80E4D6EF90E4E6EF90E4F6EFA0E506E86
:100C6000FA0E516EFB0E526EFB0E536EFC0E546E5E
:100C7000FC0E556EFC0E566EFD0E576EFD0E586E38
:100C8000FD0E596EFD0E5A6EFD0E5B6EFE0E5C6E15
:100C9000FE0E5D6EFE0E5E6EFE0E5F6EFE0E606EF2
:100CA000FD0E616EFD0E626EFD0E636EFD0E646ED6
:100CB000FD0E656EFC0E666EFC0E676EFC0E686EB9
:100CC000FB0E696EFB0E6A6EFA0E6B6EFA0E6C6EA0
:100CD000F90E6D6EF90E6E6EF80E6F6EF70E706E89
:100CE000F70E716EF60E726EF50E736EF40E746E74
:100CF000F40E756EF30E766EF20E776EF10E786E60
:100D0000F00E796EEF0E7A6EEE0E7B6EED0E7C6E4F
:100D1000EB0E7D6EEA0E7E6EE90E7F6EE80E806F42
:100D2000E70E816FE50E826FE40E836FE30E846F32
:100D3000E10E856FE00E866FDE0E876FDD0E886F29
:100D4000DB0E896FDA0E8A6FD80E8B6FD70E8C6F21
:100D5000D50E8D6FD30E8E6FD20E8F6FD00E906F1B
:100D6000CE0E916FCD0E926FCB0E936FC90E946F16
:100D7000C70E956FC50E966FC30E976FC20E986F14
:100D8000C00E996FBF0E9A6FBD0E9B6FBB0E9C6F0E
:100D9000B90E9D6FB70E9E6FB50E9F6FB30EA06F0D
:100DA000B10EA16FAE0EA26FAC0EA36FAA0EA46F10
:100DB000A80EA56FA60EA66FA40EA76FA20EA86F11
:100DC000A00EA96F9E0EAA6F9B0EAB6F990EAC6F13
:100DD000970EAD6F950EAE6F930EAF6F900EB06F16
:100DE0008E0EB16F8C0EB26F8A0EB36F880EB46F19
:100DF000850EB56F830EB66F810EB76F7F0EB86F1D
:100E00007D0EB96F7B0EBA6F780EBB6F760EBC6F1E
:100E1000740EBD6F720EBE6F6F0EBF6F6D0EC06F22
:100E20006B0EC16F690EC26F670EC36F640EC46F25
:100E3000620EC56F600EC66F5E0EC76F5C0EC86F28
:100E40005A0EC96F580ECA6F560ECB6F530ECC6F29
:100E5000510ECD6F4F0ECE6F4D0ECF6F4B0ED06F2C
:100E6000490ED16F470ED26F450ED36F430ED46F2C
:100E7000410ED56F400ED66F3E0ED76F3C0ED86F29
:100E80003A0ED96F380EDA6F370EDB6F350EDC6F26
:100E9000330EDD6F310EDE6F2F0EDF6F2E0EE06F23
:100EA0002C0EE16F2A0EE26F290EE36F270EE46F1E
:100EB000250EE56F240EE66F220EE76F210EE86F18
:100EC0001F0EE96F1E0EEA6F1C0EEB6F1B0EEC6F10
:100ED0001A0EED6F180EEE6F170EEF6F160EF06F05
:100EE000150EF16F130EF26F120EF36F110EF46FF9
:100EF000100EF56F0F0EF66F0E0EF76F0D0EF86FEA
:100F00000C0EF96F0B0EFA6F0A0EFB6F090EFC6FD9
:100F1000080EFD6F080EFE6F070EFF6F060E010133
:100F2000006F060E016F050E026F040E036F040EB4
:100F3000046F030E056F030E066F020E076F020E9D
:100F4000086F020E096F010E0A6F010E0B6F010E82
:100F50000C6F0D6B0E6B0F6B106B116B126B136BB9
:100F6000146B156B166B176B010E186F010E196F52
:100F7000010E1A6F020E1B6F020E1C6F020E1D6F08
:100F8000030E1E6F030E1F6F040E206F040E216FE1
:100F9000050E226F060E236F060E246F070E256FB7
:100FA000080E266F080E276F090E286F0A0E296F8C
:100FB0000B0E2A6F0C0E2B6F0D0E2C6F0E0E2D6F5D
:100FC0000F0E2E6F100E2F6F110E306F120E316F2D
:100FD000130E326F150E336F160E346F170E356FFA
:100FE000180E366F1A0E376F1B0E386F1C0E396FC6
:100FF0001E0E3A6F1F0E3B6F210E3C6F220E3D6F8F
:10100000240E3E6F250E3F6F270E406F290E416F55
:101010002A0E426F2C0E436F2E0E446F2F0E456F1B
:10102000310E466F330E476F350E486F370E496FDE
:10103000380E4A6F3A0E4B6F3C0E4C6F3E0E4D6FA2
:10104000400E4E6F410E4F6F430E506F450E516F65
:10105000470E526F490E536F4B0E546F4D0E556F26
:101060004F0E566F510E576F530E586F560E596FE5
:10107000580E5A6F5A0E5B6F5C0E5C6F5E0E5D6FA2
:10108000600E5E6F620E5F6F640E606F670E616F61
:10109000690E626F6B0E636F6D0E646F6F0E656F1E
:1010A000720E666F740E676F760E686F780E696FDA
:1010B0007B0E6A6F7D0E6B6F6C6B6D6B640E6E6F6B
:1010C0006F6B0A0E706F716BFA0E726F736B040E9A
:1010D000746F756BF40E766F010E776FD00E786FAC
:1010E000070E796F7A6B7B6B7C6B700ED36E400E44
:1010F0009B6ED350000101EF01F0946A7F0E8B6E5E
:10110000946A7F0E8B6E01017C51000A000105E09C
:10111000010A38E0030A48E059D0030E0101856F47
:1011200000018AEC01F0010E01018B6F8C6F000150
:1011300039EC01F02E0EF66E010EF76E7AEC01F02E
:10114000010E01018B6F020E8C6F000139EC01F072
:101150003C0EF66E010EF76E7AEC01F0938E81AEC6
:1011600004D0010E01017C6F0001938C81AC03D08F
:10117000020E01017C6FC80E01018B6F0001A7EC0C
:1011800000F028D0020E01017D6FFA0E8B6F000176
:10119000A7EC00F001017D2FF8D70001D6EF01F098
:1011A00001017C6B000116D0020E01017D6FFA0E69
:1011B0008B6F0001A7EC00F001017D2FF8D7000133
:1011C0002DEF03F001017C6B000104D001017C6B69
:0811D000000100D095D70300D7
:020000040030CA
:0E0000000008190E0005810003C003E0034054
:00000001FF
;PIC18F2420
;CRC=BD59  CREATED="10-jun-11 19:17"


Una foto ampliada para las ver los valores de las resistencias:


http://img853.imageshack.us/img853/7775/imagen0911.jpg (a más resolución)

A parte quedan las de los pulsadores que son de unos 10k (yo las he puesto de 8,2k por que las de 10k empiezan a escasear...)
Junto al operacional de 1k
Las del contraste del LCD: 360 a GND y 12k a +5V

El potenciómetro es de 1k (este es el que regula la tensión a la salida).

De las 8 pilas obtengo +5V, 0V(GND) y -5V

Un saludo!!
ktuluapalo
« Última modificación: 10 de Junio de 2011, 14:57:08 por ktuluapalo »
e^(i·pi)+1=0

Desconectado ktuluapalo

  • PIC12
  • **
  • Mensajes: 82
Re: Electroestimulador + generador de funciones + inversor DC-AC
« Respuesta #3 en: 10 de Junio de 2011, 15:05:57 »
El código debería de estar un poco mejor depurado (el tema de los retardos con los botones). Simplemente funciona y no es molesto hacer funcionar los botones...

Tenía pensado hacer que cada vez que se guarden los cambios se almacenen en la flash, pero por vagancia, cada vez que modificaba el programa probaba unos valores del array de configuración y les he dejado para que cada vez que se inicie se carguen esos valores.

De todas maneras nunca he guardado datos de 16 bits en la flash, lo haría usando mascaras y desplazamientos... como era algo excesivo para la poca importancia del asunto no lo he hecho.

Creo que hay por ahí un tema de como escribir valores de más de 8 bits en la flash.

Saludos.
e^(i·pi)+1=0

Desconectado ktuluapalo

  • PIC12
  • **
  • Mensajes: 82
Re: Electroestimulador + generador de funciones + inversor DC-AC
« Respuesta #4 en: 11 de Junio de 2011, 01:56:53 »
Sobre lo de escribir en la EEPROM un valor de 16bits he visto en un hilo (http://www.todopic.com.ar/foros/index.php?topic=12923.0)
gracias a piriots que las funciones están ya implementadas en la librería internal_eeprom.c
Con esto sería mucho más fácil, pero no me voy a molestar.
Código: [Seleccionar]
void write_int1_eeprom(address, int8 bitPosition, int1 data)         ////
////     Call to write one bit of data                                      ////
////                                                                        ////
////   int1 read_int1_eeprom(address, int8 bitPosition)                     ////
////     Call to read one bit of data                                       ////
////                                                                        ////
////                                                                        ////
////   void write_int16_eeprom(address, int16 data)                         ////
////     Call to write a 16 bit integer                                     ////
////                                                                        ////
////   void write_int16_eeprom(address, int16 data)                         ////
////     Call to read a 16 bit integer                                      ////
////                                                                        ////
////                                                                        ////
////   void write_int32_eeprom(address, int32 data)                         ////
////     Call to write a 32 bit integer                                     ////
////                                                                        ////
////   int16 read_int32_eeprom(address)                                     ////
////     Call to read a 32 bit integer                                      ////
////                                                                        ////
////                                                                        ////
////   void write_float_eeprom(address, float data)                         ////
////     Call to write a floating point number                              ////
////                                                                        ////
////   float read_float_eeprom(address)                                     ////
////     Call to read a floating point number


Saludos!
e^(i·pi)+1=0

Desconectado ktuluapalo

  • PIC12
  • **
  • Mensajes: 82
Re: Electroestimulador + generador de funciones + inversor DC-AC
« Respuesta #5 en: 11 de Junio de 2011, 02:27:20 »
Por cierto, el mensaje de que aparece de Danger! Danger! High Voltage! Lo puse en honor a la siguiente canción de Electric Six:

Saludos!!!
e^(i·pi)+1=0

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Electroestimulador + generador de funciones + inversor DC-AC
« Respuesta #6 en: 11 de Junio de 2011, 02:30:14 »
Muy bonito proyecto, sí señor.

¿Lo has probado sobre tu cuerpo o sólo con el osciloscopio?, hay que ser valiente para ejercer de piloto de pruebas :)

Desconectado ktuluapalo

  • PIC12
  • **
  • Mensajes: 82
Re: Electroestimulador + generador de funciones + inversor DC-AC
« Respuesta #7 en: 11 de Junio de 2011, 04:22:24 »
Sí, lo he probado, subiendo poco a poco el potenciómetro (no llego a la mitad) hasta que ya se hace incómodo. Y siempre con el osciloscopio conectado a ver como va la cosa...  :mrgreen:
Como el contacto con las puntas es malo depende mucho de la fuerza con la que agarres y la humedad que pongas.
Probando varias frecuencias y configuraciones de onda, las peores de soportar son las bajas, a 50Hz es muy incómodo, a 1kHz es como un picor...  :D

Según está el programa se pueden configurar las ondas en diversos grupos y retrasos para en caso de usarlo como ejercitador muscular dar tiempo al musculo a que se tense y destense (esto no lo he probado bien).
Si alguien tiene un electroestimulador en casa y un osciloscopio me podía enseñar como es la onda que mete.

No he contado nada sobre la configuración:
TFREC(US)-> esto modifica la frecuencia, es un retardo aplicado cada vez que cambia un valor el operacional. cuantos más us menos Hz partiendo de 0us>>1kHz
Las n-ondas: (grupos de grupos de grupos... con sus correspondientes retrasos) al final es un tren de ondas con una forma un poco rara completamente configurable.
1onda (num)-> grupo de senos (número de ondas seno)
2onda (num)-> grupo de grupo de senos
2onda (ms)-> retrasos dentro de la 2onda entre cada grupo de senos
3onda (num)-> grupo de grupo de grupo de senos (casi nada........)  :D
3onda (ms)-> retrasos dentro de la 3onda
4onda (num)-> 4*(grupo de) senos (este valor es infinito las 4 ondas no paran de ejecutarse)
4onda (ms)-> retraso de la 4onda (este valor es el que tiene que dar tiempo al músculo a destensarse por ejemplo 1segundo).

La verdad es que nunca pensé usarlo, solo quería generar una tensión considerable con unas pilas. Sin mayor utilidad.
Por la red hay muchos proyectos con osciladores a base de transistores para generar HV, pero yo soy totalmente digital y si no es digital me cuesta mucho entender las cosas...

Ahora que lo he conseguido, la idea es quitar el trafo y hacer un generador de señales con 8bits de precisión.
Aunque me parece que como no lo haga en ASM va a ser lentísimo.

Un saludo!!
e^(i·pi)+1=0


 

anything