Google Búsqueda personalizada

Regístrate gratis para participar de los foros, o si ya estás registrado haz login.

Pic simulator ide

comentario del autor Vie Jul 10, 2009 12:48 pm
   
Hola a todos, por favor si alguien me puede responder esta duda, de antemano las gracias:

Estoy trabajando con el Pic Simulator Ide, hice un programa en donde uso una VARIABLE al cual le puse de tipo LONG, el cual casi al final de mi programa lo lo mando al LCD (2x16) todo esta listo para compilar al hex, pero me califica un error de declaración de variable en la variable de tipo Long. PERO si no lo enviare al LCD en mi programa si lo compila.

En un resumen, mi pregunta: como hago para enviar una variable de tipo LONG al LCD en mi programa.

Ejempo:
DIM total AS LONG
total = total*10
Loop:
LCDOUT #total
END

julio huayta

Reputación

sin valorar Vie Jul 10, 2009 4:55 pm
   
Ok.
Asi por asi no se puede pone detalladamente el error que te tira y subi el programa que escribiste(completo) ya que una porcion no sirve de nada.-
El error no sera este:
Saludos.-

error_long.JPG  (9.55 KB)

error_long.JPG

mammuky

Reputación

comentario del autor Mar Jul 14, 2009 2:20 pm
   
EN SI ESTE ES EL CIRCUITO MAS COMPLETO:

Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 12
AllDigital

Define LCD_BITS = 8
Define LCD_DREG = PORTB
Define LCD_DBIT = 0
Define LCD_RSREG = PORTE
Define LCD_RSBIT = 0
Define LCD_RWREG = PORTE
Define LCD_RWBIT = 1
Define LCD_EREG = PORTE
Define LCD_EBIT = 2
Define LCD_READ_BUSY_FLAG = 1
Lcdinit 0

Dim button As Byte
Dim clave As Long
Dim total As Long
Dim tecla As Byte
Dim error As Byte
Dim adi As Byte
Dim cla As Byte
Dim paso As Byte

Symbol alarma = PORTC.0
Symbol buz = PORTC.1
Symbol raw1 = RD4
Symbol raw2 = RD5
Symbol raw3 = RD6
Symbol raw4 = RD7
Symbol col1 = RD0
Symbol col2 = RD1
Symbol col3 = RD2
Symbol col4 = RD3

TRISD = 0xf0
TRISC = 0
TRISA = 0

adi = 0
alarma = 0
clave = 123
buz = 0
total = 0
button = 16
tecla = 0

loop:
adi = 1
If alarma = 0 Then
Lcdcmdout LcdLine1Home
Lcdout "CLAVE DE ACTIVE"
Gosub active_al
Endif
Goto loop

End

active_al:
adi = 1
While button = 16
Gosub get_button
WaitMs 15

If adi = 1 Then
total = total * 10 + tecla
Lcdcmdout LcdLine2Home
Lcdcmdout LcdLine2Clear
Lcdout #total
Endif

Return

get_button:
col1 = 1
If raw1 = 1 Then button = 1
If raw2 = 1 Then button = 4
If raw3 = 1 Then button = 7
If raw4 = 1 Then button = 10
col1 = 0
col2 = 1
If raw1 = 1 Then button = 2
If raw2 = 1 Then button = 5
If raw3 = 1 Then button = 8
If raw4 = 1 Then button = 0
col2 = 0
col3 = 1
If raw1 = 1 Then button = 3
If raw2 = 1 Then button = 6
If raw3 = 1 Then button = 9
If raw4 = 1 Then button = 11
col3 = 0
col4 = 1
If raw1 = 1 Then button = 12
If raw2 = 1 Then button = 13
If raw3 = 1 Then button = 14
If raw4 = 1 Then button = 15
col4 = 0
Return


LO QUE ME PREOCUPA ESQUE AL COMPILAR ME MANDA UN ERROR PERO SI LA VARIABLE TOTAL LA CAMBIO POR UNA DE TIPO WORD SI ME COMPILA BIEN....
¿ COMO HACER ?... DE ANTE MANO MUCHAS GRACIAS

julio huayta

Reputación

sin valorar Mar Jul 14, 2009 4:53 pm
   
Ok.
Tenes que usar Hb y LB, igualmente no se para que queres que sea tipo long si tu clave es 123 y a lo sumo una clave tiene 4 o 5 digitos (va eso uso yo).-
Otra cosa es que vos escribiste:
Cita:active_al:
adi = 1
While button = 16
Gosub get_button
WaitMs 15

y para mi le falta un Wend.-
Bue revisa bien el prog.-
Saludos.-

mammuky

Reputación

comentario del autor Mie Jul 15, 2009 1:36 pm
   
Gracias amigo, y en realidad mi programa es un poco mas grande, por eso no se entiende bien y si le faltaba el WEND...
pero podrias darme un ejemmplo del Hb y Lb, por ejemplo si mi clave seria de mas digitos como 321321 por ejemplo, desde ya te agradesco mucho por tus respuestas. : )

julio huayta

Reputación

sin valorar Mie Jul 15, 2009 9:11 pm
   
Ok.
Mira en realidad button ya te devuelve el boton presionado, y otra cosa tenes que agregar:
pone asi:
Código:if adi = 1 Then
Lcdcmdout LcdLine2Clear
Lcdout #button
button = 16
Endif
Return

Esto directamente te va mostrando los numeros que pulsas y tenes los que vos quieras, lo que tenes que hacer es ir comparando con los digitos de tu clave.-
Esta es una posibilidad, igualmente el pic simulator ide no es bueno. Trata de migrar a otro.-
Una pregunta - lo simulaste con algun soft como el proteus? simulalo y ahi vas a ver como se te aclaran mejor las cosas, no uses el simulador del ide es a modo gral.-
Ahh lo del Hb y LB es para acceder a los bytes alto y bajos de una variable.-
Bueno cualquier cosa pregunta.-
Saludos.-

mammuky

Reputación

sin valorar Dom Jul 19, 2009 7:41 pm
   
Ok.
Julio ya esta, mira las modificaciones y vas a ver que simple era.-
Código:
Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 12
AllDigital

Define LCD_BITS = 8
Define LCD_DREG = PORTB
Define LCD_DBIT = 0
Define LCD_RSREG = PORTE
Define LCD_RSBIT = 0
Define LCD_RWREG = PORTE
Define LCD_RWBIT = 1
Define LCD_EREG = PORTE
Define LCD_EBIT = 2
Define LCD_READ_BUSY_FLAG = 1
Lcdinit 0

Dim button As Word
Dim clave As Long
Dim total As Long
Dim tecla As Word
Dim error As Byte
Dim adi As Byte
Dim cla As Byte
Dim paso As Byte
'***********************
'Agregado
'***********************
Dim i As Byte
Dim max As Byte
'***********************
Symbol alarma = PORTC.0
Symbol buz = PORTC.1
Symbol raw1 = RD4
Symbol raw2 = RD5
Symbol raw3 = RD6
Symbol raw4 = RD7
Symbol col1 = RD0
Symbol col2 = RD1
Symbol col3 = RD2
Symbol col4 = RD3

TRISD = 0xf0
TRISC = 0
TRISA = 0

paso = 0
adi = 0
alarma = 0
error = 0
'cambie la clave para probar
clave = 123456
buz = 0
total = 0
button = 16
tecla = 0
cla = 0
'*******************************
'Esto es lo que agregue
i = 1  'Contador de posicion
max = 6  'Cantidad de digitos
'******************************
loop:
adi = 1
If alarma = 0 Then
Lcdcmdout LcdLine1Home
Lcdout "CLAVE DE ACTIVE"
Gosub active_al
Else
Lcdcmdout LcdLine1Home

Lcdout "CLAVE DESACTIVE"
Gosub active_al
Endif
Goto loop
End                                               



active_al:

adi = 1
While button = 16
Gosub get_button
WaitMs 2
Wend
tecla = button
While button = tecla
button = 16
Gosub get_button
WaitMs 2
buz = 1
Wend
buz = 0



If tecla = 15 Then

If cla = 2 Then
clave = total
cla = 0
paso = 1
total = 0
WaitMs 15
Lcdcmdout LcdLine1Home
Lcdout "NUEVA CLAVE"
Lcdcmdout LcdLine2Home
Lcdout "ACTIVADA"
buz = 1
WaitMs 70
buz = 0
Endif

If cla = 1 Then
If total = clave Then
cla = 2
Else
error = 1
Endif
Endif

If paso = 0 Then

If cla = 0 Then
If total = clave Then
If alarma = 1 Then
alarma = 0
Lcdcmdout LcdClear
Lcdout "ALARMA"
Lcdcmdout LcdLine2Home
Lcdout "DESACTIVADA"
WaitMs 15
buz = 1
WaitMs 100
buz = 0
Else
alarma = 1
Lcdcmdout LcdClear
Lcdout "ALARMA"
Lcdcmdout LcdLine2Home
Lcdout "ACTIVADA"
WaitMs 15
buz = 1
WaitMs 100
buz = 0
Endif
Else
error = 1
Endif
Endif
i = 1  'Siempre reseteo i
WaitMs 500  'Aca tambien ya que si no no te deja ver al mensaje
Endif

total = 0
button = 16
tecla = 0
adi = 0
Lcdcmdout LcdClear
Endif


If tecla = 14 Then
total = 0
button = 16
tecla = 0
cla = 0
adi = 0
Lcdcmdout LcdClear
Endif


If tecla = 13 Then
cla = 1
total = 0
Lcdcmdout LcdClear
Lcdcmdout LcdLine1Home
Lcdout "CLAVE ANTERIOR"
While cla = 1
Gosub active_al
Wend

If cla = 2 Then
WaitMs 15
Lcdcmdout LcdLine1Home
Lcdout "NUEVA CLAVE"
buz = 1
WaitMs 170
buz = 0

While cla = 2
Gosub active_al
Wend
paso = 0
Endif
Endif

If error = 1 Then
WaitMs 2
Lcdcmdout LcdClear
Lcdcmdout LcdLine1Home
Lcdout "CLAVE INCORRECT"
buz = 1
WaitMs 70
buz = 0
error = 0
cla = 0
i = 1  'Resteo i
WaitMs 500  'Agregue esto para que te deje ver el mensaje
Endif  'ya que lo hacía muy rapido

'*******************************
'Aca tambien modifique
'*******************************
If adi = 1 Then

   If i <= max Then
      'total la dejamos para comparar
      total = total * 10 + tecla
      Lcdcmdout LcdLine2Pos(i)  'incremento la posicion en el lcd
      Lcdout #tecla  'muestro la tecla pulsada
      i = i + 1
   Endif
Endif
'*********************************
Return                                           


get_button:
col1 = 1
If raw1 = 1 Then button = 1
If raw2 = 1 Then button = 4
If raw3 = 1 Then button = 7
If raw4 = 1 Then button = 10
col1 = 0
col2 = 1
If raw1 = 1 Then button = 2
If raw2 = 1 Then button = 5
If raw3 = 1 Then button = 8
If raw4 = 1 Then button = 0
col2 = 0
col3 = 1
If raw1 = 1 Then button = 3
If raw2 = 1 Then button = 6
If raw3 = 1 Then button = 9
If raw4 = 1 Then button = 11
col3 = 0
col4 = 1
If raw1 = 1 Then button = 12
If raw2 = 1 Then button = 13
If raw3 = 1 Then button = 14
If raw4 = 1 Then button = 15
col4 = 0
Return 


Bueno lo unico que te tenes que fijar es lo del cambio de clave ya que lo estas haciendo mal, lo tenes que grabar en la eeprom porque sino cuando apagas el circuito se te borra.-
Saludos.-

mammuky

Reputación

comentario del autor Lun Jul 27, 2009 11:16 am
   
Porfa si alguien me pudiera decir como grabo la clave en la eprom para que no se me borre cuando la apague y cuando la vuelva a prender sea la clave gravada.

julio huayta

Reputación

sin valorar Mar Jul 28, 2009 12:30 am
   
Ok.
Julio tenes que usar:
Cita:
● Using internal EEPROM memory
Access to EEPROM data memory can be programmed using READ and WRITE statements. The first argument is the address of a byte in EEPROM memory and can be a constant or Byte variable. The second argument is data that is read or written (for READ statement it must be a Byte variable). It is suggested to keep interrupts disabled during the execution of WRITE statement.
DIM A AS BYTE
DIM B AS BYTE
A = 10
READ A, B
WRITE 11, B

O sea:
READ direccion,dato
y lo mismo para Write.-
Si entendiste bien el programa que te modifique esto es simplemente agregar un poco de codigo, o sea tenes que escribir en una direccion de memoria para cada digito, en tu caso al ser de 6 digitos usa por ejemplo de la 00 a la 05.-
Espero que entiendas.-
Saludos.-

mammuky

Reputación

comentario del autor Mar Jul 28, 2009 10:28 am
   
Gracias nuevamente, voy a Intentarlo no parece tan complicado.. : )

julio huayta

Reputación

comentario del autor Jue Jul 30, 2009 3:04 pm
   
hola, ya me falta poco , pero quisiera una ayuda con la simulacion, estoy trabajando con pic simulator ide, y su simulacion no es de tiempo real, y dificulta unas cosas que agregue a mi programaalguien sabe de otro simulador? escuche sobre el Proteus, alguien podria darme un enlace para encontrarlo?

julio huayta

Reputación

comentario del autor Jue Jul 30, 2009 3:05 pm
   
Hola, ya me falta poco , pero quisiera una ayuda con la simulacion, estoy trabajando con pic simulator ide, y su simulacion no es de tiempo real, y dificulta unas cosas que agregue a mi programa alguien sabe de otro simulador? Escuche sobre el Proteus, alguien podria darme un enlace para encontrarlo ?

julio huayta

Reputación

sin valorar Jue Jul 30, 2009 8:45 pm
   
Ok.
De la pagina oficial:
http://www.labcenter.co.uk/download/prodemo_download.cfm#professional
Suerte.-

mammuky

Reputación

comentario del autor Lun Ago 03, 2009 12:52 pm
   
hola, se que hasta ahora he hecho muchas preguntas, mas ahora tambien tengo otra:
¿COMO HAGO PARA UTILIZAR DOS LCD A LA VES EN MI PROGRAMA, (HABILITAR UNO Y DESACTIVAR EL OTRO)
CUALES SON LOS COMANDOS A UTILIZAR PUES EN LA INFORMACION QUE ESTA EN LA RED NO ES SUFICIENTE SOLO SE QUE EL PIN "E" DEL LCD HABILITA O DESABILITA, HAY ALGUN EJEMPLO PARA ESTO O UNA INFORMACION MAS AMPLIA?. muchas gracias.

julio huayta

Reputación

comentario del autor Mie Ago 19, 2009 12:38 pm
   
Hola por favor si me pudiera alguien dar un diagrama de un gravador de pic ( para el 16F877A) y cual es el sofware recomendado, e visto varios pero me es un poco complicado enterder algunos ( esque vi en ellos un pic que travaja con el gravador, algo asi).. de ante mano se lo agradesco y si se puede una brebe explicacion de su armado.

julio huayta

Reputación



Hacer una pregunta

Boletín de Noticias

Reciba noticias de tecnología, tips de reparación y ofertas exclusivas.



Reglamento / P+F

Foros

Miembros / Expertos