Tag Archives: ssd1306

Hex Light - First Colors - Brad Ormand

01.29.2015 – Hex Light

Alright.  I got the first animation loaded into the piece after fixing the critical circuit board layout problem.  I’m glad I did it this way.  For REV B, I’ll connect the board up in the way I modified it to be just now.

I got red, green, and blue coming through on all pixels, with the 200 millisecond PWM test pattern at 3.3 volts.  So, now, it’s time for testing it to the max.  There’ll never be two pixels on at a time, but…  will the RMS voltage be so high as to drain the battery too quickly when I increase the pulse frequency? Or, even make the device heat up?  I don’t know.  Damn, I’d like this to be a portable app, but my upcoming tests will determine if that’ll be feasible. May have to reconsider my 2200mWh power supply, then, but let’s see.  I’d like to run it as quickly as possible – for video / photography, and for getting the max out of the chip.  I’ll get stats / test data and then go from there… I think it’ll be ok.

Hex Light - First Colors 2 - Brad Ormand

So, what I’m doing now is writing a few killer animations (ha, maybe a bit dramatic, but I *hope* so lol) that will shift ani’s after a given time frame or a user button press, whichever is first.  I’m thinking…  maybe…  8 animations.  Just thought of that now.  Good round number.  I’d like to implement my touch sensors with this, but I don’t feel they’re ready for prime time right now.  More testing needed.  So, I’ll drop in a few momentaries and do it like that right now.

Hex Light - First Colors - Brad Ormand

This will be similar to what I did with the SSD1306 in the programming, in a way, and similar to what I do with any animated display / canvas, but just with a 4 x 4 pixel “screen”.  I’ll abstract out the display, then write useful particle effects, but with an added dimension from the 1306 – Color.  I’m thinking…  slow fades in 4 quadrants, separately, with all of the colors in my power deliberately, slowly cycling through…   I’m thinking – perimeter tracing with trails.  I’m thinking… something smart…  like, maybe using virtual gravity as if you dropped a penny through the top and it found it’s way down – and a flash bang when one “hits” at the bottom.  Stuff like that.  Can’t wait to hit it up.

Brad Ormand - Synth Diagram

11.17.2014 – Synth & Chips

I like this title, “Synth and Chips”.  Makes me think of a small, dark British pub that serves fish (and chips) that has a few guys up there with Moog’s and TR-808’s and TB-303’s playing night jazz.

But, I mean to say that I started back on the synth circuit and that I’m ordering new ARM chips.  Haha.

Alright, so, all of this investigation into the Fourier Transforms was to add that to my toolbelt to use when designing audio gear.  It’s interesting to me as well, and was great learning.  Plus, I can investigate using it for synthesis sometime in the near future.  But, for now, I’m designing the amp and filters to use in my digitally-controlled analog synth.  The sound generation and signal path will be all analog, but the control voltages and gates and triggers and some effects (opted in or out, blatantly digital, like granulation or sample glitches, and maybe the delay) will be digital.  I drew a diagram (not exactly finished, yet – very preliminary scratch note) while I was waiting for my hamburger, at the deli across the street from work, between my morning and afternoon meeting.  It’s work that has to be done, first.  Still coming up with the concept…

Brad Ormand - Synth Diagram

There’s much to be designed, and I’m making this my official embedded project right now.  The work with the SSD1306, the Fourier work, the work on the Audio Tool, the analog filters work, and the VCO work all converge to contribute to this.  I have that ST7565R display that I’ll put some time in to write a driver for and investigate to see if I want to use that instead, but other than that, I’m pretty much committed to this project until at least the end of the year.

Brad Ormand - First Embedded Fourier Transform

11.16.2014 – Fourier Test & Guitar Practice

Well, during my tests of the real-time FFT on the embedded system with the SSD1306 as the display, I blew the Atmel chip out. Ugh.  At least I think so.  No smoke released, no smells, no heat – it just won’t program anymore.  It’s done.  And, I think I know what I did to brick it.

I’m running the chip with an ADC reference of 3.3v, and while using my iPhone as a signal source, I probably drove about 1.8v + 1.8v (peak-to-peak) = 3.6v+ into it (or more), to my estimate.  It’s stated max *is* at 3.6v.  I built a front-end circuit for it to all be positive voltage, so no negative voltage passed through, but had no input peak protection at all.  I measured the signal on the oscilloscope beforehand, and it was lower than the 3.3v, but it was turned down, and it was voiceover instead of mastered music, and there may have been transients and all that…  Ugh.  Basically, I just spaced and didn’t pay attention to currents.  I would never have even hooked it up with it turned up if  I had been really thinking.  I was in a hurry to do the tests, I guess.  Fools rush in. 🙂

So, anyway, I’ll build some input protection on there and re-consider, twice, what signals I feed in next time.  The good thing is…  I have a few more of those chips, soo…  I’ll drop another in and carry on.

But, during the tests, I was actually able to make a real-time-updating waveform display on the SSD1306, which looked soooper cool.  I did do a static test of the FFT implementation on the system and snapped a pic – it’s kind of a crappy pic, but you can see the peak and a few harmonics.  It was a really low sample rate.  However, never got to the part where I enabled the FFT per frame before the system stalled during my ADC tests…  So, I’m really looking forward to doing that, later.  Will it work?  Will it be super slow?  IDK.  When I get more time, I’ll restart.

Brad Ormand - First Embedded Fourier Transform

And, in other news, I re-strung my guitar with those 10’s and tuned it up.  It sounds pretty great.  I set up a comfortable station with an amp and a chair between the kitchen and the living room.  I then began practicing some scales at the level I left off a few months ago.  Breaking off rust, right now.  My goal is to play the “Kitchen” solo, at speed.

 

Brad Ormand - Combined Sines

11.12.2014 – Fourier & SSD1306

Ok, I am almost ready to begin my implementation of DFT and FFT and perform tests.  At this point, I have a good handle on the math and general algorithms, and recognize that there are a few ways to approach it, not just one specified way.  So, there’s a little flexibility there to let me try different routes.

First, I already have the ATMega328 set up with the SSD1306 on the board, so..  I’ll just use an ADC channel off of that and use it for input from an audio line signal and go to town on a channel of audio.  Even before that, though, I’m going to simulate it with static “fake” data and compare a n^2 DFT implementation with a true n log n FFT implementation, and convince myself that the outputs are the same.  I’ll suspend working with the ST7565R display until I get something going here..

My general path for the algorithm of FFT will be :

• Capture the amplitude data in a periodic window (nyquist freq * 2 [maybe 30kHz for now]) @ the update rate (maybe 15fps)

• Normalize the data.

• Split those into the odd-even butterfly containers

• Take the DFT of those, in place, as iterations proceed

• Re-order the indices with a reverse “bitmask” into input/capture order

• Take the imaginary / complex parts and flip and mirror them back over to the other side of the axis.

• And then sort (horizontally) and scale (vertically) the DFT data out to match my GUI bins

• And, then animate them on screen at my x fps

Alright, so now….  just gotta get set up to do it.  Gotta get the right frame (of mind) to start this and set up some time where I won’t be disturbed (have to go to bed, go to work, go to a social outing, etc).  I haven’t done anything this complicated since I implemented perspective projection or texture mapping, and I remember that being taxing 😉 .  This is where I’m at right now in my journey, and it’ll be nice to have this tacked.  Then, I can see about optimizations. I’ll plan some time this weekend to start.

Brad Ormand Fourier Matrix Notes

11.04.2014 – Blog, SSD1306 & Fourier

I wrote a few more utility functions for my graphic lib and started a grid-like animation for the SSD1306.  Still having fun with that, exploring more.  And, as a result of looking up some other stuff, I stumbled upon some physics stuff that I had been studying from a few months ago and switched over to that.  I have studied Fourier Transforms like 1000 times before and still don’t have it all down, ugh – I have pages and pages of notes from a few years ago, from two months ago, and I’m generating more tonight, analog and discrete.

Seems like I’m gonna get it down one day by brute force.  Ha. Just by failing and failing at it until I see daylight.  I have many applications for it.  Yeah, when I get to start implementing it in practice, I think I’ll have an even better understanding of it since I can use code to explore it.  I’m interested mostly in exploring additive synthesis and the DFT time-to-frequency translation of arbitrary signals.

Fourier Transform Notes

I don’t see the point in using any FFT code libraries right now until I understand it, since this is one of the things I really want to write in depth, not just “obtain and use”.  I’ll write *my* implementation of it first, and then if I have a good understanding of the steps involved (decimation, butterflies, etc), then I might consider a DSP lib or something.  But, knowing me, I probably will just keep tweaking my own implementation, since my goal is to understand it, and if I understand it, then well, I can write better and better versions of the utilities over time.  But, in any case, I seek to know how the shit works and why.  And, I’m almost there.  I have real applications waiting to have these concepts put to use.

Fourier Matrix Notes

And, in other news, there’s the work for this blog that I have been doing – building the scaffolding of the site in CSS and working with the mock and images and GIMP. I love Photoshop, yes, and I have a license for it, but it’s not installed on every computer I have.  So, I have been using GIMP more and more.  Quite a few things you can do with GIMP.  GIMP good.  GIMP pretty cool.  I like the GIMP.  GIMP.

 

Brad Ormand - Moon Painting Outside

11.03.2014 – Moon Painting, Future Projects & Songs

I went ahead and put those ridges onto the painting with plaster and painted them up.  Also, I applied some granular spray paint with some kind of fiber or rubber or something in it that makes the surface rough.  I left 4mm grooves in the center of each to run the light pipes.  I haven’t put the pipes in yet, but while working on them at the bench, I had a bit of trouble making the light uniform through the light pipe with a one-ended LED (even with a superbright, at max current).  So.. I got sand paper and roughed up the outside of the light pipe and tried that.  There was more light coming through the length of it, and it looks super cool, but it’s too defined – it looks like “light scratches” when illuminated, it doesn’t diffuse it, and it’s non-uniform – looks cool, however…..  nah, I don’t think it’s going to work for this installation.  At this point, I think I’ll just go ahead and cut the pipes into about 4 cm chunks and put LEDs on each end and make a “snake” out of it wrapped in some kind of wax-like paper to get a soft glow, running the wires inside the whole burrito. 🙂

Screen Shot 2014-11-07 at 12.56.54 AM

IMG_2647

In other news, there are other projects in the pipeline as I move forward.  I have 160 green LEDs on the way for a 16×9 custom display/matrix.  They’re about 3.8mm each and should pack pretty tightly without being overly tiny to handle and solder, through-hole, not SMT.  I’ll arrange them in a little case and try to diffuse them a bit, and light ’em up in different patterns and animations.  It’s in preparation for some other art projects I am thinking about down the line that will require these skills.  I have an initial schematic that I drew up with a few shift registers (already in stock) and I want to get a feel for myself how far I can take it – both from a processor speed/memory perspective and a volts/current perspective.  About 10 to 20 of them will be used for my current Moon Painting, and the rest will go to the 144 that I need for the display.

Also, I have a new display coming in as well.  I have wanted one of these since they surfaced up on the scene.  It’s a chip-on-glass reflective dot matrix LCD.  128×32.  It’s super dope.  It’s the ST7565R (controller name).  (The entire part name is NHD-C12832A1Z-FSW-FBW-3V3, and I’d rather not call it that 😉 ).  It paints grey pixels on a white backlight, and I can’t wait to dig into that, for sure.

As for the SSD1306, I have had some other ideas that I’d like to see implemented.  I’m still in the R&D phase for that.  For instance, I can set up some basic 3D and draw wireframes, I’m sure.  But, I think I’ll probably have to turn down the frame rate or write it in assembly.  Even the 3 sine wave scrolling animation missed frames, and it was visually slow, so I doubt it can handle polygons.  However, as a precursor, I’ll at least make a “star blaster”, like where the stars come at you in 3D.  That’ll be less expensive.  And, I can animate the camera left and right so that the z-axis is offset back and forth.  That might be all I can do, but we’ll see.  And, I still have that box and grid thing I wanna do…

I might go ahead and start on the triangle wave conversion for that VCO while I’m at a good stopping point with the painting and SSD1306.  And, I want to see what kind of adjustable filtering I want to do as well.  I know I want it voltage-controlled as well, but like I said in a previous post, I want to select my values very carefully and put some real time into it. And, maybe I’ll try to digitally control the VCO and VCA while I’m at it.  Might put up a rotary encoder to an ATTiny and have it spit predefined levels out so I can get like a sweep of the notes or some sinusoidal patterns for the low-pass.  I’ll be getting into this world soon enough.

I have a list again for music updates, too.  The “Strike” kick needs some punch – I overdid the sub before.  I want to write a square wave synth solo for “Kitchen” going into the bridge that sounds kind of like a guitar had done it, bluesy/funky.  And, there are little vocal tweaks that I want to do to “Fine” and “Crush”.  Also, “Feeling” could use a bit less synth bass and more kick, <1db, micro change.  And just a few more as I wrap these songs up to go out.

This is how I like things.  Having plenty of projects that I care about, going through each one, making progress, toggling back, growing my toolkit, relaxing, no deadlines, expressing myself.  Multi-discipline, using all areas of the brain, trying to fulfill my potential, but doing so in a gentle, chilled style.  There’s no goal, just seeing what comes out if I follow my interest.  Nothing contrived.  Everything enjoyed.

 

 

Brad Ormand in Austin, TX

11.01.2014 – Moon Painting, SSD1306 & AX-450

Holy Smokes, there’s a lot going on.  Well, it’s just that I updated my moon painting (it looks a zillion times better), I tore down the Brother machine, found a few surprises inside, and I compiled a video of all of the SSD1306 animations I have done to date.

First, I painted the moon landscape over, after I receiving some insight about the texture of limestone, which is plentiful here in Austin (I brought a big rock in from the yard).  It was kind of a shame to paint over the previous work, but…  That’s how it goes – incremental progress – better techniques replace what came before them.  And, well, it looks a million times more realistic as a base.

IMG_2626

This time, I only used a tiny bit of blue and green, and made it almost totally desaturated.  The craters look fantastic as a base and I haven’t yet decided what to do next.  I’ll sleep on it and wait for the next inspiration to surface.  What I end up doing might be different that what I thought of in the beginning..  Or..  It might be the original idea, squared.  Let’s find out…

And, here’s my halloween costume..  Uh yeah, regular dress for me this year.  I was tired from the late night of the 30th and the project delivery on Halloween, so I just stayed around with a few close friends and chatted.  I rarely talk about personal stuff in the log, but..  since this Halloween pic was taken, and it’s a holiday..  what the hell:  I was going to go to a costume party as a warewolf wearing those neon orange sunglasses and some gold bling.  I was really looking forward to it back in September, but circumstances changed and time went quickly and well…  It never came together.  The moon was eerily plump and the breeze cool. I was looking forward to howling at that moon. 🙂  It seems to be the first day that really feels like fall this year.

IMG_2628

Aaaand, in other news, I made a video of my collection of SSD1306 animations.  I got really involved over the last 2 weeks, blittin’ frames, just coming up with new ways to bang that screen up, and put them all together in a tidy format.  I’m sure when I look back on it in a few years, I’ll get inspired and want to re-create or extend these.    It’s a good supplement to the stuff going on right now.

The song I chose to go with the vid was a song I started in 2006 called “Afterburn”.  It made it over to some music libraries, but it wasn’t ever sync’d to anything (or anything prominent) like “In Tha Den” was from the same group I sent over (sync’d to a prime time Veronica Mars episode).  But, I still luv it – it’s got lots of energy and good synths and kick, However, it was made with my old mixing style, so I have it on the block to be polished for release soon.  It’s not out there as of now.  But, got nostalgia feelings working with it again 🙂  Anywaeeees…

The animations in the vid are of varied kinds – particle animations, bar graphs, sinusoidal wave explorations, and math graphing.  I still have some sci-fi / free-form things that I still want to do like I mentioned in a previous post.  However, this is a good collection for now.  I got what I came for.

And, wow – I did more…  I tore down the Brother AX-450 Electronic Typewriter (from ’89) to look at some stuff, and I found a cool surprise inside.  There’s a tape mechanism that transfers the ink to the paper that also “records” the previous keystrokes, and it was just cool to see what the previous owner had written about – haha.  There was mention of “Monday Night Football” and “Adventure” and “Party Machine”.  haha.  Didn’t mean to be snoopy, and there was nothing juicy in there, I assume just a fellow writing some shit like I’m writing right now – my intention anyway was to to see how the power supply worked, the display, and the keyboard unit (nice spring-loaded feel), and I was just pleasantly surprised with this extra finding.

IMG_2623

IMG_2625

And, also, I feel like I struck gold with the display – it has a “real” HD44780 QFP chip – the board was actually *from* Hitachi, with the “HD44780” QFP chip branded on back – not like these days when I mostly see just a chip-on-board black gunk-dot on the back – who knows what those are.  I know the HD44780 is super-prevalent, but this is cool to see in it’s ’89 form 🙂 .  I get excited about these things.  It’s kind of cool to look back into history and see this type of stuff. Fun.

IMG_2621

 

IMG_2619

 

I traced out the power supply circuit and tried to see how it was managing the electro-mechanical stuff, and also found a pretty cool “font-set wheel” in there – it’s like each letter has a position ratio (n/numSpokes)*(PI*2) in the spectrum, and when you push a key that corresponds, the MCU looks up that keystroke and the motor turns that wheel to that ratio in the table and waits for it to be “whacked” on it’s back to smudge the ink (through the ink rubber) to the paper.  I don’t know – something like that, I assume…  Just guessing.  It was cool to look at.  Nice.

 

IMG_2622

I mean, there’s a lot I got out of breaking it down. Justified time spent, for sure – as it was with the LG bluetooth-audio subwoofer unit and the Casio keyboard that I jacked open in September (before I started keeping log).  And, that reminds me – it’s that actual jacked sub that I’m using in my truck to provide the boom-booms right now.  Forgot about that…  Anyway… So, yeah – I always get a lot out of these investigations.  I have been doing this type of stuff since I was about 10 at my dad’s shop.  And, I’m still as fascinated as I was then. 🙂

Brad Ormand Moon Painting Base with Plaster

10.28.2014 – SSD1306 & Moon Painting

Last night, I fixed a few more flaws with my SSD1306 driver. Before, the setPixel function found the active bit in the page row and just used SPI to write that single updated byte straight to the front buffer. Welllll.. As I suspected, before, I’d have to make my back buffer more active for that functionality when things got more complex, because I did get major flicker at 30fps, even just updating about 1/3 of the screen that way. It was sending data as fast as possible (~10kHz?), and it was just the wrong way – the system struggled. So… I just worked the back buffer in, in whole, and took the approach of throwing the display RAM the whole frame, but in slower intervals – 30 Hz. That worked so well – the system sings like that. Sooo nice. …That display is nice.

I found a critical RAM page-updating bug in my buffer code as well. It took me a million years to find it. But, by testing and actually using the display itself for debug info (awesome, that’s one of the reasons I’m developing on it, aside from animation), I found a pointer that was setting it’s contents and decrementing like:
*ptr- – = x;
when it shoulda have been decrementing first like:
*- -ptr = x;
Those are hard to find, and I can see how it could be an easy thing to misconfigure.

Sooo, after a few bug fixes and improvements, I wrote all kinds of animations! Finally! I enjoyed it. That’s what my first goal was with the display. I made it rain, bounced particles off the display bounds, made a snake trail – ahhh – I finally feel like a specific project has been started.

Screen Shot 2014-10-31 at 7.51.56 PM Screen Shot 2014-10-31 at 7.51.30 PM

Another difficulty: I pushed the ATMega328 to the limits several times. A few times, I overflowed the stack, or I assume so, since the whole system and peripherals went haywire LOL. I was trying to do particle animations with as many particles as possible, and I maxed at 128 (as opposed to the next step, 256, which crashed it).  Went back to something lower, and it would perform fine again. Each particle has an associated struct of pretty good size for an MCU, with signed ints and a float or 2 (each), for physics calculations, updating every frame.

And, there’s only 2k of SRAM to work with.  I don’t want to store all that in ProgMem, really. I wanna store it in SRAM – wahh, waah for me, cry, cry, I’m crying facetiously… Ha. I do want the “luxury” of 8k of RAM, though, at least – haha.  I like generating certain data by algorithm at runtime instead storing it in tables, and I like 16-bit ints and floats, but it’s a luxury for this type of stuff, I guess… Oh well. If I were really concerned and had to tighten up, I’d make it lean and make it work, get hardcore and just make it happen. But, actually… I’m just going to get an MCU with a bit more RAM and speed for my future animation and audio projects. I’m looking at the TI MSP430 (especially the MSP430 F6659), and a few more that I have had my eye on, like the ARM Cortex M4’s @ 60MHz+ and plenty RAM, and I researched the AD Blackfin (yummy, but overkill for now).

I have that color TFT and another RGB display that will need a lot more power/speed/Mem to drive as well – plus I gotta have CPU cycles and room for the DSP audio stuff, as well for those projects. And, plus, I wanted to implement some 3D stuff too – at least with wireframe or flat shading.  Gosh, and I kind of wanna stick with one toolchain for a while… So, I’m investigating… However, I’ll use what I have been using for a while, as well, until I have some other drivers written and have taken care of the current projects.

IMG_2595

In other news, I got that moon crater painting started! It looks dope! Right now, it’s just plaster and canvas, and after it dries and when I have some time and inspiration, I’ll start painting it up. I have no idea what I’m going to do. A lot of it is just improv – I’m just making it up as I grab more plaster, and putting it down and molding it. And, I’ll do the same with the paint. All I know now is that I want desaturated grey/blue/green, and that I’m gonna highlight with bright green or blue – and that I want to mold or paint some ridges in there between the craters. Fun stuff. No deadlines, no pressure, just inspiration, action, more inspiration comes… The engine goes.

Book Order for October - Brad Ormand

10.17.2014 – SSD1306 & Books

For the SSD1306 driver, I reformatted the asciiDefinitions into a large multi-dimensional array with defined indices instead of that nested struct I was using before because I have to extract the data out by byte or word in a loop, since it’s all in a separate flash memory . It’s much easier to do it with this simple structure, I have found. Oh well.

Also, I augmented command-sending to the display to take an arbitrary stream of commands, instead of doing it all separately, driving the target slave select low at the beginning, sending all commands, and then back high at the end.. Same for data-sending. And, I included some more math functions related to putting chars and setting / getting pixel values, writing to the back buffer, etc.

So, it’s just coming along, piece by piece – no deadline pressure, no worries, just chillin’ havin’ fun with it, for real. Doin’ what I want cuz I like it. Eventually, I’ll get it rocking and it’ll be what it’ll be.

In other news.. Can you believe that the mailman fit 6 books in my mailbox! Some are textbooks, lol! Yup, more analog electronics design, display tech, and audio DSP stuff – finally came in. Lid open, books stuffed in, hanging out, but was pretty sturdy, though. I pulled ’em out and opened them up. Happy day.

IMG_2551

 

Brad Ormand - SSD1306 Font Set Implementation

10.16.2014 – Set Pixel, Pull Ups & Synth

I had a stomach ache yesterday. Probably from that super hot salsa on those tacos. Lol. Didn’t feel very sharp yesterday. I did write a setPixel function for the display and a blitting mechanism to transfer the back buffer. An optimization might be to allow a certain buffer window to be transferred instead of the whole display refresh, but… That can certainly wait until I get the screen running at a good frame rate, first.

And, I have an old telephone keypad and deciphered it’s matrix routing so I can start using it in the interim as keys to produce sound and input bytes with. It’s a 3×4. It’s another driver to write. Awesome.

IMG_2556
With that and a few optical decoders and analog pots, I think I’ll have all of the input UI I need to control a pretty capable digitally-controlled analog audio synth. Maybe two VCO in’s, two cutoffs, two resonances, two pitch knobs, 2 saw/sine selector, a mode momentary, and 4 pitch/vary buttons… This is just the first time I have thought about it, so.. Here we go. This gets me thinking on the synth design a little. I want to do something different than a plain old keyboard.

In other news, I am thinking of building an outdoor pull up bar. I think I want to use metal water pipe – about an inch thick. Cemented into the ground next to my porch. About 4 feet wide. Nothing fancy, simple, but very sturdy – and, that gets sunlight. I can do about 5 wide-grip pull ups now, and so let’s go for 10, strict. I’ll attach an assist band with a seat on there for beyond-failure reps. Maybe start with a set of 10, assisted, rest, then a set of 5 regular, rest, then another 4 or 5, rest then maybe start 3 sets of 10 assisted. See how that goes and adjust. Training will get me there if I stay in the groove. I’ll make my own mistakes, and adjust to the patterns as I find out better ways… As I do everything else.

Note to self… Put 2 LEDs on an analog or DAC output, one inverted. So that they kind of “toggle” real time with the sound 🙂

SSD1306 12 x 8 Font Set Implementation by Brad Ormand

10.15.2014 – SSD1306 & Blog

I got the SSD1306 driver working great, finally! Just a few hiccups before, but now I have the whole alphabet and number set displaying on the screen! The display pixels are sooo crisp and a joy to read on this OLED.

At first, I digitized the 8×6-bit font set I drew up, but those were super tiny – shoulda known.. It would have been fine for a larger pixel matrix, but this display is tiny and densely-packed, so I spent time re-mapping the chars out to 13×8, instead. They look great! I like the wide feel, and my font has that classic sci-fi look to it. Reminds me of Roland’s digits for their audio gear – rock on. Perfect. And, by going with a 13 pix width, I utilize the entire real estate of the display line – 128 / 13 = ~9.8, almost 10 chars across, but I can truncate the last two cols (130 – 2) because they are spacing, making it an even 10. So, the 10 across letters lock up just right at 128.

 

IMG_2548

Now, I’ll just work on getting my font structs mapped to the bits and figuring out the ubiquitous “setPixel( x, y, val )” function – the first milestone that I do for any kind of graphics display, and each are different – it’s really the most fun work. Until now, I had been just writing straight to RAM pages in 1×8 bit chunks, as defined by the display’s GDDRAM. But, now to modulate the page / column window to re-draw with a new pixel overlaid, in place, in the selected 1×8 chunk.

And, then, once I’ve got that, it’ll be time to put together the character engine. And, then, the frame blitter / back buffer, etc. I’m really enjoying this – these little details and being super close to the hardware, and can’t wait to use it for debugging the audio engine for my synth and spectrum analysis projects, later on. And… I would really LoVe to see a platformer game on this thing, too – that would be nasty good. Lol…

I log these thoughts to my iPhone in “Notes”, for the purpose of documenting my journey because I think it helps me from a project management standpoint, and also from a “fun” standpoint – for nostalgia feelings and looking back on interesting life events – and just to examine the way that I operate, as well. I enjoy it. Wish I woulda started it earlier, in fact. I’ll keep writing in Notes to log my stuff, but I’d like to use WordPress to manage the log itself, now that I think about it…

I thought about using the “Falcon” CMS that I wrote a while back, derived from the CMS’s that I used to write for clients (I think several of my clients still have it live on tha www) because I liked the idea of extending it a bit and getting back into it’s development.  But, nah, I’d like to catch up with modern WordPress 4+ development, though, as I think I could really do some cool stuff with it. I developed for WordPress 3 for a few years on jobs – making plugins and themes for companies in LA and Austin. I have some fun ideas for it, and plus, I have the taste for php again. Here’s my chance.

And, I designed a layout for my new site anyway (a little before I started keeping log), and so I’ll just make into a theme on WP and run with it.  Also, WordPress is a “blog platform” – or at least started that way and does blogging very well. It’s more that that these days, I guess. And… Yup – that’s what I need: a way to manage and display my logs on the web 🙂 . The format will be just stating my thoughts and recording what happens as opposed to teaching or supplying information or for promotion.  I am not going to try to be a “blogger” or make it “successful” or make anything out of it more than as a supplement to my projects – my projects are the focus, and 50% of my doing it is just for my own history log and management of my projects, and the other 50% will be for the discovery of, and outlet for, my art.  Bare bones, no frills.  But, it I *will* enjoy writing in it and shooting photos and formatting it, etc, for public consumption, and of course, I’m going to make it LOOK bad-ass 🙂 .  Right now, I think I’ll drop my existing developer portfolio and music player, etc, on top of WordPress, too. Might as well have the whole site use a single platform, I guess.

I remember when I was living in LA and was freelancing for the LA Times newspaper. I took the metro train to work every day from Hollywood and Highland to their building downtown. I worked on Flash apps for their website. It was around that time that I started writing my projects down – logging my approaches – successes and failures. I always kept a pencil on me and carried a pocket notebook – a Moleskine. I could have used an app to log stuff, but I just liked pencil because I could also sketch stuff. But, anyway, I remember writing a Flash logging app that I used for awhile, and I may still have data in that and those notebooks, but I never published or collected those thoughts in one place.

And so, that’s why I am setting all of this up – so that I can re-experience the various weeks’ events, to recall later, in a nice format – like as an aid to my memory (I keep saying this. haha.). But, like this: What solution did I come up with back then when I was on a similar project? What were some of my motivations and state of mind when I did certain things on certain projects? How can I improve my process? What patterns emerge?  Etc.  I am already seeing them. So, I’m actually excited to get this going up on a site. In a year when I look back on this, I’d like it to provoke my memory to remember what it was like “back then”. It helps me strengthen my self-project-management skills and also helps keep the motivations clear for “why” I’m doing things a certain way, etc.

Brad Ormand - Audio Tool Main Breadboard

10.14.2014 – SSD1306 & Time Clock

I spent at least 5 hours yesterday writing the driver for my OLED display, and designing the backbuffer characteristics and manipulations.. However, I couldn’t get it to turn on!!! Ugh! It was then when I figured out that I had been looking at the SSD1308’s datasheet, and not what I really had, which was the SSD1306! I don’t know how I got that confused. Plus, it had a separate circuit on the back built-in that acts as a charge pump where you can use the Vdd to drive Vcc, and it also has a startup routine!! I did not know this.

It was late last night that I discovered this when I went back to my receipt (and earlier posts) and saw what version I had. And, also the name, “SSD1306” is the name of the controller connected to the actual OLED array – good enough for me to just call it that, though. It’ll be whom I will be talking to, anyway 🙂 . They look exactly the same (as far as I know) Oh well – it’s another learning experience to drop in the bag. I began the 1306 power on sequence with included charge pump last night in C with HW SPI.

And, in other news, I tested my “accurate” time clock… Yeah – it was way off. Ha. It varies by 15 minutes per month, or about a second per hour. So… maybe that source 8MHz has a bigger tolerance than I thought (or maybe I’m just wrong [again! ugh]). I know I could get a watch crystal to drive it, but no.. I wanted to see how accurate I can get without one. But, for production applications – I don’t think the on-chip clock is accurate enough for long term counting, if this is the case.

Brad Ormand in the Sport-Trac 2

10.11.2014 – New Vocals & SSD1306

Whew – so glad that I didn’t have to wake up at 5-something for work today. It’s the weekend. Hell yes…  Hell.  Yes.

Last night, I recorded what was possibly some of the best vocals I have performed, and a lot of it was just improv.  I wrote association lyrics for a few minutes, then just got in the booth with that sheet, started recording and then just went.  It took 3 booth sessions, and when I had said what was on the sheet, I just kept going, freestyling phrases and little abstract nuggets of my mind in my particular vocal style. I think it came out great!

I don’t preview music like I do my projects or paintings on here, but stay tuned, it’ll be coming around the corner as I continue to work on what I contributed to this new song.

In other news, I’m at the start of writing a driver for that Solomon OLED display. I got it in yesterday. It’s sooooper tiny – less than an inch for a 128×64 pixel device! I am going to have so much fun! However, I’ve gotta get in there and study the datasheets and abstract away the bits it wants to get to clear and init and write pixels, initialize, scroll, etc.  The ASCII chars, in font, I’ll define myself – maybe 6×8?? Idk But, lots of prelim work going on with it in the next few days as I tie it all together. 🙂

Later, the circuit will sit in a tiny box (or sphere, who knows) with a few buttons to vary the ani’s and look pretty on a desk or in a bathroom or something. 🙂

Brad Ormand - Audio Meter

10.09.2014 – Job, SSD1306 & Songs

New mixes! Ok, just listened back – instructions are: (all kick-related, at this time): for “Fine”, increase resonance of kick 2db at about 50hz. For “Kitchen”, increase the punch/knock at about 150Hz about 2db, and for “Strike”, turn down the attack at about 1kHz. Super-small tweaks, incremental, listen back and go from there. Bottom line: they all sound better than ever! Now, it’s just those production touches…

In other news, I’m really wanting to write that driver for that device I spoke about yesterday – the 32×16… However, I will first write the driver for the Solomon SSD1306 OLED display using SPI, instead. It’s monochrome, but it’s so sleek and the pixels are very tight! I’ll sink my teeth into that for a few weeks, wrap a good driver and produce my animations (and maybe a custom font/ascii lib)… And, at the same time set up a tele keypad driver to interface with it.  That’ll keep me busy and learning for my next few projects – and might integrate the results into the digital audio granulator/synth, the analog synth, and my portable directional audio spectrum analyzer, ambitious, long-term projects. (About a year). That’s all I feel like engaging in at this time.  It’s a big enough chunk. I’m thoroughly fascinated right now, and the spirit of invention is strong in me right now, outside of work.

I’m still going to work (to my software engineering job) at 5:45 every day while we have to coordinate with the international team. It’s not a big deal, actually. I mean yes, I am tired. But, I needed to shift my sleep schedule up a few hours anyway, and although this is overkill, when it’s over next Tuesday, I’m sure I’ll have at least an hour circadian rhythm shift. And, which is why I don’t complain about it – even to myself. Perspective, man…  There are benefits. Also, traffic is like non-existent.  Good thing. And, I go home earlier. All good.