Welche Programmiersprache für spezielles AVR-Projekt empfehlenswert?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 01 10 2024  15:28:25      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Welche Programmiersprache für spezielles AVR-Projekt empfehlenswert?

    







BID = 739138

Andi-872

Aus Forum ausgetreten
 

  


Hallo,

ich möchte eine Lichtsteuerung mit einem AVR bauen. Aus einem Musikprogramm (ProTools) werden bei bestimmten Kommandos viele SysExDaten (über den MIDI-Strang) gesendet. Eine "Packung" dieser Daten ist zuständig für das Auslösen des von mir gewünschten Impulses (die SysExDaten sehen z.B. folgendermaßen aus: 00 F0 15 15 00 12 00 F7). Diese SysExDaten (bzw. "Packungen") sind mir im Vorfeld bekannt.
Mein Ziel: Der AVR soll aus den vielen Daten, die "unterwegs" sind, bei 2 "Packungen" (wie grad eine genannte) anfangen, von mir definierte Befehle auszuführen. Der AVR soll also in die Lage versetzt werden, aus den vielen Daten, die an seinen Eingängen reinkommen, die speziellen zu erkennen und diese dann für die weitere Verarbeitung anzuwenden.
Da ich bisher Anfänger bin auf diesem Gebiet der MC´s, sind einige Sachen beim Einstig in die Materie noch unklar. Speziell habe ich im Zusammenhang mit dem genannten Vorhaben die Frage, welche Programmiersprache für den AVR ist dafür geeignet? Soviel ich bisher mitbekommen habe, sind manche Sprachen einfacher als andere, dafür aber nicht so detailiert. Mein Vorhaben erscheint mir allerdings auch nicht die ganz einfachste Aufgabe zu sein. Und da ich ohnehin am Anfang stehe, möchte ich gern gleich mit der Programmiersprache einsteigen, die mir auch in Zukunft diverse Vorhaben mit dem AVR ermöglicht - will also nicht dann nochmal umlernen auf eine andere Sprache.
Kann mir hier jemand eine Empfehlung geben, welche Sprache geeignet ist speziell für diese SysEx-Geschichte?

Andi-872

BID = 739408

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

 

  

Hallo,

hatten wir das Thema nicht schonmal?

---
Grundsätzlich ist es egal, das ist mit allen Sprachen machbar, logisch.

Wenn du was wirklich Solides lernen willst, dann nimm gleich C.
Wenn du schnell Erfolge willst, nimm BASIC,

Wenn du den µC richtig verstehen willst und das Maximum herauskitzeln möchtest, dann nimm Assembler (AVR-Dialekt).


Die Lösung des Problems sollte allgemein nicht an einer Sprache festgemacht werden, sondern allgemeiner: daher ist es ratsam, erstmal eine Art Ablaufs- oder ein Zustandsdiagramm zu erstellen.

Dieses Diagramm stellt die Lösung deines Problems dar und kann dann mit hilfe einer Programmiersprache direkt gelöst werden.


_________________

BID = 739413

Jornbyte

Moderator



Beiträge: 7146

Und es gibt keine spezielle AVR-Projekte. Es sind nur AVR-Projekte.
Vergiss dein spezielles.

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 739460

Andi-872

Aus Forum ausgetreten

Hallo,

Don Comi: ja, ich hatte schon mal wegen allgemeiner Fragen zu MC´s gepostet, aber noch nicht speziell zu den Programmiersprachen. Ich habe lediglich über diese Sprachen in Erfahrung bringen können, dass manche von ihnen schneller und verständlicher bzw. leichter sind, als andere, dafür mit den "leichten" aber nicht alles machbar sei. Um eine LED zum blinken zu bekommen, reicht auch der Arduino. Mein Vorhaben ist vermutlich aber doch nicht ganz einfach, wie mir auch in vorangegangenen Postings mehrfach mitgeteilt wurde. Deshalb habe ich vermutet, dass evt. die "leichten" Sprachen (z.B. Bascom?) dafür nicht so gut geeignet sind.
Deiner Antwort entnehme ich, dass mit allen Sprachen alles machbar ist (?). Auch mein spezielles Projekt.

Danke für die Antworten.

Andi

BID = 739461

QuirinO

Schreibmaschine



Beiträge: 2205
Wohnort: Behringersdorf
Zur Homepage von QuirinO ICQ Status  

Die begrenzung des machbaren liegt in der Codegrösse und der Ausführungsgeschwindigkeit.

Für deine "spezielle" anwendung sollte jedoch noch alles einigermassen geeignet sein.

Tu dir selbst den Gefallen und lern C
Ich selbst hab aus faulheit mit Basic angefangen und nun kleb ich an dieser Plattformabhängigen langsamen Sprache und komm nicht mehr davon los.

BID = 739551

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Wie gesagt, grundsätzlich gilt: die Lösung eines (informationstechnischen) Problems sollte nicht an eine bestimmte Programmiersprache gebunden sein (nicht mal an eine Architektur).

Also: die Problemlösung sollte generell erfolgen, z.B. in Form einer mathematischen Vorschrift, eines Flussdiagramms, eines Zustandsdiagramm oder in Pseudocode.

Wenn das Problem soweit gelöst ist, kann man es implementieren, und zwar auf jeden Fall in jeder Sprache!
(Die eine oder andere Sprache ist aufgrund ihrer Struktur und Arbeitsweise mal mehr, mal weniger geeignet. Z.B. würde kein Mensch einen kompletten Webserver in Assembler schreiben, auch wenn dies natürlich ginge (theoretisch...))

Soweit Theorie, praktisch muss man noch andere Dinge miteinbeziehen.


Ich empfehle grundsätzlich das Erlernen der Sprache C für AVRs. Wenns später mal ein wenig zeitkritischer wird, lässt sich eigener Assemblercode problemlos hinzulinken.
C ist theoretisch zumindest plattformunabhängig und du kannst auch „Trockenübungen” am PC ohne µC machen.

Gedanken musst du dir natürlich auch über die Hardware machen; z.B. wie schnell die Daten ankommen bzw. wie groß der Abstand zwischen zwei Symbolen (ASCII-Zeichen) minimal ist, also welche Baudrate der Sender benutzt.
Da muss der µC auf jeden Fall mithalten.


_________________

BID = 739561

Bartholomew

Inventar



Beiträge: 4681


Zitat :
C ist theoretisch zumindest plattformunabhängig und du kannst auch „Trockenübungen” am PC ohne µC machen.

Im MPLAB-Simulator kann ich auch Assembler-Trockenübungen für den PIC ganz ohne PIC am PC machen
Ansonsten ist es bestimmt auch nicht verkehrt, sich als Einsteiger ein paar Assembler-Tutorials querzulesen. Nicht unbedingt, um damit auch zu programmieren, sondern um besser zu verstehen, wie so ein µC überhaupt arbeitet (Register, Datenwörter etc.).


Gruß, Bartho

BID = 739612

Andi-872

Aus Forum ausgetreten

"Gedanken musst du dir natürlich auch über die Hardware machen; z.B. wie schnell die Daten ankommen bzw. wie groß der Abstand zwischen zwei Symbolen (ASCII-Zeichen) minimal ist, also welche Baudrate der Sender benutzt.
Da muss der µC auf jeden Fall mithalten."


Ja, Nachdenken tue ich auch darüber schon eine Weile Wie bzw. mit welchen Hilfsmitteln bekomme ich da die Ergebnisse? Ich habe lediglich ein Programm bisher, welches mit die SysEx-Daten, die "unterwegs" sind, ausliest und anzeigt. WIe kann ich das messen?

Andi

BID = 739689

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Zur Hardware:

Die Daten kommen mit 31250bps, also 31,25kBaud.
Das ist recht langsam und ein mit einigen MHz getakteter AVR schafft das problemlos.
(Es gibt eine Formel zur Berechnung des Baudratenregister-Inhalts).
Weiterhin musst du natürlich die MIDI-Daten elektrisch so verändern, dass du sie mit der UART verbinden kannst. MIDI definiert eine Stromschnittstelle, die UART am µC erwartet Spannungspegel. Per google lassen sich kleine Schaltungen dazu finden.


Im MIDI-Protokoll wird genau beschrieben, wie sysEx-Daten eingespeißt werden können.
D.h., du musst zuerst einmal auf die Sequenz warten, die diesen Teil einleitet.
Dann extrahierst du den Datenblock und wertest ihn aus.
Danach wartest du wieder auf die Sequenz im Datenstrom, die sysEx-Daten einleitet.

Es gibt mehrere Möglichkeiten, wie die Auswertung erfolgt:
· Byteweise: nach jedem neuen Zeichen schaust du schon, ob es interessante Daten sind, oder ob man sie ignorieren kann. Das System braucht ein Gedächtnis, um mehrere Zustände zu speichern,
· Blockweise: du wartest auf die Startsequenz für die systemexklusiven Meldungen. Dann beginnst du, alle folgenden Bytes bis zum $F7 in einen Puffer zu schreiben.
Wurde das Ende der Sequenz erkannt, kannst du mit den mem*-Funktionen aus der Standard-Library (memncpy* in diesem Fall bzw. memcpy) diesen Block mit anderen Daten vergleichen.

Gibt auch noch andere Möglichkeiten und kompliziert ist das Ganze eigentlich nicht.

* memncpy ist besser, da nur soviele Bytes verglichen werden, wie angegeben.
Weiterhin gilt bei Puffern immer, dass Puffer auch irgendwann voll sein können, wenn z.B. die SysEx-Meldungen zu lang sind. Man muss also dafür sorgen, dass der Puffer nicht überläuft und andere Bereich im SRAM überschreibt, einfachere µCs tun das einfach so, ohne dass ein Betriebssystem das Programm als Prozess überwacht (und selbst dann passiert es ).

_________________

BID = 739696

Bartholomew

Inventar



Beiträge: 4681


Zitat :
Ich habe lediglich ein Programm bisher, welches mit die SysEx-Daten, die "unterwegs" sind, ausliest und anzeigt. WIe kann ich das messen?

Verstehe ich nicht.


Gruß, Bartho

BID = 739706

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Naja, er wird ein Sniffer haben, der die MIDI-Daten irgendwo abgreift und ein wenig aufbereitet darstellt.

Ich verstehe den zweiten Teil des Satzes als Fragestellung, wie man elektrisch an die Daten herankommt und dazu sagte ich ja, dass er eine kleine Schaltung benötigt, die das Signal anzapft und als Spannungspegel ausgibt. Der Ausgang dieser Schaltung kann dann direkt mit dem UART-Eingang des µCs verbunden werden.

Aber stimmt, ich empfinde den Satz auch als unverständlich.


Offtopic :

Zitat :
m MPLAB-Simulator kann ich auch Assembler-Trockenübungen für den PIC ganz ohne PIC am PC machen

Jo, das kann ich auch
Im AVR-Studio ist das sogar grafisch wesentlich ansprechender als in einem Shell-Simulator.


_________________

BID = 739859

Andi-872

Aus Forum ausgetreten

Hallo,

danke für die Antworten, besonders Don Comi: sehr ausführlich und für mich sehr hilfreich. Danke . Und: ja, der zweite Teil des Satzes war als Fragestellung gemeint, worauf sich ja dann Deine Antwort auch bezog.

Nun denn: frisch ans Werk


Andi


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 18 Beiträge im Durchschnitt pro Tag       heute wurden bisher 11 Beiträge verfasst
© x sparkkelsputz        Besucher : 182106279   Heute : 2767    Gestern : 5799    Online : 509        1.10.2024    15:28
6 Besucher in den letzten 60 Sekunden        alle 10.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0479319095612