Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Meta

#1691
Lástima que los 16F876A y 16F877A ya no los vende ni fabrica. Su sustituto es el 16F886 y 16F887 con mejores prestaciones.

#1692
Electrónica / Librerías .INC
31 Diciembre 2009, 21:30 PM
Felices fiestas:

Quiero pasar una librería llamada EEPROM.INC del 16F84 al 16F88 y no me sale mucho.


;***************************** Librería "EEPROM.INC" **********************************
;
;    ====================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS".
;      E. Palacios, F. Remiro y L. López.        www.pic16f84a.com
;       Editorial Ra-Ma.  www.ra-ma.es
;    ====================================================================
;
; Estas subrutinas permiten realizar las tareas básicas de escritura y lectura de la
; memoria EEPROM de datos del PIC.
;
; Subrutina "EEPROM_LeeDato" ------------------------------------------------------------
;
; El microcontrolador lee el dato que hay escrito en la posición de la EEPROM del PIC apuntada
; por el contenido del registro de trabajo W. El resultado se proporciona en el mismo W.
;
; Entrada: En (W) la dirección de la memoria EEPROM a leer.
; Salida :  En (W) el byte leído.

EEPROM_LeeDato
    bcf        STATUS,RP0            ; Asegura que trabaja con el Banco 0.
    movwf    EEADR                ; Dirección a leer.
    bsf        STATUS,RP0            ; Banco 1.
    bsf        EECON1,RD            ; Orden de lectura.
EEPROM_SigueLeyendo
    btfsc    EECON1,RD            ; El PIC indica que ha terminado la lectura
    goto    EEPROM_SigueLeyendo    ; poniendo en bajo este bit.
    bcf        STATUS,RP0            ; Banco 0.
    movf    EEDATA,W            ; El byte leído al registro W.
    return

; Subrutina "EEPROM_EscribeDato" --------------------------------------------------------
;
; Escribe el dato introducido en el registro de trabajo W en la posición de memoria EEPROM del
; PIC apuntada por el registro EEADR.
;
; Como altera el valor del registro INTCON al posicionar el flag GIE, éste se debe guardar al
; principio de la subrutina y restaurarlo al final.
;
; Entradas:    En el registro EEADR la dirección de la memoria EEPROM a escribir.
;        En el registro W el byte a escribir.
;
    CBLOCK
    EEPROM_GuardaINTCON
    ENDC

EEPROM_EscribeDato
    bcf        STATUS,RP0            ; Asegura que trabaja con el Banco 0.
    movwf    EEDATA                ; El byte a escribir.
    movf    INTCON,W            ; Reserva el valor anterior de INTCON
    movwf    EEPROM_GuardaINTCON
    bsf        STATUS,RP0            ; Acceso al Banco 1.
    bcf        INTCON,GIE            ; Deshabilita todas las interrupciones.
    bsf        EECON1,WREN            ; Habilita escritura.
;
; El fabricante especifica que hay que seguir esta secuencia para escritura en EEPROM:
;
    movlw    0x55
    movwf    EECON2
    movlw    0xAA
    movwf    EECON2
    bsf        EECON1,WR            ; Inicia la escritura.
EEPROM_TerminaEscribir
    btfsc    EECON1,WR            ; Comprueba que termina de escribir en la EEPROM.
    goto    EEPROM_TerminaEscribir
    bcf        EECON1,WREN            ; Desautoriza la escritura en EEPROM.
    bcf        EECON1,EEIF            ; Limpia este flag.
    bcf        STATUS,RP0            ; Acceso al Banco 0.
    movf    EEPROM_GuardaINTCON,W ; Restaura el valor anterior de INTCON.
    movwf    INTCON
    return

;    ====================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS".
;      E. Palacios, F. Remiro y L. López.        www.pic16f84a.com
;       Editorial Ra-Ma.  www.ra-ma.es
;    ====================================================================



Mirando el Data Sheet del 16F88 tengo en cuenta los bancos de memoria que siempre debo cambiar, lo he intentado con BANKSEL y con bsc STATUS,RP1.

Ver código modificado para el 16F88.

;***************************** Librería "EEPROM_16F88.INC"
;
;
; Estas subrutinas permiten realizar las tareas básicas de escritura y lectura de la
; memoria EEPROM de datos del PIC.
;
; Subrutina "EEPROM_LeeDato" ------------------------------------------------------------
;
; El microcontrolador lee el dato que hay escrito en la posición de la EEPROM del PIC apuntada
; por el contenido del registro de trabajo W. El resultado se proporciona en el mismo W.
;
; Entrada: En (W) la dirección de la memoria EEPROM a leer.
; Salida :  En (W) el byte leído.

EEPROM_LeeDato
    bsf        STATUS,RP1            ; Asegura que trabaja con el Banco 2.
    bcf        STATUS,RP0
    movwf    EEADR                ; Dirección a leer.
    bsf        STATUS,RP1            ; Banco 3.
    bsf        STATUS,RP0
    bsf        EECON1,RD            ; Orden de lectura.
EEPROM_SigueLeyendo
    btfsc    EECON1,RD            ; El PIC indica que ha terminado la lectura
    goto    EEPROM_SigueLeyendo    ; poniendo en bajo este bit.
    bsf        STATUS,RP1            ; Banco 2.
    bcf        STATUS,RP0
    movf    EEDATA,W            ; El byte leído al registro W.
    return

; Subrutina "EEPROM_EscribeDato" --------------------------------------------------------
;
; Escribe el dato introducido en el registro de trabajo W en la posición de memoria EEPROM del
; PIC apuntada por el registro EEADR.
;
; Como altera el valor del registro INTCON al posicionar el flag GIE, éste se debe guardar al
; principio de la subrutina y restaurarlo al final.
;
; Entradas:    En el registro EEADR la dirección de la memoria EEPROM a escribir.
;        En el registro W el byte a escribir.
;
;-------------------------------+
;    Bancos de memoria 16F88    |
;                               |
;        RP1:PP0            Banco   |
;         0      0              0     |
;        0   1            1     |
;        1   0            2     |
;         1   1            3     |
;                               |
;-------------------------------+

    CBLOCK
    EEPROM_GuardaINTCON
    ENDC

EEPROM_EscribeDato
    bsf        STATUS,RP1
    bcf        STATUS,RP0            ; Asegura que trabaja con el Banco 2.
    movwf    EEDATA                ; El byte a escribir.
    movf    INTCON,W            ; Reserva el valor anterior de INTCON
    movwf    EEPROM_GuardaINTCON
    bsf        STATUS,RP1            ; Acceso al Banco 3.
    bsf        STATUS,RP0
    bcf        INTCON,GIE            ; Deshabilita todas las interrupciones.
    bsf        EECON1,WREN            ; Habilita escritura.
;
; El fabricante especifica que hay que seguir esta secuencia para escritura en EEPROM:
;
    movlw    0x55
    movwf    EECON2
    movlw    0xAA
    movwf    EECON2
    bsf        EECON1,WR            ; Inicia la escritura.
EEPROM_TerminaEscribir
    btfsc    EECON1,WR            ; Comprueba que termina de escribir en la EEPROM.
    goto    EEPROM_TerminaEscribir
    bcf        EECON1,WREN            ; Desautoriza la escritura en EEPROM.
    bcf        EECON1,EEIF            ; Limpia este flag.
    bsf        STATUS,RP1            ; Acceso al Banco 2.
    bcf        STATUS,RP0
    movf    EEPROM_GuardaINTCON,W ; Restaura el valor anterior de INTCON.
    movwf    INTCON
    return
Me da este resultado.
Citar----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F88 "RS232_11_16F88.asm" /l"RS232_11_16F88.lst" /e"RS232_11_16F88.err" /d__DEBUG=1
Message[302] H:\PIC16F84A\16F88\RS232_11_16F88.ASM 52 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\RS232_11_16F88.ASM 215 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\LCD_4BIT.INC 96 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\LCD_4BIT.INC 110 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 23 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 26 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 28 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 32 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 64 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 70 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 75 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 77 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 78 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 80 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 82 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 83 : Register in operand not in bank 0. Ensure that bank bits are correct.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\mplink.exe" /p16F88 "RS232_11_16F88.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"RS232_11_16F88.cof" /M"RS232_11_16F88.map" /W /x
MPLINK 4.35, Linker
Copyright (c) 2009 Microchip Technology Inc.
Errors : 0

Loaded H:\PIC16F84A\16F88\RS232_11_16F88.cof.
----------------------------------------------------------------------
Debug build of project `H:\PIC16F84A\16F88\PicRS232_16F88.mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Preprocessor symbol `__DEBUG' is defined.
Thu Dec 31 20:21:43 2009
----------------------------------------------------------------------
BUILD SUCCEEDED




Mirando la hoja de datos lo he intetado mirando los ejemplos de la página 31. 16F88.



; Leer EEPROM.
EEPROM_LeeDato
    BANKSEL EEADR ; Select Bank of EEADR
    MOVF ADDR, W ;
    MOVWF EEADR ; Data Memory Address
    ; to read
    BANKSEL EECON1 ; Select Bank of EECON1
    BCF EECON1, EEPGD; Point to Data memory
    BSF EECON1, RD ; EE Read
    BANKSEL EEDATA ; Select Bank of EEDATA
    MOVF EEDATA, W ; W = EEDATA
    return











; Escribir EEPROM.



    CBLOCK
    EEPROM_GuardaINTCON
    ENDC

EEPROM_EscribeDato
    BANKSEL EECON1 ; Select Bank of
    ; EECON1
    BTFSC EECON1, WR ; Wait for write
    GOTO $-1 ; to complete
    BANKSEL EEADR ; Select Bank of
    ; EEADR
    MOVF ADDR, W ;
    MOVWF EEADR ; Data Memory
    ; Address to write
    MOVF VALUE, W ;
    MOVWF EEDATA ; Data Memory Value
    ; to write
    BANKSEL EECON1 ; Select Bank of
    ; EECON1
    BCF EECON1, EEPGD ; Point to DATA
    ; memory
    BSF EECON1, WREN ; Enable writes
    BCF INTCON, GIE ; Disable INTs.
    MOVLW 55h ;
    MOVWF EECON2 ; Write 55h
    MOVLW AAh ;
    MOVWF EECON2 ; Write AAh
    BSF EECON1, WR ; Set WR bit to
    ; begin write
    BSF INTCON, GIE ; Enable INTs.
    BCF EECON1, WREN ; Disable writes



Saludo.
#1693
Electrónica / Configurar un pedazo de PIC
31 Diciembre 2009, 01:28 AM
Hola:

Estoy intentando pasar la configuración del PIC16F84A al 16F88, ambos usan el oscilador externo a 4 MHz. La idea del PIC16F88 es que los puertos A y B son digitales, PORTA como salida digital y PORTB como entrada digital, no se usa para nada entradas analógicas.

Este código del 16F84 quiero convertirlo al 16F88.

Código (mpasm) [Seleccionar]
   
    bsf        STATUS,RP0                ; Accede al Banco 1.
    clrf    PORTA                    ; Puerto A como salidas.
    movlw    b'11111111'                ; Las 8 líneas del puerto B se configura como entradas.
    movwf    PORTB
    bcf        STATUS,RP0                ; Accede al Banco 0.
    clrf    PORTA                    ; Supuestamente la lámpara y Led apagadas.   


Por ahora estoy liado y no logro poner el PORTB como entradas. De momento he hecho esto.

Código (mpasm) [Seleccionar]

    bcf        STATUS,RP1                ; Accede al banco 1.
    bsf        STATUS,RP0
    movlw    b'00000000'
    movwf    ANSEL                    ; Configura como I/O digitales.
    clrf    TRISA                    ; Poner TRISA para salida o PORTA en salid digital.
    movlw    b'11111111'   
    movwf    TRISB                    ; Entrada digital.
    bcf        STATUS,RP1                ; Accede al banco 0.
    bcf        STATUS,RP0
    clrf    PORTA                    ; Salida digital del PORTA.
    movlw    b'11111111'
    movwf    PORTB                    ; Entrada digital del PORTB


Se que no está bien porque no logro poner el PORTB en entrada digital y no se como hacerlo.

Un cordial saludo.
#1694
Funciona bien. Si lo haces complejo las combinaciones no tira. Aún así buen trabajo.
#1695
Electrónica / Poco a poco me paso del F8 al F88.
30 Diciembre 2009, 16:41 PM
Hola:

Viendo que en los locales cada vez se vende menos PIC 16F84A y más el 16F628A, me cuentan que el sustituto directo del famoso y popular 16F84 es el 16F88 en definitica. Antes no se creía que podría del el 16F628A, veo que no.

Por si acaso que dejen de fabricar el 16F84A como ocurre con los 16F876A/877A desde la Web del fabricante no los vende, ahora son los 16F886/887 con mejores prestaciones.

La idea es aprender a pasar de 16F84A al 16F88 que me llegarán a principios de Enero 2010. En este caso se utilizará el cristal de cuarzo externo a 4 MHz como el 16F84 aunqu el 16F88 aguante a 20 MHz. Quiero hacer el código fuente de este circuito del detector por movimiento y luz del F84 al F88 a ver si no es tan complicado como parece.



Ver: Luz por detector de movimiento y crepuscular Senpir


sobre todo me interesa la parte del __CONGIG que quiero dejarlo lo más parecido al 16F84A.

   




CitarLIST    P=16F84A            ; Procesador.
   INCLUDE <P16F84A.INC>

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC



En el 16F88 lo he dejado así, no se si será el correcto.




Viendo el archivo P16F88.INC que me viene en el MPLAB v8.43 parece que me puedo guiar y adivinar los del __CONFIG.

Lo veo complicado y no quiero equivocarme. Al menos quiero ser como se hace el __CONFIG más adecuado. Ya me encargaré de pasar los bankos de memoria o actualizrlos en cada librería que encuentre con el PIC.

Data Sheet
16F84A
16F88

Un cordial saludo.
#1696
Electrónica / Re: [Iniciación] Que pic escojer?
30 Diciembre 2009, 16:35 PM
Aquí puedes mirar los proyecto que vienen en el libro.

http://www.pic16f84a.org/index.php?option=com_content&view=article&id=66&Itemid=87

Saludo.
#1697
Hola:



Pueden probar la nueva Interfaz PicRS232 v2, se incluye código fuente y simulación. Aún está en fase beta, gracias a usted se puede mejorar odar nuevas ideas. Se trata del control de un PIC por puerto serie.

http://www.pic16f84a.org/index.php?option=com_content&view=article&id=170:nuevo-articulo-de-angel-acaymo&catid=52:angelproyectos&Itemid=90

Un cordial saludo.
#1698
Muchas gracias, es mucho código para lo que es. Da la casualdiad que hay estos:

http://www.geekpedia.com/code36_Shut-down-system-using-Csharp.html

http://www.elguille.info/colabora/2007/phanthom2k_ApagadoPC.htm

Saludo.
#1699
.NET (C#, VB.NET, ASP) / Apagar el PC con un botón
29 Diciembre 2009, 01:37 AM
Hola:

Tengo un Form y un button1 con Visual C# Express 2010 Beta 2. ¿Existe la manera de que al pulsar el botón se apague el equipo completo?



A veces puede ocurrir de que te salga una ventana que te dice Finalizar tarea y el equipo no se apaga. Si es posible hacerlo lo de apagar el equipo con un botón. ¿Hay una forma de evitar la posible ventana de Finalizar tarea?

Salu2.
#1700
El que dices no me vale ya que el PIC 16F84A envía órdenes al puerto serie que detecta C#. He hecho un mini ejemplo y dejo el código.

Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Net;       // No olvidar.
using System.Net.Mail;


namespace email
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       //Evento para cuando pulsamos el botón "enviar"
       private void button1_Click(object sender, EventArgs e)
       {
           //La cadena "servidor" es el servidor de correo que enviará tu mensaje
           string servidor = "smtp.gmail.com";
           // Crea el mensaje estableciendo quién lo manda y quién lo recibe
           MailMessage mensaje = new MailMessage(
              emisor.Text,
              receptor.Text,
              asunto.Text,
              mensajazo.Text);

           //Envía el mensaje.
           SmtpClient cliente = new SmtpClient(servidor);

               cliente.UseDefaultCredentials = false;
               cliente.Credentials = new System.Net.NetworkCredential(emisor.Text, "csfg@$gfdvs5v&vC&6765g74v654|¬#~6");
               cliente.Port = 587;
               cliente.Host = "smtp.gmail.com";
               cliente.EnableSsl = true;

           //Añade credenciales si el servidor lo requiere.
           //cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
           cliente.Send(mensaje);
       }
   }
}