Jump to content
GreenCrab

Atmega8 в качестве повторителя сигнала

Recommended Posts

Здравствуйте!
Стоит задача использовать atmega8 в качестве повторителя/блокиратора сигнала. Т.е. атмега должна просто повторить сигналы полученные на i2c, выводя их на любые другие две ножи.
Можно просто написать программу, которая будет, в бесконечном цикле, снимать сигнал с пина и ставить такой-же на дублирующую ножку, но я не уверен, что такое решение оптимальное. Есть ли возможность как-то настроить атмегу, чтобы две ножки были соединены в одну цепь ? 

REPEATER должен либо пропускать сигнал от i2c к RECEIVER, либо нет. 

Capture.PNG

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

@Никитос, плохая идея. Во-первых используются нестандартные имена вроде PORTB.5. Во-вторых, код переусложнен.

В данном случае достаточно

PORTB = PINC;

Разумеется, при приведенной схеме, когда PC0-PC3, PC6 висят в воздухе.

Share this post


Link to post
Share on other sites

ПОвторителя/блокиратора, но вы сейчас говорите только о повторителе. В каком случае сигнал будет блокироваться, а в каком пропускаться дальше? мОжет сначала записать сигнал в буфер, если прошел проверку - отправляем сигнал дальше, не прошел - стираем что б не осталось мусора.

Share this post


Link to post
Share on other sites
                     

Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino

Платы Nucleo и платы расширения X-NUCLEO от STMicroelectronics можно интегрировать в платформу Arduino с помощью библиотеки STM32duino. Связка плат Nucleo и платформы Arduino, и наличие готовых библиотек – представляет удобный инструмент для создания прототипов и конечных приложений в условиях ограниченного времени. Статья содержит пошаговые инструкции по установке библиотек и запуску примеров для Nucleo.

Подробнее...

PORTB = PINC & enable; //enable не 1 бит, а маска: биты 4 и 5. Но можно просто 0x00/0xFF

Тоже мне нашлась проблема. 3 такта на весь повторитель.

Хотя проще было поставить микросхему низкой степени интеграции: 4х2И-НЕ, 4х2ИЛИ-НЕ, буфер или инвертор с Z-состоянием, аналоговые ключи (вроде КТ3)

Share this post


Link to post
Share on other sites

@COKPOWEHEU PORTB = PINC заберет все два порта, затратно... зато просто в написании:)

if(PINB.0 == 1){
	if(PINC.4 == 1)
		PORTB.4 = 1;
		else
		PORTB.4 = 0;
	if(PINC.5 == 1)
		PORTB.5 = 1;
		else
		PORTB.5 = 0;
}

Если на ноге B0 висит плюс, то МК транслирует. Если минус - не транслирует)))))

Конечно так не пишется, но для разового проекта попрет:D

На счет нестандартных имен - согласен,это под великий и ужасный CVAVR:D

Edited by Никитос

Share this post


Link to post
Share on other sites

Я выше какую то чушь написал!))))))))

/*******************************************************
Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 1,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*******************************************************/

#include <mega8.h>

void main(void)
{
DDRB=(1<<DDB5) | (1<<DDB4);

while (1)
      {
		if(PINB.0 == 1){
		PORTB.4 = PINC.4;
		PORTB.5 = PINC.5;
		}
		else
		{
		PORTB.4 = 0;
		PORTB.5 = 0;
		}
	  }
}

5b923c4e7c9e6_.thumb.png.96f51e682a252cb13f78f6a4cc392c23.png

Edited by Никитос

Share this post


Link to post
Share on other sites

Спасибо за ответы, но подобные решения я уже пробовал.
Атмега является звеном между i2c master и i2c slave. Ее предназначение - расширение диапазона адресов. Т.е. я отправляю сигнал "открыть" на одну из таких атмег и она транслирует сигнал дальше.
Проще говоря, за атмегой1 есть устройство с адресом 0x33 и за атмега2 есть устройство с таким адресом (см. картинку). Нужно обратиться (и получить ответ!) к одному из них. Потому вариант PORTB = PINC не подходит. Ведь slave тоже изменяет sda.
К тому-же, если продублировать только scl, то slave не поймет команду. Видимо, атмега слишком долго выполняет инструкции и получается рассинхрон.

Я хотел узнать, есть ли в атмегах какой-то магический регистр, который позволит замкнуть (буквально) две ножки между собой, чтоб сигнал проходил без задержек и в обе стороны. Вариант "проводок", разумеется, не подойдет. Разве что кто-то знает, как паять и отпаивать его средствами С :D
 

Capture.PNG

Share this post


Link to post
Share on other sites

@GreenCrab реле поставь:) обращаешься к одному мк,подключил к нему линию,обращаешься к другому- от первого отключил и к другому подключил))

5b9249a13ed7f_.thumb.png.54ac6fe22f082f2abda62ab4372a59e6.png

Своего рода ChipSelect, можно поставить дешифратор и расширить до огромного количества:)

Только усиление сигнала не происходит)

Edited by Никитос

Share this post


Link to post
Share on other sites

ога в i2c насколько я помню 128 устройств на одной шине - неужели мало?

Share this post


Link to post
Share on other sites

@Никитос В итоге я что-то похожее и сделал. Только без реле. Теперь меги-хабы просто дают 0 на линию со своими слейвами, чтобы те начали слушать i2c. Ну, и еще одна линия, чтоб отключать ненужные хабы в момент общения мастера и слейвов.
Проблема, можно сказать, решена. Раз уж нет способа "замкнуть" ноги, что было бы еще проще, чем сделано сейчас.
 

Share this post


Link to post
Share on other sites

Суть неясна - тогда уж просто на полевике ключ сделать - подал напругу, ключ замкнулся и сигнал прошел. Убрал - сигнал не проходит.

Share this post


Link to post
Share on other sites

Что-то я не пойму, нафига такие сложности с трансляцией. Во-первых, без задержек это никак не получится. Во-вторых, МК, который транслирует команды должен не транслировать их, а понимать и сам общаться с магическим девайсом, ибо I2C подразумевает перенастройку вывода с выхода на вход, и обратно. В-третьих, зачем именно трансляция? Что мешает просто послать некую команду в МК, а он уже пнет девайс с адресом 33h? Тем более нужен еще и анализ полученных команд. Плюс связь, судя по всему, односторонняя.

Берем какую-нибудь TINY с 8 выводами, ставим возле каждого девайса 33h, задаем каждому МК свой адрес. Затем МК просто принимают команды от мастера и тупо рулят девайсами. Тут их вообще можно по UART объединить при желании. Это если там именно МК нужен. А так поставить микросхему свич или горсть транзилей и рулить шинами.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Вячеслав_НС
      помогите разобраться с кодом .(послать значение по шине TWI на ЦАП PCF8591) не работает в протеусе ...
      #define F_CPU 8000000UL 
      #include <stdlib.h>
      #include <avr/io.h>
      #include <util/delay.h>
      //*** ИНИЦИАЛИЗАЦИЯ ШИНЫ TWI ***/
      void TWI_Init(void)
      {
          // Установка тактовой частоты F_scl  = 100 кГц
          TWBR =32;
          TWSR &= (~((1<<TWPS1)|(1<<TWPS0)));
          TWCR |= (1 << TWEN);            // Разрешение работы TWI-модуля
      }

      /*** ЗАПУСК TWI ***/
      void TWI_Start(void)
      {
          TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
          while(!(TWCR & (1<<TWINT)));
          TWDR = 1001000; // передача адреса модуля PCF8591 в шину TWI
          TWCR=(1<<TWINT)|(1<<TWEN);
          while(!(TWCR & (1<<TWINT)));
      }
      /*** ОСТАНОВКА TWI ***/
      void TWI_Stop(void)
      {
          TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
          while(TWCR & (1<<TWSTO));        // Ожидание завершения передачи условия СТОП
      }
      /***ПЕРЕДАЧА ДАННЫХ В TWI***/
      void TWI_WriteByte(uint8_t data)
      {
          TWDR = data;                    // Загрузка данных в TWDR
          TWCR=(1<<TWINT)|(1<<TWEN);
          while(!(TWCR & (1 << TWINT)));    // Ожидание завершения передачи данных
      }
      /*** ПЕРЕДАТЬ ЗНАЧЕНИЕ В PCF8591 ***/
      void PCF8591_get(void)
      {
          TWI_Start();                // Запуск TWI
          TWI_WriteByte(0x40);        //включаем цап
          TWI_WriteByte(100);            // запись в ЦАП значения 100
          TWI_Stop();                    // Остановить TWI
      }            
          int main(void)
      {
          TWI_Init();    
          while (1)
      {
              PCF8591_get;
             _delay_ms(50);
        }
      }
    • By LegionKC
      Добрый день.
      Экспериментирую с платой TP4056 и MK ATmega8, конкретнее - пытаюсь собрать простенькое зарядное устройство с выводом параметров при зарядке/разрядке на АЦП МК. Для измерения тока нашел ACS712. Думаю, что получится выводить ток при зарядке (т.е. когда идет питание на TP4056 и нагрузка отключена) и при разрядке (питание выключено, нагрузка подключена). Нагрузка - резистор. Возникла проблема с измерением напряжения на АКБ. Вернее, проблема с отсутствием идей как это сделать. Может какую-нибудь схему делителя напряжения нужно сделать? Прошу помочь советом. Схему из пэинта прилагаю.
      Спасибо.
       

    • By pndbr
      Здравствуйте. Может у кого есть печатная плата для отладочной платы на atmega8,32,128 в корпусе tqfp или attiny2313.
      Накопилось много распая с незалоченными камнями и очень хочется пустить их в дело и наконецто научиться хоть как-то программировать. Рисовать печатку самому не хватает опыта. Может у кого есть наработки? Прошу поделиться.
      Поиск выдает только отладочные платы в дип. А если и есть tqfp то в ардуиновском формате т.е без доп перефирии (же дисплеев,клавиатуры,7 сегментных индикаторов,потенциометров,энкодеров..и.т.д)
    • By Ruslik334
      Уважаемые электроники-программисты. Кто силен в CVAVR? Или может кто подскажет где уже есть. 
      Есть вот такой прогресс бар https://radioparty.ru/programming/avr/c/361-lesson-lib-lcd написанный в Atmel Studio. Но у меня весь проект в CVAVR, попытался привязать его, но не поддается он мне. Помогите или дайте вектор. На Ардуино много, но там для меня совсем темень
    • By voltex
      Всем привет! Подскажите, пожалуйста, как правильно считать данные с внешней eeprom по шине spi, в данном случае 25LC256.
      Написал код ссылаясь на даташит. Собрал схему в протеусе, подключил spi отладчик и вот что получил в итоге. Так же не могу проверить получается записать данные в память или нет. Весь код прикрепил.
       

      main.c
  • Сообщения

    • Добрый вечер! Закончил очередной девайс. Идеология: - доступные компоненты, которые можно купить в срок максимум неделя - простая схемотехника - 2х слойная плата - наличие повторителя для наушников на плате ЦАП - наличие выпрямителей на плате ЦАП Из минусов: - единственная долго доставаемая деталь - ИМС ЦАП. Но опять же, через Элитан ИМС ЦАП мне приехала меньше чем за неделю. Схема: ,   На плате присутствует: супервизор питания(практика показала что лишние 160-200 р. сильно улучшают стабильность запуска платы) ,гальваническая изоляция для I2S и I2C, питание на AMS1117/LM317/LM337 и питание VDD ЦАПы на LP2985, LPF 3 порядка на LM4562 и повторитель на TPA6120A2. Фильтрация питания - как рекомендовал Walter, за что огромное спасибо!. Входной разъем I2S/I2C - Amanero. Плата позволяет включать ИМС ЦАП как в Parrallel control mode так и в Software. Для конфигурирования на плате присутствуют резисторы подтяжек к VDD и VSS соответственно. Я настроил управление по I2C, немного пришлось повозиться с прошивкой аманеро, в итоге работает   Собранная плата:   Я использовал конденсаторы WIMA, но в теории можно использовать керамику NP0, с шагом выводов 5 мм. Фильтр я немного модифицировал и добавил индуктивности после первого резистора, на досуге гляну осликом что до и после (лабораторная работа  ). ОУ можно любой по вкусу (сдвоенный). Звучание LM4562 по сравнению с тем же NE5532 показалось более мягким в области басов. Питается плата от одного трансформатора ТП112-4, разогрев терпимый. На входе простейший фильтр на синфазном дросселе, резисторе и конденсаторе. Вид на "бумажке":   Замеры. Для замеров использовал Жульетт, АЦП АК5385 похоже не позволяет в полной мере оценить характеристики получившейся платы.   Результат SINAD=111 дБ чуть чуть не дотягивает до паспортных значений (THD+N=-113 дБ), хотя это может быть просто лимит измерительной карточки, кабель у меня простой, РК 75, вполне возможно если сделать кабель получше/короче то и 50 Гц пропадет, хотя там ниже -130 дБ, в принципе можно особо не беспокоиться. Когда разберусь с драйвером на аманеро, нужно будет сделать IMD Sweep Test, для сравнения с качественными стабилизаторами на TPS7A. Звучание. По сравнению с платой первой версии разница только в басе и то, дело скорее всего в том, что на первой плате NE5532. В остальном замечаний нет, хочется слушать. В принципе осталось найти подходящий корпус, наверное закажу с Али, есть несколько моделей которые в подошли бы. Всё что хотелось рассказать. Сейчас месяц другой буду отслушивать/искать баги.  
    • Естественно, ничего. Ибо к тому времени отошёл от работы в Microsoft и все последующие выпуски Windows выходили без него. В Win8 и далее в старших редакций "из коробки" доступен настольный вариант Hyper-V, и мне он намного важнее, чем все косметические изыски UI и мультимедийные погремушки. Ну и что? У нас в захолустной конторке пару десятилетий тарахтел сервер под Win NT4 Server SP6a для управления ленточной библиотекой и был торжественно погребён на складе после кончины библиотеки и перевода резервного копирования полностью на дисковые SAN.  Исправлены известные в период поддержки ОС ошибки. Что там ещё осталось, неизвестно, да уже и безразлично. Основной доход уже давно не от выпуска серверных и настольных ОС, а от огромного и многоголового, аки гидра, облачного сервиса. В осциллоскопах HP Infinium серий 548xx именно Win95 работал. И пара живых в филиале видел, аж слеза навернулась  Более поздние модели уже покупались с WinXP Embedded на борту.
    • Низкое быстродействие.    См. меандр.
    • Ну почему сразу лишний: мк, работа преобразователя. мк, счётчик + работа с данными. Разгружаем мк-счётчика от ненужной работы.  
    • А Windows 95 не используют?
    • Если надо управлять большими токами(2А и больше) лучше между TL494 и затворами полевиков включить драйвер. Например MC34151PG(2 драйвера нижнего плеча). Включение ест в даташите. Входы  MC34151PG "подтягиваются к + питания резисторами (~ 1КОм), выходы соединяются с затворами полевиков через резисторы ~ 47 Ом. Если токи в пределах 3 А можно без драйвера, но надо уменьшить сопротивления резисторов  R4, R5  до 240  Ом, между выходами TL494 и затворами транзисторов включить  резисторы  ~ 47  Ом. При уменьшении сопротивлений можно и при больших токах не ставить драйвер, но при этом частота преобразователя должна быть не слишком большая, или увеличить защитный интервал.
    • Мне такая странность не встречались. Скорее всего совпадение. Цоканье - попытки запуска блока питания. Пробило что-то в нем или в строчной развертке или и то и другое и не только. А первопричиной послужило, вероятно, - умирание какого-то электролитического конденсатора в блоке питания или трещина в пайке.
×
×
  • Create New...