Sunteți pe pagina 1din 21

Tetris en un microcontrolador PIC

El PIC Tetris juego (PICtris) generado a partir de una pregunta reciente RetroBrad en el foro. Quera saber cmo manipular los
LEDs y dibujar grficos en 2D. Yo soy ms de un tipo de hombre prctico y en el pasado, los grficos no son un motivo de
preocupacin. Yo estaba intrigado a adentrarse en el mundo de 2D a averiguar cmo funcionan las cosas motiva.
Los LEDs 64 y cuatro botones estn controlados por un nico PIC (18LF4520) y dos bateras AA. El cdigo fuente opera de
manera muy eficiente, y el programa es extremadamente sensible. Yo estaba preocupado por este ltimo, ya que estaba
decidido a utilizar algoritmos grficos basados en rotaciones con respecto a las constantes predefinidas. Desde aqu me vendra
bien un enfoque similar para crear otros juegos interactivos!

Como siempre, las nuevas caractersticas son una necesidad! Dado que el vdeo de arriba, he aadido lo siguiente:

Una pantalla de presentacin que muestra "TETRIS" cuando se inicia el juego.

Las puntuaciones altas - sus esfuerzos se graban en la EEPROM.

Alta potencia controlador darlington para iluminar la pantalla.

Todas las caractersticas anteriores se incorporan en el cdigo fuente (que se encuentra a continuacin)
Creacin de grficos 2D
En el juego de Tetris, los grficos son tratados como objetos de pxel 8x16. Para aliviar la sobrecarga de diseo grfico, hice
una hoja de clculo de Excel que hace todo el trabajo duro por usted.

Hay un campo de 8x16 donde usted puede colocar una "x" para cada bloque del objeto. Cualquier bloque con una "x" se dar
formato a parecer que lo hace a continuacin (me pareci que el enfoque ms fcil de interpretar en comparacin con
dispersin de x). La hoja de clculo se calcula y muestra el cdigo necesario para el pez espada grfico! Simple. Aqu hay una
captura de pantalla:

Crear y mostrar texto


La hoja de clculo se puede utilizar para crear cualquier objeto, incluyendo texto. Recientemente he querido aadir una
pequea caracterstica - un toque de pantalla. Utilizando el diseador grfico hecho que sea extremadamente fcil de hacer.
Puse una "x" en todos los puntos que componen la palabra TETRIS en la pantalla de 8x16. Tena que ser un poco creativo y
dividir la palabra en dos columnas, como se muestra a la derecha.
Si a usted le gusta ver cmo he utilizado el objeto como un texto - navegar por el cdigo fuente (que se enumeran ms abajo),
habr una rutina que se llama "SplashScreen".
Grficos en un PIC
Existen diversas alternativas para tomar cuando se trabaja con grficos en 2D. He explorado las matemticas detrs de dos
enfoques: trigonometra (rotando coordenadas cartesianas ) y transformacin 2D matriz afn .Ambos suenan como
que necesita un ttulo universitario para entender, a pesar de que son muy sencillos en su aplicacin. I utilizado originalmente
trigonometra para girar los objetos, aunque la transformacin de matriz afn era mucho ms simple y ms importante, ms
rpido .

Transformation Matrix Affine


Rotacin de un objeto 2D + / -90 grados se puede hacer fcilmente de este modo:

otacin Grfico

definir el origen objeto


PX = originx
PY = originY
/ / definir object width
Q = 0

/ / claro la matriz de destino


Para X1 = 0 a 7
pTarget ( X1 ) = 0
Siguiente

/ / analizar cada

Qu est pasando? Pfuente La matriz contiene informacin grfica para el objeto. Cada byte representa una columna de
pxeles, que se puede denominar en X, Y formato de este modo:

pObject ( X ) . Bits ( Y )
pObject es de tipo Word . Esto significa que cada ndice tiene 16 bits (dos bytes). Esto permite que dos pantallas 8x8 para
ser unido y forman una sola pantalla 8x16 . Considere la posibilidad de cualquier objeto en la pantalla:

Teniendo en cuenta que la esquina superior izquierda es 0,0 pxel : Slo hay cuatro pixels que
estn habilitados, que son:

X = 3, Y = 2

X = 4, Y = 2

X = 5, Y = 2

X = 4, Y = 3

La informacin anterior se puede colocar en pObject muy fcilmente:

pObject (3). Bits (2)

pObject (4). Bits (2)

pObject (5). Bits (2)

pObject (4). bits (3)

Ahora tenemos una gran variedad de informacin de los pxeles que se puede utilizar de todos modos queremos.

Rotacin de pxeles
En el juego de Tetris, que estaba originalmente rotacin de objetos CCW, aunque ahora ha cambiado a CW. Como este
ejemplo fue escrito antes de que el cambio, se centrar en convertir un objeto hacia la izquierda. Si desea girar un objeto hacia
otro lado, a continuacin, comprobar el cdigo fuente - ambas frmulas estn incluidos. Frmula Rotacin de CCW
X2 = (Y1 + PX - PY)
Y2 = (PX + PY - X1 - Q)

Paso 2
Defina la longitud del objeto / anchura (Q)
Estamos trabajando en un solo pxel por pxel medio ambiente. Esto significa que la longitud y la anchura (Q) de cada pxel es
siempre 0. He incluido este paso para su uso con otras condiciones.
Paso 3
Definir el pxel a ser movido (X1, Y2)
Al principio, me voy a girar pixel (3,2).
Paso 4
Ejecutar las matemticas
Si
PX = 4
PY = 2

= 3 X1
Y1 = 2

Q = 0

Y
X2 = (Y1 + PX - PY)
Y2 = (PX + PY - X1 - Q)

Por lo tanto
X2 = 4
Y2 = 3

Una rotacin de 90 grados de pixel (3,2) aterrizara en el pixel (4,3) .


Paso 5
Enjuague y Repita
El ltimo paso es repetir el proceso para cada pxel y cada

Cdigo Fuente
PICtris (Tetris en un microcontrolador PIC)

"V1.0
"liberacin del cdigo fuente. Tetris sin campanas + silbidos.

" v1.1
scorekeeping Aadido 'y Puntuaciones. El juego mostrar la puntuacin ms alta por ltima vez en el
principio.
" Si su puntaje es mejor que la puntuacin ms alta, se guardan en la EEPROM como el nuevo alto

PROGRAMA

utilizado para la seleccin al azar grficos


Const NumberOfShapes = 7
Const RndWindow = 255 / NumberOfShapes

/ / terminologa (podra haber aadido ms ..)


Const CW = 1
Const CCW = 0

/ / TMR2 las variables


Dim TMR2IE Como PIE1.1, / / TMR2 interrupcin permitir
TMR2IF Como PIR1.1, bandera / / TMR2 desbordamiento
TMR2ON Como T2CON.2, / / Activa TMR2 para comenzar incrementando
mS como Word , / / mS registro
CurrentX como Byte ,
sWDT Como Byte / Ver / Software Dog Timer para entrar en el modo SLEEP

Const mS_Inc = 2
Const DebounceDelay = 10

/ / Modo de suspensin registra


Dim IDLEN Como OSCCON.7,
SCS1 Como OSCCON.1,
SCS0 Como OSCCON.0

/ / FORMAS!
/ / Asegrese de actualizar "NumberOfShapes" si se aaden ms (o algunos se eliminan)
/ / # # #
/ /

# # #
/ /

# # #
/ /

# #
/ /

# # #
/ /

# # #
/ /

sub lnea de comando SLEEP


Asm
sueo
End Asm
End Sub

interrupcin TMR2_Interrupt ( 2 )
Guardar ( 0 ) / / Copia de seguridad de las variables del sistema

Si TMR2IF = 1 entonces / / Comprobar si la interrupcin fue de TMR2


TMR2IF = 0 / / Borrar la bandera de interrupcin TMR2
/ / incrementa la variable de mS
mS = mS + mS_Inc
Si mS = 1000 Entonces
mS = 0
sWDT = sWDT + 1
Si sWDT = 30 Entonces
IDLEN = 1 / / Colocar el PIC en el modo SLEEP RC_IDLE en
SCS1 = 1 / /
SCS0 = 0 / /
TRISA = $ FF / / Hacer que todas las E / S de las entradas de alta impedancia
TRISB = $ FF
TRISC = $ FF
TRISD = $ FF
TMR2ON = 0 / / Desactivar TMR2
/ / Configurar oscilador 31kHz para
OSCCON = OSCCON y % 10001111
sueo
EndIf
EndIf

/ / Botn Debounces
/ / Asegura que el botn ha sido activado antes de realizar un rebote.
/ / por alarma, el usuario tiene X mS entre pulsaciones de botn.
/ / Evita prensas y dobles y minimizar la posibilidad de chasquido del interruptor.
/ / La rutina de sub 'CheckButtons' controla el estado de diversas banderas aqu.
/ / comprueba si el botn izquierdo requiere
comprobar si el botn derecho requiere

comprobar si el botn de rotacin requiere

comprobar si el botn de abajo requiere

Gestor de Eventos - Cada de objetos


/ / Una vez cada 800 ms, se establece un indicador para iniciar la cada siguiente objeto.
/ / Esta es una de las pocas caractersticas clsicas del tetris
Si mS = 800 Entonces
DropObject = 1
End Si

/ / Muestra el contenido de 64 LEDs a travs de la multiplexacin


/ / Asegrese de multiplexacin est habilitado.
/ / Esto es vital para proteger a las variables compartidas como ObjectData y BackgroundData.
/ / Cada vez que una escritura en tanto se realiza fuera de la interrupcin, la multiplexacin
debe ser desactivada.
Si UpdateScreen = 1 entonces
/ / desactivar TODOS eje x
PORTA = PORTA O $ 0F
PORTB = PORTB O $ F0

/ / llenar y
habilitar un eje x (la correcta para actual eje Y)
Si CurrentX < 4 Entonces
Porta. pedacitos ( CurrentX ) = 0
Else
PORTB. pedacitos ( CurrentX ) = 0
EndIf
/ / incrementa eje x, listo para el prximo multiplex
Inc ( CurrentX )
Si CurrentX = 8 Entonces
CurrentX = 0
EndIf

/ / una bandera de propsito general para inidcate la realizacin de una interrupcin


InterruptComplete = 1
EndIf
EndIf
Restore
Fin de interrupcin

/ / bucle hasta que se produce una interrupcin.


/ / til para los semforos - permite que los recursos compartidos para ser utilizado con poco (no)
impacto sobre el calendario
Sub WaitForInterrupt ( )
InterruptComplete = 0
Repita
hasta InterruptComplete = 1
End Sub

/ / Esta es la rutina semforo primaria. Si el programa utiliza los recursos compartidos, esta rutina se
llama.
Sub PauseMultiplexing ( )
WaitForInterrupt
UpdateScreen = 0
'TMR2IE = 0
End Sub

/ / Habilita la multiplexacin para reanudar


Sub ResumeMultiplexing ( )
'TMR2IE = 1
UpdateScreen = 1
End Sub

/ / borra el pasado variedad de tipos de Word


Sub ClearArray ( ByRef pArray ( ) Como Word )
Dim i como Byte

Para i = 0 Para Bound ( pArray )


pArray ( i ) = $ 0,000
Siguiente
Final Sub

/ / seleccionar un objeto aleatorio basado en el nmero de objetos definidos


Sub SelectNextObject ( ByRef pTarget ( ) Como Word )
Dim RndSelection Como Byte
Dim i como Byte
Dim Contador, Seleccin Como Byte

/ / crear un nmero aleatorio de 0 a 255


RndSelection = RandGen. Rand

/ / hacer una seleccin basada en el nmero aleatorio creado


Contador = 0
Seleccin = 0
Repita
contador = contador + RndWindow
Selection = seleccin + 1
Hasta contador >

declaracin ms, slo en el caso (prefiero no hacerlo, pero

Combinar dos conjuntos con el modo seleccionado


/ / 0 - Sobrescribir
/ / 1 -

Mover un eje y objetos en pDirection


/ / 0 - objeto se mueven hacia abajo
/ / 1 - Mover objeto hacia arriba
Sub MoveObjectY ( ByRef pObject ( ) como Word ,

Mover objetos de un eje x en pDirection


/ / 0 - objeto decisin correcta
/ / 1 - objeto mover a la izquierda
Sub MoveObjectX ( ByRef pObject ( ) como Word ,
comprobar el objeto que se pasa a ver si se ha llegado al fondo
/ / return true si

comprobar el objeto pasado para ver si est contra la pared izquierda ya


/ / return true si

comprobar el objeto pasado para ver si est contra la pared de la derecha ya


/ / return true si

comparar la fuente y el objetivo pasa por una colisin


/ / return true si

Una forma extremadamente rpida para girar los objetos 90 / -90 grados.
/ /
/ / Notas:
. / / Calcula el centro del bloque (para ser utilizado como un punto de pivote), es decir, el centro de
la forma de bloqueo de llamadas que ( px, py).
/ / Cada ladrillo que forma la forma de bloque girar en torno a ese punto. Para cada ladrillo, se puede
aplicar el siguiente clculo.
/ / Dnde ancho cada ladrillo y la altura es q, la ubicacin actual del ladrillo (de la esquina
superior izquierda) es (x1, y1) y la ubicacin de ladrillo nuevo (x2, y2):
/ / x2 = (y1 + px - py)
/ / y2 = (px + py - x1 - q)
/ / Para girar la direccin opuesta:
/ / x2 = (px + py - y1 - q)
/ / y2 = (x1 + py - px)
/ /
/ / Sobre la base de una matriz afn 2D

comprobar si las rotaciones son objeto actual para discapacitados


Si LimitedRotation = 2 Entonces
para X1 = 0 a 7
pTarget ( X1 ) = Pfuente ( X1 )
Siguiente
dems
/ / definir el origen objeto
PX = OriginX
PY = OriginY
/ / definir Q
Q = 0

/ / borrar la matriz de destino


Para X1 = 0 a 7
pTarget ( X1 ) = 0
Siguiente

/ / si el objeto est limitado por rotacin, luego invierta


rotaciones / / 1 y 3. Esto har que el objeto a su vez de este modo
/ / CW, CCW, CW, CCW
Si LimitedRotation = 1 Entonces
Si CurrentRotation = 1 Entonces
pDirection = CCW
EndIf
EndIf
/ / analizar cada pxel (5x5 trabajando con

GetIndexX (Int (X2))) = 1


EndIf
EndIf
Fin Si
Siguiente
Next
EndIf
End Sub

/ / Cuenta la cantidad de pxeles que la igualdad "1". Estndar operadores bit a bit no se adaptaba
/ / Esta rutina como pxeles podra muy bien terminar en cualquier lugar despus de un

Deje caer el objeto en incrementos Y uno. Devuelve 0 si no.


Funcin MoveObjectDown ( ByRef pObject ( ) Como Word ) Como Byte
Resultado = 1
/ / Semaphore, para proteger a las variables compartidas
PauseMultiplexing
/ / comprobar si hay una colisin con la parte inferior de la pantalla
si CheckForBottom ( pObject ) = 1 entonces
/ / ... si lo tiene - tiempo para salvarlo hay
Resultado = 0
/ / o el objeto en el fondo
MergeObjects ( pObject, BackgroundData, 1 )
/ / obtener un nuevo objeto hacia arriba y hacia funcionamiento
SelectNextObject ( pObject )
/ / comprueba las nuevas lneas
CheckForNewLines = 1
lo dems
/ / Mover el objeto hacia abajo
MoveObjectY ( pObject, 0 , 1 )
/ / comprobar si hay una colisin con el fondo
Si CollisionDetect ( pObject, BackgroundData ) = 1 entonces
/ / El objeto golpe algo en el fondo. El objeto debe ser
/ / movido copia de seguridad y guardar en el fondo.
Resultado = 0
/ / para mover el objeto hasta una
MoveObjectY ( pObject, 1 , 1 )
/ / mover el objeto al fondo (o ms)
MergeObjects ( pObject, BackgroundData, 1 )
/ / Obtiene un nuevo objeto hacia arriba y corriendo
SelectNextObject ( ObjectData )
/ / comprueba si el objeto ha colisionado con el fondo ya. Si es as, entonces
/ / el juego es ms.
Si CollisionDetect ( pObject, BackgroundData ) = 1 Entonces
Resultado = 0
EndOfGame = 1
EndIf
/ / que siempre es posible que las nuevas lneas se haya hecho ya
CheckForNewLines = 1
EndIf
/ / reanudar recursos de multiplexacin, compartidos se hacen con
EndIf
ResumeMultiplexing
End Funcin

/ / Comprobar el estado de cada botn. Debido a que esta rutina se llama a menudo, las posibilidades de
perder slo pulsar un botn
/ / son muy poco probables.
Sub CheckButtons ( )
/ / comprueba si el botn izquierdo pulsado
Si Izquierda = 0 Y Left_Debounce = 0 Entonces
/ / semforo - variables compartidas estn a punto de ser visitada
PauseMultiplexing
/ / asegurar que el objeto no es ya contra la pared de la izquierda
Si CheckForLeftWall ( ObjectData ) = 0 Entonces
/ / mover el objeto a un bfer temporal
MergeObjects ( ObjectData, tmpObjectData, 0 )
/ / Disminuir el eje x
MoveObjectX ( tmpObjectData, 1 )
/ / asegurar que no hay colisiones con el fondo
Si CollisionDetect ( tmpObjectData, BackgroundData ) = 0 entonces
/ / todo ha ido bien, combinar la matriz en la memoria intermedia de trabajo
MergeObjects ( tmpObjectData, ObjectData, 0 )
/ / activar el temporizador antirrebote (evita que se pulse dobles etc)
Left_Delay = DebounceDelay
Left_Debounce = 1
/ / siempre la posibilidad de que una nueva lnea se hizo slo
CheckForNewLines = 1
EndIf
EndIf
ResumeMultiplexing
EndIf
/ / comprueba si el botn derecho se pulsa
/ / NOTA: ESTOS COMENTARIOS son casi las mismas que el anterior, excluidos por eso
si Derecha = 0 Y Right_Debounce = 0 Entonces
/ / semforo - variables compartidas estn a punto de acceder
PauseMultiplexing
/ / asegurar que no se encuentra en el derecho

garantizar que no se colisiones con

comprobar si se pulsa el botn Rotar


Si Rotate = 0 Y Rotate_Debounce = 0 Entonces
/ / semforo - variables compartidas estn a punto de ser visitada
PauseMultiplexing
/ / Mtodo nueva rotacin, nombrado en consecuencia, mas all
NewRotation ( ObjectData, tmpObjectData, CW )
ResumeMultiplexing
/ / asegurar que nada se ha cado debido a las rotaciones cerca de paredes
Si PixelCount ( ObjectData ) = PixelCount ( tmpObjectData ) Entonces
/ / cheque por objeto colisin debido a la rotacin
Si CollisionDetect ( tmpObjectData, BackgroundData ) = 0 Entonces
/ / Por ltimo, si se pone aqu, entonces, Todo fue bien.
/ / buffer temporal se fusion con tampn de trabajo
PauseMultiplexing
MergeObjects ( tmpObjectData, ObjectData, 0 )
ResumeMultiplexing
/ / actualizar el ngulo actual (0 = 0, 1 = 90, 2 = 180,

comprobar si se presiona hacia abajo


Si Abajo = 0 Y Down_Debounce = 0 Entonces
Down_Delay = DebounceDelay
Down_Debounce = 1
/ / mueve el objeto actual directamente a la parte inferior
Repetir
Hasta MoveObjectDown ( ObjectData ) = 0
EndIf
End Sub

/ / eliminar la lnea en la ubicacin pY


Sub RemoveLine ( ByRef pObject ( ) como Word , ByRef pY Como Byte )
Dim X, Y, LineaActual Como Byte

/ / cambiar cada lnea

borrar la lnea superior


para X = 0 a 7
pObject ( X ) . Bits ( 0 ) = 0
Next
End Sub

/ / quitar las TERMINADOS y devolver el nmero de lneas

Y )
NumberOfLines = NumberOfLines + 1
EndIf
pxeles = 0
Next
End Sub

/ / inicializar TMR2
privadas Sub Initialise_TMR2 ( )
TMR2ON = 0 / / Desactivar TMR2
TMR2IE = 0 / / Apagar TMR2 interrumpe
mS = 0 / / Inicia mS
PR2 = 199 / / TMR2 Perodo de registro PR2
T2CON = % 00100011 / / T2CON 0:1 = preescala
/ / 00 = preescalador es de 1:1
/ / 01 = preescalador es de 1:4
/ / 1x = preescalador es 1:16
/ / 03:06 = Postscale
/ / 0000 = 1:1 postscale
/ / 0001 = 1:2 postscale
/ / 0010 = 1:3 postscale ...
/ / 1111 = uno y diecisis postscale

TMR2 = 0 / / Reset TMR2 Valor


TMR2IE = 1 / / Habilitar TMR2 interrumpe
TMR2ON = 1 / / Habilitar TMR2 para incrementar
Enable ( TMR2_Interrupt )
End Sub

/ / Inicia el programa
Sub InitialiseProgram ( )
/ / hacer todas las entradas digitales
Utils. SetAllDigital

/ / configurar E / S
TRISB = $ 0F
PORTB = $ 00
TRISC = $ 00
PORTC = $ 00
TRISD = $ 00
PORTD = $ 00
TRISA = $ 00
PORTA = $ 11
/ / habilitar weakpullups PORTB
INTCON2. 7 = 0
/ / intialise

inicializar eventos
DropObject = 0
EndOfGame = 0
CheckForNewLines = 0
sWDT = 0

/ / inicializar

semforo - variables compartidas estn a punto de ser visitada


PauseMultiplexing

Para i = 0 a 7
semforo - variables compartidas estn a punto de acceder
PauseMultiplexing

/ / borrar toda grfico

tmpObjectData )
/ / cambiar el resultado hacia abajo, dependiendo de ndice
Seleccione i
Caso 2
MoveObjectY ( tmpObjectData, 0 , 5 )
Caso 3
MoveObjectY ( tmpObjectData, 0 , 10 )
End Select
/ / o resultado con objeto grfico
MergeObjects ( tmpObjectData, ObjectData, 1 )
Siguiente

ResumeMultiplexing

/ / esperar a que "hacia abajo" para ser presionado

/ / realizar botn anti-rebote


Repita
DelayMS ( 10 )
Hasta Abajo = 1

/ / esperar a que se presione el botn


Repeat
Hasta Abajo = 0

/ / realizar botn

Este es el bucle principal del juego de Tetris


Sub MainGameLoop ( )
/ / inicializa pantalla y las variables
InitialiseProgram

/ / activar la pantalla del temporizador de multiplexacin y otras funciones


UpdateScreen = 1
Initialise_TMR2

/ / mostrar la pantalla del flash


SplashScreen

/ / Mostrar puntuacin ms alta de la EEPROM ltimo


ReadHighScore

/ / reinicializar la pantalla y variables (pantalla de inicio y puntuaciones ms altas puede haber


alterado cosas ..)
PauseMultiplexing
InitialiseProgram
Initialise_TMR2
ResumeMultiplexing
/ / seleccionar un objeto y colocarlo en ObjectData
SelectNextObject ( ObjectData )

Repetir
/ / comprobar si la bandera cada de objeto se ha establecido (invocado produce por la
interrupcin "TimerObjectDrop")
Si DropObject = 1 Entonces
DropObject = 0
MoveObjectDown ( ObjectData )
EndIf
/ / comprobar si hay lneas completas. cualquier rutina que se mueve un objeto debe habilitar
esta opcin.
Si CheckForNewLines = 1 Then
CheckForLines ( BackgroundData )
EndIf
/ / botones de escaneado y acciones como necesarias
CheckButtons ( )
/ watch / reset software temporizador perro
sWDT = 0
/ / bucle infinito, o hasta que el evento EndOfGame se establece verdadero
Hasta EndOfGame = 1

/ / escribir la puntuacin ms alta en la EEPROM


WriteHighScore ( )
/ / mostrar el resultado!
ShowScore ( NumberOfLines )
End Sub

/ / main programa de inicio

/ / semilla randgen mdulo


RandGen. Inicialice ( $ 77 )

Si bien Verdadero
/ / entrar en el programa principal del juego, se quedar all hasta que se produce un evento END
MainGameLoop
Wend

Esquemtico
Algunas consideraciones con este esquema:

He utilizado dos ctodo comn 8x8 LED matriz. No he incluido ninguna disposicin de las patillas para ellos en el pinout

vara tanto entre los fabricantes. Usted tendr que comprobar la hoja de datos para su matriz especfica.

Las conexiones Y son el lado positivo de los LED.


Las conexiones X son los aspectos negativos de los LEDs.

Resistencias podra ser cualquier valor por debajo de 200ohms (menos hasta que tenga el brillo deseado - Sola

80ohms).

Por favor, intente una "Blinky", programa en el PIC no debe despedir a su circuito y trabajar por primera vez. Te puedo

garantizar que esta disposicin funciona, he utilizado la lista de conexiones desde este mismo schyematic para desarrollar mi

PCB.

El smbolo de un tringulo con una lnea atravesada significa Vdd (5V). Tal ULN2803 Pin 10.

Otros consejos:

Para nodo comn pantallas LED de tipo, tendr que modificar el cdigo fuente. Usted tendr que cambiar el ULN2803

para un controlador de orgenes de los 8-Channel como UDN2803A .

Haga clic
aqu para enarlge la imagen. Nota: He utilizado la variante de baja tensin de los anteriores Micro PIC, su nmero de parte es
18LF4520.
El PCB
Debido a peticin popular, tambin estoy compartiendo los archivos Gerber para el PCB se muestra a continuacin:

Nombre: Osberto Rene Estrada Baches

Grado: 5to bachiller industrial y perito en Electronica digital y


microprocesadores
Fecha: 12/3/2013.-

Trabajo:

Ante proyecto Tretis con Pic 18LF4520 y display de 8x8

Catedraticos: Juan Escobar

Ruben Arbizu

Catedras: Tecnologia Y
Taller Digital

Tecnologia y Taller Analoga

S-ar putea să vă placă și