Einstieg Mikrocontroller mit dem Arduino         

5 Übungen  


Elektronik-Labor   Projekte   AVR 





Morse-Sender und-Empfänger

Am 28.5.22 war für viele ein langes Wochenende, deshalb haben wir keine neuen Themen angefangen, sondern nur dies und das erweitert oder geübt. Eine Idee vom letzten Treffen war noch übrig: Wie kann man einen Arduino automatisch morsen lassen, und der andere soll die Zeichen verstehen und auf den Bildschirm bringen. In diesem Fall hat nur einer der beiden Arduinos (der linke) eine Verbindung zum PC. Deshalb muss der rechte Arduino über zwei Leitungen GND-GND und 5V-5V mit Spannung versorgt werden. Zusätzlich gibt es die Telegrafenleitung von D12(rechts) zu D10(links). Im rechten Controller läuft das erweiterte Programm Morse-Ausgabe  mit der zusätzliche Sendeleitung an D12. Links läuft das unveränderte Programm  Morse-Eingabe, das die Zeichen von der Morsetaste liest. Parallel zur Morsetaste liegt nun der automatische Morse-Arduino. Die Programme findet man im Kurs 4.

Für diese Anwendung haben wir diesmal den dynamischen Lautsprecher verwendet. Dazu wurde ein Elko mit 100 µF in Reihe geschaltet. Damit wird der kleine 32-Ohm-Lautsprecher lauter. Noch lauter wurde er mit einer kleinen Lautsprecher-Box.



In eine kleine Dose oder Schachtel wird ein Loch geschnitten.



Wenn der Lautsprecher über das Loch geklemmt wird, wird er lauter, und die tiefen Töne werden besser abgestrahlt.

Rechenprogramm mit zwei Schleifen

Diesmal ging es um ein reines Rechenprogramm. Ich wollte zeigen, wie man ein vorhandenes Programm als Vorbild nehmen kann, um daraus alle Befehle und Strukturen zu kopieren, die man für eine ganz andere Aufgabe braucht. Wir haben das Programm Reaktionstest (Kurs 4) verwendet. Darin enthalten ist eine Zählschleife und ein Beispiel für serielle Ausgaben an den seriellen Monitor. Daraus wurde Schritt für Schritt ein Programm zur Darstellung von Rechenblöcken für das Einmaleins. Wir mussten mehrmals etwas erweitern, korrigieren oder verbessern, bis alle zufrieden waren.

//Multiplikation
void setup(){
  Serial.begin(9600);
}

void loop() {
 int n, m;
 for (n=1; n<11; n++){
  for (m=1; m<11; m++){
    Serial.print("      ");
    if(m<10)Serial.print(" ");
    Serial.print(m);
    Serial.print(" * ");
    Serial.print(n);
    Serial.print(" = ");
    Serial.print(n*m);
    Serial.println(" ");
    delay(500);
  }
  Serial.println(" ");
 }
}

Das Programm erzeugt zehn Rechenblöcke von 1 * 1 = 1 bis 10 * 10 = 100.
 


Ein Rauschgenerator

Weil ich gerade an einem Rauschgenerator für einen Raspberry Pico gearbeitet habe, wollte ich selbst ausprobieren, ob so etwas auch mit einem Arduino zu schaffen ist. Das Pico-Programm hat ein 32-Bit-Schieberegister verwendet. Der Arduino musste mit 16 Bit auskommen. Es hat zwar im Prinzip funktioniert, aber es war mir kaum möglich, zu erklären, wie ein Schieberegister funktioniert, und warum ein Rauschen dabei herauskommen sollte.  Siehe https://de.wikipedia.org/wiki/Linear_r%C3%BCckgekoppeltes_Schieberegister

//Rauschen 1

void setup() {
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  uint16_t shiftreg;
  uint16_t newbit;
  while(1){
    newbit = 1;
    if (shiftreg & (1<<15)) newbit ^=1;
    if (shiftreg & (1<<12)) newbit ^=1;
    shiftreg =(shiftreg <<1) | newbit;
    digitalWrite(9, newbit);
    //Serial.print(shiftreg);
    //Serial.println("  ");
  }
}

Ein Lautsprecher am Pin 9 ließ tatsächlich ein Rauschen hören. Zusätzlich hört man allerdings ein wiederkehrendes Geräusch. Das Rauschen ist deshalb nicht völlig zufällig, weil sich die gleichen Impulse nach einiger Zeit wiederholen. Mit den zusätzlichen Printbefehlen sieht man eine quasi-zufällige Zahlenfolge. Nur das letzte Bit wird an den Lautsprecher ausgegeben.



Um das Rauschen zu verbessern, haben wir dann versucht, die Random-Funktion einzusetzen. Wir haben random(0, 65535) und random(0, 255) versucht. aber dabei wurde die Ausgabe zu langsam, es kam kein Rauchen, sondern ein unregelmäßiges Knattern. Zu meiner Überraschung brachte random(0, 3) eine sehr brauchbare Lösung mit einem lauten weißen Rauschen.

//Rauschen 2

void setup() {
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  digitalWrite(9,random(0, 3));
}



Das Signal am Ausgang D9 (2 ms/div)

Zurück: ArduinoKurs4.htm


Elektronik-Labor   Projekte   AVR