Saludos a toda la Comunidad, ya que no hay mucho por acá después del evento, me animo y posteo mi primer monstruo XD , algo sencillo (de veras es sencillo si te lo explican bien): un cubo led 3x3x3.
Para empezar, utilicé este diagrama que se encuentra en este blog:
Sólo modifiqué el cable que va hacia el pin 2 del PIC (RA3) y lo pasé al pin 16 (RA7) para facilitarme el código. Armar el cubo no tiene mayor compilcación, en la página explican muy bien como construirlo, lo bonito viene a la hora de programar. Yo aprendí (y sigo usando) PicBasic, por lo que mi programa está en eso, basandome en el programa de ejemplo que está en el blog llegué a este programita:
_________________________________________________________________________________________________________
cmcon=7
trisa=0
trisb=0
x var byte
inicio:
for x=1 to 50
portb=%00000001 : porta=%00000010
pause 1
portb=%00000010 : porta=%00000101
pause 1
portb=%00000100 : porta=%00000010
pause 1
next
for x=1 to 100
portb=%00001000 : porta=%00000010
pause 1
portb=%00010000 : porta=%00000101
pause 1
portb=%00100000 : porta=%00000010
pause 1
next
for x=1 to 50
portb=%01000000 : porta=%00000010
pause 1
portb=%10000000 : porta=%00000101
pause 1
portb=%00000000 : porta=%10000010
pause 1
next
for x=1 to 50
portb=%11111111 : porta=%10000010
pause 1
goto inicio
end
_________________________________________________________________________________________________________
Aquí, los bits 0 al 2 del puerto A (porta=% xxxxx000) controlan los cátodos comunes de cada nivel, necesitando un cero para que circule la corriente, si quisieramos activarlo con un uno en lugar de un cero (para facilitar la lectura) debería usarse un transistor en modo de interruptor o bien un inversor NOT (pero no tenía ni uno ni el otro, así que será para la versión 0.2). Además, el bit 7 (porta=% 0xxxxxxx) controla la última fila de ánodos del cubo, el resto de ánodos están controlados por el puerto B (portb=% 00000000).
El programa realiza la siguiente secuencia: dibuja una "x" en la primer capa y la traslada a las demás, para mantener la "imagen" repite cada ciclo 50 veces (el bucle for-next) y luego pasa a la siguiente "imagen", hoy tipo 6 que me puse a "travesiar" funcionó de maravilla con un PIC16f628, pero luego que quise probar con dos 16F628A se queda trabado en la primer secuencia y no hace nada mas, obviamente cambié el tipo de pic en el MicroCode Studio y a la hora de quemarlo también, será que los pics están malos (porque los compré baratus baratus en ebay) o no sé si realmente sea eso o hay algun parámetro del 628A que estoy olvidando.
Otra cosa es que, teniendo ya armado el "prototipo feo", quise probarlo en Arduino, modificando el clásico blink, (que conste que soy absolutamente newbie con Arduino, hace una semana vino un clon del Nano 328), pero al tratar de hacerlo SORPRESA!!! tengo que declarar uno a uno los pines, y yo sdfasdfasdfsdfsdf, no habrá una forma más sencilla (como en el pic) de declarar el estado de todo el puerto digital con una sola sentencia? Además, en los cubos que he visto en Instructables, usan una especie de matriz en el código para representar más fácilmente las secuencias del cubo. Estoy queriendo hacer con mis alumnos un cubo RGB de 5x5x5 usando el mismo Arduino y los 74HC595, pero en lenguaje C estoy bieeeen verde. Apreciaría algo de AYUUUUUUUUUUUUUUDAAAAAAA XD .
Sin más blabla, las fotos de mis dos "prototipos feos"
Este es el minientrenador para Pic16f628 que hice en un apuro XD , funciona y es lo importante jaja, a pesar de haber caido en el "pecado" de la galleta jaja.
Este quise hacerlo sin cátodo común porque aun no había entendido cómo se controlaba, pero ya lo modifiqué.
Videos pronto!