Forum: Mikrocontroller und Digitale Elektronik Parsic - Programmierung


von Hans M. (ehrnsperger)


Lesenswert?

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

von vlad (Gast)


Lesenswert?

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.

von Hans M. (ehrnsperger)


Lesenswert?

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.

von Ralf S. (spacedog) Benutzerseite


Lesenswert?

ADC-Wert * 5 / 255

von spess53 (Gast)


Lesenswert?

Hi

>...muss man wahrscheinlich selbst einmal versucht haben zu programmieren.

Das solltest du auch mal versuchen.

MfG Spess

von Hans M. (ehrnsperger)


Lesenswert?

Eieiei, wie man die Stufen ausrechnet ist mir klar und versucht hab ichs 
schon zu genüge - Steht ja auch im Text.

von vlad (Gast)


Lesenswert?

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.

von vlad (Gast)


Lesenswert?

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

von vlad (Gast)


Lesenswert?

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

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.