Jump to content
GreenCrab

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

Recommended Posts

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

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

Capture.PNG

Share this post


Link to post
Share on other sites

Литиевые ХИТы Fanso: устойчивость к высоким температурам

Литиевые ХИТы для широкого круга применений, в том числе в промышленности, соответствуют требованиям современного рынка и способны работать в самых жестких условиях. Основные требования – это длительность хранения и работы, высокая удельная емкость, а также защита от воздействия таких внешних факторов, как температура и влажность. ЛХИТ превосходят по плотности энергии и нормальному напряжению другие элементы автономного питания: 2,9…3,6 В против 1,2…1,5 В

Читать статью...

@Никитос, плохая идея. Во-первых используются нестандартные имена вроде 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

ESP32-DevKitC-VB позволит быстро запустить ваше первое WiFi-приложение

Отладочная плата на основе одного из самых популярных WiFi-модулей Espressif ESP32-WROVER-B позволяет в самые короткие сроки запустить приложение с поддержкой беспроводных стандартов WiFi 802.11b/g/n и Bluetooth Classic/BLE. Ресурсов встроенного в модуль чипа ESP32-D0WD хватит для решения даже очень сложных задач.

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

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 кинуть адрес нужного устройства в виде байта данных?

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 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
    • By CUBE
      Не могу запустить асинхронный режим. 
      Ниже будет представлен код которым пытаюсь отладить. Там в 1 коде идёт работа от внутреннего источника таков (стоит 1МГц).  После 5 миганий таймер должен перейти в асинхронный режим и мигать с частотой в 1 Гц. У меня происходит 5 миганий потом ничего. Фьюзы менять пробовал, ничего не дало, сейчас дефолт. Корпус кварца к земле тянуть пробовал - безрезультатно. 
      Возможно что-то в подключении накосячил, если не видно на фото ниже, спрашиваете, нужно будет - нарисую схему. 
      Компилятор Atmel Studio 7
      Шью через Sind Prog 2.1.1 + USBasp 2.0
      Вот код: 
      .macro outi 
       ldi r16, @1 
       out @0, r16 
      .endm 
      .org $000 
      rjmp reset 
      .org $001 
      reti 
      .org $002 
      reti 
      .org $003 
      reti 
      .org $004 
      rjmp timer2_ovf 
      .org $005 
      reti 
      .org $006 
      reti 
      .org $007 
      reti 
      .org $008 
      reti 
      .org $009 
      reti 
      .org $00A 
      reti 
      .org $00B 
      reti 
      .org $00C 
      reti 
      .org $00D 
      reti 
      .org $00E 
      reti 
      .org $00F 
      reti 
      .org $011 
      reti 
      .org $012 
      reti 
      .ORG INT_VECTORS_SIZE 
       
      reset: 
      .equ portout=portd 
      .equ ddrout=ddrd 
      .def led=r17 
      .def mask=r18 
      .def counter=r19 
       outi spl,low(ramend) 
       outi sph,high(ramend) 
       
       outi ddrout, 0xff 
       
       outi tccr2, 0b00000111 
       outi timsk, 1«toie2 
       
        
       
        
       ldi led,1«5 
       ldi mask,1«5 
       sei 
      cycle: 
      cpi counter, 10 
      breq offtim 
       rjmp cycle 
       
      timer2_ovf: 
      inc counter 
       out portout, led 
       eor led, mask 
      reti 
        
      offtim: 
      outi timsk, 0«toie2 
      rjmp asinxron 
       
      asinxron: 
       outi assr, 0b00001000 
      back: 
       in r16, assr 
       cpi r16, 0b00001000 
       brne back 
       
        outi tccr2, 0b00000101 
        outi tcnt2, 0 
        outi ocr2, 0 
        outi timsk, 1«toie2 
       
       
      m1: 
      rjmp m1


      Верх меги на фото слева. 
  • Сообщения

    • С уменьшением тока более чем в два раза,так как если был 60 Вт,так и останется,если не переделывать полностью В домах стоит защита,должна стоять,требуйте от УК писменно ,на самом верхней точке крыши и заземлена....гугл подскажет если что,если нет,то компенсацию требуйте с УК ,предварительно созвав комиссию
    • ОС тут большой роли не играет. У меня винда 7-ка, но и под Linux системами отлично все работает. Движки то одинаковые независимо от ОС
    • Всем здравствуйте. чёт ни чего не пойму, страницы форума не перелистываются. Это у всех или только у меня глюк какой то.
    • Тут местное небыдло как раз и добивается развить горизонталь. По выбирают в республики ваххабитов и привет 90-е.
    • Продам радиатор-кулер с габаритами 125х95х15 мм. Есть несколько штук. 500 р/шт.
    • Да, прошу прощения, забыл указать. Цена 5000 руб.
    • для защиты от переполюсовки обычно ставится диод в обратном включении между входными клеммами. При переполюсовке он просто коротит нагрузку и сгорает. Или не сгорает, зависит от тока источника. На входную клемму обязательно ставится плавкая вставка. По крайней мере в промышленных нагрузках видел такую схемотехнику. Ставят еще ограничитель перенапряжения (P6KE***) Очень зачетно и грамотно у вас вышло. Без всяких гонок за ненормальными токами и охрененными мощностями. Было бы неплохо еще и схемку выложить, если она не секретная.
×
×
  • Create New...