Forum: Mikrocontroller und Digitale Elektronik MUX Ansteuerung mit AVR


von Helge Böhr (Gast)


Lesenswert?

Hallo.

Ich will gerne mit einen Multiplexer (den 74HC151N) acht Signaleingänge

zu den Komparator-Eingang eines MEGA 32 durchschalten. Ich will also
die 3 Steuereingänge des MUX über den AVR ansteuern, also am
Portausgang soll ein Signal anliegen, dass die einzelnen Kanäle
nacheinander durchschaltet.
Das Programm dazu (hier für 16 Eingänge ausgelegt):

#include <io.h>
#include <delay.h>
//...bla...
#define ACO ACSR.5
//...blabla...
void main(void)
{
    unsigned char ntc_mux; //Zählvariable f. ext. Mux
    //Initialisierung
    //...blablabla...
while(1)
{
    for(ntc_mux = 0; ntc_mux < 16; ntc_mux++)
    {
        PORTB &= 0xf0; //Mux Kanal setzen
        PORTB |= ntc_mux & 0x0f;
        delay_us(10000); //kurz warten
        if(ntc_mux < 8)
        {
            if(ACO) //Wenn Komparator-Ausgang 1
                PORTD &= ~(1 << ntc_mux); //LED ein
            else    //Komparator-Ausgang 0
                PORTD |= 1 << ntc_mux; //LED aus
        }
        else
        {
            if(ACO) //Kommentar siehe oben
                PORTC &= ~(1 << (ntc_mux - 8));
            else
                PORTC |= 1 << (ntc_mux - 8);
        }
    }
}
}

Es liegt ein schönes Rechtecksignal an den 3 Portausgängen des AVR's
an , aber der Multiplexer tut immer so, als ob die drei Steuereingänge
alle drei auf high sind, also der MUX schaltet immer nur den achten
Signaleingang durch, und nicht nacheinander die einzelnen Kanäle.
Ich kann mit meinem Uralt-Oszi nur die einzelnen Kanäle ansehen (danach
müsste es eigentlich funzen), aber ich weiß eben nicht ob die Signale
zeitlich richtig am MUX ankommen.
Ich hoffe ich hab das jetzt verständlich erlärt.
Wie krieg ich das hin, dass die Kanäle einzeln durchgeschaltet werden
?

Gruß Helge

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

Der 151 ist ein digitaler Multiplexer,der zudem noch die Ausgänge
negiert. Wenn du analoge Signale multiplexen willst brauchst du
Analogmultiplexer aus der 4000-der Baureihe (CD40.., 74HC40..).
Der 151 hat übrigens noch einen Freigabeeingang der ebenfalls
beschaltet werden muss damit das Teil spielt.

MfG HG

von Helge Böhr (Gast)


Lesenswert?

Hallo.

Die Signale sind schon digital, d.h. es geht hier um so NTC Sensoren,
die vorher über einen Komparator gelaufen sind.
Ich frag mich nur, warum der MUX die Kanäle nicht nacheinander
durchschaltet, sondern immer nur den Eingang I7 (I0-I7) durchässt.
Vielleicht mach ich da mit den Programm einen prinzipiellen Fehler; ich
 hab so einen MUX noch nie angesteuert...

Gruß Helge

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

Wie hast du den Strobeeingang beschaltet?

MfG HG

von Helge Böhr (Gast)


Lesenswert?

Den hab ich auf ground gelegt. Damit wird der MUX Ausgang überhaupt erst
aktiv, wenn ich das richtig verstanden hab.

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

@Helge: Ist Korrekt.
Veruche erst mal den Multiplexer ohne AVR anzusteuern.

MfG HG

von Egon (Gast)


Lesenswert?

DDRB |= 0x07 muß die Ausgänge aktivieren; ich finde die Anweisung nicht.

von Helge Böhr (Gast)


Lesenswert?

Hallo.

Stimmt, die Anweisung steht hier nicht im Programm, das hab ich noch
eingefügt, Entschuldigung.

Ich versuch jetzt mal zu erklären, was an dem Port vom AVR anliegt, der
das Steuersignal anliegt:
an S0: Rechtecksignal mit 3,33 Hz
an S1: Rechtecksignal mit 6,66 Hz
ab S2: Rechtecksignal mit 9,99 Hz
Ich glaub ich hab im Programm beim delay-Befehl noch eine 0 vergessen.
Das Steuersignal hab ich Bewusst ziemlich niederfrequent gewählt, weil
ich dachte, dass schnelleres der Mux nicht checkt.
Wenn die 3 Rechtecksignale zeitlich richtig kommen, dann müsste doch
der Mux die Kanäle einzeln durchschalten. Aber mit meinem alten Oszi
kann ich das schlecht darstellen. Da seh ich eben nur die
Rechtecksignale.

Gruß Helge

von Laeubi (Gast)


Lesenswert?

Also ich glaube das problem liegt dadran, das STROBE eine HIGHT to LOW
transition braucht um die anliegende Addresse zu übernehmen, zumindest
war das bei den MUXen die ich bisher verwendet habe so.
Damit verhindert man, das wenn die Adressen noch nicht stabil anliegen
irgenwelche Kanäle wild durcheinader geschaltet werden.
Versuchs einfach mal, den Strobe an nen Pin zu hängen, Strobe auf HIGH,
Adresse anlegen, Strobe auf LOW. VIeleicht hilft das.

(ggf braucht er en Vollen Takt, also Strobe auf High, Low, High, Low
das Datenblatt sollte AUskunft geben)

von Helge Böhr (Gast)


Lesenswert?

Also einfach mal auf das Rechtecksignal S0 mit den 3,3 Hz ?
Im Datenblatt steht hierzu nur:
"The strobe input must be taken low to enable this device, when the
strobe is high W output is forced high and consequently Y output goes
low."

von Laeubi (Gast)


Lesenswert?

Ne seh grad das ist Blödsinn.
Ich würds mal ohne Rechtecksignal probieren, und einfach vom AVR feste
Pegel an die Leitungen anlegen, und das dann mit nem Multimeter
nachmessen, ob das auch so beim Chip ankommt.
Eventuell mußt du auch erst JTAG deaktivieren (ist beim Mega16
zumindest immer standardmäßig an)...

von Helge Böhr (Gast)


Lesenswert?

Ja, ich glaub ich versuch den Mux mal ohne Avr anzusteuern, vielleicht
stimmt ja was mit den Mux nicht.
Warum JTAG deaktivieren ? (und was macht der JTAG eigentlich genau ?)
Das Steuersignal müsste ja eigentlich passen um den Mux anzusteuern. Es
liegt wohl eher am Mux.

von Laeubi (Gast)


Lesenswert?

Nene mit AVR geht das schon, aber sezt doch mal z.B. A = 1 B = 0 C = 1
in der SOftware ohne zu wechseln, dann guckst du ob die Pegel stimmen
am MUX und ob der richtige Kanal an ist.
JTAG ist ne DEBUG Interface an PORTC des AVRs wodurch wenn es aktviert
ist nicht der ganze PortC verwendet werden kann als IO

von Helge Böhr (Gast)


Lesenswert?

Ich hab das mit den Avr jetzt nicht aufgegeben, aber ich kann doch auch
die Steuersignale "manuell" anlegen, dann muß ich nicht gleich das
ganze Programm verändern (ich bin da nicht so fit...), also bloß mal zu
überprüfen, ob der Mux funtioniert.

von Helge Böhr (Gast)


Lesenswert?

Wenn die Steuereingänge "manuell" anlege, dann schaltet der Mux
tatsächlich nur den ausgewählten Kanal durch. Das hab ich gerade
ausprobiert.
Zu schnell kann das Steuersignal im Hz-Bereich doch auch nicht sein,
oder ? Und am strobe kann es auch nicht liegen, oder ?
Keine Ahnung was da los ist.

von Laeubi (Gast)


Lesenswert?

Ich würde sagen dann ist das Programm falsch ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.