Sunday, December 18, 2011

Updating TI Beagleboard to 3.x Linux from Angstrom Embedded Distro

I've have one of these neat TI Beagleboard for a couple years, have not used it for a while. TI recently released a new hardware implementation of this family called the Beaglebone. This device looks to be more useable for hardware interfacing, so I picked up a couple to explore. At USD 90, the price of the Beaglebone shows the continued downward price curve of powerful embedded hardware.

I dusted off the older Beagleboard to do some comparisons with the newer Beaglebone hardware. So first off I decided to get the distro version as close as possible. Angstrom appears to be most used and updated distro for the family, but the Android folks look to be getting some steam up.

Here are my notes on getting the most current Angstrom distro running on the Beagleboard.

The one big gotcha that may trip up forever n00b's like me was the change of the TTY port naming conventions. The correct port name for the serial port on the Beagleboard is:

ttyO2


that is a capital OOOOOO as in Oscar not a zero!

After Linux kernel version 2.6.36 the naming convention appears to have moved from:

ttySx


--to--

ttyOx


I'm sure there is a really good reason to slipstream this change in, but not only is it not clearly announced / documented around the various Linux and embedded internet resources [one of those "weed 'em out events perhaps?"] but using the capital 'O' character seems to be making for more opportunities for mistakes by confusing it with the number zero '0'.

The standard instructions to create a SD card with the two partitions containing the u-Boot and linux kernel on the first FAT partition and the remaining core Linux core OS files on the second [one of several types] Linux/Unix formatted partition is straight forward and does not vary from prior configs.

The main two changes to get the console output and the a serial terminal login prompt are as follows:

1) change the Linux bootargs console value to be:

console=ttyO2


REMEMBER THAT IS A CAPITAL O NOT A ZERO!

my basic u-Boot environment variable 'bootargs' is as follows:

bootargs=console=ttyO2,115200n8 root=/dev/mmcblk0p2 rw rootwait


2) Before you put the SD card into the Beagleboard, or after via the X Window session that comes up by default, edit the inittab file in /etc and change the following line from:

S:2345:respawn:/sbin/getty 115200 ttyS2


--to--

S:2345:respawn:/sbin/getty 115200 ttyO2


this will give you a login prompt on the Beagleboard's serial port.

Results and experiences to date.

I am still testing the 3.x kernel on the Beagleboard, so far so good. The serial port might be exhibiting some slow down after a the machine is up for a while. I need to get more data on this. Unfortunately, most of my focus is on the new Beaglebone, so the '..board' is getting the 'old dog' treatment. The puppy is the center of attention.

I updated the two boot modules of the Beagleboard to what I believe is the most current version. You get these by putting the MLO and u-boot.bin files on the FAT boot partition when you download the latest build of Angstrom. There are couple of thinks to be aware of with these upgrades. The version of these files that are in the flash memory of the Beagleboard are the older version until you use the u-boot commands to re-flash them. The instructions to do this are straight forward and worked fine. The 'gotcha' here comes in that the commands in u-boot have changed considerable and the boot scripts are stored as environment variables in the flash. So your old boot scripts will work with with your old SD cards and when you boot these files from flash [by removing the SD card or holding down the 'user' button during power up]. However, when you boot with the newer u-boot, thinks quit working. And, unfortunately, it appears to be even worse than the new versions don't work the same as to older version. It appears that the documentation and perhaps some of the commands do not work as documented that you will find on the 'help' sites on the web. I have not got my arms around these 'additional' issue yet so take this with a grain of salt, but do watch carefully as commands run. One example of what I am talking about is the 'mmc' command family to work with the SD card. There is much discussion of a 'mmcinit' command, but I could not find that command anywhere. What I did find is that before reading from the SD card, it is a good idea to do a 'mmc reset' each time before loading a file or doing a directory of the mmc. Below is my before and simple v1 'after' environments:

-- before version of environment variables that booted a October 2009 Angstrom Linux --
OMAP3 beagleboard.org # printenv

bootcmd=if mmc init; then if run loadbootscript; then run bootscript; else if run loaduimage; then run mmcboot; else run nandboot; fi; fi; else run nandboot; fi
bootdelay=10
baudrate=115200
loadaddr=0x82000000
console=ttyS2,115200n8
vram=12M
dvimode=1024x768MR-16@60
defaultdisplay=dvi
mmcargs=setenv bootargs console=${console} vram=${vram} omapfb.mode=dvi:${dvimode} omapfb.debug=y omapdss.def_disp=${defaultdisplay} root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait
nandargs=setenv bootargs console=${console} vram=${vram} omapfb.mode=dvi:${dvimode} omapfb.debug=y omapdss.def_disp=${defaultdisplay} root=/dev/mtdblock4 rw rootfstype=jffs2
loadbootscript=fatload mmc 0 ${loadaddr} boot.scr
bootscript=echo Running bootscript from mmc ...; source ${loadaddr}
loaduimage=fatload mmc 0 ${loadaddr} uImage
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr}
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr}
stdin=serial
stdout=serial
stderr=serial
dieid#=1c04000300000000040323090e01600d

Environment size: 1056/131068 bytes
OMAP3 beagleboard.org #



-- simple 'after' version that boots the Angstrom November 2011 3.x Linux --

OMAP3 beagleboard.org # printenv
baudrate=115200
beaglerev=Cx
bootaddr=0x80300000
bootargs=console=ttyO2,115200n8 root=/dev/mmcblk0p2 rw rootwait
bootcmd=mmc rescan 0; fatload mmc 0 ${loadaddr} uImage; bootm ${bootaddr}
bootdelay=10
buddy=unknown
buddy2=unknown
dieid#=1c04000300000000040323090e01600d
filesize=338778
loadaddr=0x80300000
stderr=serial
stdin=serial
stdout=serial
video=omapfb:2M,vram:4M
vram=12M

Environment size: 412/131068 bytes
OMAP3 beagleboard.org #


Here is what is running on the Beagleboard now:

Linux beagleboard 3.0.8+ #1 Tue Nov 1 21:14:19 CET 2011 armv7l unknown


Some useful web sites:

Good basic setup instruction of the Beagleboard. Old so it does not address the problems I highlighted above, but still a good anchor to go back to:

http://www.ibm.com/developerworks/linux/library/l-beagle-board/

Beagleboard web site:

http://beagleboard.org/

Angstrom Linux for Beagleboard latest version. NOTE: go to the Amazon AWS mirror of this web site to get much faster download of files:

http://www.angstrom-distribution.org/demo/beagleboard/

Summary...

Pretty frustrating waste of time I had as a n00b here because the 'in the know' folks that are maintaining this stuff did not take five minutes to document some of the rather major changes. Glad I have it working! The Beagleboard and Beaglebone are great training ground for the amazing world of embedded connected inexpensive devices we are moving to.

Monday, May 30, 2011

Simple learning example for digital to analog on Arduino with MicroChip MC 4921

The Arduino hardware only provides PWM pseudo-DAC support. I had the need to create a simple set of signal wave forms, so I though I would try and accomplish it with the Arduino. I had a AdaFruit Wave Shield v1.1 sitting around, a neat device that does a number of things, but primarily focused on playing back audio files from it's attached SD card reader. I looked around for some code to create wave forms with its on board MicroChip MC 4921 12 bit DAC, but found nothing that was written directly for the Wave Shield. Several folks have posted info on using the MCP 4921 with the Arduino in projects, so I follow their leads and hacked up the code I needed. Below is a simple first step I used to learn to talk to the DAC chip, might give others a starting point. It also shows the basics for storing data in the program code memory of the ATMEL x28 processors. The sine table is far too big to fit in data memory on the Arduino.

Thanks to the folks cited in the comments below for their work.

 

// DAC-programming01
// 30-May-2011
// direct programming of Microchip MCP 4921 12 bit D to A on the AdaFruit WaveShield v1.1
// Dave Proffer
//
// demonstrates programming the MCP4921 to generate several different wave forms
// look like about 0.666 hertz or 1.5 seconds per cycle on Dumilanove with ATmega328 16 Mhz
// sine wave generated by : http://www.daycounter.com/Calculators/Sine-Generator-Calculator.phtml
// initial MCP 4921 code from: http://www.csulb.edu/~hill/ Prof. G. C. Hill at CSULB
//


#include

#define DATAOUT 4 //MOSI
#define SPICLOCK 3 //sck
#define SLAVESELECT 2 //ss
#define LDAC 5

#define ledPin 13

word sensorValue;
word interval;
byte data = 0;

// this sine wave table, 1024 12 bit words is too big for the RAM of the Arduino, so we use the ATMEL rountes to store in in the much larger program non-vol mem
PROGMEM prog_uint16_t sineLookup[1024] =
{
2048,2060,2073,2085,2098,2110,2123,2135,2148,2161,
2173,2186,2198,2211,2223,2236,2248,2261,2273,2286,
2298,2311,2323,2335,2348,2360,2373,2385,2398,2410,
2422,2435,2447,2459,2472,2484,2496,2508,2521,2533,
2545,2557,2569,2581,2594,2606,2618,2630,2642,2654,
2666,2678,2690,2702,2714,2725,2737,2749,2761,2773,
2784,2796,2808,2819,2831,2843,2854,2866,2877,2889,
2900,2912,2923,2934,2946,2957,2968,2979,2990,3002,
3013,3024,3035,3046,3057,3068,3078,3089,3100,3111,
3122,3132,3143,3154,3164,3175,3185,3195,3206,3216,
3226,3237,3247,3257,3267,3277,3287,3297,3307,3317,
3327,3337,3346,3356,3366,3375,3385,3394,3404,3413,
3423,3432,3441,3450,3459,3468,3477,3486,3495,3504,
3513,3522,3530,3539,3548,3556,3565,3573,3581,3590,
3598,3606,3614,3622,3630,3638,3646,3654,3662,3669,
3677,3685,3692,3700,3707,3714,3722,3729,3736,3743,
3750,3757,3764,3771,3777,3784,3791,3797,3804,3810,
3816,3823,3829,3835,3841,3847,3853,3859,3865,3871,
3876,3882,3888,3893,3898,3904,3909,3914,3919,3924,
3929,3934,3939,3944,3949,3953,3958,3962,3967,3971,
3975,3980,3984,3988,3992,3996,3999,4003,4007,4010,
4014,4017,4021,4024,4027,4031,4034,4037,4040,4042,
4045,4048,4051,4053,4056,4058,4060,4063,4065,4067,
4069,4071,4073,4075,4076,4078,4080,4081,4083,4084,
4085,4086,4087,4088,4089,4090,4091,4092,4093,4093,
4094,4094,4094,4095,4095,4095,4095,4095,4095,4095,
4094,4094,4094,4093,4093,4092,4091,4090,4089,4088,
4087,4086,4085,4084,4083,4081,4080,4078,4076,4075,
4073,4071,4069,4067,4065,4063,4060,4058,4056,4053,
4051,4048,4045,4042,4040,4037,4034,4031,4027,4024,
4021,4017,4014,4010,4007,4003,3999,3996,3992,3988,
3984,3980,3975,3971,3967,3962,3958,3953,3949,3944,
3939,3934,3929,3924,3919,3914,3909,3904,3898,3893,
3888,3882,3876,3871,3865,3859,3853,3847,3841,3835,
3829,3823,3816,3810,3804,3797,3791,3784,3777,3771,
3764,3757,3750,3743,3736,3729,3722,3714,3707,3700,
3692,3685,3677,3669,3662,3654,3646,3638,3630,3622,
3614,3606,3598,3590,3581,3573,3565,3556,3548,3539,
3530,3522,3513,3504,3495,3486,3477,3468,3459,3450,
3441,3432,3423,3413,3404,3394,3385,3375,3366,3356,
3346,3337,3327,3317,3307,3297,3287,3277,3267,3257,
3247,3237,3226,3216,3206,3195,3185,3175,3164,3154,
3143,3132,3122,3111,3100,3089,3078,3068,3057,3046,
3035,3024,3013,3002,2990,2979,2968,2957,2946,2934,
2923,2912,2900,2889,2877,2866,2854,2843,2831,2819,
2808,2796,2784,2773,2761,2749,2737,2725,2714,2702,
2690,2678,2666,2654,2642,2630,2618,2606,2594,2581,
2569,2557,2545,2533,2521,2508,2496,2484,2472,2459,
2447,2435,2422,2410,2398,2385,2373,2360,2348,2335,
2323,2311,2298,2286,2273,2261,2248,2236,2223,2211,
2198,2186,2173,2161,2148,2135,2123,2110,2098,2085,
2073,2060,2048,2035,2022,2010,1997,1985,1972,1960,
1947,1934,1922,1909,1897,1884,1872,1859,1847,1834,
1822,1809,1797,1784,1772,1760,1747,1735,1722,1710,
1697,1685,1673,1660,1648,1636,1623,1611,1599,1587,
1574,1562,1550,1538,1526,1514,1501,1489,1477,1465,
1453,1441,1429,1417,1405,1393,1381,1370,1358,1346,
1334,1322,1311,1299,1287,1276,1264,1252,1241,1229,
1218,1206,1195,1183,1172,1161,1149,1138,1127,1116,
1105,1093,1082,1071,1060,1049,1038,1027,1017,1006,
995,984,973,963,952,941,931,920,910,900,
889,879,869,858,848,838,828,818,808,798,
788,778,768,758,749,739,729,720,710,701,
691,682,672,663,654,645,636,627,618,609,
600,591,582,573,565,556,547,539,530,522,
514,505,497,489,481,473,465,457,449,441,
433,426,418,410,403,395,388,381,373,366,
359,352,345,338,331,324,318,311,304,298,
291,285,279,272,266,260,254,248,242,236,
230,224,219,213,207,202,197,191,186,181,
176,171,166,161,156,151,146,142,137,133,
128,124,120,115,111,107,103,99,96,92,
88,85,81,78,74,71,68,64,61,58,
55,53,50,47,44,42,39,37,35,32,
30,28,26,24,22,20,19,17,15,14,
12,11,10,9,8,7,6,5,4,3,
2,2,1,1,1,0,0,0,0,0,
0,0,1,1,1,2,2,3,4,5,
6,7,8,9,10,11,12,14,15,17,
19,20,22,24,26,28,30,32,35,37,
39,42,44,47,50,53,55,58,61,64,
68,71,74,78,81,85,88,92,96,99,
103,107,111,115,120,124,128,133,137,142,
146,151,156,161,166,171,176,181,186,191,
197,202,207,213,219,224,230,236,242,248,
254,260,266,272,279,285,291,298,304,311,
318,324,331,338,345,352,359,366,373,381,
388,395,403,410,418,426,433,441,449,457,
465,473,481,489,497,505,514,522,530,539,
547,556,565,573,582,591,600,609,618,627,
636,645,654,663,672,682,691,701,710,720,
729,739,749,758,768,778,788,798,808,818,
828,838,848,858,869,879,889,900,910,920,
931,941,952,963,973,984,995,1006,1017,1027,
1038,1049,1060,1071,1082,1093,1105,1116,1127,1138,
1149,1161,1172,1183,1195,1206,1218,1229,1241,1252,
1264,1276,1287,1299,1311,1322,1334,1346,1358,1370,
1381,1393,1405,1417,1429,1441,1453,1465,1477,1489,
1501,1514,1526,1538,1550,1562,1574,1587,1599,1611,
1623,1636,1648,1660,1673,1685,1697,1710,1722,1735,
1747,1760,1772,1784,1797,1809,1822,1834,1847,1859,
1872,1884,1897,1909,1922,1934,1947,1960,1972,1985,
1997,2010,2022,2035
};



void setup() {
// -------------------------------------------------------------
// default pins on Wave shield connected to DAC
pinMode(DATAOUT, OUTPUT);
pinMode(SPICLOCK, OUTPUT);
pinMode(SLAVESELECT, OUTPUT);
pinMode(LDAC, OUTPUT);

// seems to put the DAC in known state, but zero worked too!
// sendIntValueSPI(1000);
sendIntValueSPI(0);

// basically keep this line low for the DAC to output signal is what I read
digitalWrite(LDAC,LOW);

// start serial interface
Serial.begin(9600);
}

// this is the routine that clocks a word of data to the DAC using SPI type transfer logic
void sendIntValueSPI(int value) {
// -------------------------------------------------------------

// initiate data transfer with 4921
digitalWrite(SLAVESELECT,LOW);

// send 4 bit header
sendSPIHeader();

// send data
for(int i=11;i>=0;i--){
digitalWrite(DATAOUT,((value&(1<>i);
sendSPIClock();
}

// finish data transfer
digitalWrite(SLAVESELECT,HIGH);
}

// top of first byte of pair is commands for DAC
void sendSPIHeader() {
// -------------------------------------------------------------
// bit 15
// 0 write to DAC *
// 1 ignore command
digitalWrite(DATAOUT,LOW);
sendSPIClock();
// bit 14 Vref input buffer control
// 0 unbuffered *
// 1 buffered
digitalWrite(DATAOUT,LOW);
sendSPIClock();
// bit 13 Output Gain selection
// 0 2x
// 1 1x *
digitalWrite(DATAOUT,HIGH);
sendSPIClock();
// bit 12 Output shutdown control bit
// 0 Shutdown the device
// 1 Active mode operation *
digitalWrite(DATAOUT,HIGH);
sendSPIClock();
}

// basic clock of each bit with is routine
void sendSPIClock() {
// -------------------------------------------------------------
digitalWrite(SPICLOCK,HIGH);
digitalWrite(SPICLOCK,LOW);
}

// some simple wave forms for testing

void loop() {
// -------------------------------------------------------------


/*
// triangle wave
for (int i=0; i<25; i++)
{
sendIntValueSPI(i*160);
}
for (int i=24; i>=0; i--)
{
sendIntValueSPI(i*160);
}
*/
/*
// precision triangle wave
for (int i=0; i<=4095; i++)
{
sendIntValueSPI(i);
}
for (int i=4095; i>=0; i--)
{
sendIntValueSPI(i);
}
*/

//sine wave lookup
for (int i=0; i< (sizeof(sineLookup)/sizeof(int)); i++)
{
// according to the doc, you cannot simply access data stored in the program mem like you would in data mem, so you must use the ATMEL functions to move data so you can use it.

unsigned int tabVal = pgm_read_word_near(sineLookup + i);
// Serial.print(i);
// Serial.print(", ");
// Serial.println(tabVal);
sendIntValueSPI(tabVal);
}

/*
//square wave

interval = 0;
for (int i=0; i < 50; i++) sendIntValueSPI(interval);
interval = 4095;
for (int i=0; i < 50; i++) sendIntValueSPI(interval);
*/


// for (interval=0; interval < 4096; interval++)
// {
// sendIntValueSPI(interval);

// }
}

 

Thursday, January 6, 2011

Dual monitor setup ideas, great price on a useful base monitor stand: Planar 997-5253 at Buy.com

This week [1st week January 2011], Buy.com has a pretty good deal on a desktop monitor stand that will get a dual monitor setup working for your desktop. Here is the link that is good for a least a week more. I paid thirty dollars more for the same unit at Amazon.com a while back, this is 'all in' with same shipping options and taking into account that Buy.com charges CA sales tax where Amazon.com does not. I am amazed at the shipping efficiency that Buy.com has, I ordered a 2nd one of these from Buy.com yesterday with their cheapest shipping option, free, and it was delivered via Fedex Home Ground the next afternoon. Clearly your physical location relative to Buy.com's logistics sites will make a difference, but wow!

I'm a big fan of portrait monitor orientation as you can see by the second picture below. What is nice about the Planar dual monitor stand is that is able to handle monitors up to 24 inches in either landscape, portrait or a combination. The ability for Windows, Linux and Mac OS X to handle multiple monitors and monitors turned 90 degrees [or 270 degrees] has greatly improved over the years. I still find Apple's OS X operating system to handle it the best 'out of the box'.  Much of their advantage is that they control both the hardware and video display drivers. In Windows and Linux you often have to deal with one or more third party video card drivers to get it working. That said, my configurations on Ubuntu Linux 10.02 work really well. I have been using nVidia cards for a while and they works solidly, but do expect to spend more time in the setup phase than you will on OS X.

The Planar 997-5253 stand is really easy to setup and is very stable on your desk. I'm using 21 inch monitors in portrait orientation and there is no way they will tip over. In the past, I've used stands that attached to the sides of desks or into drilled holes. While these are the ultimate in stability, they are more difficult to get a good ergonomic setup.

The price and selection of LCD monitors is wide open now, so you have to shop around for price point, size and display quality. The most important item for the dual monitor setup is to make sure the monitors you buy have the ability to remove their standard base and mount via the industry standard 'VESA 100 mm by 100 mm' or 'VESA 75 mm by 75 mm' third party mounting option. Be careful with some of the lower cost LCD monitors, as they do NOT have this option. Apple's LCD monitors do not have this option either, though people have hacked the Apple monitor mounts to make them work. So for a OS X dual monitor configuration; Mac Mini, Mac Book Pro, or Mac Pro I recommend using non-Apple monitors. You might wonder how you drive multiple monitors on a Mac Book Pro or Mac Mini, if you search Google.com, you will find a number of people that have made this work using various configurations of the internal video card and cables. For my configuration on a MacBook Pro, I went with a external USB video card device from DisplayLink.com . Their latest OS X drivers support display rotation, the video quality on the DisplayLink device that I have not as high a quality as the built in video card of the MacBook Pro, but has been fine for my old eyes and has been running solidly with no memory leaks or crashes. On the Linux machine, where I do most of my work, I use nVidia video cards that have dual monitor support build in. The Apple MacPro has similar video cards available. Having a powerful video card with dual DVI or HDMI monitor support is the ideal machine to run. But I can say that my MacBook Pro configuration, which is really a THREE monitor solution, since the display on the notebook works as well. It is solid and a good setup for email, coding and document review.

buydotcomplanardealjan11.jpg

 

 

 

dual-monitor-example.JPG

Tuesday, December 21, 2010

Another iPad problem, or rather a 'feature' -- the mute switch

I ran into another issue on the Apple iPad that is another interesting reflection on software and Man-Machine Interface issues that are becoming more and more prevalent and important in our lives.

It appeared that all of a sudden several of my video playback apps on my iPads quit playing audio. The video was streaming fine, but in total silence. Being a standard human user, I immediately and it turns out incorrectly jumped to the conclusion that the apps that were silent had some type of bug.

After taking a step back and turning my 'logic brain' back on, what I have found is that the apps that were silent are the ones working correctly. And the combination of my incorrect operation of a new function on the iPad and other apps incorrectly ignoring this function is the root cause of the 'silence' I was encountering.

With the new release of the iPad's iOS operating system, Apple changed the function of a small switch on the upper right side of the iPad. The switch is just above the volume up/down buttons. Prior to the 4.2.1 release of iOS, the switch locked the screen orientation, so that rotating the iPad did not cause the screen to change orientation. With the latest release of iOS, this orientation lock function was moved to a software button located in the 'task bar' of the iOS system and the function of the physical switch was change to a sound mute function. Moving the switch to the down position, mutes the sound output. Moving the switch up, un-mutes the iPad and allows the volume up and down buttons to change the sound level.

There has been considerable debate online about these changes in these user interface functions. Even to the extent that for jailbroken iPads, there is a way to put the functions back to their original definition. When I started to use the new functions, I found the new definitions to be more useful, but this one of the challenges that UI developers face, there is NOT one standard way that people are comfortable with.

And I believe that this 'multiple ways of doing things' challenge is what has lead, at least partially, to the problem that I encountered with the sound playback on the iPad.

What I have found, is that there a number of apps that are ignoring the mute switch position and generate sound output regardless of the position of this switch. Apps that are ignoring the mute switch, include Apple's own YouTube app and Netflix. I think the first problem is that there is a way outside the operating system to ignore the switches function. Especially in such a controlled hardware/software environment as the iPhone/iPad world, being able to 'repurpose' this hardware does seem to be a bug from Apple's perspective. Second, is that apps are either ignoring the mute switch on purpose or have failed in their updates to correctly adapt to this change in system level UI functionality.

So what I've found, is that thru my own poor 'ass-umptions' that the apps that were silent were the ones with the problem and due to the combo of apps ignoring the new function and Apple allowing this to occur I see another big occurrence of software causing a lot of consternation in the daily lives of people operating electronic devices. We face some big issues as software continues to rule!

 

iPad button problem, looks like a software issue

This issue I have recently encountered on one of my iPads supports the unfortunate fact that there is a lot of computer and electronic hardware that gets returned because the products seem to exhibit hardware problems. When in fact, there are either software bugs or 'software features' that make it appear that there are problems with the hardware, but the hardware is just fine.

I started to see the home button on the front of the iPad to quit responding. You would push it and nothing would happen, so you could not exit apps, bring up the task manager or any other function that required the button to respond to a push. The problem was very intermittent, sometimes it was completely non-functioning and other times worked fine. I tried cleaning the button area and removing the iPad from the Apple case, at first this seemed to improve the issue. But then it came back. The button does appear to be a mechanical button, unlike the capacitive buttons that many of the Android devices use.

I should note here that, sad but true, I own three iPads, and this unit was the only one showing the problem. This was reenforcing my belief that I had a hardware issue on just the one iPad.

I searched Google and found others with similar symptoms. A number of people were going to the Apple store and getting their iPads replace. I decided to make an appointment with the local Apple Genius Bar at the Santa Barbara store. I went in and the helpful technician was able to duplicate the problem with me there, though I sensed she remained skeptical. Her next step was to request that the iPad be totally reset, wiped and reinstalled as a new iPad. We did this in the store and I gave it another 'button pushing' spin, with the iPad cleared of all apps and data. I thought that I could reproduce the problem still, but it seemed to have significantly reduced. The technician at this point was willing to swap out my iPad for a replacement unit.  She was multitasking and helping another person at the same time, so I continued to test by button. After about 10 minutes, I told her that I felt the problem might have been fixed, and before swapping the hardware I wanted to reinstall my data and apps and test the unit further.

The Apple Guru continued to be very helpful and said that since we had done this first 'software' reset step, and the fact was logged in the Apple Support system for this iPad, I could come back and go directly to the hardware swap step.

Well, two weeks later, I  will report that I have NOT seen the problem again. It has been a real PIA to reinstall apps and data in the unit. The Apple Guru recommended NOT restoring the backup image to the iPad. I think this has been the right route to the solution, it does appear that something in the operating system or in one of the apps I installed was causing the button to misbehave. I had installed beta releases of the iOS operating system on this machine along the way to its current state with a production release of iOS 4.2.1 (8C148).

If the problem is due to a bug in one of the apps I have on the machine, or an interaction between two or more apps, I may not have yet hit this ignition point. And there is still a small possibility that the problem is mechanical hardware related and has just gone into hiding.

However, as I said at the beginning of this post, I feel strongly that my experience and what I read in the press support the fact that there is a huge number of electronic returns that are working just fine from a hardware perspective. Electronic hardware today is amazingly robust!  But us humans are extremely fickle and quick to point the finger at incorrect sources of problems. This combined with the unfortunate fact that it is often simpler, quicker and less expensive to use a 'swap' rather than diagnose and fix route to the solution is a sad truth that poor software is causing.

 

Wednesday, December 1, 2010

Case improvements for iPhone 4 and iPad

Putting your iPad, iPhone or Galaxy Tab into a protective case seems to be a have to do. Other than the antenna problems of the iPhone 4, I am sometimes wondering why I spend this extra money.  But I do and  I can cite than I've not broken or badly scratched the viewing part of any of these devices as yet, so I should take that as positive value for the investment.

One of the shortcoming of many of the 1st generation of these cases is that they block, or at least make access difficult, the ports and buttons. I have learned to do as much testing with plugs and connections early after buying a case.

It is good to see generation 2 of these cases starting to come out. These upgrades are starting to do a better job of allowing access to the connections. A leader in this area is the company Speck, they have a new iPhone 4 case and a iPad case that at least allows access to the Apple connector. Have a look at the photo of their new iPhone 4 case below. I was not able to find a good picture of the functioning of the case on the Speck web site, however the web site CoolBeta does a good job of showing it off for them.

The case might work as a stand by itself as well, although no report on this function. I hope that companies like Speck continue to innovate in these areas, these accouterments could really add value to the devices. This should make me feel better about the amount of money I spend on these accessories!

 

Update, the Speck web site does have a picture of the operation of the CandyShell Flip, but only for their pink version. Guess my 'guy eyes' just did not jump to the pink one, rather the black on.... :-)

 

candyflip-iphone4.jpg

 

Here is another example of a 'added value' case for the iPhone, one that adds a hard keyboard. Again CoolBeta does a good job of showing a picture that tells the story. This add on is from ThinkGeek . Adding hardware peripherals to phones and tablets is going to be another area where cases will augment the core device.

hardkeyboardcaseiphone.jpg

 

 

Sunday, November 28, 2010

Samsung Galaxy Tab Android Tablet, continued Part 3

I did not use the device very much in the last day. But here are a couple points I did find memorable. You will see a number of Galaxy Tab vs. iPad comparisons below, and I will report that I give the nod on most of them to the iPad. As I indicate, I need to give the Galaxy Tab some more time, I have used the iPad for almost seven months now and it has a real experience lead. And that does not always equate to being better:

* Voice command of the Android phone is very good for web and information searching. Using the combo of the Android 'microphone' and Google cloud to both convert your speech to text and do the search is a real powerful set. To my comparison mode with Android vs. iPad/Phone in this area, the Apple voice command system seems focused on two areas; voice dialing and iPod music control. Yes you can do other commands with Apple voice command, but is seems less useful and reliable once you leave the dialing and iPod control commands. On the Android, I've yet to figure out what [if any] commands will do a voice call. I think you can do it but is not obvious. However web searching and other commands like SMS texting are as close to 'natural' as I've seen on a voice controlled device to date.

* The power button location is on the right side on the Galaxy Tab. I need to be careful of my long time iPad owner bias, but so far I do find the iPad power button location on top more fluid.

* My comparison of hard buttons of the two tablets continues to the 'Home' button. So far, I find the iPad's concaved home button easier to 'find' and also it serves a better roll in helping 'orient' the tablet when you first pick it up. I use the power button on the Galaxy Tab for this orientation task [you often do this when you pull the tablet out of a bag or from a table where you have no idea how it was put down]. I realize that both tablets do have a autorotation function to make 'any side' up. But on both, I find this slows me down.

* More on buttons. On my first Android phone, the T-Mobile G1, the four standard 'hard' buttons had physical feel and feedback. On the Droid and Galaxy Tab, these are capacitive buttons with no feel. See the pictures below. I'm sure as I use the Galaxy Tab more, I will remember my finger placement, but having the feedback here is very nice in a mobile device. There is a usability factor that I am starting to get a stronger understanding of when you use a mobile device. When you first start a set of steps on a mobile device you often start using the device in an unstable or awkward position, having buttons and other physical feedback items gets your brain through these insecure first few moments of interaction and lets  you get to the 'value' steps faster.

android-droid.jpg

Motorola Droid

 

 

 

 

 

 

 

 

android-galaxytab.jpgSamsung Galaxy Tab

 

android-g1.jpgT-Mobile G1

 

 

* On a side note of the four physical buttons that are installed on almost all Android phones, different hardware manufactures seem to have the license to place the buttons in whatever order they want. Granted, not many folks are going to be regularly using two different Android devices, but I am. And as you can see between the Droid and Galaxy Tab pictures above, Motorola and Samsung have put three of the four buttons in different locations. G1 is different as well. Very difficult on my memory!

* On the auto-rotation function on the Galaxy Tab, I find it a bit more 'squirrely' then on the iPad. Both can be pretty annoying and I often find I've locked the orientation on both devices and then just 'deal' with turning the tablet. To this 'solution', that is why right now I find the iPad a bit quicker from 'on to usefulness' with its physical home button.

* Belkin Grip Vue silicon [or something like silicon] case. $29.95 at Best Buy. I like the product for two reasons; first the fit, finish and functionality of this cover is outstanding. This is not a full case for the Galaxy Tab, it only covers the back and edges of the unit. Nothing over the glass front. But it significantly enhances the 'grip-ablity' of the device. Second, kudos to Belkin for selling something that I doubt costs them more than dimes to make for THIRTY DOLLARS! Far too much markup, but what can you do.

I first purchased one of these for an iPad, I do want to report that the fit and usefulness of the Grip Vue is better on the iPad. On the Galaxy Tab, it does fit snugly but warps out along one edge and the fit around the power and volume buttons are not as useful as on the iPad. Also, because the iPad has more mass, the security you get after you start holding the iPad in the Grip Vue is greater. Still on the Galaxy Tab I feel better about 'one handing' it with it in the Grip Vue, but I really felt that way on the heavier iPad.

* Keyboard feedback. I am not sure as yet how to control this feature, but as you press 'keys' on the on screen keyboard on the Galaxy Tab, you get a 'vibrate' feedback. This is much better than the 'click' audio feedback on the iPad or iPhone. It does not tell you you're hitting the right key, but for some reason the vibrating feedback makes me more confident while typing.