Forum: Mikrocontroller und Digitale Elektronik Midi Signal mit Atmega8 erzeugen


von Fabian F. (fabiii9)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich habe mich jetzt etwas schlau gemacht und habe einige Informationen 
zusammen getragen.

Ich möchte hier eine kleine Testschaltung aufbauen, wenn diese 
funktioniert will ich sie etwas erweitern (Schieberegister) aber dazu 
später mehr.

Ich habe einen Schaltplan angehängt.
Funktioniert dieser Schaltplan so?

Ich will, dass wenn ich den Taster drücke ein Midisignal mit dem Atmega8 
erzeugt wird und ich in Hauptwerk oder GrandOrgue diesen Befehl empfange 
und verwenden kann.

Ich habe hier einen Code.
Wenn dies ausgeführt wird müsste doch eigentlich ein Midisignal erzeugt 
werden mit dem Ton 440 Herz (A).

Wird dieser Code funktionieren?
1
$RegFile = "m8def.dat"     ' ATMEGA8
2
$Crystal = 1000000         ' 1 MHz
3
$Baud    = 31250           ' MIDI-Baudrate (31,25kBit)
4
5
Taster   Alias PinD.2
6
7
Dim KeyDown     As Byte    ' Tasten-Merker
8
9
Init:
10
  DDRD.1 = 1     ' Sendeleitung auf Output
11
  PortD.2 = 1    ' internen Pull-Up aktivieren für Taster
12
13
Main:
14
  Do
15
    If Taster = 0 Then
16
      If KeyDown = 1 Then 
17
        GoSub SendMidiNoteOn
18
        KeyDown = 0
19
      End If          
20
    Else
21
      If KeyDown = 0 Then 
22
        GoSub SendMidiNoteOff
23
        KeyDown = 1
24
      End If
25
    End If
26
    WaitMs 20
27
  Loop
28
  End 
29
30
SendMidiNoteOn:
31
  Print Chr(&b10010000);    ' NOTE-ON-Command
32
  Print Chr(69);            ' Tasten-Nummer 69 (A4)
33
  Print Chr(100);           ' Key-Down-Velocity 100
34
Return
35
36
SendMidiNoteOff:
37
  Print Chr(&b10000000);    ' NOTE-OFF-Command
38
  Print Chr(69);            ' Tasten-Nummer 69 (A4)
39
  Print Chr(0);             ' Release-Velocity 0 (Default)
40
Return

Vielen Dank
Gruß
Fabi

von Karl H. (kbuchegg)


Lesenswert?

Ich rate dir ganz dringend, deine ersten Versuche mit der UART NICHT 
mit Midi zu machen, sondern indem du ganz einfach Buchstaben oder Text 
über die UART ausgibst und in einem Terminal nachsiehst, ob das 
gesendete auch wirklich an der Gegenstelle genau so ankommt, wie du es 
wegschickst!

Denn so vermeidest du 'stochern im Nebel'. Du gibst (zumindest denkst du 
das) etwas über die UART aus und die Gegenstelle reagiert einfach nicht. 
UNd dann ist die Frage gross: Wo liegt der Fehler?
Teil des Problems besteht darin, dass dir die Gegenstelle nicht 
mitteilt, warum sie nichts tut. Bei einerm Terminal ist das anders. Dort 
siehst du in Textform, was das Terminal verstanden hat. Und aus dem, 
bzw. aus den Abweichungen zu dem was gesendet wurde, kann man 
Rückschlüsse ziehen, was das Problem sein könnte.

von Route_66 (Gast)


Lesenswert?

Hallo!
Das hier:
> $RegFile = "m8def.dat"     ' ATMEGA8
> $Crystal = 1000000         ' 1 MHz
> $Baud    = 31250           ' MIDI-Baudrate (31,25kBit)
sieht verdächtig nach internem RC-Oszillator aus, und wird deshalb 
praktisch nicht zuverlässig oder gar nicht funktionieren!

von Falk B. (falk)


Lesenswert?

HTERM ist für solche Sachen optimal!

von Stefanus (Gast)


Lesenswert?

HTERM nutzt aber nichts bei der Bitrate von Midi, das kann der PC nicht 
empfangen.

Parallel zur Midi Buchse empfehle ich einen 220nF Kondensator. Er 
entschärtf die steilen Flanken des digitalen Signals und reduziert so 
die Abstrahlung von HF deutlich.

von Stefanus (Gast)


Lesenswert?

Sorry, ich meinte 220pF.

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.