Arduino PWM als Schleife

OP #2925860
Lesenswert?
• ▲
▼
Hallo zusammen,
ich habe ein Problem bei der Arduino Uno Programmierung. Habe ein PWM 
Programm geschrieben (dieses funktioniert auch). Nun möchte ich das die 
PWM 75 mal läuft, und dann den nachfolgenden Programmteil ausführt. 
Momentan läuft die PWM unendlich. Ich habe es auch schon mit einem Timer 
versucht diese funktioniert auch nicht.

Wer kann mir helfen?

Gruß Marc
Moderator (Firma: Titel) Persönliche Seite #2925877
Lesenswert?
• ▲
▼
Marc Straub schrieb:
>  Nun möchte ich das die PWM 75 mal läuft
Eine PWM läuft immer, die wird nicht nach 75 Zyklen abgeschaltet...
> Ich habe es auch schon mit einem Timer versucht diese funktioniert auch
> nicht.
Dann hast du es falsch gemacht. Was du falsch gemacht hast, kann leider 
niemand sagen, weil der Quellcode fehlt.

Um es kurz zu fassen:
WAS willst du machen?
WIE sieht dein Quellcode aus?
WELCHEN uC verwendest du?
#2925902
Lesenswert?
• ▲
▼
Marc Straub schrieb:
> ich habe ein Problem bei der Arduino Uno Programmierung. Habe ein PWM
> Programm geschrieben (dieses funktioniert auch). Nun möchte ich das die
> PWM 75 mal läuft, und dann den nachfolgenden Programmteil ausführt.
> Momentan läuft die PWM unendlich. Ich habe es auch schon mit einem Timer
> versucht diese funktioniert auch nicht.

Ich weiß zwar auch nicht ganz genau was Du möchtest.

Aber wenn Du nur einen Pegel 75 mal in schneller Folge hoch- und 
runtersetzen möchtest, verwende dafür einen Digitalausgang und die 
Funktion delayMicroseconds() zwischen den Pegelwechseln!

Ansonsten erkläre bitte mal genauer, was das werden soll!

@Lothar Miller wg. uC: Auf einem Arduino Uno sitzt ein Atmega328P-PU
OP #2927625
Lesenswert?
• ▲
▼
Ich habe jetzt selbst gemerkt das ich ein paar Infos vergessen habe. Bin 
neu hier und deswegen noch nicht so gefestigt was für Infos am besten 
sind.
Die µC Welt ist sowieso komplett neu für mich!

Unten dargestellt ist das PWM Programm. Die PWM soll nur 75 Zyklen 
machen und danach in ein weiteres Unterprogramm springen. Ich habe eben 
keine Ahnung wie ich das machen kann!

Vielen Dank für eure Hilfe!




#define INLENGTH 5       //maximale Größe der Zahl
#define INTERMINATOR 'H' //'H' von 'Hz'

char inString[INLENGTH+2];
int inCount;




#define MinFreq 33
#define MaxFreq 65535
#define Ausgangspin 13  //Ausgang für die Frequenz


unsigned int Frequenz = 5500 ; //Hz

void setup(){


  Serial.begin(9600);
  Serial.println("5500Hz");

  tone(Ausgangspin, Frequenz);
}

void loop(){


  Eingabe();  //Eingabe-Funktion, die Eingabe-String entgegennimmt

  //Zeichenkette -> Zahl
  Frequenz=atol(inString);

  //Bereich prüfen
  Frequenz=constrain(Frequenz, MinFreq, MaxFreq);

  Serial.print("Es wird gesetzt: ");
  Serial.print(Frequenz,DEC);
  Serial.println("Hz!");

  tone(Ausgangspin, Frequenz);
}

void Eingabe(){
  inCount=0;          //Ziffern-Zähler rücksetzen

  do
  {
    while (Serial.available()==0);
    inString[inCount] = Serial.read();
    if(inString[inCount]==INTERMINATOR) break;
    if((inString[inCount]<'0')||(inString[inCount]>'9')){
      inCount75;      //-> Workaround
    }
  }
  while(++inCount < (INLENGTH+1));
  Serial.flush();
}
#2927643
Lesenswert?
• ▲
▼
Marc Straub schrieb:
> Ich habe jetzt selbst gemerkt das ich ein paar Infos vergessen habe. Bin
> neu hier und deswegen noch nicht so gefestigt was für Infos am besten
> sind.
> Die µC Welt ist sowieso komplett neu für mich!
>
> Unten dargestellt ist das PWM Programm. Die PWM soll nur 75 Zyklen
> machen und danach in ein weiteres Unterprogramm springen. Ich habe eben
> keine Ahnung wie ich das machen kann!

Das erklärt aber immer noch keine der obigen Fragen.

Schau. Die Sache ist die.
Die Erfahreneren fangen in den meisten Fällen damit an, sich zu 
überlegen, ob denn die 'angedachte Lösung' für das zu lösende Problem 
überhaupt adäquat ist. Und deine Lösungsstrategie klingt so seltsam, 
dass sich viele hier fragen, ob du da nicht überhaupt auf dem falschen 
Dampfer bist.
#2927647
Lesenswert?
• ▲
▼
1
  Serial.print("Es wird gesetzt: ");
2
  Serial.print(Frequenz,DEC);
3
  Serial.println("Hz!");
4

5
  tone(Ausgangspin, Frequenz);
6
}

und wo ist da jetzt die PWM?

Sagtest du nicht #DU# hättest die PWM geschrieben?

Uh, oh
> Habe ein PWM Programm geschrieben (dieses funktioniert auch).
Das hab wohl nicht nur ich misverstanden.

Du hast die tone() Funktion benutzt! Dann sag das auch!

Tja. Jetzt hast du ein Problem. Wenn du tone() nicht vorgeben kannst, 
wieviele Zyklen es erzeugen soll, dann wirst du dir wohl selber einen 
Ersatz für tone machen müssen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.