Archiv der Kategorie: Berechnung

Den Mittelwert fortlaufend bilden mit einer Funktion

Es soll ein fortlaufender Mittelwert aus n Integer Zahlen gebildet werden. Dazu wird die Funktion float mittelWert(int neuerWert) verwendet.

Am Anfang des Programms wird die Anzahl der Mittelungen festgelegt und die globalen Variablen werden erstellt.

#define anzahlMittelWerte 10
int werte[anzahlMittelWerte], zaehlerMittelWerte=0;

Im Hauptprogramm werden fortlaufend Zufallszahlen zwischen 1 und 10 erzeugt. Diese werden hier gemittelt und ausgegeben.

Weiterlesen

Der Hamming Code für den Arduino

Bei einer digitalen Funkübertragung kann es zu Störungen kommen und einzelne Bits werden falsch empfangen, kippen sozusagen um. Aus einer 1 wird eine 0.

Richard Wesley Hamming hat sich dazu Gedanken gemacht und eine Codierung entwickelt, die es erlaubt zu überprüfen ob alle Bits richtig übertragen wurden. Einzelne Bits können sogar rekonstruiert werden.

Hier sollen 4 Daten-Bits übertragen werden. Dazu werden nach einem bestimmten Schema 3 Paritäts-Bits hinzugefügt, die Daten werden codiert. Es müssen nun 7 Bits übertragen werden. Wird ein Bit falsch empfangen, so lässt es sich später bei der Decodierung rekonstruieren.

Die 4 Daten-Bits werden mit 3 Paritäts-Bit nach diesem Schema ergänzt.
Die Datenbits: d4, d3, d2, d1 Weiterlesen

Arduino FFT auf dem 5110 Display ausgeben

Aus den letzten beiden Artikeln Arduino FFT berechnen und 5110 Grafik ausgeben ist nun eine Arduino Uno FFT Berechnung mit Grafik Ausgabe geworden.

Arduino Uno FFT Ausgabe

Für die Grafik Ausgaben wurde die Library von Henning Karlsen installiert und verwendet.

Das Programm berechnet verschiedene Wellenformen
– Ein Rechtecksignal
– Ein Sinus Signal
– Zwei addierte Sinus Wellen
– Eine Frequenzmodulation
und gibt das Frequenzspektrum von 0 – 2520 Hz aus, in 40 Hz Schritten. Weiterlesen

Eine einfache FFT – Fast Fourier Transformation – mit dem Arduino Uno

Ein Rechtecksignal kann aus verschiedenen Sinussignalen erstellt werden indem man die einzelnen Sinusschwingungen addiert. Um ein Rechtecksignal zu erhalten nimmt man die Grundfrequenz f mit der Amplitude 1 und addiert die dreifache Frequenz 3*f mit der Amplitude 1/3 und 5*f mit 1/5 Amplitude usw. Das ergibt dann eine Rechteckschwingung.

 f(t) = sin(\omega t) + 1/3 sin(3 \omega t) + 1/5 sin(5 \omega t) + 1/7 sin(7 \omega t) ...

Diese Fourierreihe beschreibt ganz allgemein die Frequenzbestandteile einer Schwingung. Siehe Wikipedia.

Hat man bereits eine Schwingung vorliegen und möchte sie zerlegen in die einzelnen Frequenzen kann man ein Fourierzerlegung machen, auch Fourier Transformation genannt. Für Mikrokontroller und andere Programme wurde eine schnelle Frequenzzerlegung geschrieben, die FFT oder Fast Fourier Transformation um diese Zerlegung fast im Echtzeit machen zu können. Weiterlesen

Die Dämpfung auf Koaxkabeln bei verschiedenen Frequenzen berechnen.

Die Kabeldämpfung berechnen für 4 Standard Koaxleitungen

RG174, RG58, RG213 und Aircell 7

Hier die Frequenz und Länge der Leitung eingeben dann wird die Dämpfung berechnet.

Zum besseren Verständnis wird zusätzlich noch die Ausgangsleistung berechnet wenn 25W Leistung eingespeist werden.

[jazzy form=“kabeldaempfung3″]

 

Zur Berechnung dient die Näherungsformel wie auf der Seite von Ralf Schüler beschrieben.

dB = k1 + k2*f + k3*\sqrt{f}

 

 Paus = \frac{ Pein }{ 10 ^ \frac{db}{10} }

 

von Matthias Busse

AIS Daten vom Cypho-150 Empfänger im Arduino live einlesen und die MMSI ausgeben

Hier werden die AIS Daten von meinem AMEC Cypho-150 AIS Empfänger eingelesen und die MMSI wird ausgegeben.

Die NMEA0183 Ausgangsleitungen vom Cypho-150 sind gelb + und grün – , wie im Handbuch angegeben.

Zur NMEA0183 > UART Pegel Wandlung nehme ich den MAX232 Chip.
Der NMEA0183 Eingang+ ist Pin 8 (R2IN) und der UART Ausgang ist Pin 9 (R2OUT). Dieser kommt an den Arduino Uno RX Eingang.
Der NMEA0183 Eingang- kommt auf den GND vom MAX232 und vom Arduino. Weiterlesen

Distanz und Peilung zwischen 2 Positionen berechnen

Die Entfernung und die Peilung sollen von Position 1 (Länge / Breite) zu Position 2 (Länge / Breite) berechnet werden. Dabei werden beide Positionen in Grad mit Kommastellen eingegeben. Die Software soll auf dem Arduino laufen.

Die Distanz wird in m und sm (Seemeilen) ausgegeben, die Peilung in Grad 0….359 Grad. Weiterlesen

Ein SeaTalk zu Arduino Interface mit LT-Spice simuliert

Thomas Knauf stellt auf seiner Seite viele Informationen zum SeaTalk Protokoll von Autohelm / Raymarine zur Verfügung, unter anderem eine RX / TX Eingangsstufe vom PC (RS232) zum SeaTalk Bus.

Diese Schaltung habe ich mit LT-Spice simuliert und etwas verändert.
1. Es wurden die Standard Transistoren BC547B (NPN) und BC557B (PNP) verwendet.
2. Die Spannung am Arduino Pin sollte 5V nicht übersteigen, deshalb ist am Ausgang zum RX am Arduino ein Spannungsteiler mit 4,7k und 2,2k Ohm eingefügt. Weiterlesen

Den Arduino Quarz Takt genauer bestimmen mit einer RTC oder mit GPS

Für einen Frequenzzähler mit dem Arduino ist es wichtig den Quarz Takt genau zu bestimmen. Beim Arduino Uno ist er mit 16 MHz angegeben. Der eingebaute Quarz hat einen typischen Fehler von \pm 30ppm (parts per million) also \pm30*10^{-6}.

Das entspricht 30 Sekunden auf 1.000.000 Sekunden beim Arduino.

Für den Frequenzzähler bedeutet das einen Fehler für 100.000 Hz von \pm 3Hz. Da dieser Fehler auch bei 99.999 Hz gilt, können wir von dieser Genauigkeit ausgehen:
> Die ersten 4 Stellen der Frequenz werden korrekt dargestellt. Weiterlesen

Den LTC-1799 mit LT-Spice simulieren Teil 2

Nun soll die Schaltung berechnet und das Signal ausgegeben werden. Dazu bietet Spice eine Zeit Simulation an, die mit tran abgekürzt wird. Hier wird mindestens die Zeit für die Simulation eingegeben.

Als erstes ändern wir den Widerstand mit der rechten Maustaste auf 10k Ohm.
Die Frequenz wird nach folgender Formel berechnet
f (Hz) = 10.000.000 Hz * 10.000 Ohm / N / Rset

Mit N=1 für GND und RSet = 10.000 Ohm ergibt sich eine Frequenz von 10 MHz.

Dann wählen wir die Simulation aus > Läufer Butten oben im Menu, dann den Reiter Transient und tragen unter Stop Time neu 10u (10 Microsekunden) ein. Unten in der Ausgabe steht dann .tran 10u. Weiterlesen