eeprom-STK500

Тут обсуждаем все что связано с микроконтроллерами.

Модератор: gurvinok

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 14 дек 2016, 21:12

Скорее всего этот. Если да, то в axlib есть функции для работы с дисплеем.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: eeprom-STK500

Сообщение AVRIK » 27 дек 2016, 22:05

Приветствую! Достался мне некий не опознаваемый агрегат, предположительно микрофонный усилок нч. т.к. на нем просматривается микрофон "сосна" и далее залитый предположительно эпоксидкой корпус. Но вот для меня не понятная вещь! На усилок можно подать на один провод "массу", на второй провод "плюс" и третий провод "выход". А четвертый провод, что может быть? И как тестером можно определить что есть что?
Как ваш проект? Завершили?
Вложения
IMG_2428.JPG
IMG_2427.JPG

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 27 дек 2016, 23:29

Нужно вскрыть и посмотреть что внутри, а так можно гадать на кофейной гуще. С проектом полный треш, занят по самые помидоры.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: eeprom-STK500

Сообщение AVRIK » 02 янв 2017, 12:14

С Новым Годом Алексей! Здоровья, фарту и всех благ вам!
Надеюсь у вас все по плану и в этих планах найдется место для нашей встречи за бокалом пива! Когда у вас намечается свободное время? Если вы без машины, я могу подъехать в назначенное время и места, когда вам будет удобно. А если с этим нет проблем, подскажите когда можем встретиться и я скажу куда приехать. Есть мелкие вопросы которые требуют решения. Посидим, обсудим и совместим приятное с полезным!

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 03 янв 2017, 23:01

Я ща занят и мне не кабаков. Если что-то важное, то в личку.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: eeprom-STK500

Сообщение AVRIK » 04 янв 2017, 11:33

Дааа! Огорчили вы меня, но да ладно! БОГ с ним! Тогда извините, буду вас беспокоить по-чаще, может быть смешными для вас "проблемами", но куда деваться! Удачи!

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: eeprom-STK500

Сообщение AVRIK » 07 янв 2017, 03:11

Приветствую! Решил начать с малого, простого, и вот не смог прочитать! Вернее, думаю прочитать смог, а понять происходящее, нет! Тема: работа термометра по интерфеису onewire. Нашел пример, а там такая запись:
#define ONEWIRE_DDR DDRB
#define ONEWIRE_PIN_NUM PB0

// Устанавливает низкий уровень на шине 1-wire
inline void onewire_low() {
ONEWIRE_DDR |= _BV(ONEWIRE_PIN_NUM);
}


Это конечно часть кода и понимаю ее я так:
#define переименовывает в понятный машинный код, произвольный, авторский текст.
т.е. ONEWIRE_DDR компилятором воспринимается как DDRB, и.т.д.

inline void onewire_low() {}, создается функция с названием onewire_low, которое судя по комментарию , устанавливает низкий уровень на шине 1-wire в результате обработки кода прописанного в фигурных скобках данной функции, а именно
{ ONEWIRE_DDR |= _BV(ONEWIRE_PIN_NUM);}
Данный код читаю так: устанавливаем PINB0 в лог «1», и оператором «или» присваиваем значение DDRB.
Иначе: PORTB=0b00000001; DDRB=0b00000001; В результате обработки кода, получим «0»-ую ножку порта В, ориентированного на выход(DDRB=0x1) и с логическим «1» на выходе.
Простите, а как-же этот код устанавливает низкий уровень на шине 1-wire?

Ссылка: http://aterlux.ru/index.php?page=article&art=1wire

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 07 янв 2017, 12:39

Простите, а как-же этот код устанавливает низкий уровень на шине 1-wire?
Такие вопросы возникают у тех, кто не умеет отделять мух от котлет и не хочет читать документацию.
Программирование и физический уровень 1W это разные вещи. Шина 1W работает по принципу монтажное И. То есть когда линия отпущена, то на ней появляется 1, а когда нужно передать 0, то линию насильно прижимают к земле. 1 висит из-за подтягивающего резистора на 4,7К к плюсу питания.

Что такое ONEWIRE_DDR |= _BV(ONEWIRE_PIN_NUM);

Ноги растут из атмеловской библиотеки тулчейн. Там есть макрос выбора бита
#define _BV(bit) (1 << (bit))

То есть тоже самое можно написать в виде ONEWIRE_DDR |= (1 << ONEWIRE_PIN_NUM);
Как здесь появляется ноль. Читаем мануал на МК раздел GPIO и видим что для управления ножками в МК есть 3 регистра.
DDRx указывает на направление вход/выход
PINx читает данные с порта
PORTx выводит данные в порт

Если записать в регисть DDRx 0xFF то порт настраивается на выход, если 0x00 то на вход.
В режиме выхода все что будет записано в регистр PORTx, то и будет на ножках. Следует помнить лишь то, что при переводе порта на выход его ножки по умолчанию выводят лог 0.
Если записать в регистр DDRx 0x00, то порт переходит в режим чтения. Но здесь не все так просто. В данном режиме вход может иметь два состояния. Если записать в регистр PORTx 0x00, то все ножки будут висеть в воздухе и любая наводка приведет к записи в регистр DINx случайное значение, а если в регистр PORTx записать 0xFF, то ко всем ножкам подключатся внутренние подтягивающие резисторы к плюсу питания или как говорят буржуи пушап, появится лог 1. По умолчанию при переводе порта на чтение, ножки висят в воздухе и резистор отключен.

Возвращаемся к нашим баранам. Если вспомнить что шина это монтажное И, то переводя ножку на чтение на линии появляется единица, помним про резистор 4,7К. А если нужен ноль, то просто переводим ножку на выход и она по умолчанию прижимает линию в земле. Таким образом мы либо читаем линию, либо пишем в нее но при этом используем регистр направления. Отсюда вывод.

ONEWIRE_DDR |= _BV(ONEWIRE_PIN_NUM);

перепишем для понимания

DDRB |= (1 << PB0); Тем самым мы перевели пин 0 порта В на выход, а по умолчанию там 0. Значит линия прижалась к земле.

ONEWIRE_DDR &= ~_BV(ONEWIRE_PIN_NUM);

перепишем для понимания

DDRB &= ~(1 << PB0); Тем самым мы перевели пин 0 порта В на чтение, а по умолчанию в данном режиме пин висит в воздухе. Значит резистор 4,7К на линии подтянет ножку к логу 1.

Вот и вся примудрость.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: eeprom-STK500

Сообщение AVRIK » 08 янв 2017, 00:07

ONEWIRE_DDR |= _BV(ONEWIRE_PIN_NUM);

перепишем для понимания

DDRB |= (1 << PB0); Тем самым мы перевели пин 0 порта В на выход, а по умолчанию там 0. Значит линия прижалась к земле.



А почему по умолчанию, если пин 0 порта B условием _BV(ONEWIRE_PIN_NUM установлен в лог «1». DDRB установили на выход потому что присвоили значения пинВ0, но на пинеВ0 лог"1" остался, или нет? Если на пине "1" и он ориентирован на выход, как же он прижат??? Что подразумевает "прижат", то что на нем "0"-?

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 08 янв 2017, 00:17

А почему по умолчанию
А потому что когда в регистр DDRx записывается 0xFF, то в регистре PORTx лежит 0x00 и на выводах будут жесткие нули.
Если долго мучиться, может быть получится.

Ответить