Ich sitze jetzt schon seit ein paar Stunden hier und versuche verzweifelt dem ATMega32 ein paar Mididaten zu entlocken. Am Synthesizer kommt auch was an - nur scheint er damit nichts anfangen zu können, da kein Ton kommt. Was mache ich falsch ? Hier mal der Code, der mir am wahrscheinlichsten schien, dass er funktionieren würde: #include <avr/io.h> #include <stdio.h> #include <stdlib.h> #include <avr/delay.h> int main(void) { #ifndef F_CPU #define F_CPU 16000000 #endif #define UART_BAUD_RATE 31250 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_CPU)/((UART_BAUD_RATE)*16L)-1) UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8); UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU); UCSRB |= (1<<TXEN); //UART TX einschalten UCSRC |= (1<<URSEL)|(3<<UCSZ0); //Asynchron 8N1 while(1) { while (!(UCSRA & (1<<UDRE))); UDR = 144; while (!(UCSRA & (1<<UDRE))); UDR = 12; while (!(UCSRA & (1<<UDRE))); UDR = 127; _delay_ms(100); while (!(UCSRA & (1<<UDRE))); UDR = 128; while (!(UCSRA & (1<<UDRE))); UDR = 12; while (!(UCSRA & (1<<UDRE))); UDR = 127; _delay_ms(1000); } } noch etwas was mir aufgefallen ist: wenn ich die Delays ändere ändert sich der Blinktakt der RX-LED am Synthesizer nicht ...
Ich tippe auf Baudratenprobleme und würde vorsichtshalber sowohl F_CPU als auch UART_BAUD_RATE als long-Konstanten (durch Anhängen eines 'L') definieren. Sicherheitshalber solltest Du Dir ausgeben lassen, welche Werte nun in UBBR{H|L} eingetragen werden ...
Ich habe es auch schon mit UBBR (L) 31 und UBBR (H) 0 versucht ... das müsste soweit eigentlich stimmen oder ?
Die Baudrate stimmt schon. Komisch. aber wegen den Befehlen etc. Guck mal hier, da ist sogar ein Beispiel angegeben, probier das mal! http://www.zem-college.de/midi/mc_cvm2.htm PS: Frage: Ich kann ja diese MidiBefehle auch an den PC senden. Wie spiele ich diese nun am PC ab ? Gibts Programme um auf die Noten, irgndwelche Drums oder andere Effekte zu legen? Ansonsten such ich mir Drum-waves raus, schick die Daten über den RS232 und mach mir ne VB applikation ;) ;) ;)
Es gibt jede Menge Software, die das kann, teilweise sogar Freeware. Ich kenne zwar jetzt auf Anhieb keine Namen (zumindest nicht von Freeware), aber ich hatte mal so einen kostenlosen Wavetable-Player. Eventuell von sonicspot.com !? Aber noch einmal zum Thema: Eimal angenommen mit der USART-Einstellung stimmt alles ist dennoch irgend etwas nicht in Ordnung. Vielleicht ist es ja ein blöder Fehler, als Einsteiger passiert so etwas leider mal. Woran liegt es, dass die Midi-In-Anzeige des Synthesizers immer mit der gleichen Frequenz pulsiert, obwohl ich die Delay-Werte verändere ?
Ein Tipp: bei Midi Sachen verwende ich immer das Freeware-Tool MIDI-OX, damit kannst Du den Midi Datenstrom analysieren (Noten, Midi-Clock, Midi SSC, usw.). Mit einem Synthesizer würde ich es nicht machen, da hast Du ja kaum Möglichkeiten Fehler im Code zu finden.
Probier einfach mal den ausgerechneten Wert direkt zuzuweisen. Also UBBRH = 0 und L = 31.. wenn ich richtig gerechnet hab. Sind die Fuses richtig gesetzt? PCKommunikation? dave
Danke, MidiOX werde ich nachher mal probieren ... Fuses ? Sorry aber wie gesagt: ich bin Anfänger und weiss weder genau was das ist noch was man wie setzen muss. (Da gibt es scheinbar auch keine Einstellungsmöglichkeit, das ich die Daten über das neueste Programmers Notepad (WinAVR) hochgeladen habe) Wie sieht es mit der Ausgangsbeschaltung aus ? Originalsignal oder negieren ? Habe beides schon versucht ...
@david: idee wurde schon vorgeschlagen und ausgeführt von ihm. keine pc kommunikation (wie oben steht)
Aja ... anch ein bisschen lesen weiss ich jetzt wenigstens, was die Fuses sind - jetzt müsste ich nur noch die passende Einstellung herausfinden. Also wie Fuses setzen unter AVRDUDE (?) für ATMEga32 mit 16 MHz Quarz ? Ich gehe jetzt mal selber auf die Suche aber vielleicht ist ja jemand schneller ;o) Danke
Irgendwie ist mir das noch ein wenig ein Rätsel ... OSCON = 1 ? leider hat AVRDude kein so schönes Häkchen-System, aber als ich eben Ponyprog installiert habe, konnte ich den ATMega32 darin nicht finden ... Kann mir bitte jemand verraten, was ich in AVR-Dude wir setzen muss ?
OK, ich habe das Problem vorläufig einfach umgekehrt gelöst und F_CPU umdefiniert. Jetzt funktioniert es auch, Danke für eure Bemühungen. Dennoch würde ich den ATMega gerne auf 16 MHz umstellen und bräuchte da noch einmal eine kleine Hife
Für nen 16 Mhz Quarz brauchste folgenden Einstellung der Fuse Bits CKOPT programmiert (0) CKSEL3, CKSEL2, CKSEL1, CKSEL0 nicht programmiert (1) SUT1..0 nicht programmiert (1) Schon mal mit nem Oszi den Takt gemessen?? vieleicht läuft dein ATMega ja mit internem Oszillator. Das würde das ganze Verhalten erklären. Achja für die Hardware. Bei Logischem High Pegel fließt kein Strom in der Midischnittstelle. Logisch Null als entsprechend Stromfluss. Dann noch ein Tip bevor dir die Haare ausfallen. Manche PC-Sequencer, wie Logic Audio senden kein Note Off. Die Senden dann Note On mit Velocity = 0. Es gibt bestimmt auch Synths die das so machen. Ist jetzt nur als TIpp gedacht, weil ich mich damit auch am Anfang rumgeschlagen habe. Was baust du denn feines?
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.