mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Midi-Ausgabe mit AVR klappt nicht


Autor: Daniel C. (dan1el)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bisher habe ich Midibefehle mit At89C2051 über Bascom-8051 immer 
folgendermassen ausgegeben, was einwandfrei funktioniert:

$baud = 31250
Open "com3.1:31250" For Output As #1
Put #1 , 153   'kanal
Put #1 , 45     'ton
Put #1 , 90     'lautstärke
Close #1

(hier als Beispiel die Ausgabe eines Tons auf Kanal 10)


Jetzt bin ich auf Bascom-AVR und AtMega32 umgestiegen und habe das selbe 
dort folgendermassen probiert:

$baud = 31250
Open "comd.1:31250" For Output As #1
(alternativ: Open "comd.1:31250,8,n,1" For Output As #1 )
Put #1 , 153
Put #1 , 45
Put #1 , 90
Close #1

Hier sollen die Midibefehle ebenfalls über TXD (portbit d.1) ausgegeben 
werden, deshalb comd.1.
Midi ist ja ein serielles Protokoll mit 31250Baud, 8 Bit, noParity, 1 
Stopbit, daher bei der alternativen Open-Variante die anderen Parameter.

Leider funktioniert die Übertragung mit dem AVR überhaupt nicht. Zuerst 
dachte ich, vielleicht schwingt der Oszillator auf der falschen 
Frequenz, aber $crystal = 8000000  ist völlig ok (sonst hatte es mit der 
Baudrate ja nicht mehr hingehauen).
Dann habe ich mal ein Multimeter an PinD.1 (TXD) gegen GND 
angeschlossen, da tut sich anscheinend überhaupt nichts (beim At89C2051 
ließen sich so auf jeden Fall im Sendebetrieb leichte bis mittlere 
Spannungsschwankungen an TXD feststellen).
Daher vermute ich, dass der AVR gar keine Daten an das Midigerät 
übermittelt.
Stellt sich nur die Frage, woran das liegen kann!
Habe ich möglicherweise den UART nicht richtig konfiguriert?

Wenn jemand eine Idee hat, bitte melden!

Viele Grüsse,
Daniel

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Daniel C. (dan1el)

>Leider funktioniert die Übertragung mit dem AVR überhaupt nicht. Zuerst
>dachte ich, vielleicht schwingt der Oszillator auf der falschen
>Frequenz, aber $crystal = 8000000  ist völlig ok (sonst hatte es mit der
>Baudrate ja nicht mehr hingehauen).

;-)
Die Angabe $crystal = 8000000 bedeutet NICHT, dass BASCOM den Oszillator 
auf 8 MHz einstellt, sonder sagt BASCOM, das DU dafür sorgst, dass der 
Oszillator auf 8 MHz schwingt. Und für MIDI, welches quasi RS232 ist, 
sollte es schon ein Quarzoszillator sein. Den muss man per AVR Fuses 
einschalten.

>Habe ich möglicherweise den UART nicht richtig konfiguriert?

Wahrscheinlich.

AVR-Tutorial: UART
http://www.mikrocontroller.net/articles/AVR_Checkl...

MfG
Falk

Autor: Daniel C. (dan1el)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Falk,
Danke für die schnelle Antwort!
Der Oszillator schwingt wie gesagt auf 8Mhz, hatte ich schon per Fuse 
eingeschaltet und auch überprüft.

Den angegebenen Artikel muss ich mir noch mal genauer anschauen, hatte 
ich neulich schon mal überflogen.

Wenn sonst noch jemand eine Idee hat, bitte melden!
Daniel

Autor: Daniel C. (dan1el)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, hab jetzt noch mal nachgemessen, der txd bleibt die ganze zeit auf 
hi, da tut sich nichts.

habe jetzt auch noch mal den artikel genauer durchgelesen und auch noch 
mal alles, was unter bascom über den uart geschrieben wird.

so wie ich das sehe, müsste es eigentlich funktionieren.

oder gibt es beim mega32 irgendwelche fuses, die den uart standardmässig 
deaktivieren?
habe beim auslesen der fuses auf jeden fall nichts in der richtung 
entdeckt.

wenn es mit dem 89C2051er geht, warum nicht erst recht mit dem M32er? 
das macht mich irgendwie stutzig.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>oder gibt es beim mega32 irgendwelche fuses, die den uart standardmässig
>deaktivieren?

Nein.

Es liegt aber mit Sicherheit nicht am Mega32, sondern 
höchstwahrscheinlich an der UART-Init. Leider kenne ich mich mit BASCOM 
nicht aus, aber unter ASM ticken alle meine MIDI-Controller lustig vor 
sich hin :-)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Daniel C. (dan1el)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
danke für die Antworten, das problem ist gelöst.

durch die verwendung von $baud und open habe ich den hardware-uart und 
den software-uart durcheinandergeworfen, durch simples streichen der 
"$baud = 31250"-Zeile funktioniert es jetzt!

hatte deswegen auch mal im bascom-forum nachgefragt und dort die o.g. 
antwort erhalten. wen es interessiert:
http://www.mcselec.com/index2.php?option=com_forum...

viele grüsse und frohe festtage,
daniel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.