Datasheets: 16x2 LCD By Hand (No microcontroller)

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments

I think that's a great tutorial on how to interface with the LCDs.

πŸ‘οΈŽ︎ 113 πŸ‘€οΈŽ︎ u/jhaluska πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies

Oh man I love reading datasheets. The longer, the better, because that means more features, or less ambiguity. Maybe it’s because I’m a firmware engineer, but I love making different pieces of hardware talk to each other.

πŸ‘οΈŽ︎ 56 πŸ‘€οΈŽ︎ u/nyrol πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies

For someone with a programming background and some physics background, this is an excellent video and introduction to electronics programming. I love that you stopped to explain things thoroughly throughout. The days of filming and editing were very helpful!

πŸ‘οΈŽ︎ 22 πŸ‘€οΈŽ︎ u/Ashilikia πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies

Does programming 1’s and 0’s by hand count?

Only if you did using a butterfly.

πŸ‘οΈŽ︎ 76 πŸ‘€οΈŽ︎ u/literally_a_hedgehog πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies

Of course it counts, programming boiled to such a basic or primitive level means wiring stuff together, with switches if you are cool... then you start adding more switches, you create gates, and end up with transistors and microprocessors...

πŸ‘οΈŽ︎ 39 πŸ‘€οΈŽ︎ u/shadow144hz πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies

Doesn't the chip on the display class as a form of microcontroller?

πŸ‘οΈŽ︎ 22 πŸ‘€οΈŽ︎ u/probonic πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies

I can appreciate this. We used to have a computer system that we had to maintain proficiency in booting in binary by flipping toggle switches, in case the Mylar tape ever failed. The procedure took over 3 hours. This was in the 1980's.

πŸ‘οΈŽ︎ 9 πŸ‘€οΈŽ︎ u/codingbrokeme πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies

Finally, a REAL programmer.

πŸ‘οΈŽ︎ 8 πŸ‘€οΈŽ︎ u/hoseja πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies

That's the old school way. It very much counts as programming, my dude. Nice work!

(Look into the very first computers that were programmed by re-wiring rather than re-storing memory.)

πŸ‘οΈŽ︎ 6 πŸ‘€οΈŽ︎ u/awfulentrepreneur πŸ“…οΈŽ︎ Nov 22 2020 πŸ—«︎ replies
Captions
greetings everyone and welcome back a few weeks ago i posted a 15 second video on how i programmed one of these cheap lcd displays by hand and a few people asked me to create a follow-up video to explain how i did it turns out it's really simple to do all you have to do is read the data sheet that's all i've got see you next week i'm just kidding if you're anything like me you've probably worked on a project and eventually you run into a roadblock so you ask a question online and it seems like the answer is always the same read the data sheet i used to avoid reading data sheets like the plague i mean they're usually these really technical documents they've got a lot of stuff that you don't understand and sometimes they're hundreds of pages long so sometimes it seems like it's easier to just ask the question online and hope that someone will do your homework for you lots of other videos have already covered this and have done a fantastic job of explaining it so what i want to do is to run through a little exercise to read the data sheet and figure out how to use this thing on our own eventually you're going to run out of materials or videos or libraries and if you reach the end of the sidewalk before you know how to do things on your own you're gonna feel incredibly stuck so take this video as an opportunity to try something on your own instead of just copying what i'm doing the first thing that i like to do is to look at the pin out let's start with the physical pin out that's printed right on the board you can often get a good idea of how the device works just by looking at the pins that it uses the first two pins that we have here are vss and vdd which is voltage source and voltage drain so this is ground and power next we have this v0 pin and i don't know what this one is yet the next pin is rs which i don't really know what that one is yet this next pin rw could mean read write but we'll have to verify that with the datasheet e who knows now we have d0 through d7 which is very conveniently eight bits or one byte my gut tells me that this is how we're going to send data back and forth and at the very end we have a and k and we don't know what those mean yet either now let's go look at the data sheet to see if we can find some more information about the pinout these are generally near the very beginning and they're either called pin outs or pin description oh here we go so it looks like this gives us a little bit more description of our 16 pins it looks like we're spot on with the first two pins being ground and power supply and this v0 is the contrast which is how well we can see the display looks like rs stands for register select not sure what that means yet i was right about rw meaning read write but we'll have to see what that means later looks like e is the operation read write enable signal now we can see that the data lines d0 through d7 seem to be split up into two parts zero through three look like they are the four low order bits and it says that these are not used during the four bit where d4 through d7 seem to be the four high order bits and since this doesn't say anything about not being used my guess is these are always used and finally the a and k seem to stand for anode and cathode for the led backlight so connecting these two pins should give us our backlight let's keep a running tab of all of our pins over here on this right hand side and we'll fill it in as we go along the first two pins are ground and power but we don't quite know what voltage yet v0 is somehow magically this contrast but we don't know how to control it rs is register select but we don't know what that means rw is read write but we don't know what that means or how to use it e is enable which we don't know how to use d0 through d3 are the low order bits which it seems like we don't need four through seven are the high order bits and then a and k are the positive and negative side of the led for the backlight the only pins that we know for sure are the ones highlighted in green so we'll go ahead and hook those up on our breadboard i like to always start my projects by tying the power rails together and ground rails together next we'll slap the lcd module on the breadboard and leave ourselves as much room as possible i'm going to use a 5 volt power bank to power up my power rails you generally shouldn't do this because you can damage the electronics but i'm going to do it for this video so you can see what happens now we'll hook up the backlight i'm going to use a current limiting resistor just in case there's not one built in anything around 200 to 500 ohm will probably work great now we'll hook up power and ground to the backlight and we should see it turn on and the last thing i'll do is tie the vss pin down to ground now let's see if we can wrap up some of the easy things i'm using a 5 volt power supply so we want to make sure that that's not going to damage the board if we hook it up to vdd additionally let's see if we can figure out how to change the contrast let's hunt through the data sheet to see if we can find some electrical characteristics it looks like right here it describes the power voltage and it says that the difference between the drain and the source should be 0 to 7 volts and my 5 volts falls right in between that range hold up i need to interrupt myself here what we're looking at here is the absolute maximum ratings we should not be going off of this this just means that if we were to go over 7 volts we will almost certainly damage our board what we should be looking at is the typical supply voltage which says three volts right here by supplying our board with five volts we're going outside of what it's designed to do and we may be damaging it slowly okay enough of that let's see if we can figure out contrast now it looks like this part right here is where we talk about the contrast if we look at this little wiring diagram for contrast we see vdd here up at the top which is our positive voltage we have our v0 which is our contrast and vss is our ground and it looks like there's this little thing here tying together the positive and ground with a thing coming out of the middle to v zero and that is a symbol for a potentiometer i personally like the zigzaggy diagram better than this blocky diagram but you'll get used to seeing both later in this circuit we're going to be using some pull up and pull down resistors so i want to take a brief moment to explain what's going on let's pretend we have a circuit like this we have our 5 volt signal and then we throw in some resistance value it doesn't matter what value quite yet and eventually we get down to this point where we have our output and this is where we're going to measure our voltage and down here we have this switch which can complete the circuit down to ground if we're to leave that switch open meaning disconnected then essentially this output becomes 5 volts because it's able to go up through this resistor and make its way up to 5 volts this is referred to as a pull up resistor because when nothing is connected the voltage is being pulled up to 5 volt however when we close this switch and complete the circuit to ground we essentially get 0 volts since we still do have this resistor that's going up to five volts it is attempting to pull up our entire signal to five volts but in comparison to a direct connection to ground it's so weak that it does effectively nothing now let's look at the opposite of a pull up resistor which is a pull down resistor it's the same idea but the circuitry is a little bit flipped here we've got our switch up on the top so when our switch is open and nothing is connected that means that our signal line goes through this resistor down to ground but when we close this switch we are directly connecting our 5 volt signal to our output so our output is going to be roughly 5 volts we still do have a very small amount that's being pulled down to ground through this resistor but it's effectively nothing now what would happen if we combined a pull-up and pull-down resistor in the same circuit here we have our output and part of it wants to be pulled up through this resistor to five volts and the other part wants to be pulled down through this resistor to ground so what will the output voltage be to answer this question we need to know how strong our resistors are so let's just pretend that both of them are 10 kiloohms so if we have something like this that means that our output signal half of it is being pulled up to 5 volts through this 10k resistor and the other half is being pulled down to ground through the other 10k resistor so effectively our voltage is halfway between 5 volts and 0 volts which gives us an answer of 2.5 volts now let's see what would happen if we were to change this resistor to a 1 kilo ohm that just means that we have a much better connection up to 5 volts since there's less resistance and that means that our signal is going to be mostly pulled up to 5 volts this just means that once again our output voltage is going to be somewhere between 5 and 0 volts but since there's a more direct connection up to 5 volts our output voltage will be much closer to 5 volts this circuit is called a voltage divider and if you're curious how to calculate the output voltage i would encourage you to do some research on your own now let's pretend that we could change the value of the red and blue resistor on the fly without having fixed values so if the top and bottom were equal that means that our output voltage is going to be halfway between zero and five volts giving us two and a half volts but if we were to decrease the resistance on the top and increase it on the bottom that means that our voltage is gonna rise up closer to five volt and if we did the opposite and we decrease the resistance to ground and increase the resistance to 5 volt our output voltage is going to be much closer to 0 volts well this little circuit should look awfully similar to the potentiometer symbol and that's because that's what it is this would be called a 10k potentiometer because the total resistance between 5 volt and ground is 10 kilo ohms if you were to add this resistance and this resistance they will always equal 10 kilo ohms by moving our output up and down along these resistors we're effectively changing the values of them which is represented by this little arrow on the diagram so if we jump back to our contrast diagram we can see that our potentiometer is hooked up like a voltage divider we have one end tied up to positive voltage the other end tied down to zero volts or ground and then our output goes over to v zero so by adjusting our potentiometer v0 is going up and down in its voltage between zero and five volts okay so let's wire this up we'll start by connecting the vdd pin to our power rail and now we'll toss in a potentiometer that's off to the side and out of the way we'll connect v0 to the middle pin of our potentiometer which is the output of our voltage divider and then we can connect the outside pins of our potentiometer to power and ground we can use a small screwdriver to change the value of our potentiometer and we can see how that affects the contrast i hooked up a multimeter to our voltage divider just to see what's happening when i twist the potentiometer the most noticeable difference happens between 1.5 volts and 0 volts outside of that range you can't really notice if anything is happening awesome so we figured out vdd for power and zero for contrast what one do you think we should do next i'm just going to pick the enable pin because it sounds like that shouldn't be too difficult so once again we'll peruse through the data sheet to see if we can find anything that has to do with enable while i was searching for enable i ended up stumbling across this instruction table and i noticed that at the very top they have all of these different parameters which just so happen to be all of our other pins except for enable i set out to find enable and i ended up finding everything except for enable let's break this table down and see what we can learn from it the first thing that caught my eye was the data bit organization you can kind of see that each command has a certain number of zeros in front of it followed by a one and it looks like the commands are determined by how many zeros there are before the first one everything that trails after the ones appears to be some variable configuration or setting the value of these will probably depend on what we're trying to do with the screen the next column that i looked at was the rs column which is register select it's always zero except for the last two commands where it's one the thing that these both have in common is that they both seem to be data manipulation so the first one is that you can write data to an address and then the others you can read data from an address all the places where rs is zero seems to be more like configuration or setup and the next column is read write this column is pretty self-explanatory it looks like there's a zero any time that we are writing data and a one any time that we're reading data so out of these 11 commands the only question is what do we absolutely need at a bare minimum to get stuff to show up on our screen the only way to answer this question is to walk through all of the instructions and take an educated guess of whether or not we need them for some data sheets you get lucky and they provide you with a bare minimum example that you can work with but since this only has 11 commands it's pretty simple and it shouldn't take too long to walk through them one by one the first instruction clears the display and we do this by setting everything to a zero except for data bit zero we set to a one i'm not sure if this is required on boot but i'm going to still add it to my list of commands to execute the next instruction is return home and this sets our cursor to the home position for this one my gut tells me that we don't need it but i am going to include it just in case if it is required it's a lot easier to strip out extra instructions later than to realize that you missed something and nothing shows up on your screen at all the next instruction is entry mode set which appears to shift our cursor over to the right or to the left but also shift the entire display to the left or right it doesn't seem like this is an essential instruction so i'm not going to execute it this next instruction is display on off and this is the first one that really makes me wish that they specified what the default values for all of this was for example this very first parameter is to change whether or not the display is on or off i don't know if it's on by default or off by default that just means that we're probably going to have to execute this command to make sure that we're forcing it to be whatever we want it to be later on we can always go back and remove commands one by one to see how it affects the output of our screen but for now we're going to include this the next little chunk seems to be whether or not we can see the cursor i'll just leave that off and this last part is whether or not the cursor is blinking and i'll just leave that off as well this is the first instruction that has variables in it so we want to set our display to a one to be on and the other two to a zero to turn them off instruction number five is the cursor or display shift this looks like we can shift the cursor to the left or right or even shift the entire display left and right i don't think we need this command up next we have function set now this one's pretty interesting because the first parameter is to choose whether or not we're using an 8-bit mode or a 4-bit mode in my case to simplify the wiring i want to use 4-bit mode this means that i need to set dl low this command also changes how many lines we're going to use and it looks like it also changes how many pixels are in each character i'm going to leave n and f as both 0 which means that i'm going to be using one line and 5 by 8 dots because it would be very convenient if we could just tie data bits 0 through 3 to ground and have them always be zero if we wanted to set either one of these values to a one we'd probably have to execute this command two times once to set it in a four bit mode and then the second time we could actually change the n and f parts if we were to tie data bits zero through 3 directly to ground and make them always zeros then we're going to have some problems with our other commands so we're going to want to execute this command first before everything else to make sure that we're switching into 4-bit mode the next instruction is set cgram address and i didn't know what cgram was so i just searched the data sheet and found a definition of it which was a few pages higher and it looks like this is the character generator ram and then they have this diagram here that shows what that looks like so it seems like you would use this if you wanted to create custom characters the next instruction is set ddram address once again i had no idea what this was so i had to search up a little bit higher in the data sheet and they call it the display data ram it looks like this can hold up to 80 characters but then they have a table directly underneath it that shows our 16x2 display so the ddram is probably where we store the characters that we want displayed on the screen we do want to display characters to the screen but i have a feeling that we don't need to set the address to do that so for now i'm going to leave this off of the instruction list the ninth instruction is to read the busy flag and address this is our first instruction where the read write bit is set to a 1 which means read and it looks like it's going to return all of this data it looks like the busy flag will stay high or one as long as the screen is busy executing a previous command so we're normally supposed to wait for it to go low but since i'm doing this by hand i have a feeling that it's going to be low way faster than i can ever physically switch anything so i'm not going to worry about this command the next command is write data all we have to do is set the register select bit to 1 and pass in some data and it will write it to memory the value that we're going to write will come up with later but that's going to decide what shows up on our screen the last command is reading data this allows us to read back data from the ddram or cgram i can't think of any reason that we need to read data yet so i'm going to ignore this one all of these commands that we just wrote down are all 8-bit commands but since we're going to be using 4-bit mode we need to translate them into something that we can send four bits at a time however for our very first command we're not in 4-bit mode yet so we're actually going to send an 8-bit command but we're going to make sure that our other data bits down here are always tied to a 0. all of these future commands will just ignore those bits so for our very first command to switch into four bit mode we want to send zero zero one zero all of these will already be hard coded down to ground or zero from that point on we'll just send each command four bits at a time let's start by hard coding the four lowest bits to zero by tying them to ground the only command that's actually using the four lowest bits is the very first one we execute and that first command is what switches us into four bit mode so from this point on these bits will be ignored now we can look at the four data bits that we plan to control let's use a pull down resistor to tie pin d4 to ground this just means that this will be a zero by default next we can add a two pin button that when pressed we'll connect the two pins together and we can tie that other pin up to 5 volts this forms a pull-down resistor circuit like we looked at earlier let's take a quick look at what's going on what we just created here on the left is a pull-down resistor circuit the same as the one here on the right when we're not pressing the button that means that this switch is open or not connected up to 5 volts that means that our pin d4 here can reach ground by going through this resistor so when we're not pressing this button d4 is 0 volts but when we do press the button it closes this circuit which completes the signal up to 5 volts now d4 has a direct connection up to 5 volts the resistor down to ground is still trying to tug it low but it does effectively nothing so to summarize when we do nothing we get a 0 on pin d4 but when we press the button we get a 1. i'm going to test this using a little standalone volt meter if i hook the probe up to pin d4 i can see that it's at zero volts when it's idle but when i press the button it jumps up to five volts or at least pretty close and now i'll just repeat this circuit for d5 d6 and d7 the next thing we can look at is the read write bit which is always zero so we can just hard code this to ground that's mighty convenient i'm gonna handle the register select pin different than my data pins because it's going to remain zero all the way up until the point where i start transmitting information and then it's just going to stay as a 1. so rather than have this as a push button i'm going to set it as a switch this is pretty straightforward how it works i'm going to tie the middle pin to the rs and one pin to five volt and the other to ground in this example when the switch is on the left it'll complete a circuit from five volt to rs and when i switch it to the right it will complete the circuit between ground and rs i'll wire this up the same way i did in the picture with the yellow line going to the register select pin the left pin going up to 5 volts and the right pin going up to ground once again i'm going to use this voltmeter to test to make sure the circuit is working how we expect with 5 volts when it's to the left and 0 volts to the right we are so incredibly close to being done with wiring we tied our register select pin to a switch that we can toggle left and right we hooked up our read write to zero since we're never reading we hooked up our d0 through d3 pins to zero since we only need them to be zero once and after that they're ignored and then our higher bits d4 through d7 we hooked up to buttons that way we can press them to send data that just means that the last thing we need to figure out is this enable pin so i search through the datasheet and this is where enable shows up and it's quite a lot to take in if you're not familiar with timing diagrams they look very scary but they're extremely helpful let's start by looking at just this top table here it's got a bunch of these parameters and it lists all of these minimum typical and maximum time units and these are all measured in nanoseconds these are useful for decoding the table below to let us know how long we need to hold a pin high or low for data to transmit and then in the diagram below we can see what each of our pins are doing we have our register select our read write enable and then our data pins below that next it tells us how long each signal needs to be held in a specific way and we can figure that out by referencing the table up top here i highlighted three examples but you can see there's many more so for example this tsu1 tells us that we need to hold our read write pin low in this case for at least 100 nanoseconds and since i'm doing this by hand i have a feeling that i'm going to be waiting at least 100 nanoseconds so let's step through time and see what i have to do in order to get some data to go to this screen the first transition happens right here and the only two pins that change are the rs and rw and if you remember our rw we have held low which means that we're always going to be in write mode and you can also see that the name of this diagram here which is slightly covered up said that this is a write mode timing diagram so it tells us how to write data if you recall the register select can be a zero or a one depending on what command we're trying to do however at this point we want to make sure that our enable bit is low now let's advance to the next time something changes this is where our enable bit changes from a zero to a one so so far we know that we need to set our rs and rw before turning our e from a zero to a one after our enable bit is high for a little bit this signifies the beginning of valid data which means that at this point our data bits 0 through 7 should be exactly what we're trying to transmit the next transition shows where our enable bit goes from a high to a low and this is right in the middle of our valid data so this is probably where it samples all of our buttons to see what we're trying to transmit as soon as that's complete it looks like everything is allowed to go back to anything it wants to be our rs can change the read write can go back up which means that our write operation is done and our data can change back to whatever it wants because we're leaving the valid data stage and this final transition doesn't really seem to be applicable because it seems to be the start of the next command the only reason it's really called out here is because of this tc value at the bottom which tells us how quickly we can switch between our enable signals essentially the frequency can be a maximum of 500 nanoseconds and since i'm doing this by hand i don't think that's going to be a problem so to implement e it seems like we just need to add another button and if we follow this timing diagram perfectly then the order that we have to do everything is to set our rs pin we don't need to set read write since we're hard coding it to zero then we need to press the e button to make it a one and then within 300 nanoseconds we need to make sure that all of our data is correct i have a feeling that's not going to happen and then as soon as that's done we can release the e button to set it back to a zero since step three is not really humanly possible let's reorganize these the only thing that really matters is that our data is valid in this portion right here nothing is stopping us from making it valid earlier so we can go ahead and do that so to reorganize these steps we'll set rs and then directly after that we can set the data as well then we need to press the e button wait for this certain amount of time to pass here and then release the e button and since that certain amount of time here is really tw plus th1 which equates to 300 nanoseconds and 10 nanoseconds i can essentially hit it and release it as quickly as i want to it's time to wire up the enable button the same way that we did for the data buttons this one i painted the top green so you can tell it apart from the rest we'll set it up so that there's a pull down resistor when it's idle and when you press it it will bring up the voltage to 5 volts the unfortunate part about buttons is that sometimes when you press them to form a contact they don't immediately close and form a nice perfect contact but sometimes they rather bounce and each time that it bounces it's going to toggle between 0 and 5 volts in our case so to make sure that this button triggers once and only once when we press it and depress it we need to do something called debouncing the button this isn't a perfect solution but you can really get rid of debouncing a lot by adding a very tiny capacitor over the pins i'm adding this 0.1 uf capacitor across the pins of the button so that way it won't bounce when we press it this prevents the screen from thinking that we pressed the button multiple times when we only pressed it once we really only have to debounce this one button because these other ones over here are not time critical the only thing that matters is that they're held steady during the valid data stage and other than that they can really be whatever they want the same thing goes for the register select toggle over here and that's it for the hardware so now we just gotta figure out what we want the screen to say earlier we decided that we needed all of this stuff here to set up the screen at a bare minimum after that we can transmit whatever we'd like so how do we transmit data let's take a peek at the ascii table so we can transmit any letter using their binary representation and i'm just going to say hi because it's two letters right next to each other in the alphabet which are 72 and 73 in decimal so if we convert 72 and 73 in decimal to binary we end up with 0 1 0 0 1 0 0 0 which should show an h on the screen and then for an i we just do 0 1 0 0 and 1 0 0 1 in two separate transmissions and that should make high show up so let's give it a shot before we get started i'd like to remind you that the way we've been writing the notation is data bit 4 and then decreasing from that point on but the way that i have these physically wired up follows the pin out on the screen itself and that seems to be the reverse so we have d4 on the left and d7 on the right so just keep in mind while i'm doing this that it's in reverse order from what the chart says all right let's see if we did everything right we'll power on the circuit here make sure our rs is set to a zero because we are going to configure it first and then let's start by setting it in a four bit mode which is zero zero one zero hit the enable to send the command next we want to send zero zero zero zero followed by zero zero zero one to clear the display so all zeros zero zero zero one that should have cleared the display and now we're going to send all zeros followed by zero zero one zero to return home so all zeros zero zero one zero turn the display on with zero zero zero zero and then one one zero zero now we can transmit some data so we'll want to switch our rs into high or five volt and now we can transmit the letter h which is zero one zero zero and then the second half of the letter is one zero zero zero and hey it looks like we did it now we can transmit the letter i which is zero one zero zero followed by one zero zero one it looks like we did it i thought this video was going to be a lot easier to make than that not sure if you noticed but my outfits changed quite a few times in there and that's because this spanned over many days of filming i hope i covered this for you in the right amount of detail that it was useful but also gives you potential to go above and beyond if you want to explore some other things on your own you could do multi-line or maybe special characters you could do custom characters so you can actually make your own images you can mess around with the cursor and if you really want to you can create your own arduino or other microcontroller library that can control this screen if i can do it by hand you can do it with a microcontroller you might be familiar with my bare bones microcontroller series that i did earlier and a lot of people have been asking me if i can take that same thing and apply it to stm32 so over the past few months i've been playing around with the stm nucleo boards and the blue pill so i can promise that i am working on this but i don't know exactly when i'm going to be releasing videos and if any of you guys are already familiar with stm32 and want to help out i'd appreciate somebody to bounce some ideas off of so i'm not spewing nonsense when i do make those videos that's all for today see ya eventually
Info
Channel: Mitch Davis
Views: 19,703
Rating: 4.9661732 out of 5
Keywords:
Id: cXpeTxC3_A4
Channel Id: undefined
Length: 26min 34sec (1594 seconds)
Published: Sun Nov 22 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.