Ich versuche hier zurzeit eine Kommunikation für 2 Megas untereinander aufzubauen. Als Daten sollen nur eine 8 Bit Zahl schnell vom Master zum Slave gesendet werden. Im Slave soll dann diese Zahl auf 6 Angeschlossene Geräte passend verteilt werden wo der Master also noch eine 3Bit Adressierung mitsenden muss. Meine Grundidee war es aufgrund Pinmangels den INT0 vom Slave als SendeStart zu benutzen dann 3 Pins für die Adressierung und ein 4Bit Datenbus der die 8bit Zahl jeweils als low und high byte schickt. Macht am ende 8 Pins verbraucht. Gibts ne möglichkeit das besser zu lösen? Ich denke wahrscheinlich zu kompliziert. Usart währe ne andere Möglichkeit aber es sollte alles Fix von statten gehen. Schönes Wochende euch , Gruss Sebastian
senden und empfangen mit 250000 baud über uart ist kein problem und läuft interruptgesteuert "nebenher" für die anderen parallelen Geschichten brauchste code, der Ausführungszeit beansprucht, wird vermutlich nicht viel schneller sein und du hast ne menge mehr IO frei. Wie schnell solls denn sein?
Tja das ist die Frage beim meiner Lösung brauche ich etwa 8 Takte zum senden. Die Verarbeitung am Slave sollte sich auch dahingegen bewegen. mir fehlt halt der Vergleich zwischen meiner Lösung und einer Usart Kommunikation bei welcher 11 Bit übertragen werden sollen.(3bit Adresse/8bit daten) MFG Sebastian
Usart würde mir persönlich schon vom Pin Verbauch und Schaltungsaufwand besser gefallen.
Ja das währe ja klar aber Geschwindigkeitstechnisch wo bewegen wir uns in Takten da ?
Sebastian wrote: > Tja das ist die Frage beim meiner Lösung brauche ich etwa 8 Takte zum > senden. > Die Verarbeitung am Slave sollte sich auch dahingegen bewegen. Kannste voll vergessen. Du brauchst mindestens schon 10 Zyklen, um in den Interrupt zu springen, Register sichern ist aber noch nicht bei. Und Verzögerungen durch andere Interrupts auch nicht. Schneller als mit nem Hardwareinterface (SPI, I2C, UART) gehts nicht. Höchstens per Memoryinterface und 74HC646 gekoppelt, kostet aber massig Portpins. Einer schreibt in den 74HC646 und der andere holt es ab, wenn er Zeit hat und setzt einen Pin, damit das nächste Byte gesendet werden kann. Peter
Wieso nicht einfach via SPI? Da kannst du mit CLK/2 übertragen und brauchst 3 Leitungen (MOSI/SCK/!SS), falls du wirklich nur Master->Slave kommunizieren willst. Wenn dir das zu langsam ist wirst du aber um ein parallel-Interface nicht drumherum kommen.
Meine Parallel Version hat den Vorteil das man Später bei bedarf noch einen slave hinzufügen kann den am Master ist genug frei. Würde dann auch mit Usart gehen blos da würde ich mir sorgen machen da ja alle Slaves ersteinmal in den Usart Interrupt gehen und dann erst per Zweiter Adressierung mitbekommen wer jetzt gemeint ist, was den jeweils anderen dann auch erst einmal in Pause versetzt. Schön wen man zuviel Auswahl hat... Würde was grundlegendes gegen den 4Bit parallel Datenbus sprechen?
>>Würde was grundlegendes gegen den 4Bit parallel Datenbus sprechen?
JAA der Verwaltungsaufwand in der Software um dies alles zu
organisieren.
Verwende die SPI Schnittstelle, und für jeden weiteren Slave benötigst
du nur eine PIN als Chipselect ( SS oder CS genannt).
Bedarf an Portpins ist 3Pins an alle Slave ( MISO, MOSI, CLK) und ein
Pin pro Slave (CS)
ah klingt ja sehr verlockend das schau ich mir mal näher an danke dir. MFG Sebastian
Sebastian wrote:
> Würde was grundlegendes gegen den 4Bit parallel Datenbus sprechen?
Ja, einiges, entweder musst du dem master signalisieren das du die 4
bits ausgelesen hast, oder du musst im Master eine feste zeit warten.
Wenn du das ganze via Interrupts machst hast du einfach das problem das
du deine Laufzeiten nur selten exakt vorhersagen kannst.
Wenn du eine der Hardware-Schnittstellen nutzt musst du dir um sowas
normal keine Gedanken machen. Bei SPI würde ich es so realisieren das du
beim Chipselect in einen Interrupt-handler springst und dort dann via
Busy-Wait die beiden Bytes (Addresse und Daten) ausliest. Das ist von
den Latenzen her ein wenig besser als zweimal auf den SPI Interrupt zu
warten. Wenn du wirklich schnell übertragen willst solltest du aber noch
eine Checksumme in irgendeiner Form mitführen, die ungenutzten 5 bits
der Addresse bieten sich dafür an. Beim Board-layout sollte man dann
auch ein bischen auf ungewollte Einflüsse achten
(Kapazitäten/Induktivitäten).
Sebastian wrote:
> Würde was grundlegendes gegen den 4Bit parallel Datenbus sprechen?
- langsamer
- braucht mehr Leitungen
- hoher Softwareaufwand (CPU-Last)
Wie schon gesagt, der Master muß immer schön warten, bis der Slave
endlich in den Interrupt gesprungen ist und die Daten garantiert
ausgelesen hat (Worst Case).
Hardware-Interfaces puffern aber mindestens 1 Byte (UART: 3 Byte) ganz
ohne CPU-Last.
Der Slave kann sie also später abholen, ohne das der Master solange
Däumchen drehen muß.
Peter
Danke euch allen, ich teste das jetzt per SPI und dem CS , gefällt mir persönlich auch besser so, da ich in der Schaltung ein paar Leitungen spare . MFG Sebastian
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.