Arduino Nano 1Hz PWM

Hallo beisammen,

ich würde gerne ein PWM Signal mit einer Frequenz von 1Hz und einem variierbaren Tastgrad (Duty Cycle) auf dem D6 Pin meines Nanos haben.
Mein aktueller Code funktioniert wenn ich mich nicht vermessen habe nicht wirklich:

const int pinPoti = 0;

const int pinSK = 6;

boolean skStrom = false;

int pwmWert;

unsigned long skMils = 0;
unsigned long skLastMils = 0;

void setup() {
  pinMode(pinSK, OUTPUT);
  lastMils = millis();
}

void loop() {
  pwmWert = analogRead(pinPoti) / 10;
  if (pwmWert > 100) {
    pwmWert = 100;
  }

  skMils = millis();
  if (skStrom) {
    if (skMils - skLastMils >= pwmWert * 10) {
      analogWrite(pinSK, LOW);
      skLastMils = skMils;
      skStrom = false;
    }
  }
  else {
    if (skMils - skLastMils >= (1000 - pwmWert * 10)) {
      analogWrite(pinSK, HIGH);
      skLastMils = skMils;
      skStrom = true;
    }
  }
}

Vielen Dank für Eure Hilfe im Vorraus!

Wenn Du diese langsame PWM per Software erzeugen willst, darfst du nicht mit analgWrite arbeiten, sondern musst deinen Pin mit digitalWrite ein- und ausschalten. Ob der Rest ok ist, habe ich jetzt nicht kontrolliert, aber mit analogWrite geht es auf jeden Fall nicht.

Per Hardware läßt sich so langsame PWM an Pin 9 oder !0 erzeugen, wenn man den Timer 1 mit Prescaler 1/1024 verwendet.

(deleted)

MicroBahner:
Wenn Du diese langsame PWM per Software erzeugen willst, darfst du nicht mit analgWrite arbeiten, sondern musst deinen Pin mit digitalWrite ein- und ausschalten.

Ich habe analogWrite() auf digitalWrite() gändert und jetzt erkennt das Oszilloskop schon mal ein Rechtecksignal und kein Sinussignal mehr :slight_smile:

Aber den Tastgrad mit meinem Poti zu regulieren geht immer noch nicht :c

Peter-CAD-HST:
Wenn dein Projekt mit DELAYS leben kann, dann probier mal mein Voraschlag aus:

Die Lösung mit dem Delay kann ich leider nicht einsetzen, da ich damit andere Prozesse blockieren würde. (Der Codeausschnitt ist nur der relevante Part aus dem ganzen Projekt)

DrDiettrich:
Per Hardware läßt sich so langsame PWM an Pin 9 oder !0 erzeugen

Muss man dafür einen Pin 9 oder 0 nehmen? Kann man nicht den verantwortlichen Timer für Pin 6 modifizieren?

Die 5V von dem Pin steuern einen MOSFET an, der dann durchschalten soll. Vielleicht liegt der Fehler am Ende am MOSFET

Trotzdem Danke euch allein für eure Vorschläge!

(deleted)

Pins 5 und 6 hängen an Timer 0. Der ist für das gesamte Timing zuständig (millis, delay...) und sollte nicht umgestellt werden.

DrDiettrich:
Pins 5 und 6 hängen an Timer 0. Der ist für das gesamte Timing zuständig (millis, delay...) und sollte nicht umgestellt werden.

Was man an diesem Timer allerdings umstellen kann...
Man kann ihn als Interrupt Quelle nutzen.

So bekommt man ca 1002 Interrupts pro Sekunde.
Kann so eine (Software)PWM erzeugen.

letmeinruhe:
Aber den Tastgrad mit meinem Poti zu regulieren geht immer noch nicht :c

Wo hast Du denn dein Poti angeschlossen? Mit Poti an A0 tut das bei mir