Jump to content

    

Petka

Свой
  • Content Count

    1438
  • Joined

  • Last visited

Everything posted by Petka


  1. Проблема с TWI

    Цитата(James D. @ Dec 20 2005, 17:31) Установил адрес слэйва - $40, а мастер вызывает адресом - $20. Так? ........ Слэйв-приемник постоянно входит в обработчик прерывания TWI, производит проверку адреса (код $60 не соответствует, и выходит из прерывания), даже если мастер вообще передачу по TWI не начинает. ........... В чем же тут дело? 1) Адреса должны совпадать. 2) В прерывании вы ДОЛЖНЫ обрабатывать все события, не только $60. у меня, например сеть висла, если я не обрабатывал $F8 и $00. 3) успехов!
  2. Проблема с TWI

    Цитата(James D. @ Dec 20 2005, 13:51) Цитата2) записать адрес в регистр TWAR выбранный адрес сдвинутый на один бит влево. Зачем? Цитата3) настроить контрольный регистр TWI (TWСR) TWIE=1, TWEN=1, TWEA=1. А TWINT не надо сбрасывать(в слэйве) при настройке, и в процессе работы (а также при выходе из обработчика прерывания)? Пока что у меня мастер зависает при попытке что-либо передать на любой из слэйвов... А слэйвы работают. 1) конктретизуй вопрос. Зачем адрес записывать или зачем сдвигать на бит его. 2) мастер зависает скорее всего НЕ дожидаясь ACK от устройства. 3) TWINT надо сбрасывать только в обработчике прерываний, после того, как необходимая реакция на прерывание будет выполнена.
  3. Проблема с TWI

    Цитата(James D. @ Dec 20 2005, 08:56) Что должен делать слэйв, адрес которого не совпал? ........ На вызов мастера-передатчика должны отвечать ВСЕ слэйвы? НАСТОЯТЕЛЬНО рекомендую перечитать информацию о I2C и TWI в частности. в неккоторых AVR'ках присутствует АППАРАТНЫЙ I2C~TWI. это обозначает что большинство действий с протоколом возложено на плечи железа, например генерация NACK(а точнее отсутствие генерации ACK) если адрес не совпал... т.е. ваши действия по работе с TWI (slave): 1) на каждое устройство придумать УНИКАЛЬНЫЙ адрес из диапазона 1-127. (0 адрес используется для массовых сообщений его выставлять НЕ надо). 2) записать адрес в регистр TWAR выбранный адрес сдвинутый на один бит влево. 3) настроить контрольный регистр TWI (TWСR) TWIE=1, TWEN=1, TWEA=1. 4) ждать прерывание. 5) при прирывании в зависимости от регистра TWSR выполнить соответствуюшие действия (какие именно расписано в даташите) 6) поблагодарить меня за то что научил уму-разуму =) 7) получить пилюлей от IgorKossak за п. 6)
  4. Проблема с TWI

    Цитата(James D. @ Dec 19 2005, 17:49) TWI у меня работает не по своим прерываниям, а в основной программе (в обработчике таймера). Линии разрешения я сделал для того, чтобы слэйвы не ждали, когда к ним обратится мастер, из-за этого прога будет работать очень медленно. сделайте как полагается, по своим прерываниям. а потом можете говорить что TWI не работает. Мне кажется из-за этих разрешений-запрещений шина и виснет.
  5. Проблема с TWI

    Цитата(James D. @ Dec 19 2005, 15:42) Продолжаю добивать TWI. Хочу разобраться в конце-концов. Вопрос такой: на вызов мастера-передатчика должны отвечать оба слэйва? Какие действия должен предпринимать тот слэйв, адрес которого не совпал с переданным мастером? Раньше я делал так: от мастера к каждому слэйву кроме линий TWI шли еще по одной линии - разрешение на связь с мастером. Соответствующая линия сбрасывается в "0", если мастер хочет передавать данные на этот слэйв; вторая линия в "1", т.е. второй слэйв вообще не заходит в программу приема данных по TWI. Так не заработало - могу передать только на первый слэйв, при попытке передать на второй - все зависало - окончательно и безнадежно. Теперь сделал по-другому. Должно, по идее, работать так: мастер сбрасывает в "0" обе линии (разрешение на связь с мастером). Тот слэйв, адрес которого не совпал, выходит из программы приема данных, и продолжает выполнять основную прогу. А тот слэйв, адрес которого совпал - принимает данные. Но и здесь не все гладко. Мастер (m32) передает данные на слэйв1 (m32) - тут все нормально. Но слэйв2 (m16) при этом висит! Нажимаю на кнопочку, чтобы начать передавать данные на слэйв2 - он при этом выходит из зависания, и данные передаются на оба контроллера - так и должно быть. При этом слэйв1 не зависает. При включении передачи на слэйв1 - слэйв2 опять зависает. Как тут быть? P.S. Кстати, описанная ситуация происходит, если при связи с обоими МК мастер выдает повторный старт. Если мастер дает сигнал старт - все безнадежно зависает (при попытке передать на слэйв2). ИМХО вы не разобрались с протоколм I2C. Зачем вы ведёте линии разрешения если в протокол заложена АДРЕСАЦИЯ? вероятно у вас с этим и глюки связаны. Слэйв, адрес которого не совпадает, с адресом, который передаётся по шине НИЧЕГО С ШИНОЙ ДЕЛАТЬ НЕ ДОЛЖЕН.
  6. Цифровая фильтрация фона.

    Цитата(muravei @ Dec 16 2005, 12:01) Цитата(SasaVitebsk @ Dec 15 2005, 23:36) Самое смешное, что простой цифровой фильтр проще в реализации, занимает меньше озу чем скажем скользящее усреднение! Не так страшен чёрт. Теперь постоянно пользуюсь. Расчитывал фильтр с пом. проги QED2000. К сож. подломки нет и коэф. подбирать пришлось. А принцип написания фильтра взял с проги (DTMF детектирования) расположенной на сайте TI slaae16.pdf. С уважением! Кстати может кто лечилово подбросит QED2000 ver. 6.3 А я смоделировал ск. ср-мне понравилось.А можно ли у него сдвигать частоту среза? Частота среза не совсем верное понятие для "ск.ср." т.к. это является режекторным фильтром. Как я раньше говорил этот фильрт "вырезает" частоты, период которых кратен длине окна.
  7. AVRvs PIC

    Оффтопик и разжигание межнациональной розни! а если серьёзно, пользуйтесь поиском по форуму. тема избита.
  8. Есть проблема EEPROM...

    Цитата(bbg @ Dec 14 2005, 13:46) Цитата(DeXteR @ Dec 14 2005, 13:33) Расскажите про классическое мажоритирование Это как ?? Пишем сразу в три ячейки (причем разнесенные в пространстве памяти), читаем из трех ячеек, принимаем решение - прочитали три одинаковых числа - ОК, прочитали два одинаковых, одно неодинаковое - принимаем решение в пользу двух одинаковых. Прочитали все три неодинаковых - кричим "караул!" а ещё лучше мажорировать побитно!
  9. AVR GCC

    Цитата(Kuz'ka @ Dec 13 2005, 12:46) float Var1 = 55.6; //объявляем #define Var2 Var1; //переопределяем Var1 = 23.6; //это присвоение работает Var2 = 45.8; //на эту строку компилятор пишет следующее error: parse error before '=' token то есть Var 2 считается константой Цитата(beer_warrior @ Dec 13 2005, 11:41) В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99. Посмотри различия в стандартах. А самый простой выход, конечно именованый union. Ни с одним из ключей c89/c99/gnu89/gnu99 ссылки и анонимные объединения не работают...Полччается что же, WinAvr на работает по стандарту С++? Ржу =) убери ";" в строке с #define а то компилятор пытается скомпилировать "Var1; = 45.8;"!
  10. Есть проблема EEPROM...

    Идея-то хорошая, но не совсем прозрачная... где ты будешь хранить информацию о сбойных ячейках? а если и эти ячейки будут сбоить? много неочевидного =) у меня идея проще: писать во все ячейки по очереди, например 1 байт пишием, а за ним порядковый номер записи, таким образом можно увеличить количество перезаписей в (объём_eeprom/2) раз.
  11. AVR GCC

    Цитата(Kuz'ka @ Dec 13 2005, 10:59) Есть команда препроцессора #define. Ею можно переопределить имя переменной. int Var1; #define Var2 Var1; Но в полученную новую переменную нельзя записать новое значение (Var2 = 34; не работает ). ......... Спасибо! Как это не работает?! Такого быть не может, потому-что такого не может быть! при компиляции везде после самого #define все "Var2" ЗАМЕНЯЮТСЯ на Var1. Если не работает Var2, значит и не работает Var2! Привнедите полный код, вероятно у вас ошибка.
  12. Цифровая фильтрация фона.

    Цитата(psL @ Dec 13 2005, 10:22) Медианный фильтр - сортировка по возрастанию(убыванию). Результат - центральное значение в массиве. В общем случае медианный случай не поможет. Медианка помогает избавиться от импульсных помех, но от насаженного синуса она не выручит. Больше того, синус она наоборот оставит =)
  13. Цифровая фильтрация фона.

    Цитата(GrayCat @ Dec 12 2005, 11:57) Беда в том, что из-за наличия "нелинейных" потребителей (практически всё с выпрямителями на входе) много наводок не 50, а 100 Гц с гармониками. Так что частоту семплирования надо брать N*100 Гц (чем больше N, тем более высокие гармоники подавятся, но нужно больше памяти), и усреднять "скользящим средним" по периоду M*20мсек (чем больше M, тем лучше фильтрация, но хуже время реакции на полезный сигнал, и больше вычислений). Математики на эту тему говорят что интеграл синуса по периоду(а так же кратным периоду) равен нулю!!! отсюда вывод: 1) что если усреднить значения сигна по времени 20мс, то вы избавитесь от наводок 50Гц, 100 Гц, 200Гц и.т.д. 2) количество выборок за период 20мс надо сделать минимум 2 а лучше 4 (это против 100Гц). =). Математика полезная штука, особо в нашей работе =)
  14. Цитата(Rash @ Dec 5 2005, 18:07) Цитата(aleksey_sav @ Dec 5 2005, 18:42) Цитата(Rash @ Dec 5 2005, 16:09) ЦитатаИ вообще мега64 поRXD? TXD программируется. Причём тут RXD и TXD?! открой даташит на мегу 64 найди где там SPI порт и подключай, и прот ресет не забудь Перед тем, как писать ерунду - может быть стоит даташит прочесть? Это кому?! дай вырезку из даташита, ни одна мега по UARTу не программируется, без дополнительных на то причин а имено програматора. Для программирования SPI и JTAG (также для отладки) интерфейсы. Мега128 и скорее всего М64 программируются через пины: КодTable 128. Pin Mapping SPI Serial Programming Symbol Pins I/O Description MOSI (PDI) PE0 I Serial data in MISO (PDO) PE1 O Serial data out SCK PB1 I Serial clock читаем еще даташит: Код• PDO/TXD0 – Port E, Bit 1 PDO, SPI Serial Programming Data Output. During Serial Program Downloading, this pin is used as data output line for the ATmega128. TXD0, UART0 Transmit pin. • PDI/RXD0 – Port E, Bit 0 PDI, SPI Serial Programming Data Input. During Serial Program Downloading, this pin is used as data input line for the ATmega128. RXD0, USART0 Receive Pin. Receive Data (Data input pin for the USART0). When the USART0 receiver is enabled this pin is configured as an input regardless of the value of DDRE0. When the USART0 forces this pin to be an input, a logical one in PORTE0 will turn on the internal pull-up. вывод: ISP ещё не значит SPI =)
  15. Адреса в EEPROM

    Цитата(at90 @ Dec 5 2005, 11:47) В кодэвижене есть такая штука как переменная типа EEPROM. Можно ли присваивать переменным типа eeprom адреса вручную. Чтобя я знал адреса и мог обратится по адресу к переменной. Конечно можно, если вам действительно это нужно (например для чтения калибровочного байта, записанного в конкретный адрес, например с помошью AVREAL, с последующей записью его в OSCCAL). Делается это так: Кодeeprom unsigned char dummy; // заводим переменную, зарезервировав память. (на всяк случай =) ) unsigned char eeprom *ep; .......... .......... .......... ep=0; // сюда записываем собственно адрес. OSCCAL=ep[0];
  16. Расширитель портов I/O

    Цитата(prottoss @ Dec 2 2005, 16:25) Цитата(aleksey_sav @ Dec 2 2005, 19:57) EPM570: LEs 570 Typical Equivalent Macrocells 440 Maximum User I/O Pins 160 User Flash Memory Bits 8,192 Speed Grades 3, 4, 5 tpd1 Corner-to-Corner Performance(1)(ns) 5.5 tpd2 Fastest Performance (ns) 3.6 Available Packages(2) 100-pin TQFP(3) 144-pin TQFP, 256-pin BGA(4) Да, согласен, за 1,5$ впечатляет. Но это все если надо все сделать железно. На МК, мое мнение, все же гибче реализовать. Если, конечно, эта гибкость востребована в проекте. интересно и где вы ЭТО собираетесь за 1,5$ купить?
  17. Проблема с TWI

    Цитата(Igor26 @ Dec 2 2005, 09:21) Цитата(Moks @ Dec 1 2005, 23:10) Добрый вечер! Вот нужна какая помощь: Я передаю три байта как Master Transmitter , а вот четвёртый и пятый байты мне нужно принять как Master Receiver. После третьего байта только Acknowledge , а следующий такт уже я должен начать принимать данные. В регистре TWDR - последнее отосланное мной значение. Ну не знаю я что делать. Помогите! Желательно на СИ! Помоему, после передачи третьего байта Вам нужно давать STOP. Не обязательно выдавать STOP, необходимо выдать новый START+SLA-R. недавно боролся с slave-mode TWI. после того, как сделал всё по datasheet, всё прекрасно заработало. если надо могу поделиться кодом на CV для m16.
  18. общее решение: подаёшь питание через диод, так же заводишь его на прерывание. как только сработало шлёшь пакет что отрубился.
  19. twi

    TWI это I2C. Ищи в хэлпе эти слова и будет тебе Щастье =) Появятся вопросы по существу спрашивай.
  20. Начинающий Stage-1.01

    Цитата' date='Nov 7 2005, 16:54' post='62158'] Все приехал блин, дошло дело до паяльника, спаял макетку, подрубил питание и встал. Программа avreal программатор Аля 5 проводков с резисторами (чета stk200\300 не заработал, надо ...................... Кабель от LPT до платы 20см длиной Люди помогите, скажите в каком направлении рыть, а то ваще звиздец полный. А еще хотел спросить, hex фаил весит 23 053 байт (22,5кб) Тогда на борту всего 8 кб – так должно быть или это Трабла??? 1. Скорее всего в "5 проводках" причина несовпадения прочитанных данных. решить проблемму можно попробовав уменьшить скорость программирования (см. ключи AVREALа). или спаяв нормальный программатор. 2. Хекс файл содержит информайию в ХЕКС представлении,т.е. на один байт МИНИМУМ 2 символа, не считая контрольных сумм, адресов. переносов строк, и т.п.
  21. осваиваем ISDN BRI

    Собственно вопрос: какие недостатки есть у этой микросхемы? какие особенности? И вообще хоть кто-нибудь её использовал?
  22. Программатор RS232

    Цитата(Cache @ Oct 31 2005, 16:45)А avreal безусловно отличная программа, но если на нее завязывать производственный процесс, да случится какая-нибудь проблема - кого теребить-то? У вас времени может и не оказаться, а денег я вам не платил, чтобы требовать немедленного решения проблемы... Нееее! Ты не понял, хочешь производственного процесса, покупай за мегабабки мегапрограмматоры, а для дома, можно "самопальным", но дешёвым и удобным, пусть и глючным пользоваться =) Сам же предлагал не путать тёплое с мягким. Очевидно, что нужно предусмотреть возможность настроить программатор как "стандартный". Глупо покупать несколько программаторов, которые схемотически почти совпадают, но прошивают разные вещи. Как раз в этой теме и развивается мысль, создания с минимальными затратами программатора, который покрывает достаточно большой круг СХЕМОТЕХНИЧЕСКИХ АНАЛОГОВ (во всех есть МК, выходные буфера, интерфейс с ПК, пара светодиодиков, и т.д.).
  23. Программатор RS232

    [/QUOTE]Цитата(Cache @ Oct 30 2005, 03:27)Сдается мне, господа, что то, что вы изобретаете - давно изобретено. .......... Ну не надо, ИМХО, в самопальном программаторе добиваться сверхвысокой скорости, и прикручивать все мыслимые типы интерфейсов. Для этого у любого серьезного разработчика есть что-нибудь фирменное. А пошить что-нибудь вдали от дома - на то и ISP за глаза. Целью как раз является сделать программатор, который можно будет использовать в домашних условиях, простой и расширяемый!. Зачем иметь 10 различных программаторов, когда можно обойтись одним? Кроме того, на сегодняшний день нет чёткого ответа на вопрос любителя "с какого программатора мне стоит начать, что бы недорого и всё что мне понадобиться он умел-бы шить?" (раньше ответ более-менее существовал: "байтбластер", но производители материских плат уже расстаются с LPT портом, LPT порт геморно использовать под виндой, мощность и надёжность уже не те. и т.д.). Теперь про фирменное: сколько ОНО стоит? Конечно же лучше собрать своё, но что? По поводу корпуса: 1) согласен что тесниться не имеет смысла. 2) пришла интересная мысль, самый дешёвый и более менее стандартный корпус - бытовая мыльница, любой любитель может без проблем в любом захолустье его найти. соответственно размеры должны быть не более 50*80.
  24. Цитата(GrayCat @ Oct 26 2005, 15:30)Могу напомнить, что для стандартного LPT-порта (синхронный, параллельный, уровни ТТЛ с ОК, скорости до 300 кБ/с) гарантировалась дальность 5 метров. Это так, для размышления  . Не путайте паралельный режим с последовательным: В паралельном есть жёсткие требования на "одновременность" прохождения ВСЕХ сигналов по кабелю, иначе значение может "защёлкнуться" раньше прихода последнего бита. Поэтому длина кабелей для паралельной передачи на порядок меньше =(
  25. Программатор RS232

    Решил "приподнять" тему. Все послеотпускные авралы давно закончились =) из пожеланий: 1) возможность поместить плату в какой-нибудь стандартный корпус 2) когда программатор подцеплен, что бы можно было мониторить ножки контроллера, к которым он подцеплен. как-никак некоторая полезность при отладке =)