Hallo zusammen,
ich hätte mal wieder eine kleine Frage.
Ich habe hier ein Clone Board UNO liegen. Ich möchte an den PWM Ausgängen 6 Servos ansteuern.
Ich habe jetzt mal ein kleines Servo an das Board angeschlossen. Das Servo läuft aber nur in eine Richtung.
Jetzt habe ich mal einen kleinen Sketch geschrieben in dem auch eine LED mit angesteuert wird.
Dabei viel mir auf, das die LED nicht mit 1 Sekunde schaltet, sondern mit ca. 3 Sekunden. Ebenso ist die Pausenzeit ca. 3 Sekunden.
Also läuft das Board doch irgendwie zu langsam oder?
Könnte mir vorstellen das wenn die eingegebenen Zeiten passen würden auch die Ansteuerung der Servos mit dem PWM Signal wieder funktionieren könnte.
Kann man die Laufzeiten eines Boards irgendwo einstellen? Oder woher kommt dieser Zeitliche Versatz im Ablauf?
Verwendet wird ein Clone:
CH340G Chip
Microcontroller: ATmega328P
Operating Voltage: 5V Input Voltage (recommended): 7-12V
Input Voltage (limits): 6-20V
Digital I/O Pins: 14 (of which 6 provide PWM output)
Analog Input Pins: 6
DC Current per I/O Pin: 40 mA DC
Current for 3.3V Pin: 50 mA
Flash Memory: 32 KB (ATmega328) of which 0.5 KB used by bootloader SRAM: 2 KB (ATmega328) EEPROM: 1 KB (ATmega328) Clock Speed: 16 MHz
#include <Servo.h>
Servo SERVO1;
void setup() {
pinMode(7, INPUT_PULLUP);
pinMode(13, OUTPUT);
SERVO1.attach(3);
}
void loop() {
if (digitalRead(7) == LOW) {
SERVO1.write(120);
}
else {
}
if (digitalRead(7) == HIGH) {
SERVO1.write(40);
}
else {
}
digitalWrite(13, HIGH);
delay (1000);
digitalWrite(13, LOW);
delay (1000);
} // ENDE
Gruß Volle
Hi
Wenn Du die Servo-Befehle raus nimmst, ist die Blinkerei dann immer noch zu langsam?
Nein: Du befiehlst dem Timer IMMER und IMMER WIEDER, das Servo auf 120° (oder 40°) fahren zu lassen.
Dieses Setzen reicht 1x, denke, Du bringst damit die Timer durcheinander.
Wobei die ON-Zeit der LED eine Sekunde haben muß - in dem delay() machst Du ja sonst Nichts.
Das LOW-delay() könnte sich durch den Servo-Kram verlängern, aber Das sollte keine 2 Sekunden ausmachen.
Nö, ergibt keinen Sinn.
MfG
Hallo,
habe jetzt das Servo rausgenommen.
Die Blinkfrequenz ist aber immer noch ca. 3 Sekunden.
Irgendwie hat das Board ein Problem mit Zeiten oder?
Gruß Volle
#include <Servo.h>
Servo SERVO1;
void setup() {
pinMode(7, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
// if (digitalRead(7) == LOW) {
// SERVO1.write(120);
// }
// else {
// }
// if (digitalRead(7) == HIGH) {
// SERVO1.write(40);
// }
// else {
// }
digitalWrite(13, HIGH);
delay (1000);
digitalWrite(13, LOW);
delay (1000);
} // ENDE
Die beiden Probleme können Sein:
Falscher Bootloader
Falscher Quarz/Resonator am Atmega328.
Wobei ich eher auf den Quarz tippe.
Grüße Uwe
postmaster-ino:
Du befiehlst dem Timer IMMER und IMMER WIEDER, das Servo auf 120° (oder 40°) fahren zu lassen.
Dieses Setzen reicht 1x, denke, Du bringst damit die Timer durcheinander.
Mit dem .write-Befehl wird nur eine interne Variable gesetzt, aufgrund derer die Timer-IRQ-Routine dann denn entsprechenden Impuls erzeugt. Wie oft diese Variable auf den immer gleichen Wert gesetzt wird, ist dem Timer IRQ herzlich egal. Wobei durch die delays der loop verzögert wird, und der .write-Befehl eh nur all 2Sek ( wenns richtig läuft ) ausgeführt wird.
Von der Quarz/Resonator Frequenz wird ja auch die Baudrate abgeleitet. Wenn der falsch wäre, würde wohl schon das Hochladen von Programmen nicht funktionieren. Es sei denn, der Bootloader wäre entsprechend angepasst.
Funktioniert denn die Ausgabe mit Serial.print auf den Monitor?
Hast Du in der IDE das richtige Board eingestellt ( wenn nicht gäb's aber wahrscheinlich schon bem Hochladen Probleme )?
Ist alles recht mysteriös ....
Hallo zusammen,
nachdem ich noch ein wenig im Netz gestöbert habe bin ich über folgende Seite gestolpert.
Auch hier wird von einem zu langsam laufenden Sketch berichtet.
Naja, habe jetzt keine weitere Lust mit dem Teil zu experimentieren.
Habe mir jetzt kurzerhand ein originales UNO bestellt.
Habe ich vermutlich mehr Freude dran.
Gruß Volle
Dummer weise hast du nicht gesagt um welchen UNO Ersatzstoff es sich handelt!
Microcontroller: ATmega328P
Diese Aussage ist dann wohl falsch.
Das war ein unauflösbarer Konflikt für mich.
Darum hast du bis jetzt auch keine Antwort (von mir) bekommen!
Offensichtlich hast du einen UNO Ersatzstoff mit einem Prozessor namens MD328D oder LGT8FX8P bekommen.
Das ist im Grunde nicht schlimm.
Denn er ist erheblich leistungsfähiger!
Habe mir jetzt kurzerhand ein originales UNO bestellt.
Habe ich vermutlich mehr Freude dran.
Für den Anfang sicherlich besser.
Wenn du es gelernt hast Chinesische Datenblätter zu lesen (ich finde jeder sollte chinesisch lernen), dann wirst du auch mit dem MD328D/LGT8FX8P glücklich.
EEPROM: 1 KB
Ist übrigens auch falsch.
Ein EEPROM hat es nicht.
Für die Emulation wird Flash hergenommen.