Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Locked thread
Silver Alicorn
Mar 30, 2008

𝓪 𝓻𝓮𝓭 𝓹𝓪𝓷𝓭𝓪 𝓲𝓼 𝓪 𝓬𝓾𝓻𝓲𝓸𝓾𝓼 𝓼𝓸𝓻𝓽 𝓸𝓯 𝓬𝓻𝓮𝓪𝓽𝓾𝓻𝓮
snype

Adbot
ADBOT LOVES YOU

Jonny 290
May 5, 2005



[ASK] me about OS/2 Warp
i brought my $3 soldering iron to colorado, oh and a DMM. i dont have any diy inventory though i STILL need to spend like 1k to get things goin

good thred

Bloody
Mar 3, 2013

I own no equipment so it owns Workin in a lab with like 100k network analyzers n metcal irons n poo poo

Not that I ever take advantage of this

Might for Santee though!

The Management
Jan 2, 2010

sup, bitch?

Werthog 95 posted:

lol when hobbyists roll in and tell you "avr supremacy" just because that's what arduinos use

The Management
Jan 2, 2010

sup, bitch?
better than accumulator architectures, I guess. but seriously, use a cortex M0/3

sleepy gary
Jan 11, 2006

I make quantum cascade lasers

ChiralCondensate
Nov 13, 2007

what is that man doing to his colour palette?
Grimey Drawer
I (in a team with others) janitor these bits:

the cms forward pixel detector

Bloody
Mar 3, 2013

ChiralCondensate posted:

I (in a team with others) janitor these bits:

the cms forward pixel detector

dope

movax
Aug 30, 2008

ChiralCondensate posted:

I (in a team with others) janitor these bits:

the cms forward pixel detector

:frogon:

maniacdevnull
Apr 18, 2007

FOUR CUBIC FRAMES
DISPROVES SOFT G GOD
YOU ARE EDUCATED STUPID

Werthog 95 posted:

lol when hobbyists roll in and tell you "avr supremacy" just because that's what arduinos use

ug, loving casuals

idk man it was cheap and easy to get into even before arduinos, beg for free chips i mean 'engineering samples' from manufactures and rig the rest up from old parts a packrat cj already has

GameCube
Nov 21, 2006

at my internship i wrote a driver for an ISA card, and i'm going to call myself an embedded engineer for the rest of my life for it.

EIDE Van Hagar
Dec 8, 2000

Beep Boop
i have this thing working now, i re-wrote some of the stuff in the adafruit arduino libraries to use the galileo board, but its quick and dirty, not as nice as the arduino gfx stuff in their libraries. it will show 4096 colors though, and i am working on making it display arbitrary bitmaps, the drawings on it are all just lines i wrote manually. i actually had to slow it down by adding a counter in the bit count modulation logic compared to the arduino libs. the arduino spends enough time drawing framebuffers that it leaves the LED on for a while, the quark was turning the led off so fast that the same programming sequence didn't work, i had to add some time to leave the LEDs on before i started programming the matrix again:

Bloody
Mar 3, 2013

beep boop lmao

Bloody
Mar 3, 2013

wish/hope im your santee

EIDE Van Hagar
Dec 8, 2000

Beep Boop
that union jack looking thing is just a test pattern i made so i could see which rows and columns are in the wrong place while I was fixing the timing. you can now draw an arbitrary graphics plane like from a bitmap or a gif or ppm and feed it into the planes and update the pointers to the plane you want using a counter. right now it has 4 framebuffers each capable of 4096 colors or fewer depending on how you set up color depth at compile time. point a framebuffer at an animated gif frame and you could set a counter to update whatver times per second or whatever

beep boop

EIDE Van Hagar
Dec 8, 2000

Beep Boop

Bloody posted:

wish/hope im your santee

its not you but it is another well known shamefully nerdy yosposter. if you want i can post my source code to be ridiculed, i am a bad c++ programmer and i am sure i write it all as if it were system verilog and everything happens in zero simulation time with no regard for actual resources.

CISADMIN PRIVILEGE
Aug 15, 2004

optimized multichannel
campaigns to drive
demand and increase
brand engagement
across web, mobile,
and social touchpoints,
bitch!
:yaycloud::smithcloud:
beep boop you rule mr kwinkles.

Bloody
Mar 3, 2013

kwinkles posted:

its not you but it is another well known shamefully nerdy yosposter. if you want i can post my source code to be ridiculed, i am a bad c++ programmer and i am sure i write it all as if it were system verilog and everything happens in zero simulation time with no regard for actual resources.

tbf thats probably better than average

Bloody
Mar 3, 2013

wheres the cheapest place to get loose tolerance full panel 1 or 2 layer boards

im not interested in toner transfer

EIDE Van Hagar
Dec 8, 2000

Beep Boop
i will post the full source when i actually have it drawing animated gifs and doing useful things. for now this is how i drew the test pattern:

code:

    for (int column = 0; column < PLANE_COLUMNS; column++) {
      for (int row = 0; row < PLANE_ROWS; row++) {
        // test pattern because i don't know what rows are wrong and where the timing is hosed
        // this should basically look like a combination of the rainbow flag and union jack
        
        // make the top and bottommost rows red, green just inside
        // top is bright as you can get and bottom is dim
        if (row==0) {
          r=0xf;
        }
        if (row==15) {
          r=0x1;
        }
        if (row==1) { 
          g=0xf;
        }
        if (row==14) {
          g=0x1;
        }
        
        // make the left and right columns blue, purple just inside, left side bright
        // and right side dim.  what about where the rows and columns intersect in the corners?
        // we just don't care, whichever thing we drew last wins
        if (column==0)  {
          b=0xf;
        }
        if (column==31) {
          b=0x9;
        }
        if (column==1) {
          b=r=0xf;
        }
        if(column==30) {
          b=r=0x1;
        }
        // draw a yellow and blue x intersecting in the middle of the panel #woah
        if (column == 2*row) {
          g=r=0xf;
        }
        if (column == -2*row+32) {
          g=b=0xf;
        }
        
        // draw a 2 pixel wide white and pinkcross in the middle of the panel 
        // make it pink because pink is pretty
        if (column==15 || row==8) {
          b=g=0xA;
          r=0xF;
        }
        if (row==7 || column==16) {
          b=r=g=0xA;
        }
        
        for (int color = 0; color < PLANE_COLORS; color++) {
            if (color == PLANE_RED)  {
              planes[plane][column][row][color] = r;
            }
            if (color == PLANE_GREEN)  {
              planes[plane][column][row][color] = g;
            }
            if (color == PLANE_BLUE)  {
              planes[plane][column][row][color] = b;
            }
        }
        r = b = g = 0;
      }
    }
    for (int row = 0; row < PLANE_ROWS; row++) {
      for (int column = 0; column < PLANE_COLUMNS; column++) {
           if (row<8) {
              buffer[column][row][BUF_R1] = planes[plane][column][row][PLANE_RED];
              buffer[column][row][BUF_G1] = planes[plane][column][row][PLANE_GREEN];
              buffer[column][row][BUF_B1] = planes[plane][column][row][PLANE_BLUE];
           } else {
              buffer[column][row-8][BUF_R2] = planes[plane][column][row][PLANE_RED];
              buffer[column][row-8][BUF_G2] = planes[plane][column][row][PLANE_GREEN];
              buffer[column][row-8][BUF_B2] = planes[plane][column][row][PLANE_BLUE];
           }
      }
    }

EIDE Van Hagar
Dec 8, 2000

Beep Boop
i am sure there is a better way to do that probably involving making the buffer a pointer to the plane or something so i can just change where in memory the image i want actually lives but hell if i know how to do that! especially when reformatting the plane into a buffer that has two rgb pixels 8 pixel rows apart in each buffer line.

rotor
Jun 11, 2001

classic case of pineapple derangement syndrome
Quality Thread

z0rlandi viSSer
Nov 5, 2013

Bloody posted:

beep boop lmao

z0rlandi viSSer
Nov 5, 2013

kwinkles posted:

its not you but it is another well known shamefully nerdy yosposter. if you want i can post my source code to be ridiculed, i am a bad c++ programmer and i am sure i write it all as if it were system verilog and everything happens in zero simulation time with no regard for actual resources.

lmfao who gives a poo poo as long as it works

this isn't the 1970's and we have cycles to fukkn spare like woah

Bloody
Mar 3, 2013

z0rlandi viSSer posted:

we have cycles to fukkn spare like woah

your in the wrong thread m8

EIDE Van Hagar
Dec 8, 2000

Beep Boop
right now it updates the display in the arduino sketch loop like this:

code:
void loop() {
  
  for (int bcmBit = 1; bcmBit < (BIT_DEPTH+1); bcmBit++) { // which bit value we are using for BCM
    for (int iter = 0; iter < bcmBit; iter++) {            // how many iterations this bit gets
      for ( int row = 0; row < BUFFER_ROWS; row++ ) {      // update each row
    
        for (int wait=0; wait<50;wait++) {
          fastGpioDigitalWrite(OE,LOW);
        }
        
        fastGpioDigitalWrite(OE,HIGH);
        
        // set the address bits
        if ( row & 0x1 ) {
          fastGpioDigitalWrite(A,HIGH);
        } 
        else {
          fastGpioDigitalWrite(A,LOW);
        }
        if ( row & 0x2 ) {
          fastGpioDigitalWrite(B,HIGH);
        } 
        else {
          fastGpioDigitalWrite(B,LOW);
        }
        if ( row & 0x4 ) {
          fastGpioDigitalWrite(C,HIGH);
        } 
        else {
          fastGpioDigitalWrite(C,LOW);
        }
       
        
        for ( int column = 0; column < BUFFER_COLUMNS; column++ ) {
          
          if (0x1 & (buffer[column][row][0]>>(bcmBit-1))) {
            fastGpioDigitalWrite(GPIO_FAST_IO0,HIGH);
          } 
          else {
            fastGpioDigitalWrite(GPIO_FAST_IO0,LOW);
          }
          if (0x1 & (buffer[column][row][1]>>(bcmBit-1))) {
            fastGpioDigitalWrite(GPIO_FAST_IO1,HIGH);
          } 
          else {
            fastGpioDigitalWrite(GPIO_FAST_IO1,LOW);
          }
          if (0x1 & (buffer[column][row][2]>>(bcmBit-1))) {
            fastGpioDigitalWrite(GPIO_FAST_IO2,HIGH);
          } 
          else {
            fastGpioDigitalWrite(GPIO_FAST_IO2,LOW);
          }
          if (0x1 & (buffer[column][row][3]>>(bcmBit-1))) {
            fastGpioDigitalWrite(GPIO_FAST_IO3,HIGH);
          } 
          else {
            fastGpioDigitalWrite(GPIO_FAST_IO3,LOW);
          }
          if (0x1 & (buffer[column][row][4]>>(bcmBit-1))) {
            fastGpioDigitalWrite(GPIO_FAST_IO4,HIGH);
          } 
          else {
            fastGpioDigitalWrite(GPIO_FAST_IO4,LOW);
          }
          if (0x1 & (buffer[column][row][5]>>(bcmBit-1))) {
            fastGpioDigitalWrite(GPIO_FAST_IO5,HIGH);
          } 
          else {
            fastGpioDigitalWrite(GPIO_FAST_IO5,LOW);
          }
          fastGpioDigitalWrite(CLK,HIGH);
          fastGpioDigitalWrite(CLK,LOW);
         }   
        
        // latch data
        fastGpioDigitalWrite(LAT,HIGH);
        fastGpioDigitalWrite(LAT,LOW);
        
        fastGpioDigitalWrite(OE,LOW);
        
      }
    } 
  }
}
the loop where it writes to the OE (output enable) bit low 50 times in a row is the part i had to add to make it slow down. basically it tells the LEDs to stay on 50 times (output enable is active-low) in a row.

fastGpioDigitalWrite calls happen at about 600kHz. There is also a function fastGpioDigitalRegWriteUnsafe that requires you to keep track of register bits and writes destructively to the gpio registers, but i haven't figured out how to use all of that yet. fastGpioDigitalRegWriteUnsafe will push the clock from about 600 kHz to 2.9MHz, which could allow for something awesome lile RGB565 16-bit color.

EIDE Van Hagar
Dec 8, 2000

Beep Boop
the bcmBit and iter loops are for binary code modulation. for the least significant bit it runs through the display loop (the "iter" or iteration loop) once. for the 2nd least significant bit it runs through the loop twice, and so on for each binary bit position.

basically, the more significant the bit in your binary value, the more times it loops through displaying that bit. the LED is on if it is a 1 and the LED is off it is a zero, so it displays the LSB once and the MSB however many times there are bits in the number. So basically your duty cycle depends on the MSB proportionally more than the LSB, so you end up with a duty cycle representative of the actual binary number.

if you look at that test pattern image, you can see that the bottom and rightmost pixels rows/columns are dimmer than the left and top rows/columns. that's 4 bits per r/g/b channel, or 12 bits per pixel, or 4096 colors total.

beep boop.

EIDE Van Hagar
Dec 8, 2000

Beep Boop
fun fact 16 bit color is 565 because your eyeball is most sensitive to green so you put the most bits there.

this is why digital cameras with bayer sensors sample 2 green pixels for each blue and red pixel and interpolate the results.

in my real job i make display, graphics and camera hardware so this arduino stuff was disturbingly familiar.

also the adafruit people did a good job of figuring out how these panels work. even if its not documented officially the fact that their libraries work show you how it needs to be clocked.

movax
Aug 30, 2008

z0rlandi viSSer posted:

lmfao who gives a poo poo as long as it works

this isn't the 1970's and we have cycles to fukkn spare like woah

Nah man every cycle counts

I finished a FPGA design lately where I had to essentially pick and choose and place each primitive by hand. a more painful asic

EIDE Van Hagar
Dec 8, 2000

Beep Boop

explain this right now. how do it work? what is a compact muon solenoid?

SpaceAceJase
Nov 8, 2008

and you
have proved
to be...

a real shitty poster,
and a real james
put an arduino on it

eschaton
Mar 7, 2007

Don't you just hate when you wind up in a store with people who are in a socioeconomic class that is pretty obviously about two levels lower than your own?

Bloody posted:

but what if i want to get data in/out faster?? how do i do like real usb or ethernet as painlessly as possible??

some sort of fpga would be my first choice. they can be inexpensive (for prototyping anyway) and have blocks for all sorts of things like USB, Ethernet, HDMI, etc.

The Management
Jan 2, 2010

sup, bitch?

z0rlandi viSSer posted:

this isn't the 1970's and we have cycles to fukkn spare like woah

a thing high level software people actually think

eschaton
Mar 7, 2007

Don't you just hate when you wind up in a store with people who are in a socioeconomic class that is pretty obviously about two levels lower than your own?
I'm hoping my miniSpartan 6+ LX ships soon, I should start hacking together a VHDL description of NuBus for it

I ordered it because it had both a ton of GPIO and HDMI out, my goal is to make a video card for my Mac IIci that can handle 1920x1080. I'll be able to connect it almost directly to the NuBus, just adding bidirectional level conversion, and everything else can be done in "software"

Sagebrush
Feb 26, 2012

The Management posted:

a thing high level software people actually think

i was gonna say "the android motto"

Tin Gang
Sep 27, 2007

Tin Gang posted:

showering has no effect on germs and is terrible for your skin. there is no good reason to do it
this thread has got me itching and now I want to learn ARM microcontrollers

is this a good idea/what should I buy?

EIDE Van Hagar
Dec 8, 2000

Beep Boop

Tin Gang posted:

this thread has got me itching and now I want to learn ARM microcontrollers

is this a good idea/what should I buy?

you should buy an intel brand galileo board in my extremely biased opinion.

Sagebrush
Feb 26, 2012

You should buy an arduino if you're looking for the easiest and most straightforward way into microcontroller programming at a hobbyist level. The one board gives you everything you need and can operate as an ISP once you get enough electronics knowledge to work with discrete chips.

People slag arduino all the time because people build dumb projects with them while they're learning, but it is designed to be a learning tool and it's fantastic at that.

Sagebrush fucked around with this message at 01:53 on Nov 27, 2014

movax
Aug 30, 2008

eschaton posted:

I'm hoping my miniSpartan 6+ LX ships soon, I should start hacking together a VHDL description of NuBus for it

I ordered it because it had both a ton of GPIO and HDMI out, my goal is to make a video card for my Mac IIci that can handle 1920x1080. I'll be able to connect it almost directly to the NuBus, just adding bidirectional level conversion, and everything else can be done in "software"

:hfive: spartan bro

gonna do some hdmi overlay type stuff with mine though -- i hope the signal integrity isn't terrible on the board, most kickstarters suck rear end at laying out pcbs and fall over in the transition from maker fun toy to actual product

actual quote from a maker i ran into: 'controlled impedance? what's that?' (board had ddr3, usb, ethernet, hdmi) last i heard they were suffering 'difficulties' getting kickstarter stuff sorted

Adbot
ADBOT LOVES YOU

EIDE Van Hagar
Dec 8, 2000

Beep Boop
lol if you dont have a PHY with dynamic impedance compensation.

  • Locked thread