HELP! Donde voy a realizar la carga de b? No hay espacio
; inicializa tus 3 bytes
movlw "dato0"
movwf byte0
movlw "dato1"
movwf byte1
movlw "dato2"
movwf byte2
; Antes de entrar, carga W con el primer byte, aquí aún no comienza el t a correr
movf byte0, w
; También antes de entrar carga una variable en 8, es el contador de cuántos bit ya mandamos por cada byte
movlw 8
movwf count0
movlw 8
movwf count1
movlw 8
movwf count2
; Aquí empieza el contador de t de 1.25us
BYTE0_Enviar:
;0 - 0ns
; Levanta el bit (siempre pasa)
bsf PORTA.0
;1 - 125ns
; Mantenlo otros 125ns
nop
;2 - 250ns
; Baja el bit si es que bit0 de W es un cero y escríbelo en PORTA.0
; Si no, se queda un 1 en PORTA.0
andwf PORTA.0, f
;3 - 375ns
; Rota el byte actual una vez a la derecha y guárdalo en byte0
rrf byte0, f
;4 - 500ns
; Mueve byte0 a W
movf byte0, w
;5 - 625ns
;
nop
;6 - 750ns
; Baja el bit PORTA.0, sin importar que haya habido en el puerto
bcf PORTA.0
;7 - 875ns
; Decrementa el contador y si ya es 0, entonces carga el siguiente byte
decfsz count0
;8 - 1000ns
; Si llega aquí, entonces seguimos en el byte actual, hay que ir al siguiente bit
goto BYTE0_Enviar
;9 - 1125ns
; Si llega aquí, es porque decfsz ya fue cero
movf byte1, w
; Rutina de byte1
...
Te digo una forma mas sencilla que acabo de ver, por hardware. Usa el SPI, ponlo a 4Mhz y a volar, solo tendras que escribirlos sin utilizar el CLK.
Aquí hay alguien que también lo hace por SPI:
http://hypnocube.com/2013/12/design-and-implementation-of-serial-led-gadgets/
Muy chulos esos LED, no los conocía, me voy a pedir una tira a los chinos, para probarlos. Me planteo rediseñar algunos de mis circuitos que usan el TLC5940, con un sistema de barrido por filas-columnas, por esos led WS2812b, lástima que nos los hagan en tamaño 3528, aunque supongo que será imposible meter el controlador en un led tan pequeño.
Entre Byte y Byte a enviar ¿cuanto tiempo disponés?Entre byte y byte no hay tiempo, se envia todo seguido. Tampoco hay tiempo entre bit y bit. Si quieres enviar datos para 10 leds necesitas 30 bytes (3 bytes por cada led, uno para cada color). Que serian 240 bits a enviar. Todos seguidos.
Me gusta esta forma de pensar de ASM. La programacion en C y en ASM es muy diferente, y mi cerebro piensa en C, y esas cosas que dices tienen mucho sentido, pero no soy capaz de que se me ocurra algo asi a mi. jajaCitarHELP! Donde voy a realizar la carga de b? No hay espacio
Tienes que aprovechar todos esos "goto" para cargar "b" asi como para "decf Contador" y posiblemente apuntar en un "flag" si este llego a 0, de manera que en el ultimo bit, puedas chequear ese flag y saber con antelacion si tienes que seguir o no, incluso hacer el chequeo en el penultimo, y crear "dos ultimos envios" uno si no se acaba la transmision y otro si se acaba.
Hola Marttyn.Estoy intentando hacer una libreria, por lo que quiero intentar con 32Mhz para poder usarla con micros de la familia 12F o 16F. Luego que funcione con micros mas potentes no sera un problema
Dado que parece que estas corto de tiempo mi primera idea seria aumentaria los MIPS eliigiendo otro micro.
Es que estas muy jugado con los tiempos de las instrucciones. Como vos mismo indicas estas manejando tiemps de 2 instrucciones o 7 instrucciones. Estas muy jugasdo. Si resolves esto que consultas es probable que te "salte" otro problema en otro lado, como el que estas viendo de no darte los tiempos para cargar el valor a mostrar en los leds.
Antes de tener un ACV o un infarto es lo que yo haria ( cambiar el micro ) :P y si vale la pena luego, con mas tiempo, optimizaria el codigo. ¿Que opinas de un PIC 18F4550 a 48 Mhz?. (nombro este porque es el que tengo y estoy usando ........ :) )
Saludos.
Nota: Hoy es domingo.... vacio y "Postales del fin del mundo" Malbec- Syrah..... no me pidas que piense en assembler ...... :) :) :) :) :)
Podés utilizar un FSR para acceder a la memoria indirectamente. En este caso por los micros que me mencionaste no vale la pena pensar en que podés enviar más de 256 bytes, siendo que ninguno de los tiene siquiera más de 256 bytes de memoria RAM. Si llegás a necesitarlo, avisame y lo vemos.
Qué tal Marttyn
Hice un código pequeño... hace tiempo que no tocaba asm, disculpa si se me va algo. Está hecho con base en un t de 1.25us y los tiempos on-off que mencionas.
La rutina que pongo deberás repetirla 3 veces... cambiando byte0 por byte1 y count0 por count1, sucesivamente. Esta rutina te ahorrará mas ROM que la que buscabas. No la repites bit por bit, más bien la repites byte por byte.
Por favor pruébala y me dices... yo la probé en SanSIM (jaja mi cuaderno) y parece que hace algo.
Muy chulos esos LED, no los conocía, me voy a pedir una tira a los chinos, para probarlos. Me planteo rediseñar algunos de mis circuitos que usan el TLC5940, con un sistema de barrido por filas-columnas, por esos led WS2812b, lástima que nos los hagan en tamaño 3528, aunque supongo que será imposible meter el controlador en un led tan pequeño.
Seguro que lo pueden hacer en 3528, el chip que tiene dentro es enano!
Me gusta esta forma de pensar de ASM. La programacion en C y en ASM es muy diferente, y mi cerebro piensa en C, y esas cosas que dices tienen mucho sentido, pero no soy capaz de que se me ocurra algo asi a mi. jaja
EDITO: me picaba la curiosidad, y encontre el PIC16F1788, que en formato QFN ocupa solo 6x6mm, y tiene 2K de ram, lo que es suficiente para manejar mas de 600 leds sin problema...