Go Down

Topic: Arduino M0 Pro lässt sich nicht programmieren (Read 1 time) previous topic - next topic

Mca723482

Jan 06, 2017, 01:19 pm Last Edit: Jan 06, 2017, 01:28 pm by Mca723482
Moin Leute,

bin neu hier, weil ich den "M0 Pro" nicht programmiert bekomme. Mit dem UNO (Rev. 3) alles kein Problem, aber dann gibt man 50EUR für ein Board aus, das lediglich etwas mehr Speicher als lächerliche 2KB haben soll, und was ist? Nichts geht... (Sorry bin genervt, schwingt vllt. mit)

Aktueller Zustand:
ON-LED: leuchtet konstant
L-LED: pulsiert rot/orange (ist immer an, aber mal heller und mal dunkler)
sontige LEDs sind inaktiv

Boardinformationen:
BN: Arduino M0 Pro (Programming Port)
VID: 03EB
PID: 2111
SN: FFFFFFFFFFFFFFFFFFFF

Angeschlossen ist das Board über den "Programming Port" (s.o.) mit einem USB-Kabel zum MacBook (macOS Sierra 10.12.2).

So, und nun kann ich unter MacOS das Arduino-Proggi starten. Allerdings bekomme ich beim Versuch das Blink-Beispiel hochzuladen folgende Debugmeldung, ohne dass danach eine Änderung (der LED) sichtbar ist:

Code: [Select]
Der Sketch verwendet 9568 Bytes (3%) des Programmspeicherplatzes. Das Maximum sind 262144 Bytes.
Open On-Chip Debugger 0.9.0-gd4b7679 (2015-06-10-19:16)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
debug_level: 0
adapter speed: 500 kHz
adapter_nsrst_delay: 100
cortex_m reset_config sysresetreq
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x81000000 pc: 0x000028f4 msp: 0x20002c00
** Programming Started **
auto erase enabled
wrote 16384 bytes from file /var/folders/8p/zw456n4n51z67_8c2k2dnb3r0000gn/T/arduino_build_376771/Blink.ino.bin in 2.182166s (7.332 KiB/s)
** Programming Finished **
** Verify Started **
verified 9824 bytes in 0.832886s (11.519 KiB/s)
** Verified OK **
** Resetting Target **
shutdown command invoked


Das sieht ja alles ganz gut aus, jedenfalls keine Fehler, also weitergeforscht...

Im Netz bin ich dann über die Existenz eines Bootloader gestolpert, den man angeblich mit Atmel Studio brennen soll. Na gut, sollte ja kein Problem sein. Atmel Studio gegoogelt und siehe da, nur für Windows :(
Also schnell ne virtuelle Maschine erstellt, eine billige Win 7 Pro Version gekauft und installiert.
Nächstes Problem:
Die Treiber werden unter Windows nicht installiert bzw. wird ständig ein USB-Verbundgerät gemeldet mit dem Code 10 (kann. nicht verwendet werden). Ich habe jetzt zig Anleitungen durch aber nichts will wirklich funktionieren.

Somit habe ich gedacht, dass ich den Bootloader einfach mal probiere unter MacOS zu brennen. Dabei erhalte ich allerdings die folgenden Meldungen:

Code: [Select]
Arduino: 1.8.0 (Mac OS X), Board: "Arduino M0 Pro (Programming Port)"

Open On-Chip Debugger 0.9.0-gd4b7679 (2015-06-10-19:16)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
debug_level: 0
adapter speed: 500 kHz
adapter_nsrst_delay: 100
cortex_m reset_config sysresetreq
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x81000000 pc: 0x0000428c msp: 0x20007fd0
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x81000000 pc: 0x000028f4 msp: 0x20002c00
** Programming Started **
auto erase enabled
wrote 32768 bytes from file /Users/mc.../Library/Arduino15/packages/arduino/hardware/samd/1.6.11/bootloaders/mzero/Bootloader_D21_M0_Pro_150427.hex in 4.181629s (7.653 KiB/s)
** Programming Finished **
** Verify Started **
Error: error executing cortex_m crc algorithm
Runtime Error: embedded:startup.tcl:454: ** Verify Failed **
in procedure 'program'
in procedure 'program_error' called at file "embedded:startup.tcl", line 498
at file "embedded:startup.tcl", line 454
Fehler beim Brennen des Bootloaders.

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.



Hat jemand eine Idee, wie ich jetzt weiter vorgehen sollte? Bin echt am verzweifeln gerade.


Vielen Dank fürs Lesen/Kommentieren :)

Doc_Arduino

Hallo,

habe von dem M0 keine Ahnung. Habe aber das hier gefunden.

http://www.arduino.org/learning/tutorials/advanced-guides/how-to-write-the-bootloader-on-arduino-m0-pro-using-arduino-ide

Quote
Burn the Bootloader
Using the Zero Programming Port it is possible to burn the booloader used by the Native USB port. To burn the bootloader follow this procedure:
  • select Tools->Programmer->Atmel EDBG
  • select Tools->Board->Arduino/Genuino Zero (Programming Port)
  • select Tools->Burn Bootloader

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Mca723482

Vielen Dank für die Antwort. Doch leider klappt es so nicht, weder mit dem "Atmel EDBG" als auch mit den anderen gelisteten Programmern.

Was mir gerade aufgefallen ist, ist dass der "Native" USB-Port vom M0 nicht mehr erkannt wird (Weder Mac noch Win). Kann es sein, dass das Board "gebrickt" ist?

Werde weitersuchen und ggf. meine Erfahrungen hier posten...

Doc_Arduino

#3
Jan 06, 2017, 03:43 pm Last Edit: Jan 06, 2017, 03:45 pm by Doc_Arduino
Hallo,

den "Programming Port" haste verwendet nehme ich an? Das Board ist leider nicht weit verbreitet.
Ich bin jetzt mal so frei. Du könntest noch beim user "sschulteworkers" per PN nachfragen, er hat auf jeden Fall einen Zero. Welchen genau weiß ich nicht, aber der Atmel SAMD21 ist ja bei allen drauf. Lösungen dann bitte hier für alle posten.

Edit:
wenn du den Blinksketch mit veränderten Zeiten flashst, dann ändert sich an der LED auch nichts?
Wenn ja, wäre der Bootloader drauf und würde funktionieren.

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Mca723482

Ja, habe den "Programming Port" verwendet.
Jetzt habe ich im übrigen nochmal was probiert:
- anderes Board gewählt (Zero statt M0 Pro),
- Bootloader gebrannt,
- Blink-Sketch geladen
und jetzt ist die LED aus (obwohl sich diese ja sekundenweise ein-/ausschalten sollte). Der Bootloader wurde ohne jegliche Fehlermeldungen gebrannt. Also defekt scheint das Teil nicht zu sein. Allerdings kann ich auch nicht über Serial.println("Test"); (natürlich vorher im Setup initialisiert) sehen, dass da was zurück kommt :(

Ich werde ihn mal fragen, danke für den Tipp!

Mca723482

Habe nun die Debug-LED zum blinken bekommen:

Board -> "Arduino/Genuino Zero (Programming Port),
Port -> "/dev/....usbmodemundso Arduino M0 Pro (Programming Port)",
Programmer -> "Atmel SAM-ICE",
dann den Bootloader gebrannt und den Blink-Sketch hochgeladen. Sogar das Serial.println("Hallo Welt!"); funktioniert jetzt.

Bekomme halt einfach den "richtigen" Bootloader nicht gebrannt.

Folgenden Code habe ich gefunden, der auf dem M0 Pro funktioniert. Leider ist der Code so für mich nicht nutzbar, jedenfalls check ich das mit den Konstanten nicht so wirklich (dass es sich um C handelt, ist mir schon klar), aber seht selbst:

Code: [Select]
/***************************************************************
Arduino M0 Pro pin-out, LQFP48 from schematic
            Schematic       LQFP48
ANALOG IN  Port pin    pin name    pin    Pin functions
A0       PA02        PA02_AIN0    3    PA2/EIC/AIN0
A1       PB08        PB08_AIN2    7       PB8/EIC/AIN2/SCOM4PAD0/TC4
A2       PB09        PB09_AIN3    8    PB9/EIC/AIN3/SCOM4PAD1//TC4
A3       PA04        PA04_AIN4    9    PA4/EIC/REF/AIN4/SCOM0PAD0/TC0
A4       PA05        PA05_AIN5    10    PA5/EIC/AIN5/SCOM0PAD1/TC0
A5       PB02        PB02_AIN10    47    PB2/EIC/AIN10/SCOM5PAD0
DIGITAL PWM
0       PA11        PA11_TCC0-W3    16    PA11/EIC/AIN19/SCOM2PAD3+/TC1
1       PA10        PA10_TCC0-W2    15    PA10/EIC/AIN18/SCOM2PAD2+/TC1
2       PA08        PA08_TCC0-W0    13    PA8/I2C/AIN16/SCOM2PAD0+/TC0
3       PA09        PA09_TCC0-W1    14    PA9/I2C/EIC/AIN17/SCOM2PAD1+/TC0
4       PA14        PA14_TCC0-W4    23    PA14/XIN/EIC/SCOM2PAD2+/TC3
5       PA15        PA15_TCC0-W5    24    PA15/XOUT/EIC/SCOM2PAD3+/TC3
6       PA20        PA20_TCC0-W6    29    PA20/EIC/SCOM5PAD2+
7       PA21        DGI_GPIO1    30    PA21/EIC/SCOM5PAD3+
8       PA06        DGI_GPIO02    11    PA6/EIC/AIN6/SCOM0PAD2/TC1
9       PA07        DGI_GPIO03    12    PA7/EIC/AIN7/SCOM0PAD3/TC1
10       PA18        SS        27    PA18/EIC/SCOM1PAD2+/TC3
11       PA16        MOSI        25    PA16/I2C/EIC/SCOM1PAD0+/TC2
12       PA19        MISO        28    PA19/EIC/SCOM1PAD3+/TC3
13       PA17        SCK        26    PA17/I2C/EIC/SCOM1PAD1+/TC2
Arduino M0 Pro setup:
Generic clk    Clock source
GCLK0            DFLL48M
GCLK1            XOSC32K
GCLK2            OSC32K/OSCULP32K
GCLK3            OSC8M
GCLK4-GCLK8     Not used
Arduino M0 Pro on-board serial on D0 and D1:
Arduino D0/RXD, PA11, SAMD21G pin 20, peripheral C SERCOM0/PAD[3], peripheral D SERCOM2/PAD[3]
Arduino D1/TXD, PA10, SAMD21G pin 19, peripheral C SERCOM0/PAD[2], peripheral D SERCOM2/PAD[2]
USB serial according to M0 Pro schematic:
TXD PB22/EIC/SCOM5PAD2, LQFP48 pin 37, peripheral D
RXD PB23/EIC/SCOM5PAD3, LQFP48 pin 38, peripheral D
***************************************************************/
void setup() {
  // On-board LED, output low
  REG_PORT_DIRSET0 = PORT_PA17;
  REG_PORT_OUTCLR0 = PORT_PA17;
  // Input, Arduino USB-RXD, PB23, peripheral D SERCOM5/PAD[3]
  REG_PORT_DIRCLR1 = PORT_PB23;
  // Output, Arduino USB-TXD, PB22, peripheral D SERCOM5/PAD[2]
  REG_PORT_DIRSET1 = PORT_PB22;
  //Arduino USB-RXD, PB23, peripheral D SERCOM5/PAD[3]
  //Arduino USB-TXD, P22, peripheral D SERCOM5/PAD[2]
  PORT->Group[1].PINCFG[23].bit.PMUXEN = 1;
  PORT->Group[1].PINCFG[22].bit.PMUXEN = 1;
  // In PMUX reg I/O pins are grouped into pairs, PB22 and PB23 belongs to group 22/2 = 11
  PORT->Group[1].PMUX[11].reg = PORT_PMUX_PMUXE_D | PORT_PMUX_PMUXO_D;  // PB22 | PB23
  // Enable the APBC clock for SERCOM5 in the PM
  REG_PM_APBCMASK |= PM_APBCMASK_SERCOM5;
  // Select generic clock for SERCOM5
  // SAMD21 data sheet chap. 11, ADC: APB clock index = 2, GCLK index = 25 core, 19 slow
  // Use GCLK3 OSC8M for SERCOM5 (ID 25)
  // Association between GCLK0-GCLK8 and source (XTAL/oscillator/resonator etc) made in GCLK.GENCTRL register
  REG_GCLK_CLKCTRL = GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(3) | GCLK_CLKCTRL_ID(25);
  // Enable RX and TX, 1 stop bit, 8 data bits
  REG_SERCOM5_USART_CTRLB = SERCOM_USART_CTRLB_RXEN | SERCOM_USART_CTRLB_TXEN;
  // Wait for synchronization
  while (REG_SERCOM5_USART_SYNCBUSY & SERCOM_USART_SYNCBUSY_CTRLB);
  // 38400 bps, see spreadsheet for calculations, SAMD21 data sheet page 435
  //REG_SERCOM5_USART_BAUD = 60503;
  // 9600 bps, see spreadsheet for calculations, SAMD21 data sheet page 435
  REG_SERCOM5_USART_BAUD = 64278;
  // LSb first, RX pad 3, TX pad 2, internal clk, enable SERCOM5, no parity
  REG_SERCOM5_USART_CTRLA = SERCOM_USART_CTRLA_DORD | SERCOM_USART_CTRLA_RXPO(3) |
                            SERCOM_USART_CTRLA_TXPO(1) | SERCOM_USART_CTRLA_MODE_USART_INT_CLK |
                            SERCOM_USART_CTRLA_ENABLE;
  // Wait for synchronization
  while (REG_SERCOM5_USART_SYNCBUSY & SERCOM_USART_SYNCBUSY_ENABLE);
}
void loop() {
  byte b;
  // Wait for incomimg byte
  if (REG_SERCOM5_USART_INTFLAG & SERCOM_USART_INTFLAG_RXC)
  {
    // RXC cleared by reading DATA reg
    b = REG_SERCOM5_USART_DATA;
    // Toggle on-board LED
    REG_PORT_OUTTGL0 = PORT_PA17;
    // Echo received byte
    if (REG_SERCOM5_USART_INTFLAG & SERCOM_USART_INTFLAG_DRE)
    {
      REG_SERCOM5_USART_DATA = b;
    }
  }
}


Quelle:http://www.avrfreaks.net/comment/1595521#comment-1595521

Da kann man ja auch Assembler lernen...

Doc_Arduino

#6
Jan 06, 2017, 07:02 pm Last Edit: Jan 06, 2017, 07:03 pm by Doc_Arduino
Hallo,

du hast also einen Atmel ICE Programmer? Wichtiges Spielzeug.
Mit dem ICE kannste jetzt flashen nur über die IDE mittels USB direkt noch nicht?
Den Blink-Sketch haste mittels ICE übertragen? Nicht mit USB?

Beim UNO und Mega ist es so, dass wenn ich den mittels Programmer flashe, dass dann der Bootloader immer weg ist, weil der gesamte µC quasi überschrieben wird. Ich muss dann auch erst den Bootloader wiederherstellen bevor ich wieder mittels IDE flahsen kann.

Wegen Code kann ich was sagen. Die onboard LED zuckt rum wenn Daten über die serielle reinkommen.
Er verwendet die direkten Port und Pinnamen. Sieht erstmal komplizierter aus als es ist. In der IDE solltest du wie beim UNO usw. normal die aufgedruckten Pinnummer verwenden können. Die Ports und Pins haben nur andere Namen wie beim 8 Bit Atmel, wenn man denn ins Datenblatt schauen würde. Wenn du nicht direkt auf die Ports und Pins zugreifen möchtest, dann sollte das die IDE weiterhin übernehmen. Dafür ist sie schließlich da.

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Mca723482

Nabend,

ich glaube wir sprechen von unterschiedlichen Dingen? (s. Screenshot)

Ich habe ihn dauerhaft an USB angeschlossen. Das, was sich unterscheidet ist halt die gewählte Programmer-Funktion.

Mir ist noch aufgefallen, dass wenn ich den seriellen Monitor schließe, die LED aufhört zu blinken ^^ Naja, werde bzgl. der Port und Pinnummern prüfen ob diese denn richtig adressiert sind, weil ich ja nen anderen Programmer genommen habe.

Ich bring schon alles durcheinander  :smiley-confuse:

Doc_Arduino

#8
Jan 06, 2017, 09:01 pm Last Edit: Jan 06, 2017, 09:02 pm by Doc_Arduino
Hallo,

aha, ich glaube langsam zu verstehen. Mit SAM-ICE wird der onboard Zusatzchip gemeint sein. Also kannst du ja über die IDE normal flashen.

Übrigens der Zero Pro und der M0 Pro sind identisch. Falls du mal Doku vom anderen liest. Nur paar Bezeichnungen sind vielleicht unteschiedlich. Der eine war von arduino.org und der andere von arduino.cc. Das hat sich ja nun erledigt, diese bekloppte Trennung.

Nochmal zu dem Code oben. Er steuert schon die LED 13 an. Er hat extra eine Tabelle eingefügt um das Pin-Mapping darzustellen. Im Code nimmt er den Pin "PA17". Was in der Arduino Durchnummerierung Pin 13 ist. Die linke Spalte ist die Arduino Nummerrierung wie die Boardbeschriftung. Im Schaltplan geht Pin PA17 zu einer gelben LED. Du kannst also auch digitalWrite(13, High) schreiben. Kommt auf das selbe raus. Er wird das sicherlich ohne IDE programmiert haben. Deswegen die direkte Portnamen Verwendung.


Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Mca723482

Okay, einiges wird mir langsam klarer :)
Aufgrund der Gleichheit von Zero Pro und M0 Pro, kann ich überhaupt dieses Board in der IDE nutzen ;)

Was mich nun noch wundert ist, dass ich als Programmer "Atmel SAM-ICE" und nicht "Atmel EDBG" nutzen konnte. Trotzdem habe ich nun den EDBG gewählt und es einfach öfter mal mit dem brennen des Bootloaders/Upload des Sketches probiert und jetzt läuft es (mit obigem Script)!


Also für alle M0 Pro Verzweifelten eine Zusammenfassung:

WICHTIG: Der M0 Pro muss am rechten, den "Programming Port" angeschlossen werden! (Das ist der neben dem DC-Anschluss)

Es wird nur Arduino Studio benötigt (eine Installation von Atmel Studio ist scheinbar nicht nötig).

Folgende Konfiguration lief schlussendlich bei mir (Mac OS, Windows müsste abgesehen von den Treibern ebenso funktionieren):

Ggf. vorher per "Boardverwalter" die SAMD-Bibliothek installieren
Werkzeuge -> BoardArduino/Genuino Zero (Programming Port)
Werkzeuge -> ProgrammerAtmel EDBG


Dann den Bootloader brennen (kann einige Versuche in Anspruch nehmen).

Folgender Code ist ganz gut zum testen der Funktion:
Code: [Select]
/***************************************************************
Arduino M0 Pro pin-out, LQFP48 from schematic
            Schematic       LQFP48
ANALOG IN  Port pin    pin name    pin    Pin functions
A0       PA02        PA02_AIN0    3    PA2/EIC/AIN0
A1       PB08        PB08_AIN2    7       PB8/EIC/AIN2/SCOM4PAD0/TC4
A2       PB09        PB09_AIN3    8    PB9/EIC/AIN3/SCOM4PAD1//TC4
A3       PA04        PA04_AIN4    9    PA4/EIC/REF/AIN4/SCOM0PAD0/TC0
A4       PA05        PA05_AIN5    10    PA5/EIC/AIN5/SCOM0PAD1/TC0
A5       PB02        PB02_AIN10    47    PB2/EIC/AIN10/SCOM5PAD0
DIGITAL PWM
0       PA11        PA11_TCC0-W3    16    PA11/EIC/AIN19/SCOM2PAD3+/TC1
1       PA10        PA10_TCC0-W2    15    PA10/EIC/AIN18/SCOM2PAD2+/TC1
2       PA08        PA08_TCC0-W0    13    PA8/I2C/AIN16/SCOM2PAD0+/TC0
3       PA09        PA09_TCC0-W1    14    PA9/I2C/EIC/AIN17/SCOM2PAD1+/TC0
4       PA14        PA14_TCC0-W4    23    PA14/XIN/EIC/SCOM2PAD2+/TC3
5       PA15        PA15_TCC0-W5    24    PA15/XOUT/EIC/SCOM2PAD3+/TC3
6       PA20        PA20_TCC0-W6    29    PA20/EIC/SCOM5PAD2+
7       PA21        DGI_GPIO1    30    PA21/EIC/SCOM5PAD3+
8       PA06        DGI_GPIO02    11    PA6/EIC/AIN6/SCOM0PAD2/TC1
9       PA07        DGI_GPIO03    12    PA7/EIC/AIN7/SCOM0PAD3/TC1
10       PA18        SS        27    PA18/EIC/SCOM1PAD2+/TC3
11       PA16        MOSI        25    PA16/I2C/EIC/SCOM1PAD0+/TC2
12       PA19        MISO        28    PA19/EIC/SCOM1PAD3+/TC3
13       PA17        SCK        26    PA17/I2C/EIC/SCOM1PAD1+/TC2
Arduino M0 Pro setup:
Generic clk    Clock source
GCLK0            DFLL48M
GCLK1            XOSC32K
GCLK2            OSC32K/OSCULP32K
GCLK3            OSC8M
GCLK4-GCLK8     Not used
Arduino M0 Pro on-board serial on D0 and D1:
Arduino D0/RXD, PA11, SAMD21G pin 20, peripheral C SERCOM0/PAD[3], peripheral D SERCOM2/PAD[3]
Arduino D1/TXD, PA10, SAMD21G pin 19, peripheral C SERCOM0/PAD[2], peripheral D SERCOM2/PAD[2]
USB serial according to M0 Pro schematic:
TXD PB22/EIC/SCOM5PAD2, LQFP48 pin 37, peripheral D
RXD PB23/EIC/SCOM5PAD3, LQFP48 pin 38, peripheral D
***************************************************************/
void setup() {
  // On-board LED, output low
  REG_PORT_DIRSET0 = PORT_PA17;
  REG_PORT_OUTCLR0 = PORT_PA17;
  // Input, Arduino USB-RXD, PB23, peripheral D SERCOM5/PAD[3]
  REG_PORT_DIRCLR1 = PORT_PB23;
  // Output, Arduino USB-TXD, PB22, peripheral D SERCOM5/PAD[2]
  REG_PORT_DIRSET1 = PORT_PB22;
  //Arduino USB-RXD, PB23, peripheral D SERCOM5/PAD[3]
  //Arduino USB-TXD, P22, peripheral D SERCOM5/PAD[2]
  PORT->Group[1].PINCFG[23].bit.PMUXEN = 1;
  PORT->Group[1].PINCFG[22].bit.PMUXEN = 1;
  // In PMUX reg I/O pins are grouped into pairs, PB22 and PB23 belongs to group 22/2 = 11
  PORT->Group[1].PMUX[11].reg = PORT_PMUX_PMUXE_D | PORT_PMUX_PMUXO_D;  // PB22 | PB23
  // Enable the APBC clock for SERCOM5 in the PM
  REG_PM_APBCMASK |= PM_APBCMASK_SERCOM5;
  // Select generic clock for SERCOM5
  // SAMD21 data sheet chap. 11, ADC: APB clock index = 2, GCLK index = 25 core, 19 slow
  // Use GCLK3 OSC8M for SERCOM5 (ID 25)
  // Association between GCLK0-GCLK8 and source (XTAL/oscillator/resonator etc) made in GCLK.GENCTRL register
  REG_GCLK_CLKCTRL = GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(3) | GCLK_CLKCTRL_ID(25);
  // Enable RX and TX, 1 stop bit, 8 data bits
  REG_SERCOM5_USART_CTRLB = SERCOM_USART_CTRLB_RXEN | SERCOM_USART_CTRLB_TXEN;
  // Wait for synchronization
  while (REG_SERCOM5_USART_SYNCBUSY & SERCOM_USART_SYNCBUSY_CTRLB);
  // 38400 bps, see spreadsheet for calculations, SAMD21 data sheet page 435
  //REG_SERCOM5_USART_BAUD = 60503;
  // 9600 bps, see spreadsheet for calculations, SAMD21 data sheet page 435
  REG_SERCOM5_USART_BAUD = 64278;
  // LSb first, RX pad 3, TX pad 2, internal clk, enable SERCOM5, no parity
  REG_SERCOM5_USART_CTRLA = SERCOM_USART_CTRLA_DORD | SERCOM_USART_CTRLA_RXPO(3) |
                            SERCOM_USART_CTRLA_TXPO(1) | SERCOM_USART_CTRLA_MODE_USART_INT_CLK |
                            SERCOM_USART_CTRLA_ENABLE;
  // Wait for synchronization
  while (REG_SERCOM5_USART_SYNCBUSY & SERCOM_USART_SYNCBUSY_ENABLE);
  Serial.begin(9600);
}
void loop() {
  byte b;
  Serial.println("Test");
  delay(1000);
  // Wait for incomimg byte
  if (REG_SERCOM5_USART_INTFLAG & SERCOM_USART_INTFLAG_RXC)
  {
    // RXC cleared by reading DATA reg
    b = REG_SERCOM5_USART_DATA;
    // Toggle on-board LED
    REG_PORT_OUTTGL0 = PORT_PA17;
    // Echo received byte
    if (REG_SERCOM5_USART_INTFLAG & SERCOM_USART_INTFLAG_DRE)
    {
      REG_SERCOM5_USART_DATA = b;
    }
  }
}

(Code und Kommentare ursprünglich von tomaslarsson AVR-Freaks)

Vielen Dank für die schnelle Unterstützung und hoffentlich hilft es anderen :D

Doc_Arduino

Hallo,

freut mich das es nun klappt wie gewünscht. Mit "Arduino Studio" meinst du sicherlich die "Arduino IDE". Ich schreibe das nur damit vielleicht andere Neulinge nicht durcheinander kommen. Alles gut.  ;)  Viel Spass mit Arduino ...
 
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up