|
|
ATxMega Stick - First StepsDer ATxMega Stick ist eine kleine Platine (27 mm x 80 mm) mit ATxmega128A3, USB-Device-Anschluss und Micro-SD-Kartenslot.
[Bearbeiten] Eigenschaften
[Bearbeiten] Hinweise zum Aufbau[Bearbeiten] Anmerkungen zum Schaltplan vom 15.09.2011 23:08:38
[Bearbeiten] StromversorgungAuf JP1 muss ein Jumper bestückt werden:
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. [Bearbeiten] Löten des SD-Halters
[Bearbeiten] Betrieb unter LinuxDamit 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 [Bearbeiten] FusesDefault-Werte der Fuses: [Bearbeiten] signature: Signaturavrdude -Pusb -cavrispmkII -px128a3 -q -q -U signature:r:-:h 0x1e,0x97,0x42
[Bearbeiten] fuse0: JTAG User IDavrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse0:r:-:h 0xff
[Bearbeiten] fuse1: Watchdog Configurationavrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse1:r:-:h 0x0
[Bearbeiten] fuse2: Reset Configurationavrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse2:r:-:h 0xff
[Bearbeiten] fuse4: Start-up Configurationavrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse4:r:-:h 0xfe
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
[Bearbeiten] fuse5: BODACT, BODLEVEL, EESAVEavrdude -Pusb -cavrispmkII -px128a3 -q -q -U fuse5:r:-:h 0xff
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
[Bearbeiten] Software[Bearbeiten] Clock SystemTakt zu Testzwecken auf Port C Pin 7 (d.h. JP3 Pin 3) ausgeben. PORTC.DIRSET = 0x80; PORTCFG.CLKEVOUT = 0x01; [Bearbeiten] 32 MHz mit dem externen QuarzUnter 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() */
[Bearbeiten] USART[Bearbeiten] USART über USBSo 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() */
[Bearbeiten] Siehe auch
|