Hallo Leute! Ich beschäftige mich seit vorgestern mit Mikrocontrollern, daher habt etwas Nachsicht :) Hab so gut wie keine Ahnung. Habe folgende Frage: Ich bastel mir seit einiger Zeit kleinere Schaltungen, wie Uhren etc. mit cmos bzw. ttl-ics. Ist ja ne feine Sache, nur etwas langweilig. Nun dachte ich mir, man kann das alles viel einfacher mit nem Microcontoller tun, spart ne Menge Bauteile. So, hab mir Freitag das AVR STK 500 bestellt und n paar Tutorials gelesen. Sieht alles ganz gut aus... D. h., ich weiß jetzt, wie man ne LED zum Leuchten bringt, hehe. Nun möchte ich aber ne Laufschrift auf nen alphanumerisches Display zaubern. Also n Display, was nicht sieben sondern 16 Segmente hat, zum Buchstaben darstellen eben. Wenn ich es direkt verdrahte, kriege ich nur 2 von den Dingern angekorkt, da ich ja nur 32 Ports habe. Daher muß ich die wohl per multiplexer ansprechen. Jetzt endlich meine Frage :): Kann mir da einer nen Tip geben, wie ich die überhaupt angesteuert kriege, kann natürlich für jede LED Code schreiben, aber is lästig und wahrscheinlich völlig überflüssig. Und kann mir einer nen Tip geben, wie ich die gemultiplext anspreche? Brauche ich da noch n cmos-baustein oder kann der µC das alles übernehmen. Vielen Dank für Eure Mühe :-) Gruß Jan
das mit den 32 ports ist blödsinn. im 4.bit modus brauchst du 7 ports, um mit dem display kommunizieren zu können, das genügt. die software im mikrocontroller sorgt dann dafür, dass das display das anzeigt, was es soll. das display kennt die ASCII-Tabelle. Da sind alle Zeichen, Zahlen etc. vordefiniert. alle diese zeichen kannst du am lcd darstellen. du brauchst zunächst mal die Ansteuersoftware für das lcd. dann musst du in der software festlegen, was du ausgeben willst. mit der laufschrift, das würde ich noch etwas warten lassen. du musst erstmal lernen, wie das prinzipiell geht, bzw. wie man text oder zahlen, oder sonst was ausgibt. ich selber habe da einige Ansteuerroutinen, aber nur für PIC-mikrocontroller, die laufen bei dir nicht. in der codesammlung hier im forum sollte so was für avr aber zu finden sein. oder von anderen leuten hier im forum.
Hi! Danke für Deine Antwort! Ich möchte aber eine LED-Segmentanzeige ansteuern, kein LCD. Die Anzeige hat keine eigene Logik, sondern besteht eben nur aus 16 dummen LEDs. Vielleicht hat noch einer ne Idee. Danke und Gruß Jan
Hallo Jan, hab' ich das richtig verstanden: Du hast mehrere einzelne 16-Segment-LED-Anzeigen? Was HDW beschreibt ist ein LCD mit Controller. Die sind viel einfacher anzusteuern. Fertigen Code für 16-Segment-Anzeigen habe ich noch nie gesehen, aber Du willst ja auch was lernen. ;-) Zum Multiplexen: Im Prinzip kann der Microcontroller das selber, allerdings muß man den Strombedarf beachten. Der AVR liefert am Portpin 20/25mA, das sind bei 4 Stellen dann durchschnittlich 5-6mA, was für die meisten Anzeigen recht wenig ist. Außerdem ist noch der maximale Gesamtstrom des AVRs zu beachten. Ist bei 7-Segment noch nicht so kritisch, bei 16-Segment vermutlich zu viel. Hier bei Bedarf entweder mit Einzeltransistoren oder mit Treibern wie dem ULN2803 nachhelfen. Der gemeinsame Anschluß an den Anzeigen braucht natürlich die 16fache Menge Strom, hier muß man auf jedenfall mit Transistoren nachhelfen. Es gibt im Internet viele Beispiele für gemultiplexte 7-Semgent-Anzeigen, schau Dir das doch mal an, das Prinzip ist ja das gleiche. Wenn Du weitere Fragen hast, stell sie ruhig. Mir ist jetzt nicht ganz klar geworden was Du über Multiplexen weist und was nicht. bye Markus
Hallo Markus! Du hast mich richtig verstanden; ich habe hier sagen wir 4 alphanumerische Anzeigen und möchte nen Text "drüberscrollen". Leider kann ich ja nur 2 direkt anschließen, wegen den begrenzten Port, daher muß ich das Ganze im Multiplexverfahren machen. Das Multiplexen ist per externer Hardware kein Problem, das krieg ich hin, nur wie steuer ich das jetzt an? Wahrscheinlich ist das aber alles noch viel zu schwierig für mich, da ich ja keine Ahnung habe :) Wenn ich mir also nen externen multiplexer bastel, habe ich bei 4 Anzeigen nur noch 20 Ports belegt + den Clock für den Multiplexer. Schonmal nicht schlecht, nur wiegesagt, ICH kann das nicht programmieren :-) N anderen Ansatz, den ich mir überlegt habe: Ich baue mir das mit nem dot-matrix display auf, sprich, ich nehme mir n Displays mit ner 5x7 Matrix, wäre wohl mächtig einfacher anszusteuern?! Würde ich 5 Stück drankriegen, mal abgesehen von dem Strom, aber das regel ich eh über Transen. Wäre das einfacher zu realisieren? Danke! Gruß Jan
Hi Jan, ich denke, das ein 5x7 Matrix schwerer zu programmieren ist als ein 7-Seg-Element. Warum nimmst Du nicht ein 74HC595 in Kombination mit zwei 74LS47 (oder ähnlichen)? Der 74HC595 ist eine 8Bit Porterweiterung die Du per SPI ansteuern kannst. Somit kannst Du an einen 595'er und zwei 74LS47 (BCD-zu-7 Segment) zwei 7-Seg-Elemente betreiben. Einfacher geht es nicht und Du benötigst nur drei Leitungen. Der Programmieraufwand wird auf ein minimum reduziert (ideal für Einsteiger). Gruss... Hans
Hallo Hans, danke für Deine Antwort. Die Idee ist nicht schlecht, hatte mir auch überlegt, die Displays mit nem LED-Treiber von Maxim anzusteuern, der ebenfalls nen SPI-Interface hat. Bevor ich anfange zu suchen, kannst Du mir vielleicht n Sample geben, wie ich das per SPI ansteuern kann? Danke und GRuß Jan
Hier ist ein Beispiel was ich in der schnelle zusammen gebastelt habe.
Bei Reichelt kostet der 74HC595 0,33Euro und der 7447 1,60Euro. Das würde für vier Segment 7,03Euro kosten. Ich habe hier noch ein paar V40511D (baugleich zum 7447, zeigt sogar A bis F an, neu ungebraucht) rumliegen für 1,00Euro pro Stück.
hallo wieso nehmt ihr nicht einen bcd to hex decoder? wie den 74ls154,.. hab das datenblatt mal angehängt. gruss tobias
Hi! Das mit der Hardware ist soweit ok, die Bausteine hab ich hier größtenteils rumliegen. Nur wie steuer ich das Geraffel denn nu an? Wiegesagt, mehr als led an und aus kann ich noch nicht, hehe. Muß mich wohl erstmal mit Tonnen von Tutorials beschäftigen :-) Gruß Jan
@Jan: Der Multiplexer braucht keinen externen Clock. Programmtechnisch geht das so: Du benutzt einen Timerinterrupt (z.B. mit 200Hz), damit Du in regelmäßigen und gleichmäßigen Abständen zum nächsten Element umschalten kannst. Die Ansteuerung geht so: Du gibst die Werte für das aktuelle Element aus (16 Segmente, also zwei komplette Ports des AVRs) und dann aktivierst Du diese Stelle, d.h. Du hast für 4 Stellen 4 Portpins und schaltest einen auf High und die anderen 3 auf Low. Beim nächsten Interrupt schreibst Du wieder die 16Segmente raus und aktivierst die nächste Stelle. Bei 5x7 Matrizen ist das Prinzip das gleiche, Du hast aber bei 5 Stellen insgesamt 25 Spalten, d.h. Du hast den 25-fachen Strom auf den LEDs (Im Datenblatt nachschauen ob die das können). Wenn das Programm hängenbleibt und nicht mehr weiterschaltet, dann brennt die gerade aktive Spalte wohl durch. Man braucht dazu im Prinzip 7+25 Pins, kann das aber durch geeignete Maßnahmen (z.B. Schieberegister) aber deutlich reduzieren. Du solltest Dir aber ernsthaft überlegen, ob Du nicht einfach ein LCD nimmst. Da gibts 1000 Beispiele dafür; das LCD im Bascom (Basic Programmierumgebung) zu benutzen ist eine Sache von 5 Minuten. Außerdem haben LCDs viel mehr Stellen, so daß man auch längere Texte darstellen kann. bye Markus
Im Anhang findest Du ein kleines Programm, welches ich zum testen und Verstehen der SPI-Schnittstelle geschrieben habe (Mega8 mit 8MHz). Du müsstest eigentlich nur die include-Datei ändern, es sei denn Du benutzt auch ein Mega8. In das Register R17 habe ich den Wert rein geschrieben, der ausgegeben werden soll. Gruss... Hans
@Markus Der Nachteil beim Multiplexing ist doch der, das man die Anzeige permanet refreshen muss und somit Prozessorleistung verlohren geht. Und zum anderen ist es für ein Anfänger doch sehr aufwändig eine solche Routine zu schreiben. Während bei der SPI-Variante man nur was ausgeben muss wenn man es wirklich benötigt. Der Bauteileaufwand ist ungefair der gleiche. Gruss... Hans
Hallo Markus! Also im Klartext korke ich jetzt die segmente alle an die beiden Ports und die 4 CA-Pins (gem. Anode) jeweils an den dritten Port!? Geeignete Widerstände und Transen mal vorausgesetzt. So, dann gebe ich im ersten Durchlauf die Kombination des Buchstabens, den ich haben will, auf die "Segment-Ports" und setze gleichzeitig den ersten CA-Pin vom dritten Port auf High. Damit seh ich dann den Buchstaben auf dem ersten Display. Beim nächsten Durchgang gebe ich den nächsten Buchstaben raus und aktiviere den zweiten CA-Pin. Und das alles mit nem Timerinterrupt von 200Hz gesteuert, damits nicht flimmert. War das alles soweit korrekt? Wenn ja, wie programmier ich das, hihi...Ok, blöde Frage, ich sollte weiter tuts lesen.. Gruß Jan
@Hans: Danke, werd ich mir gleich mal anschauen. Habe Freitag n STK 500 bestellt, das kommt mit nem 8515 on-board, habe auch noch nen 8535 rumliegen. Leider weiß ich jetzt noch nicht, wie ich das IC an den AVR anknote. Ich fand die Idee von Tobias mit dem bcd to hex decoder auch interessant, spart auch n paar Kabels :) Aber mit SPI is eben noch einfacher. Aber Ziel is eben die Ansteuerung der 16-Segment Anzeigen (oder ner 5x7Matrix), nicht der 7 Segment anzeigen und dafür gibt eben keinen BCD-to-16Seg.-Decoder, hehe... Außerdem WILL ich das nicht mit nem LCD machen, sondern mit feinen, selbstleuchtenden LED-Anzeigen :-)
Wenn Du das Multiplexen vermeiden willst, ist die Variante mit den 74HC595 eine gute Lösung. Für 4 16 Segmente sind das dann 8 74HC595 und 64 Vorwiderstände. Das mit den V40511D oder 7447 vergiß mal ganz schnell, die sind doch nur für 7-Segment geeignet. Peter
Ich schon wieder: Habe gerade das hier gesehen: http://s-huehn.de/elektronik/multiuhr/multiuhr.htm Sieht richtig gut aus. Er hat die einzelnen Anzeigen mit nem 4028 angesteuert, also nem bcd-zu-dec decoder.
@peter Ich würde dann jeweils 2 HC595 für eine Anzeige benötigen, da er ja acht outputs hat. Wären wir wieder beim SPI gelandet :) Wenn ich schon soweit bin, kann man es ja auch hiermit machen, oder? http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3379 Der kann gleich 4 5x7-Displays treiben.
@Jan: Hast Du mal geschaut, was dieser Chip von Maxim kostet? Reichelt hat ihn nicht, Segor will 45 Euro dafür... @Hans: Die Rechenleistung die verlorengeht ist vernachlässigbar. Wenn man annimmt, daß man bei jedem Durchgang 100 Takte braucht, dann sind das bei 200Hz 20.000 Takte/Sekunde. Das sind bei 8MHz Prozessortakt 0,25% der Gesamtleistung. Daß Multiplexing für einen Anfänger relativ kompliziert ist stimmt, aber Jan weis ja schon was das ist und die SPI-Schnittstelle zu aktivieren ist sicher genauso aufwendig wie einen Timerinterrupt zu aktivieren. bye Markus
Hmm, wollte mir das IC als Sample von Maxim holen, ist aber alles zu aufwändig. Und 45 Euro sind mir viel zu teuer. Für mich kommt jetzt entweder Multiplexing oder SPI in Frage. Die Bauteile hab ich bis auf den hc595 alle da. Ich weiß aber trotzdem immer noch nicht, wie ich den 595 ansteuere. Ich werd es als erstes mit Multiplexing versuchen, da ich dafür alles da hab (bis auf das stk 500, hehe). @Markus: Kannst Du mir dafür n Sample proggen? Also mit Timerinterrupt usw.? Wär Dir sehr dankbar! Suche schon die ganze Zeit im Web danach, aber so richtig schlau werd ich davon nicht. Muß mir erstmal die Bedeutung der ganzen Instructions reinziehen. Hab da noch 1000 Fragen, aber dazu später mehr :-) Danke und Gruß Jan
Hier hab ich nochwas gefunden, allerdings ist kein Sample-Code dabei.
@Jan: Bin auch erst gerade dabei, mich in die AVRs einzuarbeiten. Mein erstes Beispiel (Fernbedienungsempfägner) hab' ich in Basic programmiert. Da braucht man sich nämlich nicht um die ganzen Registernamen kümmern. Da geht das z.B. so On Timer0 Ontimer0 ' Interrupt-Routine für Timer0-Overflow Config Timer0 = Timer , Prescale = 8 'Takt: Quarz/8 Enable Timer0 ' Timer0-Overflow-Interrupt einschalten Enable Interrupts Und die eigentliche Interruptroutine: Ontimer0: ' Interrupt-Routine Timer0 = 210 ' ca. 10kHz ... Return Der Compiler ist Bascom, die Demoversion ist auf maximal 2KB Code beschränkt, was für den Anfang aber erstmal reicht. Es gibt hier http://www.rowalt.de/mc/ eine nette Einführung über die AVRs mit Bascom. bye Markus
Hmm, kann mir mal einer sagen, ob ich das ganze Geraffel jetzt in AVR-Studio, also Assembler oder in Bascom-avr proggen soll? Die einen sagen, Assembler ist das einzig Wahre, die anderen, bascom ist viel einfacher und genauso effizient. Bitte um Auskunft :)
Hi Weder ASM noch BASCOM C :-) Ein Beispiel zum Multiplexen von 7-Segment-Anzeigen in C kannst du auf meiner Homepage finden www.matwei.de -> Elektronik -> Lüfter-Drehzahlmesser Matthias
Hi, Bascom ist als Anfaenger fuer etwas groessere Sachen ganz ok. Asm ist besonders gut wenn man seinen Mikrocontroller richtig verstehen will. Zu C kann ich so nix sagen. @Markus Kaufmann Dein FB Empfaenger Prg ist nen bischen umstaendlich.'use byte library for smaller code $lib "mcsbyte.lbx" $regfile = "8535def.dat" $crystal = 7372800 ' Taktfrequenz $baud = 19200 Dim Address As Byte , Command As Byte Dim Wcount As Word Config Rc5 = Pinc.1 Config Timer1 = Timer , Prescale = 1024 Enable Interrupts Print "Waiting for RC5..." Do Getrc5(address , Command) If Address = 0 Then Command = Command And &B01111111 Print Address ; " " ; Command End If wCount = Timer1 'Erst Wert sichern Timer1 = 0 'Sofort Timer-Reset wCount = wCount \ 36 '1/100 Sekunde Print wCount;" "; Loop End so ist es einfacher musst dich nicht mit dem timer beschaefigtigen Mfg Dirk
Bascom: Schön einfach. Der Code ist meines erachtens nicht so wirklich effizient, aber es gibt "für alles und jedes" schon fertige Routinen. LCD, I2C-Bus, One-Wire-Bus, Infrarot (aber nur RC5) usw. usf. C (gcc/WinAVR): Ist wohl effizienter als BasCom (am konkreten Vergleich arbeite ich noch), man muß sich die Routinen oft erst aus dem Internet zusammensuchen. Deutlich hardwarenaher als Bascom, d.h. man muß oft die Registernamen kennen usw. usf. Der gcc ist kostenlos, d.h. wenn man mal die 2K der Demoversion überschreitet ist der gcc billiger Asm (AVRStudio): Die höchste Performance und die kleinsten Programme bekommt man nur mit Assembler. Und den höchsten Schwierigkeitsgrad verbunden mit der geringsten Flexibilität. Wenn ich z.B. in Basic oder C merke, daß mein Wert doch nicht in eine 8Bit-Variable paßt, dann ändere ich den Variablentyp (Aufwand: 5 Sekunden) und gut ist. In Assembler fängst du an, alle Vorkommen dieser Variable zu überprüfen und entsprechend anzupassen. Auch gibts gewisse Dinge (z.B. Fließkommazahlen) in Assembler (auf Microcontrollern) einfach nicht. Allerdings denke ich auch, daß man Assembler auf jeden Fall können sollte, auch wenn man es normalerweise nicht benutzt. Nur so kann man seine Hardware richtig verstehen und kann bei Compiler-Problemen einfach mal nachschauen was da passiert oder eben nicht passiert. Meine Empfehlung: Für den Anfang Bascom, damit bekommt man schnell Ergebnisse. Später dann C. Zeitkritische Sachen kann man ja trotzdem in Assembler machen, das schließt sich ja nicht aus. Ich habe mein erstes Projekt in Basic gemacht, bin gerade dabei das nach C umzusetzen und werde es anschließend in Assembler programmieren. Dann habe ich einen schönen Vergleich und kenne mich mit allem aus. bye Markus
@Dirk: Als ich die Bascom-Doku gelesen habe, da hab' ich mich voll gefreut, weil er RC5-Codes empfangen kann. Gleich ausprobiert, funktioniert leider nicht. Also kleine Routine geschrieben um die Werte vom IR-Empfänger (längencodiert) in ein Array zu schreiben. Ergebnis: Keine meiner 5 Fernbedienungen spricht RC5. Die von meinem Videorekorder (JVC) habe ich jetzt mal näher angeschaut, es wohl so ein japanisches Format. Das taste ich mit 10kHz ab und analysiere es dann. bye Markus
Hi, hehe nagut ok :> Ist deine FB keine RC5 FB. Jede lernbare FB macht RC5. Aber ne gute idee von dir. Mfg Dirk
Moin! Wenn ich Bascom nehme, könnt Ihr mir da n Buch empfehlen? Habe von Claus Kühnel gehört, der soll eins geschrieben haben, allerdings hat das sehr schlechte Bewertung bekommen. Aber im Inhalt stehen interessante Dinge, die ich wohl brauche, wie LED-Matrix ansteuerung usw... Jemand noch n anderes parat? bye Jan
Hi, das Buch von Claus Kuehnel kannst Du Dir sparen, wenn du englisch kannst. Die Online Hilfe ist extrem gut. Der nette Herr Kuehnel hat die Online Hilfe genommen und ins dt. uebersetzt (zum Teil). Saug Dir einfach mal die Demoversion und schau es Dir an. Mfg Dirk
@Jan: Ich hab' den Kurs von www.rowalt.de/mc gelesen und parallel dazu die Onlinedoku, damit konnte ich bis jetzt alle anstehenden Probleme lösen.
Hey, habe diesen Code für Bascom gefunden. Leider hab ich mein stk 500 noch nicht, aber hiermit kann ich wohl ne dotmatrix ansteuern. Leider versteh ich da gar nix, hehe. Wenn also ma jemand Lust hast, mir den Code kurz zu erläutern, ist nicht lang. Danke und Gruß Jan
Ich wieder. Werde die Matrizen jetzt mit nem 4514 und nem 74hc138 ansteuern. damit krieg ich bei 7 outputs 3 Matrizen angekorkt, also bei 32 ports insgesamt 12 Displays :-) Sollte reichen. Danke für all die Hilfe. Gruß Jan PS. Werde erstmal mit Bascom arbeiten, sieht recht easy aus; im Simulator hab ich den ersten Text schon fertig :) Muß nur noch laufen lernen...
Hallo, ich beschäftige mich auch zum ersten mal mit avr und deren programmierung. bin zwar auch noch ein newbie, kann aber evtl. etwas zu dem problem beisteuern. ich habe hier das elektorheft 11/2003 vor mir liegen. darin geht es auch um eine laufschrift mit 12Stk. 5x8 Dot-Matrix LED Anzeigen die über einen avr angesteuert werden. Dort wurde das Multiplexen ganz einfach gelöst ! die Zeilen sind ja je 8Bit breit, belegen also einen port. Muß also nur noch immer die Spalte gemultiplext werden. Dies machen die hardwaremäßig mit einem schieberegister ! (avr -> 74HCT164 -> ULN 2803 -> LED Anzeige und avr -> LED-Anzeige) Den Quellcode kann man bei Elektor runterladen !
Hallo an alle LED-Matrixer. Vielleicht etwas zu uneffizient und nicht umständlich genug, aber ich habe mit nur einem Zusatz IC ne LED-Matrix gebaut. Der CD4017 wird vom AVR getaktet und der AVR steuert die LEDs an. So kann ich insgesamt 10 Reihen Multiplexen, geht natürlich auch mit 7 oder 16 Segmentanzeigen. Da ich aber mehr als nur 1 1/2 Buchstaben drauf haben wollte, habbich insgesamt 15 Reihen gebaut, und mit entsprechenden ICs durchgetickt. Siehe Fotoanhang. Viel mir grad ein, wo alle die wildesten Ideen zum Thema Multiplex haben.
Hallo, keine Ahnung ob jemand damit was Anfangen kann, aber bei E-Lab gibts ein kleines Schaltbild (s. Anhang).
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.