Forum: Mikrocontroller und Digitale Elektronik Atmega8 viele 7-Segmentanzeigen


von fabian12345 (Gast)


Lesenswert?

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

von ... .. (docean) Benutzerseite


Lesenswert?

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-> ....

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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.

von fabian12345 (Gast)


Lesenswert?

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 :).

von fabian12345 (Gast)


Lesenswert?

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?

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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.

von fabian12345 (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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.

von fabian12345 (Gast)


Lesenswert?

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?

von fabian12345 (Gast)


Lesenswert?

@ 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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

> 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.

von fabian12345 (Gast)


Lesenswert?

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?

von fabian12345 (Gast)


Lesenswert?

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.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von fabian12345 (Gast)


Lesenswert?

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?

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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?

von fabian12345 (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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?)

von Sebastian Heyn (Gast)


Lesenswert?

Dann würde ich an deiner Stelle EINEN Max.232 nehmen, und die Boxen alle 
mit UART ansteuern. Kommt günstiger.

von Thomas R. (tinman) Benutzerseite


Lesenswert?


von fabian12345 (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

> 1 MAX232
hat immer ein Ein und ein  Ausgang er macht also aus 0/5 -> -11/+11 und 
aus -11/+11 -> 0/5 V

von fabian12345 (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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ß).

von fabian12345 (Gast)


Lesenswert?

genau. das megasignal soll auf 12V pegel für die kabel und dann danach 
in den clients wieder auf 5 V zurück.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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.

von fabian12345 (Gast)


Lesenswert?

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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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 ....

von fabian12345 (Gast)


Lesenswert?

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?

von fabian12345 (Gast)


Lesenswert?

Wie könnte man das noch mal mit dem 1 Wire Bus bauen? Das hab ich noch 
nicht ganz durchschaut.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von fabian12345 (Gast)


Lesenswert?

aber wie kommuniziere ich dann mit 1-wirebus. da kann man ja irgendwie 
senden und empfangen auf einer leitung.

von Karl H. (kbuchegg)


Lesenswert?

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.

von fabian12345 (Gast)


Lesenswert?

hm... dann kann ich aber nicht mehr die attinys bzw. atmegas verwenden 
oder?

von Karl H. (kbuchegg)


Lesenswert?

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)

von fabian12345 (Gast)


Lesenswert?

wie baue ich mit rs232 denn eine adressierung? macht man sowas mit 2 
bytes die man nacheinander schickt?

von Karl H. (kbuchegg)


Lesenswert?

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
   .....

von fabian12345 (Gast)


Lesenswert?

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.

von Z8 (Gast)


Lesenswert?

- 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

von Karl H. (kbuchegg)


Lesenswert?

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)

von Peter D. (peda)


Lesenswert?

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

von fabian12345 (Gast)


Lesenswert?

???

von Peter (Gast)


Lesenswert?

>schöne treiberchips
genau es gibt sie, auf denen steht MAX232

von Z8 (Gast)


Lesenswert?

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

von fabian12345 (Gast)


Lesenswert?

und das 12V signal bleibt wirklich sauber? es das wird ja nirgends 
gesäubert bei meinem plan

von Peter D. (peda)


Lesenswert?

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

von fabian12345 (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von kurz (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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?

von fabian12345 (Gast)


Lesenswert?

nur eine ziffer.. also eine anzeige

von Karl H. (kbuchegg)


Lesenswert?

fabian12345 schrieb:
> nur eine ziffer.. also eine anzeige

Was solls denn eigentlich werden?

von maddin (Gast)


Lesenswert?

SAA1064

m.

von Thomas R. (tinman) Benutzerseite


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

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.

von Eduard S. (schneehase)


Lesenswert?

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.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Ich weiß nicht, ob I2C auf 10-15m störsicher genug ist.

von kurz (Gast)


Lesenswert?

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.

von gast (Gast)


Lesenswert?

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...

von Z8 (Gast)


Lesenswert?

>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

von kurz (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.