lunes, 19 de diciembre de 2016

Ejemplo con el compilador XC8 PIC16F628A UART

led.c
 1 /* 
 2  * File:   led.c
 3  * Author: jose
 4  *  
 5  * Created on 18 de diciembre de 2016, 18:59
 6  */
 7 #pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
 8 #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
 9 #pragma config PWRTE = ON      // Power-up Timer Enable bit (PWRT disabled)
10 #pragma config MCLRE = OFF       // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
11 #pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
12 #pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
13 #pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
14 #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
15 #define _XTAL_FREQ 4000000
16 
17 #include <stdio.h>
18 #include <stdlib.h>
19 #include <xc.h>
20 
21 void UART_tx(char dato);
22 char UART_rx();
23 
24 //------------------------------------------------------------------------------
25 void interrupt Interrupciones(){
26   char dato;
27     
28   GIE = 0;  
29   if(RCIF == 1){
30    RB0 = 1;   
31    dato = UART_rx();
32    UART_tx(dato);
33   }
34   
35   RB0 = 0;
36   GIE = 1;
37 }
38 
39 
40 /*
41  *    Funciones               
42  */
43 void UART_Config(const long int baudrate)
44 {
45   unsigned int X_SPBRG=0;
46   
47   X_SPBRG = _XTAL_FREQ /(16*(baudrate+1));
48   SPBRG = X_SPBRG;
49   BRGH = 1;                                     
50   TXEN = 1;
51   SPEN = 1;
52   TX9 = 0;
53   RX9 = 0;
54   SYNC = 0;
55   CREN = 1;
56 }
57 
58 void UART_tx(char dato)
59 {
60   while (TXIF==0);  
61   TXREG=dato;   
62 }
63 
64 char UART_rx(){
65   while (RCIF==0 && OERR==0);
66   return RCREG;
67 }
68 
69 void print_uart(char *texto)
70 {
71   int i;
72   for(i=0;texto[i]!='\0';i++)
73     UART_tx(texto[i]);
74 }
75 
76 void UART_Interrupciones(){
77   RCIE=1;
78   PEIE=1;
79   GIE=1;
80 }
81 /*------------------------------------------------------------------------------
82  *    Programa principal
83  */
84 void main(void) {
85  char dato;   
86  TRISB = 0b00000010; 
87  
88  UART_Config(9600);  
89  UART_Interrupciones();
90  
91  while(1); 
92  
93 }
94 
95 
-->

martes, 1 de noviembre de 2016

Reparando un analizador de red CVM 96 - Parte 1

El siguiente analizador tenia los siguientes problemas :
  • No visualizaba medición de I 
  • Sin comunican RS485
al revisarlo me encontré que el causante de la falla de la medición era un capacitor smd en paralelo con el secundario del TI y una resitencia, por parte de la comunicaciones el MAX485 no podia transmitir, asi que realice unas modificaciones para poder repararlo, las siguientes fotos muestran las reparaciones y pruebas.













jueves, 3 de diciembre de 2015

samsung notebook series 5 ultra np530u3c

Comparto con ustedes como pude solucionar el problema de no poder ingresar al BIOS con F2 y por consiguiente no poder instalar algún sistema operativo.

* La notebook presento el problema despues de borrar todo el disco.

* Presionando la tecla F9 me permitia bootear por algun puerto USB que dispone la notebook.

* Luego de crear un pendrive booteable con la iso de la ultima version de gparted pude recuperar la particion de restauracion del disco de 500GB, con la herramienta testdisk. al ver que tenia varios Gbyte por recuperar, retire el disco y recupere la dichosa particion con otra PC.

* Por mas esfuerzo que hacia con los archivos de restauración no podía lograr ingresar al bios, por lo tanto decidi trabajar con ello de otra manera, si estaba corrupto tenia que saber que tanto, usando un DOS live usb con el programa de phoenix pensaba hacer un backup del mismo y estudiarlo con el editor de bios que proporciona el mismo fabricante.

* En definitiva el bios estaba corrupto, para poder restaurarlo la unica herramienta y manera que disponia era con el software de samsung update, ya que el rom no lo conseguia, en fin prosegui de la siguiente manera: baje un windows7 live, bootee necesitaba internet, con un dongle wifi tplink pude conectarme, baje el software de samsung, actualizo el bios y eureka!! la notebook reinicio y pude acceder al bios, problema solucionado,  hay que tener cuidado con los nuevos bios efi o uefi en fin d: )

martes, 11 de noviembre de 2014

Radiador de un transformador




Notamos que la temperatura del radiador es mas alta en la parte superior y va descendiendo en la parte inferior, esta clara la circulación del aceite del transformador para refrigerar el mismo ......

Inyectando Corriente



Reemplazando el secundario de un transformador por una par de vueltas con un cable de 10 mm y cortocircuitando el mismo, logramos hacer circular una corriente considerable en este caso unos 47A con una tensión en el secundario del transformador de unos 9.4 VAC,  probe hasta 200A pero entra el juego del calentamiento del cable, en fin todo es cuestión de seguir probando ........

martes, 22 de abril de 2014

CVM-M512 con Python

Aveces uno quiere probar los equipos y no sabe si es software o el hardware que no funciona, en este caso es un CVM-M512.  Preferí codear un poco para probar el puerto de comunicación que es un RS485 y el protocolo propio de circuitor, y salio lo siguiente.


import serial

aux=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

RS232 = serial.Serial('/dev/ttyUSB0',baudrate=9600, bytesize=7, timeout=2, stopbits=1)
print RS232.portstr


#-----------------------------------------------
#                  VERSION
RS232.write("$99VER83"+chr(10))
for i in range(10):
# try:
  dato=RS232.read()
  aux[i]=dato
# except:
#  print "ERROR"

for i in range(10):
 print aux[i]

#-----------------------------------------------
#                CONFIGURACION
RS232.write("$99RNF7C"+chr(10))
RS232.write("$99RP"+chr(10))

for i in range(18):
#try:
  dato=RS232.read()
  aux[i]=dato,ord(dato)
#except:
# print "ERROR"

for i in range(18):
 print aux[i]





sábado, 18 de enero de 2014

Probando placa de comunicacion Control Cooper F5

Hace un monton que no posteo nada en mi blog, justamente es la misma cantidad de años que empece a atrabajar  en relación de dependencia .........   zzzzzZZz
De una necesidad de probar una placa de comunicación de un control cooper f5, salto la idea de codear un poco, sabiendo que el puerto que quería probar utiliza dnp3 para la comunicación con una rtu. me puse en el medio de ambos sabiendo que podía sacar aunque sea el primer segmento del protocolo, obteniendo lo siguiente:
5     ->  |
100 ->  |  byte de start
5     ->  tamaño de la trama
192 -> codigo de control
203 | -> direccion destino
0     |
200 | -> direccion origen
0     |
53  |
16  | -> crc 16 bits





martes, 20 de agosto de 2013

martes, 18 de junio de 2013

viernes, 4 de enero de 2013

ADC 12F675 ASM

Interfas.asm
;GP0 AN0
;GP1 TX
;GP2 RX
;GP3 
;GP4 OSC |Cristal de 4Mhz
;GP5 OSC |

list p=pic12f675
#include "p12f675.inc"

__config        _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF & _BODEN_ON  & _MCLRE_OFF


#define tx GPIO,1
#define rx GPIO,2


 cblock    0x20
  rx_reg
  tx_reg
  xcount
  del
  dato_adc
 endc

 org     0x0
 goto      inicio
;----------------------------------------------------------------------------            
 org     0x5
;----------------------------------------------------------------------------         
inicio bsf STATUS,RP0 ; banco 1
 movlw b'00001101' ;
 movwf TRISIO  ;
 movlw b'00010001'
 movwf ANSEL
 bcf STATUS,RP0

 movlw   b'00000001'
 movwf ADCON0

 bsf ADCON0,1

ADC_esp btfss ADCON0,1
 goto ADC_esp

;------------------------
;    Bucle principal
;------------------------ 
bucle     movf  ADRESH,w
   call Serial_Tx
   bsf ADCON0,1
   goto   bucle
 
;-------------------------  
Serial_Rx
   clrf   rx_reg
Check   btfsc  rx
   goto  Check
   call   Delay2
Rcvr   movlw  .8
   movwf  xcount
Rnext   bcf  STATUS,C
   btfsc  rx
   bsf  STATUS,C
   rrf  rx_reg, F
   call  Delay1
   decfsz xcount, F
   goto  Rnext 
   retlw  0

Serial_Tx
  movwf tx_reg
  movlw 8
  movwf xcount
  bcf tx
  call Delay1
Xnext  bcf tx
  bcf STATUS,C
  rrf tx_reg, F
  btfsc STATUS,C
  bsf tx
  call Delay1
  decfsz xcount, F
  goto Xnext
  bsf tx
  call Delay1
  retlw 0


Delay2   movlw   .03    ;.248:1200, .41:2400, .19:4800, .08:9600, .03:19200
   movwf   del     ;.01:34800
Redo2     nop
   nop
   decfsz del, F
   goto  Redo2
   retlw  0

Delay1   movlw  .08    ;.166:1200, .83:2400, .41:4800, .19:9600, .08:19200
   movwf  del     ;.03:34800
Redo   nop
   nop
   decfsz del, F
   goto  Redo
   retlw  0

;----------------------------
end

lunes, 3 de diciembre de 2012

sdcc pic16f877a adc 10bits

adc.h
#include <pic16f877a.h>

void config_adc()
{
  ADFM=1;
  PCFG0=0;
  PCFG1=0;
  PCFG2=0;
  PCFG3=0; 
}


unsigned int Leer_ADC(unsigned int canal)
{  
 unsigned int byteh,bytel,aux, dato;
 //FOSC/32
 ADCS0=0;
 ADCS1=1;
 //Seleccionamos el canal AD
 aux=ADCON0 & 0b11000111;
 ADCON0=aux | (canal << 3);
 
 ADON=1; //Encender AD
 ADIF=0; //Limpio flag del conversor
 GO=1;   //Comenzando
 while(ADIF==0); 
 
 byteh=ADRESH;
 bytel=ADRESL;
 
 dato=(int)byteh<<8|bytel;
 return (dato);
}

viernes, 26 de octubre de 2012

jueves, 25 de octubre de 2012

sdcc easypic2 Funcionando


sdcc easypic2 main n_n

JMQ01.c
#include <pic16f877a.h>
#include "timer.h"
#include "lcd.h"
#include "jmq.h"
#include "adc.h"
#include "i2c.h"
#include "pcf8583.h"

volatile unsigned int band_a=0, B_LED=0,LED=0,opcion=1;
volatile unsigned int TdC=0;

#define DIR_I2C   0x8


void isr() interrupt 0 
{                                                                                                   /* rutina de servicio de interrupciones */
  if (RBIF==1){
   if (RB7==0){
    delay(5);
    if (RB7==0){
     if (B_LED==0){
      LED=1;
      B_LED=1;
     }else{
      LED=0;
      B_LED=0;
     }
    }
   }

   if (RB6==0){
    delay(5);
    if (RB6==0){
     opcion++;
     if (opcion>8)opcion=8;     
    } 
   }

   if (RB5==0){
    delay(5);
    if(RB5==0){ 
     opcion--;
     if (opcion<1)opcion=1;
    }
   } 
   
   if (RB4==0){
    delay(5);
    if(RB4==0){ 
      band_a=1;
      i2c_write_byte(DIR_I2C, 0x0,opcion);
    }
  
   }
  } 
  RBIF=0;
}

/*--------------------------------*/

void main(void)
{
  
  unsigned int a,b,c,d,CONTROL=0b10101100;  
  unsigned int direccion=0,temp;
  unsigned char datol,datoh;
 
  
  RBIE=1;
  GIE=1;
  TRISD=0b00000000;
  TRISB=0b11111111;
  
  TRISA=0b00000000;
  ADCON1 = 0b00000110;
  
  PORTA=0;PORTD=0;
  band_a=0;

  config_timer();
  delay(1000);
  i2c_configure();  
  delay(100);
  
  lcd_cmd(SET,LED);
  lcd_cmd(MODO,LED);
  lcd_cmd(CLS,LED);
  lcd_cmd(CurOFF,LED);


  print_xy(0,LED);
  print_lcd("easypic 2",1);
  print_xy(40,LED);
  print_lcd("   V1.0 JMQ   ",1);
  delay(2000);
  lcd_cmd(CLS,LED);
  

  LED=0;
  

  
  while(1){
   print_xy(0,LED);print_lcd("Rele Nro:",LED); 
   temp=opcion;   
   INT_BCD(temp,&a,&b,&c,&d);
   print_xy(11,LED);lcd_write(BCD_ASCII(d),LED); 
   
   i2c_read_byte(DIR_I2C, 0x02, &datol);
   INT_BCD(datol,&a,&b,&c,&d);
   print_xy(40,LED);lcd_write(BCD_ASCII(b),LED);    
   print_xy(41,LED);lcd_write(BCD_ASCII(c),LED);
   print_xy(42,LED);lcd_write(BCD_ASCII(d),LED);
   
   LeerLM75(0b10010111, &datoh, &datol);
   INT_BCD(datoh,&a,&b,&c,&d);
   print_xy(44,LED);lcd_write(BCD_ASCII(c),LED);
   print_xy(45,LED);lcd_write(BCD_ASCII(d),LED);
   
   
   /*direccion++;      
   if(direccion>256){
     CONTROL=0b10101110;
     if(direccion==512)direccion=0;
     datoh=0;
   }else{
     CONTROL=0b10101100;
     if(direccion==512)direccion=0;
     
   }  
   
   i2c_write_byte(CONTROL,direccion,datoh);
   INT_BCD(direccion,&a,&b,&c,&d);
   print_xy(49,LED);lcd_write(BCD_ASCII(a),LED);
   print_xy(50,LED);lcd_write(BCD_ASCII(b),LED);
   print_xy(51,LED);lcd_write(BCD_ASCII(c),LED);
   print_xy(52,LED);lcd_write(BCD_ASCII(d),LED);*/
   hora(LED);
   
  }
  
}

sdcc easypic2 jmq xD! BCD

jmq.h
#include <pic16f877a.h>

void INT_BCD(unsigned int dato, unsigned int *a, unsigned int *b,unsigned int *c,unsigned int *d)
{
 *a = dato / 1000;
 *b = (dato % 1000) / 100;
 *c = ((dato % 1000) % 100)/10;
 *d = ((dato % 1000) % 100)%10;

}

char BCD_ASCII(unsigned int dato){
 return (dato | 48);
}

sdcc easypic2 pcf8583

pcf8583.h
#include <pic16f877a.h>

void unidad_decena(unsigned int dato,unsigned int *unidad, unsigned int *decena);

void hora(unsigned int LED){
   unsigned int unidad,decena;
   unsigned char dato;
   //HORA
   i2c_read_byte(0b10100010,0x4,&dato);   
   unidad_decena(dato,&unidad,&decena);
   print_xy(48,LED);lcd_write(BCD_ASCII(decena),LED);
   print_xy(49,LED);lcd_write(BCD_ASCII(unidad),LED);
   //MINUTOS
   i2c_read_byte(0b10100010,0x3,&dato);   
   unidad_decena(dato,&unidad,&decena);
   print_xy(51,LED);lcd_write(BCD_ASCII(decena),LED);
   print_xy(52,LED);lcd_write(BCD_ASCII(unidad),LED);   
   //SEGUNDOS
   i2c_read_byte(0b10100010,0x2,&dato);   
   unidad_decena(dato,&unidad,&decena);
   print_xy(54,LED);lcd_write(BCD_ASCII(decena),LED);
   print_xy(55,LED);lcd_write(BCD_ASCII(unidad),LED);
}
  
void unidad_decena(unsigned int dato,unsigned int *unidad, unsigned int *decena){
  *unidad=dato & 0x0f;
  *decena=(dato>>=4);
}

IRC

#freenode->#usljujuy

Seguidores

Eventos n_n

Tira Ecol Nano,Bilo y Luca