Страница 569 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн июн 20, 2016 13:02:56
service47
В Proteuse неправильно задается рабочая частота AVR. В файле прошивки задана частота 14МГц для ATmega16A, остальные настройки фабричные, схема для проверки работоспособности мигания светодиодом. В свойствах ATmega16 выставляю:
CKOPT = (1) Unprogrammed
BOOTRST = (1) Unprogrammed
CKSEL Fuses = (0001) Int. RC 1MHz
Boot Loader Size = (00) 1024 words
SUT Fuses = (10)
Clock Frequency = 14000000
В программе светодиод мигает каждые 500мс, соответственно через каждые 500мс сбрасывается WDT, в протеусе же выдает ресет ATmega каждые 2 с лишним секунды, так и настроен WDT.
Как настроить протеус, чтобы частота совпадала с частотой прошивки?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн июн 20, 2016 14:36:03
ARV
CKSEL Fuses = Ext.Crystal High Freq.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн июн 20, 2016 15:36:05
service47
Теперь светодиод мигает вместо через 14 сек. (как было при CKSEL Fuses = (0001) Int. RC 1MHz), после функции delay_ms(500);, а через 2 сек. ATmega настроена на 14МГц.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт июн 21, 2016 10:45:07
service47
Есть подпрограмма для шины I2C, как сделать, чтобы от мастера (ATmega64) пересылались несколько переменных на slave (ATmega16).
// TWI ATmega64
TWAR=0x0E;
TWBR=0x3E; //dec=3E для Fclk=14MHz; TWBR=((F_cpu/F_scl)-16)/(2*4^TWPS) => TWBR=((14000000/100000)-16)/(2*4^0)=62
TWCR=0x04;
//TWSR=0x00; //TWPS1=0, TWPS0=0
//TWDR=0x00;
// TWI ATmega16
TWAR=0x0E;
TWBR=0x3E;
TWCR=0x05;
//TWSR=0x00; //TWPS1=0, TWPS0=0
//TWDR=0x00;
Спойлер
Код: Выделить всё
//ATmega64 pins
/*******************************************************************************************
* Подпрограммы управления шиной I2C *
*
*******************************************************************************************/
/*******************************************************************************************
* Объявление констант и включения заголовочных файлов для системы TWI *
*
*******************************************************************************************/
#define SDA_PORT PORTD_Bit1
#define SCL_PORT PORTD_Bit0
#define SDA_PIN PIND_Bit1
#define SCL_PIN PIND_Bit0
#define SDA_DDR DDRD_Bit1
#define SCL_DDR DDRD_Bit0
//Инициализация программной шины I2C
void i2c_init_soft(void)
{
SDA_DDR=0; //изначально линии SDA
SCL_DDR=0; //и SCL в высокоимпедансном состоянии
SDA_PORT=0; //и на них поддерживается за счет внешних резисторов
SCL_PORT=0; //высокий уровень
while (SDA_PIN==0)
{
counter_twi++;
if (counter_twi>=1000)
{
asm("wdr");
counter_twi=0;
break;
}
}
}
//Возвращает уровень линии SDA
unsigned char in_sda(void)
{
if(SDA_PIN==1)
return 1;
else
return 0;
}
//Устанавливает линию SDA на вход или выход
void sda_io(unsigned char io_c)
{
if(io_c)
SDA_DDR=1;
else
SDA_DDR=0;
}
//Устанавливает уровень на линии SCL
void scl_set(unsigned char set_c)
{
if(set_c)
{
SCL_PORT=1;
}
else
{
SCL_PORT=0;
}
}
//Устанавливает уровень на линии SDA
void sda_set(unsigned char set_c)
{
if(set_c)
{
SDA_PORT=1;
}
else
{
SDA_PORT=0;
}
}
//Задержка
void i2c_delay(void)
{
delay_us(10);
}
//Формирует условие "СТАРТ"
void i2c_start_soft(void)
{
sda_io(0);
while (SDA_PIN==0)
{
counter_twi++;
if (counter_twi>=100000)
{
counter_twi=0;
break;
}
}
SCL_DDR=1;
sda_io(1);
sda_set(1);i2c_delay();
scl_set(1);i2c_delay();
sda_set(0);i2c_delay();
scl_set(0);i2c_delay();
delay_us(20);
}
//Формирует условие "СТОП"
void i2c_stop_soft(void)
{
sda_io(1);
scl_set(0);i2c_delay();
sda_set(0);i2c_delay();
scl_set(1);i2c_delay();
sda_set(1);i2c_delay();
sda_io(0);
delay_us(20);
}
//Посылка байта
char i2c_tx_soft(unsigned char byte)//write
{
char tx_ok;
sda_io(1);
for(unsigned char i=0;i<8;i++)
{
if(byte&0x80)
{
sda_set(1);i2c_delay();
}
else
{
sda_set(0);i2c_delay();
}
scl_set(1);i2c_delay();
scl_set(0);i2c_delay();
byte<<=1;
}
sda_io(0);i2c_delay();
scl_set(1);i2c_delay();
if (SDA_PIN==0)
tx_ok=1;
else
tx_ok=0;
scl_set(0);i2c_delay();i2c_delay();i2c_delay();
return tx_ok;
}
//Прием байта, если last_byte=0, то принимаем последний байт и подтверждение от мастера не нужно
unsigned char i2c_rx_soft(unsigned char last_byte)//read
{
unsigned char data=0;
unsigned char mask=0x80;
sda_io(0);
for(unsigned char i=0;i<8;i++)
{
scl_set(1);i2c_delay();
if(in_sda())
data=data+mask;
mask>>=1;i2c_delay();
scl_set(0);i2c_delay();
}
sda_io(1);i2c_delay();
if(last_byte)
{
sda_set(0);i2c_delay();
}
else
{
sda_set(1);i2c_delay();
}
scl_set(1);i2c_delay();
scl_set(0);i2c_delay();
return data;
}
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб июн 25, 2016 10:12:47
Chip115
Всем привет! Хочу К155ИД3 подружить с STM32F100. Дешифратор ТТЛ, питание (по справочнику) 5 В. Контроллер 3.3 В. Не хочется отдельно стабилизатор ставить на 5В ради одной микросхемы. Будет ли работать К155ИД3 от 3,3 В?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб июн 25, 2016 12:02:53
просто КОТ
ТТЛ этой серии строго на 5В по справочнику. Может конечно и сможет, но... Напряжения никто не регламентировал ему в таком режиме. Ни по входам, ни по выходим. Так что попробуйте на макете, а там уж как повезёт.
Вам бы вообще КМОП микросхемы. Типа 561 серии, или 1564...

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб июн 25, 2016 13:30:12
КРАМ
Chip115 писал(а):Хочу К155ИД3 подружить с STM32F100.
Ставите на каждом входе ИД3 подключенном к МК по обычному ключу (биполярному или полевому) с питанием ключа от 5 вольт и получаете инвертированные сигналы на входах ИД3. Надеюсь программно обеспечить инверсию на выходах МК для Вас проблем не составит.
ЗЫ. Правда все это как то бестолково...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб июн 25, 2016 19:21:49
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс июн 26, 2016 05:10:59
Chip115
Спасибо за ответы! ))
Да, бестолково. Но эта микра у меня тупо есть в наличии.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн июн 27, 2016 14:54:17
service47
При симуляции в протеусе с одного микроконтроллера пересылаются байты на другой. Первые два байта совпадают, то что помещено в регистр TWDR, то же самое и поступает на второй регистр TWDR, а вот третий байт пересылается 0х22, а принимается 0х45. Получается, что то что помещено в регистр передается по проводкам и поступает в регистр 2-го микроконтроллера, но там уже вместо 0х22 величина 0х45.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн июн 27, 2016 14:59:59
просто КОТ
А как ведут себя четвёртый и пятый? А если пересылать по два байта, с паузами?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн июн 27, 2016 15:09:53
service47
Всего 4 байта пересылается. Сначала байт адреса, затем команды записи, а после данные. Что интересно так это то, что 0х45 если смотреть в двоичном коде так это те же 0х22 только смещенные на один бит влево. Пример программы используется Атмелевский. В протеусе так:
S 10 A 10 A 22 N 08 A 84 A 42 A 21 A 10 N ...
10 - адрес
10 - команда записи
22 - данные
а вот тут должно быть 0х33.
Затем повтор.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт июл 01, 2016 09:45:15
____Eugene____
помогите решить задачку:
есть несколько микроконтроллеров и все они занимаются одним и тем же
синхронно включают и гасят диод
они могут быть объединены с одним мастером и периодически должны работать автономно (так что каждый должен тактироваться от своего источника)
Вопрос:как сделать так чтобы мастер периодически синхронизировал роботу.
при этом необходимо выявить устройство которое явно выбивается из частоты
то есть мастер получает числа от устройств
10
9
11
45
как найти того кто явно спешит
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт июл 01, 2016 14:35:18
GARMIN
Подать групповую команду сброс.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб июл 02, 2016 08:49:08
pyzhman
Большой и жирный +.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб июл 02, 2016 10:24:48
BOB51
Мастер только высылает команду/код синхронизации.
Каждый из периферийных контроллеров самостоятельно решает - применить или нет (в зависимости от текущего положентия программы).

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июл 20, 2016 22:35:33
Chettuser
Делаю в DipTrace плату, смутило обозначение ноги 19 у STM32F207:

Vdd_12 - это просто позиция Vdd под номером 12 или выведен внутренний источник 1,2 В? В RM0033 и datasheet на него ничего похожего нет. В CubeMX также обозначен просто как Vdd - надо полагать что это обычная питающая нога?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт июл 22, 2016 19:43:14
svetl1928
Ребята, извините за может дурной вопрос, в мк не очень силен.
Не получается у меня прошить Attiny13 в смд корпусе. Программатор USBASP, сто процентов рабочий, Atmega8 шьется без проблем. Но тинька вообще никак. И перемычку на программаторе ставил для низкой частоты, все равно. Выдает ошибку.
Вот что меня еще тревожит. Мегу я шью в отладочной плате, а тиньку просто на переходнике, сделанном специально для soic8 корпусов. Не нужна ли обвязка на тиньку, на Reset к примеру. Может в этом дело?
Система стоит Виндовс 8.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб июл 23, 2016 09:25:21
aam
А в Тиньке что раньше было? Если она Б/У и работала с внешним тактовым сигналом, то без него её прошить не выйдет, т. к. AVRы требуют работы тактового генератора при программировании. Вспоминайте где взяли. Если же Тиня новая, то по умолчанию там стоит внутренний RC на 9,6МГц и она без проблем шьется "прям так".
Reset я обычно подтягиваю к +5В резистором 10 кОм. Непомню, есть ли внутри подтяжка, но попробуйте для начала поставить резистор.
Да, а керамический кондер 0,1 мкФ по питанию на ногах Тини стоит? Это еще одна причина! Он обязателен. А лучше поставить 0,1 мкФ керамика || 10 мкФ тантал/электролит.
Проверьте правильно ли подключили MISO, MOSI, SCK, RESET? Не перепутали местами MISO и MOSI?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб июл 23, 2016 09:34:24
svetl1928
Тинька новая, с магазина только. Распиновку сто раз проверил, прозванивал от программатора к самой тиньке.
Вот не по питанию ни на Reset ничего нет, может и правда тут причина. Питание на тиньку подается с программатора.