Forum: Mikrocontroller und Digitale Elektronik Signal Umwandlung Sinus in Rechteck?


von Hans Joachim R. (hans-j)


Lesenswert?

Hallo werte Programmier Freunde und Fachleute,

ich habe eine Arduino Nano und wollte aus diesen einen einfachen "DSP" 
abstellen.
meine Grundidee, ein Sinus Signal als Eingangssignal anlegen um daraus 
eine Rechteckspannung zu erzeugen. Am liebsten würde ich dies mit 
Assembler Programmieren und wollte euch Fachmänner und Frauen fragen ob 
dies:

A - möglich ist
B - jemand eine Idee hat oder sogar vielleicht das ein oder andere 
Tutorial dazu kennt oder darauf verweisen kann.

Das Sinus Signal würde ich am liebsten aus den Speicher generieren und 
verarbeiten lassen. Die Werte des Eingangssignal könnten frei definiert 
werden.

Ich danke euch schon mal für eure Unterstützung.

P.S. ich hoffe den Thread gibts nicht schon, gefunden habe ich dazu 
allerdings hier noch nix.

von Horst (Gast)


Lesenswert?

>meine Grundidee, ein Sinus Signal als Eingangssignal anlegen um daraus
>eine Rechteckspannung zu erzeugen. Am liebsten würde ich dies mit

das

>Das Sinus Signal würde ich am liebsten aus den Speicher generieren und
>verarbeiten lassen.

scheint sich zu widersprechen.

von Michael_ (Gast)


Lesenswert?

Nimm nen Schmitt-Trigger "123.
Ist für dich nicht das Liebste, aber das Einfachste.

von Arsenico (Gast)


Lesenswert?

WOW !

von Amateur (Gast)


Lesenswert?

Aussi
Der Arduino hat keinen D/A-Wandler (soweit mir bekannt). Somit kannst Du 
einen Sinus (nicht besonders sauber) nur via PWM generieren.

Eini
Hast Du einen "braven" Sinus, also mit "erfassbarer" Spannung (meist 
0...Ub) und mit annehmbarer Frequenz, so spricht nichts dagegen diesen 
zu digitalisieren und auch digital anzuschauen.
Hat das Teil einen Komperatoreingang, kannst Du das ganze noch ein wenig 
vereinfachen.

von Hans Joachim R. (hans-j)


Lesenswert?

Ja widerspricht sich, gebe ich dir recht. Gehen wir doch davon aus das 
ich den Sinus schon erzeugt habe und die Werte aufgenommen habe.

Schmitti will ich nicht machen, sollte als elegante Lösung mit dem 
Arduino doch möglich sein, oder ?

von Hans Joachim R. (hans-j)


Lesenswert?

Ja der Sinus ist Sauber, die Frequenz ist auch optimal gewählt ~ 70Hz, 
die Ausgangs Spannung hätte ich gar nicht mal so "dramatisch" über PWM 
machen wollen. 5V ja oder nein ohne gepulste Variation davon also was 
wirklich ganz einfaches.

Haben Sie da eine Idee, ach ja über einen Komparator Eingang verfügt der 
Arduino meines Wissens nicht, was nicht heißen soll das er kein hat.

von Horst (Gast)


Lesenswert?

>Schmitti will ich nicht machen, sollte als elegante Lösung mit dem
>Arduino doch möglich sein, oder ?

Klar,
hier das Programm:
1
// constants won't change. They're used here to 
2
// set pin numbers:
3
const int buttonPin = 2;     // the number of the pushbutton pin
4
const int ledPin =  13;      // the number of the LED pin
5
6
// variables will change:
7
int buttonState = 0;         // variable for reading the pushbutton status
8
9
void setup() {
10
  // initialize the LED pin as an output:
11
  pinMode(ledPin, OUTPUT);      
12
  // initialize the pushbutton pin as an input:
13
  pinMode(buttonPin, INPUT);     
14
}
15
16
void loop(){
17
  // read the state of the pushbutton value:
18
  buttonState = digitalRead(buttonPin);
19
20
  // check if the pushbutton is pressed.
21
  // if it is, the buttonState is HIGH:
22
  if (buttonState == HIGH) {     
23
    // turn LED on:    
24
    digitalWrite(ledPin, HIGH);  
25
  } 
26
  else {
27
    // turn LED off:
28
    digitalWrite(ledPin, LOW); 
29
  }
30
}

von Amateur (Gast)


Lesenswert?

Zu praktisch allen Schnittstellen (A/D-Wandler) gibt es jede Menge 
Beispiele. Sowohl bei Arduino's (http://www.arduino.cc/) als auch an 
vielen Stellen im Netz.

Möglicherweise werden auch mit der Entwicklungsumgebung ein paar 
Beispiele mitgeliefert.

von Thomas E. (thomase)


Lesenswert?

Hans Joachim Rüthgers schrieb:
> Hallo werte Programmier Freunde und Fachleute,
>
> ich habe eine Arduino Nano und wollte aus diesen einen einfachen "DSP"
> abstellen.
> meine Grundidee, ein Sinus Signal als Eingangssignal anlegen um daraus
> eine Rechteckspannung zu erzeugen. Am liebsten würde ich dies mit
> Assembler Programmieren und wollte euch Fachmänner und Frauen fragen ob
> dies:
>
> A - möglich ist
> B - jemand eine Idee hat oder sogar vielleicht das ein oder andere
> Tutorial dazu kennt oder darauf verweisen kann.
>
> Das Sinus Signal würde ich am liebsten aus den Speicher generieren und
> verarbeiten lassen. Die Werte des Eingangssignal könnten frei definiert
> werden.
>
> Ich danke euch schon mal für eure Unterstützung.
>
> P.S. ich hoffe den Thread gibts nicht schon, gefunden habe ich dazu
> allerdings hier noch nix.

Also ich versteh nur Bahnhof.

Du willst ein Sinussignal mit einer gegebenen Frequenz mit dem ADC des 
Controllers einlesen und dann ein Rechtecksignal daraus erzeugen und 
ausgeben? Welchen Sinn hat das? 70Hz-Rechteck kann der Controller doch 
auch alleine erzeugen. Oder willst du aus Spaß an der Freude sehen, ob 
du das hinkriegst?

mfg.

von Harald W. (wilhelms)


Lesenswert?

Hans Joachim Rüthgers schrieb:

> Schmitti will ich nicht machen, sollte als elegante Lösung mit dem
> Arduino doch möglich sein, oder ?

Naja, die Signalqualität wird wesentlich schlechter als bei
einem 10ct-Komparator sein.
Gruss
Harald

von Hans Joachim R. (hans-j)


Lesenswert?

Genau aus Spaß an der Freude um die Grundlagen für die 
Signalverarbeitung Praktisch zu veranschaulichen. Sinn ergibt das ganze 
eigentlich nicht soll es auch nicht es geht nur darum die prinzipielle 
Arbeitsweise zu erfassen.

Ich hätte gern eine Signalgenerator mit Sinus Funktion und 
veränderlichen f als Eingangssignal genommen allerdings würde das mein 
Zeitlichen Rahmen  sprengen.

Ich habe mir jetzt ein Positiven Sinus mit werten von 0 bis 5 Volt für 
den Arduino erstellt und würde die Werte in den Arduino einspeisen. 
Diese Werte sollen dann abgetastet werden und als Recht an einem Ausgang 
als Rechteck Spannung ausgegeben werden. Mit PWM wäre Luxus es würde 
aber auch Low/high gehen.

mein Gedankengang:

Mein Problem ist die Auflösung des Analog-Ports der mit 10Bit das 
Eingangssignal einliest 5=1024 ich aber doch mit dem AVR Assembler die 
Standart Register nur mit 8 Bit Information füttern kann ? In C kann ich 
den Eingangswert ja teilen in dem ich diesen durch 4Teile ist dies auch 
in Assembler möglich oder gibt es dort auch eine elegantere Lösung ?

von Hans Joachim R. (hans-j)


Lesenswert?

Ich stehe Programmiertechnisch gerade mächtig auf dem Schlauch, ich habe 
zum Vergleich ein register mit einer Maske geladen die den Nullpunkt 
meines Sinus Darstellt 2,5V dies würde Dezimal 512 oder 2^9 entsprechen 
wie kann ich dies in Assembler bewerkstelligen? Der Arduino Nano verfügt 
doch über das Register Paar 26 27, 28 29, 30 31 die für 16 Bit 
Operationen gedacht sind wie kann ich in diesen Paar eine information 
vom Analog/Digital Pin übertragen ?

von OAmp (Gast)


Lesenswert?

Hi

ich würde weder Sinus noch Rechteck umwandeln, sondern das gleich
als definierte Wellenform ausgeben.

So etwa:

http://www.solorb.com/elect/musiccirc/ArduinoLFO/


Hier wird der komplette Port D als arbitrary-waveform-generator
benutzt, die Wavetables mit einem python-prog erzeugt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.