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
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.
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.
Hi
>...muss man wahrscheinlich selbst einmal versucht haben zu programmieren.
Das solltest du auch mal versuchen.
MfG Spess
Eieiei, wie man die Stufen ausrechnet ist mir klar und versucht hab ichs schon zu genüge - Steht ja auch im Text.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.