[GELÖST, siehe unten]
Hi,
ich hab ein Problem mit dem Nanowii Buzzer. Ich hab einen an TX0 angelötet (und natürlich GND). Ist das überhaupt richtig? Im Internet steht manchmal etwas von D8 und manchmal von TX0?
Nunja der Buzzer funktioniert, d.h. es gibt einen Ton, allerdings ertönt dieser IMMER. Er ist nicht auszukriegen.
Ich hab mich mal ein bisschen durch die Source gewälzt und folgendes herausgefunden:
1. Der Buzzer liegt auf TX0 (PORTD3 in atmel-Bezeichnung), solange D8BUZZER oder 32U4ALLPINS nicht definiert sind.
diese sind in der mwc21nano nicht definiert (hab in allen Dateien gesucht).
2. Um zu testen habe ich mal das Standard Blink Programm von Arduino ausprobiert (mit ledPin = 1), damit funktioniert der Buzzer (geht aus und an). Es scheint also nicht am Buzzer zu liegen.
3. Dann habe ich gedacht, es könnte vielleicht an dem Unterschied zwischen PinMode und dem direkten PortAccess geben...
Also hab ich das Blinkprogramm geändert, sodass es genau BUZZER_PINMODE, BUZZER_ON und BUZZER_OFF verwendet wie in Multiwii -> geht auch. Daran kann es also auch nicht liegen.
Code:
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
DDRD |= (1<<3);
}
// the loop routine runs over and over again forever:
void loop() {
//digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
PORTD |= 1<<3;
delay(100); // wait for a second
//digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
PORTD &= ~(1<<3);
delay(5000); // wait for a second
}
4. Ich hab gedacht, dass die Definitionen vllt vertauscht sind und OFF mit ON vertauscht -> keine Wirkung
5. Ich hab mal nach BUZZER_ON/OFF im Code gesucht: Ergebnis: wird nur durch eine Funktion (Blink) verwendet, die den Buzzer an und ausschaltet -> scheint nicht zu geschehen?
6. Dann habe ich gedacht, dass der TX Pin vllt durch die Serial communication vollgespamt wird, am Akku und nicht am USB Port ändert sich am Verhalten jedoch auch nichts. (und die läuft ja auch über serial1 und nicht serial0)
Was kann ich noch tun und wie habt ihr euren Buzzer am laufen?
EDIT: GELÖST
Für die Nachwelt:
Der Buzzer am Nanowii kommt, wenn man einen standard RX hat an A2!
Wird ein anderer RX-Typ genutzt, so sitzt er immer an D8!
Wer wie ich den Buzzer an TX0 lötet, weil er da so schön hinpasst (GND direkt in der Nähe im Gegensatz zu D8, alternativ wäre auch A2 so passend), der kann das im Code umstellen:
Einfach nach "RxType" suchen im Dokument, dort gibt es dann bei einigen Ergebnissen Dinge wie pinmode oder digitalWrite mit eben 8 / A2, die für das buzzen verantwortlich sind. Etwas unschön dass dies hard coded ist und nicht die Multiwii-defines nutzt (die ja noch drinstehen).
Auch mit der Veränderung von allen Befehlen in Pin 1 statt 8 hat es bei mir nicht funktioniert, da (auch mit einer Suche nach RxType aufzufunden) wenn der RxType NICHT SBUS oder SpekSerial ist der Serial Port 1 geöffnet wird (warum erschließt sich mir nicht, für einen PPMSUM Empfänger braucht man doch kein Serial?). Wenn man die betreffende Zeile (295) auskommentiert, dann funktioniert es.
Ich gebe natürlich keine Garantie auf irgendetwas aber bei mir tut es jetzt so. Die Kommunikation mit der GUI funktioniert auch und da an Serial1 vorher nichts dran hing, hoffe ich dass es keine seltsamen Crashes auslöst.
LG
@Felix: warum das so ist, würde mich trotzdem interessieren