Jump to content

    
Sign in to follow this  
zombi

ATxmega

Recommended Posts

на днях перестала видеться Xmega128A3.. после безуспешной (по не понятным мне пока причинам ) попытки завести уарт я лег спать.. с утра приехав в универ со всем добром.. хмегу дракон больше не видит.. хоть плата скорее макетка чем плата - но все прозвонил, питание проверил.. все ок... что могло ее убить - ума не приложу.. с мегами такого не бывало.. что я с ними только не делал...

Share this post


Link to post
Share on other sites

Была такая проблема . Правда Xmega128А1 запаял на макетку флюса не пожалел тактируется от внутреннего генератора подключил к программатору читается программируется через день не читается и не програмируется

Порядком помучился в конце поднял ее с макетки хорошо промыл запаял снова все заработало .

Share this post


Link to post
Share on other sites

хм.. ну флюс там был.. ЛТИ120.. попробую сдуть за заново поставить..

Share this post


Link to post
Share on other sites

ЛТИ-120 – активный флюс, предназначенный для пайки оксидированных деталей из медных сплавов без предварительной зачистки (меди и её сплавов, оцинкованных изделий, нержавеющих сплавов, нихрома и др.)

 

Паять таким флюсом электронику, Круто, что еще можно сказать.

Edited by Vasily_

Share this post


Link to post
Share on other sites

читаем этикетку:

применение: пайка элементов радиомонтажа, печатных плат, углеродистых сталей, цинка легкосплавными припоями.

 

состав: канифоль сосновая, спирт, активаторы.

 

далеко не первый чип паяный этим флюсом.. хотя я его и смывал спиртом...

Share this post


Link to post
Share on other sites
....

активаторы.

... хотя я его и смывал спиртом...

лучше сначала бензином, потом спиртом, потом мылом с водой щёточкой пройтись тщательно по всем контактам и то даже это не гарантирует смывку флюса из под корпусов микросхем и пассива.

Share this post


Link to post
Share on other sites

Интересно, а будут ли работать винстаровские или аналогичные индикаторы 16х2 с Xmega, если индикатор питать штатными 5В, но управляя уровнями 3.3В? Неохота ставить преобразователь уровней или искать индикатор с 3В питанием.

Share this post


Link to post
Share on other sites
Интересно, а будут ли работать винстаровские или аналогичные индикаторы 16х2 с Xmega, если индикатор питать штатными 5В, но управляя уровнями 3.3В?

У HD44780 при 5В питании логическая 1 >= 2.2В Так что работать должно, но есть еще целый зоопарк аналогов. А у них может быть что угодно с уровнями.

Share this post


Link to post
Share on other sites

И в обратную сторону резистор со стабилитрончиком поставить. У меня так xmega с max232 работает.

Share this post


Link to post
Share on other sites
Интересно, а будут ли работать винстаровские или аналогичные индикаторы 16х2 с Xmega, если индикатор питать штатными 5В, но управляя уровнями 3.3В? Неохота ставить преобразователь уровней или искать индикатор с 3В питанием.

LPC2103 (3.6В) работает.

Share this post


Link to post
Share on other sites

Возникла задача получения точного прерывания на Xmege по времени. Использую таймер с соответствующим счетом от кварца Crystal: 14.7456Mhz с умножением на PLL=2 т.е. частота тактирования 29491200 Гц, как откалибровать таймер?

Вот код: (сейчас все работает, но хочется повысить точность (желательно программно, т.е. не делать отдельно макетку для точного определения частоты кварца).

//ICC-AVR application builder  
// Target : ATxmega128A1
/// Crystal: 14.7456Mhz

#include <ioxm128A1v.h>
#include <AVRdef.h>

// Прерывание по окончанию счета
#pragma interrupt_handler iv_TCE1_OVF_isr:54
void iv_TCE1_OVF_isr(void) 
{
TCE1.CTRLA=0x00; // stop Timer 1 порта Е
TCE1.CNT.i=0x8F80;   // установка значения для счета
flag_rs232=1;
TCE1.CTRLA|=0x07; //start Timer 1 порта Е
}

//TIMER1 initialize - prescale: 1,  actual value:  1,000 Sec (0,0%)
// Тактовая частота таймера 29491200 Гц
//Деление на 1024 
// Установка для счета  0x8F80 
void timerE1_init(void)
{
TCE1.CTRLA=0x00; // stop Timer 1 порта Е
TCE1.CNT.i=0x8F80;   // установка значения для счета  
TCE1.INTCTRLA = 0x01; // Разрешение прерывания по переполнению - уровень низкий.
TCE1.CTRLA|=0x07; //start Timer 1 порта Е
}

void clock (void)// Функция установки тактирования от кварцевого генератора с умножением частоты в 2 раза
{
//Настраиваем тактирование
//Кварц 16МГц, умножение на 2
OSC.XOSCCTRL=0xc3; //Кварц(12-16),16К циклов (сb) или 256К -  (с3)
OSC.CTRL|=0x08; //Включаем кварцевый генератор
do{} while ((OSC.STATUS & 0x08)==0); //ожидаем готовности кв. генератора 
OSC.PLLCTRL=0xc2;// PLL от кварца, К=2
OSC.CTRL|=0x10;//Включаем PLL
do{} while ((OSC.STATUS & 0x10)==0); //Ожидаем готовности PLL 
//переключаемся на тактирование от PLL
asm ("ldi r16,0xd8"); 
asm ("ldi r17,0x04"); 
asm ("out 0x34,r16"); 
asm ("sts 64,r17"); 
OSC.CTRL&=~BIT(0); //выключаем внутренний генератор на 2 МГц, работаем от внешнего кварца
} 

void PMIC_SET (void)
{
    // Разрешение прерывания и установка какие прерывания разрешены
      CLI();
    PMIC.CTRL |= 0x07;   // Enable interrupts in the PMIC.
    SEI(); // Enable the global interrupt flag.

}

Share this post


Link to post
Share on other sites

Не совсем понятен Ваш вопрос.

Вы хотите всегда иметь на на выходе интервал, ближайший к 1сек при любом заранее неизвестном кварце?

Share this post


Link to post
Share on other sites
Не совсем понятен Ваш вопрос.

Вы хотите всегда иметь на на выходе интервал, ближайший к 1сек при любом заранее неизвестном кварце?

Вопрос вот чем: у нас есть регистр TCE1.CNT.i=0x8F80; // установка значения для счета

в котором необходимо установить число для счета таймера и зависит оно от частоты кварца (которое в общем может отличаться от того что на нем написано - немного естественно).

Есть решение аппаратное: делаем макетку, ставим кварц и частотомером вымеряем частоты кварца точно и на ее основе получаем значение регистра TCE1.CNT.i - при котором прерывание будет происходить максимально близко к 1 сек (грубо говоря 1,00000001 сек).

Я же хочу используя возможности Xmege - получиться ту же точность без вымерения кварца - возможно ли это ? (Если да - то каким путем).

Share this post


Link to post
Share on other sites

Вы получаете свою частоту 1Гц вначале за счет деления на 1024 в прескаллере, затем за счет деления на 28800 в самом счетчике.

Изменяя коэф деления на 1, например 27799, получим частоту 1.00003Гц

Можно объединить два таймера в один 32-х разрядный с общим коэф деления 29491200.

Тогда изменяя коэф деления на 1, например 29491199, получим частоту 1.00000003Гц. Т.е. шаг подстройки на три порядка более тонкий.

Правда сам я не пробовал соединять так таймеры, но даташит вроде такую возможность обещает.

Но в любом случае для оценки правильности интервала Вам потребуется какой-то внешний эталон частоты или времени.

Share this post


Link to post
Share on other sites
Вы получаете свою частоту 1Гц вначале за счет деления на 1024 в прескаллере, затем за счет деления на 28800 в самом счетчике.

Изменяя коэф деления на 1, например 27799, получим частоту 1.00003Гц

Можно объединить два таймера в один 32-х разрядный с общим коэф деления 29491200.

Тогда изменяя коэф деления на 1, например 29491199, получим частоту 1.00000003Гц. Т.е. шаг подстройки на три порядка более тонкий.

Правда сам я не пробовал соединять так таймеры, но даташит вроде такую возможность обещает.

Но в любом случае для оценки правильности интервала Вам потребуется какой-то внешний эталон частоты или времени.

Правильно я понимаю - частоту кварца можно узнать только внешне (программно из Xmege я ее не узнаю).

По таймерам понятно (если использовать 64-бит еще точнее можно сделать :rolleyes: )

Не хочется макетку делать.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this