Мелкие вопросы по МК и ПЛИС.
- Реклама
Подскажите а в PIC16f628A есть та дурацкая константа типо как в pic 12f629 
Если болит голова, значит она есть!)
А что дурацкого в калибровочной константе? Не нужно - не пользуйтесь...
За Вас производитель откалибровал встроенный осциллятор, а Вы еще и недовольны...
Ужосссс...

За Вас производитель откалибровал встроенный осциллятор, а Вы еще и недовольны...
Ужосссс...
По microC подскажите плиз, а то брошу его нафиг!
ЗЫ: Еще вопрос.
Допустим МК имеет 8-разрядный порт, а мне необходимо "эмулировать" на нём 3-х (4-х, 5-ти) разрядный порт, остальные ножки например на вход. Как это реализовать программно? (дефайнами? но как с ним тогда работать?).
Для чего это нужно - у меня бывает ситуация когда требуется вывести число, например 3-х разрядное в порт, но не в PB0-PB2, а скажем в PB4-PB6. Киньте кусок кода чтобы разобраться, плиз. Ничего понятного в инете так и не нашёл.
ЗЫ: Еще вопрос.
Допустим МК имеет 8-разрядный порт, а мне необходимо "эмулировать" на нём 3-х (4-х, 5-ти) разрядный порт, остальные ножки например на вход. Как это реализовать программно? (дефайнами? но как с ним тогда работать?).
Для чего это нужно - у меня бывает ситуация когда требуется вывести число, например 3-х разрядное в порт, но не в PB0-PB2, а скажем в PB4-PB6. Киньте кусок кода чтобы разобраться, плиз. Ничего понятного в инете так и не нашёл.
- Реклама
- Сообщения: 11
- Зарегистрирован: Вс ноя 14, 2010 16:23:22
Поддерживаю вопрос, очень интересный и полезный.Chettuser писал(а):По microC подскажите плиз, а то брошу его нафиг!
ЗЫ: Еще вопрос.
Допустим МК имеет 8-разрядный порт, а мне необходимо "эмулировать" на нём 3-х (4-х, 5-ти) разрядный порт, остальные ножки например на вход. Как это реализовать программно? (дефайнами? но как с ним тогда работать?).
Для чего это нужно - у меня бывает ситуация когда требуется вывести число, например 3-х разрядное в порт, но не в PB0-PB2, а скажем в PB4-PB6. Киньте кусок кода чтобы разобраться, плиз. Ничего понятного в инете так и не нашёл.
Я Си не использую, но общий принцип одинаков для любого языка. Предположим, что нужно вывести значение Value в разрядны 3-5 порта Port. Для этого надо сделать примерно следующее:
Код: Выделить всё
BYTE Temp;
// Читаем из порта во временую переменную все его 8 разрядов.
Temp = Port;
// Сбрасываем в 0 те разряды, куда нужно вывести значение, не трогая остальные разряды.
Temp = Temp & 0xC7;
// Добавляем значение в нужные разряды.
Temp = Temp | (Value << 3);
// Выводим полученное значение в порт.
Port = Temp;
добрый день. подскажите несложный программатор для прошивки atmega8 ("5 резисторов" не подходит).
и еще вопрос- валяется программатор (немного не доделаный) avr910. как через него прошивать? (как я раньше думал, мк для прошивки надо вставлять в сам программатор как допустим на jdm для picов. но поискав инфу понял что не все так просто)
и еще вопрос- валяется программатор (немного не доделаный) avr910. как через него прошивать? (как я раньше думал, мк для прошивки надо вставлять в сам программатор как допустим на jdm для picов. но поискав инфу понял что не все так просто)
- Сообщения: 11
- Зарегистрирован: Вс ноя 14, 2010 16:23:22
SII Спасибо!
На ПК порта не было, достал материнку с LPT, прикрутил к окну саморезом, рядышком БП и HDD, пока не купил дешевенький USBasp за 600р
Моим первым программатором был LPT порт, считаю его самым простым =)pavlo! писал(а):добрый день. подскажите несложный программатор для прошивки atmega8 ("5 резисторов" не подходит).
и еще вопрос- валяется программатор (немного не доделаный) avr910. как через него прошивать? (как я раньше думал, мк для прошивки надо вставлять в сам программатор как допустим на jdm для picов. но поискав инфу понял что не все так просто)
На ПК порта не было, достал материнку с LPT, прикрутил к окну саморезом, рядышком БП и HDD, пока не купил дешевенький USBasp за 600р
Спасибо, если я правильно понял, то
- это побитовый сдвиг в переменной на 3 влево.(Value << 3)
SII писал(а):Код: Выделить всё
// Добавляем значение в нужные разряды. Temp = Temp | (Value << 3);
Ну да. Сдвиг с побитным "или".
Часто приходится к подобным операциям прибегать - особенно с 16-разрядными регистрами (порты и т.д.).
Часто приходится к подобным операциям прибегать - особенно с 16-разрядными регистрами (порты и т.д.).
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

ну вот этот LPT и есть программатор "5 резисторов". да, он легкий, но мегу8 я прошил через него наверно раза с 20го только. комп ошибку выдавал. а USBasp по сути и есть avr910. вот я немогу понять как с ним работать. мк на нем всегда должен стоять? или это и есть програмируемый мк?FFAMax писал(а): Моим первым программатором был LPT порт, считаю его самым простым =)
На ПК порта не было, достал материнку с LPT, прикрутил к окну саморезом, рядышком БП и HDD, пока не купил дешевенький USBasp за 600р
Не _в_ переменной, а её значения. Сама переменная не изменяется. Поскольку условием я себе поставил выдачу значения переменной в 3-5 разряды порта, её и потребовалось сдвинуть в нужную позицию -- к третьему разряду т.е.Chettuser писал(а):Спасибо, если я правильно понял, то- это побитовый сдвиг в переменной на 3 влево.(Value << 3)
Всё это можно записать и короче (Си вообще позволяет очень компактно -- и крайне запутанно -- писать), но я предпочитаю лишний раз нажать на клаву, зато получить более читабельный текст.
Простите, не так написал.
Абсолютно с Вами согласен насчёт "читабельности" кода. Через полгода в таком запутанном/укороченном уже и не разберёшься.
Абсолютно с Вами согласен насчёт "читабельности" кода. Через полгода в таком запутанном/укороченном уже и не разберёшься.
- Сообщения: 11
- Зарегистрирован: Вс ноя 14, 2010 16:23:22
Ну как бы да. Атмега 8 стоит на самом программаторе, она же отвечает за связь с ПК и она же программирует вторую мегу.pavlo! писал(а): а USBasp по сути и есть avr910. вот я немогу понять как с ним работать. мк на нем всегда должен стоять? или это и есть програмируемый мк?
Т.е. сам программатор собран на меге.
т.е. чтобы запрограммировать мегу, нужна вторая мега, а чтобы запрограммировать первую мегу, нужен lpt (или другой готовый) программатор.
Господа, подскажите в таком вопросе.
При работе с USART, ковыряя исходники прошлого года, нашел такую конструкцию
Код: Выделить всё
UDR0 = printf ("Hello world!");Что меня смутило - как это работает? Компилятор разбивает на несколько итераций?
В даташите сказано, что там есть FIFO очередь, но туда ведь нельзя засунуть целиком строку, а значит компилятор все же что-то делал. Если кто знает как оно это сделало, подскажите плз
Обычно, компилятор выводит листинг на ассемблере (WinAVR). Вот там и смотрите. 
I am DX168B and this is my favourite forum on internet!
Опять-таки, на Сях не работаю, но вставлю свои пять копеек...FFAMax писал(а):При работе с USART, ковыряя исходники прошлого года, нашел такую конструкциюСейчас мне как-то дико на такое смотреть, пишу по байтам.Код: Выделить всё
UDR0 = printf ("Hello world!");
Что меня смутило - как это работает? Компилятор разбивает на несколько итераций?
В даташите сказано, что там есть FIFO очередь, но туда ведь нельзя засунуть целиком строку, а значит компилятор все же что-то делал. Если кто знает как оно это сделало, подскажите плз
printf -- это функция (подпрограмма), которая выводит то, что задано ей в качестве параметров (в данном случае -- строку с хелловорлдом) на консоль. Что такое консоль, определяется реализацией. Подозреваю, что в используемом Вами трансляторе консоль -- это UART0 (или как там он называется в Вашем случае). Компилятор же просто вызывает эту самую подпрограмму, передавая ей на вход адрес строки, и она побайтно засовывает её в УАРТ, ожидая каждый раз его готовности проглотить новый символ.
Что возвращает printf в качестве результата как функция, я не помню, а смотреть лениво. В любом случае, возвращаемое значение -- это отнюдь не то, что Вы собирались выводить. Это может быть, например, количество выведенных символов вообще. Таким образом, Вы просто неправильно использовали эту функцию, и тот же результат был бы получен, если б Вы написали её вызов без всяких присваиваний.
Кстати говоря, printf -- одна из самых жирных функций библиотеки Си, способная занять половину флэш-памяти какого-нибудь не слишком мощного микроконтроллера...
Пы.Сы. И обязательно осваивайте ассемблер. Его знание для человека, работающего с МК, абсолютно необходимо, даже если 99,999% работы делается на языке высокого уровня: во-первых, не всё можно сделать на ЯВУ; во-вторых, без ассемблера многие вещи так и останутся непонятными (а если ещё и компилятор сгенерит неверный код, то попробуй это обнаружь); ну а в-третьих, нередко использование ассемблера вместо ЯВУ позволяет решить задачу намного быстрее и компактнее, что может оказаться немаловажным или вообще критически необходимым в определённых ситуациях.
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
Не правда Ваша. Как минимум нас пятеро: к заявленным добавьте GP1 и меняМитяРа писал(а):Пушистые, нас уже трое !!!
Последний раз редактировалось Meteor Вс авг 14, 2011 21:43:45, всего редактировалось 1 раз.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Мне кажется, таких очень мало. Без обидChettuser писал(а):А что гуру скажут по поводу microC (см. верх страницы) ?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]


