Archiv der Kategorie: ICs

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

RS485 Repeater mit dem NMEA shield

André hat ein RS485 Repeater Programm für das NMEA shield geschrieben:

Moin moin,

habe die RS 485 getestet und funktioniert einwandfrei !
Anbei Bilder hierzu , der zusätzliche Wiederstand in der Klemme ist, weil der Bus auf beiden
Seiten mit 120 Ohm abgeschlossen sein muß … der FTDI zu USB hat zwar einen eingebauten den muß man aber über die zusätzlichen Kabel mit anschließen, da ich das für die Programmierung der Brandmeldeanlage aber nicht brauche, habe ich das so gelöst. Weiterlesen

Das NMEA Shield für den Arduino Mega 2560 ist fertig

Endlich ist es fertig, das NMEA Shield 1.7 für den Arduino Mega 2560 ist da.

Andre und ich haben ein eigenes Arduino Shield entwickelt mit den NMEA Schnittstellen:
2 x NMEA0183 / RS232
1 x N2k (NMEA2000) / CAN Bus
1 x RS485
1 x USB ( durch den Arduino Mega darunter ist natürlich auch ein USB Port vorhanden )

Ein N2k (NMEA2000) Abschlußwiderstand kann mit einem Jumper eingeschaltet werden, wenn das Shield am Ende eines NMEA2000 Backbones betrieben werden soll. Normalerweise ist dieser Jumper aber nicht gesteckt.

Ein Abschlusswiderstand für den RS485 Eingang kann auch per Jumper zugeschaltet werden. Weiterlesen

Kapazitäten messen. Ein Eagle Board von Andre.

Andre hat ein Board in Eagle gezeichnet für die Kapazitäts Messung aus diesem Beitrag.

Das Board ist für einen Arduino Nano geeignet.
Benötigt werden der Arduino Nano, zwei Widerstände mit 220 Ohm / 10 kOhm und 1-3 Steckleisten.

Hier die Schaltung

und das Layout der Platine. Weiterlesen

Ein Batteriemonitor für Strom und Spannung mit dem INA226 und dem Arduino Uno

Ich möchte einen Batteriemonitor bauen. Dazu muß die Batteriespannung gemessen werden mit 12V oder 24V und der entnommene oder geladene Strom. Für die Strommessung wird ein Shunt Widerstand verwendet. Für hohe Ströme von einigen Ampere bis hin zu mehreren Hundert Ampere werden Shunt Widerstände angeboten die einen Spannungsabfall von ca. 60mV bis 75 mV beim Maximalstrom haben.

Ich brauche also einen AD Wandler der -+75mV genauso gut messen kann wie 12V oder 24V. Das ist mit zwei langsamen aber hochauflösenden AD Wandlern machbar. Dazu kann man einen Spannungsteiler für 24V und eine OP Verstärker für +-75 mV vorschalten. Hierbei sind dann noch die Toleranzen der Widerstände und der OP Schaltung zu beachten. Weiterlesen

NMEA2000 Ankeralarm mit dem Arduino aufgebaut

Ein Ankeralarm hält die Ankerposition des Bootes fest und ermittelt dann kontinuierlich den Abstand zum Ankerplatz über die Nacht. Es wird ein Alarmradius eingegeben den das Boot nicht verlassen darf. Alle gehen schlafen und sollen geweckt werden, wenn der Anker nicht hält, weil z.B. der Wind stärker geworden ist, der Anker sich gelöst hat und der eingestellte maximale Ankerradius verlassen wird.

Dazu benötige ich einen GPS Empfänger (hier mein Lowrance HDS), ein NMEA2000 Netzwerk, den Arduino mit Schnittstellenplatine zur Berechnung der Positionen und dem Abstand, einen Poti um die Alarmdistanz (maximaler Ankerradius) einstellen zu können und einen Alarmtongeber (hier habe ich nur eine LED angeschlossen) der ggf. noch über ein Relais geschaltet werden kann. Weiterlesen

NMEA2000 GPS-Position in den Arduino einlesen und formatiert ausgeben

Die GPS Position, Kurs und Geschwindigkeit werden vom HDS gesendet, aus dem NMEA2000 Netzwerk in den Arduino Mega eingelesen und per USB dann formatiert in der Konsole ausgegeben.

Es kommt ein schneller Kurs/Speed Datensatz 4x pro Sekunde aus dem NMEA2000 Netz
PGN 129026 COG & SOG, Rapid Update
und ein GPS Datensatz 1x pro Sekunde
PGN 129029 GNSS Position Data

Diese beiden Datensätze werden eingelesen, zerlegt und die interessanten Werte werden auf der Konsole ausgegeben. Weiterlesen