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
kannst du nicht digital übertragen? Ansonsten halt nen echten DA-Wandler benutzen
Du willst Werte per PWM übertragen? Warum implementierst du nicht eine primitive digitale Übertragung? Etwas in Richtung SPI wäre vermutlich das einfachste.
Danke für die Tips, ich werde es morgen mal versuchen und sehen was Mathlab so hergibt.
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.
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
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
Vielleicht klappt die Programmierung nicht richtig, und da läuft weiterhin das frühere Programm. Mal die Meldungen vom avrdude o.ä. aufmerksam mitlesen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.