www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 Atmega Kommunikation


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Definiere "fix".

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Usart würde mir persönlich schon vom Pin Verbauch und Schaltungsaufwand 
besser gefallen.

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
11 bit mit uart wird wohl auf 2 byte 16bit hinaus laufen

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das währe ja klar aber Geschwindigkeitstechnisch wo bewegen wir uns 
in Takten da ?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>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)

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah klingt ja sehr verlockend das schau ich mir mal näher an danke dir.

MFG Sebastian

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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]
  • [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.