24x24 led matrix
Moderators: Chuckt, Garth, bitfogav
Carrying out further tests today on the matrix, had one GREEN led not working, found the fault to a small bit of solder touching the circuits, dont think thats bad for 280 solder joints just on the Matrix board itself hehe! 
My first power board had 24 transistors BC-635 (1amp), but I found these
didnt work correctly, they would not display the colour Orange (this is done by turning green and red leds on at the same time, so I used some 2N2222 (800ma) this made the matrix dimmer, obviously as they are lower amperage output.
So I have now gone for some MPSA14 (1.2amp) transistors

My first power board had 24 transistors BC-635 (1amp), but I found these
didnt work correctly, they would not display the colour Orange (this is done by turning green and red leds on at the same time, so I used some 2N2222 (800ma) this made the matrix dimmer, obviously as they are lower amperage output.
So I have now gone for some MPSA14 (1.2amp) transistors

Heres another test video with the new transistors.
http://www.youtube.com/watch?v=YcCZicRXxl0
And Heres the swordfish code - it is just something ive put together to test the matrix.
http://www.youtube.com/watch?v=YcCZicRXxl0
And Heres the swordfish code - it is just something ive put together to test the matrix.

Code: Select all
// Name of Program
Program Led_Grid_Matrix // useful for documentation purposes
// Device and Clock
Device = 18F4685 // Tell the compiler what chip we are using
Clock = 20 // Tell the compiler what we will be setting the clock to (Mhz)
Config MCLRE = ON
// default fuses...
Config
OSC = HS,
FCMEN = OFF,
IESO = OFF,
PWRT = ON,
BOREN = BOACTIVE,
WDT = OFF,
WDTPS = 128,
PBADEN = OFF,
DEBUG = OFF,
XINST = OFF,
LVP = OFF,
STVREN = ON
// Modules
Include "Utils.bas" // Include this file when we compile so that we can use keywords like "SetAllDigital"
// Const Arrays
// Anodes if we are using ULN2803 Chips (common-cathode Darlington transistor array.)
Const Anode_data(8) As Byte = (%10000000,%01000000,%00100000,%00010000,%00001000,%00000100,%00000010,%00000001)
// use this line to invert the Anodes
'Const Anode_data(8) As Byte = (%00000001,%00000010,%00000100,%00001000,%00010000,%00100000,%01000000,%10000000)
// Setup ALL our PORTS
Dim E_ALL_74573 As PORTC.6 ' setup ALL 74573 enable pins
Dim L_RedB0_74573 As PORTC.4 ' setup our RED CATHODE 74573 latch pin
Dim L_RedB1_74573 As PORTC.0 ' setup our RED CATHODE 74573 latch pin
Dim L_RedB2_74573 As PORTC.1 ' setup our RED CATHODE 74573 latch pin
Dim L_GreenB0_74573 As PORTC.2 ' setup our GREEN CATHODE 74573 latch pin
Dim L_GreenB1_74573 As PORTC.3 ' setup our GREEN CATHODE 74573 latch pin
Dim L_GreenB2_74573 As PORTC.5 ' setup our GREEN CATHODE 74573 latch pin
Dim L_AnodeR0_74573 As PORTE.0 ' setup our ANODE 74573 latch pin
Dim L_AnodeR1_74573 As PORTE.1 ' setup our ANODE 74573 latch pin
Dim L_AnodeR2_74573 As PORTE.2 ' setup our ANODE 74573 latch pin
Dim Anode_port As PORTB ' Anode DATA PORT
Dim Graphic_port As PORTD ' Graphic DATA PORT (green and red)
' when latch pin = high then data can be latched, when latch pin = low data cannot be stored
' when enable pin = high outputs OFF, when enable pin = low outputs ON
// Variable Declarations
Dim x As Byte
Dim t As Byte
Dim counter As Word
Dim start_counter As Word
Dim block_0_green(8) As Byte
Dim block_0_red(8) As Byte
Dim display_step As Word
// Subroutines ====
Sub update_ram_data()
Select display_step
Case 0 ' RED screen
block_0_red(0) = $ff
block_0_red(1) = $ff
block_0_red(2) = $ff
block_0_red(3) = $ff
block_0_red(4) = $ff
block_0_red(5) = $ff
block_0_red(6) = $ff
block_0_red(7) = $ff
block_0_green(0) = $00
block_0_green(1) = $00
block_0_green(2) = $00
block_0_green(3) = $00
block_0_green(4) = $00
block_0_green(5) = $00
block_0_green(6) = $00
block_0_green(7) = $00
Case 1 ' ORANGE screen
block_0_red(0) = $ff
block_0_red(1) = $ff
block_0_red(2) = $ff
block_0_red(3) = $ff
block_0_red(4) = $ff
block_0_red(5) = $ff
block_0_red(6) = $ff
block_0_red(7) = $ff
block_0_green(0) = $ff
block_0_green(1) = $ff
block_0_green(2) = $ff
block_0_green(3) = $ff
block_0_green(4) = $ff
block_0_green(5) = $ff
block_0_green(6) = $ff
block_0_green(7) = $ff
Case 2 ' GREEN screen
block_0_red(0) = $00
block_0_red(1) = $00
block_0_red(2) = $00
block_0_red(3) = $00
block_0_red(4) = $00
block_0_red(5) = $00
block_0_red(6) = $00
block_0_red(7) = $00
block_0_green(0) = $ff
block_0_green(1) = $ff
block_0_green(2) = $ff
block_0_green(3) = $ff
block_0_green(4) = $ff
block_0_green(5) = $ff
block_0_green(6) = $ff
block_0_green(7) = $ff
Case 3 ' BLACK screen
block_0_red(0) = $00
block_0_red(1) = $00
block_0_red(2) = $00
block_0_red(3) = $00
block_0_red(4) = $00
block_0_red(5) = $00
block_0_red(6) = $00
block_0_red(7) = $00
block_0_green(0) = $00
block_0_green(1) = $00
block_0_green(2) = $00
block_0_green(3) = $00
block_0_green(4) = $00
block_0_green(5) = $00
block_0_green(6) = $00
block_0_green(7) = $00
EndSelect
// this is our count of frames
// increment by 1
display_step = display_step + 1
// if we get to end, reset to 0
If display_step = 4 Then ' change the number of steps
display_step = 0
EndIf
High (E_ALL_74573) ' makes enable pin high (all outputs OFF)
For t = 0 To 250 // 250 = time delay
For x = 0 To 7
' make sure all our data latches are closed
Low (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
Low (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
Low (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
Low (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
Low (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
Low (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
Low (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
//===================================================================================
' green data
High (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_0_green(x)
Low (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
Low (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
Low (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
//===================================================================================
' red data
High (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_0_red(x)
Low (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
Low (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
Low (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
//===================================================================================
' anodes data
High (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
Anode_port = Anode_data (x)
Low (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
//===================================================================================
' Enable our Matrix
Low (E_ALL_74573) ' makes enable pin low (all outputs ON)
DelayMS(2)
High (E_ALL_74573) ' makes enable pin high (all outputs OFF)
Next
Inc(t)
Next
End Sub
// Set Ports
SetAllDigital // Make all Pins digital I/O's
TRISA = %11111111 // Make PORTA all inputs
TRISB = %00000000 // Make PORTB all outputs
TRISC = %00000000 // Make PORTC all outputs
TRISD = %00000000 // Make PORTD all outputs
TRISE = %00000000 // Make PORTE all outputs
PORTB = $00 ' clear all ports
PORTC = $00
PORTD = $00
PORTE = $00
// this clears all data in all 74573 data latches
High (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
High (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
// and this makes all outputs off
High (E_ALL_74573) ' makes enable pin high (all outputs OFF)
// Initialize Variables
counter = 0
start_counter = 0
display_step = 0
// Main Program
While True()
update_ram_data
Wend
// end of program.
End
Yeah its great seeing it workingbrad wrote:Nice videos bitfogav, Isn't it great to see something happen for the first time after spending hours on a circuit![]()
Am keen to see where this one goes - and would like to contribute code where I can also.


Ill defo need some contribution with some code when I get to possible transfer your pac-mac game to it or something?

Well thanks to you Brad and seeing your NES control pad on one of the other forum threads I have now fitted a Control Pad Port to my 24x24 microchip board, this will easily give me 8 buttons from just 3 data lines, Ive actually connected all six I/O PORTA pins to the Control Pad Port for future hardware applications and also have a 5+volt and GND supply.brad wrote:That's a great idea about pacman!
you could play it all on the one screen without the screen having to scroll.
Will certainly have to port the code over to the new screen
I have also looked into using a Playstation Control Pad, some of them have a Dual Shock control, which vibrates the control pad when it is powered up by a 9volt supply only on one of the connector lines, so imagine a racing car game where you hit another car or a wall and it vibrates your Control Pad


- Attachments
-
- microchip board edited.jpg (80.52 KiB) Viewed 23008 times
Thanks Buddybrad wrote:Man that is a cool looking board, nice and neat![]()
The NES controller works perfectly, there's never any hiccups - just a few lines of code and it's all good to go!

heres a pic of the NES controller connected and my microchip board made up, oh and with my PicKit2 connected.

- Attachments
-
- micro board with nes.jpg (47.03 KiB) Viewed 23001 times
Heres a NEW video of the matrix
http://www.youtube.com/watch?v=VNQIBaPECC0
Thanks to Brad ive have been able to connect a NES control pad to this project quite easily and I have made a Race Car game which you could also say is based on one of Brads games. the game is still in the early stages so its pretty basic. but I am very impressed with the NES control pad!..
You might also see the fully working contol boards that Ive also made up to control the matrix in the video.
Heres the Full Code
http://www.youtube.com/watch?v=VNQIBaPECC0
Thanks to Brad ive have been able to connect a NES control pad to this project quite easily and I have made a Race Car game which you could also say is based on one of Brads games. the game is still in the early stages so its pretty basic. but I am very impressed with the NES control pad!..
You might also see the fully working contol boards that Ive also made up to control the matrix in the video.
Heres the Full Code
Code: Select all
// Name of Program
Program Rolling_Road // useful for documentation purposes
// Device and Clock
Device = 18F4685 // Tell the compiler what chip we are using
Clock = 20 // Tell the compiler what we will be setting the clock to (Mhz)
Config MCLRE = ON
// default fuses...
Config
OSC = HS,
FCMEN = OFF,
IESO = OFF,
PWRT = ON,
BOREN = BOACTIVE,
WDT = OFF,
WDTPS = 128,
PBADEN = OFF,
DEBUG = OFF,
XINST = OFF,
LVP = OFF,
STVREN = ON
// Modules
Include "Utils.bas" // Include this file when we compile so that we can use keywords like "SetAllDigital"
// Const Arrays
// Anodes if we are using ULN2803 Chips (common-cathode Darlington transistor array.)
Const Anode_data(8) As Byte = (%10000000,%01000000,%00100000,%00010000,%00001000,%00000100,%00000010,%00000001)
// Setup ALL our PORTS
Dim E_ALL_74573 As PORTC.6 ' setup ALL 74573 enable pins
Dim L_RedB0_74573 As PORTC.4 ' setup our RED CATHODE 74573 latch pin
Dim L_RedB1_74573 As PORTC.0 ' setup our RED CATHODE 74573 latch pin
Dim L_RedB2_74573 As PORTC.1 ' setup our RED CATHODE 74573 latch pin
Dim L_GreenB0_74573 As PORTC.2 ' setup our GREEN CATHODE 74573 latch pin
Dim L_GreenB1_74573 As PORTC.3 ' setup our GREEN CATHODE 74573 latch pin
Dim L_GreenB2_74573 As PORTC.5 ' setup our GREEN CATHODE 74573 latch pin
Dim L_AnodeR0_74573 As PORTE.0 ' setup our ANODE 74573 latch pin
Dim L_AnodeR1_74573 As PORTE.1 ' setup our ANODE 74573 latch pin
Dim L_AnodeR2_74573 As PORTE.2 ' setup our ANODE 74573 latch pin
Dim Anode_port As PORTB ' Anode DATA PORT
Dim Graphic_port As PORTD ' Graphic DATA PORT (green and red)
// Control Pad Port Setup and Flag bits
Dim nes_data As PORTA.0
Dim nes_latch As PORTA.1
Dim nes_clock As PORTA.2
Dim nes_flags As Byte
Dim nes_a As nes_flags.0
Dim nes_b As nes_flags.1
Dim nes_select As nes_flags.2
Dim nes_start As nes_flags.3
Dim nes_up As nes_flags.4
Dim nes_down As nes_flags.5
Dim nes_left As nes_flags.6
Dim nes_right As nes_flags.7
// Variable Declarations
Dim x As Byte
Dim t As Word
Dim counter As Word
Dim block_0_green(8) As Byte
Dim block_0_red(8) As Byte
Dim block_1_green(8) As Byte
Dim block_1_red(8) As Byte
Dim block_2_green(8) As Byte
Dim block_2_red(8) As Byte
Dim block_3_green(8) As Byte
Dim block_3_red(8) As Byte
Dim block_4_green(8) As Byte
Dim block_4_red(8) As Byte
Dim block_5_green(8) As Byte
Dim block_5_red(8) As Byte
Dim block_6_green(8) As Byte
Dim block_6_red(8) As Byte
Dim block_7_green(8) As Byte
Dim block_7_red(8) As Byte
Dim block_8_green(8) As Byte
Dim block_8_red(8) As Byte
Dim display_step As Word
Dim button_debounce As Byte
Dim car_position As Byte
Dim hit_data As Byte
// Subroutines ====
Sub road_data()
Select display_step
Case 0
' we need to initialize RED even though we are only using block7 row 6-7
block_0_red(0) = $00
block_0_red(1) = $00
block_0_red(2) = $00
block_0_red(3) = $00
block_0_red(4) = $00
block_0_red(5) = $00
block_0_red(6) = $00
block_0_red(7) = $00
block_1_red(0) = $00
block_1_red(1) = $00
block_1_red(2) = $00
block_1_red(3) = $00
block_1_red(4) = $00
block_1_red(5) = $00
block_1_red(6) = $00
block_1_red(7) = $00
block_2_red(0) = $00
block_2_red(1) = $00
block_2_red(2) = $00
block_2_red(3) = $00
block_2_red(4) = $00
block_2_red(5) = $00
block_2_red(6) = $00
block_2_red(7) = $00
block_3_red(0) = $00
block_3_red(1) = $00
block_3_red(2) = $00
block_3_red(3) = $00
block_3_red(4) = $00
block_3_red(5) = $00
block_3_red(6) = $00
block_3_red(7) = $00
block_4_red(0) = $00
block_4_red(1) = $00
block_4_red(2) = $00
block_4_red(3) = $00
block_4_red(4) = $00
block_4_red(5) = $00
block_4_red(6) = $00
block_4_red(7) = $00
block_5_red(0) = $00
block_5_red(1) = $00
block_5_red(2) = $00
block_5_red(3) = $00
block_5_red(4) = $00
block_5_red(5) = $00
block_5_red(6) = $00
block_5_red(7) = $00
block_6_red(0) = $00
block_6_red(1) = $00
block_6_red(2) = $00
block_6_red(3) = $00
block_6_red(4) = $00
block_6_red(5) = $00
block_6_red(6) = $00
block_6_red(7) = $00
block_7_red(0) = $00
block_7_red(1) = $00
block_7_red(2) = $00
block_7_red(3) = $00
block_7_red(4) = $00
block_7_red(5) = $00
' block_7_red(6) = %00001000 ' check car position
block_7_red(7) = $00
block_8_red(0) = $00
block_8_red(1) = $00
block_8_red(2) = $00
block_8_red(3) = $00
block_8_red(4) = $00
block_8_red(5) = $00
block_8_red(6) = $00
block_8_red(7) = $00
block_0_green(0) = %11111111
block_0_green(1) = %11111111
block_0_green(2) = %11111111
block_0_green(3) = %11111111
block_0_green(4) = %11111111
block_0_green(5) = %11111111
block_0_green(6) = %11111111
block_0_green(7) = %11111111
block_1_green(0) = %11110000
block_1_green(1) = %11110000
block_1_green(2) = %11000000
block_1_green(3) = %11000000
block_1_green(4) = %10000001
block_1_green(5) = %00000001
block_1_green(6) = %00000011
block_1_green(7) = %00000011
block_2_green(0) = %01111111
block_2_green(1) = %01111111
block_2_green(2) = %01111111
block_2_green(3) = %11111111
block_2_green(4) = %11111111
block_2_green(5) = %11111111
block_2_green(6) = %11111111
block_2_green(7) = %11111111
block_3_green(0) = %11111111
block_3_green(1) = %11111111
block_3_green(2) = %11111111
block_3_green(3) = %11111111
block_3_green(4) = %11111111
block_3_green(5) = %11111111
block_3_green(6) = %11111111
block_3_green(7) = %11111111
block_4_green(0) = %00000011
block_4_green(1) = %10000011
block_4_green(2) = %10000011
block_4_green(3) = %10000001
block_4_green(4) = %11000001
block_4_green(5) = %11000001
block_4_green(6) = %11000001
block_4_green(7) = %10000001
block_5_green(0) = %11111111
block_5_green(1) = %11111111
block_5_green(2) = %11111111
block_5_green(3) = %11111111
block_5_green(4) = %11111111
block_5_green(5) = %11111111
block_5_green(6) = %11111111
block_5_green(7) = %11111111
block_6_green(0) = %11111111
block_6_green(1) = %11111111
block_6_green(2) = %11111111
block_6_green(3) = %11111111
block_6_green(4) = %11111111
block_6_green(5) = %11111111
block_6_green(6) = %11111111
block_6_green(7) = %11111111
block_7_green(0) = %10000001
block_7_green(1) = %00000011
block_7_green(2) = %00000011
block_7_green(3) = %00000011
block_7_green(4) = %00000011
block_7_green(5) = %10000011
block_7_green(6) = %10000001
block_7_green(7) = %11000000
block_8_green(0) = %11111111
block_8_green(1) = %11111111
block_8_green(2) = %11111111
block_8_green(3) = %11111111
block_8_green(4) = %11111111
block_8_green(5) = %11111111
block_8_green(6) = %11111111
block_8_green(7) = %11111111
Case 1
block_1_green(0) = %11000000
block_1_green(2) = %11110000
block_1_green(4) = %11000000
block_1_green(5) = %10000001
block_1_green(6) = %00000001
block_2_green(0) = %11111111
block_2_green(3) = %01111111
block_4_green(1) = %00000011
block_4_green(3) = %10000011
block_4_green(4) = %10000001
block_4_green(7) = %11000001
block_7_green(1) = %10000001
block_7_green(5) = %00000011
block_7_green(6) = %10000011
block_7_green(7) = %10000001
Case 2
block_1_green(0) = %10000001
block_1_green(1) = %11000000
block_1_green(3) = %11110000
block_1_green(5) = %11000000
block_1_green(6) = %10000001
block_1_green(7) = %00000001
block_2_green(1) = %11111111
block_2_green(4) = %01111111
block_4_green(2) = %00000011
block_4_green(4) = %10000011
block_4_green(5) = %10000001
block_7_green(0) = %11000001
block_7_green(2) = %10000001
block_7_green(6) = %00000011
block_7_green(7) = %10000011
Case 3
block_1_green(0) = %10000011
block_1_green(1) = %10000001
block_1_green(2) = %11000000
block_1_green(4) = %11110000
block_1_green(6) = %11000000
block_1_green(7) = %10000001
block_2_green(2) = %11111111
block_2_green(5) = %01111111
block_4_green(0) = %00000001
block_4_green(3) = %00000011
block_4_green(5) = %10000011
block_4_green(6) = %10000001
block_7_green(1) = %11000001
block_7_green(3) = %10000001
block_7_green(7) = %00000011
Case 4
block_1_green(0) = %00000011
block_1_green(1) = %10000011
block_1_green(2) = %10000001
block_1_green(3) = %11000000
block_1_green(5) = %11110000
block_1_green(7) = %11000000
block_2_green(3) = %11111111
block_2_green(6) = %01111111
block_4_green(0) = %10000001
block_4_green(1) = %00000001
block_4_green(4) = %00000011
block_4_green(6) = %10000011
block_4_green(7) = %10000001
block_7_green(2) = %11000001
block_7_green(4) = %10000001
Case 5
block_1_green(1) = %00000011
block_1_green(2) = %10000011
block_1_green(3) = %10000001
block_1_green(4) = %11000000
block_1_green(6) = %11110000
block_2_green(4) = %11111111
block_2_green(7) = %01111111
block_4_green(0) = %11000000
block_4_green(1) = %10000001
block_4_green(2) = %00000001
block_4_green(5) = %00000011
block_4_green(7) = %10000011
block_7_green(0) = %10000001
block_7_green(3) = %11000001
block_7_green(5) = %10000001
Case 6
block_1_green(2) = %00000011
block_1_green(3) = %10000011
block_1_green(4) = %10000001
block_1_green(5) = %11000000
block_1_green(7) = %11110000
block_2_green(5) = %11111111
block_4_green(1) = %11000000
block_4_green(2) = %10000001
block_4_green(3) = %00000001
block_4_green(6) = %00000011
block_5_green(0) = %01111111
block_7_green(0) = %10000011
block_7_green(1) = %10000001
block_7_green(4) = %11000001
block_7_green(6) = %10000001
Case 7
block_1_green(3) = %00000011
block_1_green(4) = %10000011
block_1_green(5) = %10000001
block_1_green(6) = %11000000
block_2_green(6) = %11111111
block_4_green(0) = %11110000
block_4_green(2) = %11000000
block_4_green(3) = %10000001
block_4_green(4) = %00000001
block_4_green(7) = %00000011
block_5_green(1) = %01111111
block_7_green(1) = %10000011
block_7_green(2) = %10000001
block_7_green(5) = %11000001
block_7_green(7) = %10000001
Case 8
block_1_green(0) = %10000001
block_1_green(4) = %00000011
block_1_green(5) = %10000011
block_1_green(6) = %10000001
block_1_green(7) = %11000000
block_2_green(7) = %11111111
block_4_green(1) = %11110000
block_4_green(3) = %11000000
block_4_green(4) = %10000001
block_4_green(5) = %00000001
block_5_green(2) = %01111111
block_7_green(0) = %00000011
block_7_green(2) = %10000011
block_7_green(3) = %10000001
block_7_green(6) = %11000001
Case 9
block_1_green(1) = %10000001
block_1_green(5) = %00000011
block_1_green(6) = %10000011
block_1_green(7) = %10000001
block_4_green(0) = %11000000
block_4_green(2) = %11110000
block_4_green(4) = %11000000
block_4_green(5) = %10000001
block_4_green(6) = %00000001
block_5_green(0) = %11111111
block_5_green(3) = %01111111
block_7_green(1) = %00000011
block_7_green(3) = %10000011
block_7_green(4) = %10000001
block_7_green(7) = %11000001
Case 10
block_1_green(0) = %11000001
block_1_green(2) = %10000001
block_1_green(6) = %00000011
block_1_green(7) = %10000011
block_4_green(0) = %10000001
block_4_green(1) = %11000000
block_4_green(3) = %11110000
block_4_green(5) = %11000000
block_4_green(6) = %10000001
block_4_green(7) = %00000001
block_5_green(1) = %11111111
block_5_green(4) = %01111111
block_7_green(2) = %00000011
block_7_green(4) = %10000011
block_7_green(5) = %10000001
Case 11
block_1_green(1) = %11000001
block_1_green(3) = %10000001
block_1_green(7) = %00000011
block_4_green(0) = %10000011
block_4_green(1) = %10000001
block_4_green(2) = %11000000
block_4_green(4) = %11110000
block_4_green(6) = %11000000
block_4_green(7) = %10000001
block_5_green(2) = %11111111
block_5_green(5) = %01111111
block_7_green(0) = %00000001
block_7_green(3) = %00000011
block_7_green(5) = %10000011
block_7_green(6) = %10000001
Case 12
block_1_green(2) = %11000001
block_1_green(4) = %10000001
block_4_green(0) = %00000011
block_4_green(1) = %10000011
block_4_green(2) = %10000001
block_4_green(3) = %11000000
block_4_green(5) = %11110000
block_4_green(7) = %11000000
block_5_green(3) = %11111111
block_5_green(6) = %01111111
block_7_green(0) = %10000001
block_7_green(1) = %00000001
block_7_green(4) = %00000011
block_7_green(6) = %10000011
block_7_green(7) = %10000001
Case 13
block_1_green(0) = %10000001
block_1_green(3) = %11000001
block_1_green(5) = %10000001
block_4_green(1) = %00000011
block_4_green(2) = %10000011
block_4_green(3) = %10000001
block_4_green(4) = %11000000
block_4_green(6) = %11110000
block_5_green(4) = %11111111
block_5_green(7) = %01111111
block_7_green(0) = %11000000
block_7_green(1) = %10000001
block_7_green(2) = %00000001
block_7_green(5) = %00000011
block_7_green(7) = %10000011
Case 14
block_1_green(0) = %10000011
block_1_green(1) = %10000001
block_1_green(4) = %11000001
block_1_green(6) = %10000001
block_4_green(2) = %00000011
block_4_green(3) = %10000011
block_4_green(4) = %10000001
block_4_green(5) = %11000000
block_4_green(7) = %11110000
block_5_green(5) = %11111111
block_7_green(1) = %11000000
block_7_green(2) = %10000001
block_7_green(3) = %00000001
block_7_green(6) = %00000011
block_8_green(0) = %01111111
Case 15
block_1_green(1) = %10000011
block_1_green(2) = %10000001
block_1_green(5) = %11000001
block_1_green(7) = %10000001
block_4_green(3) = %00000011
block_4_green(4) = %10000011
block_4_green(5) = %10000001
block_4_green(6) = %11000000
block_5_green(6) = %11111111
block_7_green(0) = %11110000
block_7_green(2) = %11000000
block_7_green(3) = %10000001
block_7_green(4) = %00000001
block_7_green(7) = %00000011
block_8_green(1) = %01111111
Case 16
block_1_green(0) = %00000011
block_1_green(2) = %10000011
block_1_green(3) = %10000001
block_1_green(6) = %11000001
block_4_green(0) = %10000001
block_4_green(4) = %00000011
block_4_green(5) = %10000011
block_4_green(6) = %10000001
block_4_green(7) = %11000000
block_5_green(7) = %11111111
block_7_green(1) = %11110000
block_7_green(3) = %11000000
block_7_green(4) = %10000001
block_7_green(5) = %00000001
block_8_green(2) = %01111111
Case 17
block_1_green(1) = %00000011
block_1_green(3) = %10000011
block_1_green(4) = %10000001
block_1_green(7) = %11000001
block_4_green(1) = %10000001
block_4_green(5) = %00000011
block_4_green(6) = %10000011
block_4_green(7) = %10000001
block_7_green(0) = %11000000
block_7_green(2) = %11110000
block_7_green(4) = %11000000
block_7_green(5) = %10000001
block_7_green(6) = %00000001
block_8_green(0) = %11111111
block_8_green(3) = %01111111
Case 18
block_1_green(2) = %00000011
block_1_green(4) = %10000011
block_1_green(5) = %10000001
block_4_green(0) = %11000001
block_4_green(2) = %10000001
block_4_green(6) = %00000011
block_4_green(7) = %10000011
block_7_green(0) = %10000001
block_7_green(1) = %11000000
block_7_green(3) = %11110000
block_7_green(5) = %11000000
block_7_green(6) = %10000001
block_7_green(7) = %00000001
block_8_green(1) = %11111111
block_8_green(4) = %01111111
Case 19
block_1_green(0) = %00000001
block_1_green(3) = %00000011
block_1_green(5) = %10000011
block_1_green(6) = %10000001
block_4_green(1) = %11000001
block_4_green(3) = %10000001
block_4_green(7) = %00000011
block_7_green(0) = %10000011
block_7_green(1) = %10000001
block_7_green(2) = %11000000
block_7_green(4) = %11110000
block_7_green(6) = %11000000
block_7_green(7) = %10000001
block_8_green(2) = %11111111
block_8_green(5) = %01111111
Case 20
block_1_green(0) = %10000001
block_1_green(1) = %00000001
block_1_green(4) = %00000011
block_1_green(6) = %10000011
block_1_green(7) = %10000001
block_4_green(2) = %11000001
block_4_green(4) = %10000001
block_7_green(0) = %00000011
block_7_green(1) = %10000011
block_7_green(2) = %10000001
block_7_green(3) = %11000000
block_7_green(5) = %11110000
block_7_green(7) = %11000000
block_8_green(3) = %11111111
block_8_green(6) = %01111111
Case 21
block_1_green(0) = %11000000
block_1_green(1) = %10000001
block_1_green(2) = %00000001
block_1_green(5) = %00000011
block_1_green(7) = %10000011
block_4_green(0) = %10000001
block_4_green(3) = %11000001
block_4_green(5) = %10000001
block_7_green(1) = %00000011
block_7_green(2) = %10000011
block_7_green(3) = %10000001
block_7_green(4) = %11000000
block_7_green(6) = %11110000
block_8_green(4) = %11111111
block_8_green(7) = %01111111
Case 22
block_1_green(1) = %11000000
block_1_green(2) = %10000001
block_1_green(3) = %00000001
block_1_green(6) = %00000011
block_2_green(0) = %01111111
block_4_green(0) = %10000011
block_4_green(1) = %10000001
block_4_green(4) = %11000001
block_4_green(6) = %10000001
block_7_green(2) = %00000011
block_7_green(3) = %10000011
block_7_green(4) = %10000001
block_7_green(5) = %11000000
block_7_green(7) = %11110000
block_8_green(5) = %11111111
Case 23
block_1_green(0) = %11110000
block_1_green(2) = %11000000
block_1_green(3) = %10000001
block_1_green(4) = %00000001
block_1_green(7) = %00000011
block_2_green(1) = %01111111
block_4_green(1) = %10000011
block_4_green(2) = %10000001
block_4_green(5) = %11000001
block_4_green(7) = %10000001
block_7_green(3) = %00000011
block_7_green(4) = %10000011
block_7_green(5) = %10000001
block_7_green(6) = %11000000
block_8_green(6) = %11111111
Case 24
block_1_green(1) = %11110000
block_1_green(3) = %11000000
block_1_green(4) = %10000001
block_1_green(5) = %00000001
block_2_green(2) = %01111111
block_4_green(0) = %00000011
block_4_green(2) = %10000011
block_4_green(3) = %10000001
block_4_green(6) = %11000001
block_7_green(0) = %10000001
block_7_green(4) = %00000011
block_7_green(5) = %10000011
block_7_green(6) = %10000001
block_7_green(7) = %11000000
block_8_green(7) = %11111111
EndSelect
// this is our count of frames
// increment by 1
display_step = display_step + 1
// if we get to end, reset to 0
If display_step = 24 Then ' change the number of steps
display_step = 0
EndIf
For t = 0 To 25 // t = time delay
For x = 0 To 7
//===================================================================================
' red data
High (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_0_red(x)
Low (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_3_red(x)
Low (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_6_red(x)
Low (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
//===================================================================================
' green data
High (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_0_green(x)
Low (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_3_green(x)
Low (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_6_green(x)
Low (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
//===================================================================================
' anodes data
High (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
Anode_port = Anode_data (x)
Low (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
Anode_port = $00
Low (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
//===================================================================================
' Enable our Matrix
Low (E_ALL_74573) ' makes enable pin low (all outputs ON)
DelayUS(400)
High (E_ALL_74573) ' makes enable pin high (all outputs OFF)
' we now clear our Anode data to stop graphic ghosting
High (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
Anode_port = $00
Low (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
//===================================================================================
' red data
High (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_1_red(x)
Low (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_4_red(x)
Low (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_7_red(x)
Low (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
//===================================================================================
' green data
High (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_1_green(x)
Low (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_4_green(x)
Low (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_7_green(x)
Low (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
//===================================================================================
' anodes data
High (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
Anode_port = $00
Low (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
Anode_port = Anode_data (x)
Low (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
//===================================================================================
' Enable our Matrix
Low (E_ALL_74573) ' makes enable pin low (all outputs ON)
DelayUS(400)
High (E_ALL_74573) ' makes enable pin high (all outputs OFF)
' we now clear our Anode data to stop graphic ghosting
High (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
Anode_port = $00
Low (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
//===================================================================================
' red data
High (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_2_red(x)
Low (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_5_red(x)
Low (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
Graphic_port = block_8_red(x)
Low (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
//===================================================================================
' green data
High (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_2_green(x)
Low (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_5_green(x)
Low (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
Graphic_port = block_8_green(x)
Low (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
//===================================================================================
' anodes data
Anode_port = Anode_data (x)
High (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
Anode_port = $00
Low (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
//===================================================================================
' Enable our Matrix
Low (E_ALL_74573) ' makes enable pin low (all outputs ON)
DelayUS(400)
High (E_ALL_74573) ' makes enable pin high (all outputs OFF)
' we now clear our Anode data to stop graphic ghosting
High (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
Anode_port = $00
Low (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
Next
Inc(t)
Next
End Sub
// Check NES control Pad Data
Sub check_control_pad()
nes_latch = 1 // grab the state of the buttons
nes_latch = 0 // by giving a positive edge to the latch enable
For x = 0 To 7
nes_flags.bits(x) = nes_data // the first bit (button a) will be shown on the nes_data pin, we read it,
nes_clock = 1 // then clock through the remaining 7 bits to check the state of all buttons.
nes_clock = 0
Next
End Sub
// Check which button pressed
Sub check_buttons()
' check left button
If button_debounce = 0 And nes_left = 0 And car_position <> 128 Then // <> 128 is MSB bit 7
car_position = car_position << 1
button_debounce = 5
EndIf
' check right button
If button_debounce = 0 And nes_right = 0 And car_position <> 1 Then // <1>> 1
button_debounce = 5
EndIf
End Sub
// Debounce for buttons
Sub debounce_buttons() // here we debounce buttons for the control pad
If button_debounce <> 0 Then
Dec(button_debounce)
EndIf
End Sub
// Stores Car Position for Display
Sub car_data ()
block_7_red(6) = car_position // this updates our car position to draw on display
End Sub
// stores Road data
Sub hit_data_update ()
hit_data = block_7_green(6)
End Sub
// check to see if the Car has crashed (hit a wall)
Sub collision_detect ()
Dim result As Byte
result = 0
result = car_position And hit_data
If result <> 0 Then
display_step = 0 // this resets the road data
car_position = %00001000 // this resets the car to the start position
EndIf
End Sub
// Set Ports
SetAllDigital // Make all Pins digital I/O's
TRISA = %111001 // Make PORTA all inputs NES control pad = RA0 Data input, RA1-RA2 Latch and Clock are outputs.
TRISB = %00000000 // Make PORTB all outputs
TRISC = %00000000 // Make PORTC all outputs
TRISD = %00000000 // Make PORTD all outputs
TRISE = %000 // Make PORTE all outputs
PORTB = $00 ' clear all ports
PORTC = $00
PORTD = $00
PORTE = $00
// this clears all data in all 74573 data latches
High (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
High (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
High (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
High (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
High (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
// and this makes all outputs off
High (E_ALL_74573) ' makes enable pin high (all outputs OFF)
' make sure all our data latches are closed
Low (L_RedB0_74573) ' setup our RED CATHODE 74573 latch pin
Low (L_RedB1_74573) ' setup our RED CATHODE 74573 latch pin
Low (L_RedB2_74573) ' setup our RED CATHODE 74573 latch pin
Low (L_GreenB0_74573) ' setup our GREEN CATHODE 74573 latch pin
Low (L_GreenB1_74573) ' setup our GREEN CATHODE 74573 latch pin
Low (L_GreenB2_74573) ' setup our GREEN CATHODE 74573 latch pin
Low (L_AnodeR0_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR1_74573) ' setup our ANODE 74573 latch pin
Low (L_AnodeR2_74573) ' setup our ANODE 74573 latch pin
// Initialize Variables
counter = 0
display_step = 0
nes_latch = 0
nes_clock = 0
button_debounce = 5
car_position = %00001000 // start position for our car
hit_data = 0
// Main Program
While True()
car_data
road_data
check_control_pad
check_buttons
debounce_buttons
hit_data_update
collision_detect
Wend
// end of program.
End
Cool, I have yet to look at the ADC's with swordfish but I did do abit of ADC's using assembly. I have looked at EEPROM though with swordfish and i am quite amazed that this bit of code writes to eeprombrad wrote:I have just tonight started expermenting with the inbuilt ADC's within the microcontroller.
you know what has made it simple for me? SWORDFISH include files
Code: Select all
EE.Write(0,Value)

Code: Select all
eeprom.write
bsf STATUS, RP1 ; set RP1 + clear RP0 = Bank2
bcf STATUS, RP0 ; select BANK 2
movwf EEDATA ; puts contents of Working register into EEDATA register
bsf STATUS, RP0 ; selects BANK 3
bcf EECON1, EEPGD ; Stores to DATA memory (NOT Program memory)
bsf EECON1,WREN ; sets bit in EECON1, WREN bit (turns ON write bit) (WREN = EEPROM Write Enable bit)
movlw 55h ; puts 55h (85 decemal) into
movwf EECON2 ; EECON2 register = EEPROM Control register 2
movlw 0AAh ; puts 0AAh (170 decemal) into
movwf EECON2 ; EECON2 register = EEPROM Control register 2
bsf EECON1, WR ; sets bit in EECON1, WR (write) bit, STARTS a write cycle.
; The bit is cleared by hardware once write is complete.
write.done
btfsc EECON1, WR ; waits for WR bit to clear before moving on, when cleared next line skipped.
goto write.done ; goes back to write.done untill WR is cleared
bcf EECON1, WREN ; clears bit in EECON1, WREN bit (turns OFF write bit) (WREN = EEPROM Write Enable bit)
bcf STATUS, RP1 ; we now have to clear BOTH RP1 + RP0 to -
bcf STATUS, RP0 ; select BANK 0 and return to our prog.
return ; returns to prog
Who is online
Users browsing this forum: No registered users and 3 guests