Midisignal auslesen mit Usart

Gast #3317286
Hallo ihr lieben Elektrotechniker, Bastler und Linearkombinationen 
daraus,

ich bin im Moment dabei einen Synthesizer zu basteln und möchte dafür 
Midi-daten über den Usart einlesen, die ich über ein USB->Midi interface 
bekomme.
Hab mit nem Oszi mal geschaut und von der Pinbelegung sollte das 
stimmen, daher glaube ich, dass mein Code vielleicht noch nicht ganz 
erste Sahne ist.
Benutze einen Atmega 32L und würde mich sehr freuen, wenn ihr mir 
weiterhelfen könntet :)

Liebe Grüße vom Blaubär
1
void Usart_init(void)
2
{
3
  UCSRB = (1<<RXEN)|(1<<UCSZ2);     // enables Usart receive mode
4
  UCSRC = (1<<URSEL);               // allows writing to the UCSRC register
5
  UCSRC |= (1<<UMSEL);              // synchronos Operation
6
  UCSRC |= (1<<UCSZ1);              // UCSZ1 and UCSZ2 set = 8 bit Word
7
  UBRRH |= (1<<URSEL);              // allows now writing to the UBRRH register
8
  UBRRL = 0x15;                     // set Baudrate to 31250
9
}
10

11
unsigned char USART_Receive( void )
12
{
13
/* Wait for data to be received */
14
while ( !(UCSRA & (1<<RXC)) )
15
;
16
/* Get and return received data from buffer */
17
received_byte = UDR;
18
return received_byte;
19
}
#3317295
Äh, nein
Das hier
1
  UCSRC = (1<<URSEL);               // allows writing to the UCSRC register
2
  UCSRC |= (1<<UMSEL);              // synchronos Operation
3
  UCSRC |= (1<<UCSZ1);              // UCSZ1 and UCSZ2 set = 8 bit Word

geht nicht.

Es müssen alle Bits in einem Rutsch geschrieben werden und URSEL sagt 
aus, ob dieser Schreibvorgang jetzt das UCSRC betrifft oder das UBRRH

URSEL ist also kein Umschalter, den mal einmalig setzt und dann wieder 
rücksetzt
1
  UCSRC = (1<<URSEL) | (1<<UMSEL) | (1<<UCSZ1);

wieso eigentlich UMSEL?
AUch Midi ist doch keine synchrone Übertragung sondern stink normale 
asynchrone RS232.


AVR-GCC-Tutorial/Der UART


Die UART erst mal in der Gegenrichtung in Betrieb nehmen!
Vom AVR aus etwas ausgeben und nachsehen, ob man das in einem 
Terminalprogramm auch empfangen kann!
Gast #3317300
>Benutze einen Atmega 32L und würde mich sehr freuen, wenn ihr mir
>weiterhelfen könntet :)

Bei welchem Problem?

>  UCSRC |= (1<<UMSEL);              // synchronos Operation

Synchron?

>  UBRRH |= (1<<URSEL);              // allows now writing to the UBRRH

Falsch.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.