Hey Danke,
die Eingänge hingen wirklich in der Luft ;P
Habe es endlich geschafft dem IC Leben einzuhauchen![]()
Steuer den Demux jetzt mit nem ATmega32 an,
und verwende folgendes Programm:
Im Moment schalte ich also nur die Ausgänge S0 - S4,Code:#include <avr/io.h> #include <stdint.h> int #define F_CPU 512000UL #include <util/delay.h> #include <avr/interrupt.h> void main() //Schaltet LED 1 - 5 { DDRD = (1 << PD5) | (1 << PD6) | (1 << PD7); //Ausgänge definieren DDRC = (1 << PC0) | (1 << PC1); while ( 0 < 1) { int dauer = 10; LED(1); Sleep(dauer); LED(2); Sleep(dauer); LED(3); Sleep(dauer); LED(4); Sleep(dauer); LED(5); Sleep(dauer); } return(0); } void Sleep(int dauer) { TCNT1H=0; // Timer Daten Register Timer1 High auf 0 Setzen TCNT1L=0; // Timer Daten Register Timer1 Low auf 0 Setzen TCCR1B |= (1 << CS00) | (1 << CS02); int zaehler= 0; while ((TCNT1 < 500) | (zaehler < dauer)) { zaehler++; } return(0); } void E(int w) //EINGÄNGE { switch(w) { case 1: PORTC |= (1 << PC0); // DEMUX Eingang A break; case 2: PORTD |= (1 << PD7); // DEMUX Eingang B break; case 3: PORTD |= (1 << PD6); // DEMUX Eingang C break; case 4: PORTD |= (1 << PD5); // DEMUX Eingang C break; } return(0); } void LED(int n) //siehe Tabelle Demux 4514 { switch(n) { case 1: Str(); break; case 2: E(1); Str(); break; case 3: E(2); Str(); break; case 4: E(1); E(2); Str(); break; case 5: E(3); Str(); break; } return(0); } void Str() //Strobe: damit der Demux Eingänge verarbeitet { PORTC |= (1 << PC1); //Strobe an Sleep(1); // Ohne zu schnell für IC(komisch?) PORTC &= ~(1 << PC1) | ~(1 << PC0); //Strobe und alle anderen Eingänge aus PORTD &= ~(1 << PD5) | ~(1 << PD6) | ~(1 << PD7); return(0); }
es werden die Ausgänge aber komischerweise in folgender Reihenfolge geschaltet:
S0, S2 und S3.
Mehr geht nicht.
S1 und S4 lässt er einfach aus![]()
Dort ist auch keine Zeitverzögerung festzustellen.
Hat einer von euch ne Idee?
Bin auf jeden Fall schonmal richtig happy das das jetzt geklappt hat![]()
Vielen Dank,
Grüße mize03







Zitieren

Lesezeichen