Multi-Processor Communication Mode

dino03

Aktives Mitglied
27. Okt. 2008
6.760
20
38
Sprachen
  1. BascomAVR
  2. Assembler
Hallo alle,

ist mal nur so eine Interessenfrage. Kein aktuelles Problem.

Hat schon einmal jemand beim UART dem MPC-Mode ausprobiert ?
Da werden ja 9 Bit übertragen und das TXB8 wird zum Umschallten
zwischen Adressen- und Datenmodus verwendet.

Würde mich einfach mal interessieren ob das schon mal einer
umgesetzt hat und wie so die Erfahrungen damit waren. Auch
in der Hinsicht, mehrere ATmegas damit zu einem Bus-System
oder Netzwerk zusammenzuschalten.

Gruß
Dino
 
Chat-Protokoll

An alle Interessierten ,
hier mal ein Chat-Protokoll über MPCM (Multi Processor Communication Mode)
von heute Abend ...


[Markus] 10:02 pm: Sooooo, und eigentlich wollten wir uns über MPCM unterhalten, oder?

[Knickohr] 10:03 pm: ist das was unanständiges ?

[Nomis3000] 10:03 pm: Alder: Was ist MPCM?

[dino03] 10:03 pm: Ich such gerade die ELOs durch...

[Dirk] 10:03 pm: Ja Markus. Hast du schon ins Datenblatt geschaut?

[Knickohr] 10:03 pm: Puls Code Modulation ?

[Markus] 10:03 pm: Ja: Setting the Multi-processor Communication mode (MPCM) bit in UCSRA enables a filtering
...function of incoming frames received by the USART receiver. Frames that do not
...contain address information will be ignored and not put into the receive buffer. This
...effectively reduces the number of incoming frames that has to be handled by the CPU,
...in a system with multiple MCUs that communicate via the same serial bus. The transmitter
...is unaffected by the MPCM setting, but has to be used differently when

[Knickohr] 10:03 pm: aber was soll das M

[Knickohr] 10:04 pm: Kann das einer übersetzen, das es ein Doofer auch versteht ?

[Markus] 10:04 pm: Es gibt den MPCM wirklich. Jetzt prüfe ich gerade ob es dazu was unter BASCOM gibt und ob
ich noch mehr Infos dazu rausbekomme!

[dino03] 10:05 pm: Multi Processor Communication Mode

[Markus] 10:05 pm: Basiert auf alle Fälle auf dem USART-Standard RS485, geht über viele viele Meter / Kilometer
und wird mit 120 Ohm a b***h lossen!

[Markus] 10:05 pm: a b***h lossen = a b g e s c h l o s s e n

[Knickohr] 10:05 pm: Das ist doch das Pendant zu RS232 ?

[dino03] 10:06 pm: b***h ! ELO 5/1986 Das interessante IC - Maxim 232 ****

[Knickohr] 10:07 pm: 232 ist glaube ich spannungsgesteuert, 485 stromgesteuert. Oder ?

[Markus] 10:07 pm: MPCM (Multi-processor Communication Mode)
...
...Im Prinzip muss man ihn aktivieren. Der USART reagiert dann nur wenn ein Datenbyte mit gesetztem 9. Bit
ankommt. Man kann das Datenbyte dann lesen und mit dem vorher gespeicherten Wert vergleichen. Passt der Wert
schaltet man das Bit ab damit alle Datenbytes empfangen werden können. Ist der Frame zu Ende setzt man das Bit
wieder.

[Dirk] 10:08 pm: MPCM ist doch eher Protokollbezogen, RS232, RS485 ist eher hardwarebezogen.

[Knickohr] 10:08 pm: ich blicks nicht

[Nomis3000] 10:09 pm: Richtig: Wenn man weiß dass man ein RS485 am weken hat weiß man noch lange nicht
obs jetzt CAN Profibus oder sonst was ist.
[Markus] 10:09 pm: Bei RS485 sendest du keine einzelnen Bytes sondern ein kurzes Protokoll. Das Protokoll b***h
t immer aus einem Adressbyte, einem Byte für die Datenlänge, 1-255 Bytes Daten und idealerweise noch ein Byte
Checksumme (bei I2C ist das ja so ähnlich, da muss man auch erst eine Adresse senden und dann die Daten)
...
...Bei RS485 gibt es jetzt noch eine b***h eit. Normalerweise sendet man ja pro Datenbyte ein Startbit, 8 Datenbits
und ein Stopbit. Für RS485 nutzt man die Möglichkeit 9 Datenbits zu senden

[Markus] 10:09 pm: Ich kann mir nicht helfen aber irgendwie schließt sich für mich der Kreis zum MODBUS

[dino03] 10:10 pm: So wie ich es verstanden habe, ist der Mega so lange passiv an dem Bus, bis er seine
eingestellte 9Bit-Adresse sieht. Dann schaltet er aktiv und empfängt alle Bits im UDR von der Seriellen.

[Markus] 10:10 pm: Ja, ich auch!

[Dirk] 10:11 pm: Ja, aber wieviel Bytes empfängt er nachden die richtige Adresse erkannt wurde, nur ein Byte, wie
groß ist der Frame?

[dino03] 10:11 pm: Da steht nix vom Frame. Er empfängt so lange, bis man ihn wieder passiv schaltet

[Markus] 10:12 pm: Doch, es steht doch etwas von einem Frame drin!

[Markus] 10:13 pm: Und zwar das RXB8 identifiziert eine Adresse oder ein Datenframe. O-Ton: When the frame type
bit (the first stop or the 9th bit) is one, the frame contains
...an address. When the frame type bit is zero the frame is a data frame.

[Dirk] 10:13 pm: Aha, also entscheidet man das eigentlich rein per Software, der Master muss wissen, dass nach
der Adresse x Bytes folgen, der Slave auch.

[dino03] 10:13 pm: Die meinen mit dem Adress-Frame aber anscheinend nur den 9- b***h men der adresse

[dino03] 10:13 pm: 9-Bit-Ra hmen

[dino03] 10:14 pm: Also ist dieser Frame eigentlich nur das Empfangene "Byte" (na gut 9-Bit langes Byte)

[Dirk] 10:15 pm: Also Master setzt Bit 9 und sendet Adresse, Slave-Hardware (?) verleicht die Adresse, wenn die
stimmt, dann empfängt der Slave die folgenden Datenbytes (Bit9=0), ansonsten kommt nichts ins Eingangsregister
des Slaves.

[dino03] 10:15 pm: Das Protokoll wird meiner Meinung nach nur über die Software selbst gemacht. Man hat aber die
hardware- b***h leunigte Bus-Anbindung

[Markus] 10:15 pm: Soweit ich das verstanden habe kannst Du 5-8 Bit Nutzdaten versenden!

[dino03] 10:15 pm: besc hleunigte

[dino03] 10:17 pm: Soll ich den Teil vom MPCM mal aus dem Chat in den Thread kopieren ??

[Markus] 10:17 pm: The addressed MCU will receive all data frames until a new address frame is
...received. The other slave MCUs, which still have the MPCM bit set, will ignore
...the data frames.

[Markus] 10:17 pm: @Dino; JA

[Markus] 10:17 pm: Für mich stellen sich aber nach wie vor Fragen:

[Markus] 10:17 pm: 1. Wie sieht es mit einem Rollentausch aus?

[Markus] 10:17 pm: 2. Wie funktioniert die Arbitrierung bei gleichzeitigem Busszugriff

[Markus] 10:18 pm: Aber das scheinen alles Fragen zu sein die man in der Software b***h andeln muss. O b***h l
ich mir schon vorstellen kann, dass grundlegende Themen bereits in HW b***h andelt werden, oder?

[Markus] 10:20 pm: Soooooo, liebe Leut, so langsam höre ich auch mein Bett rufen und dort werde ich mich langsam
auch zurückziehen. Meine Tochter hat mir heute morgen um 7:40 schon erzählt, dass sie eine Nutellabrezel zum
Früstück will und ich doch nun bitte aufstehen und mich dorthin bewegen soll.

[Dirk] 10:20 pm: Also ich müsste mir mal den b***h im Datenblatt genau durchlesen, im Moment sehe ich das so,
dass Master und Slave wissen müssen, wie groß ein Frame ist, Synchonisiert wird mir Senden der Adresse, vermute
ich mal.
 
Hallo Dino!

Poste hier mal einen LINK zum Thema....... nur in einem anderen Forum.

Habe ich über Google gefunden.
Vielleicht hilft es ja weiter....

Lies mal das 8. Posting! ;)


Gruß,
Cassio
 
RS232-LAN aus ner alten ELO

Hallo ,

ich hab es in den alten ELOs leider nicht mehr gefunden. Muß ich nochmal
gennauer suchen. dafür hab ich die selbstgebauten Adapter für meinen
Amiga gefunden.

Hier die Verschaltung ...

RS232 - 25pol-SubD (weiblich)

Pin4 --- Pin5
Pin6 --- Pin8 --- Pin20
Pin7 ---(LAN-GND)
Pin3 ---1k5---(LAN-Signal)---1N4148||12k---Pin2

Die Diode (1N4148) ist mit der Anode am Pin2.
Also ...
Pin2--->|---(LAN-Signal)
Und dann parallel zur Diode der 12k Widerstand.

Man empfängt dann zwar seine selbst gesendeten Daten auch wieder,
die lassen sich aber über Software filtern. Auf jeden Fall hat man eine
Signal-Leitung mit den TxD/RxD-Signalen aller Stationen und GND.

Na denn - fröhliches Grübeln ... :D

Gruß
Dino
 
Schaltplan RS232-LAN

Hallo ,

hier mal die grafische Version meiner ASCII-Kunst ...

RS232-LAN.gif

Also nen MAX232 an TxD und RxD des ATmega, dann den Ein-/Ausgang
des MAX232 mit den 3 Bauteilen des RS232-LAN verbinden und alles zu
einem Bus-System verbinden. Dann haben wir ein wunderbares
ATmega-Netzwerk mit MPCM und +/-12V Pegeln für größere Längen.
Außerdem benötigt man für die Daten nur eine Leitung plus GND :D

Na ? Ist das was ?

Gruß
Dino
 
Zuletzt bearbeitet:
Hi Dino!

Na, da hast du die Problematik aber schnell in den Griff bekommen! :)

Vielleicht können wir das ja für unser SÜPS benutzen und die externen Einheiten damit verbinden.

Hast du sogar schon einen ersten Feldversuch unternommen?

Gruß,
Cassio
 
Hi Cassio,

Na, da hast du die Problematik aber schnell in den Griff bekommen! :)

Hast du sogar schon einen ersten Feldversuch unternommen?
Bis jetzt hab ich den RS232-Adapter nur mit Amigas getestet. Da hab ich
mit GFA-Basic versucht eine Art Midi-Maze (früher auf Atari) über die
RS232 zu programmieren. Da ich nicht so den Durchblick bei 3D-Grafik
hatte ist bei Wire-Frame-Grafik geblieben. Aber mit hidden Lines :D
Aber die Kommunikation zwischen den Amigas lief :)

Das mit dem Token-Passing, was bei microcontroller.net drinsteht
gefällt mir recht gut. Das sollte gut funktionieren. Dann kann man
ein Multi-Master-Netz aufbauen (alle sind Master und Slave).
Der Mega, der gerade den Token besitzt ist Master und alle anderen
sind Slave. Die Zentrale sollte Super-Master sein und die Kommunikation
auf Timeouts überwachen. Wenn dann der Bus für - sagen wir mal 10sec
auf GND gelegt wird dann werden alle Slaves neu initialisiert (Reset).
Damit hat man dann auch im Fehlerfall Kontrolle über weiter abgelegene
Slaves.

Gruß
Dino
 
Hi Dino,

GfA-Basic? Da werde ich wach. Nein, kein neuer Thread, stop here.


Michael
 
Hi Michael,

<Off Topic - On>
GfA-Basic? Da werde ich wach. Nein, kein neuer Thread, stop here.
ich habe schon einige Sprachdialekte durch :D Und GFA-Basic gab es nicht
nur auf dem Atari. Konnte auf der Platte aber nur 1MB große Dateien bearbeiten
danach war GURU-Meditation :vollkommenauf:

Also ich habe Basic programmiert auf dem ZX81, ZX Spectrum, Amiga-Basic,
GFA-Basic, Q-Basic, Quick-Basic (waren das jetzt alle Dialekte ??)
<Off Topic - Off>

Gruß
Dino
 
Ich hab mal gestöbert und hier was gefunden.

Da ist ein Stück C drin und wenn ich das richtig interpretiere dann läuft das mit
dem MPCM folgendermaßen ... :D

Also man stellt den UART auf 9-Bit 1 Stopbit und aktiviert das MPCM-Bit.
Damit empfängt der UART nur die gesendeten Daten, bei denen das
8te Bit gesetzt ist (RxB8=1 - das sind die Adressen). Also muß sich die
Interrupt-Service-Routine in dem Moment NUR um die Adressen kümmern.

Wenn der ATmega jetzt ne Adresse empfängt, bei der die ISR meint das es
die Adresse des Slaves ist, schaltet sie das MPCM-Bit wieder aus und damit
empfängt der Slave wieder alle Daten (mit und ohne gesetztes RxB8).

Man filtert also mit dem gesetzten MPCM-Bit lediglich die gesendeten
Daten mit gelöschtem 8ten Bit weg und läßt nur die Adressdaten zum
UDR-Register durch. Damit entlastet man durch den Hardwarefilter die
Interrupt-Service-Routine für den Empfang der UART-Daten.

Wenn das 8te Bit gelöscht ist, dann kann man es auch als 2tes
Stop-Bit interpretieren. Also sind die "normalen" Daten eigentlich im
8n2-Format und die Adressen sind Daten bei denen ein Stopbit
invertiert ist.

Man kann dadurch natürlich nicht nur Unicasts an einzelne Slaves senden
sondern auch mit Broadcasts oder Multicasts mehrere oder alle Slaves
ansprechen ;)

Ich habe mich heute nämlich gefragt, in welchem Register man die
Slave-Adresse reinsetzen soll. Und nachdem ich nichts an Infos im
Datenblatt gefunden habe, hat mir Google freundlicherweise weitergeholfen.

Diese war der erste Schritt zum Erfolg. Jetzt fehlt nur noch der Quellcode
in Assembler :D :eek: :eek:

Gruß
Dino
 
Hi Dino,

ich kenn's vom Atari her, habe ich damals eingetippt. DER Wahnsinn. Dann Qbasic und wieder zurück zum GfA. Viele und lange Pausen zwischendurch.
Doch hilft mir die Erfahrung jetzt beim BASCOM.

Grüsse,

Michael
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)