www.mikrocontroller.net

Forum: Compiler & IDEs Datenübertragung zwischen zwei uC


Autor: Mark Pisani (pisy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen, folgender Aufbau:

Ich übertrage einen Array auf einen ATMega128, der Array besteht aus 
10Bytes, wobei die Information darin eine Funktion ist, also quasi 5 
Wertepaare.
Diese habe ich im Mega über Mathlab in eine Funktion geschrieben. Die 
Funktion ist wie folgt: auf der X Achse die Zeit auf der Y Achse eine 
Spannung, dass soll eine Stufenfunktion sein:
Halte eine Sekunde 0.3V, dannach halte mir bis zur zweiten Sekunde 0.6V, 
wenn das fertig ist auf 0.9V erhöhen für eine Sekunde usw....

Jetzt soll mir der 128 auf meinen Mega8 eben diese Spannung übertragen 
und sie halten. Also in Comicsprache:
Hey Mega8 halte nimm Sekundelang die Spannung von 0.3V auf.

Das ist ja so kein Problem, aber der Haken kommt jetzt.
Diesen Spannungswert brauche ich als Sollwert für eine Regelung. Meine 
Regelschleife braucht genau 9,8ms, weswegen ich den 8er auf 17,8ms pro 
Durchlauf takten musste. Der Mega 128 schickt mit 2kH.
Ich habe versucht dem Mega 8 alles über ein PWM mitzuteilen. Zuerst habe 
ich einen Tiefpassfilter genommen. Der ist aber zu langsam, sprich ich 
bekomme nicht in regelmäßigen Abständen meinen Sollwert raus, zumal man 
beim PWM ja auch einen Mittelwert bildet. Dann habe ich den 
Tiefpassfilter "einfach" schneller gemacht indem ich an tau=r*c 
rumgeschraubt habe. Ist aber nicht gut, weil das Signal dann schlechter 
geglättet wird.
Wie kann ich denn ggf einen Softwarefilter bauen, der zum einen mit den 
Taktzeiten zurechtkommt und zum anderen schneller reagiert als mein 
Hardwarefilter?

Danke

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kannst du nicht digital übertragen? Ansonsten halt nen echten DA-Wandler 
benutzen

Autor: Tilo L. (katagia)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst Werte per PWM übertragen?
Warum implementierst du nicht eine primitive digitale Übertragung?
Etwas in Richtung SPI wäre vermutlich das einfachste.

Autor: Mark Pisani (pisy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Tips, ich werde es morgen mal versuchen und sehen was 
Mathlab so hergibt.

Autor: Tilo L. (katagia)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst das nicht ernsthaft mit Matlab programmieren? (MathLab kenne 
ich jedenfalls nicht).

Matlab ist gut geeignet, Algorithmen für Signalverarbeitung zu 
entwickeln.
Hardwarenahe Controllerprogrammierung lässt sich mit einer "richtigen" 
Entwicklungsumgebung leichter und effizienter realisieren.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit einer "richtigen" umgebung wäre man vieleicht auch auf die idee 
gekommen hardwareschnittstellen zur kommunikation zu verwenden :P

als da wären : SPI , I²C(TWI) , UART ...

gibt ja genug

Autor: Mark Pisani (pisy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
also ich schicke mir jetzt die Daten über die serielle Schnittstelle.
Ich lasse mir jetzt immer eine Sekunde lang im ASCII Code Daten 
schicken. Dann wechselt der Wert.

Aber egal ob ich empfange mit Interrupt oder ohne, oder ob ich gar die 
Schnittstelle initialisiere, ich erhalte andauernd die Werte.
Ich will eigentlich 1 Byte empfangen Interrupt setzten, Byte 
verarbeiten, Interrupt aufheben und weiter gehts.
Ich habe jetzt mal zum testen die gesamte main Schleife leer gelessen, 
ich rufe ja nichtmal initUart(); auf und ich bekomme trotzdem im 
Testfenster alles vollgeschrieben.
Ist wohl ehr ein Hardwareproblem, selbst wenn ich alles lösche empfange 
ich weiter. Oder kann mir dazu jemand was nützliches sagen???
Kann natürlich auch sein das ich ein Shakehands zwischen den beiden 
Controllern machen muss.
Danke

Autor: PJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht klappt die Programmierung nicht richtig, und da läuft 
weiterhin das frühere Programm.
Mal die Meldungen vom avrdude o.ä. aufmerksam mitlesen.

Autor: PJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und bei solchen Aussagen hilft es sehr, den Code zu posten.

Autor: Mark Pisani (pisy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War ein Hardwarefehler, unterhalb der Platine lag noch ein blanker 
draht, deswegen waren Tx und Rx gebrückt:)
peinlich

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.