Страница 3 из 6

Re: Светодиодный индикатор в примусе.

СообщениеДобавлено: 16 мар 2010, 15:40
slav0n
Рассекречу конечно. Протокола как такового еще нет. Сейчас сделано так:
адрес устройства - 180
принимаем два байта.
во втором инфа для индикатора.

Обработка происходит в прерывании.
Код: Выделить всё
ISR(SIG_INTERRUPT0)
{
  unsigned char data_byte;
  unsigned char i;   

  while(bit_is_clear(I2C_PORTIN,SCL_PIN))return;

  while(bit_is_set(I2C_PORTIN,SCL_PIN)); //ждем пока клок высокий

//========== Принимаем байт адреса===================
  data_byte = 0;
  i = 8;
do{
  while(bit_is_clear(I2C_PORTIN,SCL_PIN)); //ждем пока клок низкий
  data_byte <<= 1; 
  if(bit_is_set(I2C_PORTIN,SDA_PIN))data_byte |= 1;
  while(bit_is_set(I2C_PORTIN,SCL_PIN)); //ждем пока клок высокий 
  }while(--i);

if(data_byte == 180)
{
  I2C_DDR |=_BV(SDA_PIN);  // порт на вывод
  I2C_PORT&=~_BV(SDA_PIN);  // выводим ноль
 
  while(bit_is_clear(I2C_PORTIN,SCL_PIN)); //ждем пока клок низкий
  while(bit_is_set(I2C_PORTIN,SCL_PIN)); //ждем пока клок высокий 
 
  I2C_DDR &=~_BV(SDA_PIN);  // отпускаем СДА
  I2C_PORT&=~_BV(SDA_PIN);
}else goto out;
 
//========== Принимаем 1-й байт ===================     
data_byte = 0;
i = 8;
do{
  while(bit_is_clear(I2C_PORTIN,SCL_PIN)); //ждем пока клок низкий
  data_byte <<= 1; 
  if(bit_is_set(I2C_PORTIN,SDA_PIN))data_byte |= 1;
  while(bit_is_set(I2C_PORTIN,SCL_PIN)); //ждем пока клок высокий 
  }while(--i);

  I2C_DDR|=_BV(SDA_PIN);  // порт на вывод
  I2C_PORT&=~_BV(SDA_PIN);  // выводим ноль

  while(bit_is_clear(I2C_PORTIN,SCL_PIN)); //ждем пока клок низкий
  while(bit_is_set(I2C_PORTIN,SCL_PIN)); //ждем пока клок высокий 
 
  I2C_DDR&=~_BV(SDA_PIN);  // отпускаем СДА
  I2C_PORT&=~_BV(SDA_PIN);

  /*   
      if(data_byte<2)  {PORTB = 0b11110111;PORTD = 0x40;}
else if(data_byte<4)  {PORTB = 0b11100011;PORTD = 0x40;}
else if(data_byte<6)  {PORTB = 0b11000001;PORTD = 0x40;}
else if(data_byte<8)  {PORTB = 0b10000000;PORTD = 0x40;}
else if(data_byte<16) {PORTB = 0b00000000;PORTD = 0x00;}
else if(data_byte>110){PORTB = 0b11111111;PORTD = 0x00;}

*/


//========== Принимаем 2-й байт ===================     
data_byte = 0;
i = 8;
do{
  while(bit_is_clear(I2C_PORTIN,SCL_PIN)); //ждем пока клок низкий
  data_byte <<= 1; 
  if(bit_is_set(I2C_PORTIN,SDA_PIN))data_byte |= 1;
  while(bit_is_set(I2C_PORTIN,SCL_PIN)); //ждем пока клок высокий 
  }while(--i);

  I2C_DDR|=_BV(SDA_PIN);  // порт на вывод
  I2C_PORT&=~_BV(SDA_PIN);  // выводим ноль

  while(bit_is_clear(I2C_PORTIN,SCL_PIN)); //ждем пока клок низкий
  while(bit_is_set(I2C_PORTIN,SCL_PIN)); //ждем пока клок высокий 
 
  I2C_DDR&=~_BV(SDA_PIN);  // отпускаем СДА
  I2C_PORT&=~_BV(SDA_PIN); 
   
      if(data_byte<1){PORTB = 0b11110111;PORTD = 0x40;}
else if(data_byte<2){PORTB = 0b11100011;PORTD = 0x40;}
else if(data_byte<3){PORTB = 0b11000001;PORTD = 0x40;}
else if(data_byte<4){PORTB = 0b10000000;PORTD = 0x40;}
else if(data_byte<8){PORTB = 0b00000000;PORTD = 0x00;}
else if(data_byte>8){PORTB = 0b11111111;PORTD = 0x00;}
else if(data_byte=8){PORTB = 0b11111111;PORTD = 0x40;}
 
out: 
  while(bit_is_clear(I2C_PORTIN,SCL_PIN)); //ждем пока клок низкий
}


Для народного творчества надо договориться - что, и как выводить в байты на передачу.

Предлагаю, например, в первом - байт уровня, во втором - SNR.
И творите в приставке с ними всё что вам угодно. Хотите линейную шкалу , хотите в цифрах.
Можно взять мегу8, и задействовать аппаратный TWI. Это будет даже лучше, чем программная реализация шины I2C.
В общем - поле для творчества.... :pri_vet:-:

Re: Светодиодный индикатор в примусе.

СообщениеДобавлено: 29 мар 2010, 15:27
777z
Если возможно в будущем поправить.
При входе в режим поиска индикатор начинает светиться, а при выходе не гаснет до выключения.
И если возможно добавить в меню настроек отключение индикатора, как это сделано у зуммера.

СообщениеДобавлено: 26 авг 2010, 16:26
slav0n
Замечена неработоспособность приставки с внешней памятью спектрума.
Здесь была попытка устранить - viewtopic.php?p=2174#p2174
Еще предлагаю попробовать подцепить к тини кварц на 10-20 МГц и выставить соответственно фузы.

СообщениеДобавлено: 27 авг 2010, 10:08
slav0n
Вот придумал такую схему. Вместо микроконтроллера используется простой сдвиговый регистр 74HC164. В ближайшее время сделаю под неё прошивку для спектрума.

СообщениеДобавлено: 29 авг 2010, 17:19
slav0n
Как и обещал прошивка с поддержкой новой схемы светодиодного индикатора точной настройки.

СообщениеДобавлено: 29 авг 2010, 19:34
slav0n
Немного поэкспериментировал...
Вот слегка измененная схема индикатора. RC цепь позволяет подключиться к примусу всего тремя проводами.
И соответствующая прошивка для спектрума.

СообщениеДобавлено: 29 авг 2010, 21:15
tssssu
Подскажите, а реально ли к 168 примусу эту приставку прикрутить?
1 нога там свободна, но думаю с ней это не выдет, еще есть 25 нога, или может освободить 14 или 18 ногу и задействовать?
Или может там уже места нет?

СообщениеДобавлено: 30 авг 2010, 04:10
slav0n
tssssu писал(а):а реально ли к 168 примусу эту приставку прикрутить?1 нога там свободна, но думаю с ней это не выдет, еще есть 25 нога

Сделаю на 25 ножку.

СообщениеДобавлено: 03 сен 2010, 14:04
slav0n
Вот здесь viewtopic.php?p=2275#p2275 поступило предложение расширить функциональность приставки. Вот предварительная схема. В ней надо продуманно подключить индикаторы чтобы меньше было мороки при разводке печатки. Если кто возьмется за это дело и воплотит в железе, то за прошивкой на спектрум дело не станет :mi_ga_et:

СообщениеДобавлено: 03 сен 2010, 16:42
technik08
можно 2 мегу прикрутить
хочеш светодиоды хочеш понорама

думаю разбобить свой китайский светодиодный
место блого есть

СообщениеДобавлено: 03 сен 2010, 22:07
slav0n
к чему вторая мега? тини уже прикручивать попытались...
Кто ж прошивки писать будет?

СообщениеДобавлено: 04 сен 2010, 08:10
technik08
пытался, что у меня зависал
надо мне это довести до ума
но у китайца шкала более информативна

СообщениеДобавлено: 06 сен 2010, 18:21
slav0n
Вот вам основная схема с которой будем дальше продвигать LED индикатор.
Рассчитана на семисегментники с общим катодом, просто у меня такие. Если надо - переделаю для общего анода.

СообщениеДобавлено: 06 сен 2010, 19:33
Guslik
slav0n почему два индикатора сегмента а не три???????????????
Вроде у нас максимум сигнала за 210????

СообщениеДобавлено: 06 сен 2010, 19:49
slav0n
будем дублировать большие цифры и градусы спутника при его переключении.
Но в принципе нет ограничений! Можно и третью цифру прикрутить. Да хоть десять! Только на каждую цифру надо отдельную 164-ю с отдельным семисегментником.

СообщениеДобавлено: 07 сен 2010, 20:10
slav0n
Индикатор по последней схеме успешно запущен.
Можно его сделать как внешнее устройство и подключать через любой 3-х контактный разъем
Вот кино его работы. Спаяно навесным монтажем.

СообщениеДобавлено: 08 сен 2010, 05:39
ssu-05
всё классно! работает так как надо! третья цифра ни к чему! а в корпус его засунуть нетрудно, есть малогабаритные индикаторы! например: http://www.chipdip.ru/product/als314a.aspx
а вот количество микросхем регистров сдвига неплохо бы сократить, а самое главное необходимо чтобы приставка выключалась через меню, может ключик по питанию приладить?

СообщениеДобавлено: 08 сен 2010, 09:38
Guslik
SlaV0n выложи схему как подключить цифровой индикатор :du_ma_et:

СообщениеДобавлено: 08 сен 2010, 11:28
slav0n
подключение элементарно:
Корпус,
+5В,
и нога PA4

СообщениеДобавлено: 08 сен 2010, 13:17
Guslik
Дане!!!!!!! как соединил индикатор и регисторы???