Страница 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?!
Все просто - автор всерьёз верил в то, что вот эта инициализация переменной:
приведёт к тому, что в переменной
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?!
Все просто - автор всерьёз верил в то, что вот эта инициализация переменной:
приведёт к тому, что в переменной
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? Всмыле в самом разъеме...
