Wat is een Xmega?

Door mad_max234 op donderdag 12 december 2013 17:38 - Reacties (7)
Categorie: Hardware, Views: 3.257

De Xmega is een microcontroller, een AVR om precies te zijn. Xmega is de grote broer van de bekende atmega serie van Atmel die laatste jaren veel gebruikt werd door hobbyisten. Xmega is op veel punten sterk verbeterd tegenover de atmega, de kloksnelheid is omhoog gegaan naar 32Mhz, heeft heel wat meer timers, peripheral, etc gekregen.

De AVR familie bestaat nu dus uit de volgende series:
  • Attiny
  • Atmega
  • AtXmega (aka Xmega)
http://tweakers.net/ext/f/nEaCsEc0wq4VFR00DboEt75b/full.jpg

Aantal verbeteringen tegenover de atmega:
  • Interne clocksysteem, Xmega beschikt over meerdere oscillators, 32Mhz, 2Mhz, 32.678Khz, 2Khz ulp. Er is PLL beschikbaar voor elke clocksysteem.
  • Xmega zijn alleen 3.3v max, atmega kon je ook op 5v draaien.
  • Meer timers, Xmega heeft meer timers en meeste zijn 16bit.
  • Xmega heeft 12bit ADC, atmega had maar 10bit ADC
  • Meer comparator outputs(PWM).
  • Xmega heeft minimaal 10bit PWM, atmega had minimaal maar 8bit pwm
  • Nieuwe program interface, PDI(2 wire program en debug) ipv ISP(4 wire)
  • Nieuw functie Event systeem, bestond niet bij de atmega.
  • DMA, ook nieuw, direct memory access.
De Xmega serie bestaat zelf weer uit verschillende versies, Xmega A, Xmega B, Xmega C, Xmega D en Xmega E. Ze beschikken elke over andere peripheral, sommige worden uitgefaseerd omdat er verbeterde versies van is gemaakt. In principe is E de laatste versie, maar betekend niet dat andere niet meer verkocht worden of minder geschikt zijn, ze hebben elke hun eigen eigenschappen en peripheral dus ook elk hun eigen toepassingen.

Kan ze enigszins opdelen in:

Xmega A = Prestatie serie
Xmega B = Heeft interne LCD controller
Xmega C = entry-level USB-enabled, alle C versies hebben USB.
Xmega D = Low power serie
Xmega E = 32pin Xmega serie

Maar je hebt ook usb versies van A serie, en D serie heeft sneller ADC dan A serie.

Voorbeeld van pin layout van de A4 serie, bijvoorbeeld de Xmega32A4u.
http://tweakers.net/ext/f/9z45rsdmdEVkeoTZRNBCtpOE/full.jpg

Links:
http://www.youtube.com/watch?v=HKrgVZ_b9Eo
http://www.atmel.com/prod...ollers/avr/avr_xmega.aspx

Volgende: USART part 1, schrijven naar usart. (Xmega) 12-'13 USART part 1, schrijven naar usart. (Xmega)

Reacties


Door Tweakers user Hans1990, vrijdag 13 december 2013 13:22

De atmega328p (bijvoorbeeld) heeft 1x 16-bit PWM met een 16-bit timer hoor, of 10-bit wil je 2 PWM outputs hebben.

De timer heeft namelijk 2 compare modules. Je kan hem configureren dat hij met een vast ingestelde periode werktt (bvb 10bits) en 2 compar eoutputs hebt. Je kan ook hem instellen dat je compare 1 voor de periode gebruikt, en compare 2 voor de PWM output.

De PWM resolutie is dan ook afhankelijk van de klokfrequentie en de periode tijd (dus frequentie).
Bvb je klok is 8MHz, en de timer telt tot 1024 (10-bits) -> 8M/1024=7.8125kHz PWM
Of, je kiest zelf een waarde: klok 8M, periode tijd is 65535 (0xFFFF) -> 122Hz. Maar wel 16-bits resolutie!

Uiteindelijk gaat het dus om de flexibiliteit van de timer module en de klok frequentie die bepaald hoe veelzijdig die is.

Door Tweakers user mad_max234, vrijdag 13 december 2013 14:01

Dat klopt allemaal ik heb het meer over atmega in algemeen, hebben niet allemaal hetzelfde aantal timers en resolutie. Maar de atmega328p heeft inderdaad één timer1 en twee timer0, 16bit en twee 8bit timers dus. Kan je 6 pwm van maken zijn dan allemaal 8bit maximaal en moet je niet een andere timer nodig hebben voor iets anders. Je moet de 16bit timer1 dan opdelen in twee 8bit.

Xmega heeft 4 compartors per timer(inverting en non inverting), twee meer dan mega heeft. En heeft over hele serie gezien meer timers dan atmega serie heeft.

De timers van Xmega zijn veel geavanceerde en flexibeler dan die van atmega. meeste timers kunnen alles wat de 16bit timer ook kan van atmega, en dan al het extra's wat Xmega brengt naar de timers. :)
De PWM resolutie is dan ook afhankelijk van de klokfrequentie en de periode tijd (dus frequentie).
Dat is niet helemaal correct. Kan bijvoorbeeld nog steeds volledige 16bit gebruiken van de timer als atmega op 200Khz draait net zoals het kan op 20Mhz. Timer resolutie staat gewoon vast, het is hardwarematig iets, namelijk register grote(16bits breed) die fysiek in de chip zit. De tijdsduur is afhankelijk van frequentie waarop de atmega(en dividers en/of PLL) draait, de timer zal stuk trager worden bij 200Khz dan bij 20Mhz.

Je kan resolutie van de 16bit timer uiteraard wel kleiner maken door output comparator waard te verlagen naar andere waarde, OCR1A = 1024 zal 10bit resolutie geven. Maar dan verlaag je gewoon van output comparator, van 16bit(65535) naar 10bit(1024).

En zoals ik al zie heb je bij de atmega328p één 16bit timer, maar die zul je moeten opsplitsen in twee 8bit om alle 6 pwm te krijgen, of je hebt 1 16bit en 4 8bit.

Xmega heeft voor de 8bit timers een extra extension(Hi-Res Extension) waarmee je de 8bit timer een 10bit timer word, dus heeft voor alle ouputs minimaal 10bit, atmega 8bit. Overigens zijn meeste timers van Xmega 16bit.

Ook is het nu mogelijk om 32bit timer op te zetten, heb daar zelf nog geen ervaring mee opgedaan.

Verder hebben de timers van de Xmega een Advanced Waveform Extension (AWeX), daarmee kan je makkelijk waveforms genereren, gebeurd hardwarematig heeft dus geen invloed op je code.

Edit/
Xmega timer links
http://www.atmel.com/Images/doc8045.pdf

[Reactie gewijzigd op vrijdag 13 december 2013 14:36]


Door Tweakers user Hans1990, vrijdag 13 december 2013 22:34

Dat is niet helemaal correct. Kan bijvoorbeeld nog steeds volledige 16bit gebruiken van de timer als atmega op 200Khz draait net zoals het kan op 20Mhz. Timer resolutie staat gewoon vast, het is hardwarematig iets, namelijk register grote(16bits breed) die fysiek in de chip zit. De tijdsduur is afhankelijk van frequentie waarop de atmega(en dividers en/of PLL) draait, de timer zal stuk trager worden bij 200Khz dan bij 20Mhz.
Als ik die zin terug lees is het misschien handiger geweest om de zin omgekeerd te schrijven: de periode tijd is afhankelijk van de klokfrequentie en ingestelde resolutie.

f_pwm = f_clk / (prescaler * [compare waarde])

Bvb 16M, compare van 16000 -> f_pwm = 16M/16k=1kHz.
Resolutie -> ln(16000)/ln(2) , iets minder dan 14-bits.

Het is wel zo dat de atxmega meer van alles heeft, plus meer opties per peripheral, en dat is zeker mooi.

Door Tweakers user mad_max234, vrijdag 13 december 2013 23:28

Je maakt grote denk fout. ;)

Je weet vast wel hoe timer werkt icm met pwm? De timer telt gewoon door.
http://www.extremeelectro...images/pwm_wave_timer.gif

Vanaf de compare waarde zal pin laag zijn en daarvoor hoog, je hebt gewoon volle 16bit resolutie.

Timer begin bij 0, pin is dan hoog
telt tot compare waarde, pin gaat vanaf dat moment laag
telt gaat door met tellen tot zijn register vol is(8bit of 16bit) en krijgt een overflow, en beginnen weer overnieuw.

"8bit timer, OCR = 204, tijdbase 1Hz"
teller begint bij 0, pin hoog 0.8sec hoog
telt naar 200, pin gaat laag, 0.2sec laag
teller telt door naar 255 en overflow, alles begint weer overnieuw.

PWM van 80%

Edit
Leesvoer. :)
http://maxembedded.com/20...r-timers-pwm-mode-part-i/

[Reactie gewijzigd op vrijdag 13 december 2013 23:50]


Door Tweakers user mad_max234, zaterdag 14 december 2013 00:42

Kan je TOP van timer eigenlijk aanpassen in PWM mode? Dacht van niet, en zit je vast aan lijstje, fast pwm, 8bit pwm, 9bit pwm, etc.

Je kan wel met CTC iets in elkaar zet zodat je semi software pwm krijgt dan kan resolutie van timer ook aanpassen, maar dacht in pwm mode dat je vast zit aan TOP(FF of FFFF)

[Reactie gewijzigd op zaterdag 14 december 2013 10:05]


Door Tweakers user Hans1990, zaterdag 14 december 2013 13:51

Atmega328p datasheet, pagina 136. Daar staat dat lijstje.. Zelfs een attiny48 heeft dezelfde 16-bit timer als de atmega328p en ondersteunt deze modus.

De top waarde is de waarde waar de timer gaat resetten naar 0. Met PWM kan je dan de output laten setten. De OCR1x waarde is het punt waar de output weer reset. Je kan dan OC1A en OC1B gebruiken met afzonderlijke duty cycles.
Je kan de timer instellen op verschillende modussen: 8-bit, 9-bit of 10-bit. Dat is dan ook de waarde van de top: 0xFF, 0x1FF, 0x3FF.
Maar je kan ook zeggen, ik ga OCR1A of ICR1 gebruiken om mijn top waarde in te zetten. Je kan dan de periode tijd varieren..

De output gaat dan hoog op TMRx=0, en laag bij TMRx=OCR1B. (of inverted). TMRx wordt 0 als TMRx=TOP=ICR1 of OCR1A.

Omdat je dus dan zelf kan bepalen hoever de timer doortelt, kan je de resolutie en frequentie wijzigen. De resolutie is beperkt tot hoever jij kan doortellen. Als je een TOP van 5000 hebt, heb je geen 16-bit resolutie, maar ln(5000)/ln(2) bits. Immers heb je 5000 stapjes, geen 65535.

Door Tweakers user mad_max234, zaterdag 14 december 2013 18:37

Dat klopt allemaal, had ik gisteren maar even eerst een tabel opgezocht in de datasheet, begon namelijk al te twijfelen of de TOP waarde altijd fixed was.

Wist dat CTC niet fixed was, en dat je 8, 9, en 10bit kon kiezen ook, maar OCA voor pwm was me even ontschoten.

Wat gebeurd er dan met pin output van OC1A en OC1B(PB2 en PB3) als je die instelt als top waarde? Gebruik die namelijk altijd PWM mode met fixed TOP en dan gebruik je de OC1A en OC1B gewoon om je duty cyclus te bepalen.

Maar goed je hebt dus twee keuze, en als je niet precies op bepaalde frequentie hoeft te werken zoals bij led dimmers, waar resolutie belangrijker is, dan is die mode ook niet interessant, als je bepaalde motors wilt aanstuur weer wel, maar daar heb ik bijna geen ervaring mee, stuur eigenlijk nooit motors aan op die manier, dus vandaar dat ik die pwm mode niet in mijn hoofd had zitten.

Zo zie je maar weer dat je echt datasheet er altijd bij moet pakken, al denk je zeker te zijn, één blik op de tabel en was gelijk duidelijk. :)

Reageren is niet meer mogelijk