Autor Tema: Pic basic pro comandos read, write y data  (Leído 7958 veces)

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

Desconectado mammoli

  • PIC10
  • *
  • Mensajes: 8
    • El Chang
Pic basic pro comandos read, write y data
« en: 15 de Noviembre de 2007, 12:01:59 »
Hola a todos, tengo un problema: tengo que guardar en la memoria del pic un valor de tipo word, y leerlo en caso de que se reinicie, concretamente es un contador de explosiones en una rampa de gas, este valor puede ser entre 1 y 9000, mas o menos, puede variar.

El codigo que uso es:

Citar
ADCON1 = %0110 ' Segun el datashett, puerto a digital
..
..
..

Detonan var word    ' Contador del tiempo de detonacion
Comando var byte    ' Comandos recibidos serialmente
Bandera var bit     ' Bandera de apagado

Inicio:   read 1,Detonan
            read 2,Bandera
           
           
            serout transmi,4,["*",detonan,"*",#bandera,13]       


El tema es que lee cualquier valor, no el que ha sido almacenadom por ejemplo, ahora se que se almaceno 5690 y leo algo asi como 128 ??? :shock:

Alguna idea??
Ariel Mammoli

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Pic basic pro comandos read, write y data
« Respuesta #1 en: 15 de Noviembre de 2007, 12:07:21 »
Si no me equivoco, solo puedes guardar bytes en la memoriadel PIC por lo cual deberas partir tu valor en 2 y guardarlo en 2 posiciones cuando lo quieras leer deberas leerlo tambien en 2 y juntarlo. Quizas por ello no lees el valor que es.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Pic basic pro comandos read, write y data
« Respuesta #2 en: 15 de Noviembre de 2007, 12:28:05 »
Hola:

en realidad son 8 bits que corresponden a un byte.

De donde recibes el valor que corresponde al tiempo de detonación?


Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Pic basic pro comandos read, write y data
« Respuesta #3 en: 15 de Noviembre de 2007, 12:31:33 »
mammoli,

Efectivamente como te comenta navaismo tienes que descomponer la variable Detonan en dos variables tipo byte, esto es:
Detonan            Var     word
Detonan_H       Var     Detonan.HighByte
Detonan_L       Var     Detonan.LowByte

Ahora bien cuando incrementas la cuenta de Detonana,me imagino que haces algo asi:

Detonan = Detonan + 1

Ahora bien para guardar el valor en la eeprom de datos, haces esto:

write    0,Detonan_H
write    1,Detonan_L

Y para leerlo haces esto:

read     0,Detonan_H
read     1,Detonan_L

y para mostrarlo en el puerto serial:

serout2  transmi,396,[DEC Detonan]

Saludos.

Elreypic.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Pic basic pro comandos read, write y data
« Respuesta #4 en: 15 de Noviembre de 2007, 12:49:24 »
Hola:

Que bien, de paso sirvió el ejemplo del highbyte y lowbyte, nunca lo había utilizado, muy útil, gracias elreypic2  :mrgreen:

Desconectado mammoli

  • PIC10
  • *
  • Mensajes: 8
    • El Chang
Re: Pic basic pro comandos read, write y data
« Respuesta #5 en: 15 de Noviembre de 2007, 18:33:51 »
Hola:

en realidad son 8 bits que corresponden a un byte.

De donde recibes el valor que corresponde al tiempo de detonación?



El pic cuenta las detonaciones de un cañon antigranizo, tiene un microfono, que cada vez que "escucha" la detonacion, genera un pulso, yo cuento estos pulsos, ya que son un valor indispensable para conocer la efectividad del sistema y el gas restante en las rampas, se utiliza aceitileno.
Ariel Mammoli

Desconectado mammoli

  • PIC10
  • *
  • Mensajes: 8
    • El Chang
Re: Pic basic pro comandos read, write y data
« Respuesta #6 en: 15 de Noviembre de 2007, 18:40:57 »
mammoli,

Efectivamente como te comenta navaismo tienes que descomponer la variable Detonan en dos variables tipo byte, esto es:
Detonan            Var     word
Detonan_H       Var     Detonan.HighByte
Detonan_L       Var     Detonan.LowByte

Ahora bien cuando incrementas la cuenta de Detonana,me imagino que haces algo asi:

Detonan = Detonan + 1

Ahora bien para guardar el valor en la eeprom de datos, haces esto:

write    0,Detonan_H
write    1,Detonan_L

Y para leerlo haces esto:

read     0,Detonan_H
read     1,Detonan_L

y para mostrarlo en el puerto serial:

serout2  transmi,396,[DEC Detonan]

Saludos.

Elreypic.

No funciono, te cuento que como son varias las variables que debo guardar me hice un par de rutinas que te muestro a continuacion, antes de llamarla pongo los valores adecuados en las variables adress y dato:

Citar
..
..
adress  var byte
dato    var word
datoL   var dato.highbyte
datoH   var dato.lowbyte
..
..
Leer:     read adress,datoh
          adress = adress + 1
          read adress,datol
          return
Escribir: write adress,datoh
          adress = adress + 1
          write adress,datol
          return
..
..
' ejemplo uso leer variable temperatura
adress = 0
gosub leer
temperatura = dato
' ejemplo uso escribir temperatura
adress = 0
dato = temperatura
gosub escribir
..


lo estoy probando en el isis (proteus) y los resultados son : escribo 5000, leo 65535 !!! :shock: :shock: :shock:
Ariel Mammoli

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Pic basic pro comandos read, write y data
« Respuesta #7 en: 16 de Noviembre de 2007, 03:54:14 »
Detonan            Var     word
Detonan_H       Var     Detonan.HighByte
Detonan_L       Var     Detonan.LowByte

write    0,Detonan_H
write    1,Detonan_L

Y para leerlo haces esto:

read     0,Detonan_H
read     1,Detonan_L


Si no recuerdo mal, también se puede hacer:

Detonan     VAR   WORD

WRITE  0,Detonan.1
WRITE  0,Detonan.0

READ  0,Detonan.1
READ  0,Detonan.0


Te ahorras el estar sumando a cada variable (además de otros dos registros de RAM).

Algo asi.
« Última modificación: 16 de Noviembre de 2007, 04:04:06 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado mammoli

  • PIC10
  • *
  • Mensajes: 8
    • El Chang
Re: Pic basic pro comandos read, write y data
« Respuesta #8 en: 16 de Noviembre de 2007, 16:33:59 »
Detonan            Var     word
Detonan_H       Var     Detonan.HighByte
Detonan_L       Var     Detonan.LowByte

write    0,Detonan_H
write    1,Detonan_L

Y para leerlo haces esto:

read     0,Detonan_H
read     1,Detonan_L


Si no recuerdo mal, también se puede hacer:

Detonan     VAR   WORD

WRITE  0,Detonan.1
WRITE  0,Detonan.0

READ  0,Detonan.1
READ  0,Detonan.0


Te ahorras el estar sumando a cada variable (además de otros dos registros de RAM).

Algo asi.

 :-/Buenisimo, te agradezco mucho porque me estaba volviendo loco, te cuento que tengo que leer y escribir la friolera de 8 variables y me faltan mas ... y los recursos se empiezan a agotar ... :-)
Ariel Mammoli

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Pic basic pro comandos read, write y data
« Respuesta #9 en: 16 de Noviembre de 2007, 17:30:20 »
Alguna vez hice algo asi para recibir datos.


Detonan   VAR  BYTE[6]

Y cada uno se escribía o leía así:

Detonan[0] = lo que quiero escribir en el byte 0

lo que quiero que se guarde del byte 5 = Detonan[5]


Quizá te sirva para esas múltiples variables.
« Última modificación: 16 de Noviembre de 2007, 17:34:09 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado pikman

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 679
Re: Pic basic pro comandos read, write y data
« Respuesta #10 en: 19 de Noviembre de 2007, 00:02:27 »
Hola, mira que interesante lo del cañon, como es el circuito del microfono?, hace mucho tiempo hice algo igual, pero al que se lo fabrique lo queria regalado, por lo que desde esa epoca anda buscando quien le haga el firmware, no laburo con pbp
pero te dejo el codigo ejemplo de C de como guardar una variable word, solo que deberas replicar este proceso en basic qu eno es muy dificil,  y espero que no sea tu cliente la basura que me toco a mi porque si que te puedo asegurar que no vas cobrar nada.

saludos
ARIEL/PIKMAN

Código: [Seleccionar]

// Recuperacion de registros de la eeprom a la RAM

void  read_counter (){
                for (i=0;i<2;i++)                              // recupera el valor de contador
                *(&contador + i)  = read_eeprom(i + 0x05);     // lee la eeprom variable de 16 bits
                }   

// Salva los registros de Ram a la eeprom

void  write_counter (){
                for (i=0;i<2;i++)                                         // guarda 16 bits en la
                write_eeprom(i + 0x05, *(&contador + i));      // eeprom del micro del contador de explosiones.
                }

saludos
PikMan

Desconectado mammoli

  • PIC10
  • *
  • Mensajes: 8
    • El Chang
Re: Pic basic pro comandos read, write y data
« Respuesta #11 en: 19 de Noviembre de 2007, 19:17:19 »
Hola, mira que interesante lo del cañon, como es el circuito del microfono?, hace mucho tiempo hice algo igual, pero al que se lo fabrique lo queria regalado, por lo que desde esa epoca anda buscando quien le haga el firmware, no laburo con pbp
pero te dejo el codigo ejemplo de C de como guardar una variable word, solo que deberas replicar este proceso en basic qu eno es muy dificil,  y espero que no sea tu cliente la basura que me toco a mi porque si que te puedo asegurar que no vas cobrar nada.

saludos
ARIEL/PIKMAN

Código: [Seleccionar]

// Recuperacion de registros de la eeprom a la RAM

void  read_counter (){
                for (i=0;i<2;i++)                              // recupera el valor de contador
                *(&contador + i)  = read_eeprom(i + 0x05);     // lee la eeprom variable de 16 bits
                }   

// Salva los registros de Ram a la eeprom

void  write_counter (){
                for (i=0;i<2;i++)                                         // guarda 16 bits en la
                write_eeprom(i + 0x05, *(&contador + i));      // eeprom del micro del contador de explosiones.
                }



Esperemos que no sea entonces  :shock:  ... yo estoy en Mendoza, Argentina ... ya quedo solucionado el tema de guardar variables word, muchas gracias a todos los que me han ayudado . :-/ .. con respecto al circuito del microfono, simplemente se usa un LM538 que genera un pulso alto cada vez que "escucha" un sonido, y el sonido se regula a traves de un preset para determinar que nivel de sonido genera o no el pulso. Esto no lo desarrolle yo, a mi me pidieron el nuevo firmware solamente ...

Despues contame si tu clente era de esta zona, para tener mas cuidado ... :lol:
Ariel Mammoli

Desconectado pikman

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 679
Re: Pic basic pro comandos read, write y data
« Respuesta #12 en: 20 de Noviembre de 2007, 02:56:35 »
Bueno, te conteste por privado, pues no es un lugar para debatir ciertos temas, yo tambien soy de mendoza, y la placa del LM358 la diseñe yo, de hecho, fue algo que hice experimentalmente, pues cualquier ruido lo activa y no se puede saber si es o no efectivo el equipo, ahora utilizo algo mas elaborado que ademas controla el tiempo de ingicion de gas para corregir la potencia.

saludos
ARIEL
saludos
PikMan

Desconectado mammoli

  • PIC10
  • *
  • Mensajes: 8
    • El Chang
Re: Pic basic pro comandos read, write y data
« Respuesta #13 en: 20 de Noviembre de 2007, 08:57:32 »
De acuerdo con lo que no es el lugar, pido perdon a los demas. Con respecto a tu circuito tambien te mande un privado porque mi cliente ha cambiado varias veces de placa y no se si estamos hablando de la misma. De nuevo muchas gracias a todos por su ayuda y quedo a su disposición.
Ariel Mammoli


 

anything