Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Сообщение 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.
Как настроить протеус, чтобы частота совпадала с частотой прошивки?
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18794
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

CKSEL Fuses = Ext.Crystal High Freq.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Сообщение service47 »

Теперь светодиод мигает вместо через 14 сек. (как было при CKSEL Fuses = (0001) Int. RC 1MHz), после функции delay_ms(500);, а через 2 сек. ATmega настроена на 14МГц.
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Сообщение 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;
}





Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Всем привет! Хочу К155ИД3 подружить с STM32F100. Дешифратор ТТЛ, питание (по справочнику) 5 В. Контроллер 3.3 В. Не хочется отдельно стабилизатор ставить на 5В ради одной микросхемы. Будет ли работать К155ИД3 от 3,3 В?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

ТТЛ этой серии строго на 5В по справочнику. Может конечно и сможет, но... Напряжения никто не регламентировал ему в таком режиме. Ни по входам, ни по выходим. Так что попробуйте на макете, а там уж как повезёт.

Вам бы вообще КМОП микросхемы. Типа 561 серии, или 1564... :beer:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25981
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Chip115 писал(а):Хочу К155ИД3 подружить с STM32F100.
Ставите на каждом входе ИД3 подключенном к МК по обычному ключу (биполярному или полевому) с питанием ключа от 5 вольт и получаете инвертированные сигналы на входах ИД3. Надеюсь программно обеспечить инверсию на выходах МК для Вас проблем не составит.
ЗЫ. Правда все это как то бестолково...
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Спасибо за ответы! ))
Да, бестолково. Но эта микра у меня тупо есть в наличии.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Сообщение service47 »

При симуляции в протеусе с одного микроконтроллера пересылаются байты на другой. Первые два байта совпадают, то что помещено в регистр TWDR, то же самое и поступает на второй регистр TWDR, а вот третий байт пересылается 0х22, а принимается 0х45. Получается, что то что помещено в регистр передается по проводкам и поступает в регистр 2-го микроконтроллера, но там уже вместо 0х22 величина 0х45.
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

А как ведут себя четвёртый и пятый? А если пересылать по два байта, с паузами?
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Сообщение 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.
Затем повтор.
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт авг 31, 2010 18:26:35

Сообщение ____Eugene____ »

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

Вопрос:как сделать так чтобы мастер периодически синхронизировал роботу.
при этом необходимо выявить устройство которое явно выбивается из частоты
то есть мастер получает числа от устройств
10
9
11
45
как найти того кто явно спешит
Держит паяльник хвостом
Аватара пользователя
Сообщения: 960
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

Подать групповую команду сброс.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Большой и жирный +.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15802
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Мастер только высылает команду/код синхронизации.
Каждый из периферийных контроллеров самостоятельно решает - применить или нет (в зависимости от текущего положентия программы).
:roll:
Chettuser

Сообщение Chettuser »

Делаю в DipTrace плату, смутило обозначение ноги 19 у STM32F207:
Изображение
Vdd_12 - это просто позиция Vdd под номером 12 или выведен внутренний источник 1,2 В? В RM0033 и datasheet на него ничего похожего нет. В CubeMX также обозначен просто как Vdd - надо полагать что это обычная питающая нога?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 305
Зарегистрирован: Пт сен 03, 2010 19:29:56
Откуда: Планета Земля

Сообщение svetl1928 »

Ребята, извините за может дурной вопрос, в мк не очень силен.
Не получается у меня прошить Attiny13 в смд корпусе. Программатор USBASP, сто процентов рабочий, Atmega8 шьется без проблем. Но тинька вообще никак. И перемычку на программаторе ставил для низкой частоты, все равно. Выдает ошибку.
Вот что меня еще тревожит. Мегу я шью в отладочной плате, а тиньку просто на переходнике, сделанном специально для soic8 корпусов. Не нужна ли обвязка на тиньку, на Reset к примеру. Может в этом дело?
Система стоит Виндовс 8.
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

А в Тиньке что раньше было? Если она Б/У и работала с внешним тактовым сигналом, то без него её прошить не выйдет, т. к. AVRы требуют работы тактового генератора при программировании. Вспоминайте где взяли. Если же Тиня новая, то по умолчанию там стоит внутренний RC на 9,6МГц и она без проблем шьется "прям так".
Reset я обычно подтягиваю к +5В резистором 10 кОм. Непомню, есть ли внутри подтяжка, но попробуйте для начала поставить резистор.
Да, а керамический кондер 0,1 мкФ по питанию на ногах Тини стоит? Это еще одна причина! Он обязателен. А лучше поставить 0,1 мкФ керамика || 10 мкФ тантал/электролит.
Проверьте правильно ли подключили MISO, MOSI, SCK, RESET? Не перепутали местами MISO и MOSI?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 305
Зарегистрирован: Пт сен 03, 2010 19:29:56
Откуда: Планета Земля

Сообщение svetl1928 »

Тинька новая, с магазина только. Распиновку сто раз проверил, прозванивал от программатора к самой тиньке.
Вот не по питанию ни на Reset ничего нет, может и правда тут причина. Питание на тиньку подается с программатора.
Ответить

Вернуться в «Разные вопросы по МК»