XMega

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
GPeti
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2011. március 3. csütörtök, 7:00

Re: XMega

Hozzászólás Szerző: GPeti »

Xmega kontrollerhez szeretnék egy PDI programozót. Tudom lehet venni is de láttam a neten rajzot AT90USB162-vel azt építeném meg csak nem találtam hozzá hex file-t.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: XMega

Hozzászólás Szerző: Robert »

A LUFA projekt része. Abban van HEX is.

Az AT90USB162 chip megszűnt gyártásban lenni...
Avatar
GPeti
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2011. március 3. csütörtök, 7:00

Re: XMega

Hozzászólás Szerző: GPeti »

Helyette van új mert most fogtam panelgyártásba ami erre a csippre épül (nem a programozó) lehet még kell később is több, a boltban nem írják hogy kifutó típus.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: XMega

Hozzászólás Szerző: Robert »

Ami a helyettesítő: ATMega16U2.
De ezekben van némi szoftveres eltérés (vö: AT90S2313 / ATTiny2313).

Viszont a 16U2 sok helyewn csak MLF tokban érhető el:(
Avatar
GPeti
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2011. március 3. csütörtök, 7:00

Re: XMega

Hozzászólás Szerző: GPeti »

"Xmega kontrollerhez szeretnék egy PDI programozót. Tudom lehet venni is de láttam a neten rajzot AT90USB162-vel azt építeném meg csak nem találtam hozzá hex file-t."

Megtaláltam a hex filet, készen is van, az AVR Studio látja is valószínűleg működik is (még nincs meg az xmega tqfp-dip adapter), csak nem értem hogy a Bascom-hoz hogyan kell beállítani hogy működjön vele.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: XMega

Hozzászólás Szerző: Robert »

A programozónak válaszd ki és a avrdude-s hex kell bele....
Avatar
z1z9z9z2
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2006. szeptember 19. kedd, 6:00

Re: XMega

Hozzászólás Szerző: z1z9z9z2 »

Sziasztok!
Egy xmega32a3u vezérlővel küzdök. Azaz bármelyik spi buszt szeretném hw-ben használni, a program a print,input utasításnál kifagy. A clk-n nincs jel, és az "an#192" ben található progival is ez a helyzet.

mintaprogramok:

saját:

Kód: Egész kijelölése

$regfile = "xm32a4udef.dat"
$crystal = 32000000

$hwstack = 128
$swstack = 128
$framesize = 120

$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014
Config Osc = Enabled , 32mhzosc = Enabled
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1


Config Priority = Static , Vector = Application , Lo = Enabled , Hi = Enabled


Config Com5 = 9600 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
Open "COM5:" For Binary As #5
Dim S1 As Integer
Dim S3 As Long
Dim S2 As Long
Dim S4 As Long
Dim B As Byte
Dim F As Integer
Dim K As Byte
Dim Szinusz As Single
Dim Adat(100) As Word
Dim Ertek(100) As Word

'------------------------------------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------------
Dim Spiadat As Byte

Dim Spi_send_byte As Byte












Enc_cs Alias Porte.0
Config Porte.0 = Output
Enc_cs = 1

Config Spid = Hard , Master = Yes , Mode = 0 , Clockdiv = Clk128 , Data_order = Msb , Ss = None
Waitms 10

Open "SPID" For Binary As #12

Waitms 100

Cls

Do

Waitms 10
Reset Porte.0
Spi_send_byte = &HFE

   Print #12 , Spi_send_byte

Set Porte.0

Print #5 , "szia"

Waitms 1


Loop

End
hackelt az an192-ből:

Kód: Egész kijelölése

' XMEGA SPI MASTER
' xmega_spi_master.bas
' This example should be used with xmega_spi_slave.bas or with xmega_spi_slave_interrupts.bas
$regfile = "xm32a4udef.dat"
$crystal = 32000000 '32MHz
$hwstack = 50
$swstack = 50
$framesize = 200
$lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
'-------------------CLOCK CONFIGURATION-----------------------------------------
Config Osc = Disabled , 32mhzosc = Enabled                  ', 32khzosc = Enabled '32MHz and 32KHzenabled
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 'CPU Clock = 32MHz
'Init and enable the DFLL (Digital Frequency Locked Loop) for automatic run-time calibration of theinternal 32MHz Oscillator
Osc_dfllctrl = &B00000000                                   'The internal 32.768 KHz Oscillator is used forcalibration
Set Dfllrc32m_ctrl.0 'Enable DFLL and auto calibration
'-------------------------------------------------------------------------------
Config Priority = Static , Vector = Application , Lo = Enabled 'Interrupt Setup
'---------------------CONFIGURE TIME, DATE AND RTC FOR SECOND TICK--------------
Config Date = Dmy , Separator = .
Config Clock = Soft , Rtc = 1khz_int32khz_rcosc 'Internal 32KHz
'COM Interface to PC (COM5 is PINE.6 and PINE.7)
Config Com5 = 9600 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
Open "COM5:" For Binary As #1
config porte.4 = output 'Slave Select Pin
set porte.4
Dim Select_bit As Bit
Reset Select_bit 'We start with 0
'CONFIG SPI MASTER on Port E
Config Spie = Hard , Master = Yes , Mode = 0 , Clockdiv = Clk32 , Data_order = Msb , Ss = None
Open "SPIE" For Binary As #10
Dim Array(10) As Byte


'Array(1) = incremented
Array(2) = 2
Array(3) = 3
Array(4) = 4
Array(5) = 5
Array(6) = 6
Array(7) = 7
Array(8) = 8
Array(9) = 9
Array(10) = 10
Const Start_of_frame = 111
Wait 3
Do
Print #1 , "szia"
'Second Tick from RTC
If Rtc_intflags.1 = 1 Then
Set Rtc_intflags.1 'Clear the Flag
Incr Array(1)
'SEND 10 BYTE ARRAY TO SLAVE
Reset Porte.4 'Select Slave
 'SEND Start Byte then ARRAY WITH 10 BYTES
Set Porte.4 'Deselect Slave
Print #1 , Array(2)                                         'Print B to Serial PC connection
End If



Loop
End
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

Port-olvasás

Hozzászólás Szerző: winnerbt »

XMEGA, portbit beolvasása érdekesen vacakol:

Kód: Egész kijelölése

const d_input_up = &b0001_1111
config pinb.0=input
'config portb= &b0000_1110
PORTb_PIN0CTRL=d_input_up          'io0 digit bejárat felhúzóval

do
   if pinb.0=1 then
      Lcdat 1 , 1 , "11111111"
   else
      Lcdat 1 , 1 , "00000000"
   end if
wait 1
loop
Naszóval amint hozzáérek a PIN0CTRL regiszterhez, onnantól nem jön be a port értéke. A CTRL regiszter írása jól működik, látom a fel/lehúzó/lebegő állapotokat a portlábon. Már minden variációt végigpróbáltam, adat befelé semmi... Elméletileg más regiszter nem tartozik (az INT kivételével) a porthoz.
Állítgatnom kellene a portok stílusát, ezért nyúlnék bele. Hol van a kutya elásva?
Avatar
gomy
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. október 21. szerda, 6:00

Re: XMega

Hozzászólás Szerző: gomy »

Sziasztok!

Sokat szippantottam az MPU6050 gyro-val. Végre találtam egy használható kódot.
Íme:

Kód: Egész kijelölése

' Source: www.roboternetz.de	THX!!!
' Ez a kód Pro mini 328P-re készült (kínai)
' Benne van az eredeti, és amit én mókoltam hozzá (megjelenítés).
' Ez egy MPU6050 gyroscope kezelő program. (kínai)
' Az "Ugrik1" csak azért van benne, mert nem volt kedvem az összes sort kikommentelni.
' Használd egészséggel!	
' Üdv:GomySoft


$regfile = "m328pdef.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 200
$swstack = 200
$framesize = 400


'Config Portd.7 = Output

Config Sda = Portc.4
Config Scl = Portc.5
Config Twi = 100000

Declare Sub Read_gyro
Declare Sub Read_acc

Dim Tmp_gyrox(2) As Byte
Dim Tmp_gyroy(2) As Byte
Dim Tmp_gyroz(2) As Byte
Dim Giro_x As Integer
Dim Giro_y As Integer
Dim Giro_z As Integer


Dim Tmp_accx(2) As Byte
Dim Tmp_accy(2) As Byte
Dim Tmp_accz(2) As Byte
Dim Accel_x As Integer
Dim Accel_y As Integer
Dim Accel_z As Integer

'Sound Portd.7 , 400 , 450
'Sound Portd.7 , 400 , 250
'Sound Portd.7 , 400 , 450
'Wait 2


I2cinit


'--- (25) Sample Rate Divider = 1 ---
   I2cstart                                                 'start condition
   I2cwbyte &HD0                                            'write adress of MPU-6050
   I2cwbyte 25                                              'Register 25 Sample Rate Divider (1..8 kHz)
   I2cwbyte &B00000000                                      'Divider set to 1   (soll)
   I2cstop                                                  'stop condition

   '--- (26) DLPF = 42/44 Hz ---
   I2cstart                                                 'start condition
   I2cwbyte &HD0                                            'write adress of MPU-6050
   I2cwbyte 26                                              'Register 26 DLPF_CFG (digital lowpass filter) Configuration
   I2cwbyte &B00000011                                      'Bits 0..2 = 011 (3) - ACC:44Hz, 4.9ms; Gyro:42Hz, 4.8ms
   I2cstop                                                  'stop condition

   '--- (27) Gyro Full Range = +-2000°/s ---
   I2cstart                                                 'start condition
   I2cwbyte &HD0                                            'write adress of MPU-6050
   I2cwbyte 27                                              'Register 27 Gyro Configuration
   I2cwbyte &B00011000                                      'Bits 3+4 = 11 - Full Scale Range: +/-2000°/s
   I2cstop                                                  'stop condition

   '--- (28) ACC Full Range = +-2g ---
   I2cstart                                                 'start condition
   I2cwbyte &HD0                                            'write adress of MPU-6050
   I2cwbyte 28                                              'Register 28 ACC Configuration
   I2cwbyte &B00000000                                      'Bits 3+4 = 00 - Full Scale Range: +/-2g / No High Pass Filter
   I2cstop                                                  'stop condition

   '--- (107) Power Management 1 ---
   I2cstart                                                 'start condition
   I2cwbyte &HD0                                            'write adress of MPU-6050
   I2cwbyte 107                                             'Register 107 Power Management 1
   I2cwbyte &B00001011                                      'No Reset / No Sleep / No Cycle / Temp_Sens: Dis / Clock Source: Z-Gyro
   I2cstop

Goto Ugrik1

Do
  Call Read_gyro
'  Print "Tmp_gyrox(2) :" ; Tmp_gyrox(2) ; "-" ; "Tmp_gyrox(1) :" ; Tmp_gyrox(1)
'  Print "Tmp_gyrox(1) :" ; Tmp_gyrox(1)
  Print "X: ";Giro_x
  Print " "

  Waitms 20

'  Print "Tmp_gyroy(2) :" ; Tmp_gyroy(2); "-" ; "Tmp_gyroy(1) :" ; Tmp_gyroy(1)
'  Print "Tmp_gyroy(1) :" ; Tmp_gyroy(1)
  Print "Y: " ; Giro_y
  Print " "

  Waitms 20

'  Print "Tmp_gyroz(2) :" ; Tmp_gyroz(2); "-" ; "Tmp_gyroz(1) :" ; Tmp_gyroz(1)
'  Print "Tmp_gyroz(1) :" ; Tmp_gyroz(1)
  Print "Z: " ; Giro_z
  Print " "
  Print "*******************************"
  Print " "
  Waitms 100




  Call Read_acc

'  Print "Tmp_accx(2) :" ; Tmp_accx(2)
'  Print "Tmp_accx(1) :" ; Tmp_accx(1)
  Print "X: " ; Accel_x
  Print " "

  Waitms 20

'  Print "Tmp_accy(2) :" ; Tmp_accy(2)
'  Print "Tmp_accy(1) :" ; Tmp_accy(1)
  Print "Y: " ; Accel_y
  Print " "

  Waitms 20

'  Print "Tmp_accz(2) :" ; Tmp_accz(2)
'  Print "Tmp_accz(1) :" ; Tmp_accz(1)
  Print "Z: " ; Accel_z
  Print " "
  Print "*******************************"
  Print "*******************************"

  Wait 3

Loop

Ugrik1:

Do
  Print "*******************************"
  Call Read_gyro
  Print " "
  Print "GX: " ; Giro_x ; "  *  " ; "GY: " ; Giro_y ; "  *  " ; "GZ: " ; Giro_z
  Call Read_acc
  Print " "
  Print "AX: " ; Accel_x ; "  *  " ; "AY: " ; Accel_y ; "  *  " ; "AZ: " ; Accel_z
  Print " "
  Print "*******************************"
  Wait 3
Loop

End




Sub Read_gyro()

   I2cstart
   I2cwbyte &HD0
   I2cwbyte 67
   I2crepstart
   I2cwbyte &HD1

   I2crbyte Tmp_gyrox(2) , Ack
   I2crbyte Tmp_gyrox(1) , Ack

   I2crbyte Tmp_gyroy(2) , Ack
   I2crbyte Tmp_gyroy(1) , Ack

   I2crbyte Tmp_gyroz(2) , Ack
   I2crbyte Tmp_gyroz(1) , Nack

   I2cstop
Giro_x = Tmp_gyrox(2) + Tmp_gyrox(1)
Giro_y = Tmp_gyroy(2) + Tmp_gyroy(1)
Giro_z = Tmp_gyroz(2) + Tmp_gyroz(1)

   'Gyrox = Gx
   'Gyroy = 0 - Gy
   'Gyroz = 0 - Gz

End Sub


Sub Read_acc()


   I2cstart
   I2cwbyte &HD0
   I2cwbyte 59
   I2crepstart
   I2cwbyte &HD1

   I2crbyte Tmp_accx(2) , Ack
   I2crbyte Tmp_accx(1) , Ack

   I2crbyte Tmp_accy(2) , Ack
   I2crbyte Tmp_accy(1) , Ack

   I2crbyte Tmp_accz(2) , Ack
   I2crbyte Tmp_accz(1) , Nack

   I2cstop
Accel_x = Tmp_accx(2) + Tmp_accx(1)
Accel_y = Tmp_accy(2) + Tmp_accy(1)
Accel_z = Tmp_accz(2) + Tmp_accz(1)

   'Accx = Ax
   'Accy = Ay
   'Accz = Az


End Sub
Remélem tudjátok használni!
Avatar
gomy
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. október 21. szerda, 6:00

Re: XMega

Hozzászólás Szerző: gomy »

Lehet, hogy nem jó helyre dobtam a cuccot?
Bocs!
Avatar
milet1
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2006. november 27. hétfő, 7:00

Re: XMega

Hozzászólás Szerző: milet1 »

Üdv!
XMegát programoznék, a fordító lefut rendesen, de a szimulátor ezt üzeni:
"Write outside memory area : &HFFFFFFFF"
Vajon miért?
Remélem tud valaki segíteni.
Előri is köszönöm.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: XMega

Hozzászólás Szerző: Robert »

Melyik Bascom verzió? Korábbi/későbbi mit csinál?
http://www.tavir.hu - a gazda :)
Avatar
milet1
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2006. november 27. hétfő, 7:00

Re: XMega

Hozzászólás Szerző: milet1 »

2.0.7.5
korábbival nem próbálkoztam.
Avatar
milet1
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2006. november 27. hétfő, 7:00

Re: XMega

Hozzászólás Szerző: milet1 »

Közben meglett a megoldás.
A szimulációban nem szabad bekapcsolni az lcd panelt.
Így lefut a progi.
Sajnos ekkor nem látszik a portok állapota.
Az összefüggést nem igazán értem.
Avatar
Csuhas
Biztosítékgyilkos
Hozzászólások: 69
Csatlakozott: 2005. április 22. péntek, 6:00

Re: XMega

Hozzászólás Szerző: Csuhas »

gomy írta: Sokat szippantottam az MPU6050 gyro-val. Végre találtam egy használható kódot.

....

Giro_x = Tmp_gyrox(2) + Tmp_gyrox(1)
Giro_y = Tmp_gyroy(2) + Tmp_gyroy(1)
Giro_z = Tmp_gyroz(2) + Tmp_gyroz(1)

....

Accel_x = Tmp_accx(2) + Tmp_accx(1)
Accel_y = Tmp_accy(2) + Tmp_accy(1)
Accel_z = Tmp_accz(2) + Tmp_accz(1)
Hogy mások ne küzdjenek vele sokat: Nem helyes egy két byteon tárolt 16 bites értékből úgy számot képezni hogy simán összeadod az alsó és felső byteot !

A helyes megoldás ezzel analóg:

Kód: Egész kijelölése

Giro_x = Tmp_gyrox(2) * 256
Giro_x = Giro_x + Tmp_gyrox(1)
Válasz küldése