реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Непонятки со 128 мегой
XVR
сообщение Jan 28 2011, 13:22
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
Ну во всяком случае я его не программировал,
А надо бы. По DS там при старте все 0, т.е. пин3 у вас запрограмирован на ввод, и на нем висит LED. Так что там может потечь что угодно.
Цитата
кстати надо заметить что моя неправильная "&= !_BV" не мешает управлять силовиками на другой плате абсолютно раздельно, так что нифига не 0х00 туда пишется, напутали что то знайки,
Блажен, кто верует sm.gif
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 28 2011, 13:31
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Цитата(Палыч @ Jan 28 2011, 16:22) *
Сверьтесь с каким-нибудь учебником (лучше - со стандартом) или проверьте на "железе" - будете удивлены...

Дык, "кстати надо заметить что моя неправильная "&= !_BV" не мешает управлять силовиками на другой плате абсолютно раздельно"

Цитата(XVR @ Jan 28 2011, 16:22) *
А надо бы. По DS там при старте все 0, т.е. пин3 у вас запрограмирован на ввод, и на нем висит LED. Так что там может потечь что угодно.
Блажен, кто верует sm.gif


Ну я пробовал же по разному, DDRA |= _BV(PA3); естественно добавлял )) Ну правда, не идиот я ))))
И да верую, могу прислать схему и код )) Можете, как написал Палыч - проверьте на "железе" - будете удивлены ))) И да, протеус тоже кушает такой код правильно, выключает таки один бит ))))

Сообщение отредактировал AlexTech - Jan 28 2011, 13:40
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 28 2011, 13:44
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(AlexTech @ Jan 28 2011, 16:31) *
Дык, "кстати надо заметить что моя неправильная "&= !_BV" не мешает управлять силовиками на другой плате абсолютно раздельно"
Возможно, что правильная "&= ~_BV" улучшила бы управление...
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 28 2011, 13:47
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Цитата(Палыч @ Jan 28 2011, 16:44) *
Возможно, что правильная "&= ~_BV" улучшила бы управление...

По настоятельным советам обязательно поменяю, раз так правильнее )
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 28 2011, 13:53
Сообщение #35


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AlexTech @ Jan 28 2011, 15:47) *
По настоятельным советам обязательно поменяю, раз так правильнее )Y
Не меняйте. Знайкам интересно наблюдать, как вы получаете по лбу граблями, которые сами же любовно полируете.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 28 2011, 13:56
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(AlexTech @ Jan 28 2011, 16:31) *
И да, протеус тоже кушает такой код правильно, выключает таки один бит ))))
Вы чуть меня не убедили, что я сошел с ума. Пришлось ещё раз убедиться, что при "&= !_BV" обнуляется весь порт. Проверил на "железе". Протеусом я не пользуюсь, но попросил товарища проверить Ваше утверждение: "кушает такой код правильно, выключает таки один бит". Вы - неправы, протеус в данном случае с "железом" не расходится.
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 28 2011, 14:00
Сообщение #37


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Цитата(Сергей Борщ @ Jan 28 2011, 16:53) *
Не меняйте. Знайкам интересно наблюдать, как вы получаете по лбу граблями, которые сами же любовно полируете.

Да бросьте юродствовать, мы не в детском садике.
Мне не нужна неработающая поделка, а те платки которые и так работают не грех переделать правильно если так считают специалисты, хотя проблем с ними я и не вижу )

Цитата(Палыч @ Jan 28 2011, 16:56) *
Вы чуть меня не убедили, что я сошел с ума. Пришлось ещё раз убедиться, что при "&= !_BV" обнуляется весь порт. Проверил на "железе". Протеусом я не пользуюсь, но попросил товарища проверить Ваше утверждение: "кушает такой код правильно, выключает таки один бит". Вы - неправы, протеус в данном случае с "железом" не расходится.

Ну теперь вы меня убедили что с ума сошел я ))))), вечером приеду и буду разбираться почему у меня работает как мне надо и железо и протеус. Хотя код у меня с собой, никаких тильд там нет :/
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 28 2011, 16:06
Сообщение #38


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AlexTech @ Jan 28 2011, 16:00) *
Да бросьте юродствовать, мы не в детском садике.
Какое юродство, три человека вам разложили это выражение на элементарные действия и показали, что результатом по всем законам двоичной математики будет ноль во всем порту.
QUOTE
На улицах слякоть,
И дождик,
И град.
- Наденьте галоши, -
Ему говорят.

- Неправда, -
Не верит Фома, -
Это ложь... -
И прямо по лужам
Идет без галош.



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Vetal-Soft
сообщение Jan 28 2011, 16:14
Сообщение #39


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 16-06-05
Пользователь №: 6 074



laughing.gif
! - Логическая операция

~ - Побитовое отрицание (или побитовое НЕ, или дополнение) — это унарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Другими словами, на той позиции, где в двоичном представлении операнда был 0, в результате будет 1, и, наоборот, где была 1, там будет 0.

Проверьте, должно мигать smile3046.gif
Код
#include <avr/io.h>
#include <util/delay.h>

int main (void)
{
    DDRA = (1<<2) | (1<<3);
    while(1)
    {
        PORTA |= (1<<2) | (1<<3);
        _delay_ms(500);
        PORTA &= ~((1<<2) | (1<<3));
        _delay_ms(500);
    }
    return 0;
}


Сообщение отредактировал Vetal-Soft - Jan 28 2011, 16:45
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 28 2011, 16:50
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



это унарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Другими словами, на той позиции, где в двоичном представлении операнда был 0, в результате будет 1, и, наоборот, где была 1, там будет 0.

Вот это правильное объяснение... я и считал что это инверсия, но -
в общем посыпаю голову пеплом, в данном случае был не прав, не каюсь, но за спор приношу извинения, проверил все у себя - логика работы упоминаемой
платки не подразумевает отдельное отключение битов, только отдельное включение, поэтому выглядело все абсолютно работоспособно даже в протеусе
Палычу отдельное спасибо за конструктивные предложения без поучений и за фьюз М103С, все заработало )



Теперь мегавопрос для дальнейших споров ))))
Возможно ли написание некоего протокола с использованием i2c позволяющего динамически раздавать адреса слейв устройствам или хотя бы как-то позволить работать
нескольким устройствам с одинаковым адресом на одной шине?

Сообщение отредактировал AlexTech - Jan 28 2011, 17:07
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 28 2011, 17:42
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
Возможно ли написание некоего протокола с использованием i2c позволяющего динамически раздавать адреса слейв устройствам
Да, в стандарте SMBUS2.0 такой протокол описан. Но он требует специального железа на I2C слейве sad.gif
Если есть какое то априорное знание об устройствах на шине, то наверное можно придумать что то и без специального железа
Цитата
хотя бы как-то позволить работать нескольким устройствам с одинаковым адресом на одной шине?
Нет. Но можно разделить шины. Есть разные мультиплексоры, репитеры, екстендеры и пр (см например на I2C от NXP )
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 28 2011, 18:15
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Про мультиплексоры я знаю, да, к сожалению это решение не подходит ((
Априорным же знанием про усстройства является то, что это некие исполнительные девайсы построенные на тинке26 выступающей в роли слейва для i2c.
Соответственно адрес можно задать любой.
Первым приходит в голову нечто типа такого: в каждом девайсе рандомная задержка при старте, потом проверка какого то адреса, если он не занят берем себе, если занят проверяем следующий.
Ну и в финале мастер после бОльшей задерки сканит шину на наличие устройств и вычисления действующих адресов laughing.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 29 2011, 06:15
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
потом проверка какого то адреса,
Для этого слейв на тинке должен стать мастером и быть готовым к колизиям на I2C шине
Цитата
Априорным же знанием про усстройства является то, что это некие исполнительные девайсы построенные на тинке26 выступающей в роли слейва для i2c.
А поподробнее -
Сколько их предполагается?
Можно ли в них зашить какой нибудь уникальный идентификатор (например длинное рандомное число)?
Какова физическая конфигурация подключений I2C слейвов (в частности можно ли сделать изолирование отдельных I2C слейвов или сегментов на время конфигурации)?
Цитата
в каждом девайсе рандомная задержка при старте
В тинке нет аппаратного генератора рандомных значений, а так как все тинки включаются одновременно, то их 'рандомные' задержки будут почти одинаковыми
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 29 2011, 06:33
Сообщение #44


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(AlexTech @ Jan 28 2011, 19:50) *
Теперь мегавопрос для дальнейших споров ))))
Возможно ли написание некоего протокола с использованием i2c позволяющего динамически раздавать адреса слейв устройствам или хотя бы как-то позволить работать
нескольким устройствам с одинаковым адресом на одной шине?

Мегаответ. Берем реализацию 1wire идентификации и переводим ея на средства i2c - ответ слейва есть бит Ack, запрос - некий широковещательный адрес с битом чтения/записи и битом собственно данных. Только непонятно другое: смысл этого замысловатого замысла. Все равно исполнительные устройства не идентифицируются позиционно, а управлять сферическими конями может только такой же сферический лошадь.
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 29 2011, 09:35
Сообщение #45


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Ну вот смотрите, если подробнее все описывать..
Делаю аквариумный копмьютер, в центральном блоке стоит 128мега, часики, память разных типов, usb, несколько разъемов с i2c и пару входов для градусников.
Исполнительными устройствами(все построены на тинке26) и имеющими два i2c разъема(ну что бы от центрального блока все не тянуть) на данный момент являются:
1. силовые блоки(220в) на тиристорах(из за ограничения размера самих розеточных блоков получилось по 4 силовых выхода, а этого мало)
2. силовые блоки на транзисторах(до 50в) + шим
3. маленькие платки устанавливаемые в автокормушки взамен штатных и умеющие крутить моторчик для поворота кормушки
4. устройство отображения и ввода, два вида - с жк со знакогенератором и с жк графическим, ну и плюс кнопки
5. устройство на сведотиодах для имитации лунных циклов(шим)
6. устройство ввода(16 дискретных входов) во второй версии переедет в центральный блок
7. устройство управления потоками воды(сервомашинка+клапан)
8. в любой момент можно сделать еще что нибудь )))

вот... я могу все для себя сделать, каждому блоку дать уникальный адрес и не париться, но если понадобится подключить
еще один блок(например розетки) то придется вспоминать какой адрес свободный, а если их 10?, а если сосед попросит ему еще один блок сделать...
в общем хотелось бы автоматизировать этот процесс

Сообщение отредактировал AlexTech - Jan 29 2011, 09:44
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01487 секунд с 7
ELECTRONIX ©2004-2016