Hallo, ich suche nach einer geeigneten Möglichkeit viele (bis 20) 7-Segementanzeigen an einen Atmega8 zu hängen. Dabei sollen die Anzeigen jeweils in ein seperates Gehäuse. Mir sind als Möglichkeiten dafür Schieberegister und Multiplexen bekannt. Gibt es dafür noch andere sinnvolle Möglichkeiten oder sind das schon die beiden besten Arten sowas zu bauen? Ich würde die LEDs nämlich gerne Adressieren, so dass man wirklich seriell ein 2 byte (Adresse u. Inhalt) in die Kette der LEDs schickt und ein IC vor der LED guckt, inwiefern die Adresse stimmt und wenn ja, das Inhalsbyte darstellt. Das wäre dann ein schön sauberer bus. Welche ICs wären für sowas geeignet und is das überhaupt möglich bzw. sinnvoll? Vielen Dank schonmal
pro segmentanzeige ein tinyXX , programmiern fertig Daten bekommt der dann über den UART Kann man sogar hintereinander schalten Master tx->rx Tiny tx->rx Tiny tx-> ....
Um wieviele Stellen geht es? Für zwei Stellen kannst Du zum Beispiel einen DS2408 mit zwei BCD-zu- 7-Segmente-Dekoder verwenden. Anbindung an die Zentraleinheit per 1-Wire-Bus. Für eine Stelle sind keine Dekoder notwendig. Vorteile: - weltweit eindeutige ID jedes DS2408. - relativ unproblematische Verlegung (zwei Drähte reichen). - Als Bus oder Stern zu verwenden. - 1-Wire-Master Protokoll gibt es für jeden beliebigen Prozessor.
Meinst du jetzt, dass der Tiny Daten über uart bekommen kann? Ich dachte jetzt, dass ich einfach mit dem Atmel an einem port jeweils clk mitgebe und das zugehörige Adressen bzw. Datenbyte immer mit high und low serielle in die kette takte. Doch wie signalisisiere ich dem tiny dann, dass 2 Bytes geschickt wurden. Bin da noch in ziemlichen neuland glaube ich :).
hab gerade den tiny2313 gefunden. der hat ja txd und rxd ports. kann der also einfach mit uart daten empfangen und senden? weil dann wäre das ja möglich zu realisieren. Dann sendet der atmega8 einfach daten mit uart und der kleine empfängt sie, guckt ob die adresse passt und wenn ja, dann stellt er das nächste byte was über uart kommt einfach an einer 7 segmentanzeige dar. soweit richtig?
Könnte klappen. Ich würde aber noch eine Prüfsumme übertragen. Du brauchst auch nur TxD und GND. Dabei kannst Du die Clients auch parallel an einen RS232-Port hängen, die dann alle gleichzeitig lauschen.
brauch ich dann überhaupt noch einen atmega8? dazu habe ich noch folgende frage: es werden ziemlich lange kabel zwischen den led kisten. bei einem anderen ähnlichen projekt wurde der bustakt dabei unsauber und es kamen störungen. wie kann ich dieses vermeiden. in jede kiste einen bustreiber und wenn ja welchen? und welche art von kabel sind dafür zu empfehlen?. wir sprechen von ca. 10 metern am ende.
10m sind für RS232 kein Problem, eventuell musst du aber mit + und - Pegel arbeiten also jeweil ein MAX232 verbauen. Aber wenn du nur ein 7 Anzeigen übertragen willst, kannt du ja auf 1200 Baud gehen da sollte es auch noch der 0/5V pegel tun. Wenn du 100% sicher gehen willst, und auch noch eine hohe übertragunsgeschwindigkeit könnte du auf RS485 setzten.
Aus diesem Grund empfehle ich den 1-Wire-Bus. Mit einem passenden Master (DS2482) und den IO-Bausteinen (DS2408) ist die Übertragung bereits abgesichert. Kabellängen von 30m mit Telefonleitung (ungeschirmt) sind kein Problem. Geschirmt darf es auch mal über 100m sein.
jeweils ein max232 ist aber ziemlich aufwäding oder? wäre es nicht einfacher einfach den bus zu treiben? und das signal damit sauber zu halten?
@ Christian H Aber ich möchte über die Leitung eigentlich auch noch meine 5V für die ICs übertragen und die Masse muss ja auch irgendwie weitergeschleift werden
1-Wire heißt, dass eine Leitung plus Masse benötigt wird. 5V kann entweder parasitär über die Datenleitung kommen. Alternativ kannst Du auch 5V über eine zusätzliche Leitung schicken. Dabei musst Du aber die Länge und den Widerstand der Leitung berücksichtigen. Bei 10m und 180mA (bei 7 leuchtenden Segmenten plus Logik) könnte der Spannungsabfall schon beachtlich sein. Besser ist immer eine dezentrale Versorgung. Oder Du benutzt 48V und hängst in jedem Client einen Schaltregler rein. So wird es jedenfalls bei Power-Over-Ethernet gemacht. Die 48V ist notwendig, damit am Ende (100m) noch genug ankommt um ein Gerät zu versorgen.
> jeweils ein max232 ist aber ziemlich aufwäding oder? wäre es nicht > einfacher einfach den bus zu treiben? und das signal damit sauber zu > halten? Der Tiny ist ja schon ein Treiber, aber er kann auch nichts gegen die Physik machen. Und es steht nun mal fest das ein 0/5V pegel sich nicht sonderlich gut übertragen lässt. Genau aus dem Grund nimmt man ja bei RS232 -11V/+11V bzw Stromschleife bei RS485.
ich würde aber eigentlich gerne bei den atmels bleiben, weil ein entwicklungsboard usw dafür schon vorhanden ist. gibt es den keine möglichkeit den bus der vom master ic gesendet wird einfach mit einem treiber pro client zu verstärken und zu säubern?
Also ich fasse mal zusammen. Ich möchte über die Leitungen irgendwie meine 5V u Masse weiterleiten. Dazu kommt eine serielle Datenleitung. Wenn ich diese jetzt mit dem RS232 Pegel verwende, dann kann ich also problemlos pro client einen max232 verwenden, der mir das signal auf den 5/0 pegel wandelt und das signal an die Tinys weiterleitet, die das Signal interpretieren. Funktioniert das? Wenn ja, welche Kabel verwendet man dafür. Das Signal soll ja störungsfrei laufen können. Ich brauch ja eigentlich nur 4 LEitungen oder? Einmal 5V, Masse, Serial IN und nen Serial Out der zurücksendet.
Die Signale, die aus Deinem Tiny rauskommen, sind bereits sauber. Sie verdrecken aber auf der Leitung zu Deinen Clients. Da kannst Du nur ein fehlerverzeihendes Protokoll (1-Wire-Protokoll) bzw eine fehlerverzeihende Infrastruktur (RS485/RS422) einsetzen.
fabian12345 schrieb: > Also ich fasse mal zusammen. Ich möchte über die Leitungen irgendwie > meine 5V u Masse weiterleiten. Dazu kommt eine serielle Datenleitung. > > Wenn ich diese jetzt mit dem RS232 Pegel verwende, dann kann ich also > problemlos pro client einen max232 verwenden, der mir das signal auf den > 5/0 pegel wandelt und das signal an die Tinys weiterleitet, die das > Signal interpretieren. > Funktioniert das? Im Grunde ja. Kommt jetzt auf dein Leitungslängen an, ob du die 5V da sauber und ohne zuviel Spannungsabfall verteilt kriegst. Zur Not könnte man auch die Versorgungsspannung auf 9V anheben und jeder Satellit kriegt einen 7805 spendiert. > > Wenn ja, welche Kabel verwendet man dafür. Das Signal soll ja > störungsfrei laufen können. Ich brauch ja eigentlich nur 4 LEitungen > oder? Einmal 5V, Masse, Serial IN und nen Serial Out der zurücksendet. Moment. Von zurücksenden war bisher noch nicht die Rede. Das wichtigste zuerst: Von welchen Leitungslängen reden wir jetzt konkret.
wenn du nur senden willst, brauchst du 3 Leitungen Masse +5V Daten Damit gehst du in den erste BOX und von dort weiter. Aber ich würde auch empfehlen die Spannung etwas höher zu wählen, etwas 12V und in jede BOX ein Regler einbauen. Damit hast du sicher 5V in jeder Box.
Aus dem Tiny raus ist doch nicht so wichtig oder? ich habe ja 20 Tinys vor denen 20 MAX232 hängen. die alle hören, ob was gesendet wird. und der rs232 pegel versorgt ja alle 20 led-kisten. Ich dachte der sollte recht störungsunanfällig sein?
fabian12345 schrieb: > Wenn ich diese jetzt mit dem RS232 Pegel verwende, dann kann ich also > problemlos pro client einen max232 verwenden, der mir das signal auf den > 5/0 pegel wandelt und das signal an die Tinys weiterleitet, die das > Signal interpretieren. > Funktioniert das? MAX232 ist hier Overkill (siehe unten). Es genügen meiner Meinung nach zwei FETs mit einigen Widerständen, welche die < -5V in +5V und > 5 V in 0V umsetzen. > Wenn ja, welche Kabel verwendet man dafür. Das Signal soll ja > störungsfrei laufen können. Ich brauch ja eigentlich nur 4 LEitungen > oder? Einmal 5V, Masse, Serial IN und nen Serial Out der zurücksendet. Serial IN brauchst Du doch garnicht. Oder möchtest Du eine Rückmeldung von den Displays haben? Eventuell irgendwelche Tasten verschwiegen?
die rückleitung hätte ich einfach gerne als controlle, ob der tiny versteht, was ich ihm sende. so als art statusbericht. die kabellänge ist ca. 10 meter am ende vielleicht auch ein kleines bisschen länger.
fabian12345 schrieb: > Aus dem Tiny raus ist doch nicht so wichtig oder? > > ich habe ja 20 Tinys vor denen 20 MAX232 hängen. die alle hören, ob was > gesendet wird. und der rs232 pegel versorgt ja alle 20 led-kisten. Ich > dachte der sollte recht störungsunanfällig sein? Also bei 20 Kisten würd ich nicht mehr darauf wetten, dass du die Versorgungsspannung aus der Datenleitung abzweigen kannst. Überleg doch mal, wieviel Strom so eine einzelne 7-Seg braucht, wenn alle 7 Segmente leuchten. Und das dann mal 20. 1 Ampere hast du da schnell beisammen. Aus der Datenleitung kannst du höchstens ein paar Milliampere rausziehen. Was ist so schlimm an einem 3-Draht Bus? (OK. 4-Draht wenns zurück auch wieder gehen soll. Verkompliziert aber alles, weil die Tinys sowieso nicht senden dürfen wie sie lustig sind, sondern nur nach Aufforderung vom Mega. Wenn aber das Kommando zu Senden vom Mega nicht fehlerfrei übertragen werden kann, wie soll der Tiny dann wissen, dss er senden darf?)
Dann würde ich an deiner Stelle EINEN Max.232 nehmen, und die Boxen alle mit UART ansteuern. Kommt günstiger.
die versorung für die LEDs(9V) sind auch extern geplant. aber ich möchte eigentlich die 5V für die ICs mit über die Datenleitung geben. Ich dachte 1 MAX232 fürt zu einer 5/0 Pegel übertragung, welche man bei den längen nicht verwenden sollte.
> 1 MAX232
hat immer ein Ein und ein Ausgang er macht also aus 0/5 -> -11/+11 und
aus -11/+11 -> 0/5 V
jaja, das weiß ich ja. Ich dachte nur die Übertragung über die Kabel sollte im RS232 pegel laufen. und die ledkisten wandeln dann jeweils seperat.
fabian12345 schrieb: > die versorung für die LEDs(9V) sind auch extern geplant. aber ich möchte > eigentlich die 5V für die ICs mit über die Datenleitung geben. Wozu soll das gut sein? Wenn du an jedem Baustein sowieso 9V hast, dann sieh doch einfach einen 7805 im TO92 Gehäuse vor, noch ein wenig Hühnerfutter und gut ists und du hast eine saubere Versorgung des Tiny. Die paar mA, die der Tiny braucht fallen im Vergleich zur 7-Seg nicht ins Gewicht. > Ich dachte 1 MAX232 fürt zu einer 5/0 Pegel übertragung, welche man bei > den längen nicht verwenden sollte. Die Ausgänge an deinem Mega führen 0V bzw. 5V. Ein Max232 setzt diese Pegel um auf +12V bzw. -12V Und er macht auch die Umkehrung +12V bzw. -12V auf 0/5V Der Max sitzt zwischen Mega und Kabel. Am Mega sind die Pegel 0/5V, auf dem Kabel sind sie -12V/+12V
fabian12345 schrieb: > die versorung für die LEDs(9V) sind auch extern geplant. aber ich möchte > eigentlich die 5V für die ICs mit über die Datenleitung geben. Wieso das? Wie gesagt, wird Dir von Deinen 5V am Ende nur noch wenige Volt übrig bleiben, die kein Logik-IC speisen können. Beim Tiny-V könnte es noch klappen (läuft ab 1,8V - soweit ich weiß).
genau. das megasignal soll auf 12V pegel für die kabel und dann danach in den clients wieder auf 5 V zurück.
fabian12345 schrieb: > genau. das megasignal soll auf 12V pegel für die kabel und dann danach > in den clients wieder auf 5 V zurück. Diese aber nicht zur Versorgung der Client-Logik, sondern nur zur Datenübertragung.
genau... meinte ich doch. das ich die kabel mit dem rs232 pegel verwende und dann in den clients für die ICs usw. dann den 0/5V pegel. Welche Kabel könnte man jetzt dafür verwenden, wenn keine 5V übertragen werden. Sondern wirklich nur Daten? Die Masse der ICs kann ich ja direkt auch über die externen 9V leitungen schicken
Leitungen: RS232/1-Wire: Einfache zweidrahtleitung, idealerweise geschirmt. RS485: 2 adrig Twisted-Pair (Telefonleitung), idealerweise geschirmt. RS422: 3 adrig (davon zwei verdrillt), idealerweise geschirmt. > Die Masse der ICs kann ich ja direkt auch > über die externen 9V leitungen schicken Die Masse der Leitung und die der Stromversorgung müssen verbunden sein.
fabian12345 schrieb: > genau... meinte ich doch. das ich die kabel mit dem rs232 pegel verwende > und dann in den clients für die ICs usw. dann den 0/5V pegel. Welche > Kabel könnte man jetzt dafür verwenden, wenn keine 5V übertragen werden. > Sondern wirklich nur Daten? Die Masse der ICs kann ich ja direkt auch > über die externen 9V leitungen schicken Das würd ich schon wieder mal nicht machen. Also: Du hast
1 | Hauptplatine |
2 | +---------------+ |
3 | | da sitzt der | |
4 | | Mega | |
5 | | | |
6 | | Max232 GND| |
7 | +- | ---------|-+ |
8 | | | Masse |
9 | | Daten +-----------------+-----------+----------+--- .... |
10 | +-----------------------+----|-------+---|--------+-|--- .... |
11 | | | | | | | |
12 | +--|----|+ +--|---|--+ +-|-|----+ |
13 | | | GND| | | GND| | | GND | |
14 | | | | | | | |
15 | | Tiny | | Tiny | | Tiny | |
16 | +-|---|-|+ +-|----|-|+ +-|---|-|+ |
17 | | | | | | | | | | |
18 | | +9 GND | +9 GND | +9 GND |
19 | | | | |
20 | 7-Seg 7-Seg 7-Seg |
So würd ich das aufbauen. Auf jede Tiny Platine kommt noch ein Mäuseklavier, mit dem ich einstellen kann welche Daten der Tiny anzeigen soll. Ich würd mir auch überlegen, ob ich das ganze nicht CAN-Bus mässig aufbaue. Sprich der Mega schickt nicht einem speziellen Tiny etwas zum Anzeigen, sondern der schickt Daten raus: "Achtung jetzt kommt die Geschwindigkeit, Jetzt kommt die Flughöhe, etc. (Geschwindigkeit, Flughöhe sind einfach nur Kennzahlen)." Jeder Tiny kriegt über sein Mäuseklavier eingestellt, was er anzeigen soll: Geschwindigkeit oder Flughöhe oder .... Wenn ein Baustein wegen Defekts ausgetauscht werden muss, braucht man ihm nur wieder einzustellen, was er anzeigen soll und fertig. Und warum sollen nicht 2 Tinys an diesem Bus dasselbe anzeigen (der eine im Wohnzimmer, der andere im Schlafzimmer). Ja es wär sogar denkbar, auf einer speziellen Satellitenplatine einen Umschalter einzubauen, sodass sich der Benutzer aussuchen kann was er sehen will ....
hm irgendwie wird mir das alles mit den bauteilen zu aufwänding und erscheint mir als nicht die ideale lösung. ich möchte doch einfach nur auf 10 - 15 m verteilte 20 7-segmentanzeigen mit einer adresse ansteuern können. und dabei sollen keine störungen auftreten können. gibt es da kein fertiges bussystem wie man sowas baut?
Wie könnte man das noch mal mit dem 1 Wire Bus bauen? Das hab ich noch nicht ganz durchschaut.
fabian12345 schrieb: > hm irgendwie wird mir das alles mit den bauteilen zu aufwänding und > erscheint mir als nicht die ideale lösung. Was ist da aufwändig? Pro Tiny Platine 1 Tiny 1 7-Segment 1 7805, samt Hühnerfutter (100n) entweder ein MAX232 oder etwas Hühnerfutter, wie von Christian weiter oben angeregt 1 Mäuseklavier 2 Stiftleisten, 2-pol, für den Busabgriff 1 einlötbare Schraubklemme für die 9V Versorgung je nach 7-Seg noch Bauteile zum Treiben der Anzeige Dazu noch Kabel mit jeweils einem Anschluss am Ende, welcher auf die 2-pol Stiftleiste passt. Damit stöpsle ich die einzelnen Module zusammen. Immer von einer Platine auf die eine Stiftleiste und von der anderen Stiftleiste gehts weiter zur nächsten Platine. Praktisch alles, ausser dem MAX brauchst du sowieso, egal wie du's es aufbaust. Und ob du statt dem Tiny irgendein anderes IC nimmst, ist Jacke wie Hose. Da nehm ich lieber die allgemeinere Lösung, die ich selber programmieren kann.
fabian12345 schrieb: > Wie könnte man das noch mal mit dem 1 Wire Bus bauen? Das hab ich noch > nicht ganz durchschaut. Der Aufbau ist praktisch identisch. Lediglich die MAX232 (bzw. äquivalentes Hünerfutter auf den Tiny Platinen) fallen weg und die Leitung geht auf u.U andere Anschlüsse am Prozessor. Der Einstieg auf RS232 wär mir das bischen Mehraufwand allerdings wert. Schon alleine deswegen, weil ich ein neues Modul dann zum Testen einfach an den PC hängen und mit Hyperterminal ausprobieren kann, ehe ich es irgendwo einbauen und später nicht mehr physisch rann kann. Nicht zu verachten: das Durchtesten aller Anzeigen, indem ich wieder mit dem PC und Hyperterminal an den Anfang der Kette gehe und dort Kommandos einspeise. Aber das mag jeder halten wie er will.
aber wie kommuniziere ich dann mit 1-wirebus. da kann man ja irgendwie senden und empfangen auf einer leitung.
fabian12345 schrieb: > aber wie kommuniziere ich dann mit 1-wirebus. da kann man ja irgendwie > senden und empfangen auf einer leitung. Der Master verwaltet die Leitung. Er schickt einen Befehl an einen Slave. Der Slave antwortet. Ansonsten hält der Slave den Mund. Der spricht nur, wenn er gefragt wird. Kannst du mit 232 auch machen. Dann hast du eben 3 Leitungen anstatt 2. Ist von den Kosten her auch schon egal (Da wär dann aber ein MAX232 anstatt des Hühnerfutters angesagter). Aber wozu soll eine 7-Seg Anzeigestation antworten? Was soll sie zurückmelden? Wenn sie das Kommando zum Anzeigen empfangen hat, dann zeigt sie auch an. Wenn sie es nicht empfangen hat, zeigt sie nichts an, wird dann aber auch auf die Anforderung nicht antworten. Was soll sie von sich aus großartiges zu melden haben? Dass eine LED durchgebrannt ist? Und RS232 ist über diese Distanz noch überhaupt kein Problem. Aber hey, wenn dir 1-Wire lieber ist. Ist auch ok. Soviel ändert sich da nicht.
hm... dann kann ich aber nicht mehr die attinys bzw. atmegas verwenden oder?
fabian12345 schrieb: > hm... dann kann ich aber nicht mehr die attinys bzw. atmegas verwenden > oder? Warum nicht? Sicher kannst du! Wenn ein IC irgendetwas in Hardware machen kann (moderates Timing mal vorausgesetzt), dann kann man diese Funktion auch in Software machen. Das ist ja das geniale an einem Tiny: klein, preiswert und per Programm auf extrem viele Aufgabenstellungen trimmbar, solange man mit der Rechengeschwindigkeit hinkommt (und die langt für vieles dicke)
wie baue ich mit rs232 denn eine adressierung? macht man sowas mit 2 bytes die man nacheinander schickt?
fabian12345 schrieb: > wie baue ich mit rs232 denn eine adressierung? Denk dir was aus. Wenn du 10 Leute vor dir stehen hast, wie verteilst du Befehle, so dass jeder weiß was er zu tun hat? > macht man sowas mit 2 > bytes die man nacheinander schickt? Zum Beispiel. Hängt auch von den Daten ab. Du brauchst irgendein Schema, so dass der Empfänger erkennen kann "Diese Bytes sind jetzt Daten" bzw. "diese Bytes sind jetzt Adressierung" zb. Du lauscht an der Leitung mit und siehst folgenden Text vorbeihuschen ...54A1D1;A2D123;A17D98;A2D98; Das könnte zb. bedeuten A1 Tiny an der Adresse 1 D1 deine Daten sind 1 A2 Tiny an der Adresse 2 D123 du zeigst bitte 123 an A17 Tiny an der Adresse 17 D98 bei dir will ich 98 an der Anzeige sehen A2 nochmal an Tiny 2 D98 vergiss die 123, jetzt wird 98 angezeigt .....
gut ich denke ich mache das über rs232 basis und schicke einen 0/5 Pegel über meine Leitungen (will nicht so viele max232 verbauen). ich habe nur angst, dass der bus irgendwann nach 10 m kabel unsauber wird. womit kann ich den am besten säubern? es muss dafür doch schöne treiberchips geben die das machen.
- 1.Sync Byte 0x00 - 2.Adr Byte 0xxx - 3.Daten 'Hallo World' pass aber auf das Dein Sync Byte nie in den Daten vorkommt! Ich verwende meistens 0x00. Das klapt prima wenn Du ASCII Zeichen versendest. Wenn Du in den Daten den kompletten "Zeichenvorat" brauchst mußt Du Dir was anderes ausdenken. Z8
fabian12345 schrieb: > gut ich denke ich mache das über rs232 basis und schicke einen 0/5 Pegel > über meine Leitungen (will nicht so viele max232 verbauen). ich habe nur > angst, dass der bus irgendwann nach 10 m kabel unsauber wird. womit kann > ich den am besten säubern? es muss dafür doch schöne treiberchips geben > die das machen. Platsch (Das ist das Geräusch wenn die Stirn auf der Tischplatte aufschlägt)
Das mit dem 1-wire vergiß, das ist nix für große Leistung. Nimm Deine ATtiny2313 und nen PCA82C251 (Reichelt: 0,78€) differentiellen Bus-Treiber, der kann bis zu +/-5V Gleichtaktstörung unterdrücken. Darüber läßt Du dann die UART (Halb-Duplex) laufen. Im 9-Bit Mode erfolgt die Adressierung. Die Adresse speichert jeder in seinem EEPROM. Alle Module hintereinander, d.h. nicht als Stern und die Enden mit je 120R abschließen. Peter
ps. mit 20 Slaves hab ichs noch nicht probiert. Mit 10 gehts mit RS232-Pegeln auf 20m mit 9600 Baud klaglos. (evtl. auch schneller, hab ich aber nicht getestet weil mir die Geschwindigkeit reicht) Gruß Z8
und das 12V signal bleibt wirklich sauber? es das wird ja nirgends gesäubert bei meinem plan
Peter schrieb: >>schöne treiberchips > genau es gibt sie, auf denen steht MAX232 RS-232 kannst voll knicken, wenn Du auch Rückmeldungen haben willst. Die differentiellen CAN-Treiber können das aber und brauchen nichtmal ne Richtungsumschaltung, wie RS-485. Also preiswert, einfach und störsicher, was willste mehr? Peter
kann ich jetzt den 5/0V pegel sauber über die 10-15 m schicken wenn ich in jedem client, wo der tiny steckt ne treiber haue? dann brauche ich doch nur 3 adern im kabel (mass, hin, zurück) und schon sollte das laufen. die adressierung geht ja wirklioch softwareseitig zu lösen irgendwie.
Fusseln vom Mund wisch, ja mit differentiellen Treibern (PCA...) sind auch 1000m kein Problem. Du brauchst 3 Leitungen (ohne VCC): GND und die beiden differentiellen Datenleitungen (bidirektional). Peter
Ich hab mich königlich amüsiert. Die Aufgabenstellung war doch recht simpel. Anzeigen über eine Distanz von mehreren Metern (lassen wir es mal 20 Meter sein) zu betreiben. Die Ausgangsidee war ein Prozessor, eine Leitung zur Datenübertragung, Schieberegister zur Anzeigendecodierung. Wenn man das vernünftig auslegt ists kein Problem. In dem Thread "74HC595 am Atmega8 => Verzweiflung" hats der Betreiber einfach falsch gemacht und wollt sich auch nicht so richtig beraten lassen. In diesem Thread wird eine Lösung kreiert, die meines Erachtes für diese Aufgabenstellung viel zu kompliziert ist. Es muß ein Übertragungsprotokoll entworfen werden, auch wenn es sich einfach darstellt. Es muß ein Mehrprozessorsystem geschrieben, debugged und getestet werden. In den diversen Anleitungen wird wild zwischen RS232 1-Wire RS485 (zu was das überhaupt hier gebraucht werden sollte ist eh fraglich) hin und hergesprungen. Da blickt doch keiner mehr durch. Die Ausgangsidee ist ok. Die Datenleitungen müssen halt vernünftig ausgeführt werden. Nicht mit den Prozessorpins senden, sondern über einfache billige Treiberbausteine, die diese Leitung treiben können. An jeder Anzeigeneinheit vernünftige Empfängerbausteine, dahinter die Schieberegister. Stromversorgug der Logik im Kabel mitführen und jede Anzeigeneinheit bekommt einen kleinen linearen Spannungsregler (Spannung auf dem Kabel mehr als 5 Volt) Es ist ein 1-Prozessorsystem, eine Software zu schreiben und zu testen, einfache Empfängerhardware, Funktionalität, wie sie der Fragesteller gewünscht hat, aber auch nicht mehr, und vor allem kein Schnick-Schnack. Voila, das wärs doch.
kurz schrieb: > Die Aufgabenstellung war doch recht simpel. Anzeigen über eine Distanz > von mehreren Metern (lassen wir es mal 20 Meter sein) zu betreiben. Du vergisst, dass der OP auch gerne sowas wie eine Adressierung hätte. Klar, könnte man auch mit Schieberegistern machen. Aber da muss dann die ganze 'In welcher Reihenfolge sitzen die Anzeigen am Bus' in den Master. Geht. Aber wenn man ein bischen Komfort will, ist es anders rum einfacher. > In diesem Thread wird eine Lösung kreiert, die meines Erachtes für diese > Aufgabenstellung viel zu kompliziert ist. Es muß ein > Übertragungsprotokoll entworfen werden, auch wenn es sich einfach > darstellt. Es muß ein Mehrprozessorsystem geschrieben, debugged und > getestet werden. Ach komm. Mehrprozessorsystem ist ein grosses Wort dafür. Die Slaves sind voneinander und vom Master unabhängig. Wenn man sich auf nur 1 Richtung beschränkt, braucht nichts synchronisiert zu werden. Sowas softwaretechnisch zu bauen ist simpel. Das hab ich fertig noch ehe du im Datenblatt nachgesehen hast, ob dein 595 den Dateneingang bei einer steigenden oder bei einer fallenden Flanke übernimmt. > In den diversen Anleitungen wird wild zwischen RS232 1-Wire RS485 > (zu was das überhaupt hier gebraucht werden sollte ist eh fraglich) hin > und hergesprungen. Da blickt doch keiner mehr durch. Da geb ich dir recht. > Die Ausgangsidee ist ok. Die Datenleitungen müssen halt vernünftig > ausgeführt werden. Nicht mit den Prozessorpins senden, sondern über > einfache billige Treiberbausteine, die diese Leitung treiben können. An > jeder Anzeigeneinheit vernünftige Empfängerbausteine, dahinter die > Schieberegister. Und wo liegt dann jetzt der Vorteil gegenüber einer Lösung mit Tinys? Hardwaremässig in etwa derselbe Aufwand, daher auch nicht billiger. Bei allerdings deutlich weniger Flexibilität
kurz schrieb: > Wenn man das vernünftig auslegt ists kein Problem. In dem Thread > "74HC595 am Atmega8 => Verzweiflung" hats der Betreiber einfach falsch > gemacht und wollt sich auch nicht so richtig beraten lassen. Es ist in der Tat nicht trivial, SPI störsicher über lange Leitungen zu übertragen. Ich habe da auch schon schlechte Erfahrungen gemacht. Und man braucht viele Leitungen, der OP will aber wenige Leitungen, was für ne SW-Lösung spricht. > In diesem Thread wird eine Lösung kreiert, die meines Erachtes für diese > Aufgabenstellung viel zu kompliziert ist. Nun, die Probleme in die SW zu verlagern hat den Charme, nicht immer ein neues Layout machen zu müssen, wenn man was ausprobiert. Einfach nur neu Flaschen. Daher hat es was für sich, die Hardware mit geringen Mitteln sehr störsicher zu machen und da ist differentiell einfach unschlagbar. Besser ist nur noch Lichtleiter. Peter
Es ging doch darum, die Displaydaten störungsfrei von A (Mega) nach B (Tiny) zu übertragen. Direkte 5V/0V Pegel wird auf größere Entfernung nicht klappen (Leitung = Antenne = Störungen). Alternative Seriell (RS232 in eine Richtung, also TxD und GND) mit +-12V. Alternative Stromschleife (RS485). Alternative Differentialsignal (RS422). Alternative 1-Wire (DS2482/DS2408) => kein Prozessor im Client. Alternative Funk (ist aber viel komplizierter). Bei RS232/RS485/RS422/Funk muß ein zusätzliches Protokoll her und muß programmiert werden. Bei 1-Wire ist es bereits vorgegeben. Datenübertragung per I2C vom Mega in den DS2482). Stromversorgung entweder über die Leitung (>12V) mit Spannungsregler im Client ODER eigene Stromversorgung des Client (Steckernetzteil), da 5V über 10m (oder mehr?) nicht gut geht. PS: Ich weiß immer noch nicht, wie viele Stellen pro Client angezeigt werden sollen. Ist es nur eine Ziffer oder gar mehrere?
fabian12345 schrieb:
> nur eine ziffer.. also eine anzeige
Was solls denn eigentlich werden?
Karl heinz Buchegger schrieb: > fabian12345 schrieb: >> nur eine ziffer.. also eine anzeige > > Was solls denn eigentlich werden? das frage mich langsam auch, ist schon der 5te oder 6te thread - und jedesmal die selben fragen - 10-15m lang, 1* 7seg pro einheit ... youtube sollte verbotten werden, echt.
Warum so kompliziert? Tiny mit RS-485-Treiber SN75167 versehen und den UART im 9-Bit-Modus benutzen. Das neunte Bit kennzeichnet eine Adresse und schaltet den durch die restlichen 8 Bit adressierten Busteilnehmer aufmerksam, oder, wie man in manchen Busprotokollen sagt, auf "Listen". Jede "falsche" Adresse deaktiviert einen Busteilnehmer wieder. Man kann das auch in 8 Bit implementieren, indem man ein Adreßpräfix benutzt, ein Byte, das nirgendwo anders vorkommen kann, um anzuzeugen, daß das nächste Byte eine Adresse ist. Die Datenrichtungsumschaltung kann wegfallen, wenn alle Busteilnehmer nur zuhören und der Master der einzige Sender ist. RS485 braucht zwei (im Idealfall verdrillte) Signaladern a und b, die geforderte Leitungslänge ist überhaupt kein Problem. Im Gegensatz zu RS232 ist es als Bus vorgesehen. 32 Teilnehmer gehen mit den erwähnten billigen Treibern. Mit teuren (Maxim, Linear...) sind mehr möglich.
Eine Alternative wäre PCF8574. Ist ein 8bit port expander mit I2C. Hat eine einstellbare 3bit Addresse (->8 Anzeigen) und ist billiger als ein Tiny mit allem drumm herum. Braucht nicht programmiert werden. Was will man mehr.
I2C ohne Treiberbausteine auf 10 Meter ist technischer Dummfug, um es mal krass auszudrücken. I2C wurde zur Verbindung von IC untereinander in einem Gerät entwickelt und ist seitdem so spezifiziert. Längere Leitungslängen gehen vernünftigerweise nur mit Leitungstreibern. Der erwähnte 75176 ist ok, ein MAX 488E ist auch keine schlechte Wahl. I2C auf langen Leitungen bedarf Treiber für Clk und Data, 4 Leitungen bei RS422 oder meinetwegen auch RS485. RS232 ist grenzwertig. Würd ich persönlich freiwillig nicht einbauen.
eine siebensegmentanzeige kann ja maximal 128 verschiedene zustände anzeigen, für die codierung aller zustände reichen 7 bit. also ist es gar nicht notwendig, über die datenleitung 9-bit pakete zu schicken - z.b. das msb als umschalter adresse/daten (wie schon oben vorgeschlagen) würde ausreichen. dann kann man mit dem gleichen aufbau und der gleiche codierung auch 128 slaves ansteuern...
>RS232 ist grenzwertig. Würd ich persönlich freiwillig nicht einbauen.
warum nicht?
Ist sogar für solche Kabellängen spezifiziert.
Einzuhalten sind nur die Übertragungsgschwindigkeit und die
Kabelkapazität.
Z8
@Z8 : Nicht freiwillig einbauen ist halt meine persönliche Vorliebe. Die Wandlung TTL -> RS232 und dann wieder zurück ist mir zu aufwendig. Klar macht das nur ein Treiberbaustein. Aber ne RS422 mit einem 8-pin MAX488 ohne Kondensatorbeschaltung zur Spannungswandlung ist doch viel eleganter. Die Übertragung ist robust, brauch mir keine großen Gedanken über das Kabel zu machen, Längen spielen auch nicht so die Rolle. Alles einfach angenehmer. RS232 war mal Standard, klar. Ich brauchs aber heut nur noch, wenn die zu steuernden Geräte RS232 vorschreiben. Ansonsten in die Mottenkiste zu den Modems, Schwarzweisfernsehern, Lochkarten und was weiß ich noch alles.
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.