miércoles, 18 de enero de 2017
lunes, 19 de diciembre de 2016
Ejemplo con el compilador XC8 PIC16F628A UART
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
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: )
* 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 ........
jueves, 3 de julio de 2014
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
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
;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
#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 main n_n
#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
#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
#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); }
Suscribirse a:
Entradas (Atom)
IRC
#freenode->#usljujuy





















