mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino Zero mit ArduinoStart Konfigurieren


Autor: chris_ (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Atmel hat zur Konfiguration seiner ARM-Prozessoren das Online-Tool 
AtmelSTART enwickelt:

http://start.atmel.com/

Damit kann man kann man die Peripherie der ARM-Prozessoren konfigurieren 
und ein paar vorgefertigte Bibliotheksfunktionen einbinden.

Wenn man statt der Arduino Library lieber die Atmel-Funktionen benutzen 
will, kann man das am besten mit AtmelStart machen.

Ich stelle hier mal die Konfiguration des LED-Pins und der 
Delay-Funktionen für den Arduino-Zero zur Verfügung. Diese Konfiguration 
lässt sich wieder in die AtmelSTART Weboberfläche importieren und 
erweitern.

Der Code für das Blink-Programm würde dann so aussehen:
#include "atmel_start.h"
#include "atmel_start_pins.h"

int main(void)
{
  system_init();

  while(1) 
  {
    gpio_set_pin_level(LED,  false);
    delay_ms(1000);
    gpio_set_pin_level(LED,  true);
    delay_ms(1000);
  }
}

Autor: chris_ (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die Konfiguration für die Spannungsmessung am ADC-Pin0 und die 
Ausgabe auf die serielle Schnittstelle mit 9600 Baud.

Autor: chris_ (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die Konfiguration.

Autor: chris_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier habe ich mal den passenden Code dazu geschrieben.
Im Vergleich zu den Orginal Arduino kann der optisch aber keinen Preis 
gewinnen. Ich finde die Arduino funktionen im Vergleich dazu gar nicht 
so schlecht.
#include "atmel_start.h"
#include "atmel_start_pins.h"
#include <stdlib.h>

struct io_descriptor *Io;

void init()
{
  adc_sync_enable(&ADC_0);
  usart_sync_get_io_descriptor(&USART_0, &Io);
  usart_sync_enable(&USART_0);
}
void toggleLed()
{
  static uint8_t flag=0;
  flag^=1;
  gpio_set_pin_level(LED,  flag);
}
#define NUMBEROFDIGITS 4
#define NUMBERBASE 10

int main(void)
{
  uint8_t   asciiBuffer[NUMBEROFDIGITS+1]={0};
  uint8_t    adcByteBuffer[2];
  uint16_t  wert;
  
  system_init();
  init();
  io_write(Io, (uint8_t *)"serial ADC example", 18);
  io_write(Io, (uint8_t *)"\n\r", 2);

  while(1) 
  {
    delay_ms(100);    
    adc_sync_read(&ADC_0, adcByteBuffer, 2);
    wert = adcByteBuffer[0]+((uint16_t)adcByteBuffer[1]<<8);
    itoa( wert, (char*)asciiBuffer, NUMBERBASE );
    io_write(Io, asciiBuffer, NUMBEROFDIGITS);  
    io_write(Io, (uint8_t *)"\n\r", 2);
    toggleLed();
  }
}

Autor: chris_ (Gast)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Bei AtmelSTART gibt es sogennante "Middleware" Module.
Mit einem davon lässt sich printf auf die UART umleiten. Damit wird der 
Code etwas übersichtlicher.
#include "atmel_start.h"
#include "atmel_start_pins.h"
#include "stdio_start.h"

void init()
{
  STDIO_REDIRECT_0_init();
  adc_sync_enable(&ADC_0);
}

uint16_t readAdc()
{
  uint8_t   adcByteBuffer[2];
  uint16_t  wert;
  adc_sync_read(&ADC_0, adcByteBuffer, 2);
  wert = adcByteBuffer[0]+((uint16_t)adcByteBuffer[1]<<8);
  return wert;
}

int main(void)
{
  system_init();
  init();
  
  printf("Arduino Zero Read ADC Example \n\r");

  while(1) 
  {

    printf("%d\n\r",readAdc());
    delay_ms(100);
  }
}


Autor: chris_ (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bei den vorigen Konfigurationen war der CPU-Takt auf nur 8Mhz 
eingestellt.
Hier die Konfiguration für einen schnelleren Takt.

Der folgende Pin-Toggle Code ergibt damit
#include "atmel_start.h"
#include "atmel_start_pins.h"
#include "stdio_start.h"

int main(void)
{
  system_init();

  while(1)
  {
    gpio_set_pin_level(LED,  0);
    gpio_set_pin_level(LED,  1);
  }
}

ergibt

Tlow: 628us
Thigh: 832us

Autor: Max M. (arrowmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Chris,
I can't get the native USB to work, have you tried this in Atmel Start?

Autor: Gert van Biljon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Max!

Attaches an Atmel studio project that I set up for the Adafruit Feather 
M0 that uses the same AtSamD21 chip as in the Arduino Zero. With this I 
have managed to get the USB port running as a virtual com port. For the 
USB you have to set the speed to 48MHz

Plenty comments in the main.c file

Hope it helps

Gert van Biljon

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.