Placeholder Image

字幕列表 影片播放

  • There are many kinds of ROM chips, or "Read Only Memories"

  • and ROM could refer to a chip that has some data in it

  • that you can only read - there is no way to write it or change it

  • so that the chip is manufactured in a way that it has that

  • data in it but there are other types of

  • ROMs that are programmable and

  • those are called PROMs or "Programmable

  • Read-Only Memory and those usually

  • give you some way of programming it

  • once, so you get the chip and it's blank

  • and you can program it once and

  • once you've programmed it then you can't

  • change what's programmed in it but you

  • can read it as much as you want and of

  • course that can be inconvenient so they

  • also make any EPROMs which are

  • erasable programmable read only memories

  • and usually can be erased by exposing

  • them to ultraviolet light so this here

  • is an EPROM and you see

  • there's a little window on the top of

  • the chip and you can see the the die and

  • so what you can program this and then

  • it's a read-only memory at that point

  • but you can also erase it by exposing

  • the the die here to ultraviolet light so

  • you need some kind of ultraviolet eraser

  • thing to to erase these otherwise you

  • know you can also you leave them out in

  • the Sun for a few hours sometimes that

  • works which is which is why they also

  • have these little stickers that go over

  • top so they don't accidentally erase

  • themselves so that's a erasable

  • programmable read-only memory but the

  • most convenient kind of the electrically

  • erasable programmable read-only memory

  • which is what these guys are which

  • allows you to program them and then of

  • course they acted normal read-only

  • memory at that point but then you can

  • also erase them and reprogram them

  • electronically without needing to expose

  • ultraviolet light or do anything special.

  • So the 28C16 that's what I've got here

  • I've got two different 28C16s. This is

  • made by Catalyst, this one's made by Exel.

  • I also have the data sheet over here for

  • the Atmel AT28C16, they're all

  • basically the same. So this is sixteen thousand bits,

  • which is organized as two thousand 8-bit words or

  • "bytes" essentially, two thousand

  • bytes. Parallel EEPROMs so if we take a

  • look on the data sheet at the pin-out

  • here this is our pin out comes in a

  • couple different packages. We have the

  • plastic dual inline package

  • that's this guy here. It's fairly

  • straightforward - there's basically

  • eight I/O pins, so 0, 1, 2, 3, 4, 5, 6, 7 so eight I/O pins that's for

  • our data. They're input for

  • programming and normally they'd be

  • output for reading from it and then there are

  • 11 address lines so zero through seven

  • here and eight nine and ten over here

  • and those address lines are used for

  • telling it which byte we want to read, or

  • write if we're writing to it for programming it.

  • And other than that pretty

  • straightforward. There's ground and power for

  • powering the thing and then there's a

  • "Write Enable", "Output Enable" and "Chip Enable",

  • which we will take a look at in a

  • moment. I'll start by hooking up power

  • and ground. The next pin I'll hook up is

  • pin 18 which is the "Chip Enable", and I'll hook

  • that to ground, and so chip enable is

  • active low so when this is low the chip

  • is enabled and we always want the chip to be

  • enabled so we'll just tie that directly

  • to ground. Next to note is there's are 8 I/O lines, so

  • I/O 0, 1, 2, 3, 4, 5, 6 and 7 so I'm going to hook those up to

  • some LEDs so we can see what's in the

  • chip so when we we look at a particular

  • address will be able to see what data is

  • stored in the chip. So I'm gonna add some LEDs

  • here that we'll use for looking at what

  • data is in here.

  • Alright, so there's 8 LEDs that we'll use for

  • looking at the data. Now I'll connect the data

  • pins here so I/0 0 (pin 9). I'll connect

  • that. I'll start connecting those to the

  • LEDs. So that's I/O 0 (pin 9) going to

  • the first LED, pin 10 to the next LED

  • here, and pin 11, and I/O 3 I'll connect over

  • here to the other side of these LEDs.

  • I/O 4

  • So I've connected all these I/O lines to the LEDs so we'll be

  • able to see the output of the chip, but we

  • need to connect the other side of the

  • LEDs over to ground. So I'm connecting

  • these LEDs to ground through these 330

  • ohm resistors, and that's important because

  • this chip doesn't have any current

  • limiting on its outputs so if we don't

  • have these current limiting resistors

  • here, then it's going to drive as much

  • current can through the chip through the

  • LED, potentially damaging both the chip

  • and the LED in the process so we don't

  • want that we need to do some kind of

  • current limiting. So I've got these 330 ohm

  • resistors that are that are going from

  • ground through the LED and then into the

  • chip into the output of the chip will

  • who will go through the LED into ground

  • and these are a little bit asymmetrical

  • because the the ones on this side are

  • going to the LEDs this way into ground

  • the ones on the this side are going through

  • the LEDs that way and then the ground and

  • so these first 5 LEDs are the other way

  • around

  • so this should allow us to see what's

  • coming out of these I/O lines, but in

  • order to do that we've got to first tell

  • it what address we want to look

  • at. So if we want to read from address 0 for

  • example have to set all these address

  • lines to 0. We want to be able to select

  • which address we're reading from so what

  • I want to do is hook these address lines

  • up to some switches so we can select

  • whichever address we want.

  • So I'll put some DIP-switches here that we'll use for setting the address,

  • and I'll hook all the address lines up to the switches

  • So that's the first eight address lines here

  • and from zero through address seven are hooked

  • up to these switches when the

  • switches are off we want the address

  • lines to be low so i'm gonna tie them

  • low with a, this is a 10k resistor I think, brown black

  • and I think that's orange, so it's a 10k resistor so

  • I'm going to tie these these all low

  • with these 10k resistors. So when the switches

  • are off these will all be tied low through

  • these resistors when we turn the switch

  • on then we want to connect these to

  • five volts. So if we hook the other side of the

  • switch to five volts then when the switch is

  • on the pin will be high and when the switch is

  • off then it's pulled up by that

  • resistor or pulled down i guess by

  • that resistor to ground so we want

  • this side of the switches to all be tied to five volts

  • So that should take care of the

  • first 8 address lines over here now we've still

  • got address 8, 9 and 10 over on this side

  • so i'm going to add another set of

  • switches here and we're going to use the

  • the, i guess the bottom three of these

  • for address 8, 9 and 10 and I'm gonna

  • hook them up pretty much the same way.

  • and so that's address 8, 9 and 10 here;

  • 8, 9 and 10 hooked up to this side

  • of the switch and so again when these

  • switches are off we want to pull them

  • low, so I'll do that with the 10k resistors

  • and then when the switches are on we

  • want to be pulled high

  • so now we can use these first 11 switches

  • everything but the top one here to set our address

  • and of course 11 bits of address gives us the

  • 2048 (two thousand fourty eight) or approximately 2,000

  • different memory locations

  • So the only pins we haven't hooked up yet

  • are the right enable and output enable

  • the output enable is... let's keep pin 20

  • and if we set that too low its active

  • low so if we set that to low by tying

  • that to ground then that will enable the

  • output which means that whatever address

  • we set here we'll see the contents down

  • here on the I/O lines

  • so we try that we can hook this up to

  • power now so I'm gonna hook this up to 5 volts

  • and what we see is all ones and so that's

  • address location 0 and if we change this

  • to address 1 we see all ones if we go

  • to address 2 we still see all ones, address 3

  • all ones and you might be noticing a pattern

  • here that's because when these chips are

  • brand-new or they're erased, they are

  • erased with one's at every location so

  • all one's named the chip is erased and

  • there's there's nothing stored there and

  • that makes sense because we haven't

  • programmed anything here yet.

  • So to program stuff that's where the right enable pin

  • comes into play and understand how that

  • works we're gonna have to take a closer

  • look at the data sheet if we go to page

  • three there's the section about byte

  • write and it says a few things. it says

  • you can use a low pulse on the right

  • enable or chip enable input with the

  • output enable high and either chip

  • enable write enable low respectively and

  • that initiates a byte write. So what does

  • that mean? Well you can read that a few

  • times and there's some more details in

  • there

  • it also helps to look over on page six

  • theres some timing diagrams usually the

  • best way to to understand these data

  • sheets have to read them through you

  • know at least a couple times and you

  • know when you're reading it through it

  • may not make sense entirely what's going

  • on but as you see other parts of the

  • data sheet you'll start to kind of get a

  • picture of what's going on and so here

  • it is helpful to look at the timing

  • diagram which tells you how to write and

  • then it turns out there's there's two

  • ways you can write you can either write

  • to the chip using the write enable

  • controlled option or the chip enable

  • controlled option

  • we're going to go with write enable

  • controlled and basically what that means

  • is that means that its the write enable

  • pin going low and then high that controls the

  • write, that the tell that went to write

  • data and the way you read these timing

  • diagrams is you imagine time going from

  • left to right and there's all these

  • different transitions and things that

  • are going on here and really what

  • they're trying to do is we're trying to

  • show you the the parameters for the

  • timing and all of these parameters are

  • given in the table above and so for

  • example you know there's this tWP which

  • is the time of the write pulse so that's

  • the time from here to here which is the

  • time that the write enable goes low and

  • then comes back up how long is that

  • pulse, well time of write pulse, the

  • write pulse width, it says the minimum is a

  • hundred nanoseconds and the maximum

  • is a thousand nanoseconds so that's good

  • to know we have to somehow make sure

  • that we keep that within a hundred to a

  • thousand nanoseconds so that will be

  • important to keep keep an eye on some of

  • these other things are basically telling

  • you when this write enable goes low

  • that's what it's going to look at the

  • address and when the writing enable goes

  • high that's what it's going to look at

  • the data and that's sort of corroborated

  • over here in this description here so it

  • says "the address location is latched

  • on a falling edge of write enable the

  • new data is latched on the rising edge"

  • So the address is latched on the falling

  • edge and the data is latched on the rising edge

  • and so what this timing diagram is trying to tell us is, its saying when this

  • falling edge happens here the address

  • has to be set up prior to that

  • happening and then after that happens

  • the address has to be held for some

  • period of time so there is a setup time and a hold time for the address

  • same thing for the data when the write

  • enable goes high again the data has to

  • be set up for some time prior to that

  • and has to be held for some time after that

  • So these are all important numbers

  • to be aware of but you'll notice that like

  • the address set up and address hold

  • the data set of data hold over here is the

  • address set up address hold, there's a

  • minimum 10 nanosecond 50 nanoseconds but

  • there is no maximum which is great

  • because we're going to be going pretty

  • slow with this so as long as our address

  • is is toggled into our our dip switches

  • here 10 nanoseconds before we try to

  • write what we're gonna be fine and of

  • course that won't be a problem and as

  • long as we hold it you know we don't

  • change the DIP switches within

  • 50 nanoseconds after trying to write then we'll

  • be fine so no worries there

  • same thing with the data you know when

  • we set the data that we want to write we

  • have to make sure that the data set up

  • 50 nanoseconds before our write enable

  • goes high no worries that's plenty of

  • time

  • ok what will be much longer than 50

  • nanoseconds and we have to hold it for

  • 10 nanoseconds after this goes high so

  • no worries there these minimums not

  • gonna be a problem

  • the one thing that might be a little bit

  • challenging is this write pulse

  • have to this pulse has to be somewhere

  • between a hundred nanoseconds and a

  • thousand nanoseconds and that's not a huge

  • window especially for what we're doing

  • here, because you might imagine well this the

  • write enable pin which i think is in

  • here you can just look that up to a

  • push-button you want to write you push

  • the button. The problem is when you push that

  • button you're probably going to be

  • pushing it for more than a thousand

  • nanoseconds that's not very...

  • 1 microsecond that's not very long and the

  • reality is probably ok if it's longer

  • than this you know but one thing we can

  • do just to just to try to to make it in

  • this window is use a RC circuit

  • so a resistor and capacitor to to get this

  • timing right so for example if we use a

  • 1 nano farad capacitor and I guess I've

  • got a 680 ohm resistor,

  • 680 ohms x 1 nano farad is 680 nanoseconds which

  • falls nicely between here we've got a

  • 1 nanofarad capacitor and I've got a

  • 680 ohm resistor so how do we build an

  • RC circuit that will generate this pulse

  • that is hopefully 680 nanoseconds well

  • let's get a button here that gonna

  • trigger our pulse and i'm going to hook my

  • resistor and capacitor here in series

  • with the switch and hook the other side

  • of my switch to ground. And so like this

  • over here right at this point here i'm

  • going to have five volts because I've

  • got a resistor connected across there

  • and it's not going to drop any current

  • because there's no current flowing

  • because the switch is closed nothing's going on

  • if I close the switch then current will flow

  • and now this side of the capacitor will

  • be essentially connected to ground

  • through the capacitor, if the capacitor is not

  • charged yet and this will go down to

  • zero immediately but very quickly the

  • capacitor will charge up to 5 volts and

  • the time that it takes to charge up is

  • dependent on the RC constant here which

  • is it was a 1 nanofarad capacitor this

  • is a 680 ohm resistor so should be

  • 680 nanoseconds which works very

  • nicely when I let go of the switch this

  • will stay high and the capacitor will

  • stay charged because it's not connected to

  • anything else, so I'm going to need another

  • resistor here to discharge the capacitor

  • when I let up the switch so I'm just

  • going to put in a this is like a 10k

  • resistor and that'll that'll just allow

  • the capacitor discharge when I'm not

  • pushing the switch so normally right now

  • the capacitor is connected both sides of

  • the capacitor connected to these

  • resistors to my plus five volts here so

  • essentially my capacitor just has this

  • series resistor across it which is

  • discharging. So the capacitor is going to be

  • discharged this side over here is going to be 5

  • volts because there's no current flowing

  • through this resistor so its going to be 5 volts

  • on either side when I push this then

  • ground is going to be connected here

  • current is going to flow through the

  • resistor to charge the capacitor so this

  • side of the resistor will be 0 but then

  • very quickly rising as the capacitor charges so

  • this should give me a negative going

  • spike when I push the switch and that

  • negative going spike should be

  • 680 nanoseconds which is what we want and so

  • that will be my write pulse that's going

  • to write enable, and write enable is

  • down here

  • I believe its that pin there, so we'll connect that

  • over to write enable and so now when i

  • push this button it should give a

  • negative going 680 nanosecond pulse into

  • that write enable pin we can test that

  • if i hook up power and hook up an

  • oscilloscope probe here and we'll look

  • at you look at this point here

  • which is going to write enable when I push the

  • button it goes low and recovers here

  • as the capacitor charges and each of

  • these divisions is 500 nanoseconds so

  • you can see at this point here this is

  • 500 nanoseconds this is a thousand

  • nanoseconds here and so we're already up

  • let's see, so 0 volts, 1, 2, 3, 4 so we're up over 4 volts

  • here by the time we get to that thousand

  • nanoseconds so the period of time that this

  • is low is definitely between 100

  • nanoseconds which would be right here and

  • had a thousand nanoseconds which is over

  • here so this is perfect

  • ok so we have that write pulse there so

  • how do we actually program this thing so

  • the first thing we want to do is set our

  • output enable to high which means we're

  • not enabling our output anymore which

  • means that are our outputs over here are now

  • inputs and so now we we can set these

  • inputs to whatever value we want to

  • program so i'm going to use these little

  • jumpers to set a value here that we want

  • to program into a particular address

  • location and so let's say this is the

  • pattern i want a program and i want to

  • put in address location 0 so i set my

  • address to zero, when I hit the button here it should

  • now have that programmed into address 0

  • if I want to program something different

  • in to address one I go to address one

  • and i can change these around so I can

  • change to program something different so

  • I just swapped all the bits and we'll put

  • that in address 1 by hitting our write

  • enable and that gives us our nice 680 ish

  • nanosecond pulse to write that into

  • address one

  • and we could go ahead and program

  • address two, three, four, whatever

  • but for now we'll just do those and so now

  • I want to go back to reading and

  • disconnect all of these because these

  • are no longer going to be inputs

  • these are going to be outputs so I make sure

  • those are disconnected and then I go

  • back and set my output enable

  • from high back to active low so we're now

  • output enable. And so now you see in

  • address one we have this pattern and if

  • i go to address 0 we have the other

  • pattern that i programmed and if we go

  • to address two or or three we still see

  • the all ones because i haven't programmed

  • any of any of those locations so maybe

  • you're thinking this is pretty cool but

  • how can we use it to do something a

  • little more practical

  • well you might recall this circuit that

  • we put together in the previous video

  • which basically just takes four bits of

  • input over here and lights up the display

  • to show us the number so it's two or

  • three or four or this is C which is

  • hexadecimal for 12 which is this is

  • binary 12 so we have all this logic just

  • to get this display to work

  • well turns out you can replace any

  • combinational logic circuit with a ROM

  • and so rather than having to design this

  • complicated circuit with all of these

  • gates and everything going on here we

  • could replace all of this with a ROM

  • that's because remember where this came

  • from we started with this basic

  • truth table which just describes how the data

  • bits coming in relate to whether the

  • segments are turned ON or OFF

  • well we can actually program this truth

  • table into a ROM and the data bits become

  • the address and then the data output of

  • the ROM becomes these these a outputs

  • over here. So at address 0 we could

  • program in 000 0001 and address one in the

  • ROM we can program in 100 1111

  • one and so forth and then we could put

  • the ROM in the circuit instead of this

  • and instead of these switches feeding

  • the input of this fairly

  • complicated logic circuit, these switches could

  • feed the address of our ROM and then

  • the outputs instead of coming out of the

  • this collection of OR gates and so forth

  • up here those outputs would just come

  • directly out of the realm

  • let's give it a try let's set our output

  • enable to high so it's OFF and let's go to

  • address 0 and just start programming so

  • first off we're going to have all zeros

  • but with a one at the end. set that to

  • one and then tie the rest of these to ground and so

  • there we go

  • and I'll program that. Now go to address one

  • so that's address one - program that

  • and we'll go to address two

  • ok so if I didn't make any mistakes

  • which I almost certainly did that should

  • be everything programed now I'll

  • disconnect all of my connections here so

  • we're no longer programming and put it

  • back into output enable mode and we see

  • three ones and three zeros which is what

  • we expect to see for 111 as our input which

  • it is so that's a good verification and

  • if I switch to other things I get other outputs

  • now the real test will be let's

  • try hooking the output of this thing up

  • to a 7 segment display.

  • So we'll hook the anode here through this a hundred ohm

  • resistor to our positive supply over

  • here and then these bits should go

  • over here and it doesn't look like a zero

  • let's see what I do wrong

  • oh I got these hooked-up backwards

  • the one on the right here is G and I

  • hooked up to A, so that makes sense

  • so these are all backwards

  • there we go so 0 - we got zero and now

  • let's try try it out, so there's one

  • no that's not two but keep going

  • that's 3, 4, 5, 6, 7, 8, 9, A. There's B, C, D, E and F.

  • So that looks like most everything is

  • right but it was two

  • yeah two is wrong so two

  • let's see what did i do so two should be

  • 0010010, so 0010010 so I got that bit off by one

  • let me try to fix that

  • it looks like a two and real quick we

  • can just check all the other numbers to

  • make sure they're 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E

  • and F

  • there we go so not super fun to program it

  • using a jumper wires like this but

  • certainly a lot more fun than designing

  • this whole thing and trying to build

  • this thing and certainly a lot more

  • flexible too and you probably start to

  • imagine how we could use a couple of

  • these for each digit to do a you know

  • decimal display or or actually display

  • something more than just a single

  • hexadecimal digit for 4 bits but we'll get

  • to that in future videos

  • the thing I want to cover the next video

  • is actually a much faster way to program

  • these without having to set all these

  • jumpers as you can imagine it gets pretty

  • tedious once you get is a 256 or more

  • values into here what I want to do in

  • the next video is build a nice

  • programmer for these EEPROM chips and

  • its gonna be especially useful because

  • we're going to be using a number of

  • these chips both in the output display

  • as well as in the control logic of our

  • computer

There are many kinds of ROM chips, or "Read Only Memories"

字幕與單字

單字即點即查 點擊單字可以查詢單字解釋

B1 中級

使用EEPROM取代組合邏輯。 (Using an EEPROM to replace combinational logic)

  • 7 1
    林宜悉 發佈於 2021 年 01 月 14 日
影片單字