Ну что тут можно сказать, не знаю находил ли ты эту информацию, но словарем придется запастись:
http://www.atmel.com/images/atmel-8032- … vr1300.pdf
Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения Xmega в среде Баском » XMega - Bascom AVR Basic
Ну что тут можно сказать, не знаю находил ли ты эту информацию, но словарем придется запастись:
http://www.atmel.com/images/atmel-8032- … vr1300.pdf
Чем возможности баскома не подошли?
Отредактировано Пётр (2017-06-28 21:36:14)
Нашел на русском, там же и про ЦАП есть - http://www.mkxmega.ru/2017/01/xmegaadc.html
Xmega А3 явно готовили быть частотным преобразователем (драйвером двигателя).
Чем возможности баскома не подошли?
Да они отлично реализованны, просто чтоб понять чего там вписывать, нужно знать как это работает.
Отредактировано Ev3658 (2017-06-28 22:55:40)
ADC XMEGA - это жесть.
Вообщем понял немного. У Xmega A3 есть два ADC, это ADCA и ADCB - разумеется под название портов.
ADCA и ADCB настраиваются по разному:
Config Adca = ...
Config Adcb = ...
У каждого порта A и B есть свой Aref (ArefA и ArefB).
Самое жуткое, это мультиплексор, вот тут непонятки есть.
Как никрутил, не могу значение получить с АЦП.
Кто сталкивался, там надо пин AREF делать входом и аналоговы PIN делать входом или как-то уже само в Xmega всё делается?
Config Adca = Single , Convmode = Unsigned , Resolution = 12bit , Dma = Off , Reference = Arefa , Event_mode = None , Prescaler = 512 , _ Ch0_gain = 1 , Ch0_inp = Single_ended , Mux0 = &B0_0011_111 .... Tm4 = Getadc(adca , 3)
Конечно есть подозрение, что от 40мГц контроллеру не очень, но а вдруг всё впорядке.
Не могу понять в структуре, вот, может компу поможет:
P:S: Разобрался, почему не мог получить данные.
При приёме значения АЦП в Xmega надо ломать стереотипы мозга, а именно:
Tm4 = Getadc(adca , 0 , &B0_0011_000 )
Где:
Переменная равна порту АЦП "А", данные брать из канала №0 с настройкой его мультиплесора на Porta.3 (в картинке выше всё есть).
Отредактировано Ev3658 (2017-07-04 15:55:29)
Если кто будет по UART Xmeg`a дружить с USB-COM переходником, то не знай как у вас, но мне пришлось порт передачи аппаратно инвертировать:
Config Com6 = 128000 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Open "COM6:" For Binary As #1 Config Porte.6 = Input Config Porte.7 = Output Config Xpin = Porte.7 , Invertio = Enabled Print #1 , " TEXT ТЕСТ"
Странно очень, у меня на А4 никогда такого не было.
Может дело в переходнике? В нем случайно нет чего-то подобного MAX232?
В принципе USART как-то странно ведёт себя, в проекте VGA он уже инверсный был, так уж не удивлюсь и тут. Переходник простой, залитый шнурок USB-COM, чип не помню. Просто думал скорость не совпадает или 8 бит мешает, но оказалось USART XMEGA просто инверсия выхода нужна.
Логические уровни на выходе переходника в пределах 0...5 вольт, или в большем диапазоне и имеют отрицательное значение?
Шнурок с USB Serial CH340, вот такой:
К такому нужно подключать МК через MAX232 или подобную. Прямое подключение, мало того что требует инвертирования сигналов, так еще может привести к выходу МК из строя, поскольку логические уровни на этом переходнике в диапазоне -12 ... +12 вольт.
Отредактировано Пётр (2017-07-07 11:53:43)
Да, это провод полноценный USB to RS232. RS232 по уровню сигнала ничего общего не имеет с UARTом, надо ставить доп.обратный чип, что в TTL преобразовывал.
Ну мне и надо ТТЛ UART сигнал.
Оказалось RX и TX оба необходимо инвертировать, в Help Баскома так-же есть указание: " For example when COM1 is used for the IRDA module, you would use : CONFIG XPIN=PORTC.3, INVERTIO=ENABLED "
Вообщем получилось принять и отправить данные вот так:
'шапка на всякий случай
$regfile = "xm256a3def.dat"
$crystal = 42954540 'обязательно правильное значение, у меня кварц 14,31818мГц
$hwstack = 256
$swstack = 128
$framesize = 128
$lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
Config Osc = Enabled , Extosc = Enabled , Pllosc = Enabled , _
Range = 2mhz_9mhz , Startup = Xtal_256clk , Pllsource = Extclock , Pllmul = 3 , Plldiv2 = Disabled , 32khzosc = Enabled ', 32khzpowermode = Normal
Config Sysclock = Pll , Prescalea = 1 , Prescalebc = 1_1
....
....
....
'Вот, принимается и отправляется:
Config Com6 = 115200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
On Usarte1_rxc Serialinput 'прерывание при получении
Enable Usarte1_rxc
Open "COM6:" For Binary As #1
Config Porte.6 = Input
Config Porte.7 = Output
Config Xpin = Porte.7 , Invertio = Enabled
Config Xpin = Porte.6 , Invertio = Enabled
...
...
...
...
End
'получаем данные:
P = Inkey(#1) 'тут нужно всё получить быстро, а дальше код обработки, его лучше сократить, это у меня для пробы:
S = S + Chr(p)
If P = 13 Or P = 10 Then
Incr O
X = 1
If O = 20 Then
O = 1
Gosub Clsvga:
End If
Y = O
Gosub Text
S = ""
End If
Return
Ну мне и надо ТТЛ UART сигнал
А на выходе этого переходника RS232 https://ru.wikipedia.org/wiki/RS-232
Информация передаётся по проводам двоичным сигналом с двумя уровнями напряжения. Логическому «0» соответствует положительное напряжение (от +5 до +15 В для передатчика), а логической «1» — отрицательное (от −5 до −15 В для передатчика). Для электрического согласования линий RS-232 и стандартной цифровой логики UART выпускается большая номенклатура микросхем драйверов, например, MAX232.
О чем я писал выше.
У UART логический «0» это напряжение близкое к нулю, а логическая «1» напряжение 3.3 или 5 вольт.
Если и дальше будете так поступать
Оказалось RX и TX оба необходимо инвертировать
то есть вероятность выхода МК из строя из-за слишком высокого положительного напряжения, или отрицательного напряжения.
Жесть какае-то. Если использовать ArefA как опорное напряжение, подав на него 3.3 вольта, то опорным 3.3 вольта не будет, оно там чем-то делится и никак не получается нормально всё оцифровать
Config Adca = Single , Convmode = Unsigned , Reference = Arefa , Resolution = 12bit , Dma = Off , Event_mode = None , Prescaler = 256 , _ Ch0_gain = 1 , Ch0_inp = Single_ended , Mux0 = &B0_0001_000 Adckn = Getadc(adca , 0 )
У кого получалось как-то AREF приравнять к 3.3 вольта?
Это жесть!!! В Xmega AREF нельзя приравнять к 3.3 вольта или к VCC, опорное напряжение делится на 2, просто жестоко очень, схема в разы увеличивается 
Ой да ладно, пару резюков всего лишь на канал. 
А вообще народ пишет вроде не в два раза, а макс Vcc-0.6
http://www.avrfreaks.net/forum/xmega-ad … tage-range
http://www.avrfreaks.net/forum/xmega-adc-voltage-range
Отредактировано RDW (2017-08-02 17:16:52)
Ой да ладно, пару резюков всего лишь на канал.
Эта точность не такая уж линейная будет, да и температурный хаос будет, напряжение то маленькое.
А вообще народ пишет вроде не в два раза, а макс Vcc-0.6
....
Нее, это от минус 0.6 до VCC (не превышая VCC более чем на 0.6).
Этот сдвиг в минус сделан для определения нуля, там есть пара регистров, один содержит эталонное значение калибровки АЦП которое зашивается заводом и эти данные заносятся во второй регистр, ещё не вкуривал, но как-то так.
Так-то АЦП хорошо сделано, удобно, но блин опорное напряжение просто добивает.
Возвращаясь к прошлой теме:
ADC XMEGA - это жесть
Мне тут для одного эксперимента придется/решил использовать А4 с её АЦП.
Чуть окунулся (теория) в возможности настроек его. Судя из этой картинки:

Получается есть а-ж 4 режима работы АЦП (макс значение):
1. внутренний опорник на 1В;
2. питание деленное на 1.6;
3. питание деленное на 2;
4. и внешнее (как обычно).
Ev3658, если тебе нужен был полный размах до питания, то надо было использовать как раз четвертый вариант. У тебя была проблема с тем, что там по факту выходило меньшее значение. ХМега может работать в двух режимах измерения: знаковый и без, на эту тему нашел развертку:
В беззнаковом режиме диапазон преобразований начинается от нуля и заканчивается значением опорного напряжения. Чтобы иметь возможность определять переход через ноль, вычитается ΔV. ΔV приблизительно равна 0,05 * Vref, поэтому уровень земли будет соответствовать примерно 0,05 от общего диапазона значений (0,05 * 4095 с разрешением 12-бит). Это также ограничивает максимальное входное напряжение, которое становится меньше на 0,05 * Vref, то есть максимальное входное напряжение будет Vref - ΔV.
Здесь можно почитать подробнее.
Т.е. 4 вариант макс напряжение равно 3,135В.
До железа пока не добрался, надо будет пробовать и делать выводы.
Отредактировано RDW (2017-12-01 14:40:53)
| BASCOM-AVR | Ссылки по теме BASCOM | 2018-07-18 |
| Истек срок регистрации Басика | О программе BASCOM AVR | 2024-10-11 |
Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения Xmega в среде Баском » XMega - Bascom AVR Basic