Страница 62 из 628

Добавлено: Пт авг 28, 2009 13:51:22
sachok
да :)

Добавлено: Пт авг 28, 2009 20:08:00
Arlleex
http://www.fischl.de/usbasp/

блин, не понимаю, для чего выводы TXD и RXD в разъеме для программирования? вроди бы стандиртный набор выводов - MISO,MOSI,RESET,SCK,GND,Vcc.

Добавлено: Пт авг 28, 2009 20:45:13
Arlleex
Вот не понятно про этот программатор.
Какие он МК программирует, я понял, что атмел.
Под каким софтом работает?
Стоит собирать? Мне вроди нравится) только мне надо - разъем вставил, открыл авр студио, наприсал прогу, открыл (забыл как называется) и прошил МК.

[url]http://yuki-lab.jp/hw/usbasp/index-e.html
[/url]

Добавлено: Пт авг 28, 2009 21:04:51
Arlleex
и что это означает?

Добавлено: Пт авг 28, 2009 22:22:03
uldemir
Kerya писал(а):Здравствуйте.
Подскажите пожалуйста по схематике в ISE 9.2.
Есть восми разрядный счетчик ( CB8CE ) c общей шиной на выходе
( Q7:0 ) которая соеденина с 8 разрядным мультивибратором при
помощи Add bus tap.Как мне указать к какому пину в шине он конкретно привязан?
мультичего? А по существу, это все решается именованием цепей. Например, шину назови counter_out(7:0), а цепь подключенную через tap - counter_out(5).

Добавлено: Сб авг 29, 2009 10:26:47
Dexa
откуда они взяли числа 44, 640 и 3200?

Добавлено: Сб авг 29, 2009 13:29:46
SII
Если было бы записано:

X = C * 10 + Y;

то компилятор бы сначала выполнил умножение C на 10, ориентируясь на размер переменной C -- один байт (она объявлена как char). 30 * 10 = 300, но это математически, а в программировании значение 300 в байт не влезет, поэтому старшие разряды будут отброшены, и получится значение 44. Ну а поскольку там указано явное привидение типа, компилятор знает, что перед умножением надо C расширить до 2 байт (тип int), что позволяет выполнить умножение корректно.

Добавлено: Сб авг 29, 2009 20:57:07
Yellow Tiger
SII писал(а):Если было бы записано: X = C * 10 + Y; то компилятор бы сначала выполнил умножение C на 10, ориентируясь на размер переменной C -- один байт (она объявлена как char) ... поэтому старшие разряды будут отброшены, и получится значение 44 ...
Явное приведение к int здесь нафиг не нужно, так как компилятор сделает его сам, согласно стандарту языка, так что - никакого "один байт" там не будет!
Не надо читать книги всяких "теоретиков", читай стандарт языка Си или Кернигана-Ричи, и тогда все сработает и выражение выдаст правильный результат – 500, а не 3200, и не 640.
Изображение
Или хотя бы проверяй в компиляторе, прежде чем давать такие пояснения...
Изображение
Обоим (Dexa и SII):
У того автора явные проблемы с излагаемым материалом - чтобы получилось так, как он подразумевал (правильное значение – 3200), нужно было бы, чтобы знаковая переменная изначально хранила значение 300, чего, по понятным причинам, быть не может, даже если в следующей строке будет преобразование к int (которое, кстати, также будет произведено не над самой переменной, а только над промежуточным значением, использованным в процессе вычисления выражения "x = (int)c*10 + y;"). Изображение
640 получится, если попытаться проинициализировать переменную char значением 300 (предположим, что нолик не пропечатался в книге, хотя у автора в его программе он был), но эти 640 уже не превратить в 3200 явным приведением к int, во время вычисления упомянутого выражения - так 640 и останется. Убедитесь сами и выбросьте ту книгу "в печку":
Изображение

Добавлено: Вс авг 30, 2009 08:30:49
SII
Yellow Tiger

1) Не сравнивайте C++ на персоналке с простыми сями на микроконтроллере -- это две большие разницы.

2) Я _лично_ натыкался на невыполнение компиляторами автоматических преобразований типов. Ну а что там положено по стандарту или что написали K&R, лично меня не очень волнует, меня волнует только реальная жизнь. А она такова, что во избежание проблем, если ты не знаешь _абсолютно точно_, как поступает тот или иной компилятор, надо использовать явное приведение типов.

Пы.Сы. Именно из-за нежелания бодаться со странностями Си, как и вообще из-за нелюбви к его уродскому синтаксису, допускающему появление кучи ошибок, для микроконтроллеров я пишу исключительно на ассемблере. Ну а для ПК, если нет требований насчёт языка со стороны заказчика -- на Паскале и/или ассемблере.

Добавлено: Вс авг 30, 2009 16:08:47
Dexa
Всем спасибо, но кому верить так и не понял? Компилятор в книге WinAVR. Я только начал изучать и как посмотреть программно в самом компиляторе я не знаю (буду рад подсказке).
С цифрой 44 все понял, запись идет справа налево, т.е. сначала младшие биты, а потом старшие. В итоге отбросив старшие которые не поместились получилось число 44. Ну бог с ним, теперь после явного приведения типов допустим там 300 - 100101100, прибавим 200 (в бинарном это 11001000) и получим 111110100, что равно 500. Откуда автор взял числа 3200 и 640?!

Добавлено: Вс авг 30, 2009 16:12:40
Dexa
Так будем считать что автор и книга плохие, хотелось бы книжку по С для мк, желательно AVR, а не С для компа, если есть поделитесь. Заранее благодарен!

Добавлено: Вс авг 30, 2009 16:58:02
Yellow Tiger
Dexa писал(а):Откуда автор взял числа 3200 и 640?!
Все просто - автор всерьёз верил в то, что вот эта инициализация переменной:

Код: Выделить всё

char    c = 300;
приведёт к тому, что в переменной c действительно будет храниться значение 300 (это ошибка). Далее, автор верил и в то, что без явного приведения типов выражение "c*10" будет считаться в размерности char (это тоже ошибка), а с явным преобразованием - в размерности int. Если не учитывать все эти заблуждения, то получилось бы именно 640 и 3200:
- без приведения типа к char: low(300)*10 + 200 = 44*10 + 200 = 640
- а с приведением типа к char: 300*10 + 200 = 3000 + 200 = 3200

Добавлено: Пн авг 31, 2009 09:21:05
SII
Yellow Tiger писал(а):
Dexa писал(а):Откуда автор взял числа 3200 и 640?!
Все просто - автор всерьёз верил в то, что вот эта инициализация переменной:

Код: Выделить всё

char    c = 300;
приведёт к тому, что в переменной c действительно будет храниться значение 300 (это ошибка). Далее, автор верил и в то, что без явного приведения типов выражение "c*10" будет считаться в размерности char (это тоже ошибка), а с явным преобразованием - в размерности int. Если не учитывать все эти заблуждения, то получилось бы именно 640 и 3200:
- без приведения типа к char: low(300)*10 + 200 = 44*10 + 200 = 640
- а с приведением типа к char: 300*10 + 200 = 3000 + 200 = 3200
Хм... Насчёт char c = 300; -- мой глюк. Я действительно _не обратил внимания_ на то, что в книге присваивается значение, превышающее по размеру байт, байтовой переменной со всеми из этого вытекающими, и смотрел только на вычисление выражения. А вот явное приведение типов вполне может потребоваться: как я уже писал, у меня _в реальной жизни_ бывали случаи, когда без явного приведения выражения вычислялись неправильно именно из-за "обрубания" старших разрядов. Если найду на работе пример кода, приведу его вместе с указанием точной версии компилятора.

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

Добавлено: Пн авг 31, 2009 09:59:00
Yellow Tiger
Если уж говорить о причинно-следственных связях, то следует, прежде всего, отметить, что Вы их ищете не там:
SII писал(а):из того, что я предпочитаю не использовать Си/Си++, отнюдь не вытекает логически, что я этих языков не знаю.
Я привел конкретно тот раздел языка Си, который необходимо было знать, чтобы не допустить ошибку. Предпочтения тут вовсе ни при чем - они лишь приправа к блюду.
Вы, может быть, подумали, что я как-то заинтересован в том, чтобы показать Вам, чего Вы в языке Си не знаете - это не так. Я лишь показал Вам, чего Вы не знаете (уверен - так поступил бы любой другой собеседник), но доказывать это я не буду - не вижу в этом никакого смысла. Не хотите знать Си - не знайте его на здоровье, но зачем же навязывать своё незнание другим? Извините, я не понимаю этого...

Добавлено: Пн авг 31, 2009 10:24:27
ARV
SII писал(а):как я уже писал, у меня _в реальной жизни_ бывали случаи, когда без явного приведения выражения вычислялись неправильно именно из-за "обрубания" старших разрядов.
по данному вопросу можно сказать только следующее:
1. вы все-таки недопоняли своей собственной ошибки и приписали ее компилятору
2. компилятор у вас на самом деле глючный, и должен последовать вслед за упомянутой ранее "плохой" книжкой - ф топпку.

третьего не дано.

Добавлено: Пн авг 31, 2009 12:44:02
Arlleex
странное включение электролитический конденсаторов... минусом к плюсу, и плюсом к минусу. Почему так? так правильно?

Добавлено: Пн авг 31, 2009 13:23:48
Pooher
странное включение электролитический конденсаторов... минусом к плюсу, и плюсом к минусу. Почему так? так правильно?
Правильно именно так.
Из DS:
Изображение

Добавлено: Пн авг 31, 2009 14:12:37
ibiza11
Stalker46 писал(а):Почему так?
это нужно для стабилизации напряжения после умножителя напряжения. плюсом на землю, потому что на минусе (13 ножка) отрицательное напряжение ( -10...12 Вольт) и оно меньше потенциала на земле. минусом на плюсе потомучто на 9ой ноге высокое напряжение + 10..12 Вольт.

Добавлено: Пн авг 31, 2009 15:07:21
Dexa
ARV писал(а):
SII писал(а):как я уже писал, у меня _в реальной жизни_ бывали случаи, когда без явного приведения выражения вычислялись неправильно именно из-за "обрубания" старших разрядов.
по данному вопросу можно сказать только следующее:
1. вы все-таки недопоняли своей собственной ошибки и приписали ее компилятору
2. компилятор у вас на самом деле глючный, и должен последовать вслед за упомянутой ранее "плохой" книжкой - ф топпку.

третьего не дано.
так посоветуйте хорошую по авр и С

Добавлено: Вт сен 01, 2009 11:47:53
Arlleex
Хотелось бы запитать устройство от USB. Но где выводы питания для USB? Всмыле в самом разъеме... :oops: