Arduino Every Serial1 Problem

Hallo Ihr lieben,

komme iMo nicht weiter und hoffe Ihr könnt mir helfen. Ich habe jetzt die Hardware für

mein Midi Projekt soweit fertig und auch die IDE programmiert Problemlos den Nano Every (habe 2 Stück vom gleichen Typ - original Arduino, kein Clone) Die Features von
dem Bord sind Fantastisch. Relativ viel Flash und SRAM und 4 Seriale Ports. iMO benötige ich nur den USB und den Serial1 Port mit meiner Schaltung kann der USB Stecker dran bleiben, wenn nach dem Flash wieder Serial1 benutzt werden soll. Ich nutze dabei den Pin 13, da der während des Programmierens auf LOW ist und in meinem Programm auf HIGH gelgt wird. Ein kleiner Transistor schaltet dann zwischen USB und Serial1 um, das klappt mit einem normalen Nano hervorragend.

Bei dem Every zeigt zwar die LED für den Serialen Port an das etwas gesendet wird und auch der Seriale Monitor zeigt etwas an. Aber was der anzeigt deutet auf eine falsche Bautrate hin. Die Zeichen sind nämlich falsch und anders als gesendet. Beim Sender und auch bei dem Monitor habe ich die gleiche Bautrate eingestellt 38400. Aber egal was eingestellt wird, das Ergebniss ist immer gleich.

Ich habe das Programm bis auf das minimalste reduziert um einfach zunächst mal die Serial1 hinzubekommen. Alles andere funktioniert ja auch einwandfrei. Habe jedenfalls noch nichts anderes festgestellt.

Das wo drauf ich mir absolut keinen Reim machen kann ist, das auf dem PIN 1 TxD nichts rauskommt wenn etwas gesendet wird.

Habe sogar mal Serial1.beginn weggelassen und versucht die Schnittstell zu Fuß zu programmieren. Aber das hat es auch nicht gebracht.

Habe das Bord aus der Schalung rausgenommen um jeden Fehler auszuschießen . aber hat nichts gebracht, Der Pin ist aber nicht tot man kann mit Pinmot auf OUTPUT gehen und eine LED an schalten.

Wer kann mir da weiter helfen? Bei Google scheint dies Phänomen niemand zu kennen.

<#ifndef Serial1_Nano_Every_
#define Serial1_Nano_Every_
//axeptiert hier kein define - muss in *.h datei sein !
//#define EA_DIP204_4_ // display typ einschalten ...
//#define W204B_NLW_
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek einbinden

LiquidCrystal_I2C lcd(0x27,20,4); // 4 zeiliges I2C-LCD mit 20 Zeichen pro Zeile ...

//#include <avr/pgmspace.h>
#include <Arduino.h>
#include <EEPROM.h>
#include <avr/io.h>
#include <avr/interrupt.h>

#include "defauls.h"
#include "proto_.h"
#include "timers_.h"
#include "funktion_.h"

void setup()
{

    lcd.init(); //Im Setup wird der LCD gestartet 
    lcd.leftToRight(); 
    //lcd.noBacklight(); // schaltet die Beleuchtung aus). 
    lcd.backlight(); //Hintergrundbeleuchtung einschalten 
    //lcd.setContrast(0);
    //lcd.display();

    lcd.clear();
    lcd.setCursor(0,0);// das erste Zeichen in der ersten Zeile. 
    
        pinMode(pD2_,OUTPUT); // chord LEDs ...
        pinMode(pD3_,OUTPUT);
        pinMode(pD4_,OUTPUT);

        pinMode(pAktionLed_,OUTPUT); // Aktion Led...
 
        fChord_Hold_1_ = ON; // 68
        tCount_ = 8; //2// tasten entpreller tims ...

// die channels f r D110 ...
//        chrd_chan_ = 4; //  akkord chanel ...
//        bass_chan_ = 4; // bass chanel ...
//        ctrl_chan_ = 4; // controler chanel ..
//        ProgChange_(207,7); // nur programm change .. auf chan 16 ...

//***********  das was gerade eingestellt ist ...

        ctrl_chan_ = EEPROM.read(0); // conroler chanel ...
        chrd_chan_ = EEPROM.read(1); // chord chanel...
        bass_chan_ = EEPROM.read(2); //  bass chanel...
        chrd_trsp_ = EEPROM.read(3); // transpose der akorde...
        bass_trsp_ = EEPROM.read(4); // bass transpose...
        chrd_velo_ = EEPROM.read(5); // chord velociti...
        prog_num_ = EEPROM.read(6); //  aktuelle sound programm nummer...

//************** ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^**************************

// die channels f r D110 ...
/*
        bass_trsp_ = 6;
        chrd_trsp_ = 44;
        chrd_chan_ = 2; //  akkord chanel ...
        bass_chan_ = 1; // bass chanel ...
        ctrl_chan_ = 1; // controler chanel ..
        chrd_velo_ = 71; // akkord velo/relase..
 
     //   ProgChange_(207,2); // nur programm change .. auf chan 1 ...
*/
//**************^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^******

        delay(500);

        ChrdNum_ = 0;
        StatNoteOn_ = 144;
        StatNoteOff_= 128;

        DynVelo_ = 127; // velocyte der dyntaste
        DynRela_ = 127; //  relase fuer dyntaste 

// ********** play tasten abfrage ... ****************

        pinMode(BLOCK_1_,OUTPUT);
        pinMode(BLOCK_2_,OUTPUT);
        pinMode(BLOCK_3_,OUTPUT);
        pinMode(BLOCK_4_,OUTPUT);
        pinMode(BLOCK_5_,OUTPUT);

        pinMode(B_TASTE_1_,INPUT_PULLUP);
        pinMode(B_TASTE_2_,INPUT_PULLUP);
        pinMode(B_TASTE_3_,INPUT_PULLUP);
        pinMode(B_TASTE_4_,INPUT_PULLUP);
        pinMode(B_TASTE_5_,INPUT_PULLUP);

        VolUpDw_ = 2; // volume 10 ...
        FaderTime_ = millis()+100;
        
        AktionLed_Onf_ = 0;
        i_=0;
        for (i_ = 0; i_ < 10; i_++)  // zeige reset an ...
        {     
        cpl_AktionLed_(AktionLed_Onf_); // aktion led aus ...
        delay(50);
        cpl_AktionLed_(0); // aktion led ...
        delay(50);
        }

        pinMode(pLED_,OUTPUT); // seriel aus schalter ...
        digitalWrite(pLED_,HIGH); // midi out on/off !

        Serial.begin(38400); // serial monitor ...

        Serial1.begin(38400); // midi sequenz ....
/*
/USART1 konfigurieren 
USART1.BAUD = 417; // Baudrate setzen (z.B. 38400 bei 16MHz)
USART1.CTRLB = USART_RXEN_bm | USART_TXEN_bm; // RX/TX aktivieren
USART1.CTRLC = USART_CHSIZE_8BIT_gc | USART_PMODE_DISABLED_gc | USART_SBMODE_1BIT_gc;
*/
        delay(250);

        line_Prnt_("Serial1_Nano_Every"); // text zeile ins display ...

        delay(250);

        midi_dout_(255); // midi reset ..

   //     delay(250);

    //    Serial.write(0xCF); // fest auf chan 16 ...
     //   Serial.write(prog_num_); // display programm change...

        delay(2000);

        parm_print_(0); // play parameter printen ...

        ProgChange_(192,prog_num_); // nur programm change .. auf chan 1 ...

    //    init_ISR_(0); // interrupt timer init ...

}

void loop()
{

//*************** was testen ... *****************************************

        if (millis() > PrintTime_) // allerlei prrints....
        {
        PrintTime_ =  millis()+1000;

  //      cpl_AktionLed_(AktionLed_Onf_); // aktion led aus ...

        midi_Event_(144,70,64); // ganzer befehl out ...
        midi_Event_(144,70,0); // ganzer befehl out ...
/*
        lcd.setCursor(0,1);// das erste Zeichen in der ersten Zeile. 
        lcd.print("ISR: "); 
        lcd.print(zTest_); 
        lcd.print(" "); 
*/
        digitalWrite(pAktionLed_,!digitalRead(pAktionLed_)); // midi out on/off !

         zTest_=0;
        }

//**************** Aktion LED Timer ... ******************************************

      if (AktionLed_Onf_ == ON)
            if (millis() > tLED_CPL_TIME_) // blink time ...
                          cpl_AktionLed_(AktionLed_Onf_); // aktion led aus ...

//*********************** test prints .... ****************************************
return;
        if (nTaste_ > 0 and nTaste_ < 12)
        {
               tFunktion_(nTaste_); // funktionen ...
  
       nTaste_ = 0;
      }

//*********************** fader in/out ... ***************************************

  //      VolUpDw_ = FaderInOut_(VolUpDw_);

//*********************************************************************************

      if (pChrdPrnt_ == ON)
      {  

        pChrdPrnt_ = OFF;

  //      midi_Event_(128,ChordTst_,zTaste_); // ganzer befehl out ...

   //     zTaste_=0;; // tasten mengen zaehler ...

//        return;
//      }
        chrdsPrnt_(ChrdNum_);  

        lcd.setCursor(0,2);// das erste Zeichen in der ersten Zeile. 
        lcd.print("ChrdNum: "); 

        lcd.print(ChrdNum_);
        lcd.print(" "); 
 //       lcd.print(Test_2++);
//        lcd.print("< ");

        lcd.setCursor(0,3);// das erste Zeichen in der ersten Zeile. 
        lcd.print("ChordTst_:"); 
        lcd.print(ChordTst_); 
        lcd.print(" "); 

      }
     
// play die noten durch die tasten ....
      if (nTaste_ == 64)    
      {
             midi_Event_(144,64,0); // ganzer befehl out ...

       nTaste_ = 0;
      }

       if (nTaste_ == 24)    
      {
             midi_Event_(144,24,0); // ganzer befehl out ...

       nTaste_ = 0;
      }
 
      if (nTaste_ == 44)    
      {
             midi_Event_(144,44,0); // ganzer befehl out ...

       nTaste_ = 0;
      }


      if (nTaste_ > 0 
                and nTaste_ != 44 and nTaste_ != 24)//and nTaste_ < 12) 
      {


            midi_Event_(144,nTaste_,7); // ganzer befehl out ...

  nTaste_ = 0;


return;

        lcd.setCursor(0,1);// das erste Zeichen in der ersten Zeile. 
        lcd.print("nTaste: "); 
        lcd.print(nTaste_);
        lcd.print("< ");
        lcd.print(Test_1++);
        lcd.print("< ");
    
    }

 }// loop ...


#endif>

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Wie ist der kleine Transistor geschaltet??
Bitte Schaltbild.
Grüße Uwe

Das kann ich Dir geben - aber wie gesagt - ich habe das Bord aus der Schaltung heraus genommen und mit dem normalen Nano funzt das auch.

D13 >— R270 —> B — (BC317)

TxD >—-> E—(BC317) — C— (BC317)→ MidiOut

Das geschalte brauchst du doch gar nicht, der Every hat 2 Serielle Schnittstellen, Serial hängt an USB und Serial1 ist frei. Serial1 mit benötigter Baudrate einschalten und richtig anschließen.

Der Nano hat nur eine Serial Schnittstelle.

Sorry Uwe du warst nicht gemeint, war für bentuck gedacht.

Vier!

Hallo,

ich verstehe auch nicht was du da mit dem Transistor schalten tust und warum.
Zudem eine Serielle keine Plug and Play Schnittstelle ist.
Zusätzlich kann ich dir noch das das Board Package von MCUdude empfehlen. Man hat insgesamt viel mehr Möglichkeiten.

Hast Du mein Post auch richtig gelesen? Ich benötige das genauso wie ich es gemacht habe. Ohne den Transistor der den TxD Pin während Flash frei gibt, muss der Stecker immer abgezogen werden, wegen der Midischaltung.

Da sind nur minimale Abmessungen für meine Schaltung. Das Every Bord hat die gleichen Pins wie normaler Nano.

Hallo,

dein Eingangstext ist nicht komplett klar. Wieviele Serielle benötigst du insgesamt? Ohne Umschaltgedanken.

Hast du an Serial1 aktuell zwei Endgeräte angeklemmt, zwischen denen du umschalten möchtest? Weil zwischen Serial und Serial1 muss nichts umgeschalten werden. Die Schnittstellen funktionieren schon getrennt jeweils für sich.

Vielleicht nochmal neu mit kleiner Skizze erklären was wie wo alles angeklemmt ist.

Ich habe das Bord aus der Schaltung heraus genommen um jeden Fehler Hardware mäßig aus zuschließen. Das Bord hängt nur an USB. An Pin 1 TxD und an GND habe ich mein

Messgerät um Hz zumessen. Wenn ich einen normalen Nano dran hänge bewegst sich was, wenn etwas gesendet wird. Habe da im Programm jede Sekunde 6 Bytes die gesendet werden. Das ist nur zum Test und hat weiter keine Bedeutung, Mit normalen Nano tut sich etwas am Display vom Messgerät. Aber bei dem Every nichts. Aber während dessen blitzt die Led für TxD auf und auch der Seriale Monitor zeigt leben. Jedoch sind die Empfangsdaten alle falsch.

Verstehe ich auch nicht!
Und ja ich kann lesen!

Werden nicht Tx0 und Rx0 für den upload verwendet?
Was soll der Transistor da an Tx1 retten?

Deshalb habe ich mir ja den Every ausgesucht. Ursprünglich war nur ein normaler Nano

gedacht. Aber ich brauche mehr SRAM im Wesentlichen. ich denke bei vier Serielen Ports muss etwas mehr eingestellt werden als wie bei einem normalen Nano, der ja nur eine Serielle hat. Deshalb ja auch das Umschalten. mit angeschlossener Schaltung würde weder Midi noch USB richtig funzen.

Du meinst der Ausgang wird während des Hochladens hochohmig?
Da müßte ein Widerstand gegen Masse oder Versorgungsspannung helfen.

Grüße Uwe

Hi Combi,

da soll doch gar nichts gerettet werden. Es geht einfach nur es einfacher beim flashen zu haben. Wenn Du an den TxD (RxD benötige ich nicht der ist frei) eine Schaltung hast und dann auch USB zum Flashen funzt die Ausgabe an dem PIN 1 TxD nicht. Die Seirielle Schnittstelle kann nur mit einer Schaltung verbunden sein.

Noch mal:
USB hat mit Serial1 nichts am Hut.

das mag beim Alten Nano so sein.
Aber beim Every ist UART0 mit USB verbunden.
Und UART1 willst du für dein MIDI nutzen.

Was soll sich da ins Gehege kommen?

Habe mir mit dem Transistor geholfen und es funzt. Was nicht funzt, ist der Pin 1 am Every iMo noch nicht. Aber Aufgeben ist nicht meine Sache!

Wieso mußt Du eine Seielle Schnittstelle Doppelt verwenden wenn Du 3 andere noch hast?

Grüße Uwe

Na gut dann ist das bei dem Every anders. Habe aber wie gesagt das Board ohne Beschaltung auf dem Tisch liegen - leider konnte ich dem Pin noch nichts entlocken.

Weil ich jetzt die Schaltung für den normalen Nano fertig habe und ich da nicht mehr dran ändern werde.

Vielleicht hast du den Pin mit deiner geheimen Transistorschaltung schon getötet.