Parsic - Programmierung

OP #1294161
Hallo und guten Tag,

ich hab in letzter Zeit ziemlich viel mit der graphischen 
Programmierumgebung "Parsic" gearbeitet.

Allerdings stehe ich nun vor einen Problem welches ich weder mit der 
Hilfe des Handbuches von Parsic (Ist leider nicht besonders Umfangreich) 
noch mit Google lösen kann.

Bei Parsic kann man ja analoge Eingänge wunderbar Programmieren (8 oder 
16 Bit Auflösung). Allerdings wie bringe ich die 255 Stufen (Bei 8.Bit) 
zu einem gescheiten weiterverarbeitbaren Signal?
Ich könnte natürlich mit Schmitt-Triggern arbeiten, allerdings denke und 
hoffe ich dass es einfacher und vor allem Speicherschonender geht.

Ich möchte nämlich aus meinem 0 - 5 V Signal, welches vom Hall-Generator 
kommt, im PIC so verarbeiten dass ich sie mit Hilfe eines ULN2xxx auf 
Sieben-Segment-Anzeigen oder einem LCD-Display (Bei LCD natürlich ohne 
den ULN) anzeigen lassen kann.
Also aus Analoger Spannung mach mA Anzeige.
Aud der Spannung mA zu machen ist ja gar kein Problem aber überhaupt 
soweit zu kommen schon.

Ich hab schon stundenlang herumexperimentiert - leider ohne Erfolg.

Hat jemand von euch schon etwas derartiges programmiert - Evtl auch mit 
Assembler (Mit Parsic kann man einmalig eine Assembler Datei als 
Unterprogramm aufrufen)

Vielleicht ist die Lösung so einfach dass ich sie einfach übersehe.
Was ich hoffe aber nicht glaube.


Vielen Dank für die hoffentlich zahlreichen Antworten.


MFG
Gast #1294431
Grafische Programmierung ist was für Weicheier und Warmduscher ;-P

Aber deine Beschreibung ist auch ncith sehr aufschlussreich.

Wie Programmiert man analoge Eingänge?
oder heißt das dein PIC hat einen Analog-Digitalwandler, dessen Wert du 
benutzt?
In diesem Fall müsste es doch irgen ein Element in deiner Bibliothek 
geben, die das Auslesen dieser Schnittstelle realisiert und ein Signal 
zur Verfügung stellt, was ja digital sein sollte entweder 8bit oder 
16bit.

oder meinst du dui hast jetzt diesen wert und weißt nicht, was er 
bedeutet?

Der AD-Wandler hat ja einen Arbeitsbereich. Der liegt normalerweise 
zwischen GND und einer Referenzspannung (die ist hardware und 
Konfigurationsabhängig, keine Ahnung wie das bei Pics aussieht).
Dh <=0V am eingang entsprechen 0 und  >=Referenzspannung entsprechen 255 
(bei 8bit) oder 1024 (bei 10bit) oder 65535 (bei 16bit)

Der echte wert ergibt sich also aus  x_V = x_adc * V_ref/(2^adc-bits)
Zu beachten ist natürlich, dass du entweder in float (lieber vermeiden) 
oder in Fixpoint rechnest, damit du nicht ein haufen genauigkeit durch 
die integerdivision verlierst.
OP #1294574
Wieso für Weicheier - Bevor ich mich Stunden über Stunden in den 
Assembler einarbeite der eh total be.. ist nehm ich lieber ein Programm 
ohne nennenswerte Einarbeitungszeit (Außer man macht so Sachen wie ich)

Also ich erklärs nochmal kurz,

Ich hab meine Analogen 0 - 5V
Diese werden von meinem PIC internen ADU in 255 Schritten (8Bit) 
umgesetzt.

Jetzt frage ich mich wie ich diese, ohne zu großen Schaltungsaufwand, so 
verschalten kann dass ich einen (natürlich programmierten) 
7-Segment-Decoder ansteuern kann. Sprich 4-Bit-Zähler oder was 
ähnliches..

Noch unklar - ist glaube ich nicht so einfach zu verstehen, muss man 
wahrscheinlich selbst einmal versucht haben zu programmieren.
Gast #1295021
8bit bei 5 volt, heißt, die genauigkeit ist 0,02V -> 2 nachkommastellen 
reichen.
max 5V -> eine Vorkommastelle reicht

--> 3 7-seganzeigen

sint16 dispVal = ((adcWert*100)*5)/255;  echter wert in 10mVschritten

wert % 10      -> linkeste 7seg anzeige
(wert/10)%10   -> mittlere 7seg anzeige
((wert/10)/10) -> rechte  7Seganzeige
und nicht vergessen den dezimalpunkt der ersten anzeige anzuschalten.

Wie du sieht wäre dass 4 Zeilen c-dode + der umkodierer für die 
7-segment anzeige

Bau dass mal in einem Grafischen modell ähnlich fix und übersichtlich.
Gast #1295023
die reihenfolge der anzeigen ist falsch, richtig ist natürlich umgedreht

wert % 10      -> rechte  7seg anzeige
(wert/10)%10   -> mittlere 7seg anzeige
((wert/10)/10) -> linke 7Seganzeige
Gast #1295046
Noch ne anmerkung
hier muss mit 32bit gerechnet werden, und am besten noch mal ein halbes 
bit drauf addiert werden, damit echt gerundet und nicht abgerundet wird.
und ein uint statt sint wär sinnvoller
uint16 dispVal = ((((uint32)adcWert*100)+50)*5)/255; //  echter wert in 
10mV - Schritten

Für die dekodierung von einer 7-seg anzeige kann man ja ne lookup-table 
verwenden, die für die indices 0-9 (oder 0-F) das Bitmuster liefert, 
dass an den Port gelegt werden muss

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.