FAQ FAQ  •  Buscar Buscar  •  Registrarse Registrarse  •  Entre para ver sus mensajes privados Entre para ver sus mensajes privados
Login Login

letrero giratoria led rgb con 12f683
Índice de los Foros Electronica Facil » FOROS ELECTRONICA » Electronica Digital
Publicar nuevo tema   Responder al tema
Ver tema anteriorEntre para ver sus mensajes privadosVer tema siguiente
AutorMensaje
rina
Asunto: letrero giratoria led rgb con 12f683 MensajePublicado: 20 May, 2016 - 01:14
Fanatico de la Electronica
Fanatico de la Electronica


Registrado: 14 Ago, 2005
Mensajes: 1892

hoy les voy a presentar un proyecto en el que llevo atascado ya un tiempo o mas bien haciendolo a cachos segun cometo fallos, mi primer programa fue basico cargaba de la eepron los segmentos a mostrar en el letrero pero eso requiere cargar 120 bytes de la epron para dibujar en un circulo no mas de 20 caracteres de 5x8 y tener que tener el color seleccionado ya en el programa.

empiezo mejor a detallar como monte el circuito para simplificar mucho el coste.
el circuito consta de un 12f683 y dos 74hc595. esto me permite tener 16 bit de salida donde activo los catodos de los led.

el barrido serial de 16bit se divide en
.0 = activa un transistor los anodo rojos del los led's
.1 = actica el transistor los anodo azules del los led's
.2 = activamos transistor de anodo verdes

.3 al .5 = no tengo nada conectado (tenia led conectador pero los quite)

.6 y .7 = conecto los catodos de los led

.8 al .15 = conecto los catodos de los led (estos ultimos 8 led's serian los que creariam los caracteres)

como veis de primeras es sencillo lo que e replanteado.
reparti dos variables byte una seria como de funciones, donde seleccionaria el color que enciendo (pongamnos que la paleta de colores es limitada tan solo 7 colores) del bit 3 al 5 asigne un alias dera funciones del digito.
.3 boltea el digito orizontalmente.
.4 lo boltea berticalmente.
.5 invierte el color del digito invierto los bit a mostrar.
y 6 y 7 quedan como un alinea, se podrian cambiar los anodos de posicion para que salga otro color con respecto a los 8 bit de los caracteres.

ahora bien, parte de replanteo del programa, en parte espero que final.....
hay unas cuantas bariables a tomar en cuenta

La variable funcion (una array de 32 posiciones) determina los 8 primeros bit que sacara serial.

La variable caracteres (tambien es una array de 32) determina el asc del letrero los 32 digitos a mostrar.

la variable caracter a secas que seria el numero del caracter en el que esta situado.

y la variable digito (es una array de 5) en esta se carga del caracter 5x8)
tuve que hacer un añadido que la llame digitotemp (tambien una array de 5) esta tuve que añadirsela para hacer un paso rapido de la que cargo el siguiente caracter a mostrar de la eepron (la epron tiene limitaciones de velocidad de lectura no puedo cargar los 5 bytes de un digito de la epron en el tiempo de un solo sector y lo cargo en lo largo de los 5 sectores de un digito, vamos en el espacio entre digitos bolqueo la ram de temp)

eso fue la parte de variables del letrero.

para hacer idea lo sencillo no esplique como conecte el pic.

gpio.0 = carga o dispara la informacion serial del 74hc595

gpio.1= esta conectado al transistor de efecto hall

gpio.2= medianamente esta puenteado al gpio.1 pòr si topo un transistor efecto hall tipo al de un cuentaquilometros de una bicibleta y aprovechar mejor la interruccion int.

gpio.3 = le puse un receptor infrarrojo por no variar. mas que nada por que de alguna manera abra que cargar la informacion del letrero.

gpio.4 = clk 74hc595
gpio.5 = data 74hc595 (bueno estos no se si del reves)

proseguire posteando despues parte del codigo. pongamos que este proyecto seria para crearse un letrero giratorio sencillo practico y de muy bajo coste.



IMG_20160519_223131_920.jpg

IMG_20160519_223131_920.jpg


 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
rina
Asunto:  MensajePublicado: 20 May, 2016 - 07:14
Fanatico de la Electronica
Fanatico de la Electronica


Registrado: 14 Ago, 2005
Mensajes: 1892

aver si me sale bien el pasar el codigo..

Código:
vueltas var word
serial var byte ' defive bit para enviar serial
hbit var serial.bit0 ' se usa pava invertir un caracter verticalmente
lbit var serial.bit7
estado Var byte '
newdigito var estado.bit0
autoincli var estado.bit1
fijarletre var estado.bit2
temp1 var byte
temp2 var byte
temp3 var byte
reten var byte
'
' variables control infrarrojo
contador var word
pulso var byte
boton var byte
casilla var byte
codigo var byte [6]
'
' variables control barridos led
CLKcolumna var byte
compensa var byte
columna var byte
sector var byte
'
' variables dedicadas al letrero
mcaracter var byte
caracter var byte ' asc 256
digitot var byte [5]
digito var byte [5]
caracters var byte [32] ' la cantidad de caracteres maximo a mostrar
funciones var byte [32] ' 2 led, 3bit memoria y 3bit inferiores controla RGB
vertical var funciones.bit3 ' invierte el barido del digito para la vertical
horizontal var funciones.bit4 ' invierte los bytes para la orizontal
invertir var funciones.bit5 ' memoria para invertir el byte del digito
'
'
status=%00000000
option_reg=%00000101 ' configuracion de interruciones primarias
intcon=%00000000 ' configuracion de estatado de interrucciones primarias
pie1=%00000000 ' configuracion de interruciobes perineales
pir1=%00000000 ' estado de las interrucciones perineales
pcon=%00000000 ' configuracion del encendido
eecon1=%10000000 ' configuracion de etado de la eepron
osctune=%00001100 ' configuracion calibrado fino del oscilador
osccon=%01110001 ' configuracion del oscilador
t1con=%00110100 ' conpiguracion temporizador 1, TMR1
t2con=%00011000 ' configuracion temporizador 2, TMR2
cmcon1=%00000000 ' configuracion del comparador por TMR1
ccp1con=%00000000 ' configuracion del registro de control ccp1
cmcon0=%00000011 ' configuracion del comparador operacional
vrcon=%10001111 ' configuracion del voltage de referencia del comparador
adcon0=%10000000 ' configuracion de las entradas analogicas
ansel=%00010000 ' ajuste de las entradas analogicas
'
'eedat=0 ' bariable que lertura o guardado de la eepron
'eeadr=0 ' direccion donde se almacena en la eepron maximo 255
'
' definicion de puerto gpio
'
gpio=%001110 ' define los bit del puerto
trisio=%001110 ' define los bit del puerto entrada o salida
wpu=%000000 ' define los pull up del puerto
ioc=%000000 ' define como marca de interruccion los bit del puerto
'
' carga las variables iniciales
'
clear
estado=%00000001
mcaracter=0
CLKcolumna=100
for casilla=0 to 31
    temp1=casilla+170
    temp2=casilla+206
    read temp1,caracters[casilla]
    read temp2,funciones[casilla]
next casilla
read 130,estado
'
tmr0=80
'
ON INTERRUPT GOTO interrucciones
intcon=%11000000
'
'
'
' programa principal
'
programa:
'if gpio.3=0 then gosub infrarrojos
'if boton>0 then gosub tecla
if newdigito=1 then gosub leer_digito
goto programa
'     
' carca el digito
'
leer_digito:   
select case caracter
    ' de la eepron
case is >14
    temp2=caracters[caracter]-15 ' se ajusta el desplazamiento de caracter
    temp2=temp2*5
    for temp1=0 to 4 ' carga el caracter de la eepron
        temp3=temp2+temp1
        read temp3,digitot[temp1]
        if gpio.3=0 then return
    next temp1
case 0
    ' 0
    DISABLE INTERRUPT ' desavilito interruciones (ahorra codigo)
    digitot[0]=%00111110
    digitot[1]=%01010001
    digitot[2]=%01001001
    digitot[3]=%01000101
    digitot[4]=%00111110
    ENABLE INTERRUPT ' avilito interruciones lo mismo para el resto caracteres
case 1
    ' 1
    DISABLE INTERRUPT
    digitot[0]=%00000000
    digitot[1]=%01000010
    digitot[2]=%01111111
    digitot[3]=%01000000
    digitot[4]=%00000000
    ENABLE INTERRUPT
case 2
    ' 2
    DISABLE INTERRUPT
    digitot[0]=%01000010
    digitot[1]=%01100001
    digitot[2]=%01010001
    digitot[3]=%01001001
    digitot[4]=%01000110
    ENABLE INTERRUPT
case 3
    ' 3
    DISABLE INTERRUPT
    digitot[0]=%00100001
    digitot[1]=%01000001
    digitot[2]=%01000101
    digitot[3]=%01001011
    digitot[4]=%00110001
    ENABLE INTERRUPT
case 4
    ' 4
    DISABLE INTERRUPT
    digitot[0]=%00011000
    digitot[1]=%00010100
    digitot[2]=%00010010
    digitot[3]=%01111111
    digitot[4]=%00010000
    ENABLE INTERRUPT
case 5
    ' 5
    DISABLE INTERRUPT
    digitot[0]=%00100111
    digitot[1]=%01000101
    digitot[2]=%01000101
    digitot[3]=%01000101
    digitot[4]=%00111001
    ENABLE INTERRUPT
case 6
    ' 6
    DISABLE INTERRUPT
    digitot[0]=%00111100
    digitot[1]=%01001010
    digitot[2]=%01001001
    digitot[3]=%01001001
    digitot[4]=%00110000
    ENABLE INTERRUPT
case 7
    ' 7
    DISABLE INTERRUPT
    digitot[0]=%00000001
    digitot[1]=%00000001
    digitot[2]=%01110001
    digitot[3]=%00001101
    digitot[4]=%00000011
    ENABLE INTERRUPT
case 8
    ' 8
    DISABLE INTERRUPT
    digitot[0]=%00110110
    digitot[1]=%01001001
    digitot[2]=%01001001
    digitot[3]=%01001001
    digitot[4]=%00110110
    ENABLE INTERRUPT
case 9
    ' 9
    DISABLE INTERRUPT
    digitot[0]=%00000110
    digitot[1]=%01001001
    digitot[2]=%01001001
    digitot[3]=%00101001
    digitot[4]=%00011110
    ENABLE INTERRUPT
case 10
    ' .           
    DISABLE INTERRUPT
    digitot[0]=%00000000
    digitot[1]=%01100000
    digitot[2]=%01100000
    digitot[3]=%00000000
    digitot[4]=%00000000
    ENABLE INTERRUPT
case 11
    ' :
    DISABLE INTERRUPT
    digitot[0]=%00000000
    digitot[1]=%00110110
    digitot[2]=%00110110
    digitot[3]=%00000000
    digitot[4]=%00000000
    ENABLE INTERRUPT
case 11
    ' /
    DISABLE INTERRUPT
    digitot[0]=%01100000
    digitot[1]=%00110000
    digitot[2]=%00011000
    digitot[3]=%00001100
    digitot[4]=%00000110
    ENABLE INTERRUPT
case 12
    ' .
    DISABLE INTERRUPT
    digitot[0]=%00000000
    digitot[1]=%00011100
    digitot[2]=%00100010
    digitot[3]=%01000001
    digitot[4]=%00000000
    ENABLE INTERRUPT
case 13
    ' .
    DISABLE INTERRUPT
    digitot[0]=%00000000
    digitot[1]=%00000000
    digitot[2]=%11111111
    digitot[3]=%00000000
    digitot[4]=%00000000
    ENABLE INTERRUPT
case 14
    ' .
    DISABLE INTERRUPT
    digitot[0]=%00000000
    digitot[1]=%00000000
    digitot[2]=%00000000
    digitot[3]=%00000000
    digitot[4]=%00000000
    ENABLE INTERRUPT
end select
'
'if ajusverti=1 then
'    if caracter>12 then
'        orizontal=1
'    else
'        orizontal=0
'    endif
'endif
'
if horizontal=1 then ' ajusta la direccion que muestra el caracter horizontal
    SWAP digitot[0],digitot[4]
    swap digitot[1],digitot[3]
endif
'
if invertir=1 then ' invierte los bit del digito
    digitot[0]=255-digitot[0]
    digitot[1]=255-digitot[1]
    digitot[2]=255-digitot[2]
    digitot[3]=255-digitot[3]
    digitot[4]=255-digitot[4]
endif
newdigito=0
return
'
'
' control de interrucciones
'
'
DISABLE
interrucciones:
'
' interruccion comparador (sensor magnetico)
'
if caracter>2 then
    pie1.3=1 ' si a pasado dos digitos actiba la interrucion del iman
    if pir1.3=1 then ' detecta el iman y ajusta
        pie1.3=0 ' se apaga, evita el tiempo que pasa el iman)
        if sector>153 then ' ajusto el interbalo de los sectores
            clkcolumna=clkcolumna-3 ' aumento e tiempo para desbordar tmr0
        else
            clkcolumna=clkcolumna+1 ' disminullo el desbordaiento tmr0
        endif
        if fijarletre=1 then ' inicia el texto al detectar el iman
            columna=0
            sector=0
            newdigito=1
        endif
        goto salto
    endif
endif
'
' interruccion tmr0 (barrido led)
' envia el byte via serial al 74hc595
'
if intcon.2=1 then
    tmr0=clkcolumna ' paso el intervalo de columnas para interruccion tmr0
    intcon.2=0
    if sector<210 then sector=sector+1 ' cuenta y limita los sectores
    '
    ' contador de columna y carga digito
    select case columna
    case 5 ' espacio entre digitos
        columna=6
        digito[columna]=%11111111 ' apaga los led
        caracter=caracter+1 '
'        if fijarletre=1 then columna=5 ' evita que inicie el letrero 
        if caracter>32 then caracter=0 ' inicia el letrero
    ' compara sectores y caracteres opcion rodar, fija, o dormir
    '

    case 6
        columna=0
        newdigito=1 ' marca para acrgar un nuevo digito
        digito[0]=digitot[0]
        digito[1]=digitot[1] ' paso digito de bufer a digito mostrar
        digito[2]=digitot[2]
        digito[3]=digitot[3]
        digito[4]=digitot[4] 
    case else ' incrementa 1 columna
        columna=columna+1
    end select
    '
    ' carga la columna del caracter y alineamiento vertical al hc595   
    serial=digito[columna]
    gpio.4=0 ' prepara la carga  clkce
    for temp3=0 to 7
        gpio.0=0 ' clk
        if vertical=0 then ' para invertir el texto verticalmente
            gpio.5=hbit ' incorpora bit serial, data out
            serial=serial<<1 'desplado byte para ingresar el siguiente bit
        else
            gpio.5=Lbit '
            serial=serial>>1
        endif
        gpio.0=1 ' clk
    next temp3
    ' carga seleccion de color y 2 led estra
    serial=funciones[caracter]
    for temp3=0 to 7
        gpio.0=0 ' clk
        gpio.5=hbit ' incorpora dato serial
        serial=serial<<1 ' desplado byte para ingresar el siguiente bit
        gpio.0=1 ' clk carga el bit en la matric serial
    next temp3   
    gpio.4=1 ' carga el byte a la matric 16bit serial
endif
return
salto:
resume
enable
'
' datos de la eepron
'
data @0 ' 0
' A , 1
data %01111100
data %00010010
data %00010001
data %00010010
data %01111100
' B , 2
data %01111111
data %01001001
data %01001001
data %01001001
data %00110110
' C  , 3
data %00111110
data %01000001
data %01000001
data %01000001
data %00100010
' D  , 4
data %01111111
data %01000001
data %01000001
data %00100010
data %00011100
' E  , 5
data %01111111
data %01001001
data %01001001
data %01001001
data %01000001
' F  , 6
data %01111111
data %00001001
data %00001001
data %00001001
data %00000001
' G  , 7
data %00111110
data %01000001
data %01001001
data %01001001
data %00111010
' H  , 8
data %01111111
data %00001000
data %00001000
data %00001000
data %01111111
' I  , 9
data %00000000
data %01000001
data %01111111
data %01000001
data %00000000
' J  , 10
data %00000000
data %00100000
data %01000001
data %00111111
data %00000001
' K  , 11
data %01000001
data %00100010
data %00010100
data %00001000
data %01111111
' L  , 12
data %00000000
data %01000000
data %01000000
data %01000000
data %01111111
' M  , 13
data %01111111
data %00000010
data %00001100
data %00000010
data %01111111
' N  , 14
data %01111111
data %00000100
data %00001000
data %00010000
data %01111111
' Ñ  , 15
data %01111100
data %00001001
data %00010001
data %00100001
data %01111100
' O  , 16
data %00111110
data %01000001
data %01000001
data %01000001
data %00111110
' P  , 17
data %01111111
data %00001001
data %00001001
data %00001001
data %00000110
' Q  , 18
data %00111110
data %01000001
data %01010001
data %00100001
data %01011110
' R  , 19
data %01111111
data %00001001
data %00011001
data %00101001
data %01000110
' S  , 20
data %00100110
data %01001001
data %01001001
data %01001001
data %00110010
' T  , 21
data %00000001
data %00000001
data %01111111
data %00000001
data %00000001
' U  , 22
data %00111111
data %01000000
data %01000000
data %01000000
data %00111111
' V  , 23
data %00011111
data %00100000
data %01000000
data %00100000
data %00011111
' W  , 24
data %00111111
data %01000000
data %00111000
data %01000000
data %00111111
' X  , 25
data %01100011
data %00010100
data %00001000
data %00010100
data %01100011
' Y  , 24
data %00000011
data %00000100
data %01111000
data %00000100
data %00000011
' Z  , 25
data %01100001
data %01010001
data %01001001
data %01000101
data %01000011
' Ü  , 26
data %00111101
data %01000000
data %01000000
data %01000001
data %00111100
' .  , 27
data %00000000
data %00110000
data %00110000
data %00000000
data %00000000
' @  , 28
data %00111110
data %01000001
data %01011101
data %01010101
data %00011110
'    , 29
data %00100011
data %00010011
data %00001000
data %11000010
data %11000001
'    , 30
data %00000100
data %00000010
data %01111111
data %00000010
data %00000100
'    , 31
data %00100000
data %01000110
data %01010000
data %01000110
data %00100000
'    , 32
data %00001110
data %00111111
data %01111110
data %00111111
data %00001110
'
' caracteres del letrero
'
data @170
data 14,0,1,2,3,4,5,6
data 7,8,9,14,14,13,13,13
data 13,13,14,17,18,19,22,23
data 24,43,29,32,32,30,40,41
'
' caracteres del letrero
'
data @206
data 41,41,41,41,41,41,41,41
data 44,44,44,44,44,44,44,44
data 43,43,43,43,43,43,43,43
data 133,133,133,133,133,133,133,133


este programa todavia no esta provado aunque otro otro un poco mas cutre si y funcionaba bien..... con muchas comillas y pocas posivilidades (aparte de comer mucho codigo) este en parte de las interrucciones se puede mejorar mucho que lo miro y me parece bastante cutre y mejorable. aver como voy adelantando el proyecto..

La verdad, como no hace una pequeña ventana dentro del cuadro de texto. madre lo que ocupa todo por la sarta caracteres a definir y todafia falta mucho que hacer. compilado compilada esta parte con 851 lineas de codigo para el pic si se mejora y cimplifica la parte de interruciones seguro seran unos 40-70 procesos menos.
El programa esta escrito para micro studio picbasic

Proseguire subiendo un video y fallas cuando lo prueve. (seguro necestara arreglos) pongamos que esto solo seria el motor para mostrar los caracteres.

y espero por alguna vez en la vida despues de 12 años en foros de electronica tener una critica constructiva no quedar envoliados y alo mucho ver casi un corta y pega de partes de mi codigo y replanteo por otro lado.

un saludo
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
Mostrar mensajes anteriores:     
Cambiar a:  
Todas las horas son GMT + 1 Hora
Publicar nuevo tema   Responder al tema
Ver tema anteriorEntre para ver sus mensajes privadosVer tema siguiente
 Índice de los Foros Electronica Facil » FOROS ELECTRONICA »  Electronica Digital
powered by phppowered by MySQLPOWERED BY APACHEPOWERED BY CentOS© 2004 - 2017Información LegalPrensa