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 !
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...
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!
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.
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 ?
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.
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.
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
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
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
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...
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
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.
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
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.
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.
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.
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
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.
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.
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
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