ATxMega Stick - First Steps
Der ATxMega Stick ist eine kleine Platine (27 mm x 80 mm) mit ATxmega128A3, USB-Device-Anschluss und Micro-SD-Kartenslot.
Eigenschaften
- Mikrocontroller ATxmega128A3
- USB-Baustein MCP2200
- Mini-USB-B-Device-Anschluss
- Micro-SD-Kartenslot
- Programmierung via PDI (z.B. AVRISP mkII)
- Reset-Taster
- 2 LEDs zur Signalisierung von USB-Transfers
- 2 frei verwendbare LEDs
- On-board-Spannungsregler (3.3 V, Versorgung über USB oder extern)
- 6 x 8-Bit-Ports auf Stiftleisten verfügbar, davon ist ein Port belegt (2-mal LED, RX und TX zum USB-Baustein, SPI zum Micro-SD-Kartenslot)
Hinweise zum Aufbau
Anmerkungen zum Schaltplan vom 15.09.2011 23:08:38
- Seite 1: C1 hat 22µF
- Seite 1: C14, C15 haben 3.3µF
- Seite 2: Verbindungsbezeichnung bei "I/Os" µC Pin 27 und JP4 Pin 4 und bei "LEDs" muss LED3 lauten statt LED1
- Seite 2: Verbindungsbezeichnung bei "I/Os" µC Pin 26 und JP4 Pin 3 und bei "LEDs" muss LED4 lauten statt LED2
Stromversorgung
Auf JP1 muss ein Jumper bestückt werden:
- zum Platinenrand hin für Versorgung über USB
- zur Platinenmitte hin für externe Versorgung
Hinweis:
Der Jumper sollte unbedingt gesteckt sein, wenn USB verwendet wird. Steht dieser auf externer Versorung, muss diese dabei auch anliegen. Wird der MCP2200 per USB versorgt, ohne dass am ATxMega Versorgungsspannung anliegt, kommt es über die UART-Leitung zu einem Stromfluss über das entsprechende I/O-Pin des ATxMega, da dieser sich ohne Spannung intern in einem undefinierten Zustand befindet. Auf VCC liegen dann etwa 2.8 V an. Durch den Stromfluss erwärmt sich der MCP2200 deutlich, was zur eventuellen Beschädigung des ICs führen kann.
Löten des SD-Halters
- Zuerst muss man den Halten ausrichen und einen Punkt am Rand festlöten.
- Dann muss man alle 4 Ecken festlöten
- Jetzt kann man mit der Lötspitze oben durch die Aussparungen und führt den Zinn durch die Öffnung für die SD-Karte.
- So lötet man dann alle 8 Kontakte.
- Lötbrücken sind hier nicht schön, lässt sich aber dann noch mit Entlötlitze entfernen (Entlötlitze statt Zinn durch die Öffnung führen)
Betrieb unter Linux
Damit man als User auf den Stick zugreifen kann, empfiehlt es sich, einen UDEV-Eintrag für den Stick anzulegen, z.B. neue Datei /etc/udev/rules.d/15_USB_uC.rules anlegen:
ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="00df", GROUP="MeineGruppe", MODE="0660", SYMLINK+="ATxMegaStick%n"
Für "MeineGruppe" einen geeigneten Werte verwenden, d.h. eine Gruppe, der man selbst angehört.
Jetzt kann man nach dem Anschließen folgende Links sehen:
ls -l /dev/ATxMegaStick* lrwxrwxrwx 1 root root 7 2011-10-17 00:04 /dev/ATxMegaStick0 -> ttyACM0 lrwxrwxrwx 1 root root 11 2011-10-17 00:04 /dev/ATxMegaStick1 -> usb/hiddev1 lrwxrwxrwx 1 root root 7 2011-10-17 00:04 /dev/ATxMegaStick2 -> hidraw2 lrwxrwxrwx 1 root root 15 2011-10-17 00:04 /dev/ATxMegaStick3 -> bus/usb/001/042
Und die Zugriffrechte sehen so aus:
ls -lL /dev/ATxMegaStick* crw-rw---- 1 root dialout 166, 0 2011-10-17 00:04 /dev/ATxMegaStick0 crw-rw---- 1 root mgr 180, 97 2011-10-17 00:04 /dev/ATxMegaStick1 crw-rw---- 1 root mgr 251, 2 2011-10-17 00:04 /dev/ATxMegaStick2 crw-rw-r-- 1 root mgr 189, 41 2011-10-17 00:04 /dev/ATxMegaStick3
Fuses
Default-Werte der Fuses:
signature: Signatur
avrdude -Pusb -cavrispmkII -px128a3 -q -q -U signature:r:-:h 0x1e,0x97,0x42
- 0x1e9742 = ATxmega128A3
fuse0: JTAG User ID
avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse0:r:-:h 0xff
- JTAG User ID (JTAGUID) = 0xff (das Manual sagt: 0x00)
fuse1: Watchdog Configuration
avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse1:r:-:h 0x0
- Watchdog Window Timeout Period (WDWPER) = n.a.
- Watchdog Timeout Period (WDPER) = n.a.
fuse2: Reset Configuration
avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse2:r:-:h 0xff
- Reset Vector (BOOTRST) = Application Reset
- BOD operation in power-down mode (BODPD) = BOD disabled
fuse4: Start-up Configuration
avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse4:r:-:h 0xfe
- External Reset Disable (RSTDISBL) = no
- Start-up time (STARTUPTIME) = 0
- Watchdog Timer lock (WDLOCK) = no
- JTAG enabled (JTAGEN) = yes
Bei Bedarf ändern:
avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse4:w:0xff:m avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse4:r:-:h 0xff
- JTAG enabled (JTAGEN) = no
fuse5: BODACT, BODLEVEL, EESAVE
avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse5:r:-:h 0xff
- BOD operation in active mode (BODACT) = BOD disabled
- EEPROM memory is preserved through the Chip Erase (EESAVE) = no
- BOD voltage level (BODLEVEL) = 1.6V
Bei Bedarf ändern:
avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse5:w:0xf7:m avrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse5:r:-:h 0xf7
- EEPROM memory is preserved through the Chip Erase (EESAVE) = yes
Software
Clock System
Takt zu Testzwecken auf Port C Pin 7 (d.h. JP3 Pin 3) ausgeben.
PORTC.DIRSET = 0x80; PORTCFG.CLKEVOUT = 0x01;
32 MHz mit dem externen Quarz
Unter Verwendung der Software zu AVR1003 (-> Siehe auch) kann man den Takt auf 32 MHz einstellen:
#include "clksys_driver.h"
void init_clock( void ) { CLKSYS_XOSC_Config( OSC_FRQRANGE_12TO16_gc, false, OSC_XOSCSEL_XTAL_16KCLK_gc ); CLKSYS_Enable( OSC_XOSCEN_bm ); CLKSYS_PLL_Config( OSC_PLLSRC_XOSC_gc, 2 ); CLKSYS_Enable( OSC_PLLEN_bm ); CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc ); do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 ); CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc ); CLKSYS_Disable( OSC_XOSCEN_bm ); } /* init_clock() */
USART
USART über USB
So stellt man unter Verwendung der Software zu AVR1307 (-> Siehe auch) bei 32 MHz Takt den USART für die Übertragung per USB ein:
#include "usart_driver.h" #define USART USARTD0 void init_usart( void ) { PORTD.DIRSET = PIN3_bm; PORTD.DIRCLR = PIN2_bm; USART_Format_Set( &USART, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false ); /* * BSEL[11:0]-Wert bei 32MHz Takt und BSCALE[3:0]==0: * 207 : 9600 * 103 : 19200 * 51 : 38400 * 34 : 57600 * 16 : 115200 */ USART_Baudrate_Set( &USART, 34 , 0 ); USART_Rx_Enable( &USART ); USART_Tx_Enable( &USART ); } /* init_usart() */
Siehe auch
- Ursprungsbeitrag im Forum
- XMEGA Tutorial in C - Tutorial ATxmega (ATxmega128A3U)
- Die Seite des Sticks mit Schaltplan und Stückliste
- XMEGA-C-Tutorial auf stromflo.de als Online Wiki odf PDF
- Produktseite des ATxmega128A3 mit jeder Menge an Dokumentation und Application Notes
- AVR1003: Using the XMEGA Clock System (PDF) und Software (ZIP)
- AVR1307: Using the XMEGA USART (PDF) und Software (ZIP)
- Produktseite des MCP2200 mit Dokumentation und Tools