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
@ 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_Checkliste#UART.2FUSART MfG Falk
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
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.
>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 :-)
Mal http://avrhelp.mcselec.com/config_serialout.htm und http://avrhelp.mcselec.com/config_serialin.htm angesehen?
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&Itemid=59&page=viewtopic&p=31287#31287 viele grüsse und frohe festtage, daniel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.