Jump to content

Hackentosher

Member
  • Posts

    4,736
  • Joined

  • Last visited

Reputation Activity

  1. Like
    Hackentosher reacted to trag1c in An Intro to Various Types of LED Strips and How to Utilize Them   
    This is a topic among many that I would like to make a video on for my hobbyist electronics business that I am in the process of opening up so I thought I would share my very early stage written up tutorial to the fine people of the LTT Forum. I figured I would go full master exploder with the juicy bits to blow your mind. Later on I will include hardware and software examples and possibly how this correlates to motherboard RGB headers. I will also probably be writing other tutorials as I go along. Probably more basic ones to start with after this for the less initiated lol. Sorry for the terrible quality of the writing as I can read and write better C++ then and I can read and write English (even though its my first language lol.)
    Probably will turn this into a mega thread with all the tutorials that I write up. Or maybe throw them up as blog posts with links idk. Depends on how receptive the community is.
     
     
    TODO:
    Remove vulgar language
    Add figure numbers for each image and subsequent referrals in each applicable paragraph 
    Resize images for better formatting 
    Any images that are not from the datasheets replace with my own 
    Make some images related to data 
    Write Code 
    Create hardware designs 
    Create Github repo 
    Move everything into the github repo
    Find more issues with this post and subsequently log them here.
     
    This article is intended as high level overview on various types of RGB strips, their operation and techniques for successfully utilizing them. The LEDs being discussed are single colour 4 pin RGB strips, 3 pin addressable RGB WS2812B strips and finally 4 pin addressable RGB APA102/SK9822 LED strips. All or most of this information will also apply to bare LEDs of these types and LED matrices of these types as well. If there is any information that you believe to be incorrect please let me know. If there is any spelling mistakes, grammar or formatting issues please let me know as well. I will be more than happy to fix any issues with this article. Any comments or questions please feel free to post!
     
     
     
    Definitions for the context of this write up:
    RGB is Red, Green, Blue
    RGBW is Red, Green, Blue, White (the reason I use white and not amber is that A is typically associated with alpha channel which is what lets you set the opacity of pixels in an image so evidently that's not the right term to be using in our context because LEDs have no opacity value. )

    We as humans typically use numbers in the decimal system or base 10. This means we have ten distinct digits per position ranging from 0 to 9. Exceeding 9 would now start counting in the next highest position e.g. 10. Each number position is 10 times the position to the right of it. So to compose a number such as 4682 you would break it down into thousands, hundreds, tens and ones or 4000 + 600 + 80 + 2  
    However computers work in a completely different numeral system. This system is known as binary meaning there are only two digits per position which are 0 and 1. Except instead of Base 10 we're now Base 2 so each number position is 2 times the value to the right of it. 

    So to count in binary you would go from 0000 which is decimal 0. 0001 which is decimal value 1. 0010 is decimal value two. 0011 is decimal value 3. 0100 is decimal value 4..so on so forth. Individual positions in binary are commonly referred to as bits. So a 16 bit number would have 16 positions like so 0100 0010 0000 0010 0100. A Byte is a collection of 8 bits and it is the smallest unit of data that a microprocessor will use. From now on I will use () to represent individual bytes
    RGB colour information in computers is a numerical representation of intensities (also known as saturation) of the primary colours or channels in binary. These are typically stored as 24 bits or 3 Bytes of data for a total of 16,581,375 colours. RGBW is 32bits or 4 Bytes of data for a total of 4,228,250,625 colours. You can get more color depth and formats but this beyond the scope of what I want to write as its not applicable to what we want to do.
    This gives each channel or colour 8 bits of data each for the Intensity of the colour. So in order to get the 16 million colours you would multiply 255 x 255 x 255( x 255 for white). So in order for us to get full solid red colour we would have a value of 255 for the red byte, 0 for the green byte, 0 for the blue byte or in binary (1111 1111)(0000 0000)(0000 0000). . Lets now say we wanted solid purple for a colour. This would be represented by a mixture of the Red and Blue channels. To numerically represent this it would be 255 for our red byte, 0 for our green byte, and 255 for our blue byte. This in binary is (1111 1111)(0000 0000)(1111 1111).
    Moving onto computer memory we will look at how everything is stored within a computer. You've probably heard the terms 32bit or 64 bit processors before but what does this actually mean. What this comes down to is the number of bits that the processor can naturally process in addition to how much memory it can address. (There's way more to this but this in it self is a cluster fuck of a subject. Also note to self find a nicer way to put this ) Notice the italics on natural because this leads us into the next portion which is data Words. Words are the natural unit of data for a given processor and what this means by natural unit is that it easily matches the number of bits that our processor can work on. So if we have a 64bit processor that means the word size will be 64 bits or 8 bytes. 

    Onto the memory addressing. A memory address is a binary number that has the same number of bits as your processor. This numbered address corresponds to a byte of data stored in memory. So if you have a 32Bit processor you can only address up to 4GB of RAM (232). If you have a 64Bit processor this is over 17 Exabytes of RAM that you can access(264).
     So how do you order your bytes of data into memory? Well there are 2 ways which is either Big Endian(BE) or Little Endian(LE) also known as Endianness. In a big endian system your most significant byte (the most significant digits) is stored at the smallest memory address. In little endian we have the exact opposite where the least significant bytes are stored at the smallest address. If you need help visualizing this imagine memory address as a latter. The rung at the bottom is the smallest memory address while the top rung is the biggest memory address. You either put the biggest part of the number followed by the smaller digits starting at the bottom and working your way up or you do the exact opposite where the smallest digits at the bottom working your way up to the top with the bigger digits for big endian and little endian respectively. (If you want a brain twister then try to think about doing both of these methods at the same time because they're computers that work with both.) If you're wondering what an x86 / x86_64 (Intel/AMD 32/64bit processors) use its little endian.
    So I've explained what binary is and how it is used to represent images and colours and now its time to explain the other side of the coin which is Electrical signals. We will start with and explanation of what Voltage is and how we use it. Voltage is known as an Electrical Potential Difference which is represented by the SI unit Volt or V. This is called a Potential Difference because its a difference of charges or energy between 2 points. This is much like gravitational potential energy where the energy lies between 2 different points or heights. 
    Example: If an object is on the ground it has a potential energy of zero because its already at the lowest point it can be. But if an object is raised to say 10 meters it now has a 10 meter difference in potential energy because it can fall 10 meters to the ground. 

    So now that we know what a potential difference is we can now apply it to voltage. So on a circuit you would have power source such as a battery which has a negatively charged terminal and a positively charged terminal. This now our source of potential difference because one terminal is positive and the other is negative. If this was a car battery for example it would be at 12 Volts which means the positive terminal has positive charge that is 12V higher than the negative terminal. (Though in some unique cases you can have  -12V which can be really useful but beyond scope.) By default charges want to balance or cancel them selves out so how is this useful to us? Their desire to be balanced creates immense pressure that when harnessed is how you produce work. So now in a circuit if we force them through a certain path they will now do work for us to get to the other positively charged terminal. So this work that is done could be a light bulb turning on, a microprocessor operating, heating element heating up etc. 
    Electrical Signals are the way in which represent or encode data to a voltage value. This all comes back  to numerical representations of a given property. So an Analog signal is way of continuously representing electrical signals from infinity to infinity using voltages. Coming back to numerical representations you would assign a range to a dataset and a range of voltages that corresponds to that dataset. If we were to look at a temperature sensor it has (for our context) 2 properties:
    1) The temperature range it is capable of measuring.
    2) The voltage range it can output.

    So if our temperature sensor is capable of measuring 0 to 100 C° and it does this over a range of 0V to 5V then by measuring the voltage we can determine the temperature. So if we measure the voltage and its at 2.5V then we know the sensor is measuring 50C°. Pretty easy right? Lets move on.
    The binary numeral system that I discussed earlier is extremely useful to electrical signals because a lot of the time they're either on or they're off which is 1 and 0 respectively. This is what's known as digital because the voltage is being expressed by a series of digits. This differs from analog because analog is stateless as it maps to a range and not two different distinct states like digital does. These states are high voltage potential and low voltage potential which maps to binary 1 and binary 0. So that leaves us with only 2 possibilities for a signal which really isn't all that useful on its own. But if we add into the mix the possibility that we can change states over time then we can suddenly do a lot more with it such as represent binary numbers.

    Now that we know what an Analog and Digital Signal to Clock signals and no its not the thing that you stare at all day when you're in class or at work but it is related. I mentioned previously that digital signals on they're own are not all that useful because you can only do two different things with them which is either turn something on or turn something off. But I eluded to the fact that if you do that over time you can now represent data. So if you have a piece of circuitry that constantly turns on and of at a set frequency you have a clock. The time between two of the same states is a known unit of time. So if we had an awfully slow clock of 10Hz (Frequency represented by Hertz Hz is the count of how many times a specific event happens in a one second period. ) it means that the clock changes between states 10 times per second.  So if we were to divide one second by the amount of times our clock pulses (10Hz) you would have 100ms (milliseconds or 0.1 seconds) between pulses. So a clock signal does two things for a circuit it keeps track of time and subsequently provides synchronicity. 

    Lets keep the head hurting train moving and go onto PWM or Pulse Width Modulation. Simply put PWM is a way of representing or translating a digital signal to an analog one using a square wave that vary the width of. PWM has 3 components to it which are duty cycle, frequency and range. We already know what frequency is so we will skip straight to duty cycle which is a portion of time that a digital signal stays in a specific state vs an opposite state represented by a percentage. So if we had a frequency of 100Hz and we held a high signal for half of a clock pulse (or half the duration) we would have a duty cycle of 50%. If we had 5V as our source voltage and we used a PWM with a 50% duty cycle we would be left with a voltage of half of our source voltage so in this case that would be 2.5V. So by varying the duty cycle you now can see how we can represent analog signals digitally. 


    Another thing we have to talk about regarding digital data is data transmission. There's two approaches that exist when transmitting bits one is called Serial and the other is Parallel. Parallel for the most part has been phased out but it still does exist in limited fashions and devices. Parallel data transmission works by sending multiple bits simultaneously to the target device. This can be any number of bits (There's issues with the more lines you add...but out of scope) for example you may have a parallel data connection that uses 8 data lines so that it is capable of transferring 8 bits of data or a byte at a time. 

    This is contrasted by serial data transmission in which a single bit is transferred one by one by a single data line(There are serial protocols that utilize more than one data line). This typically includes a clock signal to synchronize the transmission of the data bit between devices. Depending on the protocol variation (or the device implementation) data may be sent or received on a rising edge or the falling edge of a clock cycle. 

    There's also three primary categories of communication between devices. The most basic is call simplex (go figure) in which data only travels one way at all times. It works by one device sends data to another but the other device doesn't talk back. The other 2 categories allow for data communication both ways. These are called full duplex and half duplex. In half duplex the data line is shared by both devices. This much like walkie talkies where only one person can talk at a time. On the other hand full duplex has at least 2 data lines allowing for both devices to communicate at the same time. This works by one device using one data line while the other is used by the 2nd device to send data back to the first device.
    At their core an LED you may know as basically a high tech single colour lightbulb. (There's a few exceptions to this but they're beyond scope.) If you give it a voltage and it turns on and if you vary that voltage you change the brightness also known as the intensity. LEDs are type of diode so they typically operate on the 2V to 5V range. If one were to apply 5V to the LED it will be very bright and if we just give it 2V it will barely be on. Knowing that we can map an analog range to this. Now the gears might be turning in your head on how to do so but we just discussed it earlier. The solution is simply PWM this means we can take our 24bit data and translate it into an analog signal. But wait we have a problem LEDs are only one colour so the solution is take 1 LED from each colour that we need and feed it a PWM signal. This is where our RGB data comes in which we will feed each PWM signal (frequency would also be selected but not needed for our example.) the byte that corresponds to the LEDs color. So now if we had the colour Purple we would have the Red and the Blue LED on but not the green. If we wanted white we would turn on each LED to the same intensity (assuming we don't have a white LED channel.).

    So that's the most basic primitive type of RGB LED strip is where you have 4 wires that are Red channel, Blue channel, Green channel and ground. You might find your self asking why I said you need an LED for each separate channel when there is only one LED for all the colours. This is because they will combine multiple different colored LEDs onto a single package.

    Lets combine everything discussed and talk about how addressable LEDs work. The working principle of addressable LED's is that instead of applying a PWM signal across the entire strip we will apply it to each individual LED. The way this works is instead of our microprocessor encoding our digital signal to an analog one through PWM we will leave it up to another piece of circuitry that is an Integrated Circuit. This integrated circuit can either be integrated directly into the LED module it self or it can be a stand alone chip on a circuit board with stand alone LED's.

    These integrated circuits LED modules come in two flavors WS2812B and APA102. The first one we will talk about is the WS2812B as this is the most commonly available. There is a grand total of 4 pins for each module. These are as follows: Vdd (Source Voltage), Di (Data In), Do (Data Out), and Vss (Ground). 

    These modules are at their core are a PWM Shift Register which is an electrical circuit that consists of numerous (24 on this module) storage cells. These shift registers have 2 data pins on them one is for data in and the other is for data out. When you send a data bit to the data in pin you push that data into the first cell. When you send the second data bit it pushes the first bit into the 2nd cell and the 2nd bit occupys the first cell. You do this until you have filled register. It looks a little like this:

    colour byte  >> Shift Register     
    (0010 0101) >> (),  (0001 0010) >> (1), (0000 1001) >> (01), .....(0000 0000) >> (0010 0101)

    Now that you have filled your register you're probably thinking your done but how do you get data to the other LEDs? Well you keep pushing bits down the line because remember there is a Do or Data Out pin. So your register keeps pushing bits out as you push bits in allowing to move data into next led. This whole process is essentially one big pipe where you push bits in on side and they come out the other. The proper term for this is called Cascading. 
     

     
    Do you remember endianness well... it also applies the transfer of bits from once device to another but this time there's no memory addresses to deal with but simply is it the most significant bit (MSBit) first out or is it the least significant (LSBit)? In our case with WS2812B LEDs the most significant bit is sent out first. If you look at the diagram you may also notice that the order of the colour bytes is not RGB but rather GRB. We know that Blue is the first byte to be sent. So the order of transmission is Blue LSBit -> Red LSBit -> Green LSBit -> Green MSBit. We also have to take into account that the LEDs at the end of the strip will be first bytes of data that we will send. We have now established how to send data to our LEDs and in what order but there's more to it than that with these LEDs. 


    The reason there is more to it is because these LEDs don't take a simple High signal or low Signal from your microprocessor. If we look at the supplied timing diagram it shows both a high period and a low period for which to encode a binary 1 or a binary 0. This is because these LED's don't have a clock signal into them that allows you to synchronize the data transmission. Instead if you hold your data pin high for x amount of time and then hold the pin low for x amount of time you encode a bit. These timings can be found in the table below.

     
    So in order for us to encode a binary 0 we would have to look at T0H and T0L these correspond to high voltage time and low voltage time. So to have a binary 0 you would need to hold the data pin high for 0.4us and then hold it low for 0.85us. To encode a Binary 1 we need to look at the two remaining rows which is T1H and T1L. Which corresponds to 0.8us and 0.45us respectively. So for every bit we need to output we have to see what its binary value is so that we can hold the data pin at the voltage levels for the time needed and then move onto the next bit after that. After we have shifted all the data to the LEDs we then need to use the Reset command to lock the data in after which the LEDs will lock into the colour that we sent. To send the reset signal its as simple as holding the data pin low for 50us after we sent our last bit. One easy way we can achieve sending this data is through PWM because if you look back at the timing diagram it looks awfully like a PWM diagram. You can set your PWM frequency to that of the total bit encode time (assuming nominal) which is 1MHz ( Some microprocessors may be incapable of this.) Now if you set your PWM duty cycle to 64% you will encode a binary 1 ever cycle and if you set it to 32% you will encode binary 0. So now you just have to set duty cycle for every cycle of the PWM to encode your data. Easy Peasy. If your microprocessor is incapable of this you would need to structure your program to account for time that the bit is held high and for the time that the bit is held low and modulate the voltage level that way.

    Because the WS2812B's are timing based Bit Banging it leaves something to be desired for refresh rates and for the total number of LED's that you can run in total (assuming you have the RAM on the controller to hold as many LED's as you need.) If you say wanted to run these LEDs at 30Hz (30 FPS) you would only have 33ms to update your LEDs and lock them in. So the fastest (According to the data sheet) that we can encode a bit on these LEDs is 0.65us. So lets convert 33ms to microseconds. Shift the decimal place over 3 positions and we have 33000ms per frame to update LED's. We need 50us to send the reset signal so we can take that right of the top so that we have 29950us to work with. So 29950 divide by (0.65us x 24 bits) is 1919 LEDs. You want to run those LEDs at 60FPS well your left with less than half after that.
     
    Moving onto the other type of LEDs which are the APA102 LEDs. These guys are very similar to the WS2812B but they have 2 extra pins Ci and Co which are clock in and clock out. Since these have clock pins they use the pulse of the clock and the current state of the Data in pin to encode a binary 1 or binary 0. 

    In addition our data format changes from GRB to BGR. There is also a little bit more information that we have to send at the beginning and end of each frame and with every colour value. At the start of every frame we will have to send a start frame which is 32bits of binary 0's. After this for each LED we will send 3 binary 1 bits followed by a 5 bit (32 level) global saturation modifier. This global modifier will scale the brightness of the LED while preserving the exact colour. After that you will send your data in BGR format starting with the MSbit. Once you're done sending your colour you will end the entire operation with an end frame which is simply another single 32bit group of zero's that are pushed down the line.
    To recap the APA102's you send a start frame at the beginning of every update to signal that you intend to write new data followed by packets consisting of 3 high bits followed by 5bit global brightness number followed by 24bits of BGR colour data. You repeat this packet for every LED in the string and then finish it off with an end frame consisting of 32bits of zeros to each LED to lock in the colour. This entire process is very similar to a serial data protocol called SPI or Serial Peripheral Interface. Its a 3 wire full duplex synchronous data transmission protocol that has 2 data lines and 1 Clock signal. The Data lines are MOSI or Master Out Slave In and MISO or Master In Slave Out while the clock signal is called SCK. Since the LED's don't communicate back to us we really only need the MOSI line and the SCK line. Many boards allow us to configure how fast we want to send data, whether that data is sent on a rising or falling clock edge and if we want LSBit or MSBit first. So already we can get off very easy by using the hardware features of many microcontrollers and processors. For the APA102 we can send data at very fast rates (10MHz+) and we need to send them on a rising clock edge. That's all you really need for basic APA102 operation.

    However with the APA102's the data needed in total is a little misleading because you most likely will require more data sent. This more specifically has to do with the end frame. Since these LED's require a rising clock edge to validate data the other LEDs in the line wouldn't have enough time to validate incoming data because the rising edge window is too short. So the way the APA102 designers fixed this is by delaying the data output by about half a clock cycle back so that there's enough time for the next LED to monitor the data line and read the data in. The consequence of this is that for every LED the data gets delayed by an additional half clock. So what the end frame has to do with is that its only purpose is to push the rest of the bits to the last of the LEDs with additional clock pulses. The number of clock pulses needed is half of the LED count because each LED is a half clock more behind the previous LED. So if you only used the datasheets recommend 32bits only 64 LEDs would be locking in the new data. Where as if you send half the number of your LED's as a total bit count each containing 0's you subsequently lock in the data for every LED. 
     
     
    The end!!! Now go blow your mind!!!!! 
     
  2. Agree
    Hackentosher reacted to AbydosOne in Help with adding a component into a simple circuit   
    Unless you know exactly what you're doing, don't play with the 110VAC side of electronics. Just buy the heatgun that has the features you want/need. The effort really isn't worth the risk of electrocuting yourself or combusting your domicile.
     
    At the level of power being drawn, pretty much any pot would vaporize itself almost instantly. Any energy not being used by the heatgun needs to be dissipated (as, ironically, heat) by the voltage divider (which is dangerous and inefficient). You'd need some sort of AC chopper (like a household dimmer switch) for the heat side, but AC motors may be harder to regulate (if they don't start properly, they'll stall and windings will melt).
  3. Like
    Hackentosher got a reaction from Coolmaster in Davinci Resolve On a Raspberry Pi?   
    I can't find it right now, but there's a gif on r/programmerhumor of a huge Oragnutan riding the tiniest tricyle captioned "writing code on a raspberry pi like" 
     
    I think that's really relevant here, your laptop is orders of magnitude faster than a pi 4 in terms of raw compute. Maybe you could use your laptop to render and then have the pi on a second input on your monitor to fuck around youtube and 4chan or whatever? I mean I guess you could use it to render your projects, but it would take so much longer than if you just rendered on your laptop. 
  4. Like
    Hackentosher reacted to SupaKomputa in Davinci Resolve On a Raspberry Pi?   
    What's make you think RPI is faster than your laptop?
  5. Agree
    Hackentosher reacted to Coolmaster in Davinci Resolve On a Raspberry Pi?   
    The laptop will be far far far faster than the Pi. The Pi only really has the power to browse the web and run light programs like a pihole. You'll have a hard time getting Linux to run on it, and even harder possibly impossible to get the x86 application of Davinci Resolve to run on ARM.
  6. Informative
    Hackentosher got a reaction from Tom_nerd in good 3d printer   
    The MP mini is okay, but you get orders of magnitude more value out of an Ender 3. It's about double the price, but I firmly believe that it will be worth more than double in headaches saved, features, and print quality.
  7. Like
    Hackentosher got a reaction from freeagent in Charging Lipo batteries in series   
    The wires on each cell junction are balance wires. When you charge a series battery such as this one, you charge the whole pack to its full charge voltage, then drain the cells that are too high, bring up the whole pack back to full, drain the high ones, and repeat until all cells have the same voltage across them. You'll need to add balance wires to the additional two cells you add and get a 5s BMS or balance charger in order to charge properly.
  8. Like
    Hackentosher got a reaction from Dream Machines Official in Best gaming keyboard and mouse?   
    I'd keep the mouse and get a mechanical keyboard. G502 is one of the better gaming mice on the market.
  9. Agree
    Hackentosher reacted to Radium_Angel in Best gaming keyboard and mouse?   
    The best keyboard and mouse combo is the ones that feel great under your fingers. For that you'll have to test them out in person. Feel and best, when it comes to K/M combos, is highly subjective.
  10. Informative
    Hackentosher got a reaction from Zonal in Best gaming keyboard and mouse?   
    I'd keep the mouse and get a mechanical keyboard. G502 is one of the better gaming mice on the market.
  11. Agree
    Hackentosher reacted to WereCatf in How to program OLED with STM32   
    For one, you're not specifying which STM32 MCU you are using: there are hundreds of different STM32 MCUs and they don't all have the same pinout. Secondly, are you sure you are using the right I2C-address? If you are using one of those premade OLED-modules, there's typically solder-pads to choose the address with; writing to the wrong address will obviously not display anything on the display.
  12. Agree
    Hackentosher reacted to mariushm in I broke the ground pin off of a BIOS chip (Woops). Will it still work?   
    You could try to just have a big blob of solder there, ideally after applying a bit of flux. Hopefully the blob of solder makes contact with the internals. Otherwise... maybe get a steel needle, solder a wire to it and then solder the wire to the pad ... touch the ground pin (what's left of it) and boot the drive
     
    You could also try shorting CS pin to ground pad ... when CS is pulled down the chip is enabled ... maybe you can get the electricity to flow from Vcc through CS pin and power chip
  13. Agree
    Hackentosher reacted to Kilrah in I broke the ground pin off of a BIOS chip (Woops). Will it still work?   
    Might be possible to solder a wire to the rest of the pin and have it hold just as long as needed to read the chip and then write to a new one...
  14. Agree
    Hackentosher reacted to jaslion in I broke the ground pin off of a BIOS chip (Woops). Will it still work?   
    Without the ground it won't work. The electricity has to go somewhere.
  15. Agree
    Hackentosher reacted to WereCat in Should I go with dual SSD or SSD plus HDD   
    Look, thats entirely up you you. If you want save money HDD is the way. If you want more quiet and responsive storage then SSD is the way.
  16. Like
    Hackentosher reacted to hmmmniek in Built a 4 player arcade gaming console from scratch!   
    Here is some totally unasked for details about a project I have been working on in my spare time for nearly a year.

    Some pictures of the project.
    The physical part was finished months ago, only recently some friends helped me paint it to make it look super awesome.

     



     

     




    The hardware might look like it took some work.
    However, I actually spent most of my time working on the software side of this project.
    I am by profession a software developer, so I challenged myself with a rather difficult goal.
     
    Old-school game consoles like the SNES use these iconic game cards that contain all the game logic; a single console that can run an unlimited number of games based on the game card that has been inserted.
    With this project, I also wanted to have these game-cards.
    This is a video of a game-card being loaded on the console.. not sure how to embed yt videos in a post.
    https://youtu.be/rVJE07QlsJc

    The easy way to implement this, would be to still have the game logic saved on the console, and then using a "game card" as a trigger to launch a certain game.

    That would also be the boring way to do it though. I decided that the game logic should be stored on the game card itself.
    This machine is powered by a micro-controller, and I was not able to find any suitable option to run interpretive code that is loaded from an external memory source.

    So I created my own programming language, binary compiler and c++ interpreter; Arcadable-script was born.
    Check out this sample project if you are interested in seeing what this Arcadable-script looks like.
    https://github.com/hmmmmniek/arcadablescript-sample

    With Arcadable-script, I managed to write a 4-player pong game that is just a little over 5Kb in size.

    I tried documenting the physical build process as much as possible. Wrote a detailed post about it here back in April.
    This post also documents my learning process a bit, because at the start of this project, I had no experience with electrical engineering at all.
    https://medium.com/@hmmmniek/arcadable-a-gaming-console-from-scratch-790f07e41859

    Lots of the source code has improved since that medium post.
    All of it is open source and can be found here:
    https://github.com/Arcadable

    Here is a video of me testing out the pong game with all my friends during covid
    https://youtu.be/Z-shrrFVr7w


    Edit: Oh and if you are crazy enough to want to write Arcadable-script yourself, I published a vscode extension to help you do just that. Just search for "arcadable-emulator".
    This extension will be able to parse, compile and emulate any games. Try opening this project with the extension enabled https://github.com/hmmmmniek/arcadablescript-sample , then press ctrl+shft+p and type Arcadable to open the emulator in vscode
  17. Like
    Hackentosher reacted to WereCatf in Please give your methods to flash SPI chips at 3.3v from scratch   
    Aye, I know the CH340 as well; I've got a few of the bare chips in my parts-bin for projects. (Though I prefer Prolific's PL2303. It's a few pennies more expensive, but far better in all respects.) But yes, you probably confused the two. Not to worry, it happens!
  18. Agree
    Hackentosher reacted to Senzelian in DISCUSSION, PREDICTIONS ON 4 WAY SLI   
    For sake of education I'll do it.
     
    The frametime is the time it takes to render out each frame - so simply the time between each frame.
    In a perfect world at 60FPS you'd have a consistent frame time of 16.6ms. (1000ms / 60)
    Everything's fine here.
     
    Now imagine your framerate is still 60FPS - seemingly everything is fine, but your frame time fluctuates. Sometimes its 8ms, sometimes its 30ms and sometimes it might even be as high as 50ms. Even tho your framerate is still 60FPS, you will experience massive stutters in game, which make any game a very unpleasant experience.
     
    That's one thing. Then there's also 1% and 0.1% lows.
    Not gonna talk about that now. Plenty of information out there.
     
    In the screenshot I posted you can see different frametimes and the fluctuations of those frametimes with different setups.
    It doesn't take rocketscience to notice, that your frametimes spread over a larger area with SLI than without. Depending on the game and how well its optimized this can vary a lot.
    It's often fine with 2-way SLI, but usually not fine anymore with 3-way or 4-way SLI. This is where you will see frametimes dance all over the place. It's not like it hasn't gotten better, but it's still nowhere near good enough, which is one of the reasons why NVidia decided to no longer support SLI.
     
    So yes, you might end up with good avg. FPS and maybe even good frametimes with 2-way SLI in a lot of games, but 4-way SLI is so janky and so little supported, that you're basically throwing your money out the window. 
     
    On top of that, it doesn't scale like you wish it would scale. There is no 4x improvement. Not even 3D mark scales 4x (more like 3.7x).
     
    And now you're also squeezing those 4GPUs together. They're going to run incredibly hot, which will result in lower frequencies. Your overclock is worthless, when the cards will hit their Tjunction at 92°C and start thermal throttling. At that point you might end up with 1600Mhz TitanXPs, which are running at a 20% slower frequency than a GTX 1080 - and therefor barely any faster overall.
     
    So you might end up with 3x the performance of a GTX 1080 and a laggy experience. Instead you could've bought a RTX 3090, have a stable experience, lower power consumption, more reliable hardware, a new warranty, RTX, more VRAM, ... 
  19. Like
    Hackentosher got a reaction from Senzelian in Senzelian's Wallpaper-Thread   
    Might be able to find some info on r/mk or geekhack.org. Probably just need to find a fab house on Alibaba that does good work.
     
    No offense to you or your work, but I like to use my own photographs for my wallpapers. A deskpad would be sick though...
  20. Agree
    Hackentosher got a reaction from wall03 in Senzelian's Wallpaper-Thread   
    Yo the Art and Color Punch series would make good desk mats... I'd be interested if you ran a group buy.
  21. Agree
    Hackentosher got a reaction from Abzilla in BEAST PC $20K+   
    I'm not trying to judge what you do with your money, but this seems horribly inefficient. Also, your numbers don't add up. You want to spend $20k on a rig, but have been saving $1k a month for a year. So you're $8k short? I think what I really have a hard time understanding is why you're so set on using these Titans when they are now two generations behind. You can get more performance for less money.. I just don't get it.
  22. Agree
    Hackentosher reacted to FloRolf in DISCUSSION, PREDICTIONS ON 4 WAY SLI   
    Lmao you done goofed mate. Should've gone with a single 2080Ti for $500 and called it a day. 
    SLI is dead and Titan XPs outdated. 
    4 way SLI is even more dead 
     
    Edit: basically you just wasted $1400 on two GTX1080 Tis. 
  23. Agree
    Hackentosher reacted to XAIXER in Thin and Light Laptop for Adobe Suite with Good Battery   
    A Thinkpad with a Ryzen 4000 series CPU should cover everything nicely.
  24. Agree
    Hackentosher reacted to Zando_ in Antivirus software   
    Windows Defender is fine, add in a MalwareBytes scan every now and then if you're worried, but you should be good unless you're visiting super dodgy sites and then downloading stuff from them. 
  25. Like
    Hackentosher reacted to LittleCarrot in Multicopter Megathread   
    ah just for that carbon look. Any sort of structura piece is molded/
×