mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik gemeinsame variablen über twi verwenden.


Autor: migo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, hab schon sehr viel über twi gefunden.

Würde gerne mal wissen ob es nicht möglich ist zwei atmega über twi auf 
einfachste weise mit einander kommunizieren lassen. Ich dachte da an 
gemeinsam deklarierte variablen, die der eine beschreibt und der andere 
liest. geht so was, wer hat erfahrung (vielleicht mit bascom)

ich wär für jede hilfe dankbar.


P.s. der eine prozessor ist mit dem auswerten der 8 Kanäle meines 
empfängers so beschäftigt, dass ich einen zweiten nutzen möchte den rest 
zu erledigen und diesen eben so einfach wie möglich mit dem ersten 
verbinde. würde lediglich 8 byte vom ersten lesen wollen.

Bitte helft mir

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
migo schrieb:
> P.s. der eine prozessor ist mit dem auswerten der 8 Kanäle meines
> empfängers so beschäftigt,

Glaub ich nicht.


> dass ich einen zweiten nutzen möchte den rest
> zu erledigen und diesen eben so einfach wie möglich mit dem ersten
> verbinde. würde lediglich 8 byte vom ersten lesen wollen.

Das müssen ja mordsmäßig komplizierte Rechnungen sein, damit sich der 
Aufwand lohnt, die Daten über den Flaschenhals I2C zu schleusen.


Peter

Autor: migo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sind es, ich habe vor viele sensoren (gyros, beschleunigungssensoren, 
magnetfeld etc mit einander zu mischen).

Aber es muss doch leicht möglich sein ein paar bytes von einem zum 
anderen prozessor zu schieben. Bitte helft mir.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
migo schrieb:

> Aber es muss doch leicht möglich sein ein paar bytes von einem zum
> anderen prozessor zu schieben. Bitte helft mir.

Mehrprozessorlösungen sind nur in Ausnahmefällen leicht. In den meisten 
Fällen möchte man diese vermeiden, wo auch immer es geht. Relativ leicht 
sind Mehrprozessorlösungen nur dann, wenn es eine klare Sender/Empfänger 
Struktur gibt, sprich: ein µC sitzt in der Mitte, wie die Spinne im Netz 
und verteilt Kommandos bzw holt Ergebnisse reihum von den Satelliten 
ein. Und das auch nur dann, wenn der Falschenhals 'Datenübertragung' 
nicht das zeitbestimmende Glied ist.

Du könntest tatsächlich so eine Struktur haben, also lies dich ins Thema 
TWI ein. Und vergiss die Idee mit 'gemeinsamen Variablen'. Dein 
zentraler Prozessor schickt ein Kommando an den Satellitenprozessor und 
der antwortet mit seinem Wert.

> P.s. der eine prozessor ist mit dem auswerten der 8 Kanäle
> meines empfängers so beschäftigt, dass ich einen zweiten nutzen
> möchte den rest zu erledigen.

Das klingt erst mal einleuchtend. Und zwar genau solange, bis man 
draufkommt, dass der erste, vermeintlich dichte, Prozessor ja auch noch 
nebenher die Kommunikation machen soll. Und zwar fehlerfrei, was 
normalerweise ein recht enges zeitliches Korsett für diesen Prozessor 
bedeutet.

Autor: TrippleX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst auch ein ganzen Port nehmen + einen Interruptpin.
Dein Slave Select Pin ziehst du auf High der andere Mega springt
den Interrupt an und liest das gesamte Byte vom Port.
Ich bezweifel das du so eine blöde Lösung brauchst -
Schafft garantiert ein µC alleine.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
migo schrieb:
> sind es, ich habe vor viele sensoren (gyros, beschleunigungssensoren,
> magnetfeld etc mit einander zu mischen).

Es gibt keinen mathematischen "Misch-Operator".

Ich vermute, Dein Hauptproblem ist, Deine Aufgabe erstmal verständlich 
zu beschreiben.


> Aber es muss doch leicht möglich sein ein paar bytes von einem zum
> anderen prozessor zu schieben. Bitte helft mir.

Was hast Du davon, wenn Du nichtmal weißt, was Du mit den Daten machen 
willst.

Du mußt mindestens schon tausende float-Rechnungen benötigen, damit sich 
das I2C-Geraffel überhaupt lohnt.


Peter

Autor: migo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tausende flieskomma-berechnungen vielleicht nicht aber hundert 
vermutlich schon. Und dass würde der Übersichthalber dann doch gerne in 
bascom machen. Mein C oder Asm ist halt eingerostet. Deshalb lieber die 
Verteilung. Genauer gesagt möchte ich mit dem Master ja zwei weitere 
mega8 bedienen. Der erste slave soll die funke auswerten. (und somit 
auch eine modulare Ersetzbarkeit ermöglichen, wenn ich z.B. mal auf 2,4 
GHz wechsle) und der zweite Slave soll meine 8 Ausgänge in Quasi-PWM 
bedienen.
Der soll kontinuierlich die 8 Byte als Servosignal zur Verfügung 
stellen.
Und der andere soll 8 Byte abgefragt bekommen, wie die Knüppel gerade an 
der Funke stehen. Also ich hab schon klare Vorstellungen. Notfalls mach 
ich es halt im Timeshift-Verfahren und sende eben so 10 mal pro sekunde 
die 8 Byte auf 19200 über Tx an Rx vom Hauptprozzi und der sendet wieder 
mit Tx an Rx von Ausgangsprozzi. Wollte mir die "serile Schnittstelle" 
halt für Diag/Parametrierung freilassen. Notfalls muss ich halt mit ner 
zweiten SoftUart arbeiten. Wenns aber besser mit I2C ginge würde ich 
diese Variante bevorzugen wollen. Deshalb der gedanke mit dem Shard 
Memory. Wenn ich einen hardware-Speicherbaustein über I2C von allen 
ansprechen könnte, könnte ich das doch nachbilden!?

Danke für die beteiligung schon im Voraus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
migo schrieb:
> tausende flieskomma-berechnungen vielleicht nicht aber hundert
> vermutlich schon.

Oder gar keine :-)

> auch eine modulare Ersetzbarkeit ermöglichen, wenn ich z.B. mal auf 2,4
> GHz wechsle)

erstens hat das Frequenzband nichts mit der Auswertung zu tun und wenn 
du wirklich mal auf 2,4Ghz wechselst, hast du ganz andere Probleme.

> und der zweite Slave soll meine 8 Ausgänge in Quasi-PWM
> bedienen.

Gäähn.
Und wie verhinderst du, dass der µC wegen chronischer 
ArbeitsUNTERlastung Selbstmord begeht?

> Der soll kontinuierlich die 8 Byte als Servosignal zur Verfügung
> stellen.

Ach ne.
Servosignale, und dann noch 8 Stück.
Das macht der Timer mit ein bischen Hilfe in der IRQ schon fast alleine.

> Und der andere soll 8 Byte abgefragt bekommen, wie die Knüppel gerade an
> der Funke stehen.

8 mal ADC auslesen. Auch nicht gerade Raktentechnik. Das macht die ADC 
Unit mit ein bischen Hilfe in einer IRQ ganz von alleine.

> Also ich hab schon klare Vorstellungen.

Ja klar.
Man kann natürlich von Salzburg nach München über Helsinki fahren und 
sich Gedanken darüber machen, wie man 3000 Kilometer mit nur einer 
Tankfüllung hinkriegt. Man kann aber auch einfach direkt fahren :-)

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.