Forum: Compiler & IDEs Datenübertragung zwischen zwei uC


von Mark P. (pisy)


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

von Gast (Gast)


Lesenswert?

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

von Tilo (Gast)


Lesenswert?

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

von Mark P. (pisy)


Lesenswert?

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

von Tilo (Gast)


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.

von gast (Gast)


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

von Mark P. (pisy)


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

von PJ (Gast)


Lesenswert?

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

von PJ (Gast)


Lesenswert?

Und bei solchen Aussagen hilft es sehr, den Code zu posten.

von Mark P. (pisy)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.