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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.