Hallo Leute,
ich bin noch Anfänger im Bereich Mikrocontroller. Ich benutze ein
MSP430F169 und möchte ein kontinuierliches Signal (künstliches EKG)
analog ausgeben. Ich habe es bereits geschaft, ein analoges Signal
auszugeben.
Nun bin ich an dem Punkt, an dem ich meine Daten brauche, die das EKG
beschreiben, um die richtige Kurvenform zu bekommen.
Ich habe eine Tabelle mit ziemlich vielen Zahlen die meine Signal
beschreiben.
Dieses möchte ich jetzt irgendwie verwenden. Ich benutze IAR und C.
Habe mir überlegt, die Tabelle in Speicher (am besten RAM?) zu schreiben
und beim Ablauf des Programmes dann kontinuierlich meine Werte dort
auszulesen. Nur habe ich keine Ahnung, 1. ob es der beste Weg ist und 2.
wie ich es umsetzen soll.
Kann mir jemand vielleicht ein Tip geben?
Vielen Dank!!!
Heiko
Das sollte nicht das Problem sein.
Der 169 hat einen DA Wandler drin.
Dazu musst du deine Zahlenwerte erstmal so umwandeln das der DA Wandler
damit arbeitet.
Die Zahlen solltest du aber nicht in den RAM legen.
Wenn du die Zahlen in einer Art Tabelle anlegst und diese Tabelle als
"const" deklarierst brauchst du keinen RAM dafür.
z.B.
Super Danke für den Hinweis.
Jetzt vielleicht noch eine Frage. Wie kann ich denn in C jetzt die
eigentlichen 1000 Werte in meine Tabelle schreiben und wie lese ich sie
danach wieder nacheinander aus?
Vielen Dank!
Am besten Du machst auf dem PC einen Konverter, der die Daten in das
richtige format bringt.
So in der Art wie schon geschrieben wurde:
const char Tabelle[1000] = {0x0000, 0x0001, 0x0003, ....};
Der 169 hat doch einen DMA, mit dem kann das ganze wahrscheinlich ohne
viel Code im Hintergrund an den Timer geschickt werden um es auszugeben.
Sonst halt in einer Schleife:
for (i = 0; i < sizeof(Tabelle); i++)
{
TimerRegister = Tabelle[i];
...warten...
}
Oder besser als in Schleife, in einem Timerinterrupt.
> Der 169 hat doch einen DMA, mit dem kann das ganze wahrscheinlich> ohne viel Code im Hintergrund an den Timer geschickt werden um es> auszugeben.
Besser wäre es vermutlich, die Daten an den DAC zu senden.
Diese Ausgabe kann im Timerinterrupt erfolgen, der Timer ist so zu
programmieren, daß der Timerinterrupt mit der korrekten Samplerate
erfolgt.
Das sieht dann in etwa so aus:
Vielen Dank für eure schnellen und hilfreichen Hinweise!
Ich habe das ganze zum laufen gebracht. Sieht schon sehr gut aus auf dem
OSSI :-) . Habe es mit dem Timer Interrupt gemacht.
Nur habe ich noch eine Schwierigkeit:
Ich habe eine Excel Tabelle mit ca. 2000 Werten. Und ich muss die ja
irgendwie in die Form:
Tabelle[2000] = { 1, 2, 3, 10, 5 --- etc} bringen. Per Hand sind 2000
Werte ein wenig mühsam.
Hättet Ihr noch einen Vorschlag für die schnelle Bearbeitung? Bin nicht
so fit in C, um mir mal eben ein Programm dafür zu schreiben.
Danke nochmals!
hallo heiko,
hab gerade ein ähnliches projekt realisiert:
Dabei geht es darum, dass man eine "Testsequenz" vom PC ins EEPROM
übertragen kann und diese Sequenz dann im Gerät abgespielt wird.
Also stand ich vor dem gleichen Probleme eine Kurvenform zu erzeugen und
in das System zu übertragen. Per hand ist das ne Menge Arbeit!
Also habe ich in Excel eine Kurve erzeugt (eine Sinus-Periode mit ca.
400 Einzelwerten) dies habe ich dann als *.txt gespeichert (mit TAB
getrennt)
nun steht in der Txt Datei
1<TAB>3210 (für 3.210 V)
nun braucht man noch eine PC Software (am besten selbst geschrieben) die
diese Txt Datei auswertet in einen RS232-Frame packt und an das Gerät
sendet!
im gerät kann ich nun einstellen, dass diese Sequenz einfach oder
zyklisch abgespielt wird!
Stelle ich es auf zyklisch wird ein sich schön periodisch wiederholender
Sinus am DA Ausgang ausgegeben.
Wenn du es flexibler haben willst, kannst du es so machen wie ich:
Jede Schnittstelle im Gerät bekommt eine ID..
wenn nun so eine Sequenz gespeichert werden soll:
gibt man an
ID und Wert... z.b. ID:4 (für DA Wandler 1) und ein 16 Bit Wert!
Ich habe z.b. 4 digitale, 2 Analoge und 2 PWM Ausgänge!
Über diese Sequenz kann man z.b. den Tastgrad des PWM Signals verändern,
die analogen Ausgänge einstellen oder die digitalen Eingänge setzen!
Eine weitere Besodnerheit ist auch noch, dass man die Eingänge
ansprechen kann!
ID:5 (für AD Eingang 1) führt z.b. dazu, dass der Eingang gelesen wird
und der Wert an den PC übertragen. Somit wäre auch eine Abtastung über
Analog oder Digital möglich!
MFG
Sebastian B. wrote:
> hab gerade ein ähnliches projekt realisiert:>> Dabei geht es darum, dass man eine "Testsequenz" vom PC ins EEPROM> übertragen kann und diese Sequenz dann im Gerät abgespielt wird.>> Also stand ich vor dem gleichen Probleme eine Kurvenform zu erzeugen und> in das System zu übertragen. Per hand ist das ne Menge Arbeit!>> Also habe ich in Excel eine Kurve erzeugt (eine Sinus-Periode mit ca.> 400 Einzelwerten) dies habe ich dann als *.txt gespeichert (mit TAB> getrennt)>> nun steht in der Txt Datei> 1<TAB>3210 (für 3.210 V)>> nun braucht man noch eine PC Software (am besten selbst geschrieben) die> diese Txt Datei auswertet in einen RS232-Frame packt und an das Gerät> sendet!
Da gibt es noch eine bessere Idee.
Wenn du die, konvertierte, Tabelle schon in einer Textdatei hast kannst
du diese auch mehr oder weniger als C Datei in dein Projekt mit
einbinden.
Dazu must du die txt Datei in .c umbenen, die Werte mit Kommas trennen
und dann halt noch
1
constchartabelle[2000]
davor schreiben.
Dann must du nur noch eine Headerdatei mit dem gleichen Namen wie diene
neue C-Datei anlegen und in dieser Headerdatei diene Konstante Variable
deklarieren.
>Ich habe eine Excel Tabelle mit ca. 2000 Werten.
kleiner Hinweis: der MSP430F169 hat nur einen 2kB großen RAM. Ein Teil
des RAMs wird für das laufende Programm benötigt, sodass es mit
"Tabelle[2000]= " nichts werden wird.
MfG
Wolfgang
>> Der 169 hat doch einen DMA, mit dem kann das ganze wahrscheinlich>> ohne viel Code im Hintergrund an den Timer geschickt werden um es>> auszugeben.> Besser wäre es vermutlich, die Daten an den DAC zu senden.
Ja, wenn er den DAC nutzen möchte schon. Mit den Timern kann aber auch
ein PWM erzeugt werden.
Ich liefere meist nur Hinweise, fertigdenken und fertigstellen kann es
der Fragesteller dann selber. ;-)
Wolfgang-G wrote:
>>Ich habe eine Excel Tabelle mit ca. 2000 Werten.> kleiner Hinweis: der MSP430F169 hat nur einen 2kB großen RAM. Ein Teil> des RAMs wird für das laufende Programm benötigt, sodass es mit> "Tabelle[2000]= " nichts werden wird.> MfG> Wolfgang
Deswegen steht da ja const char Tabelle[2000], dann landet´s im Flash,
und davon ist genug da.