Forum: Mikrocontroller und Digitale Elektronik Frequenzausgabe formatieren


von Mr-400-Volt (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich bin gerade dabei mir einen Frequenzmesser zu bauen. Er zählt 
ohne Vorteiler bis 6 MHz ohne Probleme. Die Anzeige erfolgt in Hz, z.b. 
3686250 Hz. Ich hätte aber gern eine anzeige in z.b. 3.686.250 Hz. Wie 
könnte ich das Lösen, ich beckomm das nicht so richtig hin. Wäre auch 
eine automatische `Bereichswahl´möglich ?
Bitte um Hilfe..........

Danke !

von johnny.m (Gast)


Lesenswert?

Ich denke mal, Du hast die Ziffern in einem ASCII-String vorliegen. Wie 
wäre es, wenn Du den String so manipulierst, dass Du von hinten (von den 
Einsern aus) durchgehst (in Deinem Beispiel mit 3686250 also angefangen 
bei der 0) und nach jeder dritten Stelle einfach einen ASCII-Punkt 
einfügst. Den geänderten String kannste dann ausgeben. Du schreibst 
allerdings leider nicht, wie genau Du den Binärwert, den Du ja 
wahrscheinlich als Messergebnis zunächst erhältst, in einen String 
umwandelst (printf?) und wie Du ihn ausgibst (Schnittstelle, 
Display-Typ). Deshalb kann ich da nur Vermutungen anstellen...

von johnny.m (Gast)


Lesenswert?

Upps, Anhang nicht gesehen. Basskomm ist echt nicht mein Ding...

von Martin (Gast)


Lesenswert?

Ich kann Dir leider nicht mit Basic-Code dienen, aber ein paar Gedanken 
zu Deinem Problem:

1. Darstellung: Zerlege die Frequenzwerte in die Dekaden und gebe sie 
durch Punkte getrennt im string aus, z.B. abs(freq/1000000) ergibt die 
Millionen-Stellen, mod(freq/1000) die Stellen unter Tausend. Mit ein 
bischen Fantasie könnte man das auch rekursiv coden.

2. Bereichswahl: Fange mit einer großen Torzeit an, kriegst Du einen 
Overflow war der Bereich wohl zu klein, d.h. Torzeit verkürzen.

Ich hoffe das hilft Dir weiter, viel Spass!

von Profi (Gast)


Lesenswert?

Das könnte so gehen:

dim mhz,khz,hz as longinteger  'oder wie das in bas heißt
mhz=freq/1000000
khz=(freq-mhz*1000000)/1000    'oder khz=freq/1000-mhz*1000
hz =freq-mhz*1000000-khz*1000

if freq>1000000 then lcd mhz;".";
if freq >  1000 then lcd khz;".";
lcd hz;" Hz"

Mein letztes Basic-Programm schrieb ich vor 20 Jahren, also ohne Gewähr.

Wenn Du die Berechnungen zusammenfasst, wird das Programm kompakter und 
schneller, z.B:
Ciotemp = Ciotemp * 256
Freq = Ciotemp + Tmrtemp
Freq = Freq * 5

-->
Freq = 5* Ciotemp*256 + Tmrtemp

Bitte berichte uns, ob's klappt.

von Martin (Gast)


Lesenswert?

@ Profi:

Du bist engagiert ;-)

von Mr-400-Volt (Gast)


Lesenswert?

Danke für die Antworten, werde ich mal probieren und bescheit sagen, ob 
es geht. Mal eine andere Frage, kann ich die ADC Ports einzeln als 
AD-Wandler nutzen, und den rest als In/Out verwenden? Z.b. PC0 als 
AD-Wandler und PC1-5 als ausgänge ?

von Johannes A. (Gast)


Lesenswert?

Im Prinzip ja, nur solltest Du vermeiden, dass die Ausgänge während 
einer AD-Wandlung den Pegel wechseln. Das stört ungemein :-)

Gruß Johannes

von Mr-400-Volt (Gast)


Angehängte Dateien:

Lesenswert?

So, hab den Code geändert. Bascom kann immer nur eine rechnung pro zeile 
durchführen. Der tip von Profi ist soweit nicht schlecht, nur klaut er 
mir die kommastellen. 3 hätte ich gern behalten z.b. 3.686 MHz, er zeigt 
nun glatte 3 MHz an.


von Profi (Gast)


Lesenswert?

Du hast den Code ja auch deutlich verändert.

mhz ist ja auch nur der mhz-Anteil, also 3, danach soll ein Punkt 
kommen.

khz ist der khz-Anteil, danach wieder ein Punkt, dann die hz.

Das Problem wird mir jetzt bewusst: bei 3MHz zeigt er dann
3.  0.  0   an.

Wir müssen die fehlenden Nullen erzeugen, also doch mit einem String 
arbeiten: zuerst den String mit 000.000.000 füllen und dann die drei 
Variablen mhz, khz und hz reinblenden.

Dazu müsste ich meine Basic-Kenntnisse erst wieder etwas auf Vordermann 
bringen.


Oder doch jede Stelle einzeln ausrechnen. Könnte auch klappen.

von Mike (Gast)


Lesenswert?

hallo

ich proge zwar erst ein paar tage bascom.
aber ich denke wenn du nach den zeilen mit den
if .. then
locate 1,1
lcd..
end if

freq = freq/10

und in der nächsten
if ...then
locate 1,4
lcd..
end if

freq = freq/10

usw
 wieder locate 1,8
lcd...

die mhz und khz musst du durch "." ersetzten
oder du hast ein riesen lcd

also so in der art,bei mir im bascom-simulator lauft es so
einigermassen,bin nur noch nicht fertig geworden damit.
probiers aus und berichte.

mfg mike

von Mike K. (helimike0705)


Angehängte Dateien:

Lesenswert?

hallo

ich reviediere meinen voreiligen vorschlag.
mache mit bascom erst seit 4 tagen etwas,versuche mal
den vorschlag im anhang,eventuell funktioniert er.
wenn nicht verzeih die eile,würde mich aber freuen
wenn die sache so klappt.

mfg mike

von Mr-400-Volt (Gast)


Angehängte Dateien:

Lesenswert?

So, ich habe das Programm um folgende dinge erweitert.
Eine TTL-Anzeige High/neutral/Low
Teiler wird automatisch gewählt 2/4/8/16
Spannungsanzeige bis 5V (max 10V am eingang)
Aber das mit der Frequenzanzeige beckomme ich nicht hin. Da würde ich 
euch nochmal um Hilfe bitten..............

MfG Mr-400-Volt

von Mr-400-Volt (Gast)


Lesenswert?

Sorry, fehler in der Teiler-Anzeige. Muß lauten :

.
.
Locate 1 , 15
Lcd Teiler ; " "
.
.

von Unbekannter (Gast)


Lesenswert?

Also, in Haskell würde ich das so schreiben:

    format :: String -> String
    format = reverse . format' . reverse where
      format' (a:b:c:d:xs) = [a,b,c,'.'] ++ format' (d:xs)
      format' xs = xs

Das könnt ihr euch ja nach Basic oder C oder sonstwas übersetzen...

von André K. (andre-)


Lesenswert?

Resultx enthaelt das korrekt formatierte Ergebnis.
Unter der Voraussetzung, dass F die Frequenz in oben genannter Form 
enthaelt und niemals leer wird:

Dim F As String * 15
Dim T1 As String * 4
Dim Resultx As String * 20

Dim A As Byte , B As Byte
Dim C As Byte

F = "50"

      Resultx = ""
      B = Len(f)
      C = B / 3
      C = C * 3

      A = B - C
      If A = 0 Then A = 3
      C = 1

      Do
         T1 = Mid(f , C , A)
         C = C + A
         A = 3
         Resultx = Resultx + T1
         If B > C Then Resultx = Resultx + "."
      Loop Until C > B

von Mr-400-Volt (Gast)


Lesenswert?

@Andrè, vielen dank für deine Antwort. Es läuft super !!!!

Nu isser so gut wie fertig.

MfG Mr-400-Volt

von k.m. (Gast)


Lesenswert?

hallo

ich schreibe bestimmt für alle,wir würden uns bestimmt
freuen wenn du dein projekt einmal komplett veröffentlichst.
also z.b.mit platinen,schaltplan und den endgültigen code
wenn alles vorhanden ist.
dein projekt ist eine super sache,hatte für mich auch einen
großen lernanteil in bascom,habe selbst versucht das
hinzubekommen,leider kein erfolg.
ja man kann hier im forum für sein hobby viel lernen und
da bin ich froh drüber das viele an einem projekt ihre
ideen einbringen und zuletzt ein optimales ergebniss entsteht.

mfh k.m.

von Mr-400-Volt (Gast)


Lesenswert?

Das ist kein Problem, mache ich gern. Ich Zeichne den Schaltplan mal 
in´s reine und lade ihn incl. Code hoch. Ich versuche es heute 
noch.......

MfG. Mr-400-Volt

von Mr-400-Volt (Gast)


Angehängte Dateien:

Lesenswert?

So, hier der Code..............

von Mr-400-Volt (Gast)


Angehängte Dateien:

Lesenswert?

und hier der Schaltplan. Ist vieleicht etwas durcheinander, aber man 
kann durchsteigen..........

von k.m. (Gast)


Lesenswert?

hallo

das ging ja schnell,werde das gerät mal nachbauen.
und danke von allen,denke ich,für dieses projekt.
werden bestimmt viele gebrauchen können.
bin dabei mir eine mess-stadion zubauen und da passt
dein gerät wunderbar dazu.

mfg k.m.

von Mr-400-Volt (Gast)


Lesenswert?

Wenn kein geeignetes Relais mit geringem Stromverbrauch zur hand ist, 
sollte man einen NPN-Transistor z.b.BC547 mit einem 1K Basis Widerstand 
spendieren. Eine Freilaufdiode habe ich auch noch zusätzlich parallel 
zur Wicklung geschaltet.

von k.m. (Gast)


Lesenswert?

wäre in deinem code nicht noch eine anweisung für das
verwendete diplay nötig

config lcd 16*2

sowie die zuweisung der diplaybelegung im 4 bit modus

wenn ich deinen code im simulator laufen lasse kommt
manchmal wirrwar heraus.
oder ist das absicht von dir,wenn ja warum.

mfg k.m.

von Mr-400-Volt (Gast)


Lesenswert?

Das ist keine absicht. Ich habe das Dysplay unter 
Optionen-->Compiler-->LCD eingestellt, wie auf dem Schaltplan zu sehen 
ist. Also Port B0-B3 für die Daten D4-D7, Port B4 für RS und Port B5 für 
E. LCD Type auf 16*2

von k.m. (Gast)


Lesenswert?

ja gut,dachte das dies absicht war.habe dies
nur beim simulieren bemerkt das das lcd nicht richtig
angesprochen wurde.habe im code die config daten
für ein 16*2 und die portbelegung eingebunden und
es simulierte alles prima.

trotzdem danke für deine antworten.
prima teil.

mfg k.m.

von Mr-400-Volt (Gast)


Angehängte Dateien:

Lesenswert?

Kleines update..............
Habe das Relais über Transistor angesteuert, und den Ampl.eingang mit 
einem 1M auf +5V gezohgen. Bei nichtbenutzung des einganges, hatte ich 
ein negatives Signal am eingang, das der Verstärker logischerweise auch 
verstärkte und damit den 74hc00 versorgte. Der wurde almählich etwas 
warm. Der eingang ist trotzdem empfindlich geblieben. Es werden analoge 
Signale ab ca. 0.3 V gemessen.

von Mr-400-Volt (Gast)


Lesenswert?

Die Taster sind wie folgt belegt:

S2--> Anzeige Frequenz, Teiler und Eingang (TTL oder Amplitude)
S3--> Anzeige TTL-Pegel, Spannung
S4--> Eingang umschalten TTL/Amp.

Eine Rote LED zeigt TTL-Low
Eine Grüne TTL-High

von mike (Gast)


Lesenswert?

hallo wollt dieses projekt mal nachbauen, habe nur
ein problem den eingangs opv zu beschaffen.wo ist der her
oder was kann man noch benutzen.

danke mike

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.