Forum: Mikrocontroller und Digitale Elektronik Grundlegendes zu SPI


von Vaterssohn (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits!

Ich möchte zwei dreistellige 7-Segmentanzeigen betreiben (10cm hoch).
Allerdings befindet sich eine davon ca. 100m vom ATMega8 enfernt. die
andere nur wenige Meter. Die beiden Anzeigen stellen immer exakt das
gleiche dar. Wegen des Verkabelungsaufwandes werde ich die Ansteuerung
glaub ich mit einem MAX7221 (oder 7219 Unterschied?) verwirklichen.
sind 100m nun zu weit für den SPI-Bus? Wenn nein, eignet sich ein
Netzwerkkabel (CAT7) für die Übertragung der Daten und
Versorgungsspannung? Um etwaige Leitunsverluste bei der Versorgung zu
umgehen, habe ich mir gedacht die Spannung bei der Quelle nach dem
Gleichrichter abzugreifen, und erst bei den Displays einen 7805 setzen.

Kann ich die beiden Displays parallel zum µC verbinden (sie sollen das
gleiche anzeigen), oder muss ich von einen MAX7221 zum zweiten
weitergehen?
Im Anhang noch die Beschaltung des MAX7221, wär nett wenn mir jemand
sagen könnte, ob ich die Grundlagen über das Anschließen von
7-Segmentanzeigen richtig verstanden habe!

von crazy horse (Gast)


Lesenswert?

bei 100m wirst um irgendwelche Leitungstreiber nicht umhin kommen, das
einfachste werden wohl RS485-Treiber sein.
Die 5V solltest du auf jeden Fall vor Ort erzeugen.
Allerdings brauchst du 3 Signale, um den MAX anzusteuern, Data, clk und
load, bei RS485-Treibern macht das 6 Signaladern + Masse + Vcc.
Stromschnittstelle wäre auch denkbar, braucht dann 3 Adern weniger.
Vielleicht die einfachste Lösung: vor Ort nochmal einen kleinen MC
platzieren und nur ein UART-Signal übertragen, kommt dann mit einer
Signalleitung aus. Dezentral machst du dann die UART->SPI-Wandlung.

von TravelRec. (Gast)


Lesenswert?

Yep, U(S)ART vom ATTINY2313 hat sich als sehr stabil bei langen Kabeln
herausgestellt, an beiden Enden gut terminieren und eine niedrige
Baudrate wählen, dann sollte das entfernte Disp noch alle Daten
mitbekommen. Verdrahtungsaufwand: 3 Adern (Vcc/GND/TX->RX).

von Hubert P. (vaterssohn)


Lesenswert?

Danke erstmal für eure Antworten!

Also wenn ich nur ein UART-Signal übertrage brauche ich keinen
Leistungstreiber? Sondern nur am anderen Ende einen kleinen µC bei der
Anzeige?
Meinen "Haupt-µC" verwende ich allerdings auch um Daten zu einen PC
zu schicken. Dann müsste ich also einem MAX232 und dem ATTiny2313
kommunizieren. Funktioniert das?
Meine Kenntnisse in diesem Bereich sind beschränkt, ich würde
ehrlichgesagt eine andere Lösung vorziehen. Wenn es eine gibt
natürlich.

von TravelRec. (Gast)


Lesenswert?

Also wenn schon max232, dann auf beiden Seiten, ansonsten reicht auch
das nackte 5V-TTL-Signal; bei geschirmter 2-adr. Leitung und guter
Terminierung. Das USART im ATTINY2313 hat den Vorteil, daß es die
ankommenden Signale sampled und vergleicht, bevor es die Entscheidung 1
oder 0 trifft. Dies trägt einer niedrigen Fehlerrate entscheidend bei.
Sicher geht das Ganze auch ohne Controller, aber dann mit mehr Drähten
und nicht so elegant. Und Dein HauptController muß nur einen Pin
opfern, um die Daten zu veschicken (vornehmlich einen UART -ausgang)

von Vaterssohn (Gast)


Lesenswert?

Sorry, ich glaube du hast mich falsch verstanden.
Ein ATMega8 verschickt daten an einen PC in geringer Entfernung. Daher
der MAX232. UND weiters möchte ich Daten auf die ca.100m entfernte
7-Segmentanzeige bringen.
Ich brauche das USART also für die Kommunikation zum PC und für die
Kommunikation zum Display. Funktioniert das? Ich hab noch nie damit
gearbeitet. daher macht mir das etwas Sorgen.

von Josef Zimmermann (Gast)


Lesenswert?

Klar Du brauchst 2 * RS232 Treiber (AVR)  und 2 RS232 Empfänger
(Display).

MOSI --- Treiber ------------------------------ Empf. -----
MISO-Displ.

CLK  --- Triber ------------------------------- Empf. ----- CLK-Displ.

Also 3 Leitungen, GND, RS232-MOSI, RS232-CLK

von Peter Dannegger (Gast)


Lesenswert?

Also Deine Schaltung kann nicht funktionieren.

Was sollen denn die UDNs darin, die setzen doch nur die Strombegrenzung
außer Kraft.

Der MAX7219 dürfte generell nicht für 100mm Anzeigen geeignet sein, da
diese viel Spannung benötigen.


Schau Dir mal den M5451 an, der kann an max 15V arbeiten:

http://www.st.com/stonline/books/ascii/docs/10411.htm



Peter

von Vaterssohn (Gast)



Lesenswert?

Die UDNs hab ich reingegeben, weil ich dachte der MAX7219 kann den Strom
nicht liefern. Das ist also Blödsinn.
Der M5451 ist dem M7219 bezüglich Funktionsprinzip, Ansteuerung etc.
eigentlich ganz ähnlich bis auf die höhere Spannung , oder?

Wäre euch dankbar wenn ihr mir nochmal genau erklären könnten wie ich
die Sache angehen sollte.
Die direkte Übertragung via SPI-Bus über 100m funktioniert also nicht.
Nur das UART-Signal zu übertragen würde funktionieren. Hierfür bräuchte
ich allerdings am anderen Ende auch einen µC. Ich hoffe soweit habe ich
das richtig verstanden.

Vielleicht hat ja jemand eine ganz andere Idee.
Gibt es z.B. eine kostengünstige Lösung das SPI-Signal drahtlos zu
übertragen?

danke!

von A.K. (Gast)


Lesenswert?

SPI müsste sich mit RS422-Treibern entsprechend verlängern lassen.

von Vaterssohn (Gast)


Lesenswert?

OK, ich hab jetzt diverse Datenblätter durchforstet, weiß aber nicht
nach welchen Kriterien ich diesen Treiber auswählen muss.
könnt ihr mir einen konkreten vorschlagen? Und mal grundlegend erklären
was der macht und wie ich den in die schaltung integrieren muss?
Bräuchte ich für die Übertragung des UART-Signal auch einen Treiber?

danke

von A.K. (Gast)


Lesenswert?

Beispiel:
AM26LS32 Treiber für SCK und MOSI am Controller.
AM26LS31 Receiver am 7-Segment-IC.
Evtl. gibt's auch welche mit nur je 2 pro IC, wie µA9638 und Co.

Macht GND+2xSCK+2xMOSI also 5 Leitungen Minimum, mit MAX7221.

MAX7219 geht nicht, der geht ohne LOAD nicht, der 7221 hingegen geht
mit CS=0.

Alternativ mit RS485 Treiber (z.B: 75176) für den Transmitter. Als
Receiver entweder einen µC der die LED gleich selbst treibt, oder einen
8-pin Tiny mit dem Analog Comparator als Receiver und Software UART.
Braucht nur 3 Leitungen.

von Vaterssohn (Gast)


Lesenswert?

Warum 2xSCK und 2xMOSI?

von A.K. (Gast)


Lesenswert?

Beispiel für 8-Pin Tiny als Receiver, und wie man ohne synchronen Takt
und ohne kalibierten Oszillator arbeiten kann. Wenn man beim Sender
einen Timer von irgendwo zwischen 100 und 50000 Hz rumliegen hat, der
noch einen PWM-Ausgang frei hat.

Beispiel für 1000Hz: Puls 100µs = low, Puls 300µs = high, Puls 600µs =
Übertragungsende. Aufwand Sender: 1mal pro Timer-Interrupt das
OC-Register setzen. Programmieraufwand Tiny: minimal.

Hardware: Sender: 75176. Empfänger: Tiny1x mit Analog-Comparator als
Receiver (2 Pins), SPI Ausgang (2-3 Pins je nach MAX-Typ). Kabel:
praktisch alles mit mindestens 3 Pins.

von A.K. (Gast)


Lesenswert?

"Warum 2xSCK und 2xMOSI?"

RS422/485 hat nunmal pro Signal 2 Leitungen.

von Vaterssohn (Gast)


Lesenswert?

Danke!

Das sieht mir nach einer passenden Lösung aus.
Ich werde mich dann mal intensiv in die Materie einlesen müssen.
Mit weiteren Fragen meld ich mich dann wieder ;-)
Wird wahrscheinlich nich allzulange dauern.

mfg

von Peter D. (peda)


Lesenswert?

"Der M5451 ist dem M7219 bezüglich Funktionsprinzip, Ansteuerung etc.
eigentlich ganz ähnlich bis auf die höhere Spannung , oder?"


Der M5451 macht kein Multiplex sondern steuert jedes Segment direkt an.
Für Deine 3 Digits reichen die 35 Ausgänge dicke aus.

Die Ansteuerung ist auch seriell, aber sonst wenig ähnlich.
Der M5451 wartet aber auf ein Startbit und dann kommen alle 35
Ausgangsbits.

Du brauchst also nur 2 Signale und die kannst Du prima über 2-fach
differentielle Treiber (SN75158) / Empfänger (SN75157) übertragen.


Peter

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.