Autor Tema: Ejemplitos de Mikrobasic y Proteus  (Leído 140772 veces)

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

Desconectado rasec_1984

  • PIC10
  • *
  • Mensajes: 29
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #30 en: 16 de Octubre de 2007, 19:23:05 »
Hola amigos del foro. en el subforo de preguntas me ayudaron con un problemita que tenia, y el codigo ya esta listo, asi que lo publico aca por si le es util a alguien.

program fasbas3

dim tiempo    as byte
dim medir     as byte
dim atento    as byte
dim angulo    as float
dim x         as float
dim cosfi     as float
dim mostrarw  as word
dim mostrarh  as byte
dim i         as byte
dim cap       as byte

sub procedure interrupt

if portb.6=0 then      'si voltaje y corriente estan en 0
   if portb.7=0 then
      atento=1         'entonces estamos atentos
   goto fin
   end if
end if

if atento=1 then      'si estamos atentos, y hay un cambio en V o I
   TMR0=0              'ponemos TMR0 en cero
   if portb.6=1 then   'si el que subio primero fue la corriente
      cap=1            'entonces es una carga capacitiva
   end if
   atento=0            'ya no estamos atentos
    medir=1            ' y seteamos medir para que a la proxima interrupcion
                       'entre al bloque "if, end if" siguiente
   intcon=%00101000    'habilitamos la interrupcion por desbordamiento TMR0
   goto fin
end if

if medir=1 then       'Si medir esta en 1 a la proxima interrucion
   tiempo=TMR0        'tomamos el tiempo
   if intcon.t0if=1 then  'si se desborda el TMR0
      tiempo=0            'no se produjo interrupcion por V o i, y tiempo=0
   end if
   medir=0
   intcon=%00000000   'desabilitamos interrupcion por TMR0 y por puerto B
end if

fin:

end sub

main:
                     'iniciamos las variables
tiempo=0
medir=0
atento=0
option_reg=%00000100 'divisor de frecuencia en 1:32
cmcon=7              'todas las entradas y salidas como digitales
trisb=%11000000
trisa=%00110000
portb=0
porta=0
i=96                 'iniciamos i=96 para que mida de inmediato

inicio:

if i=96 then
   intcon=%10001000       'activamos interrupcion por cambio del puerto B
end if
if i=100 then             'si se ha mostrado el resultado 100 veces, calulamos denuevo
   intcon=0               'desabilitamostodas las interrupciones
   i=0
   atento=0
   medir=0
   if cap=1 then          'si cap=1, entonces
      portb.4=1           'la carga es capacitiva, encendemos rb4
      portb.5=0           'y apagamos rb5
   else                   'si no
      portb.4=0           'la carga es inductiva, apagamos rb4
      portb.5=1           'y encendemos rb5
   end if
   cap=0                  'iniciamos el indicador de craga "cap"
if porta.5=1 then         'si entrada ra5=1, calculamos el angulo
   porta.6=0
   porta.7=1              'encendemos indicador de que mostramos angulo
   if porta.4=1 then      'si ra4=1, trabajamos con 50Hz
      angulo=5.76*tiempo    'angulo para 50 Hz
   else
      angulo=6.912*tiempo   'angulo para 60 Hz
   end if
   mostrarw=angulo        'transformamos de float a word (sacamos parte entera)
else                      'si no, calculamos el coseno del angulo
   porta.7=0
   porta.6=1              'encendemos indicador de que mostramos el coseno
   if porta.4=1 then      'si ra4=1, trabajamos con 50Hz
      x=0.010053*tiempo    'angulo en radianes para 50 Hz
   else
      x=0.012064*tiempo    'angulo en radianes para 60 Hz
   end if
   cosfi=1000*(1-(1/2)*x*x+(1/24)*x*x*x*x-(1/720)*x*x*x*x*x*x) 'sacamos cos x
   mostrarw=cosfi                      'sacamos parte entera, float -> word
end if
   mostrarw=dec2bcd16(mostrarw) 'transformamos mostrarw de decimal a bcd
   mostrarh=hi(mostrarw) 'guardamos los 8 bits de mas peso de mostrarw
end if

'Mostramos en los displays, multiplexamos.

porta.0=1
porta.1=0
porta.2=0
porta.3=0

portb.0=mostrarw.0
portb.1=mostrarw.1
portb.2=mostrarw.2
portb.3=mostrarw.3

delay_ms(3)

porta.0=0
porta.1=1
porta.2=0
porta.3=0

portb.0=mostrarw.4
portb.1=mostrarw.5
portb.2=mostrarw.6
portb.3=mostrarw.7

delay_ms(3)

porta.0=0
porta.1=0
porta.2=1
portb.3=0

portb.0=mostrarh.0
portb.1=mostrarh.1
portb.2=mostrarh.2
portb.3=mostrarh.3

delay_ms(3)

porta.0=0
porta.1=0
porta.2=0
porta.3=1

portb.0=mostrarh.4
portb.1=mostrarh.5
portb.2=mostrarh.6
portb.3=mostrarh.7

delay_ms(3)

i=i+1
goto inicio
end.


Este es un programa para medir el desfase entre voltaje y corriente en un circuito alterno, o el factor de potencia (el coseno del angulo). ya sea para 50 Hz o 60 Hz. Tambien indica si la carga es capacitiva o inductiva. Los pines se distribuyen de la siguiente manera:

rb0 a rb3 : salida en binario a los display de 7 segmentos (pasa primero por del deco BCD/7 seg)
ra0 a ra3 : destinados a activar cada display en el momento correcto (destinados a multeplexear)
br7: entrada de la señal de voltaje.                   rb6: entrada de la señal de corriente
rb5: enciende led indicando carga capacitiva.     rb4:  enciende led indicando carga inductiva
ra7: enciende el punto del display de la izquierda, necesario para medir fp (Ej: 0.985)
ra6: enciende el punto del segundo display contando desde la izquierda, necesario para medir angulo (Ej: 85.23)
ra5: entrada que escoge si queremos medir angulo o fp (cos del angulo)
ra4: entrada que escoge si queremos medir en 50Hz o en 60Hz

Para el calculo del coseno se ocupo la aproximacion por polinomio de taylor, la cuel es exacta para varios decimales (la funcion cos de microbasic consume muchos recursos). La señal de voltaje y corriente deben entrar de forma cuadrada, pasando primero por comparadores. Se puede usar un trafo de voltaje para disminuir el voltaje, y una resistencia de bajo valor en serie para la corriente, o hacerse un trafo de corriente con un nucleo troidal. Se puede utilizar filtros para eliminar problemas con armonicos, claro que cambiaran la fase de la señal y habra que corregirlo con un circuito o por programa. Eso es todo. Adios. :-) :D :mrgreen: :-/
........Los grandes espíritus siempre han encontrado una violenta oposición de parte de mentes mediocres.....

Desconectado marcelo2112

  • PIC12
  • **
  • Mensajes: 64
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #31 en: 07 de Noviembre de 2007, 14:44:56 »
Lectura simple de un ADC en el LCD

Bueno aqui otro programilla, este si me costo trabajo. :D :D


Código: FreeBasic
  1. program adcMKB
  2.  
  3. dim tiempo  as word             ' variable de almacenamiento del adc
  4.     tiempot as string[5]        ' variable para poder ver en el lcd el resultado
  5.  
  6. main:                           ' canal RA0 como analogico
  7.  ADCON1 = 142                   ' canal de entrada
  8.  TRISA.0 = 1
  9.  
  10.  Lcd_Config(PORTD,3,2,1,0,PORTB,0,1,2)         'configuracion lcd
  11.  Lcd_Cmd(LCD_CURSOR_OFF)
  12.  Lcd_Cmd(LCD_CLEAR)
  13.                                                 ' lectura del adc RA0
  14.  tiempo = adc_read(0)                           ' Lo pasamos a cadena para LCD
  15.  wordtostr(tiempo,tiempot)
  16.                                                 ' aqui lo desplegamos en el lcd
  17.  lcd_out(1,3,tiempot)
  18.  delay_ms(1000)
  19.  
  20. goto main
  21. end.




navaismo porque a 5v de entrada el display indica 1022???que cuenta o calculo se realiza para obtener ese valor y como puedo modificarlo???gracis

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #32 en: 07 de Noviembre de 2007, 14:52:34 »
Cuenta 5V igual a 1022 porque es una conversion de ADC de 10BIits -o 1024 Valores- y como no uso voltaje de referencia por defecto toma el valor maximo que es 1024 a 5V y el minimo 0V a 0.

Los ADC's del pIc solo tienen exactitud de 8 y 10Bits y dependiendo de ello y de los voltajes de referencia es como puedes variar esos valores.
"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 marcelo2112

  • PIC12
  • **
  • Mensajes: 64
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #33 en: 07 de Noviembre de 2007, 16:01:10 »
OK. Entonces para tomar una medida(en tension), realizar un calculo matematico y expresarlo en el lcd, me puede servir???que tengo que hacer??

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #34 en: 07 de Noviembre de 2007, 16:58:09 »
Primero que nada deberias leer mas acerca del uso de los ADCs del PIC busca aqui en el foro sobre esa info. Despues debes entender que cada valor decimal dependiendo de la resolucion que uses, corresponde a un valor del voltaje que estas midiendo con eso ya puedes hacer tus calculos y deplegar lo que quieres.
"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 rasen

  • PIC10
  • *
  • Mensajes: 1
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #35 en: 08 de Julio de 2008, 01:20:46 »
holas . soy nuevo y quisiera saber como  creo un programa contador con 2 display y que cuente hasta  99
si me pudieran ayudar en algo estaria muy agradecido
desde ya muchas gracias

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #36 en: 08 de Julio de 2008, 01:33:48 »
Si estas trabajando con MKB mirate los ejemplos, esta el indice y ahi encontraras el contador o los contadores hechos por PAO
"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 sandra

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 374
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #37 en: 18 de Octubre de 2008, 17:33:35 »
Infortunadamente tiene rato que se esta confundiendo la intención del foro, incluso hubo alguien en una ocasión que muy molesto afirmaba que este era un foro donde se solicitaba código a pedido, y alguien se lo costearía  en chinga que quiere decir rápidamente.
Y hasta  a domicilio como aquel tío que me mando un correo solicitándome un código y que le hiciera el favor de enviárselo por correo, por que no encontraba quien se lo quisiera hacer y ni un becito me mando.
Lamento mucho esta situación.
Todos aquí estamos en la mejor disposición de ayudar en la medida  que nuestros conocimientos lo permitan y sobre todo tiempo.
Pero por millonésima ves aquí no se le realizan las labores a nadie,  pueden  postear dudas especificas e informadas ,después de haber consultado el buscador del foro. se que muchos  sienten esto como patada en el hígado, pero espero que entiendan que es por la salud del foro.  que caso tiene responder mil veces lo que se a tratado ya  aquí nadie va a inventar el agua tibia, así que aunque sientan que su pregunta es única e irrepetible la realidad es que alguien mas  ya la  realizo.
Un abraso :g)


El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado danipalma

  • PIC10
  • *
  • Mensajes: 3
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #38 en: 25 de Marzo de 2009, 17:35:51 »
HOLA SOY NUEVO EN ESTO ESTOY HACIENDO UN PROGRAMA EL CUAL SE  DEBE LEER SEÑALES ANALOGICAS DE VARIOS PINES DEL PUERTO A  Y MOSTRARLAS A TRAVEZ DE UNA PANTALLA LCD , LA SELECCION DE Q SEÑAL VOY A MOSTRAR POR LA PANTALLA LCD LA DEBO HACER A TRAVEZ DE PULSADORES COLOCADOS EN EL PUERTO C. POR EJEMPLO

AL ALIMENTAR EL PIN PORTC.0 DEBE MOSTRARME EN LA PANTALLA EL VALOR DE LA SEÑAL ANALOGICA COLOCADA EN PORTA.0
DE IGUAL FORMA CON
PORTC.1 CON PORTA.1
PORTC.2 CON PORTA.2 ASI SUCESIVAMENTE HASTA PORTC.7 CON PORTA.7

AQUI LES ANEXO TANTO EL PROGRAMA HECHO EN MIKROBASIC COMO EL MONTAJE HECHO EN PROTEUS . SI ALGUIEN PUEDE REVISELO  Y DIGAME Q TENGO MALO  :( :( :(

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #39 en: 25 de Marzo de 2009, 21:09:48 »
Pues así   echándole una mirada rápida no encuentro que este mal, no miro un error que sea evidente.  así que solo me queda darte dos recomendaciones evita el  uso del goto, mkb es mucho mas que un goto puedes utilizar  sub function y  sub procedure según sea el caso .
Con esto logras que tú programa este mejor estructurado y sea más legible.
En la medida de lo posible monta tu circuito ,  proteus de repente te ase pasar un mal rato algo que no funciona en la simulación cuando lo montas va bien.

Desconectado danipalma

  • PIC10
  • *
  • Mensajes: 3
AYUDA CON CONVERSION ANALOGO DIGITAL Y LUEGO TRANSMISION DE DATOS POR LA UART
« Respuesta #40 en: 01 de Abril de 2009, 22:56:05 »
Hola amigo primeramente gracias por estos ejemplitos me han servido de gran ayuda para mi incorporación al mundo de mikrobasic y me han ayudado a realizar mi proyecto de grado, pero me gustaría pedirte un favor necesito digitalizar una señal analógica y luego el valor de ella enviarla a través de un puerto RS232 usando la librería uart, revise tus ejemplos individuales y si pude realizarlos pero no se como hacer para que mi señal tomada del canal analógico luego la pueda enviar por la uart

Una de mis dudas es que la variable de la señal digitalizada es del tipo Word mientras que la que se envía por el uart es tipo byte, si tienen un ejemplo sencillo de esto les estaría muy agradecido, yo uso el PIC 18f4520, pero me sirve un ejemplo con cualquiera solo quiero ver la estructura del programa y bueno no estaría de mas el diagrama realizado en proteus...

Muchas gracias y sigan así, que realmente nos brindan gran ayuda a los amantes de la electrónica
« Última modificación: 02 de Junio de 2009, 05:44:59 por dogflu66 »

Desconectado jaissonc

  • PIC10
  • *
  • Mensajes: 2
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #41 en: 02 de Mayo de 2009, 03:22:34 »
Hola amigos estoy ingrsando al mundo de los PIcs y quiero practicar con este mikrobasic pero tengo un problema al momento de compilar, no me aparece el .hex, e reinstalado el mikrobasic y nada de nada, no se que puede estar pasando o que estoy haciendo mal.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #42 en: 02 de Mayo de 2009, 07:49:58 »
hola en cuanto a tu problema da mas detalles o que error te indica el mikrobasic o muestranos una imagen  asi podremos ayudarte en lo posible.

Atten.
Alexander Santana.
Venezuela-Barcelona.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: AYUDA CON CONVERSION ANALOGO DIGITAL Y LUEGO TRANSMISION DE DATOS POR LA UART
« Respuesta #43 en: 02 de Mayo de 2009, 08:00:19 »

HOLA AMIGO PRIMERAMENTE GRACIAS POR ESTOS EJEMPLITOS ME HAN SEERVIDO DE GRAN AYUDA PARA MI INCORPORAMIENTO AL MUNDO DE MIKROBASIC Y ME HAN AYUDADO A REALIZAR MI PROYECTO DE GRADO, PERO ME GUSTARIA PEDIRTE UN FAVOR NECESITO DIGITALIZAR UNA SEÑAL ANALOGICA Y LUEGO EL VALOR DE ELLA ENVIARLA A TRAVEZ DE UN PUERTO RS232 USANDO LA LIBRERIA UART, REVISE TUS EJEMPLOS INDIVIDUALES Y SI PUDE REALIZARLOS PERO NO SE COMO HACER PARA QUE MI SEÑAL TOMADA DEL CANALA ANALOGICO LUEGO LA PUEDA ENVIAR POR LA UART

UNA DE MIS DUDAS ES QUE LA VARIABLE DE LA SEÑAL DIGITALIZADA ES DEL TIPO WORD MIENTRAS QUE LA QUE SE ENVIA POR EL UART ES TIPO BYTE, SI TIENEN UN EJEMPLO SENCILLO DE ESTO LES ESTARIA MUY AGRADECIDO, YO USO EL PIC 18F4520, PERO ME SIRVE UN EJEMPLO CON CUALQUIERA SOLO QUIERO VER LA ESTRUCTURA DEL PROGRAMA Y BUENO NO ESTARIA DE MAS EL DIAGRAMA REALIZADO EN PROTEUS...

MUCHAS GRACIAS Y SIGAN ASI, QUE REALMENTE NOS BRINDAN GRAN AYUDA A LOS AMANTES DE LA ELECTRONICA

Hola buenos dias paisano o paisana ya que nose su sexo segun su nick pero en fin eso no viene al caso. Ahora  antes de entrar en calor sobre el dema de codigo que estas desarrollando te damos la gran bienvenida a la comunidad del foro TODOPIC y espero que te la pasen de lo mejor y que tu aprendisaje dea como siempre he dicho reciproco asi todos aprovecharemos conocimiento, ok, en cuanto a lo de transmitir una variable word via puerto serial que solo permite un byte como bien usted lo indico lo que tienes que hacer es separar la variable word y enviar los byte separados y asi luego ya tendrias lo que quieres solo que en la otra parte donde recibes esos bety tendrias que unirlo si te es necesario de esa manera o tu ves segun tu caso.

Saludos y cualquier cosa danos mas detalles y asi analizamos el caso y vemos posibilidades.

Atten.
Alexander Santana.
Venezuela-Barcelona.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado jaissonc

  • PIC10
  • *
  • Mensajes: 2
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #44 en: 02 de Mayo de 2009, 13:01:07 »
Bueno amigos sigo con este problema de no poder generar el .hex el.
El codigo qu qiero compilar es este


al momento que le doy ctrl+f9 parecia q carga una barrita pero aparece en un parpadeo.
haber si me pueden ayudar.