www.mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL OneWire Bus - einfache Variante


Autor: Christian Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hoffe ihr könnt mir weiterhelfen. Mein Problem liegt gerade ehr beim 
Verständnis!

Ich habe 2 FPGA Board mit jeweils einem Netzwerk aus MicroBlazes. Diese 
Boards sollen über eine Serielle Schnittstelle kommunizieren. Habe aus 
Hardwarerestriktionen nur ein Pin bzw. Kabel zur Verfügung. Von der 
Sache ist mein Problem recht simple. Ich möchte über die Schnittstelle 
32bit Wörter versenden. Das Serializieren ist schon realisiert. Bevor 
ich aber meine einzelnen Bits auf die "Reise schicke", muss ich 
überprüfen ob der Empfänger auch wieder bereit ist diese zu empfangen.
Meine Idee war es mit einem Tristate Driver (INOUT Port) und einem Pull 
Down die Leitung Standard mäßig auf Null zu halten. Bei einem 
Sendewunsch sende ich für einen Takt eine 1. Jetzt müsste der Sender 
Output abgestellt werden und am Eingang gelauscht werden. Der Empfänger 
soll nach dem er die 1 bekommen hat mit einer 1 Antworten. Dann werden 
die Daten versendet.
Beim Sender halte ich außer wenn Daten übertragen werden müssen, dass 
Signal auf Z. Also müsste doch durch den Pull Down nach dem die 1 
gesendet wurde, mein serielle Leitung wieder auf 0 abfallen, oder? Weil 
nur so kann ich ja die Antwort 1 erkennen.

Vielen Dank!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Vielleicht verstehe ich da was nicht!?
Wenn Du eine 1 für einen Takt sendest musst Du ja nach dem Takt wieder 
eine 0 anlegen. Wozu brauchst Du dann den Pull-Down?

Müsste die Leitung nicht auf 'Z' abfallen? Bei 0 Kommst Du in einen 
undefinierten Zustand.

LG
Thomas

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was du schreibst klingt logisch, aber warum machst du nich pullup + 
opencollector, das is 1. üblicher & 2. kurzschlusssicher.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Müsste die Leitung nicht auf 'Z' abfallen?
Was ist 'Z'? Wie kann man diesen Pegel ins FPGA einlesen?
> Vielleicht verstehe ich da was nicht!?
Kann sein... ;-)

Christian Heinz schrieb:
> Dann werden die Daten versendet.
Soll die Übertragung bidirektional sein?
Welche Übertragungsrate willst du?
> Bei einem Sendewunsch sende ich für einen Takt eine 1.
Von welchem Takt?
Haben beide FPGAs den selben Takt?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du Daten an einen Eingang senden willst, der auch als Ausgang 
dienen soll muss er vorher auf Hochohmig (Z) gesetzt werden. Bei 
Bidirektionalen hat man sonst 0 bzw. 1 anliegen und kann nichts 
reinsenden.

Autor: woko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie willst du vorgehen, wenn plötzlich beide zugleich senden wollen? Das 
solltest du verhindern, sonst sind die Datenpakete hinüber...

sg,
Wolfgang

Autor: elko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck dir doch mal den CAN-Bus an. Wenn ich das bisher richtig verstanden 
habe, ist das auch ein 1-Draht-Bus, der Kollisionen zuverlässig erkennen 
kann. Vielleicht kannst du dir ja was gutes abgucken?
Ich glaube, gelesen zu haben, dass der Sender selber mitliest, was er 
sendet. Stimmt das nicht mit dem überein, was er senden wollte, so 
wollte ein anderer gleichzeitig senden.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> auch ein 1-Draht-Bus, der Kollisionen zuverlässig erkennen kann.
Nicht nur das. Wenn eine Kollision erkannt wird, geht der Sender, der 
das rezessive Bit gesendet hat, freiwillig vom Bus, und die Übertragung 
geht weiter.

Aber noch immer sind ein paar Fragen aus dem 
Beitrag "Re: VHDL OneWire Bus - einfache Variante" unbeantwortet... :-/

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Insgesamt ist zu wenig über die Anwendung bekannt. Eine weitere wichtige 
Frage: Master-Slave-Kommunikation oder Multi-Master. Bei letzterem wird 
es schon spannender. Vor allem wenn hohe Datenraten benötigt werden.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antworten!
Ich möchte versuchen meine Anwendung im groben zu erklären:
Es geht um eine serielle Schnittstelle. Die Datenpakete laufen nur in 
eine Richtung, sprich es gibt einen Sender und nur einen Empfänger 
(Point-to-Point Verbindung). Der Empfänger sitzt dabei auf einem anderen 
FPGA. Beide Chips sind über einen Bus verbunden, also haben den selben 
Takt. Mein Problem sieht somit folgender Maßen aus:
Der Sender nimmt sich ein 32bit Paket aus einem FiFO und schickt es 
seriell bitweise über den Bus. Empfänger bekommt es und schiebt das 
zusammengesetzte 32bit Wort in einen FiFo. Jetzt gibt es aber den Fall, 
das der Empfänger FiFo voll ist, sprich Empfänger kann keine neuen Daten 
empfangen. Dies bekommt der Sender aber nicht mit! --> evtl. 
Datenverlust
Meine Idee war jetzt die Ports jeweils als IO zu konfigurieren. Sender 
sendet ganz normal, falls der Empfänger aber nicht bereit ist, soll er 
das Signal ändern (z.B. auf Null ziehen). Und an diesem Punkt stehe ich 
jetzt und komme nicht weiter.
Funktioniert es, dass der Sender ein  bit überträgt und gleichzeitig 
prüft ob das bit auch auf der Leitung anliegt, oder ob der Empfänger es 
verändert hat? Wie ist das zu realisieren?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.