Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



XMega - Bascom AVR Basic

Сообщений 31 страница 52 из 52

31

Ну что тут можно сказать, не знаю находил ли ты эту информацию, но словарем придется запастись:

http://www.atmel.com/images/atmel-8032- … vr1300.pdf

http://www.atmel.com/Images/doc8378.pdf

https://eewiki.net/display/microcontrol … +for+Xmega

0

32

Чем возможности баскома не подошли?

Отредактировано Пётр (2017-06-28 21:36:14)

0

33

Нашел на русском, там же и про ЦАП есть - http://www.mkxmega.ru/2017/01/xmegaadc.html
Xmega А3 явно готовили быть частотным преобразователем (драйвером двигателя).

Пётр написал(а):

Чем возможности баскома не подошли?

Да они отлично реализованны, просто чтоб понять чего там вписывать, нужно знать как это работает.

Отредактировано Ev3658 (2017-06-28 22:55:40)

+1

34

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мГц контроллеру не очень, но а вдруг всё впорядке.

0

35

Не могу понять в структуре, вот, может компу поможет:
http://s0.uploads.ru/t/TvYU0.jpg
P:S: Разобрался, почему не мог получить данные.
При приёме значения АЦП в Xmega надо ломать стереотипы мозга, а именно:
Tm4 = Getadc(adca , 0 , &B0_0011_000 ) 
Где:
Переменная равна порту АЦП "А", данные брать из канала №0 с настройкой его мультиплесора на Porta.3 (в картинке выше всё есть).

Отредактировано Ev3658 (2017-07-04 15:55:29)

+1

36

Если кто будет по 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 ТЕСТ"

0

37

Странно очень, у меня на А4 никогда такого не было.

0

38

Может дело в переходнике? В нем случайно нет чего-то подобного MAX232?

0

39

В принципе USART как-то странно ведёт себя, в проекте VGA он уже инверсный был, так уж не удивлюсь и тут. Переходник простой, залитый шнурок USB-COM, чип не помню. Просто думал скорость не совпадает или 8 бит мешает, но оказалось USART XMEGA просто инверсия выхода нужна.

0

40

Логические уровни на выходе переходника в пределах 0...5 вольт, или в большем диапазоне и имеют отрицательное значение?

0

41

Шнурок с USB Serial CH340, вот такой:
http://www.elist.ru/upload/iblock/638/63833543b543d04f0b87a0f45bec884f.jpg

0

42

К такому нужно подключать МК через MAX232 или подобную. Прямое подключение, мало того что требует инвертирования сигналов, так еще  может привести к выходу МК из строя, поскольку логические уровни на этом переходнике в диапазоне -12 ... +12 вольт.

Отредактировано Пётр (2017-07-07 11:53:43)

0

43

Да, это провод полноценный USB to RS232. RS232 по уровню сигнала ничего общего не имеет с UARTом, надо ставить доп.обратный чип, что в TTL преобразовывал.

0

44

Типа такого: http://www.dx.com/p/rs232-to-ttl-serial … V9aQVFpxhE

0

45

Ну мне и надо ТТЛ 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

0

46

Ev3658 написал(а):

Ну мне и надо ТТЛ 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 вольт.

Если и дальше будете так поступать

Ev3658 написал(а):

Оказалось RX и TX оба необходимо инвертировать

то есть вероятность выхода МК из строя из-за слишком высокого положительного напряжения, или отрицательного напряжения.

0

47

Жесть какае-то. Если использовать 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 вольта?

0

48

Это жесть!!! В Xmega AREF нельзя приравнять к 3.3 вольта или к VCC, опорное напряжение делится на 2, просто жестоко очень, схема в разы увеличивается  :O

0

49

Ой да ладно, пару резюков всего лишь на канал. ;)

0

50

А вообще народ пишет вроде не в два раза, а макс 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)

0

51

RDW написал(а):

Ой да ладно, пару резюков всего лишь на канал.

Эта точность не такая уж линейная будет, да и температурный хаос будет, напряжение то маленькое.

RDW написал(а):

А вообще народ пишет вроде не в два раза, а макс Vcc-0.6
....


Нее, это от минус 0.6 до VCC (не превышая VCC более чем на 0.6).
Этот сдвиг в минус сделан для определения нуля, там есть пара регистров, один содержит эталонное значение калибровки АЦП которое зашивается заводом и эти данные заносятся во второй регистр, ещё не вкуривал, но как-то так.
Так-то АЦП хорошо сделано, удобно, но блин опорное напряжение просто добивает.

0

52

Возвращаясь к прошлой теме:

Ev3658 написал(а):

ADC XMEGA - это жесть


Мне тут для одного эксперимента придется/решил использовать А4 с её АЦП.

Чуть окунулся (теория) в возможности настроек его. Судя из этой картинки:

https://1.bp.blogspot.com/-LJyAtQBmvPE/WHyyvZptO3I/AAAAAAAAAfA/NZXCWizCtnoNpRLa8kZiiH_ZLAo-c3NwQCLcB/s1600/adc.jpg

Получается есть а-ж 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.

Здесь можно почитать подробнее.

До железа пока не добрался, надо будет пробовать и делать выводы.

0