MIDI mit ATTiny

Gast #3348666
Lesenswert?

Hi,

ich bin dabei, meinen MIDI-Empfänger mit einem ATtiny2313 in Betrieb zu 
nehmen. Getestet habe ich ich die Funktion mit einer PC-kompatiblen 
Baudraten (9600 und 38400), funktionierte alles bestens. (kompletter 
Befehlssatz, 3 Befehle mit Funktion, Kanal-Wahl per DIP-Schalter)

Nun habe ich die Baudrate auf 31250 gesetzt und die Eingangsbeschaltung 
(s.Anhang) ergänzt. Daten sind am RxD Pin des Controllers messbar, 
jedoch werden diese wohl nicht korrekt verarbeitet. Habe nun unten 
stehendes Testprogramm drauf und schicke 1 Byte Daten an die 
Schnittstelle, Ausgänge bleiben auf Initialwert 0.


Invertieren muss ich ja nichts (Strom = "0", kein Strom = "1" passt ja 
mit dem Optokoppler und PullUp wieder), warum die Berechnung der 
Baudrate bei 38400 klappt, bei 31250 nicht (ergibt bei 4MHz ja sogar 
einen glatten Wert), wäre mir auch ein Rätsel...

Wo könnte der Fehler liegen?



Quellcode-Auszug des "Debug"-Programms (gibt 1:1 Daten auf ein 
Ausgaberegister):
1
#define F_CPU 4000000UL
2

3
[...] (Deklarationen, keine Timer, etc.)
4

5
int main (void) {
6
  USART_Init(31250);
7
  while(1) {
8
    OUTPUT = USART_Receive();
9
  }
10
}
11

12
void USART_Init( unsigned long baud ) {
13
  unsigned int ubrr_val = (unsigned int)((F_CPU/(baud*16L))-1);
14
  UBRRH = (unsigned char)(ubrr_val>>8);
15
  UBRRL = (unsigned char)ubrr_val;
16
  UCSRB = (1<<RXEN);    // Empfänger aktivieren
17
  UCSRC = (3<<UCSZ0);    // 8 Daten-, 1 Stopp-Bit
18
}
19
unsigned char USART_Receive( void ) {
20
  while ( !(UCSRA & (1<<RXC)) )
21
  return UDR;
22
}
Angehängte Dateien:
Gast #3348806
Lesenswert?

Ja, tut sie, aber per Definition ist bei MIDI Stromfluss = Logisch 0, 
kein Strom = Logisch 1.
Fließt Strom, schaltet der OK durch und es liegt ein ~0V Pegel am RxD 
an, fließt kein Strom, zieht der PullUp den Pin auf VCC (hier 5V). Also 
soweit korrekt.


Habe eben nochmal das Signal am IC-Pin mit dem Scope angeschaut, es 
kommt dort schon nicht korrekt an, auf jeden Fall keine sauberen 
Flanken. Die 220 Ohm überbrücken (ja, damit fließt mehr Strom, als in 
der vorgesehen) macht es etwas besser, aber auch nicht wirklich gut. 
Denke ich werde den morgen mal gegen einen schnelleren Typ tauschen 
(6n137, PC900 oder so, mal schauen, was noch da ist)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren