mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzausgabe formatieren


Autor: Mr-400-Volt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 !

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Upps, Anhang nicht gesehen. Basskomm ist echt nicht mein Ding...

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Profi:

Du bist engagiert ;-)

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Johannes A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mr-400-Volt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.


Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike Köppl (helimike0705)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Mr-400-Volt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, fehler in der Teiler-Anzeige. Muß lauten :

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

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mr-400-Volt (Gast)
Datum:

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

Nu isser so gut wie fertig.

MfG Mr-400-Volt

Autor: k.m. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mr-400-Volt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, hier der Code..............

Autor: Mr-400-Volt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
und hier der Schaltplan. Ist vieleicht etwas durcheinander, aber man 
kann durchsteigen..........

Autor: k.m. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: k.m. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: k.m. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mr-400-Volt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.