Arduino Bibliotheken unter ATmel Studio verwenden

Hallöchen alle zusammen,

Seit meiner letzten Anfrage haben sich meine Fähigkeiten in der C Programmierung etwas weiterentwickelt. Da es mich nach neuen Herausforderungen "dürstet" habe ich begonnen im ATmel Studio zu programmieren. Das klappt auch relativ gut, allerdings hat sich hier ein kleines Problem eingeschlichen. Ich habe keinen blassen Schimmer wie man die Bibliotheken z.B. von einem DHT22 dort einbindet. Ich weiß das ich hier eventuell an der falschen Stelle bin, allerdings finde ich im Web dazu nichts gescheites und ich denke (und hoffe), dass es eventuell noch anderen so wie mir geht, die diese Herausforderung gemeistert haben. kann mir jemand einen Tipp geben? Wie gesagt diverse google Suchen haben nichts ergeben (oder ich bin zu doof und hab es nicht gesehen). Alles was ich gefunden habe war wie man die Arduino Umgebung dort einbindet, was unter AS7 ja schon standardmäßig vorkonfiguriert ist. Also ganz klar und kurz gefragt:

Wie krieg ich AS7 dazu, dass ich mit der DHT22 Bibliothek den Arduino programmieren kann?

Liebe Grüße

Q11 :slight_smile:

Um die Arduino Software in Atmel Studio oder Visual Studio zu verwenden brauchst du das Visual Micro Plugin:
http://www.visualmicro.com/

Dann programmierst du aber nicht mehr rein in AVR C, sondern wie in der Arduino IDE auch. Der Vorteil ist eben dass man eine vernünftige Entwicklungsumgebung hat.

Installiert werden Bibliotheken dann weiterhin in die Arduino IDE, aber Visual Micro greift auf die Arduino Installation zu. Ein Bibliothek-Manager ist dabei, aber das installiert die Sachen eben nicht spezifisch für AS/VS

Genau das ist eben das was ich nicht will.

Ich möche ja komplett lösgelöst von der Arduino Oberfläche arbeiten. Mein Problem ist einfach ich bekomm es nicht hin die Bibliotheken einzubinden. Ich hab gelesen, dass diese Bibliotheken normalerweise universell einsetzbar sind. Schließlich funktionieren die auch auf meinem Pi.

Die Arduino Oberfläche hast du dann nicht mehr! Die wird nicht gestartet. Es werden nur die Dateien verwendet.

Wenn du die Arduino Software gar nicht willst, dann kannst du auch keine Arduino Bibliotheken verwenden. Sondern musst diese auf AVR C umschreiben.

Ich hab gelesen, dass diese Bibliotheken normalerweise universell einsetzbar sind.

Da ist praktisch immer Arduino spezifischer Code vorhanden.

Es sei denn du redest von irgendwelchen allgemeinen DHT22 Bibliotheken die nicht auf dem Arduino laufen. Das gibt es sicherlich auch. Aber bei den Arduino-Bibliotheken hast du auch immer irgendwo die Arduino API dazwischen. Mal mehr, mal weniger.

Wie Serenfly schrieb, du kannst in avr gcc keine Arduino Libs nutzen. DHT Datenblatt raussuchen, studieren, versuchen/testen und hoffen das es klappt.

Oder die Arduino Lib nehmen und den Arduino spezifischen Code ersetzten. Man muss das Rad nicht unbedingt komplett neu erfinden.

Hmm, das hab ich nicht gewusst. Tja dann muss ich mir das wohl genauer ansehen. Bis jetzt waren die Unterschiede klein. Tja jetzt ist es eben schwieriger. Danke für eure Zahlreiche Hilfe
:slight_smile:

Auch in den Bibliotheken können die Unterschiede klein sein. Kommt drauf an.

So da ich schon hier ein paar Experten an der Strippe hab :slight_smile: : Stimmt es wirklich, dass der Arduino-Code soviel langsamer ist als der mit dem ATmel Studio?

Kommt darauf was du mit "soviel" meinst. Aber manche Funktionen (wie z.B. digitalWrite()/digitalRead() ) sind sehr viel langsamer. An anderen Stellen ist der Unterschied nicht gravierend. Generell erkauft man sich jedoch den Komfort mit mehr Code. Auch von der Größe her. Kompiliere mal einen leeren Arduino Sketch!

Das schöne ist aber dass man bequem mischen kann. Wenn dir eine bestimmte Sache zu langsam ist, hindert dich kaum etwas daran das per Hand zu implementieren.

Für viele Sachen reicht jedoch die Arduino Performance auch völlig aus. Gerade einfache Steuerungsaufgaben. Es kommt auf die Anwendung an.

Du meinst indem ich die "normalen" C Befehle benutze?

Serenifly:
Auch von der Größe her. Kompiliere mal einen leeren Arduino Sketch!

Allerdings wächst nach dem Wasserkopf der Code dann sehr moderat an, wenn man Funktionen verwendet, die schon implementiert sind. Nur zusätzliche Funktionen (Einbinden einer Ausgabeart), erhöhen dann wieder die Codegröße deutlich. Beispielsweise vergleicht man z.B. ein Sketch mit oder ganz ohne serielle Ausgabe, gibt es einen deutlichen Größenunterschied. Hat man einmal eine serielle Ausgabe, erhöhen weitere kaum die Codegröße.

Das schöne ist aber dass man bequem mischen kann. Wenn dir eine bestimmte Sache zu langsam ist, hindert dich kaum etwas daran das per Hand zu implementieren.

Das sehe ich auch so, nur macht das Arduino Gedöns im Hintergrund Dinge die man nicht unbedingt erwartet.
So wie bei mir gestern, die Arduino IDE schreibt z.b in das TCCR1A Register (wohl für PWM) egal ob dies später gebraucht wird oder nicht. :o

Und der Sketchentwickler wundert sich, warum der Code nicht funktioniert.

Dank Serenifly's Tip: "Verlasse sich da nie darauf dass ein Register 0 ist." läuft es.
Also nicht so wie im Datenblatt des Atmels beschrieben ist, wie es nach dem Reset ausschaut.

Quantum11:
Du meinst indem ich die “normalen” C Befehle benutze?

Es ist z.b der Zugriff auf die Portpins gemeint.
Digitalwrite etc. wenn die Performance wichtig ist dann z.b so

#define SETOUTPUT DDRB|=(1<<DDB0)
#define SETPIN PORTB|=(1<<PB0)
#define CLEARPIN PORTB&=~(1<<PB0)

Ist aber nicht das einzige was bremst, immer wenn das Loopende erreicht wird auch unnötig etwas Zeit verbraten.
Kann man auch umgehen, wenn man eine Endlos Schleife in die Loop einbaut

Wenn wir schon am meckern sind, die String Klasse ist auch nicht wirklich zu empfehlen.
Mit C-Strings kann man alles machen was man braucht.