Forum: Mikrocontroller und Digitale Elektronik MIDI mit ATTiny


von nexo (Gast)


Angehängte Dateien:

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
}

von Stefan (Gast)


Lesenswert?

Deine Schaltung invertiert das Signal, deswegen hat sie am PC 
funktioniert, versagt aber am Midi Gerät.

High = Strom An
Low = Strom aus

von nexo (Gast)


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)

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
Noch kein Account? Hier anmelden.