Forum: Mikrocontroller und Digitale Elektronik Oszilloskop TFT-Display Darstellung


von Juli D. (juli_d)


Lesenswert?

Hi Leute,

Mein aktuelles Projekt  ist es eine Art  Oszilloskop zu bauen. Dazu 
verwende ich ein sainsmart 3,2'' tft Display (mit shield) und ein 
sainsmart mega 2560 Entwicklungsboard.
Meine Messwerte habe ich bereits so manipuliert dass ich genau genug 
+/-28v messen kann.
Die Darstellung auf dem tft wird vermutlich auch eine Herausforderung, 
aber damit beschäftige ich mich wenn ich folgendes Problem gelöst habe:

Zum Einlesen der Werte verwende ich den integrierten ADC. Mein Problem 
ist nun, dass ich das Display aktualisieren muss während ich Messen 
will.
Wenn ich das Display aktualisiere kann ich wahrend dessen keine ADC 
Werte speichern, denke ich. Deshalb folgende Fragen..

1.Frage: hat jemand eine Idee wie lange es dauert ein tft Display zu 
aktualisieren?

2.Frage: ist es realistisch eine Aktualisierung des Displays während 
eines Zyklus des ADCs zu machen, den ich auf möglichst hoher 
Geschwindigkeit samplen lasse? (ich vermute nein)

3.Frage: könnte ich vielleicht durch Interrupt die Kommunikation zum 
kurz Display unterbrechen und schnell den ADC Wert speichern? Denkt ihr 
damit kann das Display umgehen wenn eine kurze Verzogerung passiert? Das 
sind ja nicht viele Takte die dabei draufgehen..

Wäre cool wenn ihr mir helfen könnt.
Lg Julian

von Watzlaff Gützlaff (Gast)


Lesenswert?

Einziger Weg wäre den RAM vollzusamplen und dann aufs Display zu 
plotten. Ich vermute allerdings, dass dein Displaykram schon einiges vom 
RAM brauchen wird.

Das wäre also eine äusserst beschränkte Art von Single-Shot-Oszilloskop.
Keine Ahnung, ob man mit nem Interrupt einen halbwegs brauchbaren 
trigger für sowas hinbekommt, vielleicht schon.
Dabei aber wieder so beschränkt, dass es einfach nur noch ärgerlich und 
nutzlos ist.

Im großen und ganzen sehe ich kaum einen Nutzen in der ganzen Sache, 
selbst der Lerneffekt dürfte im Frust untergehen.

Einerseits gibt es sicher andere Projekte, die mit dieser Hardware mehr 
Spaß und vielleicht sogar sinn machen,

andererseits wirst du mit dem genannten niemals an die 
Leistungsfähigkeit der billigsten "Taschenoszilloskope" rankommen.

Eher würde ich mir nen Adapter für eine Soundkarte stricken, das soll ja 
auch möglich sein. Als Anfänger evtl. ne USB Soundkarte und etwas in 
eine galvanische Trennung des USB investieren.

von Sven B. (scummos)


Lesenswert?

Juli D. schrieb:
> 1.Frage: hat jemand eine Idee wie lange es dauert ein tft Display zu
> aktualisieren?
Kommt total drauf an, aber irgendwas im ms-Bereich.

> 2.Frage: ist es realistisch eine Aktualisierung des Displays während
> eines Zyklus des ADCs zu machen, den ich auf möglichst hoher
> Geschwindigkeit samplen lasse? (ich vermute nein)
Nein, wenn du irgendeine Bandbreite erreichen willst die den Namen 
"Oszilloskop" auch nur so gaaaaanz grob verdient hat. Auf die Art wirst 
du auf keine 200 Hz kommen vermute ich, damit kannst du nichtmal die 
Netzspannung vernünftig anschauen.

> 3.Frage: könnte ich vielleicht durch Interrupt die Kommunikation zum
> kurz Display unterbrechen und schnell den ADC Wert speichern? Denkt ihr
> damit kann das Display umgehen wenn eine kurze Verzogerung passiert? Das
> sind ja nicht viele Takte die dabei draufgehen..
Vergiss es. Keine Chance. Halbwegs sinnvolle Datenraten für den ADC für 
sowas fangen bei 1MSa/s oder so an, dazwischen kannst du gar nix tun, 
und wenn du nicht auf mindestens so eine Rate kommst lohnt sich das 
Projekt imo nicht, weil du kein Signal der Welt zuverlässig damit 
vermessen kannst. Solche Datenraten kannst du auch nicht mit einem 
Interrupt pro Sample aufnehmen.

Das Aufnehmen der ADC-Daten in den Speicher muss im Hintergrund 
passieren, per DMA oder so. Der Trigger sollte ebenfalls in Hardware 
sein (der LPC43xx, der einzige uC den ich einigermaßen gut kenne, hat 
zum Beispiel in seinem SGPIO-Modul eine Compare-Einheit, mit dem er 
einen Datenstrom im Hintergrund mit einem Wert vergleichen kann und dann 
einen Interrupt auslösen oder so). Wenn ein Trigger-Event passiert, 
kannst du die Datenerfassung unterbrechen, den Buffer auf den Bildschirm 
malen, und dann weitersampeln. So eine Totzeit ist für Oszilloskope 
normal und akzeptabel.

Gruß,
Sven

: Bearbeitet durch User
von Juli D. (juli_d)


Lesenswert?

Okay danke schonmal für eure Hilfe.
Das Problem ist nur dass ich das als erstes Projekt fürs Modul 
Mikrocontrollertechnik habe.
Wie jede andere Gruppe habe ich das Thema vorgeschlagen und mein Dozent 
war der Meinung dass man das machen kann.
Wenn es nicht so Leistungsfähig ist wie ein richtiges Oszilloskop ist 
das nicht so schlimm. Der Lernefdekt steht im Vordergrund.
Was haltet ihr davon wenn ich das ganze etwas abspecke und auf zweo 
funktionen reduziere?

Funktion 1: live Messung, in der die aktuelle Amplitude dargestellt wird 
(video kommt gleich) https://www.youtube.com/watch?v=122pIu_VeXA

Funktion 2: relativ  hochfrequente Aufnahme eines Signals, das dann im 
Nachhinein ausgewertet werden kann? Hier gibt man vorab in ein 
dialogfenster ein wie schnell gesamplet werden soll und wie lange. 
Dannach wirds auf dem display dargestellt?

: Bearbeitet durch User
von Watzlaff Gützlaff (Gast)


Lesenswert?

Hast du bereits brauchbare Erfahrung mit Mikrocontrollern? Deine Fragen 
lassen da starke Zweifel aufkommen.
Welche Programmiersprache soll/ muss verwendet werden?

Solltest du ohne Erfahrung das TFT in C ohne fertige Bibliotheken etc. 
ansteuern müssen, dann gute Nacht.

Ganz ehrlich, bau erstmal ein Voltmeter mit nem HD44780, dann sehen wir 
weiter...

von Watzlaff Gützlaff (Gast)


Lesenswert?

Wenn du es ganz ganz unbedingt willst, KÖNNTE man 3 Controller nehmen. 
Einen fürs TFT und zwei, die abwechselnd samplen und Daten zum TFT 
Controller schieben.
Ein Dozent, der sowas zulässt, ist aber entweder ahnungslos oder ein 
Sadist.
Schlimmer sind eigentlich nurnoch diejenigen Dozenten, die beide 
Eigenschaften in sich vereinigen. Soll es geben.

von ics1702 (Gast)


Lesenswert?

Vielleicht wäre es einfacher und auch sinnvoller, das Projket etwas zu 
ändern und das Gerät für Langzeitaufnahmen mit einstellbarer langsamer 
Messung zu programmieren.Mit der Möglichkeit, die Messwerte dann auf 
einer SD Speicherkarte zu speichern ,über das Display grafisch 
anzuzeigen und später auf den PC zu übertragen, hast du bestimmt schon 
genug Herausforderungen für den ersten Kontakt mit Microkontrollern.
Deine Anforderungen sind einfach zu hoch für die eingesetzte Hardware 
und als Anfängerprojekt ein wenig sportlich.
Langsame Messraten, aber dafür vielleicht mit höhere Auflösung und 
Mittelung der Werte sind da schon einfacher umsetzbar.
Das wäre jedenfalls auch noch wirklich für etwas nützlich sobald man 
Messwerte ohne PC aufzeichnen will, welche über sehr lange Zeiträume 
aufgezeichnet werden sollen. (Lade- Entladekurven von Akkus, 
Wetterdaten, ...)

Gruß Thomas

von Sven B. (scummos)


Lesenswert?

Juli D. schrieb:
> Wenn es nicht so Leistungsfähig ist wie ein richtiges Oszilloskop ist
> das nicht so schlimm.
Das kannst du sowieso komplett vergessen. Bei einem echten Oszi misst 
man die Anzahl aufgenommener Messwerte pro Sekunde in Milliarden und das 
hat diverse verschiedene Eingangsstufen für verschiedene 
Spannungsbereiche etc ... sowas allein zu bauen ist eine Lebensaufgabe.

> Funktion 1: live Messung, in der die aktuelle Amplitude dargestellt wird
> (video kommt gleich) https://www.youtube.com/watch?v=122pIu_VeXA
Das sollte machbar sein, wenn man nur 20 Messwerte pro Sekunde braucht 
ist alles nicht so schwierig. Das ist halt bloß in der Praxis wegen dem 
Aliasing-Effekt ziemlich bis völlig nutzlos. 
https://de.wikipedia.org/wiki/Alias-Effekt
Trotzdem ist, wie schon gesagt wurde, allein das mit Anstreuerung des 
LCDs etc. schon ein großes und aufwendiges Projekt.

von Watzlaff Gützlaff (Gast)


Lesenswert?

Sven B. schrieb:
> Bei einem echten Oszi misst
> man die Anzahl aufgenommener Messwerte pro Sekunde in Milliarden

Nun, nun, schauen wir mal...
https://de.wikipedia.org/wiki/Vors%C3%A4tze_f%C3%BCr_Ma%C3%9Feinheiten#SI-Pr.C3.A4fixe

von Juli D. (juli_d)


Lesenswert?

Als Student im 2 jahr habe ich von schulischer Seite aus keine 
Erfahrung. Was ich mit microcontrollern bisher selbständig gemacht habe 
beschränkt sich auf lcd Ansteuerung 16x4, adc Auswertung 
(Spannungsmessung), Menustrukturen auf dem lcd Display, pwm 
(hardware)...
Ich schreibe in c und werde natürlich eine Bibliothek für das tft 
verwenden. Aber wie ich schon geschrieben habe befasse ich mich damit 
nachdem ich das oben genannte problem lösen konnte.
Und @watzlaff guetzlaff sowas hilft mir nicht. Ich habe das Thema 
genannt und bin jetzt in dieser Situation. Da gibts kein zurück.

von Clemens L. (c_l)


Lesenswert?

Juli D. schrieb:
> Wenn es nicht so Leistungsfähig ist wie ein richtiges Oszilloskop ist
> das nicht so schlimm.

"Rolling" oder "Scan" Mode ist bei 'echten' Oszilloskopen ein Feature. 
:-)

> Funktion 2: relativ  hochfrequente Aufnahme eines Signals, das dann im
> Nachhinein ausgewertet werden kann? Hier gibt man vorab in ein
> dialogfenster ein wie schnell gesamplet werden soll und wie lange.

Dialogfenster sind umständlich. Drehencoder oder Plus-/Minus-Knöpfe sind 
benutzerfreundlicher (und für dich einfacher), und die Länge ist halt 
soviel, wie auf den Bildschirm (oder in den Speicher) passt.


Und um welches konkretes Display geht es denn?

: Bearbeitet durch User
von Juli D. (juli_d)


Lesenswert?

Also danke schonmal an alle.. Auch an watzlaff guetzlaff, hatte deinen 
2. Post noch nicht als ich geschrieben habe.
Ich denke ich werde mich zunächst auf die Darstellung wie im video 
konzentrieren.

von Juli D. (juli_d)


Lesenswert?


von Watzlaff Gützlaff (Gast)


Lesenswert?

http://www.ulrichradig.de/home/index.php/avr/avr-dso

Schau dir das mal sehr genau an. Du hast hoffentlich nicht explizit 
angegeben dass du den interen ADC des Atmega nehmen willst.

Mit Code und allem. Dann musst du das nur noch mit deinem Display 
hinkriegen. Evtl. wirklich 2 Controller.

http://www.ulrichradig.de/home/uploads/File/AVR_DSO/MyScope.zip

von Clemens L. (c_l)


Lesenswert?

Juli D. schrieb:
> könnte ich vielleicht durch Interrupt die Kommunikation zum
> kurz Display unterbrechen und schnell den ADC Wert speichern? Denkt ihr
> damit kann das Display umgehen wenn eine kurze Verzogerung passiert?

Der Controller ist ein SSD1289. Er hat eigenes RAM, in das du 
asynchron den Bildschirminhalt schreibst.

Laut Datenblatt gibt es für keinen Teil der Protokolle (parallel oder 
SPI) eine Mindestgeschwindigkeit, also kannst du jederzeit eine Pause 
einlegen.

von Andreas R. (daybyter)


Lesenswert?


von Klaus (Gast)


Lesenswert?

Die "Soundcard Scopes" verwenden Daten, die mit rund 44kHz gesampelt 
werden. Das sollte mit eigentlich jedem µC auch mit dem internen ADC 
mühelos zu erreichen sein. Und wärend der ADC sampelt und konvertiert 
kann man in Ruhe den letzten Punkt malen.

MfG Klaus

von Sven B. (scummos)


Lesenswert?

Dann braucht man aber wenigstens noch einen Tiefpassfilter davor, wie 
die Soundkarte.

von J. T. (chaoskind)


Lesenswert?

Sven B. schrieb:
> Dann braucht man aber wenigstens noch einen Tiefpassfilter davor, wie
> die Soundkarte.

Nicht eher ein ein Highpassfilter? An meiner Soundkarte kann ich keine 
Gleichspannung anlegen, bzw ich kann schon, aber nach ner Zeit wird der 
Wert immer kleiner und kleiner. Was ja doch eher dafür spricht, dass die 
Tiefen dieses Filter NICHT passieren können. --> Lowcutfilter wenn man 
unbedingt die Tiefen im Namen haben will, oder halt ein 
Highpass/Hochpassfilter.

von Sven B. (scummos)


Lesenswert?

Naja, das ist eher ein DC-Block bei der Soundkarte ... klar, kann man 
auch als Hochpass bezeichnen. Wichtig ist aber der Tiefpass bei der 
halben Samplerate.

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.