Azurit und Arduino Due

Gibt es denn keine Möglichkeit, das jemand der dazu fähig ist eine Version für den Due macht? Ich denke, es würde das ganze weiter aufwerten, das gesamte Mähverhalten würde viel flüssiger werden. Mir fehlen dazu leider die Kenntnisse den Code zu portieren bzw. umzuändern.

Gruß
Benni
 
An alle die sich mit einbringen wollen: Du bist ein Softwareentwickler? Dann melde dich doch einfach mal hier und jetzt. Wir geben Dir dann Zugang zum Github. Und wir nehmen Kontakt mir Dir auf um Dich mit dem Ardumower Team vertraut zu machen. Wir haben schon 2 "Elektroniker" im Team - einen "Softworker" könnten wir wirklich noch gebrauchen.
 
Ich könnt's mir mal anschauen. Bin zwar kein Softwareentwickler sondern auch Elektroniker, programmiere aber auch schon seit etlichen Jahren.

VG
Reiner
 
@AlexanderG

Hi Alexander,
nur mal so zum Verständnis - quick and dirty:

Ausschnitt aus due.h

Code:
// switch tone ON - frequency in hertz
void tone(uint32_t ulPin, uint32_t frequency)
{
	BuzzerClass::tone(uint16_t ulPin, frequency );
}

/* 
void tone(uint32_t ulPin, uint32_t frequency, int32_t duration)
{
		const uint32_t rc = VARIANT_MCK / 256 / frequency; 
		tone_pin = ulPin;
		toggle_count = 0;  // strange  wipe out previous duration
		if (duration > 0 ) toggle_count = 2 * frequency * duration / 1000;
		 else toggle_count = -1;

		if (!TCChanEnabled) {
 			pmc_set_writeprotect(false);
			pmc_enable_periph_clk((uint32_t)TONE_IRQ);
			TC_Configure(chTC, chNo,
				TC_CMR_TCCLKS_TIMER_CLOCK4 |
				TC_CMR_WAVE |         // Waveform mode
				TC_CMR_WAVSEL_UP_RC ); // Counter running up and reset when equals to RC
	
			chTC->TC_CHANNEL[chNo].TC_IER=TC_IER_CPCS;  // RC compare interrupt
			chTC->TC_CHANNEL[chNo].TC_IDR=~TC_IER_CPCS;
			 NVIC_EnableIRQ(TONE_IRQ);
                         TCChanEnabled = 1;
		}
		if (!pinEnabled[ulPin]) {
			pinMode(ulPin, OUTPUT);
			pinEnabled[ulPin] = 1;
		}
		TC_Stop(chTC, chNo);
                TC_SetRC(chTC, chNo, rc);    // set frequency
		TC_Start(chTC, chNo);
}
*/

// switch tone off 
void noTone(uint32_t ulPin)
{
	BuzzerClass::noTone();
}



AnalogWrite schau ich mir heut´ Abend mal an...
 
@Reiner: wichtig ist ja dass es funktioniert :) - hast Du die Möglichkeit PWM für die Motorpins und tone am Due zu testen? Wäre es möglich für Dich, Github Desktop zu benutzen, so dass man den Code direkt einpflegen kann?
 
Ja, ich denke da könnte ich was zusammen fädeln... Dauert aber etwas...

Es ging mir bei dem Code-Schnipsel nur darum ob ich verstanden habe welche Teile auszutauschen/zu ändern sind.
Mit Github hab ich mich bisher noch nicht beschäftigt, mache ich am WE.

VG
Reiner
 
Also ich hätte theoretisch die Möglichkeit, dann müsste ich zwar mein Schaf wieder auf den DUE umbauen (also nen paar Stecker umstecken) aber ich könnte es testen, mein Schaf war gestern erst am grasen und von daher hätte ich so ne Woche Zeit zum ausprobieren. Funktioniert dann eigentlich das mit dem Wlan, Bluetooth, Gps, IMU, Odometrie usw... alles weiter wie bisher oder müssten da auch Anpassungen vorgenommen werden??
 
Hallo Benjamin,
ich bin dabei. Muss mich aber auch erstmal einlesen und weiß noch nicht ob ich es hinbekomme. Ich komme auf Dein Angebot zum testen zurück.

***EDIT***
Sooo, ging doch schneller als gedacht... Ich habe die Dateien von Alexander in die aktuelle dev. Version von Azurit hineingefummelt. Die IDE 1.7.10 hats fehlerfrei kompiliert, auf nen DUE hab ichs aber noch nicht hochgeladen. Also alles ohne Gewähr!
Sonar wird nicht funktionieren, da ich NewPing wieder rausschmeißen musste (läuft mit dem DUE (noch?) nicht).
Außerdem mußte ich eine Zeilen in der "Robot::printSettingSerial" auskommentieren wegen anderer Interrups auf dem DUE.
Hier vorab mein Code ge.zippt bis ich ´nen GitHub Zugang hab.

ardumower.zip



VG
Reiner
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/3561/ardumower.zip/
 
Zuletzt bearbeitet von einem Moderator:
Habs grade runter geladen, die New Ping, bzw das Sonar hab ich generell als erstes rausgeschmissen, da beim Mega ja die Ressourcen generell etwas beschränkt sind.... Hab grade eh nichts besseres zu tun, pennen kann ich auch nicht da nebenan einer nen Junggesellenabschied feiert :side:




Edit:
Also ich hab das jetzt mal getestet, sieht soweit alles ganz okay aus, läuft soweit , konnte Antriebe ansteuern, Sensoren funtzen auch, alles ganz okay, was mir auffiel ist, das er als Batteriespannung Werte über 40 Volt anzeigt, was aber maximal so 26 Volt sein dürften, eine ADC Kalibrierung brachte keinen Erfolg.

Um weitere Faktoren ausschließen zu können, müsste ich wissen was du genau geändert hast um das ganze in meinen bereits auf meinem Schaf erprobtem Code einzubinden.

Aber bis jetzt ist alles top
 
Moin Benjamin,
schön das es funktioniert. Zur Batteriespannung: Verwendet der Due eine andere Referenzspannung? Hab noch nicht geschaut.

VG
Reiner
 
Hallo,

@Reiner: großartig, das hast Du ja schnell hinbekommen :) Die Referenzspannung beim Due dürfte 3.3V betragen. Da der Spannungsteiler zum Messen derselbe ist, müsste wohl noch der richtige Umrechnungsfaktor herausgefunden werden.

PS: Ich habe Dir gerade Zugang zum Github verschafft (müsstest eine Mail bekommen haben).

Gruss,
Alexander
 
Hi Benjamin,

puh, habe gerade mal gerechnet.
Mit den Widerständen im Schaltplan sollten max. 2,7V bei 28V Batteriespannung ankommen...

VG
Reiner
 
japp, grade mit Scopemeter mal nachgemessen, bei mir kommt kein Pin über 3.3 Volt.... was mich nur ein bisschen stört, ist das meiner erst beim 3-4 versuch an bleibt, liegt aber bei mir an dem Protectorboard, was zum einschalten bzw abschalten bei Unterspannung genutzt wird

Edit:
Falls dein DUE auch etwas Fiept, also wie bei so nem alten Fernseher, das kommt vom Spannungsregler auf dem DUE-Board. Einfachste Lösung ist den 10V Spannungsregler etwas runter zu schrauben, so wie ich das im Schaltplan sehe, wird der nur zum Arduino befeuern benutzt. Bei meinem "China" DUE hatte es geholfen.
 
Ich versuche mal die Änderungen für Dich zusammenzufassen...
Mein Due hat bisher noch keine Versorgungsspannung gesehen B)

***EDIT***
Dem Projekt die Dateien von Alexander hinzufügen.
Die Dateien "NewPing.cpp" und "NewPing.h" entfernen.

in Datei adcman.cpp

Code:
#include "flashmem.h" hinzufügen


in Datei drivers.cpp

Code:
#include "pinman.h" hinzufügen
alle "analogWrite..." durch "PinMan.analogWrite..." ersetzen
Funktion "eereadwriteString" auskommentieren


in Datei due.cpp

Code:
#include "buzzer.h" hinzufügen
Funktionen "tone" und "notone" auskommentieren und durch diese ersetzen:
void tone(uint32_t ulPin, uint32_t frequency, int32_t duration)
{
  Buzzer.tone(frequency);
}

void notone(uint32_t ulPin)
{
  Buzzer.notone();
}


in Datei imu.cpp

Code:
#include "flashmem.h" hinzufügen


in Datei mega.cpp

Code:
alle "analogWrite..." durch "PinMan.analogWrite..." ersetzen


in Datei mower.cpp

Code:
#include "NewPing.h" auskommentieren
#include "pinman.h" hinzufügen
alle Anweisung mit "NewPing" auskommentieren
alle "analogWrite..." durch "PinMan.analogWrite..." ersetzen


in Datei robot.cpp

Code:
alle Zeilen mit "PCMSK0" und "PCMSK2" auskommentieren


ich hoffe ich habe alles erwischt...

VG
Reiner
 
@Reiner: Hat das mit Github nicht geklappt? :) Ist doch viel einfacher damit und Github zeigt auch automatisch an was geändert wurde :) Würde Dir gern mal die Vorzüge von Github live zeigen ;)
 
Hi Alexander,
doch mit Github hatts auch geklappt. Ich veruche das morgen mal einzuchecken. Das ist ja doch fast selbsterklärend und übersichtlich :)

Ich glaube nur Benjamin hätte das vielleicht nicht unbedingt geholfen. Er wollte ja meine Änderungen an seinem erprobten Mower einbauen...

VG
Reiner

P.S. macht es eigentlich Sinn das NewPing für den Due zu patchen oder könnte man da wieder zurückrudern zur 1.05?
 
Reiner schrieb:
Ich glaube nur Benjamin hätte das vielleicht nicht unbedingt geholfen. Er wollte ja meine Änderungen an seinem erprobten Mower einbauen...

Japp, genau so ist es ;)

ich werde morgen mal schauen, ob ich es in meinen Code einfrickelln kann
 
Zuletzt bearbeitet von einem Moderator:
Oben