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
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
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
Den hab ich auf ground gelegt. Damit wird der MUX Ausgang überhaupt erst aktiv, wenn ich das richtig verstanden hab.
DDRB |= 0x07 muß die Ausgänge aktivieren; ich finde die Anweisung nicht.
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
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)
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."
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)...
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.
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.