Frequenzausgabe formatieren

Gast #435018
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 !
Angehängte Dateien:
Gast #435025
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...
Gast #435160
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!
Gast #435161
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.
Gast #435236
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 ?
Gast #435302
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.

Angehängte Dateien:
Gast #435325
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.
Gast #435526
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
Gast #439185
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
Angehängte Dateien:
Gast #439233
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...
#439299
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
Gast #439401
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.
Gast #439516
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.
Gast #439521
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.
Gast #439540
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.
Gast #439542
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
Gast #439545
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.
Gast #439557
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.
Angehängte Dateien:
Gast #439681
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren