#1 13. Juni 2012 7 segment anzeige ich hab mir selbst eine 7 segment anzeige mit leds gebastelt. leider fehlt mir dazu das programm. als treiber hab ich den uln2003 verwendet und eine schieberegister (74hc95). was ich möchte ist einfach per tastendruck die zahl um 1 erhöhen. also von 0-9 zählen. hab 4 solche segment. und bei 2 segmente soll die uhrzeit in min angezeigt werden. µc hab ich einen atmega32 von avr. hab schon etwas gefunden, allerdings nur in assembler. c wäre halt klasse. + Multi-Zitat Zitieren
#2 13. Juni 2012 AW: 7 segment anzeige Hier mal mein Code zum ansprechen eines 74HC1595. Lässt sich für das 74hc95 bestimmt recht leicht anpassen. Code: /* * Pollin_M8_74HC595.c * * Created: 11.05.2012 18:36:17 * Author: Julian * * MR = High * OE = Low * PB0 = STCP * PB1 = SHCP * PB2 = DS */ #include <avr/io.h> #include <util/delay.h> void shift_out(uint8_t data) { for(int i=0;i<8;i++) { if(data &(1 << i)) { PORTB |= (1 << PB2); } else { PORTB &= ~(1 << PB2); } PORTB |= (1 << PB1); _delay_ms(1); PORTB &= ~(1 << PB1); } PORTB |= (1 << PB0); _delay_ms(1); PORTB &= ~(1 << PB0); } Die Wartezeiten sind sehr großzügung und kannst du noch gemäß Datenblatt verkürzen. Das war allerdings nicht sehr schwer zu entwickeln, steht ja alles im Datenblatt des Schieberegisters und hat maximal eine halbe Stunde (wenn überhaupt) gedauert. Zum Ansteuern der richtigen Segmente kannst du der Logiktabelle folgen: Segmentanzeige – Wikipedia + Multi-Zitat Zitieren
#3 13. Juni 2012 AW: 7 segment anzeige Ja wo genau liegt das Problem? Damit solltest du erfahren wenn und wann eine Taste gedrückt worden ist. Tasten + Entprellung Der uln2003 Chip scheint ein einfaches Latsch zu sein, einfach mehrere Parallel an einem Port des ATmegas anschließen und bei einem Enable Signal am jeweiligen Latsch das Signal zu dem 7-Segement durchschalten. Pseudo: Code: main() { DDRB(Port b) auf Ausgang stellen an diesem Hängen die Latsches DDRC(Port b)auf Ausgang stellen an diesem Hängen die Enable Signale aller Latsches DDRA(Port b) auf Eingang stellen (Taster) while (1) { wenn taste gedrückt { portb = zahl die angezeigt werden soll portc |= (1 << PINLATSCH); -> impuls fürs jeweilige latsch portc &= ~(1 << PINLATSCH); ... genau so mit weiteren anzeigen verfahren } } } Mfg rushh0ur + Multi-Zitat Zitieren
#4 14. Juni 2012 AW: 7 segment anzeige tasten einlesen habe ich über den interrupt vor. ist doch viel einfacher. ich versuchs jetz einfach zu erklären: wenn ich zB. die taste drück dann soll 1 erscheinen (0110000b). das muss ich ja irgendwo definieren oder? oder weiß der uln das? oder machen wir es so. wie würde die software aussehen, wenn ich jetzt eine 5 schreiben möchte? + Multi-Zitat Zitieren
#5 14. Juni 2012 AW: 7 segment anzeige Taster einlesen über Interrupt macht nur dann Sinn, wenn die Interrupt Leitungen wirklich frei sind und wenn das Ganze kritisch ist (deswegen ja Interrupt). Deine Ziffer (z.B. 1) musst du natürlich in einer eigenen Funktion in den passenden Wert für das Schieberegister bzw dann für das Segment wandeln (den Wiki Link dazu habe ich bereits gepostet). Das ULN2003 ist laut Datenblatt nur ein einfaches Transistorarray und kein Decoder. Wie deine Software aussehen müsste, hängt ganz von deiner Verschaltung ab. Wenn du jemanden suchst der dir das Coded solltest du das im passenden Thread posten. + Multi-Zitat Zitieren
#6 14. Juni 2012 Zuletzt von einem Moderator bearbeitet: 14. April 2017 schaltung sieht eigentlich gleich aus wie diese: ------------------- hinzugefügter Beitrag -------------------- kann da keiner mehr weiter helfen? + Multi-Zitat Zitieren
#7 17. Juni 2012 AW: 7 segment anzeige Du hast bis jetzt keine einzige Zeile Code gepostet und dein Schaltplan ist nicht beschriftet, was die Segmente angeht. Es wurden bereits genug Tipps gegeben wie du weiter vorgehen kannst. Mir kommt es so vor als wenn dir sämtliche Grundlagen fehlen würde. Wenn du jemanden suchst der dir den Code schreibt, stelle eine Anfrage! + Multi-Zitat Zitieren
#8 17. Juni 2012 AW: 7 segment anzeige Du musst dir doch vorher überlegt haben, wie du das machen kannst?! + Multi-Zitat Zitieren