-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Baudratenkonverter Midi(31250) nach Seriell(9600)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    89331 Burgau
    Beiträge
    32

    Baudratenkonverter Midi(31250) nach Seriell(9600)

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Habe da ein Problemchen

    ich habe eine Baudrate von 31250Baud, 1Startbit, 1,5 Stopbit (Midisignal)
    als Eingangssignal von einem DrumComputer
    und am anderen Ende benötige ich aber 9600 Baud und 2 Stopbits
    um diverse Geräte zu steuern

    kann ich das in einem ATTiny2313 verwirklichen, indem ich eine Software UART als Midieingang verwende
    und das Signal an die Hardware UART als ser. Ausgang übergebe mit den 9600 Baud.

    Hat schonmal jemand so etwas ähnliches mit Bascom geproggt, oder
    wer könnte mir evtl ein paar Tips geben wie das mit der Baudraten Umwandlung funktioniert

    gruß Gerhard

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    89331 Burgau
    Beiträge
    32
    Das hätte ich jetzt nicht gedacht das hier im Forum,
    keiner eine Ahnung davon hat,
    wie man eine beliebige Baudrate in eine andere Baudrate umsetzt

    gruß Gerhard

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ein Midievent hat 2-3 Zeichen, die du (ohne Buffer) mit 9600 nicht schnell genug wieder rauskriegst.

    Ich würde es umgekehrt machen:
    --> den Output mit softUart
    --> und das MIDI-in mit der HW und
    Config serialin =buffered , size = 12
    da ist der Empfang dann automatisch gebuffert, damit nix verloren geht

    EDIT: MIDI hat nur ein Stopp-bit, aber die HW macht eh nix anderes
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    89331 Burgau
    Beiträge
    32
    Ungefähr so:

    Code:
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    $baud = 31250
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 1
    
    Open "COMD.2:9600,8,n,2" For Output As #1
    
    
    ' Variablendeklaration
    Dim Zeiger As Byte At &HA0
    Zeiger = 1
    Dim Flag As Byte At &HA1
    Dim Adresse As Eram Byte
    Dim Adresse_temp As Byte At &HA3
    Dim Tempword As Word At &HA5
    Adresse_temp = Adresse
    Dim Tempbyte As Byte At &HA7
    Dim Tempbyte2 As Byte At &HA8
    
    Dim Protokoll(10) As Byte
    
    'Ausgangsports konfigurieren
    Ddrd = &B01111110                                           
    Ddrb = &B11111111
     
    
    
    Do                                                        
     Tempbyte = Waitkey()     
     Gosub Zeichenempfang                                    
    Loop
    
    
    Zeichenempfang:
       Tempbyte = Udr
    If Tempbyte > 0 Then  
     Print(#1) Tempbyte
    end if
    Return
    End

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Schau, guck mal, das is'n Programm, das erkennt note-on / note off
    und macht MIDI-Through (+running status)
    Vielleicht kannst du dir was abspicken

    Code:
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    $baud = 31250                                     ' MIDI
    
    $hwstack = 64
    $swstack = 256
    $framesize = 64
    
    Const Led_hold_ms = 255                           ' LED hold time (255 mS)
    
    Const Rx_bufsize = 32
    Const Tx_bufsize = 32
    
    Config Serialin = Buffered , Size = Rx_bufsize
    Config Serialout = Buffered , Size = Tx_bufsize
    
    '-------------------------------------------------
    Dim Rxskip As Byte
    Dim Rxcntr As Byte
    Dim Rxchar As Byte                                ' Zeichen von MIDI
    Dim Note As Byte                                  ' Note 0-127
    Dim Veloc As Byte                                 ' velocity 0-127
    
    Dim Event As Byte                                 ' MIDI EVENT
    '-------------------------------------------------
    Dim Channel As Byte
    '-------------------------------------------------
    Dim Ledhold As Byte
    '-------------------------------------------------
    Dim Tmp As Byte
    
    
       Enable Interrupts
       channel = 1
    '---------------------------------------------
    '
    '---------------------------------------------
       Do
        Gosub Rxdata                                  ' Check MIDI Input
        If Event = 1 Then                             ' Midi-Event NOTE / VELOC
           Event = 0
    '------------------
    ' event-abarbeiten
    ' note  0-127
    ' veloc 0-127    (0=note off)
    '------------------
        End If
       Loop
    End
    
    
    '----------------------------------------
    '
    '----------------------------------------
    Rxdata:
       While Ischarwaiting() = 1                      ' Is was da ?
          Rxchar = Inkey()                            ' ja, holen
    
    '------------------------------------------------------------------
          Print Chr(rxchar);                          ' MIDI Through
    '------------------------------------------------------------------
    
          If Rxchar >= 128 Then                       'start midisequ.
             Tmp = Rxchar And &H0F                    ' channel-nr only
             If Tmp <> Channel Then         'für OMNI mode auskommentieren
                Rxskip = 1
             Else
                Rxskip = 0
                Tmp = Rxchar And &HF0                 ' event
                Select Case Tmp
    
                Case &H80 : Rxcntr = 1                ' note off
                Case &H90 : Rxcntr = 1                ' note on
    
                Case Else : Rxskip = 1                'alles andere is uns egal
    
                End Select
             End If
          Else
             If Rxskip = 0 Then
                If Rxcntr = 1 Then
                   Note = Rxchar
                   Rxcntr = 0
                Else
                   Veloc = Rxchar
                   If Veloc <> 0 Then
                      Event = 1                       ' signal MIDI EVENT
                   End If
                   Rxcntr = 0
                End If
             End If
          End If
       Wend
       Return
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    89331 Burgau
    Beiträge
    32
    Das mit den Midi Signalen ist die kleinere Schwierigkeit

    nur ich muß von der Midi Baurate(31250) auf 9600 Baud mit 2 Stopbit kommen um meine bestehende Hardware weiterverwenden zu können.

    gruß Gerhard

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Soweit ich weiß passt die Baudrate von Midi (31250) und deiner seriellen Schnittstelle mit 9600 nicht besonders gut zusammen. Das heisst es gibt keine gemeinsamen vielfachen die als Quarzfrequenz taugen würden.
    Rechne das vorher erstmal durch, damit die Abweichungen bei deinem gewünschten Quarz nicht zu groß werden.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    89331 Burgau
    Beiträge
    32
    verstehe ich jetzt nicht

    bei 8MHz Quarz 9600 Baud --- 0,16% Abweichung
    bei 8MHz Quarz 31250 Baud --- 0,00% Abweichung

    ???????????????????????????????????

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Ich denk mal der Fehler kommt durchs Teilen zustande.
    (Ob die Rechnung so stimmt, weiss ich nicht, zumindest könnt ichs mir so erklären):

    die 8 MHz durch 9600 Ergibt 833,3333333333333....
    die 8 MHz durch 31250 ergibt glatte 256,00
    So hat man bei einem nie den exakten Wert (Abweichung >0), beim anderen schon (Abweichung = 0)

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    2 stoppBit sind ungewöhnlich. wer ist denn der Empfänger ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •