Archiv des Autors: admin

Einstellbares Dämpfungsglied bis 4GHz mit dem Arduino

Ich habe die Attentuator (Dämpfungsglied) Platine aus China bekommen mit dem PE4302 Chip drauf.

Diese Platine soll seriell vom Arduino angesteuert werden. Die Dämpfung ist dann einstellbar bis zu einer Frequenz von 4GHz. Das funktioniert wenn man das Datenwort seriell überträgt mit Data und Clock und dann mit LE das Wort scharf schaltet.

Doch zuerst ein Blick auf die gelieferte Platine. Da fallen gleich ein paar Fehler auf:

Am Ausgang in der Nähe des SMA Steckers ist eine Masse Durchkontaktierung direkt neben die Streifenleitung gesetzt worden. Da hat einer nicht aufgepasst.

Die Lötbrücke J5 ist gesetzt. Damit liegt LE direkt auf 3V und ist nicht ansprechbar. Diese Lötbrücke habe ich entfernt.

Die Lötbrücke J6 ist gesetzt. Damit ist P/S auf GND und somit auf den Parallelbetrieb eingestellt. Diese Lötbrücke habe ich entfernt. Für den Seriellen Betrieb habe ich die Lötbrücke J4 gesetzt und damit P/S auf 3V gelegt. Dann können die seriellen Daten akzeptiert werden.

Hier die Änderungen im Bild.

Dann wurde der Arduino Uno angeschlossen.
Die Spannungsversorgung des PE4302 Platine ist auf 5V ausgelegt und damit direkt am Arduino 5V Ausgang anschließbar.
Die Datenpegel des Uno Liegen bei 5V. Der PE4302 akzeptiert aber nur 3V. Hier wurden drei Spannungsteiler in den 3 Datenleitungen zwischengeschaltet jeweils mit 2,2 kOhm und 3,3k Ohm Widerständen um den PE4302 nicht zu beschädigen.

Die Datenausgänge am Arduino sind frei wählbar und im Programm angegeben.

Hier der komplette Aufbau mit dem Uno, den 3 Spannungsteilern und dem Attentuator.

Dazu das Arduino Programm. Die Dämpfung wird von 0dB zu 31,5dB hochgefahren und dann wieder runter gefahren zu 0dB. Alle 2 Sekunden wird die Dämpfung geändert.

// PE4302 Digital Step Attentuator
// 1MHz bis 4GHz Dämpfungsglied 0-31,5dB
// 3V Spannung, 3V Daten
// DIP Schalter Stellung : wenn P/S auf 1
// C0.5-C16 alle auf 1 gibt 31,5 db beim Einschalten
// oder
// DIP Schalter Stellung : wenn P/S auf 0
// PUP1 und PUP2 auf 1 gibt 31,5 db beim Einschalten
//
// https://forum.arduino.cc/index.php?topic=491568.0
//
// Matthias Busse 10.2017 Version 1.0

int DATA=5; // freie Auswahl der 3 Leitungen
int CLOCK=6;
int LE=7;
int pause=2000; // Pause in ms

void setup() {
  Serial.begin(38400);
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  pinMode(LE, OUTPUT); 
}

void loop() {
  float att;   // Daempfung 0 bis 31.5

  for (att = 0.0; att <= 31.5; att+=0.5) { // hoch gehen
    Serial.print(att); 
    Serial.println(" dB");
    setAttenuator(att);
    delay(pause);
  }
  for (att = 31.5; att >= 0.0; att-=0.5) { // runter gehen
    Serial.print(att); Serial.println(" dB");
    setAttenuator(att);
    delay(pause);
  }
}

void setAttenuator(float attent){
// MSB (C16) ... LSB (C0.5) werden an den PA4302 seriell übergeben 
// max. 25kHz oder alle 0,05 ms aufrufen.
//
// Matthias Busse 10.2017 Version 1.0
  
  int i; // das Datenbit
  int attent2 = (int) attent*2.0;
  
  if ((attent2 < 0) || (attent2 > 63)) // Wert im Bereich ?
    return;
  digitalWrite(LE, LOW); // Daten in das Latch eingeben
  digitalWrite(CLOCK,LOW);
  for (int b = 6; b > 0; b--) { // die 6 Bits
    i=((attent2 << 1) >> b) & 0x01;
    digitalWrite(DATA, i); // ein Bit schreiben
    digitalWrite(CLOCK, HIGH); // und Bit übernehmen
    digitalWrite(CLOCK, LOW); 
  }
  digitalWrite(LE, HIGH); // Serielle Daten an den Chip übergeben
  digitalWrite(LE, LOW);  // Auf neue Daten warten.
}

Getestet wurde die aufgebaute Schaltung mit dem Anritsu Site Master S332D mit Transmissions Messung von 25MHz bis 3GHz.

Verwendet wurden:
Arduino Uno
Arduino Software 1.8.0
Drei Spannungsteiler 5V > 3V aus 2,2k und 3,3kOhm
PE4302 Platine fertig aufgebaut

von Matthias Busse

Leistung von dbm umrechnen in Volt, dbmW zu VRMS / VPeak / VoltPeakPeak

Die db Milliwatt (db mW) Leistung wird eingegeben und umgerechnet in:
– db Watt (db W)
– Milli Watt (mW)
– Watt (W)
– Volt Effektiv (V RMS)
– Volt Spitze (V Peak)
– Volt Spitze Spitze (V PP)

Die Berechnungen gelten für einen Wellenwiderstand (Z0) von 50 Ohm.

  • dB :
  • Watt :
  • Volt:

von Matthias Busse

Adapterplatine 4-polig RM3,5 zu RM1,5

Für ein Projekt brauchte ich 4-polige Adapterplatinen. Davon sind noch ein paar unbestückte Platinen übrig, die ich jetzt für 2 € pro Stück abgeben kann plus 1,45 Euro Versand als Brief in Deutschland.

Hier das Bild von den Platinen, Vorderseite und Rückseite.

Die Platine ist 15 x 13 mm groß auf FR4 Material 1,6mm dick.

 

Verwendet habe ich sie für einen 4-poligen JST-ZR Japanstecker Stecker im Rastermaß 1,5mm und eine 4-polige Schraubklemme in Rastermaß 3,5mm für einen Kabelanschluss bis zu 1mm².

Hier ein Beispiel mit meiner eignen Bestückung

Bei Interesse schickt mit eine Email.

von Matthias Busse

50 Ohm SMA Abschlußwiderstand bis 4GHz für 2 € selbst gebaut.

Ich habe einen einfachen SMA Stecker zum direkten anlöten für Platinen und 2 x 100 Ohm Widerstände für einen SMS Abschlußwiderstand verbaut und vermessen.

Vom Stecker habe ich die 4 Platinen-Masse-Anschlüsse mit einem Seitenschneider bündig abgeschnitten und den Innenleiter deutlich gekürzt, sodass er nur noch ca. 1mm aus der Isolation vorsteht.
Für den Abschlußwiderstand 50 Ohm wurden zwei 100 Ohm SMD Widerstände parallel geschaltet. Dafür habe ich die SMD Bauform 0805 gewählt weil sie ziemlich genau die Isolierung des SMA Steckers überbrückt. Es sind 2 Widerstände mit 1% Toleranz.

Die Widerstände wurden nacheinander erst am Mittelleiter und dann aussen verlötet. Dabei habe ich die Beschriftung nach unten gelegt um den eigentlichen Widerstand dicht an das Dielektrikum zu bringen und möglichst keine Luft oder das Trägermaterial dazwischen zu haben. Das Dielektrikum ist durch die Wärme beim Löten etwas hervorgequollen, sodass ich innen noch einmal nachgelötet habe um die Widerstände zu entspannen und nicht später einen Bruch der beiden Widerstände zu riskieren. Weiterlesen

Die Airmar PB100 Wetterstation mit dem NMEA Shield am PC auslesen

André Singer hat ein Programm für die Airmar Wetterstation PB100 und das NMEA Shield geschrieben.

Moin Moin !

Ich habe einen AIRMAR PB100 an das Shield angeschlossen.
Die PB100 sendet und empfängt Ihre NMEA0183 Daten nicht über eine normale RS232 sondern über RS485.
Zum Glück haben die gesendeten Daten einen vernünftigen Pegel, trotz 25m Zuleitung, sodass
hierfür die Serial3 zum empfangen der Daten genutzt werden konnte. Zum senden der Einstellungen und Befehle habe ich die RS485 auf Serial1 verwendet, da hierfür die 25m einfach zu lang war, oder aber die PB100 die Daten wirklich als RS485 erwartet.
Für die Serial3 ist es wichtig die Masse der 12V Versorgung der PB100 noch mit auf die Klemme zu legen.


Danach kann man die Daten über den Seriellen Monitor sich anschauen oder aber über die Software von AIRMAR visualisieren. Weiterlesen

Der Heading NMEA2000 Datensatz 127250 wird zu NMEA0183 übersetzt und ausgegeben

Der Vessel Heading PGN 127250 wird mit dem NMEA Shield eingelesen, zerlegt und als NMEA0183 Datensatz auf TX1 wieder ausgegeben. Bei einem Magnetkompass wird HDM (Magnetic) ausgegeben und bei einem Satelliten- oder Kreiselkompass HDT (True).

Genau so können auch andere NMEA2000 Daten übersetzt werden.

Diese Übersetzung wird benötigt wenn man von einem neuen Autopiloten mit NMEA2000 Verkabelung ein schnelles Heading für ein altes Radar benötigt. Die Kompaßdaten werden typisch 10x pro Sekunde ausgegeben.

Die NMEA0183 Datensätze sind hier beschrieben:
http://nmea.de/nmea0183datensaetze.html#hdm

Hier das Programm: Weiterlesen

NMEA2000 Position einlesen und auf USB Klartext ausgeben mit dem NMEA Shield

Der NMEA2000 PGN 129025 liefert schnelle Positionsdaten mit Breite und Länge typisch 10x in der Sekunde. Diese werden mit den NMEA Shield am N2K Eingang eingelesen und als Klartext per USB am PC ausgegeben.

Hier das Programm:

// Die Positionsdaten vom PGN 129025 werden mit dem 
// NMEA Shield in den Arduino eingelesen und dann 
// formatiert auf USB ausgegeben.
// 
// PGN 129025 : Position, Rapid Update, typisch 10x pro Sek.
//
// Matthias Busse 12.04.2017 Version 1.0

#include <SPI.h>
#include <Arduino.h>
#include <NMEA2000_CAN.h>
#include <N2kMessages.h>
#include <N2kMessagesEnumToStr.h>

#define N2k_CAN_INT_PIN 21
#define MCP_CAN_RX_BUFFER_SIZE 100

typedef struct {
  unsigned long PGN;
  void (*Handler)(const tN2kMsg &N2kMsg); 
} tNMEA2000Handler;

void PositionRapid(const tN2kMsg &N2kMsg);

tNMEA2000Handler NMEA2000Handlers[]={
  {129025L,&PositionRapid},
  {0,0}
};

template<typename T> void PrintLabelValWithConversionCheckUnDef(const char* label, T val, double (*ConvFunc)(double val)=0, bool AddLf=false ) {
  Serial.print(label);
  if (!N2kIsNA(val)) {
    if (ConvFunc) { Serial.print(ConvFunc(val)); } 
    else { Serial.print(val); }
  } 
  else Serial.print("not available");
  if (AddLf) Serial.println();
}

void setup() {
  Serial.begin(115200);
  Serial.println("NMEA2000 PGN 129025 PositionRapid als Klartext ausgeben");
  NMEA2000.EnableForward(false);
  NMEA2000.SetMsgHandler(HandleNMEA2000Msg);
  NMEA2000.Open();
}

void loop() {
  NMEA2000.ParseMessages();
}

void PositionRapid(const tN2kMsg &N2kMsg) {
// PGN 129025 LAT & LON, Rapid Update.
// kommt typisch 10x pro Sekunde
double Latitude;
double Longitude;
    
  if (ParseN2kPositionRapid(N2kMsg,Latitude,Longitude) ) {
    Serial.print("Breite: ");
    Serial.print(Latitude,5);
    Serial.print(" Laenge: ");
    Serial.println(Longitude,5);
  }
  else {
    Serial.print("Fehler PGN: ");
    Serial.println(N2kMsg.PGN);
  }
}

void HandleNMEA2000Msg(const tN2kMsg &N2kMsg) {
int iHandler;
  
  for (iHandler=0; NMEA2000Handlers[iHandler].PGN!=0 && !(N2kMsg.PGN==NMEA2000Handlers[iHandler].PGN); iHandler++);
  if (NMEA2000Handlers[iHandler].PGN!=0) {
    NMEA2000Handlers[iHandler].Handler(N2kMsg); 
  }
}

Verwendet wurden:
Arduino Software 1.8.0
NMEA Shield Version 1.7
Arduino Mega 2560
NMEA2000 GPS Antenne

von Matthias Busse