Page 1 of 1

Why clear the High Green nibble?

PostPosted: Wed Feb 21, 2007 11:38 pm
by catalin_cluj
Hi John,
In "CamInterfaceAsm.s", why do you clear the high green nibble (line 243):
>>>
_acquirePixelBlock:

in ZL,RB_PORT ; sample the red value (PINB)
in YL,G_PORT ; sample the green value (PINC)
andi YL,0x0F ; clear the high nibble --------------------------------<<<HERE
ldd color,Z+RED_MEM_OFFSET ; lookup the red membership
in ZL,RB_PORT ; sample the blue value (PINB)
ldd greenData,Y+GREEN_MEM_OFFSET; lookup green membership
ldd blueData,Z+BLUE_MEM_OFFSET; lookup the blue membership
and color,greenData ; mask memberships together
and color,blueData ; to produce the final color
brts _cleanUpTrackingLine ; ...
<<<
I thought the high nibble has most info that we care about... what am I missing, please?
Did you somewhere swap the nibbles?


Thanks,

Cat

PostPosted: Thu Feb 22, 2007 7:30 am
by johno
It is the high-nibble of each pixel data bus we care about. If you check out the schematic, you'll see that the upper four bits of the OV6620's pixel data bus are connected to the lower four bits of the mega8's input port (this applies to both the Y and the UV data busses coming off the OV6620). The only reason that it is necessary to do the clearing of the upper nibble here is because the upper two bits on port C actually are utilized as part of the I2C bus. Port C on the mega8 is only a 6-bit bus.

So its ok to do a read of the entire 8-bit bus on the mega8 (and thus the "in YL,GPORT" instruction), but the upper four bits, which don't contain any pixel/color info, need to be cleared, so that just the lower four-bits serve as the index into the colorMap.

Make sense?

PostPosted: Thu Feb 22, 2007 7:03 pm
by catalin_cluj
Ahaaaaa....

It would have been too much for me to look at both schematics and code at the same time :roll:

I suppose port B gets it's high nibble cleared somehow too... even if I don't see it...

Thanks.

Cat

PostPosted: Fri Feb 23, 2007 11:58 am
by johno
Not exactly...the high-nibble of PORT B (in reality, only 2 bits of the nibble, since PORTB is only a 6-bit port) is unused when the system is operating. The upper two bits (4 and 5) ARE used during in-system reprogramming, but if a programmer isn't connected they are not connected to anything (and pulled low internal to the mega8, IIRC).