Does the 74LS138 and 74HC138 see data in different ways. Is it truly a drop in replacement?
Does the 74LS138 and 74HC138 see data in different ways. Is it truly a drop in replacement?
Before I go about trying to implement some of the suggestions, can anyone explain to me why my row's, when activated, only go to .98V? Also the ouput to my decoder from the PIC is at a constant 1.98, 1.98, .98 V (3 ouputs controlling 5 columns). Why is this so? I posted the code in a few posts back.
Voltmeter. I have the ground pin connected to the ground of my PSU and the + to the ouput of the respective pin on the PIC. Could it be something in the coding? I am also using the Return output of my PSU for ground.
You cannot measure the pulses with just an voltmeter. You need for sure an oscilloscope.
The measurement is an "average" of the pulses. So that value sounds OK on a voltmeter.
Ioannis
Ioannis,
I was working with Marcos on this and I am a little confused with the code and it using the decoder 74LS or HC138! We have the circuit working but the thing I noticed is that the PIC does not just give the 74LS138 just single HIGH and LOWS on the address lines. I used a logic probe since I don't have a scope at home and I am getting pulses. I also get pulses out on the outputs of the 74LS138. I can confirm this because I can see it when the leds light they have a pulse to them. In my experience working with electronics and looking at the data table for the 138 that it does not require a data stream but just highs and lows. The signal(pulses) I am getting is very fast. In my theory it should not require that fast of pulses for what we are doing. I should also be able to see the highs and lows at least from the 138 outputs that controls the column output lines.
I have attached a pic of the circuit and the code. If you could explain the code I would appreciate it. I am more of a VB6 programmer not a microprocessor programmer though I am learning.
If the code can be changed to not have those pulses going on it would make for a better circuit.
#include <pic.h>
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS &
UNPROTECT \
& UNPROTECT & BORDIS & IESODIS & FCMDIS);
int i, j, k, n, Dlay, CurLetter;
const char Letters[] = {
0b10000,
0b00000,
0b00000,
0b00000,
0b00000,
0b01000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00010,
0b00000,
0b00000,
0b00000,
0b00000,
0b00001,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00001,
0b00000,
0b00000,
0b00000,
0b00000,
0b00010,
0b00000,
0b00000,
0b00000,
0b00000,
0b00100,
0b00000,
0b00000,
0b00000,
0b00000,
0b01000,
0b00000,
0b00000,
0b00000,
0b00000,
0b10000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b10000,
0b00000,
0b00000,
0b00000,
0b00000,
0b01000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00010,
0b00000,
0b00000,
0b00000,
0b00000,
0b00001,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00001,
0b00000,
0b00000,
0b00000,
0b00000,
0b00010,
0b00000,
0b00000,
0b00000,
0b00000,
0b00100,
0b00000,
0b00000,
0b00000,
0b00000,
0b01000,
0b00000,
0b00000,
0b00000,
0b00000,
0b10000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b10000,
0b00000,
0b00000,
0b00000,
0b00000,
0b01000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00010,
0b00000,
0b00000,
0b00000,
0b00000,
0b00001};
main()
{
PORTA = 0; // All Bits are Low
PORTC = 0b000001; // Start With Top Left
CMCON0 = 7; // Turn Off Comparitors
ANSEL = 0; // Turn Off ADC
TRISA = 0b101000; // RA5/RA3 Inputs
TRISC = 0;
CurLetter = 0; // Start With "A"
while (1 == 1) // Loop Forever
{
for (Dlay = 0; Dlay < 25; Dlay++)
for (i = 0; i < 5; i++)
{
j = Letters[(CurLetter * 5) + i];
k = (j >> 2) & 0b010000;
PORTC = j & 0b111111;
PORTA = k + i;
for (n = 0; n < 259; n++); // 4ms Delay
}
CurLetter = (CurLetter +1) % 25; //Increment Letter
}
Thanks,
Kevin
Last edited by jukeman; - 28th November 2007 at 02:05.
Besides the factor that I don't understand the data block at the beginning of the snippet and also that I don't program in C, your code seems that is doing what is supposed to do.
There are 2 loops one inside the other, scanning the matrix with 4ms from col to col so a total of 20ms is achieved to scan the whole matrix. I cannot understand what is bothering you exactly. The pulses you mention have to be there! Otherwise cannot the display cannot be scaned. Am I missing something?
Ioannis
Bookmarks