hallo Gemeinde,
ich muss ein Sinus Signal erstellen mit 200 werten, 10khz taktfrequenz, 2,5v amplitude und 2,5v offset.
hier mein code
// Init Serieller Plotter - Oszi-Funktion über AnalogRead
unsigned int AD_Value = 0 ; //Parameterwert für analogRead
// Init Serieller Plotter ende
int PWM_Value = 799 ; //Parameterwert für analogWrite
void setup() {
Serial.begin(9600); // Init Serielle Schnittstelle
pinMode(10, OUTPUT); // Ausgabepin Timer1
//Init Timer1
TCCR1A = 0xa3; // Timer1 Register A-Teil
//Serial.print("\nTCCR1A = ");
//Serial.println(TCCR1A, BIN);
TCCR1B = 0x19; // Timer1 Register B-Teil
//Serial.print("\nTCCR1B = ");
//Serial.println(TCCR1B, BIN);
OCR1A = 1599; // Setzen des fixen oberen Zählwertes für 10 kHz (der untere Wert ist "0"
OCR1B = 799; //Dieser Wert ist der eigentliche PWM-Wert, für jeden Takt wird ein neuer gebraucht
// PWM-Out erscheint an Pin 10 - 799 sind 50% PWM -> "Ua = 0"
TIMSK1 = 2; // enable Timer Compare Interrupt = "PWM"-Interrupt
//Init Timer1 ende
// sei(); // Interrupts freigeben
} // Setup ende
int z = 0; // Zählvariable
// hier ist ein 200-Werte-10-Bit-Sinus mit Nullwert auf 799 abgelegt / min: 0; max: 1599
int a[200]={ 0, 2, 4, 6, 10, 14, 19, 25, 32, 39, 47, 56, 66,
76, 87, 99, 111, 124, 138, 153, 168, 183, 200, 217, 234, 252, 271, 290, 309, 329,
350, 371, 392, 414, 436, 459, 482, 505, 528, 552, 576, 600, 625, 649, 674, 699,
724, 749, 774, 799, 799, 824, 849, 874, 899, 924, 949, 973, 998, 1022, 1046, 1070, 1093,
1116, 1139, 1162, 1184, 1206, 1227, 1248, 1269, 1289, 1308, 1327, 1346, 1364,
1381, 1398, 1415, 1430, 1445, 1460, 1474, 1487, 1499, 1511, 1522, 1532, 1542,
1551, 1559, 1566, 1573, 1579, 1584, 1588, 1592, 1594, 1596, 1598, 1598, 1598,
1596, 1594, 1592, 1588, 1584, 1579, 1573, 1566, 1559, 1551, 1542, 1532, 1522,
1511, 1499, 1487, 1474, 1460, 1445, 1430, 1415, 1398, 1381, 1364, 1346, 1327,
1308, 1289, 1269, 1248, 1227, 1206, 1184, 1162, 1139, 1116, 1093, 1070, 1046,
1022, 998, 973, 949, 924, 899, 874, 849, 824, 799, 774, 749, 724, 699, 674, 649,
625, 600, 576, 552, 528, 505, 482, 459, 436, 414, 392, 371, 350, 329, 309, 290,
271, 252, 234, 217, 200, 183, 168, 153, 138, 124, 111, 99, 87, 76, 66, 56, 47, 39,
32, 25, 19, 14, 10, 6, 4, 2, 0};
ISR(TIMER1_COMPA_vect) { // Interruptprogramm-PWM-Interrupt - läuft einmal pro PWM-Periode und holt neuen PWM-Wert
z = (z + 1); //
if(z == 200) z = 0;
OCR1B = a[z]; //hole Wert aus a[200]-Array
}
void loop() {
// Ausgabe
Serial.println(analogRead(A0)); // es wird direkt der AD-Wert ausgegeben zwischen 0 ... 1023
delay(20); // erforderlich sonst keine Anzeige über ser. Plotter
}
jetzt muss ich eine sich ständig ändernden frequenz im bereich von 45hz und 55hz ertsellen. und die periodendauerende änderung soll 2s sein.
ich habe keine ahnung was ich in meinem code ändern soll !!
Kann mir vielleicht jemand helfen ?