Curso de programación de PIC en PICBasic Pro

Hola a todos excelente esta pagina espero me puedan ayuda me hago bolas al programar en microcode studio estoy usando pic16f628A quiero hacer un cartel con 4 o 6 matrices de 8x8 leds, no entiendo como programar el puerto data y clock que entran a los 74LS164 estoy usando el diagrama de uControl pero no estiendo como programar el pic les agradeceria la ayuda, hay les dejo el pbp de microcode, el diagrama, proteus.
 

Adjuntos

  • MATRIZ 64 LEDS INTERNET.rar
    148 KB · Visitas: 327
hola bueno mi pregunta es para reyvilla que programa estas usando para programar los comandos me parecen mas facil de escrivir ejemplo de lo que pusiste


TRISA = %00000111
TRISB=0 'ESTABLECER EL PUERTO B COMO SALIDA
PORTB.6 = 1

PAUSE 500 ' PAUSE DE MEDIO SEGUNDO
ESPERE" ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE,$C0, "CARGANDO"
For A = 0 to 15
LOOKUP A,[ "......." ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
 
Última edición:
gracias lubeck por la pronta respuesta, amaneci destruido pensando lo de los moduos RF...jajaja... si es PBP 4.26 ò 4.27 y microcode studio 3...saludosss
 
Que tal amigos del foro, los molesto de nuevo, tengo un problema con un lcd 16*4 lo estoy controlando con un pic 16f84a con 4 bit, le tengo conectado un lcd 16*2 el problema es que quisiera que el texto se desplegara de la misma manera en los dos lcd, pero resulta que el el lcd 16*4 aparece el texto hasta la tercera linea he tratado de ubicar la direccion en hexadecimal de cada caracter de esta pantalla pero no lo he conseguido, les adjunto el archivo con la simulacion y codigo.
Me gustaria mucho si me enviaran un pequeÑo programa que despliegue un texto en esta lcd 16*4 y asi ubicarme en la posicion de los caracteres, gracias
 

Adjuntos

  • PROBLEMA CON LCD 16 X 4.zip
    27.6 KB · Visitas: 165
creo que debe existir un ejemplo en el curso, de todas formas de dejo una guia esta en ingles pero es bien sencilla y completa, tiene las direcciones de memoria de las lcd, etc...esat bien completa...espero y les sirva a muchos...saludos

LCD1.pdf

PD:Con respecto al circuito que adjunto @cesarpelen me parece que esta muy desarreglado, si utilizas termilaes de referencia es justamente para eviarte utilizar tantas lineas de conexion trata de mejorarlo, es solo una sugerencia...saludosss
 
Última edición:
Saludos amigos, vengo a solicitar su ayuda, realizo el circuito de comunicación i2c con una eeprom externa que se encuentra en el libro “micro controladores pic programación en basic de carlos a. reyes” en este libro realiza el circuito con una eeprom 24lc04b y un lcd mostrando la palabra “hola” al simularlo en proteus funciona con normalidad, pero yo quiero trabajar con una eeprom 24lc512 yo pensé que trabajaría con normalidad solo al cambiar el integrado pero no trabaja el lcd muestra cuadros negros no tengo idea de cuál es el problema, les dejo el programa realizado en microcode studio y muchas gracias.
define i2c_sclout 1

contro con $a0
PinSCL var Portb.1
PinSDA var Portb.0
dato var byte

Inicio:
lcdout $fe,1,"Grabando..."
pause 1000

i2cwrite pinsda,pinscl,contro,0,["H"]
pause 10
i2cwrite pinsda,pinscl,contro,1,["O"]
pause 10
i2cwrite pinsda,pinscl,contro,2,["L"]
pause 10
i2cwrite pinsda,pinscl,contro,3,["A"]
pause 10

lcdout $fe,1,"Leer memoria"

pause 1000
lcdout $FE,1

leer:

i2cread pinsda,pinscl,contro,0,[dato]
lcdout,dato
pause 1000
i2cread pinsda,pinscl,contro,1,[dato]
lcdout,dato
pause 1000
i2cread pinsda,pinscl,contro,2,[dato]
lcdout,dato
pause 1000
i2cread pinsda,pinscl,contro,3,[dato]
lcdout,dato
pause 1000
goto inicio
end
 
El problema esta en el control

Para escribir es $A0 y para leer es $A1

Código:
i2cwrite pinsda,pinscl,$A0,0,["H"]
i2cread pinsda,pinscl,$A1,0,[dato]

en cuantro al control debes estar pendiente de las paginas( no se si ese integrado las maneja, pero seguramente)
 
Hola compañeros, soy nuevo en el foro y quiero ver si me pueden ayudar
con un problema que tengo para controlar un servomotor SANYODENKI
de 24V 2.7A 3000 rpm. se trata de controlar la posicion del servomotor
para lo cual anexo el siguiente codigo con su explicacion el cual si funciona
pero solo a una velocidad muy lenta del servomotor por que el encoder
manda 2000 pulsos por revolucion a 3000 rpm = 100000 pulsos/seg
estoy utilizando un pic 16f877a con un oscilador de 8Mhz
Código:
'****************************************************************
'*  Name    : servodriver.BAS                                   *
'*  Date    : 21/11/2010                                        *
'****************************************************************
define osc 8   'declaracion del oscilador
Trisd = 255     'puerto D como entradas
Trisb = 0       'puerto B como salidas

Posicion var word  'Posicion a la que tiene que ir el servo
PosMenos var word  'Histeresis abajo
PosMas var word    'Histeresis arriba
Contador var word  ' Contador de pulsos del encoder
A var bit          'canal A del encoder 500 pulsos/r
B var bit          'canal B del encoder 500 pulsos/r
C var Bit          'canal C del encoder 500 pulsos/r
uA var bit         'variable para saber si cambio canal A
uB var bit         'variable para saber si cambio canal B
uC var bit         'variable para saber si cambio canal C
Giro var bit       'sentido de giro del servo

contador = 0
posicion=5000    'una posicion arbitraria
ua=0
ub=0
Cambio:          'cambiar sentido de giro
posmenos=posicion-15
posmas=posicion+15
portb=0

Inicio:
        ; si se presiona un pulsador se cambia la
        ;posicion a la que se debe de mover el servomotor
        if portd.1 =1 then  goto soltar
        if portd.0=1 then  ' LEE CANAL A  del encoder
            A=1     'activado
        else
            A=0     'desactivado
        endif 
        if portd.2=1 then ' LEE CANAL B   del encoder
            B=1     'activado
        else
            B=0     'desactivado
        endif               
        ;si el canal A mando un flanco de subida
        ;y el canal B esta activo giro=1
        IF UA=0 and A=1 and B=1 then giro=1
        ;si el canal A mando un flanco de subida
        ;y el canal B esta desactivado giro=0
        IF UA=0 and A=1 and B=0 then giro=0
        ;si cambia alguno de los canales del encoder
        ;es una posicion diferente y por lo tanto
        ;el contador se debe de incrementar
        ;dos canales de 500 pulsos con dos estados posibles
        ;me dan 2000 pulsos por revolucion (4 combinaciones)
        if A<>uA or B<>uB then
            if giro=1 then  contador =contador+1   'incremento
            if giro=0 then  contador =contador-1   'decremento
        endif
        
        uA=A   'ultimo estado del canal A
        uB=B   'ultimo estado del canal B
        
        if contador =posicion then  ' si llego a la posicion apago el motor
            portb.1 =0
            portb.2=0
        endif 
        
        if contador<posmenos then  ' giro en sentido =1
            portb.1=1 'se activa la salida para que gire el motor giro=1
        endif
       ;despues cambiare esto por PWM
       if Contador>posmas then     'giro en sentido =0
            portb.2=1 'se activa la salida para que gire el motor giro=0
         endif        
        goto inicio
Soltar:
        if portd.1=1 then goto Soltar
        ;cambio la posicion para que gire en sentido contrario
        if posicion=1000 then
            posicion=5000
        else
            posicion=1000
        endif        
        goto Cambio
end

P.D. quiero felicitarlos a todos por sus valiosos aportes y en especial a mecatrodatos!!!
 
alguien me podria ayudar a programar una pantalla lcd 16x2 por el puerto a del pic 16f877a, ya lo he hecho pero en otros puertos porque el a siempre me da problemas, solo un simple mensaje por la pantalla lcd por favor estare agradecido

DEFINE LCD_DREG PORTa
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTa
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTa
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE OSC 4

si me pudieran decir que estoy haciendo mal.. estare agradecido BLESS

 
Última edición:
Pon al inicio cmCon=7, eso combierte las salidas analogas a digitales....

y verifica en el datashett si todos los puertos son bidireccionales.... creo que si pero no recuerdo hay algunos que solo son de entrada en los pics y para el LCD se requieren de salida...
 
el programas que tiene las declaracion de variable las tienes mal, por ejemplo la variable de registro DREG si le colocas 4 significa que vas a conectar pines que serian los bit mas significativo ej: pin4, pin5,pin6,pin7 y alli en el circuito los tienen conectado en los bit menos significativo; ademas el RS lo declaraste junto con el DREG. Aqui te dejo uno que esta bien ademas recuerda que los pines del puerto A no proporcionan mucha corrriente lo mas recomendalble es usar el puerto B,C o D.

Define LCD_DREG PORTA
Define LCD_DBIT 4
Define LCD_RSREG PORTA
Define LCD_RSBIT 0
Define LCD_EREG PORTA
Define LCD_EBIT 1
DEFINE LCD_LINES 2

PAUSE 200 ; RETARDO PARA QUE INICIALIZE EL LCD
LCDOUT $FE, 1 ;LIMPIA LCD
LCDOUT $FE,$84, "HOLA" ;muestra mensaje en la primera linea,quinta casilla
LCDOUT $FE,$c2, "MUNDO" ;mensaje en la segunda linea,tercera casilla
 
una question no hablan realizado un programa en el cual se pueda leer la humedad relativa atraves del sensor hs1101 si es asi diganmelo donde lo puedo encontrar si esta en codigo mikroc seria paerfecto
 
pero no tengo que hacer un arrglo para que en la pantalla me salga en porcentaje xq solo hacerlo leer me saldra un valor que pueda ser que no tenga relacion o me euqivocvo
 
ya tengo los voltajes de referrencia q son desde 0.56 hasta 1.59 voltios eso lo logro con el arreglo del datasheet y adicionandole un lm 2907 que convierte la frecuenai a voltaje
pero de ahi no c como lograr la lectura en el adc del microcontrolador
 
Atrás
Arriba