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 ?
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
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
Sorry, fehler in der Teiler-Anzeige. Muß lauten : . . Locate 1 , 15 Lcd Teiler ; " " . .
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
@Andrè, vielen dank für deine Antwort. Es läuft super !!!! Nu isser so gut wie fertig. MfG Mr-400-Volt
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
und hier der Schaltplan. Ist vieleicht etwas durcheinander, aber man kann durchsteigen..........
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
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.