Das STM32F103C8T6 Board mit der Arduino Software programmieren

Im Moment (Ende 2022) sind Arduinos schlecht zu bekommen, da die Chips ATMEGA328P Mangelware sind. Ich habe mich etwas umgesehen und bin auf das Board „Blue Pill“ mit einem STM32F103C8T6 Chip gestossen. Dieses ist weiterhin günstig zu bekommen und ist ähnlich wie der Arduino Nano aufgebaut.

Es hat aber einige Vorteile:
– 72MHz Taktfrequenz
– RTC Uhr eingebaut
– 64kB Flash Speicher und 20kB RAM
– 12bit AD Wandler
– 3x USART serielle Schnittstelle (Rx / TX)
– 2x SPI, 1x I²C, 1 x CAN Schnittstelle
– 37 GPIO Anschlüsse
– 3,3V für Spannungsversorgung und Daten, wobei viele Datenleitungen 5V tolerant sind.
und einiges mehr.

Weiterlesen

Teil 3 : 16er Touchpad TTP229 mit Bestätigung, Kommastellen und +/- Wechsel

Die TTP229 – 16 Touch Tasten Platine und der Arduino sind erweitert worden durch einen 5V Pieper.
Jetzt können auch Kommazahlen / Nachkommastellen eingegeben werden.
Das Vorzeichen kann gewechselt werden + oder –
Die Taste 10 ist zur 0 geworden.
Der Pieper bestätigt jetzt die Tasteneingabe mit einem kurzen Ton.

Ich hatte Probleme, das die Tastatur ohne Betätigung zufällig Zahlen eingelesen hat. Meist waren es die 6 oder die 7.
Das lag daran dass die Platine flach auf dem Holztisch gelegen hat. Da hat die interen Kalibration der TTP229 Chips nicht gut gearbeitet und Tasten erkannt die gar nicht gedrückt waren. Das liess sich aber einfach beheben, ich habe oben einfach zwei M3x8mm Schrauben rein gedreht und damit die Platine etwas vom Tisch angehoben. Nun funktioniert es zuverlässig und gut. Weiterlesen

Teil 2: Eine längere Zahl mit dem TTP229 Touch Pad eingeben und bei ENTER ausgeben.

Mit dem 16er Touch Pad wird eine Zahl eingelesen mit mehreren Ziffern und bei Enter wird diese Zahl ausgegeben. Als ENTER Taste wird die Taste 16 verwendet.

Der Aufbau ist identisch wie in diesem Beitrag. Weiterlesen

16er Touch Pad TTP229 mit dem Arduino Uno auslesen.

Das 16er Touch Tasten Feld mit dem TTP229 Chip wird vom Arduino Uno seriell ausgelesen.

Dazu muss eine Brücke (siehe Bild) auf der fertigen Platine HW-136 gesteckt werden um alle 16 Tasten einzeln seriell auszulesen.
5V und GND werden am Arduino angeschlossen.
SCL und SDO werden auf beliebige digitale Pins des Arduino gelegt. Ich habe hier Pin 2 und 3 verwendet.

Hier der Aufbau:

Weiterlesen

Branchline Koppler 2,4 GHz mit Microstrip Leitungen aufgebaut und vermessen

Ich habe einen Branchine (Quadratkoppler) in Microstrip Technik auf einer 0,8mm dicken FR4 Platine simuliert, aufgebaut und vermessen.

Ein Branchline Koppler hat 4 Anschlüsse ( 4 Ports ).


Ein Signal von Port1 (links oben) wird zu Port 2 und Port 3 (beide rechts) geleitet und erscheint an den beiden Ports mit jeweils der halben Leistung, also -3dB und 90 Grad Phasenverschoben.
Der Port 4 (links unten) ist dabei entkoppelt und hier kommt so gut wie keine Leistung an, wenn Port 2 & 3 mit 50 Ohm abgeschlossen werden, z.B weniger als -20dB. Weiterlesen

Arduino Programmierung #13 – Poti dimmt LED mit PWM

Ein Potentiometer wird eingelesen mit dem AD Wandler, der Wert wird gemappt auf dem PWM Wertebereich und mit analogWrite ausgegeben zur LED.

Und hier das Programm

// Mit Poti die LED dimmen
// Poti - AD-Wandler - map - pwm - analogWrite
// Poti ist angeschlossen an Pins : 5V - A0 - GND

int analogPin = A0, LedPin = 13, adwert, pwm;

void setup() {
  Serial.begin(38400);
  pinMode(LedPin,OUTPUT);
}

void loop() {
  adwert = analogRead(analogPin);   // AD Wandler auslesen
  pwm = map(adwert, 0, 1023, 0, 255);
  analogWrite(LedPin, pwm);         // LED mit PWM ansteuern und dimmen
  Serial.println(pwm);              // Wert ausgeben
  delay(100);
}

 

Arduino Programmierung #12 – map() Funktion

Mit der map() Funktion werden Wertebereiche skaliert und in andere Wertebereiche übertragen.

und hier das Programm zum ausprobieren

// Mit Poti - AD-Wandler - map - pwm die LED Dimmen
// Poti ist angeschlossen an Pins : 5V - A0 - GND

int analogPin = A0, LedPin = 13, adwert, pwm;

void setup() {
  Serial.begin(38400);
  pinMode(13,OUTPUT);
}

void loop() {
  adwert = analogRead(analogPin);   // AD Wandler auslesen
  pwm = map(adwert, 0, 1023, 0, 255);
  analogWrite(LedPin, pwm);         // LED mit PWM ansteuern und dimmen
  Serial.println(pwm);              // Wert ausgeben
  delay(100);
}

 

Arduino Programmierung #11 – analogRead()

Die Poti Spannung wird mit den AD Wandler und analogRead() eingelesen.

Und hier das Programm dazu.

// analogRead Potentiometer
// Poti ist angeschlossen an Pins : 5V - A0 - GND

int analogPin = A0, adwert;

void setup() {
  Serial.begin(38400);
}

void loop() {
  adwert = analogRead(analogPin);  // AD Wandler auslesen
  Serial.println(adwert);          // Wert ausgeben
  delay(100);
}

 

Arduino Programmierung #10 – LED blinken ohne delay()

Die LED blinkt und der Prozessor wird nicht blockiert, er hat also Zeit andere Aufgaben zu erfüllen.

Und hier das Programm zu kopieren und ausprobieren.

// LED blinken lassen ohne delay()

int LED=13;
unsigned long neuMillis, altMillis, intervall=200;
bool ledStatus;

void setup() {
  pinMode(LED, OUTPUT);
  altMillis=0;
}

void loop() {
  neuMillis = millis();
  if( (neuMillis - altMillis) >= intervall){
    altMillis = neuMillis;
    ledStatus = !ledStatus;
    digitalWrite(LED, ledStatus);
  }
  // hier läuft der Programmcode weiter
}

 

Arduino Programmierung #9 – Serial.read() liest Ziffern vom PC ein.

Wie können Ziffern 0 – 9 vom seriellen Monitor am PC in den Arduino übergeben werden?
Dazu wird Serial.available() und Serial.read() verwendet.

Hier das Programm

// Integer Ziffer Seriell vom PC einlesen

int i,zahl;

void setup() {
  Serial.begin(38400);
  Serial.println("Hallo Shelvin.");
}

void loop() {
  if(Serial.available()) {
    i=Serial.read()-48;
    if(i>=0 && i<=9) {
      zahl=i;
      Serial.print("die Zahl ist: ");
      Serial.println(zahl);
    }
  }
}