Forum: PC-Programmierung Hat jemand eine Idee wie ich Midibefehle über USB schicken kann an Arduino ?


von Zeitjäger  . (forgoden)


Lesenswert?

Ich möchte Midibefehle die mein Musikprogramm FL-Studio 10 ausgibt, an 
Arduino schicken und zwar per USB.

Also FL Studio müsste diesen USB-Anschluss von Arduino irgendwie 
erkennen und dann MIDI-Befehle hinschicken.

Jemand eine Idee wie ich das umsetzen kann?

von Linksammler (Gast)


Lesenswert?

Helmut vB schrieb:
> Jemand eine Idee wie ich das umsetzen kann?

Wenn deine MIDI-Software einen beliebigen UART ansprechen kann, ist da 
nix umzusetzen, denn dann ist alles schon fertig.

Naja, fast.
1
void setup() {
2
  Serial.begin(31250);
3
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dein Arduino muss "nur" die USB-Midi-Spezifikatio umsetzen, dann ist er 
ein normales Midigerät und kann von jedem Programm angesteuert werden, 
das Midi-Geräte ansteuern kann; Dein "Fruity Loops Studio" sollte 
dazugehören.

von Zeitjäger  . (forgoden)


Lesenswert?

die frage ist aber wie?

Im Moment habe ich diesen Blog gefunden
https://2froblog.wordpress.com/2012/07/19/controleur-midi-via-lusb-avec-arduino-49/

allerdings auf französisch wo ich nix verstehe, aber die Screenshots, 
Video und die Links zu Software sprechen für sich

von Frank K. (fchk)


Lesenswert?

Helmut vB schrieb:
> Ich möchte Midibefehle die mein Musikprogramm FL-Studio 10 ausgibt, an
> Arduino schicken und zwar per USB.
>
> Also FL Studio müsste diesen USB-Anschluss von Arduino irgendwie
> erkennen und dann MIDI-Befehle hinschicken.
>
> Jemand eine Idee wie ich das umsetzen kann?

Bei den meisten: gar nicht. Punkt. Wenn Dein Arduino einen 
FT232irgendwas oder eine andere USB-seriell Brücke hat, dann gibt es 
keinen Weg, dass sich diese als USB MIDI Device zu erkennen gibt. Ende.

Wenn Dein Board mit einem Mega 16U2 oder Mega32U2 als USB-Seriell-Chip 
ausgestattet ist, dann könntest Du diesen umprogrammieren. Die 
Arduino-Entwicklungssoftware würde dann aber nicht mehr funktionieren. 
Keine Ahnung, ob Du das willst. Und das erforderliche Know-How wirst Du 
sicher auch nicht haben, davon gehe ich aus.

Also: vergiss den Arduino USB-Port. Kaufe ein fertiges 
USB-MIDI-Interface und nutze dieses, um Deinen Arduino an den MIDI-Port 
anzuschließen. Das ist ja immerhin nur ein UART, aber per Optokoppler 
getrennt. Infos dazu gibts genügend im Netz.

fchk

von Joachim B. (jar)


Lesenswert?

habe gerade mal den Arduino angeworfen, die Midi Baudrate kann nicht 
eingestellt werden, hilft nur der Umweg über die 2te UART

von r_u_d_i (Gast)


Lesenswert?

Helmut vB schrieb:
> die frage ist aber wie?
>
> Im Moment habe ich diesen Blog gefunden
> 
https://2froblog.wordpress.com/2012/07/19/controleur-midi-via-lusb-avec-arduino-49/
>
> allerdings auf französisch wo ich nix verstehe, aber die Screenshots,
> Video und die Links zu Software sprechen für sich

Das ist ein Midi2Seriell Konverter
das ist nichts anderes als:

Der Arduino selber hat nur UART also Rx/Tx
an dem Arduino sind jetzt zwei Drehpotis angeschlossen und ein 
Schieberegler mit 10 KOhm.

Die drei Sachen gehen auf den Arduino.
Der wandelt die Regler in Midi befehle um.

Da der Arduino aber keinen USB MIDI Class port bereitstellen kann (*)
wird die Ausgabe an einen USB Seriel Adapter geleitet der am Uart Rx/Tx 
hängt, man kann auch den USB Port ( CDC ) verwenden.

Der USB Serial Adapter wird dann im Midi2Serial Konverter die Baudrate 
eingestellt, mit der die UART 'Bridge' arbeitet.

Das kleine Tool   leitet dann die Midi Befehle vom USB Seriell weiter 
als virtueller Audio Midi Claas Treiber, den man dann im MIDI HOST 
einstellen kann als 'EIngang'

man hat die Option auch die Midi befehle an Midi.OX oder MIDI Yoke zu 
leiten.

Du brauchst auch keine MIDI Baudrate einstellen, und kannst von 9600 bis 
115200 alles auswählen´auch die hohen USB Baudraten.

Wenn du echtes MIdi machen wills mit deinem Arduino, dann hat dir Rufus 
schon das richtige genannt, du brauchst dann einen USB Device Baustein 
der MIDI kann und der am Arduino unterstützt wird.

Einen Umweg kannst du noch gehen:
Wenn du z.B. ein USB-HOST Shield dir kaufst,
z.B. das da:

http://hardwarefun.com/tutorials/using-usb-host-shield-with-arduino


und hier ein direktes Projekt mit MIDI USB-HOST

http://www.circuitsathome.com/mcu/interfacing-midi-devices-with-arduino-using-usb-host-shield


Alles was du wissen musst:

http://arduino.cc/en/pmwiki.php?n=Reference/USBHost


dann kannst du für diesesn USB HOST einen USB audio midi class treiber 
schreiben, dann kannst du ein USB2MIDI kabel
z.b das:

https://www.google.de/search?q=USB+MIDI+kabel&hl=de&gbv=1


dort anschliessen. Dann kommen am DIN 5 midi OUT deine MIDI Signale 
raus,
dann aber mit 31250 baud und du brauchst am Rechner dann wieder einen 
USB2MIDI Adapter. Dann verbindest MIDI out vom USB HOST Kabel mit MIDI 
in vom USB2MIDI am Rechner.

Genau aus dem Grunde wurde Midi2Seriell geschaffen; das gleiche hab ich 
auch selber geschrieben aber mit MidiYoke und WIFI Unterstützung.
Das gleiche auch für Android .


lg



rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

Helmut vB schrieb:
> Ich möchte Midibefehle die mein Musikprogramm FL-Studio 10 ausgibt, an
> Arduino schicken und zwar per USB.

ok -
du willst aber die andere richtung,
dann geht es genau in die andere richtung
also am rechner midi out zu midi in verbinden mit dem ganzen HOST und 
kabel gejammer..

oder eben
das Midi2Seriell anstatt dem Seriell2Midi installieren und die Midi 
Sachen aus deinem PC an den Arduino schicken, ( was willst du mit MIDI 
daten am Arduino ? ) ...

es gäbe noch eine Lösung, dazu müsste dir aber WIFI am Rechner zur 
Verfügung stehen oder ein LAN das WIFI bereitstellt.

lg
rudi :)

von r_u_d_i (Gast)


Lesenswert?

so alle guten dinge sind drei:

http://makezine.com/2010/11/30/usbhacking/

jetzt solltest alles haben was du brauchst.
Wenn du ein USB HOST Shield brauchst, hier hab ich noch eins,
PM an mich.

lg
rudi :)

von r_u_d_i (Gast)


Angehängte Dateien:

Lesenswert?


von r_u_d_i (Gast)


Lesenswert?

Helmut vB schrieb:
> Ich möchte Midibefehle die mein Musikprogramm FL-Studio 10 ausgibt, an
> Arduino schicken und zwar per USB.

nochmal
Bezogen auf deinen Thread Titel:
"wie ich Midibefehle über USB schicken kann an Arduino ?"
welchen USB meinst du da?
dem am PC, dem am Arduino?
PC und Ardudion sollen beide per USB verbunden werden?

Du führst einem ja ganz irre :)
was hälst von dem:
USB 2 MIDI Kabel besorgen
USB am PC anstecken
am MIDI OUT per Optokoppler wie Frank es schon sagte
den MIDI sauber trennen und auf den Uart des Arduino legen.
Den Uart des Arduino auf 312500 einstellen
Dein Status, Data1, Data2 am Uart auslesen
was dein FL Studio 10 ausgibt und weiterverarbeiten.
wars das was du wissen wolltest?

lg
rudi :)

von r_u_d_i (Gast)


Lesenswert?

die tasten sorry, 31250 soll das heisen.

von Joachim B. (jar)


Lesenswert?

r_u_d_i schrieb:
> Den Uart des Arduino auf 31250 einstellen

am USB Arduino Schnitte lässt sich das nicht einstellen, aber am UART2 
oder Soft UART, wenn nicht über die Arduino IDE Serial2. dann in C per 
Register.

Hat Midi 8N1 ?

von Halbfinalrückspielhalbzeitrückstandsgenießer (Gast)


Lesenswert?

Joachim B. schrieb:
> Hat Midi 8N1 ?

"The MIDI standard consists of a communications messaging protocol 
designed for use with musical instruments, as well as a physical 
interface standard. It consists physically of a one-way (simplex) 
digital current loop electrical connection sending asynchronous serial 
communication data at 31,250 bits per second. 8-N-1 format, i.e. one 
start bit (must be 0), eight data bits, no parity bit and one stop bit 
(must be 1), is used"

von r_u_d_i (Gast)


Lesenswert?

Joachim B. schrieb:
> r_u_d_i schrieb:
>> Den Uart des Arduino auf 31250 einstellen
>
> am USB Arduino Schnitte lässt sich das nicht einstellen,

Ja weil der USB Wandlerbaustein diese 31250 nicht unterstützt wie auch 
die ganze uSB2Seriell Adapter nicht, man kann es zwar einstellen, es 
sind aber dann keine 31250

Es gibt einen USB2Seriell Wandler den man per Firmware dazu bewegen 
kann,
ich hab aber den Link nicht mehr ( ich weiss auch nicht mehr wie ich den 
damals gefunden habe )

> aber am UART2
Ja den mein ich also den echten UART vom Mega2560
der hat ja vier:
Tx0, Rx0,
Tx1, Rx1
Tx2, Rx2
Tx3, Rx3

> oder Soft UART,

Sollten die 54 Pins dann ausreichen :)
aber einen Tip dazu
Soft Uart nur
entweder empfangen oder senden
dann klappt das super

> wenn nicht über die Arduino IDE Serial2. dann in C per
> Register.

jo

>
> Hat Midi 8N1 ?

hat es,
31250,8, N, 1

lg
rudi

von Zeitjäger  . (forgoden)


Lesenswert?

vielen Dank für die zahlreichen antworten. da muss ich erst mal alles 
durchlesen und verstehen bevor ich wieder meine Probleme schildern kann.

Aber eine Frage: Braucht man USB Host Shield wenn man den ATMega2560 
hat? Weil der hat doch 4 mal den TX/RX ?

von Frank K. (fchk)


Lesenswert?

Du brauchst kein Host Shield.

Du brauchst das hier für den PC:
ebay #280743272825

Für den Arduino nimmst Du das hier:
ebay #311014230782

Dann musst Du nur noch wissen, dass Du MIDI-OUT von einem Gerät ins 
MIDI-IN vom anderen Gerät stecken musst. Zwei MIDI-OUT oder zwei MIDI-IN 
miteinander verbinden funktioniert nicht. Immer OUT mit IN.

Der Rest sollte trivial sein.

fchk

PS: Die passende Arduino-Library für MIDI gibts im zweiten ebay-Link 
auch gleich. Musst Du nur benutzen.

: Bearbeitet durch User
von Zeitjäger  . (forgoden)


Lesenswert?

Also das mit dem Midi Adapter und Midi Buchse habe ich schon probiert. 
Zwar hab ich nicht diesen Shield aber ich habe eine eigene Schaltung 
zusammengesetzt nach dieser Anleitung: 
http://www.instructables.com/id/Send-and-Receive-MIDI-with-Arduino/step10/Receive-MIDI-Messages-with-Arduino/?lang=de

Funktioniert zwar aber wenn ich 16 Controlstates (drehschalter) von FL 
Studio gleichzeitig an Arduino schicke, so gehen einige Daten verloren 
bzw sie bekommen falsche Werte. Ich glaube es liegt daran dass Midi nur 
4kb/s schafft, während USB auf 480 Mbit/s kommt.

Ich weiss nicht ob dieses Problem mit Midi Shield beheben kann

von Joachim B. (jar)


Lesenswert?

Helmut vB schrieb:
> Funktioniert zwar aber wenn ich 16 Controlstates (drehschalter) von FL
> Studio gleichzeitig an Arduino schicke, so gehen einige Daten verloren

nutzt du uart interrupts? sollte bei dem Tempo nix verloren gehen

von Frank K. (fchk)


Lesenswert?

Helmut vB schrieb:

> Funktioniert zwar aber wenn ich 16 Controlstates (drehschalter) von FL
> Studio gleichzeitig an Arduino schicke, so gehen einige Daten verloren
> bzw sie bekommen falsche Werte. Ich glaube es liegt daran dass Midi nur
> 4kb/s schafft, während USB auf 480 Mbit/s kommt.

Dann ist das Arduino-Zeugs zu langsam bzw scheiße programmiert. Mach es 
in C neu oder nimm einen Arduino auf ARM-Basis (Achtung 3.3V Pegel statt 
5V).

fchk

von Zeitjäger  . (forgoden)


Lesenswert?

> nutzt du uart interrupts? sollte bei dem Tempo nix verloren gehen

hm leider nicht. Also wenn man extra dafür programmieren muss, dann 
nein, ist nicht im Code. Davon verstehe ich wenig. Ich lese mal nach, 
aber ob ich das hinbekomme?

: Bearbeitet durch User
von Zeitjäger  . (forgoden)


Lesenswert?

Frank K. schrieb:
> Helmut vB schrieb:
>
>> Funktioniert zwar aber wenn ich 16 Controlstates (drehschalter) von FL
>> Studio gleichzeitig an Arduino schicke, so gehen einige Daten verloren
>> bzw sie bekommen falsche Werte. Ich glaube es liegt daran dass Midi nur
>> 4kb/s schafft, während USB auf 480 Mbit/s kommt.
>
> Dann ist das Arduino-Zeugs zu langsam bzw scheiße programmiert. Mach es
> in C neu oder nimm einen Arduino auf ARM-Basis (Achtung 3.3V Pegel statt
> 5V).
>
> fchk

Interrups sind mir leider zu kompliziert.

Also nehm ich das hier ? 
http://www.ebay.de/itm/Neu-Arduino-DUE-2012-R3-Entwicklungsboard-AT91SAM3X8EA-32-Bit-ARM-mit-USB-Kabel-/121329394493?pt=LH_DefaultDomain_77&hash=item1c3fcba33d

Hab leider nur ATMega2560 rumliegen, die haben wohl keine ARM Boards

von Joachim B. (jar)


Lesenswert?

Helmut vB schrieb:
> hm leider nicht. Also wenn man extra dafür programmieren muss, dann
> nein, ist nicht im Code.

2x LIBs etwas einlesen ist eigentlich nicht schwer

http://beaststwo.org/avr-uart/
http://agock.com/software/avr-uart-library/

Helmut vB schrieb:
> aber ob ich das hinbekomme?

mit Willen ja, hab ich auch geschafft

aber von U.Radig müsste fast überall gleich funktionieren

Seriell einstellen, IRQ Vector installieren, Interrupt setzen,

schwierig könnte nur sein die Daten zeitnah zu verarbeiten das der 
Buffer nicht überläuft.

von r_u_d_i (Gast)


Lesenswert?

Helmut vB schrieb:
> Funktioniert zwar aber wenn ich 16 Controlstates (drehschalter) von FL
> Studio gleichzeitig an Arduino schicke, so gehen einige Daten verloren
> bzw sie bekommen falsche Werte.

[code]

byte commandByte;
byte noteByte;
byte velocityByte;

void setup(){
  Serial.begin(31250);
}

void checkMIDI(){
  do{
    if (Serial.available()){

// das ist einfach zu einfach Helmut...
// *************************************
     commandByte = Serial.read();//read first byte
      noteByte = Serial.read();//read next byte
      velocityByte = Serial.read();//read final byte

// das Problem ist, wenn du Command Changes bekommst oder eben
// andere Commands ausser NoteOn 9x , NoteOff 8x
// an x steht dann der kanal vom 1 bis 16 oder 0 bis F
// Da du slider hast, wirst du nur zwei werte haben
// also das CommandByte und den Value
// und schon läufts durcheinander
// du müsstest so wie eine case einbauen
// if (StatusByte==9) || (StatusByte==8) dann NoteOn / NoteOff
// dann sind deine drei Bytes richtig
// andernfalls musst du mal schauhen was Dein MIDI Program sendet
// MIDI-OX mal laufen lassen und die 16 Controlstates vom FL
// aufzeichnen und dir anzeigen lassen
// dann kannst du explizit in der Programmierung darauf reagieren
// lg rudi :)

    }
  }
  while (Serial.available() > 2);//when at least three bytes available
}


void loop(){
  checkMIDI();
}
[/code}}

von r_u_d_i (Gast)


Lesenswert?

Helmut vB schrieb:
> Funktioniert zwar aber wenn ich 16 Controlstates (drehschalter) von FL
> Studio gleichzeitig an Arduino schicke, so gehen einige Daten verloren
> bzw sie bekommen falsche Werte.

1
byte commandByte;
2
byte noteByte;
3
byte velocityByte;
4
5
void setup(){
6
  Serial.begin(31250);
7
}
8
9
void checkMIDI(){
10
  do{
11
    if (Serial.available()){
12
13
// das ist einfach zu einfach Helmut...
14
// *************************************
15
     commandByte = Serial.read();//read first byte
16
      noteByte = Serial.read();//read next byte
17
      velocityByte = Serial.read();//read final byte
18
19
// das Problem ist, wenn du Command Changes bekommst oder eben
20
// andere Commands ausser NoteOn 9x , NoteOff 8x
21
// an x steht dann der kanal vom 1 bis 16 oder 0 bis F
22
// Da du slider hast, wirst du nur zwei werte haben
23
// also das CommandByte und den Value
24
// und schon läufts durcheinander
25
// du müsstest so wie eine case einbauen
26
// if (StatusByte==9) || (StatusByte==8) dann NoteOn / NoteOff
27
// dann sind deine drei Bytes richtig
28
// andernfalls musst du mal schauhen was Dein MIDI Program sendet
29
// MIDI-OX mal laufen lassen und die 16 Controlstates vom FL
30
// aufzeichnen und dir anzeigen lassen
31
// dann kannst du explizit in der Programmierung darauf reagieren
32
// lg rudi :)
33
34
    }
35
  }
36
  while (Serial.available() > 2);//when at least three bytes available
37
}

von Zeitjäger  . (forgoden)


Lesenswert?

ich habe schon viele codes probiert, aber jetzt nochmal von vorne:

Ich habe nochmal LoopBe1 installiert um einen virtuellen MIDI Port 
anzulegen. Dann habe ich midi-ox und FL Studio gestartet: Es ist mir 
gelungen einzelne MIDI-Signale von FL Studio in midi-ox sichtbar zu 
machen.

Sobald ich ich jetzt meine eigene Spuren in FL-Studio abspiele, zeigt 
LoopBe1 ziemlich schnell "Midi feedback error". Sobald ich meine 
Tonspuren langsamer abspiele (von 130 BPM auf 40 BPM) dann kommen diese 
Fehlermeldung nicht mehr. Mir scheint, das ganze Problem liegt nicht an 
Arduino sondern schon Softwaremäßig auf dem PC ???

Dasselbe passiert's auch mit LoopMIDI, eine alternative zu LoopBE

In Fl-Studio ist Synchronization Type auf MIDI Clock geschaltet.

Sind das einfach zuviele Midi-Daten ?

EDIT:

ich habe jetzt LoopBe30 installiert, denn da konnte ich "midi feedback 
error" deaktivieren. Jetzt kann ich meine Tonspuren in midi-ox anzeigen: 
die Werte sind alle korrekt. Was "feedback error" soll weiss ich nicht, 
aber es kommt mir irgendwie parallel vor, den Arduino hatte mit dieser 
Geschwindigkeit auch Probleme.

Also vielleicht doch weitermachen mit interrupts

: Bearbeitet durch User
von Zeitjäger  . (forgoden)


Lesenswert?

Im Moment verwende ich diesen Code:

// Includes&Defines SERVO

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();


#define SERVOMIN9G 175 // this is the 'minimum' pulse length count (out 
of 4096)
#define SERVOMAX9G 640 // this is the 'maximum' pulse length count (out 
of 4096)


// Includes&Defines MIDI

#include <MIDI.h>

#if defined(ARDUINO_SAM_DUE) || defined(USBCON)
    // Print through USB and bench with Hardware serial
    MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
#else
   #include <SoftwareSerial.h>
    SoftwareSerial midiSerial(2,3);
    MIDI_CREATE_INSTANCE(SoftwareSerial, midiSerial, MIDI);
#endif

// 
------------------------------------------------------------------------ 
-----


uint8_t pos[7];


void handleControlChange(byte channel, byte number, byte value)
{


      if ((number >= 1) && (number <= 16))
         pwm.setPWM(number-1, 0, map(value, 0, 127, SERVOMIN9G, 
SERVOMAX9G));
}


// 
------------------------------------------------------------------------ 
-----

void setup()
{


    MIDI.setHandleControlChange(handleControlChange);

    // Initiate MIDI communications, listen to all channels
    MIDI.begin(MIDI_CHANNEL_OMNI);

    while(!Serial);
    Serial.begin(115200);
    Serial.println("Arduino Ready");


    // start setup adafruit
    pwm.begin();
    pwm.setPWMFreq(60);
    // end setup adafruit

}

void loop()
{
    // Call MIDI.read the fastest you can for real-time performance.
    MIDI.read();



    // There is no need to check if there are messages incoming
    // if they are bound to a Callback function.
    // The attached method will be called automatically
    // when the corresponding message has been received.
}

: Bearbeitet durch User
von Zeitjäger  . (forgoden)


Lesenswert?

Dieser Code mit dem ich Probleme hab verwendet SoftwareSerial, damit tx 
und rx freibleiben, die brauch ich für die Consolenausgabe am PC 
(Serial.print)

http://arduino.cc/en/Reference/softwareSerial

"Serial in" ist auf pin 2. Ich weiss nicht ob die interrupts da 
funktionieren würde? In der Anleitung steht nichts von Arduino UNO

: Bearbeitet durch User
von Zeitjäger  . (forgoden)


Lesenswert?

Ich habe für Interrupts diesen Code gefunden der für Midi ist


  cli();//stop interrupts

  //set timer2 interrupt every 128us
  TCCR2A = 0;// set entire TCCR2A register to 0
  TCCR2B = 0;// same for TCCR2B
  TCNT2  = 0;//initialize counter value to 0
  // set compare match register for 7.8khz increments
  OCR2A = 255;// = (16*10^6) / (7812.5*8) - 1 (must be <256)
  // turn on CTC mode
  TCCR2A |= (1 << WGM21);
  // Set CS11 bit for 8 prescaler
  TCCR2B |= (1 << CS11);
  // enable timer compare interrupt
  TIMSK2 |= (1 << OCIE2A);

  sei();


aber der funktioniert nicht wenn ich den Code in setup() einbaue. 
Consolenausgabe zeigt gar nichts mehr an außer "Arduino ready". Der ist 
glaub ich nicht für den Pin 2. Ich weiss nicht was diese ganzen 
Schlüsselwörter wie TCCR2A machen. Ich finde keine übersichtliche 
Anleitung dazu

von Joachim B. (jar)


Lesenswert?

Helmut vB schrieb:
> In der Anleitung steht nichts von Arduino UNO

dazu muss man wissen welcher der ist ->

The Arduino Uno is a microcontroller board based on the ATmega328

dann geht man auf

Helmut vB schrieb:
> pin 2

ich tippe mal digital 2 (es gibt ja auch A2)

und mit pinmapping Arduino uno

http://cdn3.raywenderlich.com/wp-content/uploads/2013/06/atmegaPinMap.jpg

kommt man auf Port D Pin 2

und mit
http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf

Seite 3 auf den PCINT18

der müsste für echte Interrupts entsprechend aktiviert werden bei soft 
UART

was du hier beschreibst ist ja polling per Timer sollte zwar auch 
klappen aber wer weiss,

ein Oszi wäre hilfreich.

von Joachim B. (jar)


Lesenswert?

Linksammler schrieb:
> void setup() {
>   Serial.begin(31250);
> }

mal versucht? bei meinen Arduinos gehts nicht....

von Zeitjäger  . (forgoden)


Lesenswert?

Joachim B. schrieb:
> Helmut vB schrieb:
>> In der Anleitung steht nichts von Arduino UNO
>
> dazu muss man wissen welcher der ist ->
>
> The Arduino Uno is a microcontroller board based on the ATmega328
>
> dann geht man auf
>
> Helmut vB schrieb:
>> pin 2
>
> ich tippe mal digital 2 (es gibt ja auch A2)
>
> und mit pinmapping Arduino uno
>
> http://cdn3.raywenderlich.com/wp-content/uploads/2013/06/atmegaPinMap.jpg
>
> kommt man auf Port D Pin 2
>
> und mit
> 
http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf
>
> Seite 3 auf den PCINT18
>
> der müsste für echte Interrupts entsprechend aktiviert werden bei soft
> UART
>
> was du hier beschreibst ist ja polling per Timer sollte zwar auch
> klappen aber wer weiss,
>
> ein Oszi wäre hilfreich.


ok danke für die Anleitung.
Ja, ich meinte den Pin "digital 2."

"(PCINT18/INT0) PD2"  Bedeutet INT für interrupt?
Muss ich ihn noch aktivieren ?

Hmm, dann ist polling per Timer doch etwas anderes als was du 
beschrieben hast mit IRQ Vector etc .. ? Wo kann ich solche Beispiele 
finden? Wo auf u.radig ?

Ich habe leider nur ein analog Oszi, der wäre wohl nicht geeignet, muss 
ich mir erst einen digitalen Oszi anschaffen.

von Joachim B. (jar)


Lesenswert?

Helmut vB schrieb:
> "(PCINT18/INT0) PD2"  Bedeutet INT für interrupt?

ja

PCINT heisst pin change interrupt
INT0 ist der vorrangigste Interrupt

egal welchen du wählst toggeln auf der Leitung wird dir so nie entgehen, 
muss ur noch einer beim Toggeln der Leitungen oder nicht toggeln nach 
dem Startbit die Bits zeitgenau einsammeln.

Ich weiss nicht, gibts nichts fertiges in soft uart per Interrupt?

von Joachim B. (jar)


Lesenswert?

Joachim B. schrieb:
> Ich weiss nicht, gibts nichts fertiges in soft uart per Interrupt?

evtl. das hier?

Beitrag "Software UART mit FIFO"

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.