Помогите начать работать с микроконтроллерами.
(Продолжение темы здесь)

Версия для печати

Конференция: Конференция iXBT.com (http://forum.ixbt.com/)
Форум: Электронные устройства и компоненты (http://forum.ixbt.com/?id=48)
URL: http://forum.ixbt.com/topic.cgi?id=48:1119

Время GMT +03. Даты в формате dd.mm.yyyy.

quadrat, 06.05.2003 10:26
Есть огромное желание начать разрабатывать схемы на основе микроконтроллеров.
Имеется необольшойпыт работы с аналоговыми схемами. Умею программировать в ассемблере под Z80 и x86.

Хотелось начать с чего-то простого. Хотя бы простые электронные часы.
Потом не плохо было бы разобраться с принципами управления по шине I2C.

Какую литературу, вэб-рессурсы посоветуете?

Простите, если выгляжу , но все когда-то с этого начинали.

1. Avla 0652, 06.05.2003 11:10
Лучше всего начни с классического микроконтроллера, который уже более 20 лет выпускается и помирать не думает. Это процессор 8051/8052. Они клонированы разными фирмами под разными названиями.
Я бы рекомендовал взять какой-нибудь ADuC812 (с ядром 8052). Да, он дороже стоит, но зато: 1) там есть хороший восьмиканальный АЦП, много флэш-памяти и ещё куча всего 2) для его программирования не нужен программатор, он подключается к порту RS-232 через преобразователь уровня RS232->TTL 3) всё программное обеспечение бесплатно 4) есть ещё АДуКи с сигма-дельта АЦП высокой точности 5) новые быстрые АДуКи выполняют одну команду за один такт, см.
http://www.analog.spb.ru/News/NewADuC.htm

2. Zak_Nik, 06.05.2003 12:04
quadrat
Зайди в Полезные ссылки (http://forum.ixbt.com/0048/000231.html) , почитай пару тем про контроллеры. Тут, наверное, уже десяток веток с подобными вопросами.

Chudik
Может создать что-то вроде закладочки "FAQ по популярным контроллерам?" Полезно будет...

3. quadrat, 06.05.2003 12:11
to Avla 0652

Спасибо! Возьму на заметку.

to Zak_Nik

Ходил, читал. Но хотелось бы послушать мнение тех, кто уже с ними работает, что они посоветуют. Нужны схемы и описания каких-нибудь простых разработок, чтобы "въехать" и понять суть.

to Chudik

Согласен! FAQ бы не помешал!

4. Zak_Nik, 06.05.2003 12:31
quadrat
Валялась где-то у меня схема кодового замка на AT89S8252. С написанным драйвером клавиатуры. Если надо, могу выслать, поковыряешься...(пришли мне письмо) Если не в курсе, речь о семействе микроконтроллеров MCS-51

5. Shinen, 06.05.2003 14:29
Avla 0652
Ну вы бы еще для начинающего посоветовали взять ARM
Для начала - AVR, PIC - такого плана, ну уж никак не ADuC. IMHO

6. Chipper, 06.05.2003 15:22
Shinen
ADuC сам по себе не лучший вариант для начала, но классика - есть классика (я имею в виду MCS-51). А PIC, по моему мнению, только испортит вкус - его прибабахи не для начинающих.

Я думаю, что следует начать с простого 51-го - AT89C51. Там все просто - на пальцах можно объяснить

Добавление от 06.05.2003 15:31:

Avla 0652
Уважаемый, а как новичек (читай "в кустарных условиях") будет использовать ваш ADuC? Для начала нужен DIP корпус

7. Zak_Nik, 06.05.2003 15:34
Chipper
Корректировочка (в духе -=Dmitry=- ) - AT89S8252 или AT89S53 - ввиду возможности простой организации внутрисхемного программирования (SPI)

8. Chipper, 06.05.2003 15:56
Zak_Nik
Согласен, с параллельным программированием для новичка туго (если нет доступа к программатору). А если есть, то и можно любой брать

9. quadrat, 06.05.2003 16:09
э-э-э! ребята! я не настолько продвинут!

  • что такое: "параллельное программирование"?
  • что такое SPI? возможность программировать без программатора? тогда гут! хотя, думаю, что простенький програматор будет не так дорого стоить.
  • естественно лучше DIP корпус, т.к. собирать всё буду "на коленях"
  • что есть "по сути" I2C? протокол последовательной передачи данных? поддерживается всеми типами МК?

10. Zak_Nik, 06.05.2003 16:57
quadrat
SPI - serial peripheal interface - последовательный интерфейс, по которому можно запрограммировать контроллер. 3 сигнальных провода (MOSI, MISO, SCK), провод сброса и земля. Всё это прицепляется к ЛПТ. Возможно программировать контроллер не вынимая его из платы.
Параллельное программирование - при прошивке контроллера участвуют: Шина данных - 8 проводов, шина адреса (на 8К) - 13 проводов, еще несколько управляющих. ИМХО, неудобно, нужен спец. программатор.
I2C - разделяемый по времени синхронный послед. интерфейс. Два провода - DATA и SCK. В предложенном тебе контроллере реализуется программно. (Это если кратко). Если подумать, можно запрячь SPI.

Добавление от 06.05.2003 17:41:

Схему программатора SPI смотри здесь (http://forum.ixbt.com/0048/001114.html#19) .

11. Chudik, 06.05.2003 18:42
Zak_Nik
quadrat
Может создать что-то вроде закладочки "FAQ по популярным контроллерам?" Полезно будет...
А что Полезные ссылки, #53 (http://forum.ixbt.com/0048/000231-2.html#53) вам не хватает?

12. pin, 06.05.2003 20:39
quadrat:
Для начала 51-й неплох. Нас вообще на 580-х учили. Изучать процессор можно в симуляторе, (+) - паять не надо.
Для 8051-го рекомендую использовать Монитор (MONITOR) для внутрисхемной отладки. Внутрисх. отладку можно делать из Keil'a .
Думаю, что лучше взять контроллер, в который программа заливается по RS-232.
Ссылки: www.google.com www.atmel.com www.keil.com www.telesys.ru www.analog.com
www.cec-mc.ru <- тут есть схемы с контроллерами, продают отладочные платы.
www.emb.hut.ru

13. Shinen, 06.05.2003 23:22
pin
Обучаться на практике всегда лучше - появляется некий практический интерес, а синтетика - это не интересно и не вызывает положительных эмоций IMO

14. Vesel'chak U, 07.05.2003 05:13
I2C программно делать начинающему не рекомендую. Я даже с опытом и то довольно долго отлаживал.
Порекомендую не сильно увлекаться ассемблером - хоть и эффективно, но уж больно долго, поэтому надо сразу глядеть на контроллеры с большой памятью. А, в принципе, разницы нет на чём обучаться, может только стоит обратить внимание на средства отладки. Симулятор - для начала, но лучше внутрисхемное эмулирование. Специализированный эмулятор - дорогое удовольствие, поэтому рекомендую брать контрроллеры с встроенным эмулятором. Сейчас пошла тенденция использовать JTAG (хотя есть и варианты однопроводного интерфейса). JTAG в AVR пока имеет неясные перспективы, в MSP430 работает хорошо.

15. quadrat, 07.05.2003 09:24
попытаемся подвести промежуточные итоги:

Какой микроконтроллер мне взять для начальных эксперементов (конкретная модель)? в DIP корпусе, желательно с SPI, ADC и DAC - наверное пока не нужны.

просто тогда мне останется только искать документацию и примеры схем именно с этим контроллером. Это уже проще.

16. ogurets, 07.05.2003 11:40
quadrat
Немного знаний английского и вперед!
Nigel's PIC Tutorial Page -www.winpicprog.co.uk/pic_tutorial.htm, там же программатор;
www.bubblesoftonline.com - супертуториал по PIC'ам, все просто и с самого начала (200 страниц PDF), симулятор для начинающих и другие полезные программки для и о PIC'ах (если сайт умер -могу выслать или выложить);
и вообще
www.google.com ищем PIC microcontroller tutorial или просто microcontroller tutorial; project microcontroller beginner etc - всего полно, но по PIC'ам больше.

Успехов!

17. Chipper, 07.05.2003 11:42
quadrat
Тип уже упоминали - AT89S8252 - можно программировать как параллельно, так и по SPI, 8k памяти для кода, 256b памяти данных, 2k NVRAM...
Vesel'chak U
[i]Порекомендую не сильно увлекаться ассемблером[i]
Как раз и надо начинать с ассемблера, чтобы лучше понять суть микроконтроллера

18. Zak_Nik, 07.05.2003 12:12
quadrat
Всё-таки рекомендую для начала AT89S8252PI (PC).
Достоинства:
SPI -> внутрисхемное программирование
Простая архитектура
8K программной памяти (хватит на неочень навороченную программу на C)
2K EEPROM
Есть в DIP
Довольно низкая цена.
Можно прошивать и параллельно

Недостатки:
Нет аппаратного I2C
Были глюки с использованием программно SPI (не при прошивке контроллера а при обмене по интерфейсу)

19. -=Dmitry=-, 07.05.2003 12:17
Chipper

IMHO, нужно не только начинать с ассемблера, но и, по возможности, продолжать на ассемблере .

И результирующий код будет много короче, да и с железом работать на асме удобнее.

А чтобы удобнее было писать на асме, нужно иметь свою библиотеку стандартных процедур, типа инициализации RS 232, работы с клавой, дисплеем и т.д.

Добавление от 07.05.2003 12:22:

Zak_Nik

полностью согласен AT89S8252

К стати PC должен быть дешевле чем PI, ведь C = commercial, а I=industrial

20. Zak_Nik, 07.05.2003 12:31
ogurets
PIC - с его 34-ю командами - это точно не для начинающего, ИМХО.
На начальном этапе я бы с RISC не связывался...

21. Staseek, 07.05.2003 13:10
-=Dmitry=-
И результирующий код будет много короче, да и с железом работать на асме удобнее.

Не факт, не факт... Вот, к примеру, я переписал управление LCD на асме, дык на С (HT-PICC) с глобальной оптимизацией он получился в 1.5 раза короче. Тут, наверное, дело в том, что пока напишешь рабочий код на асме, то так натрахаешься, что оптимизировать его потом уже и сил нет, а хороший компилятор С отлично оптимизирует сам.

22. Voland+, 07.05.2003 13:20
Staseek
Не факт, не факт... Вот, к примеру, я переписал управление LCD на асме, дык на С (HT-PICC) с глобальной оптимизацией он получился в 1.5 раза короче. Тут, наверное, дело в том, что пока напишешь рабочий код на асме, то так натрахаешься, что оптимизировать его потом уже и сил нет, а хороший компилятор С отлично оптимизирует сам

Опять-таки, смотря на каком асме. Если в нем 34 команды, то на Сях проще писать, а если 11n (Atmel AVR), то есть повод задуматься над оптимальным программированием и на асме

23. Zak_Nik, 07.05.2003 13:32
Staseek
И еще, смотря как оптимизить. По размеру или (и) по времени выполнения? На асме такой выбор богаче. А может по скорости разработки?
Но вот, например, под 186-ой мне и в голову не приходит писать всё на асме. Памяти программ достаточно, быстродействие устраивает -> выбираем скорость разработки

24. ivn, 07.05.2003 13:41
ogurets
выложи

25. Staseek, 07.05.2003 13:43
И еще, смотря как оптимизить. По размеру или (и) по времени выполнения? На асме такой выбор богаче. А может по скорости разработки?

Согласен
Я довольно ленив, поэтому обычно выбираю скорость разработки и пишу на С. Иногда, довольно редко, в критичных местах вставки на асме.

26. lookUP, 07.05.2003 14:34
Привет всем !
Отлично оказывает поддержку разработчику
( и начинающему тоже ) Microchip, Arizona.
Они высылают БЕСПЛАТНО свой Product Card Line
на 50 стр. + 3 CD-ROMа со всеми даташитами и
Application notes, а также можно выписать
БЕСПЛАТНО образец микроконтроллера, например
PIC16F877A...
Очень неплохие Appl.notes на сайтах Atmel,
Motorola, Zilog, может и они высылают литературу
и sample-ы...было бы неплохо ( мечтательно )
wbr

27. Chipper, 07.05.2003 14:56
-=Dmitry=-
Полностью согласен Я за С-программы для MCS-51 даже и не берусь.
Staseek
Вот, к примеру, я переписал управление LCD на асме, дык на С (HT-PICC) с глобальной оптимизацией он получился в 1.5 раза короче.
Объясните мне как это можно умудриться на асме написать в полтора раза длиннее? Мне наверное этого не понять

Добавление от 07.05.2003 15:07:

А скорость разработки никоим образом не зависит от того на чем пишешь. Если есть хорошо отлаженнея библиотека на асме, то скорость написания уравнивается со скоростью на С. Да еще прибавьте время отладки программы.

28. Zak_Nik, 07.05.2003 15:14
Chipper

А у Staseek, наверное, все задержки на nop'ах без циклов
Скромненький такой килобайтик nop'ов...

29. SmartRed, 07.05.2003 16:08
Кину и я свой камень в этот огород

А почему никто не вспоминает MC68HC908xx ?
Я на это семейство покусился в основном из-за того, что кроме
внутрисхемного программирования в кристалле заложен
внутрисхемный симулятор, и даже убогонький дебаггер с одним брекпоинтом.

Причем все это делается с помощью железки за 20$.
У нас их делает Электроснаб (http://www.electrosnab.ru/components/motorola/kit-mon8.htm)
А за бугром PEmicro (http://www.pemicro.com/)
Софт бесплатный берется с вышеуказанного сайта

30. Zak_Nik, 07.05.2003 16:16
SmartRed
20$
Да за эти деньги Atmel'ом обвешаться можно!
Или поставить полноценный 16-разрядный 186-ой всего за 18 енотов.
Motorola конечно вещь, но за такие деньги...

31. Staseek, 07.05.2003 16:19
Zak_Nik, Chipper

Исходник на асме я скачал с сайта микрочип, так что попрошу без наездов
А если не верите, что на С получилось короче, то могу после праздников скинуть вам на мыло все исходники.

32. SmartRed, 07.05.2003 16:24
Zak_Nik
20$ это не стоимость камня, а стоимость программатора/дебаггера который
в принципе и самому слепить можно
стоимость камешков от 1.5$ в розницу

33. Zak_Nik, 07.05.2003 16:54
Staseek
Если что не так, то прошу прощения
Я ж вроде везде смайликов наставил.

SmartRed
А Атмел - сам себе дебагер.
Вариантов отладки - туча.
Можно вообще его в статику загнать и по носу (такт. генератору) по одному импульсу щелкать.
Есть куча симуляторов, 90% ошибок отловить можно в них.

34. -=Dmitry=-, 07.05.2003 17:00
SmartRed

IMHO, ядро HC08 более функционально, но 51 ядро это классика

цитата:
20$ это не стоимость камня, а стоимость программатора/дебаггера который в принципе и самому слепить можно
не можно а нужно - для практики

Добавление от 07.05.2003 17:10:

Staseek
Вот пример:
Это фрагмент из программы-примера с сайта атмела:

код:
Uchar FindFirstChIt (void)
{
Uchar num_channel = NO_CHANNEL;


if (CANSIT2)
{
bit_var = CANSIT2;
if(bit_0)
{
num_channel = CHANNEL_0;
}
else if (bit_1)
{
num_channel = CHANNEL_1;
}
else if (bit_2)
{
num_channel = CHANNEL_2;
}
else if (bit_3)
{
num_channel = CHANNEL_3;
}
else if (bit_4)
{
num_channel = CHANNEL_4;
}
else if (bit_5)
{
num_channel = CHANNEL_5;
}
else if (bit_6)
{
num_channel = CHANNEL_6;
}
else
{
num_channel = CHANNEL_7;
}

}
else if (CANSIT1)
{
bit_var = CANSIT1;
if(bit_0)
{
num_channel = CHANNEL_8;
}
else if (bit_1)
{
num_channel = CHANNEL_9;
}
else if (bit_2)
{
num_channel = CHANNEL_10;
}
else if (bit_3)
{
num_channel = CHANNEL_11;
}
else if (bit_4)
{
num_channel = CHANNEL_12;
}
else if (bit_5)
{
num_channel = CHANNEL_13;
}
else if (bit_6)
{
num_channel = CHANNEL_14;
}
}

return(num_channel);
}



он аналогичен по своему неазначению дважды повторенному фрагменту на асме:

код:

MOV A,CANSIT2
MOV R0,#08h ; Цикл длиной в 8 шагов
CLR IT_CNTR ; Сброс счетчика прерываний
SCANIT_2_Loop: ;
CLR C ; Сброс С - флага
RRC A ; выдвинуть младший бит в С
JC ITFound ; Проверить С на 1
INC IT_CNTR ; Инкрементировать счетчик прерываний
DJNZ R0,SCANIT_2_Loop ; Переход, пока R0 > 0 на SCANIT_2_Loop



Какой же фрагмент откомпилится в меньший объем кода ?

35. Shinen, 07.05.2003 17:20
Staseek
То, что написано на асме в полтора раза длиннее это не значит что нельзя короче и это зависит от того кто писал и какие цели стояли. Я не могу представить себе ничего написанное на С , что могло бы быть меньше чем на асме , потому как все равно это будет в асме в итоге и как минимум так же можно написать сразу на асме, а скорее всего оптимальней. Я не принимаю во внимание рисковые процы с неудобоваримыми мнемониками (как например у PowerPC) там просто тяжело писать на асме.

36. Mahagam, 07.05.2003 22:55
Shinen
рисковые процы с неудобоваримыми мнемониками (как например у PowerPC) там просто тяжело писать на асме
MSP430 полностью рисковый. но из-за ортогональности системы команд - писать на его Асме - одно удовольствие. по этой же причине и компилятору легко выдать качественный код. я обычно компилю на С, а потом полученный асм правлю ручками.
А Атмел - сам себе дебагер.
а когда дебаггер работает прям в камне... как у MSP430...

37. ogurets, 08.05.2003 11:41
ivn и всем кому нужен туториал с www.bubblesoftonline.com
Идите на www.mcu.cz/atm/, регистрируйтесь и качайте (директрория - PIC tutorial).
И вообще там еще много чего можно наковырять.
А www.elektroda.pl/eboard/ поможет нарыть еще больше...

39. Dmitrij[BtK], 08.05.2003 21:26
pic16C(F)84

просто и дешево и information навалом.

40. quadrat, 09.05.2003 18:30
to lookUP

цитата:

Отлично оказывает поддержку разработчику
( и начинающему тоже ) Microchip, Arizona.
Они высылают БЕСПЛАТНО свой Product Card Line
на 50 стр. + 3 CD-ROMа со всеми даташитами и
Application notes, а также можно выписать
БЕСПЛАТНО образец микроконтроллера, например
PIC16F877A...


а можно конкретнее линк на их страницу? а то Microchip-ов гугл находит воз и маленькую тележку.

Добавление от 09.05.2003 18:32:

...хотя, вроде бы сам нашел: www.microchip.com он?

41. Vesel'chak U, 09.05.2003 20:37
Chipper
цитата:
[i]Порекомендую не сильно увлекаться ассемблером[i]
Как раз и надо начинать с ассемблера, чтобы лучше понять суть микроконтроллера
И где противоречие? Начинать можно на ассемблере (хотя и необязательно), но быстрее переходить на C.

Mahagam
Поддерживаю с MSP430. После него уже ни с чем более убогим (PIC, AVR, x51) работать не хочется.

All
Мой критерий выбора языка - при вычислениях (особенно с плавающей запятой) - однозначно C, может с ассемблерными вставками в критичных местах, при задачах управления - можно и ASM, хотя современные компиляторы (при некотором опыте) дают неплохой код и на C.

42. usb, 10.05.2003 01:32
Shinen
Я не могу представить себе ничего написанное на С , что могло бы быть меньше чем на асме


Написанное на С никогда не будет меньше грамотно написанного кода на асме. А самый короткий код и есть самый быстрый.

43. Shinen, 10.05.2003 01:59
usb
Не совсем так ... если цикл развернуть (unrolled loop , AFAIR зовется), то код разжиреет будь здоров, но при этом скорость может заметно вырасти.

44. VVCh, 10.05.2003 03:17
quadrat
Ядро МК51 (Atmel АТ89С8252 например) - самый простой контроллер для начала, на мой взгляд разумется.

Раз уж речь зашла о С.
Коллеги, для начинающего интересует язык С, работы с atmel'овскими AVR'ами и МК51? И где его скачать? Желательно бесплатное. И заодно ваше мнение об этом.
Заранее спасибо.

45. -=Dmitry=-, 10.05.2003 03:36
VVCh
Я использую микровижн от кейла, версию Keil 6.12 full
Поискать можно на любом поисковике, например на yandex - е

46. usb, 10.05.2003 12:52
Shinen
если цикл развернуть
Выход из цикла всё одно будет по условию . Впрочем это уже частности.
думаю мы друг друга поняли

47. Vesel'chak U, 11.05.2003 03:09
VVCh
Для x51 можно взять ProView32, только в нём плохо отлаживать программы с одновременным использованием C и Asm.

48. Sergiy_k, 11.05.2003 14:30
А я тут по случаю AD2185m от Analog Devices купил, чтобы под нее EZ KIT LITE собрать. Схему нашел, а вот элементы побобрать не получается. Причем даже упростил схему - выбросил память, аудиокодек. Некоторых микросхем найти не могу (на Митино нет, в Аутекс отвечают, что единицы штук продавать не будут). Что делать?

49. Chipper, 12.05.2003 07:10
Vesel'chak U:
цитата:
Начинать можно на ассемблере (хотя и необязательно), но быстрее переходить на C.

Простите, а зачем "быстрее переходить на С"? Тогда уж и начинать надо на С. IMHO С только способствует приобретению "толстых" контроллеров. Речь-то идет не о PC, а о микроконтроллере.

50. romchik, 12.05.2003 09:53
Я в микроконтроллерах начинающий, пока пишу на ассемблере, попробовал на С показалось сложнее чем на ассемблере писать, а размер кода получается на С точно больше.
Вычисления на С писать проще, но это только по началу, а когда для ассемблера наработаны макросы для вычислений и прочего и их остаётся только правильно подставлять в нужные места, то вообще не понятно для чего С нужен микроконтроллерам. Наверное это прост дело привычки кто начинал писать на С.
В конце концов ни чего особо нового мы не придумываем, а складываем программу из готовых кубиков.

51. Shinen, 12.05.2003 10:28
romchik
Интерфейсы (юзерские) всетаки удобнее писать на языке более высокого уровня. Короче всему свое место

52. pin, 12.05.2003 10:37
romchik
Такие показатели, как скорость работы программы и размер кода не всегда важны. Иногда важна переносимость (правда, многие не верят в это).
Программы на C сравнительно легко переносятся на другие процессоры/контроллеры. Пример: www.opentcp.org, стек TCP/IP, написан на C уже под 3 семейства контроллеров, x86 на подходе.

VVCh
бесплатные компиляторы
http://sdcc.sourceforge.net/
http://winavr.sourceforge.net/

[color=gray]PS. Спор "C vs. asm" похож на спор "Linux vs. Windows".[/color]

53. romchik, 12.05.2003 11:11
TCP/IP это хорошо, но во первых сам я писать не буду его, даже на С, во вторых почти сразу же это есть и на ассемблере.

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

54. Vesel'chak U, 13.05.2003 01:19
Chipper
Простите, а зачем "быстрее переходить на С"?
Чтобы понять, что за контроллер и "с чем его едят" лучше начинать на Asm. А C значительно ускоряет программирование. Кто выпускает изделие миллионами штук, тому важнее себестоимость, но большинству у нас в стране важнее скорость разработки из-за малых серий. На C проще не только вычисления, но и легче следить за распределением ресурсов (регистров), точнее вообще не надо думать об этом. Я помню, как при ограниченных ресурсах при отладке программмы на Asm выискивал место порчи содержимого регистров. Программа на C гораздо легче читается - предлагаю сравнить ~4800 (Asm) или ~1400 (C) строк. Даже чтобы набить такую программу уже требуется в 3 раза больше времени, не говоря о том, что на Asm дольше обдумывать, да и ошибок будет больше => отладка сложнее. Про простоту модификации (развития) программы при разных вариантах и говорить нечего - даже сравнивать нет смысла.

P.S. Я сам был большим поклонником Asm, пока не перешёл на C. Теперь - только в тех кристаллах, где C невозможен или длина программы не превышает ~100 строк простых действий.

55. Zak_Nik, 13.05.2003 11:59
Vesel'chak U
Ну, уважаемый не всё так категорично...
С, безусловно, великая вещь, но драйверы устройств пишут, IMHO, на ассемблере.
И еще, C дает выигрыш по времени, сли очень хорошо написан компилятор. К сожалению, компиляторы бывают с ошибками.
А в целом - мысль правильная , но слегка отступает от темы, и уважаемый quadrat что-то не появляется, что бы направить дискуссию в нужное ему русло.

56. quadrat, 13.05.2003 12:31
вот-вот! тема перешла в дискуссию "C vs Assembler", а для "начинающего" - это еще не решающий фактор.
Хотелось бы научиться хотя бы тупо скопировать какое-нибудь устройство. Потом меняя что-нибудь в исходнике прошивки прочуствовать работу МК. И только потом можно решать на чем программировать.
Пока я хотел попросить привести примеры каких-нибудь простых для повторения схем на базе микроконтроллеров.
Типа такого: http://microprocessor.by.ru/samod/0005/mahalka.htm хотя, в данном "устройстве" практической пользы никакой

57. Zak_Nik, 13.05.2003 12:52
quadrat
Я бы тебе порекомендовал схему-макет типа "кнопочки и лампочки". Что-то подобное я тебе уже высылал... В такой схеме, даже удобнее ковыряться. Осциллограф и не нужен.
Т.е. сначала пишешь (берешь) простенький примечик. На нажатие кнопочки лампочку (светодиод) поджечь, на следующее нажатие - потушить. Далее, заставить другую лампочку моргать раз в секунду (поиграться с таймером). И т.д, от простого - к сложному.

Добавление от 13.05.2003 12:58:

Еще можно собрать схему подключения к RS-232, а потом через терминал (HyperTerminal) пообщаться с программой твоего контроллера. Т.е. сначала можно написать "эхо" (отправить принятый символ обратно), потом простенький интерпретатр AT-команд.
Кстати, этот терминал может помочь в будущем для отладки более серьезных программ, позволяя выводить дампы памяти, содержимое регистров.

Добавление от 13.05.2003 13:04:

В приведенном тобой примере использован PIC, но ничего не стоит переделать девайс на MCS-51 или AVR. Самая интересная деталька там - инерционный датчик (акселерометр).

58. -=Dmitry=-, 13.05.2003 14:10
Zak_Nik
Ну, акселерометр - это сильно сказано

quadrat
а самая простая программа может быть такого вида:

код:

start:
mov p1,#00h
loop:
inc p1
jmp loop


Успехов !

59. quadrat, 13.05.2003 14:25
to -=Dmitry=-

а самая простая программа может быть такого вида:

но ведь это, насколько я понимаю, обнуление содержимого памяти?

внешнего проявления от этой программы не будет? - тогда не интересно и не наглядно.

60. Zak_Nik, 13.05.2003 14:51
quadrat
Это просто вывод на порт восьми меандров, на каждую ногу порта 1.
на каждой след ноге частота меандра будет :2
то же, на C
код:

while (1)
{
Port1++;
}

Добавление от 13.05.2003 15:02:

Результат программы можно посмотреть на осциллографе. Или в симуляторе

61. quadrat, 13.05.2003 15:05
to Zak_Nik

понятно.
Спасибо.
значит надо еще и ассемблер вспоминать.

начал читать "Микроконтроллеры? Это же просто!" от сюда: http://www.platan.ru/shem/index.html

62. Kosta_GG, 13.05.2003 15:14
quadrat
Как раз максимум внешнего проявления при минимуме кода. "Hello word" отдыхает
программа инкрементирует внешний порт Р1, т.е. выдает бесконечную комбинацию от 0 до 255...

Проклятый кэш, уже ответили, а у меня и не видно было :-[

63. -=Dmitry=-, 13.05.2003 16:57
Zak_Nik
quadrat
а еще, если контроллер на 51 - м ядре и тактовая частота не очень высока, например 10МГц , то результат можно еще и услышать, подключив высокоомный динамик, между выводами, оответствующими старшим битам порта и Vcc

64. Zak_Nik, 13.05.2003 17:05
-=Dmitry=-

10000/(12*256) = 3.255 КГц - частота на ноге Port1.7 (вот черт, уже всю мнемонику поперезабывал...
Лучше уж не динамик, а резонатор типа ЗП-18

65. -=Dmitry=-, 13.05.2003 17:08
Zak_Nik
я наушником от плеера слушал и на 89s8252 и на 90s2313

66. Zak_Nik, 13.05.2003 17:12
Ой, ошибочка...
Частота будет в 3 раза ниже...
AFAIK, inc - 1 маш. цикл, sjmp - 2 м.ц., итого - 3, а частота - 1.08 КГц
Сорри...

Черт побъери!!! И опять ошибка! Чего-то башка не варит
Каждый inc формирует полпериода
Итак, надеюсь теперь правильно, частота старшего разряда P1 будет 504 Гц.
Уф!

67. Yshur#, 13.05.2003 17:17
Советую AT89S8252 , программы писать на ассемблере (ничего в этом сложного не), программатор через SPI для него можно легко самому собрать ( лично пробовал ). Отлаживать можно с помощью интегрированной среды фирмы Phyton www.phyton.ru (правда в демо режиме т.к. с ней подразумевается использовать аппаратный эмулятор, но для начала вполне достаточно).
Для обучения можешь сделать эмулятор междугородних телефонных карт.

68. Vesel'chak U, 14.05.2003 02:35
quadrat
Рекомендую не увлекаться светодиодами-кнопочками, а делать что-то реальное, причём начинать с простейших функций и добавлять по мере написания и отладки - так и полезное устройство будет сделано и цель изучения достигнута.
У Atmel'а почти к каждому МК есть примеры, причём достаточно простые - можно их повторить.

69. VBKesha, 15.05.2003 17:59
Yshur#
А что правда есть рабочие ато никогда не видел?

70. Yshur#, 16.05.2003 15:07
цитата:
VBKesha:
Yshur#
А что правда есть рабочие ато никогда не видел?

Сам лично не видел. Но читал об алгоритме ее работы. На мой взгляд сэмулировать ее работу не сложно.

71. DrAG0n, 16.05.2003 20:18
А я видел. И держал в руках. Правда, убитую уже. статикой, видимо, пожгли. текстолитка, закрашена чем-то вроде "Штрих"а, на дальнем конце - микроконтроллер. Вот и все дела.

72. -=Dmitry=-, 17.05.2003 00:14
Yshur#
VBKesha

Протокол там простой и его без вопросов можно сэмулировать, но AFAIK, для того, чтобы эмулятор работал, нужно еще и электрические характеристики эмулятора привести в соответствие с характеристиками карты. Да и вообще это не совсем законно .

Если уж так хочется реализовать работать с этими картами, то можно сделать считыватель карт, хотя я считаю его абсолютно бесполезным.

Ну а если делать что нибудь действительно полезное, то можно реализовать интерфейс с PS/2 клавиатурой или мышью, потом его можно будет использовать в своих дальнейших разработках.

73. FlashSighter, 17.05.2003 13:44
А что народ скажет насчет микроконтроллеров СОР8 от Национальных Полупроводников?

74. DrAG0n, 18.05.2003 09:44
Я, честно говоря, даже и словей-то токих не знаю . Ну, NS-то понятно, конечно. И что существует - верю. Но вот в продаже и в разработках не видел. Начинающему рекомендовать точно не стоит.

Я вот щас, разочаровавшись в поделке ангстремовцев К1879ВЕ1, во всю пытаюсь освоить AVR. У менi возник вопрос. В инете куча программаторов по SPI. Некоторые содержат внутри AT90S1200 или AT89... Но ведь их на чем-то сначала надо запрограммировать, да? Далее. Есть куча цепляемых за LPT. Конкретно - http://www.dvor.ru/indirect/im/avrisp-33.gif http://www.dvor.ru/indirect/im/byteblaster.jpg
http://www.dvor.ru/indirect/im/spiprg.gif
Но у них у всех разные соответствия SPI и LPT- выводов. Конечно, работать будет каждый. Но под каждый нужна своя программа. Хочется выбрать как можно более употребительный и стандартный. Чтоб программить можно было из-под ХР и, желательно, сразу из AVR-studio. Есть такой?

75. tiasur, 18.05.2003 11:38
Что вы всё ассемблер, да С... Вот ещё два компилятора с бэйсика
Bascom AVR (http://www.mcselec.com/bascom-avr.htm)
FastAVR (http://www.fastavr.com/index_act.htm)

76. Diamant, 18.05.2003 13:09
DrAG0n
ponyprog под 2000 работает

77. spliner, 18.05.2003 16:17
DrAG0n, кстати ищи схему переходника Dongle ( STK200) - если хочешь прямо из АВР-студии программить..
Впрочем, вот вроде..

К сообщению приложены файлы: 1.gif, 689x451, 19Кb

78. DrAG0n, 18.05.2003 18:11
Diamant
spliner
О. Сенкс. Это и буду собирать. Кстати, что надо понипрогу указать, чтобы он с этим работал? STK200 там нет. Зато можно выбрать "serial/parallel" и какие-то странные устройства.

Еще вопрос. Собираюсь печатать даташит по ATMega8 (собственно, с ней и собираюсь работать - уже купил и макетку спаял). Стоит ли тратить бумагу, тонер и ресурс? Нет ли книг, которые можно купить? (чтоб там все это было)? (актуально до 21-00(19-00 MSK)

79. -=Dmitry=-, 19.05.2003 10:16
DrAG0n
Для того чтобы работать со схемой, которую привел spliner достаточно программы AVR ISP - у меня версия 2.7 - там и выбирать ничего не надо, только тип контроллера.

80. quadrat, 19.05.2003 10:37
итак. пока закупаюсь "железом"

уже заказаны (в пути) на "халяву":
PIC16F877A
PIC16F84A
как я понимаю, в первом есть SPI, во втором - не понял есть или нет.

когда привезут AT89S8252 - пока не знаю.
Поэтому пока ищу простые схемы на основе PIC-ов.

нашел тут (http://www.microchip.ru/lit/?mid=1x0) много документации по PIC-ам на русском языке.
а вот здесь (http://www.telesys.ru/projects.shtml) есть неплохие готовые проекты.

чувствую, что будет МНОГО вопросов...

81. spliner, 19.05.2003 12:39
-=Dmitry=-. В принципе, байт сигнатуры однозначно определяет тип AVR микроконтроллера.
Т.е. программа сама должна определить его тип. (у меня так на самоопальной)..
quadrat как я понимаю, в первом есть SPI, во втором - не понял есть или нет.
Есть - куда ему деться.
Кстати, Микрочип очень охотно рассылает свои диски с даташитами. Закажи.
И Атмел тоже. Но мне пришлось (в случае Атмела) какую-то анкету заполнять - т.к. слали из Российского представительства.

82. -=Dmitry=-, 19.05.2003 12:51
spliner
Там проект создается под конкретный контроллер, от этого объемы памяти зависят и т.д.
IMHO, в данном случае сигнатура читается, чтобы определить что программируется контроллер, соответствующий типу, указанному в проекте.

83. spliner, 19.05.2003 12:57
-=Dmitry=- Да это понятно.. Так, к слову.

84. quadrat, 21.05.2003 14:49
ну вот. получил PIC16F84 и PIC16F877

думаю сделать что-то на первом, т.к. второй относительно крут для начальных эксперементов.

Сделаю что-нибудь типа "лампочек-кнопочек" ну или "бегущие огни"... лишь бы разобраться с программированием и убедиться что это работает.

схему включения более-менее представляю... печатку для начало сделаю типа Test-board, т.е. с разводкой и свободными клемами...

но вот с программированием (всмысле сам процесс прошивки) - "темный лес"...
Посоветуйте простенькую схему (я так понял выше приводилось несколько вариантов) и программу для этих целей... позволяет ли программатор вначале записать в МК, а потом считать то, что записано... если "да" , то вначале хотя бы проверить это... т.е. убедиться что получается его зашить хотя бы чем-попало.

85. -=Dmitry=-, 21.05.2003 14:59
quadrat

цитата:
но вот с программированием (всмысле сам процесс прошивки) - "темный лес"...
Эта (http://www.lancos.com/prog.html) страничка поможет.

86. Diamant, 21.05.2003 15:50
или IC-PROG - там туева хуча схем программаторов и некоторые советуют пользоваться именно им, а не Лошадью-Пржевальского. Автор лошади сам далеко не все чипы тестит.
http://www.ic-prog.com/index1.htm

87. quadrat, 21.05.2003 16:56
вот, вроде самая простая схема программатора:
513x273, 6.3Kb
будет ли она работать с PIC16F84A?

88. VBKesha, 02.10.2003 16:53
Люди вы говори что микрочипы и атмелы можно пробные экземпляры бесплатно. Дайте прямую ссылку не могу найти.

89. quadrat, 02.10.2003 17:11
to VBKesha

http://sample.microchip.com/ - Это PIC-и, а про Атмелы не знаю...

PIC-и мне приходили, еще приходил Zilog Z8 Encore и несколько усилительных микрух от National-а, но попробовал сделать еще один заказ на National - уже сказали "Сорри..."

90. VBKesha, 02.10.2003 17:29
quadrat
Спасибо заказываю уже.

91. Черный Кот, 05.10.2003 10:08
По поводу C vs Asm. Не самая умная тема конечно, но выскажусь. Возможно на С писать приятнее и переносимее. Но... На его освоение требуется раза в 3 если не на порядок больше времени. Если конечно речь идет о сколь-нибудь серьезных проектах. Дело в том, что для серьезной работы на С требуется очень хорошо знать особенности конкретного компилятора. Т.е. во что он превращает те или иные конструкции языка. Иначе можно очень быстро исчерпать память и быстродействие. Не забывайте, что мы не окошки под виндой рисуем, а пишем для реального железа, причем железа предельно слабого в сравнении с PC. Для 8051 IMHO ничего кроме асма всерьез не существует. На AVR С дает более не менее приемлемые результаты. Что вобщем то не удивительно если сравнить архитектуры...

По поводу учебы. Самая сложная задача - выбрать проект. Основное требование - проект должен быть нужен и интересен. Далее всё легко. Что бы я посоветовал для начала - однозначно AVR. Например Atmega16. 8К слов программной памяти, 1К ОЗУ, 512 байт EEPROM, и куча переферии. Шьется по 5 проводам от LPT-порта. Кроме того куча бесплатного софта, в том числе как я уже говорил, можно более не менее приемлемо писать на С. ATmega кроме того имеет интерфейс Jtag, через который можно отлаживаться прямо в схеме. Кстати огромное спасибо автору странички http://avr123.by.ru (он вроде тоже тут появляется) за схему и прошивку JTAG ICE. Скоро я раздам всем желающим приблудину, позволяющую не покупать фирменную железку за 300 грина и не паять её самому, а запускать Jtag-отладку в AVRStudio через тот же LPT-порт. Так что у АVR IMHO всё в пуле и ничего в горе

С почтением
Его Мурлычество Черный Кот
Гроза мышей, бомжей и тараканов

92. romchik, 05.10.2003 11:19
Программировать только на Асм если только начал, так как лучше поймёшь микроконтроллер да и программы будут меньше по размеру, да и быстрее.
Если стал крут и полностью разобрался с С тогда самое трудное на нём со вставками критичных кусков программы на ассемблере.
Сам использую только Pic у них слишком хорошая поддержка на русском что бы ей пренебрегать, атмелу тут очень далеко, естественно то, что вскользь преподают для атмелов или 51 в институтах не в счёт.
Интересно что те кто только начинает и ему не преподавали например 51 или Атмелы выбирают как правило Pic, несмотря на все усилия тех кто на 51 и Атмелах сидит.

93. Черный Кот, 05.10.2003 16:26
2romchik. Посмотрел сейчас microchip.ru. Что я могу сказать... В отношении поддержки и спорить с тобой не хочу. Avr бы такую... Реально по нему увы нет почти ничего на русском. Но что касается остального... Во-первых пусть тебя не смущает тактовая частота в 40 мег. У Пика цикл занимает 4 такта и реально это 10М циклов в секунду. У AVR цикл один такт. И семейство ATmega следовательно имеет до 16М циклов в секунду. Плюс значительно более развитая система команд и регистровая, а не аккумуляторная как у Пика архитектура (что кстати и позволило портировать под него gcc). Во вторых цены. Однократно программируемые по ценам возможно смотрятся и неплохо (хотя по-моему всё же чуть хуже AVR) но для обучения и разработок по понятным причинам мало годятся. В третьих, начинать всерьез читать по-английски всё равно рано или поздно придется. И освоение микроконтроллеров IMHO не худший для этого повод Так что мое мнение все-таки остается прежним

94. Матвеев Андрей, 06.10.2003 02:56
romchik
По AVR уже было две книги на русском языке, считай полный перевод даташитов. Если и этой инфы кому-то мало для того, чтобы начать работать то лучше вообще оставить эту затею.

95. DrAG0n, 06.10.2003 07:41
Я тоже за AVR.
Если у кого есть желание - можно попереводить даташиты коллективно. У меня вот было желание перевести про таймер для ATMega8. Но потом прочитал и так. Хотя, конечно, есть тонкости разные.

96. Shinen, 06.10.2003 10:08
IMHO кто хочет вариться в этом котле - все равно нужно знать английский, хотя бы на уровне чтения с лингвой потому как 99,9% документаций на электронные компоненты на английском языке.

97. Черный Кот, 06.10.2003 18:27
Андрей, те книги что вышли IMHO несерьезно. Смотрел одну из них. Там о весьма старых членах семейства. Кстати и в сети о них инфа на русском есть. Но о мегах нет ничего. А именно они наверное наиболее интересны. Все-таки JTAG это уже очень серьезная фича. В ближайшие дни закончу приблудину заменяющую AVR JTAG ICE, и залью её всем желающим. Тогда оцените что такое настоящий хардварный дебугер...

DrAGOn, похвально конечно, но смысл ? ) Кому надо прочитает и так. А кому не надо... Тем и переводы не помогут. И вообще без труда как говорят не вынешь и рыбки из пруда

Shinen, абсолютно с тобой согласен. Это как латынь 500 лет назад. Тогда тоже все научные тексты писались на латыни и от её изучения было не уйти если занимаешся наукой

99. OverGluker, 06.10.2003 21:19
Кстати, о MSP430...
Весчь заманчивая чрезвычайно (судя по анонсам), хотелось бы изучить поближе, но... где-то у них на сайте прочитал, что для программирования и отладки нужна жутко дорогая железяка, которую покупать не хочется.
Поэтому вопрос:
1. Можно ли его запрограммировать, например, от LPT-порта (или что-нибудь в этом роде).
2. Можно ли под него найти программный эмулятор, ассемблер, какую-нибудь удобную среду разработки, и т.п. А то на сайте вроде бы за все это денег хотят.
3. Сколько стоят флешевые (т.е., многократного перепрограммирования) чипы и у кого (в России, разумеется) самый широкий выбор.

100. Черный Кот, 06.10.2003 21:36
OverGluker, Подробно я её не изучал. Флешевые вроде бы есть и по приемлемым ценам. Сходи на www.scan.ru Что касается железки, программируется она как я помню через JTAG. Так что если будет надо - взломаю фирменный софт и подцеплю его к LPT-порту напрямую, как я уже проделал с AVRStudio. Эмуляторы, ассемблеры и прочее - доступны и встречаются на компактах серии "Микроконтроллеры", "В помощь радиолюбителю" и иже с ними. Есть компиляторы С, по крайней мере один от IAR. И вроде даже демоверсию дают скачать. А сделать её не демо - дело техники. Понадобится - сделаю

101. OverGluker, 06.10.2003 21:57
Черный Кот
Сходи на www.scan.ru
Что-то я там никак не могу найти упоминания о микроконтроллерах... ... что-то у меня с глазом
Так что если будет надо - взломаю фирменный софт и подцеплю его к LPT-порту напрямую...
Как с тобой связаться, если будет надо...

102. Черный Кот, 06.10.2003 22:13
Извини за эту ссылку. Там и правда трудно найти. Сходи на http://www.texas.ru/uc/uc.html это прямо точно туда куда надо. А связаться по мылу конечно. eugenk@comail.ru Единственно, ломаю я только то что нужно мне самому

103. Vesel'chak U, 07.10.2003 04:00
OverGluker
JTAG паяется на одной микросхеме 74HC244. С программой тоже просто. На сайте TI есть IAR kick start - компилятор ASM+C с soft/hard отладчиком (ограничение по коду 2 кБ), на сайте IAR есть полнофункциональная демоверсия (с библиотеками) на 30 дней. Дальше - дело техники и hex-редактора (ссылку с подробностями могу дать).

104. OverGluker, 07.10.2003 14:55
Vesel'chak U

Ага, понятно. Сенькс. Очень обнадеживает.
Ссылку, если не трудно, пожалуйста сюда.

105. Матвеев Андрей, 08.10.2003 04:39
Черный Кот
те книги что вышли IMHO несерьезно. Смотрел одну из них
Не знаю что за книгу ты видел, у меня по мегам дома книга лежит. А что касаемо книги по семейству Classic то это вообще на мой взгля лучшая книга, там описано практически всё, за исключением такой специфики характерной только для меги как самопрограммирование, прерывания по любому изменению фронтов ну и плюс всё, что связано с умножением.

106. Черный Кот, 08.10.2003 05:51
По мегам ????? Не видал... Что за книга ? Но если это так, значит тем более пропадает последний аргумент сторонников пиков Впрочем я предпочитаю все-таки не книги, а фирменные даташиты...

107. Homo_r, 08.10.2003 11:21
Матвеев Андрей
Можно чуть подробней про книжки, если несложно с кратеньким резюме.
Тут, понимаешь, купил одну, за авторством Голубцова М.С. – «Микроконтроллеры AVR: от простого к сложному» - получил урезанный сборник некоторых статей, которые тут же нашёл в инете.

108. quadrat, 08.10.2003 16:26
остановился я пока на PIC-ах (литературы действительно - более чем досточно)

главный вопрос:

приведите кто-нибудь заведомо работующую связку:
программа программатор + схема подключения для программирования (PIC16F84, PIC16F877)

теории начитался более чем досточно, халявными образцами облажился... идеи в голове одна другую вытесняют - надо скорее реализовывать в железе!

109. Черный Кот, 08.10.2003 19:18
quadrat Нда... Вот она разница между пиками и атмелями... На атмели программатор представляет собой разъем втыкаемый в LPT-порт, 5 проводов, переходничек и ответная часть на плате с микросхемой... С пиками - не знаю. Помню что там требуется повышенное напряжение. Сходи на http://www.svtehs.com/ru/embedded.htm
Это вообще классное место, в том числе найдешь инфу по пикам.
Удачи !

110. Shinen, 09.10.2003 00:28
Черный Кот
всетаки лучше буфер еще поставить

111. Черный Кот, 09.10.2003 01:30
Shinen Согласен насчет буфера, да лень вперед меня родилась... Вот спалю атмелину или того хуже порт, начну предохраняться Сам себе удивляюсь. Никогда не разрабатываю схем, где железо теоретически может накрыться из-за ошибки в программе. А с программатором моим - увы, именно эта ситуация и терплю

112. Magik, 09.10.2003 05:52
quadrat
Сходи на PICовую конфу
microchip.ru (http://www.microchip.ru/phorum/list.php?f=2&t=0&a=1)
там и спрашивай что и как и где,
а здесь народ на AVR зацикленый,не достучишься.
А там на сайте есть раздел "ссылки"...на всё
ну и просто по архивам конфы пройдись-посмотри,
четко сформулируй что тебя интересует и спроси.
А программаторов для PICов-как грязи-любых.
Черный Кот
На атмели программатор представляет собой разъем втыкаемый в LPT-порт, 5 проводов, переходничек и ответная часть на плате с микросхемой...
Для F84 помнится был где-то программатор на 3-х!
транзисторах...через LPT,по 5 проводкам...
Сам я пользуюсь полупромышленым и так сразу
навести на цель не смогу,как-то не актуально было.
Извините

Но если это так, значит тем более пропадает последний аргумент сторонников пиков
Это не последний аргумент...далеко не последний
и даже он никуда не пропадает.
Где можно найти эту книгу?В Москве-то с фонарями
искать надо наверно,а по всей стране...?

P.S.
PIC для программирования подключается:
2 ноги-информация(PB6,PB7)
1 нога-управление (MCLR)
2 провода Uпит и GND
итого 3(5)проводков-это практически для всех PICов одинаково
P.S.2 можешь меня подёргать по мылу-чем смогу помогу

113. Черный Кот, 09.10.2003 07:42
Magik Ладно, не будем начинать религиозную войну из серии "альтера vs ксалинкс", "verilog vs vhdl", "спартак vs цска" А 12 вольт для прошивки 1684 все-таки по-моему нужны...

114. quadrat, 09.10.2003 09:39
Magik

Спасибо! конференция там действительно хорошая! уже нашел ответы на многие вопросы.

но всё-таки, простого для самостоятельного изготовления программатора пока не нашел.
вот саоме простое, но будет ли он работать со всеми ПИКами? кто-нибудь пробовал что-то похожее?

513x273, 6.3Kb
схема взята от сюда (http://www.ic-prog.com)

Те у кого я спрашивал - говорят, что пользуются готовыми (купленными) программаторами.

115. romchik, 09.10.2003 10:15
Это далеко не лучший, ProPic2 собирай, из пиков понимает всё, ic-prog с ним работает нормально.
Лучше чем этот не найти, лучше в том плане что оболочка бесплатная, а сам программатор простой, программирует все Pic. Программатор должен иметь определённые схемные решения в этом всё есть, более простой будет работать не стабильно может глючить.
Для пиков 12в необязательно хватит и 5 вольт есть режим низковольтного внутрисхемного программирования.
Но если собирать программатор то какая разница сколько вольт 12 вольт не проблема и не затраты.

116. io, 09.10.2003 13:16
и я тоже закину камень
Вообщем много чего написано... я все прочитал и сделал свои выводы, как мне кажется не важо на чем пишешь на асме или с почти одно и тоже, для начинающего важно разобраться как запустить контроллер чтоб он хоть пальцом пошевилил, я очень много и долго писал и на асме и на си (на х86) для компов, знаю как работает железо, но с контроллером я уже стоко имею "близкую связь", то то то се и помоему все таки лучше просто объяснить как его запустить и как принять/послать сигнал на порт, имею ввиду лично.

117. Tahoe, 09.10.2003 14:26
io
для начинающего важно разобраться как запустить контроллер чтоб он хоть пальцом пошевилил
Абсолютно верно. Только про это в "книжках" не пишут. То про что пишут в книжках по МК ориентировано на следующие этапы, т.е. когда эта книжка не очень-то уже и нужна.
Лучшие "книжки" по МК - это DataSheet и AppNotes. Остальное из серии "Word для чайника" и т.п. лабуда. Первая и последняя "книжка" которую я купил небезызвестный Разевиг - "Orcad" .

все таки лучше просто объяснить как его запустить
По-моему, с любым контроллером работа начинается одинаково.
1. Подать питание (зацепить GND и VCC, _проверить_ что оно есть)
2. Проверить/подтянуть reset.
3. Если генератор внешний - убедиться что он запустился.

А теперь - "первая радость", когда проргамматор "увидит" этот камушек. Ясное дело, чем проще на этом этапе программатор, тем выше вероятность что все сработает.

Меня, например, ничем не смущает "avreal" для AVR - до сих пор его пользую.
А вот для MSP430 поработать паялом придется.
За PIC не скажу - "ин_схема" не шил, у меня старенький PicProg имеется. Но Бог милостив ко мне - нужды шить PICи у меня нету.

А опосля можно уже и JTAGе думать, но для начинающего это ни к чему.

118. Зинец Виктор, 09.10.2003 17:19
quadrat
чтоб быть "типа полезным" - картинка на схему программатора (16х8х и 16х87х), работает, сам ею программировал 16ф84: сцылка (http://lytnev.newmail.ru/shemes/picprog.mm/mypicprog.gif) , 9 деталей, из которых самая "сложная" - транзистор кт315...
программу-программатор использовал ic-prog, в настройках надо сказать, что у тебя JDM prog

а еще сайт avrbeginners.net - разжевывают что такое ассемблер, что можно сделать с контроллером и т.д.

а дальше флейм - на чем играться (ну сейчас же это называется так? это когда еще оно _может_ перерасти в что-то серьезное...)... что такое контроллер я узнал в общем-то совсем недавно; у меня уже был 16ф84, поэтому свои "игры" начинал с ним - а сейчас опять играюсь, но с avr (2313 и mega8): как-то все не в пользу пика - 16ф84 (у нас в Запорожье по крайней мере) стоит столько же, сколько ATmega8, хотя у последнего намного больше возможностей (уарт строенный, чтоб к ком-порту тому же подцепится, шим-ы там (3 штуки), яркость лампочек порегулить, всякие аналог-компараторы (напругу на той же лампочке померять

AVRStudio как окошко для ввода текста и отладки как-то тоже более дружественно выглядит (мне на фоне ide делфи все остальное как голым попом в холодную воду)

это мои имхи как человека, который контроллерами занимается по вечерам/ночам исключ. для собственного удовольствия

и свои вопросы: программирую avr программатором sp-12 (шнурок к лпт), но хочу сделать AVRISP по схеме из app note avr910; точнее даже сделал, есессно ничего не заработало; заменил преобраз. уровней (на него грешил) на мах232 (работает в живом проекте), все равно "до лампочки" - если вызвать программатор из avrstudio (tools -> avr prog), он вроде запускается (раньше просто вопил, что не найдено устройство), читает флеш, но читает одни $ff, писать не пишет (вываливает ошибку при проверке). Если вызвать Tools -> STK500/AVRISP, в окошке пишет Detecting - FAILED... и на этом тоже все

кто-нибудь (особенно из юзающих: <b>Tahoe</b> обьясните - из avrstudio можно с помощью него прошивать?? а то может я не в те двери долбусь? потому что хочется удобненько так откомпилить, шнурок надеть на платку, кнопочку жмакнуть, проверить, а sp-12 из командной строки - пока найдешь окошко нужное, а шнурок к лпт короткий, а потом ключик забудешь... а давеча вон долбился с уартом, все не получалось и не получалось, а потом доперло, что мега с заводскими fuses-ами на 1 МГц работала, а все на 12 настраивал - так бы я мимо закладки нужной может и не прошел...

или может ничего особого avrisp по сравнению с "лпт-шным" не даст? придется тогда S1200 поюзать на какую-нибудь мигалку малому в велосипед

119. Vesel'chak U, 10.10.2003 04:16
OverGluker
Выслал.

120. Drex, 10.10.2003 12:24
Вот этим для прошивки PIC16F84 я пользуюсь
Вот тут (http://www.kirov.ru/~ra4nalr/main/prgpic.html) схема и софт по ДОС
а тут (http://www.ic-prog.com) есть замечательная софтинка под Винды вплоть до XP.

В программе выбираешь программатор "AN589 Programmer" и вперед. Только на быстром компе у меня сним возникла проблема. Когда программатор подключен к LPT через шнур в полтора метра пик не хотел зашиваться этой программой, а досовской шился запросто. Но потом повесил программатор прямо на порт и стали работать обе программы. Виндовская несомненно удобнее хотя бы тем, что не надо перезагружаться с дискетки. 12 вольт беру прямо из разъема питания дисков, проблем не доставляет так как почти всегда комп стоит со снятой стенкой

121. quadrat, 10.10.2003 13:15
Зинец Виктор
спасибо за схему!

а вот это - печатная плата для него?
425x322, 9.4Kb

122. VBKesha, 10.10.2003 16:25
Люди кто заказывал пробные версии ПОМОГИТЕ. Не могу заказать в россию что не присылают.

123. Black Man, 10.10.2003 19:10
VBKesha

Халява ПРИКРЫТА . . . . .

Надеюсь не на всегда . . . .

124. Зинец Виктор, 11.10.2003 02:20
quadrat

не знаю, я паял "проводками"

125. master@rott, 11.10.2003 20:44
На самом деле,если есть хоть небольшая возможность заплатить, то у Фитона можно купить Кит-авр с загрузчиком-отладчиком.Очень неплохая уже готовая плата-просто бери и учи.Но это,если есть возможность заплатить-)

126. Казан, 11.10.2003 23:09
master@rott:
Склько за один комплект?

127. master@rott, 12.10.2003 08:06
Казан
За кит-2600 рублей, сколько за отладчик-не знаю,но важен тот факт, что его они пока производят.Аналогичный дешевый отладчик для 8051 они давно сняли с производства. угораздило их это сделать именно тогда, когда у меня он накрылся!Теперь приходится пользоваться емд-256, а это.. даже sfr отредактировать нельзя

128. io, 13.10.2003 16:01
quadrat
У меня есть енто чудо (в смысле MSP430) и все к нему прилагающееся, вместе продавалось и компилятор си и ассемблер и все все все... если че надо могу поделиться, а пока заставляю его ногами дергать пока нихрена не получается

129. quadrat, 13.10.2003 16:32
io

это отладочная плата или только проц?

130. io, 13.10.2003 17:21
quadrat
и проц и jtag через lpt порт

131. quadrat, 15.10.2003 09:46
вчера сделал программатор по схеме:
574x375, 9.8Kb

но ради контроля вначале поставил светодиод (через резистор 1кОм) на ногу VDD. Из-за этого программатор отказывался программировать, пока этот светодиод не выпаял. Что за фигня? почему там нельзя его поставить? хотя это и не принципиально - главное, что:

Первый шаг сделан!

PIC16F84A прошилась нормально, а вот PIC16C72 отказалась прошиваться, или он и не должен прошиваться этой схемой?

132. Vesel'chak U, 16.10.2003 04:49
quadrat
почему там нельзя его поставить?
Ток жрёт и питание просаживается.

133. OverGluker, 16.10.2003 23:29
Vesel'chak U
Сенькс за ссылку!

ALL
Кстати, по теме...

Натолкнулся на неск. статей в "Компутерре", где автор дает интервью (немного пространно) на темы "С чего начать", "Какой контроллер выбрать", "На чем писать", и т.п.
Вот ссылки:
http://www.kinnet.ru/cterra/404/11420.html
http://www.kinnet.ru/cterra/404/11419.html
http://www.kinnet.ru/cterra/404/11418.html

Может, кому интересно будет...

134. Vesel'chak U, 17.10.2003 03:14
OverGluker
Статьи немного устарели и кое-где однобокий подход.

135. VBKesha, 17.10.2003 18:50
Кто нибудь знает в инете магазин торгующий деталями ато по месту жительства ничего не достать

136. OverGluker, 17.10.2003 22:52
VBKesha

http://www.chipinfo.ru/

137. VBKesha, 21.10.2003 16:25
OverGluker
Спасибо.

All
Слышал что из PIC16F84 Можно прочитать прошивку даже ели установлены биты защиты. Кто нибудь знает как?

138. Hrustic, 21.10.2003 16:39
VBKesha
Это давно (года 2-3 назад) прикрыли. Позволял это делать зеленоградский PICPROG (были и другие программаторы). На семинаре микрочипа в москве продемонстрировали это фирмачам. Через 3 месяца они выпустили версию 84го с буковкой B - в ней уже эта дыра была закрыта.
На продаюшихся в настоящее время пиках IMHO дыр нет.

139. Magik, 22.10.2003 02:13
Hrustic
...версию 84го с буковкой B - в ней уже эта дыра была закрыта
наверно имелась в виду буковка А?
А также все последующие PICи.

140. Hrustic, 22.10.2003 11:07
Magik
Виноватс, это мне наверное музыка навеяла "А"

141. VBKesha, 22.10.2003 17:04
ЭХ а жаль.

142. quadrat, 23.10.2003 15:25
вот такой простой вопрос возник в процессе...

возник недостаток портов:
как правильно посадить на один их каналов порта ввода-вывода контроллера одновременно и ввод данных (кнопка) и вывод (светодиод или светодиодный семисегментный индикатор)..

мне пока представляется только такая схема:
299x133, 1.0Kb

и в момент сканирования клавиатуры запиминаем состояние светодиода, гасим его светодиод, переключаем этот канал на ввод данных (TRISB), опрашиваем порт... переключаем в режим вывода, и опять если надо зажигаем свтодиод (востанавливаем состояние)

но у нее есть недостаток: при нажатии на кнопку - всегда будет загораться светодиод.

я думаю, что надо как-то подругому...

К сообщению приложены файлы: 1.gif, 299x133, 1Кb

143. ditter, 23.10.2003 23:17
quadrat
может надо диод добавить ???

144. Mahagam, 23.10.2003 23:30
quadrat
твоя схема запросто спалит чип - что будет если я нажму кнопку, когда порт работает на выход и выдаёт лог "0" ??
так не делается

145. quadrat, 24.10.2003 09:12
Mahagam
я же говорю, что эта схема неверная... и прошу помочь

ditter
может надо диод добавить ???
Где?

146. VBKesha, 28.11.2003 17:12
Возник такой вопрос.
Есть ли микроконтроллеры которым нужно только питание и никаких кварцев.

147. Zak_Nik, 28.11.2003 17:48
VBKesha
сорри, попутал. Исправляюсь
ATTiny22 и т.д.. Внутри есть RC цепочка. 1 МГц, вроде
quadrat
кнопку прицепить впараллель светодиоду, резистор оставить. Всё будет работать (если у порта есть PullUp)

148. VBKesha, 28.11.2003 17:56
Zak_Nik
Спасибо

149. quadrat, 28.11.2003 18:04
VBKesha
Есть ли микроконтроллеры которым нужно только питание и никаких кварцев.
Есть. среди PIC-ов, например, мне в последнее время симпотизирует PIC12F629/PIC12F675... там даже резистор на MCLR встроенный есть.

правда из-за этой встроенной RC цепочки возникли проблемы с простым COM программатором, пришлось наваять на LPT порт.

Zak_Nik
кнопку прицепить впараллель светодиоду, резистор оставить. Всё будет работать (если у порта есть PullUp)

но при нажатии кнопки будет тухнуть светодиод... что за PullUp? защита от перегруза выхода?

150. Zak_Nik, 28.11.2003 22:27
quadrat
PullUp resistor - резистор (в схеме порта MPU), подтягивающий линию к питанию. PullDown - к минусу питания.

Будет тухнуть - индикация нажатия
В существующую схему, последовательно с кнопкой добавь резистор, рассчитанный на максимальный ток порта (чуть меньше) по выходу, при формировании нуля (обычно этот ток довольно большой, единицы-десятки милиампер).
Кстати, какой выходной ток у него больше? единицы или нуля? Если нуля, то светодиод лучше поджигать нулем. Анод на питание, катод, через резистор - на порт.
А светодиод всегда помаргивать будет при нажатии кнопки, у тебя же уровень меняться будет на порту.

151. Mura-vey, 01.12.2003 22:11
у меня вопрос по теме, решил не создавать новую тему дабы не забивать форум. Чем различачаються следующие МК, кроме цены?

AT89S8252-24AC AT89S8252-24AI AT89S8252-24JI AT89S8252-24PC AT89S8252-24PI

И ещё как в этих МК писать во флеш память?

152. Chudik, 01.12.2003 22:58
Обычно типом исполнения, т.е. корпусом и/или температурным диапазоном. Проще доку почитать. Обычно там это всё есть

153. spliner, 01.12.2003 23:17
Mura-vey Корпусами..
Слушай, посмотри Datasheet (http://www.atmel.com/dyn/resources/prod_documents/doc0401.pdf)
Как программировать (http://www.atmel.com/dyn/resources/prod_documents/DOC0898.PDF)
Программирование - стандартное по SPI интерфейсу...

154. Zak_Nik, 02.12.2003 12:19
Первая буква - корпус P -Plastic DIP, J- PLCC (вроде).
Вторая буква - температурный диапазон. С- коммерческий (0...+80), I -индастриал (-40...+80), M - милитари (-40... +125)

155. Yshur#, 02.12.2003 13:55
цитата:
Mura-vey:
у меня вопрос по теме, решил не создавать новую тему дабы не забивать форум. Чем различачаються следующие МК, кроме цены?

AT89S8252-24AC AT89S8252-24AI AT89S8252-24JI AT89S8252-24PC AT89S8252-24PI

И ещё как в этих МК писать во флеш память?

Программировать можно через LPT порт компьютера.

156. spliner, 02.12.2003 14:10
quadrat. По приведенной тобой схеме. Мне, честно говоря, страшно смотреть на такие схемы..
У RS232 уровни ведь не TTL. Ну, терпят эти PIC-и такое обращение.. Но не обязаны..
В РonyProge это гораздо цивилизованнее обустроено.

157. quadrat, 02.12.2003 14:27
spliner

о чём ты? о программаторе? так я уже сделал TAIT-Classic (http://www.ic-prog.com/cpp.gif) (после того, как не смог JDM-ом прошить 12F629)

158. spliner, 02.12.2003 16:47
quadrat
spliner
о чём ты?


Я о той схеме, которая приведена тобой здесь.
Неужели не понятно?

159. Mura-vey, 04.12.2003 22:37
Во флеш память из самого контролера можнозаносить данный на постоянное хранение, а затем обрщаться к ним? Вообще можно сделать так что бы можно было эти данные ВЫПОЛНИТЬ?

160. Shinen, 05.12.2003 00:36
Mura-vey
Можно - написать интерпретатор или писать в программную область, но тогда ресурс более ограничен будет.

161. Chudik, 05.12.2003 02:48
Mura-vey
Вообще можно сделать так что бы можно было эти данные ВЫПОЛНИТЬ?
Называется самомодифицирующийся код. Обычно используется при жутком ограничении в памяти или кулхацкерами

162. Vesel'chak U, 05.12.2003 04:26
Chudik
Это зависит от архитектуры МК. В неймановской - нормальное явление. Причём писать можно и данные.

163. Mura-vey, 08.12.2003 01:27
Просто хочу набирать на клавиатуре (напр. с 16-ю клавишами) код, заносить его в память, а потом выполнять. Этакий самоперепрограмируемый МК.

164. Vesel'chak U, 08.12.2003 02:45
Mura-vey
Ну так прямой путь на неймановскую архитектуру. Иначе придётся извращаться.

165. VBKesha, 10.12.2003 16:06
Vesel'chak U
Фирму производитель и название микроконтроллеров напиши, если не сложно.

166. Zak_Nik, 10.12.2003 17:06
VBKesha
Любой, в принципе, способный выполнять программу из ОЗУ.
Например, MCS51 с внешней ОЗУ (прога есс-но выполняется оттуда), любой x86... А конкретная реализация - это уже вопросы программирования. Например у меня 186 загружает в ОЗУ монитор, из флеши, затем сам себе, по некоторым условиям делает адрес перехода (вычисляет) и подгрузив нужный модуль передает туда управление.

167. VBKesha, 10.12.2003 17:46
Zak_Nik
Хочется чтобы программа и данные записывались во флеш.
B 86186 если я не ошибаюсь это микропроцессор, а не микроконтроллер.

168. Vesel'chak U, 11.12.2003 03:45
VBKesha
Texas Instruments MSP430.
Один минус - блоки стираются целиком (512 байт), но ежели взять МК с хорошим ОЗУ, то и это не страшно. Есть в нём и 2 сегмента "Information memory" по 256 байт. Можно программу грузить в ОЗУ и выполнять оттуда.
У меня есть мечта сделать возможность перепрошивки firmware через RS232, но пока некогда, да и начальство не видит нужды.
Короче - классическая принстонская архитектура. Но это даёт замедление при работе с некоторыми типами данных, по сравнению с гарвардской архитектурой.

169. VBKesha, 11.12.2003 16:42
Vesel'chak U
Спаибо посмотрю.

171. Chudik, 13.01.2004 21:02
VBKesha
Можешь ещё на eZ80 глянуть. Тоже фон Нейман.
Если не поздно ещё

172. Mahagam, 13.01.2004 21:49
Для атмеловских камней (AT90-серия например) очень прикольно, а после небольшого привыкания и очень даже удобно пользоваться Algorithm Builder`ом - что-то типа визуального ассемблера (сорри если уже советовали)
Но все равно, MSP430 куда приятнее программировать. такой уж там удобный ассемблер.

173. Tahoe, 14.01.2004 08:35
Vesel'chak U
У меня есть мечта сделать возможность перепрошивки firmware через RS232, но пока некогда, да и начальство не видит нужды.
А вот так (http://focus.ti.com/docs/analog/catalog/resource/appnoteabstract.jhtml?familyId=342&abstractName=slaa089a) или так (http://focus.ti.com/docs/analog/catalog/resource/appnoteabstract.jhtml?familyId=342&abstractName=slaa096b) не нравится?

174. Vesel'chak U, 15.01.2004 04:46
Tahoe
Видимо так и надо делать, но пока не получится.

175. Chudik, 03.02.2004 02:16
сделать возможность перепрошивки firmware через RS232
У меня эта задача встала во весь рост. Проблема в том, что не могу понять, как задать абсолютный адрес функции для х86 в Paradigm C, чтобы можно было её вызвать после загрузки и прошивки.

Может кто подскажет?

176. Kosta_GG, 03.02.2004 11:07
Раз уж зашел вопрос про firmware через RS232 то эта функция реализована на 51-м ядре у Атмела в (А)Т89С51RD2 и подобных...В даташите напысано что для программирования достаточно 4 провода, два из них питание и два последовательный канал.
Правда это если передашь управление на бутлоадер из программы. Чтоб передать на него управление "извне" необходимо при перепаде RESET выставить EA и ALE в HIGH , а PSEN в LOW.
цитата:
The default bootloader can also be executed by holding PSEN LOW, EA HIGH, and ALE HIGH(or not connected) at the falling edge of RESET. This has the same effect as having a non-zero status byte and the Boot Vector equal to FCh.
На сайте есть также прога дла программирования(FLIP) а так же НЕХ файл прошивки бутлоадера... издохники тож должны быть, но я пока не нашел их(вернее нашел что-то на Си, но не разбирался бутлоадер это или что-то другое). Причем есть возможность использовать не их а свой загрузчик...
А вообще программировать пытался - успешно... Так шта поклонники 51-го ядра WELCOME...
Теперь только мне необходимо написать свой загрузчик, ибо атмеловский не подходит , у них полный дуплекс, а мне нужно программировать через полудуплекс... Но это в общем-то дело техники..
Да и вообще симпатичный процик, частота до 40МГц 64К ФЛЭШ памяти программ 1К встроенной eXternal ОЗУ...

177. -=Dmitry=-, 03.02.2004 13:38
Kosta_GG
в (А)Т89С51RD2 и подобных...

Лучше выбрать T89C51CC01 - в нем еще CAN есть (через него программировать можно, используя тот же самый FLIP)

З.Ы.: на сайте Атмела есть сишный API для работы с ADC , CAN и т.д.

178. VBKesha, 26.04.2004 16:48
Два вопроса.
1. Как и чем всё таки програмировать AVR по LPT в точности ATMega8.
2. Я так и не понял может-ли ATMega8 работать от внутреннего источника тактовой частоты.

179. DrAG0n, 26.04.2004 18:38
1) AVRISP, STK-200 и т.п. - схем полно. В начале ветки вроде были. Сам с АТМЕГА8 долгое время работал - как раз им и шил. Бывает (когда неправильно прошил фьюзы про частоту) нужно еще цеплять внешний FCLK.
2) может. Там калиброванный встроенный RC-генератор. Подробнее - в даташите. С фирмы он сходит настроенным как раз на внутренний RC с частотой то ли 8, то ли 1 МГц.

180. Vesel'chak U, 28.04.2004 05:48
1. Некоторые рекомендуют Altera ByteBlaster. Заодно можно "реанимировать" при неудачно прошитом fuse.

P.S. Для поклонников х51: ADUC'и можно программировать через RS232.

181. VBKesha, 28.04.2004 16:16
DrAG0n
Тут просто в середине кто-то говорил что можно просто по пяти проводам от LPT.
А тут ссылки те что вначале стояли почти все не работают.

182. Kosta_GG, 28.04.2004 17:37
Vesel'chak U
ADUC'и можно программировать через RS232.
Вроде подглючивают они, не ядро, а сам загрузчик, если постоянно перепрограммировать(а на макете так и бывает), то частенько микросхема перестает программироваться
По крайней мере раньше так было, сейчас не знаю, может поправили это...
С учетом их корпуса, их потом и параллельно проблема программировать... если они вообще пишутся параллельно..

Добавление от 28.04.2004 17:43:

А уж сравнивать бутлоадер от ADI и FLIP от Атмел... даже нет смысла ...Хотя может и тут у меня устаревшие данные и АД тож че-нить симпатичное сваяли...

PS: При этом ничего против против собственно микроконвертера не имею.. такое умное АЦП атмел вроде еще не делает..

183. Tahoe, 29.04.2004 01:27
VBKesha
http://www.ln.com.ua/~real/avreal
Усе работает.

184. VBKesha, 29.04.2004 16:02
Tahoe
То что надо спасибо

185. ditter, 29.04.2004 16:32
to ALL
есть у кого под рукой ATMEL AVR BUTERFLY (извиняте если криво написал) , короче набор разработчика с Атмегой169 и ЖКИ (ну там еще куча всего наваяна) .
проблема в чем -- снесены ВСЕ фьюзы естественно полегло все нафиг, внешний ТТЛ генератор то я подкину, а вот как их там выставлять в описании на этот счет нифига не сказано.
вообщем надо бабочку оживить

186. joptpd, 03.05.2004 19:03
поднимаю

подскажите как на асемблере сделать сравнение if ... else
например проверить если на порту а 1 и кнопка не нажата
а когда ее нажали то 0 и соответствено среагировать

187. quadrat, 03.05.2004 19:12
joptpd

на каком процессоре?

188. DrAG0n, 04.05.2004 09:01
ditter
попробуй PonyProg. Интерфейс программирования у бабочки скорее всего стандартный и поддерживаемый лошадкой.

189. VBKesha, 05.05.2004 15:53
joptpd
Алгоритм примерно везде одинаков,
сначало CMP истинно или нет условие, процессор при этом ставит служебные флаги, а потом ставишь команду условного перехода.

CMP X,Y (IF Условие)
Jxx (Правда)
nop (Неправда)
Примерно так надеюсь, что ты понял.

190. joptpd, 05.05.2004 19:18
quadrat
атмел 2313 самый популярный

VBKesha
много лет назад я занимался асемблером для з80 еще на спектруме
но тут ниче не понял

итак примерное условие
if (port a=0) {...}
тоесть когда кнопка не нажата то на входе контролера через резисторы висит +5в или лог 1
когда жмем то оно падает в 0
дальше оно проходит еще несколько таких проверок на нажатия других кнопок

если взять твой пример то ето должно быть так
cmp a,0
j ето я так понимаю jump? а хх ето адрес где лежит подпрограма которая должна сработать в случае нажатия кнопки?

а nop обязательно?
ето типа else?
else иногда можно опустить

191. Зинец Виктор, 06.05.2004 15:09
в этом конкретном случае (когда условие связано с битом) надо использовать sbrs/sbrc (пропустить след. команду, если бит = 1/0)

а если вариант "не равен ли регистр r16 0х25?" - тогда cp/cpi или tst (если сравн. с 0) и дальше breq/brne/ и т.д.

типа
cpi r16, $25
breq lbl_yes
rjmp lnl_no
если r16 = 0х25, то перейти на метку lbl_yes, иначе идти дальше

192. VBKesha, 06.05.2004 15:38
joptpd
jxx это я имел в виду jump c условием, jnc,jnz и.т.д
Nop ну надо-же было поставить что нибудь
И вообще если на Z80 програмировали то, странно что вы такие вопрос задаете.
А на остальное вам ответели.

193. ditter, 07.05.2004 00:57
DrAG0n
да я уж и баском, и кодевижн и авр стуию пробовал без фузиков не того , мне их надо ручками выставить , а как и что ставить долго разбираться тем более фирмваря бабочки во внешний флеш кладется (насколько я понял) а в чипсе тока лоадер торчит

194. Shinen, 07.05.2004 22:06
ditter
Пролистать мануал и понять зачем каждый фьюз нужен - максимум пол часа времени, IMO. А иначе зачем все затевается ?

195. ditter, 08.05.2004 17:34
Shinen
уже листаю

196. VBKesha, 24.05.2004 16:39
Возникло три вопроса:
1. Можно ли подключить ногу XLAT1 к ЛПТ и тактировать от него.
2. Для работы с UART между двумя микроконтроллерами ничего не надо, а если с компом то надо преобразователь MAX323 ставить.
3. Понадобилось на AT90S2313 реализовать, внешнее прерывание и по нарастанию и по спаду, думаю сделать путём изменения регистра MCUCR не сильно ли это скажется на быстродействии.

197. Tahoe, 25.05.2004 01:24
VBKesha
1. Можно, в программаторе AVREAL так и сделано.
2. Да, нужен преобразователь. Только он называется 232 а не 323.
3. ?

198. VBKesha, 25.05.2004 16:03
Tahoe
Спасибо.

All
Ещё читал, что на кварц с двух строн надо кандюки вешать иначе плохо заводится. Это как понять?

199. Velund, 28.05.2004 00:20
VBKesha
Ещё читал, что на кварц с двух строн надо кандюки вешать иначе плохо заводится. Это как понять?

Буквально понять. Просто поставить рекомендуемые конденсаторы, и не брать в голову, если все будет работать. Если будут проблемы - тогда уже разбираться почему.

200. Vesel'chak U, 31.05.2004 10:56
VBKesha
на кварц с двух строн надо кандюки вешать иначе плохо заводится.
Как правило, не требуется.

201. VBKesha, 31.05.2004 16:54
Всё работает как надо просто интересно как эта проблемма проявляется.

202. VBKesha, 09.06.2004 17:08
Блин что-то с моим AT90S2313 случилось, прошиваться отказывается (Программирую Avrreal'ом, от лпт по 5 проводам, 5 Вольт беру с USB) пишет устройство подсоединено но не опознано ID 0x00000120 и предлагает посмотреть защиту. Почитал ФАК по программатору выяснил, что такое может быть если установлены биты защиты и надо стирать использовав пониженное напряжение. Попробовал не помогло, да я и защиту не устанавливал. Как с этим бороться. И есть одно подозрение, мог ли я его спалить от батарейки на 6 вольт, хотя он от неё работал 5 минут и все было ок.

203. Tosha_443, 10.06.2004 19:13
цитата:
Vesel'chak U:
VBKesha
на кварц с двух строн надо кандюки вешать иначе плохо заводится.
Как правило, не требуется.

А еще есть кварцы в трехногом корпусе - с кондерами сразу. в мышах на 4мгц стоят

204. Tahoe, 10.06.2004 19:26
Tosha_443
А еще есть кварцы в трехногом корпусе - с кондерами сразу. в мышах на 4мгц стоят
Это не кварцы, как правило. Это керамика. Но тоже покатит.

205. Tosha_443, 11.06.2004 12:07
цитата:
Tahoe:
Tosha_443
А еще есть кварцы в трехногом корпусе - с кондерами сразу. в мышах на 4мгц стоят
Это не кварцы, как правило. Это керамика. Но тоже покатит.

Ну у меня на 2313 стоит - генерит 4Мгц, а какой он там - ну не задавался вопросом. работат и ладно

206. Tahoe, 11.06.2004 15:38
Tosha_443
У керамики стабильность хуже. А если стабильность не важна, можно вообще снаружи на ножки ничего не вешать. Обойтись встроеным RC генератором. Или внешней RC, если не встроено.

207. VBKesha, 11.06.2004 16:40
Да с кварцем все уже, разобрался щас другая проблемма, я выше описывал. А за новым контроллером в другой город ехать

208. [ski], 07.10.2004 12:30
Для начинающего, какую мелочевку каких номиналов закупить (резисторы, конденсаторы, ... наиболее часто применяющиеся в схемах с мк)?

209. Tosha_443, 07.10.2004 16:13
[ski]

а как посчитаешь. а вообще 1к часто используется.

210. Зинец Виктор, 07.10.2004 16:22
[ski]: сам только что скупился:

конденсаторы 22 - 33 пф (они к кварцам цепляются), 100 нф (эти вообще около каждого питания вешаются - в смысле, как только у микросхемы Vcc, так рядом и кондер), 10 мкф х 16 В

резисторы 4к7 - 10к (ими подтягивают куда-нибудь вечно), 1М (часто паралельно кварцу рисуют или сигналы usb к "земле" подтягивают)

дроссели часто вижу на схемах 10 uH (микрогенри?)

211. VBKesha, 07.10.2004 16:24
Вот тут один вопрос ещё не обсуждался. Как питать микроконтроллер, конкретно интересует можно ли это делать от батарейки если да то нужно ли ещё обвязку какую ни будь делать, а то у меня 2313 батарейку сожрал за 3 минуты, а всё что он делал это бегущую дорожку на 8 светодиодов и пищал пищалкой от часов монтана.

212. Vesel'chak U, 07.10.2004 17:04
Пощупал IAR для AVR. Симулятор и в подмётки не годится аналогичному для MSP430.


VBKesha
Как питать микроконтроллер, конкретно интересует можно ли это делать от батарейки
Можно. Обвязка, кроме ёмкостей, не обязательна.
Видимо ток через светодиоды был большой. Или батарейка маленькой.

213. VBKesha, 07.10.2004 17:09
Vesel'chak U
Куда ёмкости вешать.

214. Shinen, 07.10.2004 19:50
VBKesha
сожрал скорее всего не 2313, а светодиоды

215. DrAG0n, 09.10.2004 19:54
Vesel'chak U
попробуй VMLAB пощупать.

216. Zman, 10.10.2004 13:14
VBKesha
если делаешь что то на батарейке, всегда рассчитывай на сколько ее хватит!
1) потребляемый ток устройства надо знать или измерять
2) емкость батареи на ней пишут
3) делишь 2) на 1) и получаешь примерное время сколько батарея проработает (реально меньше)

а ты к светодиодам последовательно резисторы включил для ограничения тока ?

вообще смотри сначала чужие готовые схемы, чтобы научиться постепенно

217. Неонил, 11.10.2004 00:41
Zman
2) емкость батареи на ней пишут
А если сходить на сайт производителя - то можно узнать некоторые дополнительные подробности - как например ёмкость зависит от режима, график разряда...

218. VBKesha, 12.10.2004 17:49
Нужна среда разработки под дос для AVR.

219. Неонил, 12.10.2004 18:14
Зачем?

220. VBKesha, 12.10.2004 18:43
VBKesha
Я щас с ноут буком 486 сижу и юольше ничего нет.

221. Неонил, 13.10.2004 00:48
VBKesha Linux! + GCC-AVR.
На Sourceforge лежит готовая сборка под Линух.

Добавление от 13.10.2004 00:51:

У линуксоидов спроси какой Линух тебе лучше под твой аппарат. Если решишься на это - дальше поможем.

222. VBKesha, 13.10.2004 13:23
Неонил
Там ещё проблемка винт всего 500Mb а мне ещё и WIn95 нужна хоть под ней работать почти не реально. Поэтому линукс врядли влезет. И просил именно среду разработки а не просто компилятор.

223. psnsergey, 13.10.2004 13:59
VBKesha
Там ещё проблемка винт всего 500Mb а мне ещё и WIn95 нужна хоть под ней работать почти не реально.
Реально. Она занимает всего ничего, 80 МБ. Ещё драйвспейс поможет . Копируешь прогу типа drvspaceagnt... короче, агент сжатия, екзешник, там ещё тисочки такие в иконке встроенной - из инсталляции 98-й - и он прекрасно работает в 95-й (а не заявляет, что типа покупайте пакет W95Plus - тогда можно ).

224. Неонил, 13.10.2004 23:30
VBKesha
Я помню времена, лет 6-7 назад, когда такой ноут был супер-пупер-линукс-бокс.
Ты спроси у старых линуксоидов, наверняка чё-нить тебе посоветуют.

А среда под дос - это тебе понадобится какой-нить мульти-эдит настраивать...
Вообще-то не завидую.

Кстати, а что, WinAVR тебе на твою Вынь95 - не станет думаешь?!! Я бы попробовал даже не думая. Вот тебе и среда собсно.

225. VBKesha, 14.10.2004 13:51
psnsergey
Про драйвспейс я и так знаю но из за того что винт медленно но верно обсыпается пользоватся не хочу.
Неонил
Попробую на выходных, но я больше за скорость боюсь, а то будет как акробат строчки по буквам прорисовывать.

226. psnsergey, 14.10.2004 14:50
VBKesha
из за того что винт медленно но верно обсыпается пользоватся не хочу.
Тогда категорически посоветовал бы купить новый винт... Вроде не должно быть дорого сейчас. В принципе возможен (и весьма прост по работе) такой софт, который будет превращать 500 МБ винт с обсыпкой в, скажем, 460МБ, почти без потери скорости, но на уровне ОС такие фенечки не поддерживаются, увы... Так что геморроя с этим себе заработаешь выше крыши.

227. VBKesha, 14.10.2004 15:18
psnsergey
Там где живу такого не найти.

228. Dismon, 14.10.2004 15:48
Так тебе не надо искать точно такой. Любой ноутбучный винт должен подойти. А если бук не видит большие винты, надо разбить винт на логические диски такого размера, который он видит. Под виндами все нормально будет. У нас на работе была похожая ситуация. В старом ноуте с 4 гигивым винт после хорошего удара стал сыпаться винт. Пошли в фирму, там поставили 20гиг, однако с ним были проблемы - не определялся. Тогда его побили на логические диски по 4 гига, и все нормализовалось. В биосе был как бы винт на 4 гига, а под вин98 он видел все 5 разделов.

229. psnsergey, 14.10.2004 16:04
Dismon
В биосе был как бы винт на 4 гига, а под вин98 он видел все 5 разделов.
Более того, даже не обязательно по 4 гига было . Достаточно первый, загрузочный, сделать на 4 гига (или сколько там граница будет), а второй - сколько хочешь. Win32 (обыкновенно) пользуют диск своими драйверами без пре... биоса (пресловутый "32-разрядный доступ к диску"), а ограничения биоса действуют только при загрузке ядра ОС. С Линуксом - то же самое.

230. VBKesha, 14.10.2004 17:13
Dismon
У нас никакого нет есть новый на 20 но 3000 стоит. И хватить оффтопить.

ALL
Что есть простое, дешовое и доступное в России для работы с USB.

231. Неонил, 15.10.2004 06:01
VBKesha FT232BM и FT245BM

232. psnsergey, 15.10.2004 09:52
VBKesha
У нас никакого нет есть новый на 20 но 3000 стоит.
Так б/у этак гигабайт намного дешевле купить можно. В Брянске что, барахолок нет? Сервер объявлений найди местный, там должна быть такая толкучка. У нас во Владике по крайней мере есть...

233. Неонил, 15.10.2004 20:47
VBKesha
а то будет как акробат строчки по буквам прорисовывать
1) Найди старый акробат - 3й-4й версии, они сильно быстрее, но часть документов не откроется, или с ошибками.
2) WinAVR - очень компактная и очень быстрая штука. Проблемы - не предполагаются.

234. VBKesha, 18.10.2004 17:34
Неонил
1) именно 4 по буковкам.
2) Щас пробовать буду.по поводу FT232BM и FT245BM как я поглядел это просто мосты между USB и RS 232, RS245. А мне нужно сделать мост между GamePad от денди и HID девайсом для USB.

235. Неонил, 19.10.2004 03:49
VBKesha
это просто мосты между USB и ... RS245
Милейший! Что это за RS245?
Они имели в виду 74хх245, то есть простейшую параллельную шину! Правда она не совсем простейшая...

Мосты не мосты - но очень быстрые в использовании микрухи.

Посмотри ещё FT2232C - там есть ещё больше режимов, в частности эмуляция микроконтроллерной шины.

236. Zman, 19.10.2004 06:38
FTDI2xx позволяют вести обмен только через их родные драйвера или длл, да и в самой микрухе уже заложена часть ЮСБ стека (дескрипторы и точки), так что если ты хочешь именно HID device, для этого придется брать микруху только с физ. интерфейсом ЮСБ, а бОльшую часть обмена делать самому. Замучаешься короче, особенно если это для одного экземпляра. Проще готовый геймпад будет купить

237. Неонил, 19.10.2004 08:55
VBKesha
1) именно 4 по буковкам.
Странно... У меня имхо ещё на 486-й работал... как-то...

238. VBKesha, 19.10.2004 11:14
Zman
А что посоветуете брать, возможно просто штук 100 придется делать, причем главное цена, я подумывал на AT90S2313 софтово сделать но боюсь непотяну.

239. Неонил, 19.10.2004 14:01
VBKesha я подумывал на AT90S2313 А разве они дешевле ATtiny?

240. Zman, 19.10.2004 14:31
USB - довольно сложная штука, в нем самом разбираться - надо кучу времени, не говоря про осваивание контроллеров

так что браться за него, как за первый девайс на контроллере я бы не советовал!
замучаешься и бросишь.... мне понадобилось в свое время полгода чтобы разобраться с 0 до написания драйвера для готового уже устройства.

чтобы понять о чем идет речь, зайди на www.usb.org в раздел developers,
прочитай там спецификации на USB1.1-2.0, почитай также форум разработчиков, там люди со стажем путаются, что говорить о начинащих

241. LazyCamel, 19.10.2004 16:31
VBKesha

Если время=деньги - то я могу сделать - без базара. Ибо конструкция уже обкатана и работает.
мега48, пара стабилитронов, тройка кондеров, пяток резисторов. Будет тебе low-speed HID.
Насчет цены договоримся, даже с 2 десятков скидку гарантирую, а уж с сотни можно очень серъезно упасть (надеюсь не примут за рекламу

А так (для самообразования) IgorPlug в зубы и вперед. Все одно что так что так придется HID изучать Допишешь туда обработку Interrupt Endpoint 1 и добавишь дескрипторы - все. Ничего там особо сложного нет.

PS:
Вопросы по самостоятельному освоению будут - обращайся, советы бесплатны.
lazycamel<собака>mail.ru

242. VBKesha, 19.10.2004 18:34
Zman
Ну драйвер для HID насколько я понял писать не придется.
LazyCamel
Что то деталей многовато для такого девайса, и Mega48 по моему крутовато будет. Но насчет освоения буду обращатся.

243. Zman, 19.10.2004 20:38
VBKesha:
я не говорил "драйвер для HID", это был обычный WDM, но пришлось разбираться с USB вообще,
в том числе как работают дескрипторы для HID-device.

244. LazyCamel, 20.10.2004 08:15
VBKesha
Многовато деталей? Ну-ну... Конечно желающие могут подавать на линии данных в УСб по 5 вольт и не ставить серийные резисторы и фильтрующие/блокировочные конденсаторы. Они даже могут запустить внутренний 8 Мгц осциллятор на 12Мгц, чтобы не ставить кварц. Только это уже будет даже не радиоложство

ЗЫ: А мега48 является самой дешевой АВРиной с 4 кБ флеша, если кто еще не в курсе.
http://www.efind.ru/icsearch/?search=MEGA48

245. VBKesha, 20.10.2004 18:30
LazyCamel
ЗЫ: А мега48 является самой дешевой АВРиной с 4 кБ флеша, если кто еще не в курсе.
Как раз был не в курсе.

246. VBKesha, 02.11.2004 16:04
А с AT89C5122 ктонибудь работал?
http://atmel.com/dyn/resources/prod_documents/doc4202.pdf

247. Неонил, 03.11.2004 03:22
VBKesha Оно тебе надо?

248. VBKesha, 04.11.2004 16:14
Неонил
Да вроде там усб стэк есть а то я с IgorPlug разобратся не могу.

249. Dikoy, 12.11.2004 13:05
ALL
Столкнулся с такой проблемой.
В CodeVisionAVR C Compiler есть такая функция считывания кода клавиши с матричной клавы inkey().
С цифрами всё понятно, а вот клавиши * и # она в какой форме возвращает?
Просто мне нужно, чтобы по нажатии # или * запускалась функция. Ничего умнее

k=inkey();
if (k="#")......

не придумал... Подскажите, плиз, правильную запись. И какого типа тогда должна быть k?
PS: Sorry, если наврал с синтаксисом...

250. Dikoy, 14.11.2004 03:36
А вот Вам ещё до кучи:
Есть ли в этом Вижне генератор случайных чисел, что то ти ра ramdom-а?

251. Texnik, 14.11.2004 09:20
В BASCOM-AVR точно есть.
ИМХО замечательная программа для большинства не очень замороченных проектов.
Есть куча готовых библиотек, I2C, 1Wire, SPI, AT Keyboard & Mouse, TCPIP, X10, LCD, FAT.

252. Dikoy, 14.11.2004 14:35
Texnik
В BASCOM-AVR точно есть.
А это что за рулез? Первый раз слышу...

253. Texnik, 14.11.2004 15:41
Dikoy
BASIC для AVR. Включает компилятор, отладчик, симулятор.
Сайт http://www.mcselec.com/

254. ROC, 15.11.2004 00:24
Bascom на раз-два ищется в осле (eMule, eDonkey). Код далек от идеала, но если ресурсы не жмут или просто обкатать идею - вполне пригодно. Кста, принимает ассемблерные вставки. У меня так один приятель равлекается - весь высокий уровень (ввод/вывод по RS232, работу с LCD и пр.) пишет на бэйсике, а критичные места - ассемблерными вставками.

255. Dikoy, 15.11.2004 02:56
ROC
весь высокий уровень (ввод/вывод по RS232, работу с LCD и пр.) пишет на бэйсике, а критичные места - ассемблерными вставками.
Это что-то в стиле инь/янь?...

Неее... Я только на С... На ассме то влом, а уж за бейсик со школы не садился...

АЛЛ
Ну и где все хвалёные знатоки МК?

256. Tosha_443, 15.11.2004 10:28
Dikoyэх, ребята, ребята. а мануал для кого писан? стр 108. - int rand(); - generated pseudo-random number between 0 to 32767. перевести?

257. Wh`te, 15.11.2004 10:48

Насчет бейсика с ассемблерными вставками. Один парень хвалился мне что написал проект на АВРине на 10000 слов на асме. Это же надо так себя не любить

258. Tosha_443, 15.11.2004 11:36
Wh`te
а чего себя не любить? "наиболее короткий путь - это тот, который знаешь".
а для контроллеров и процессоров самый быстрый и компактный код - на асме. (сам пишу на С со вставками - обленился), а если готовые наработки есть - то вообще разницы особой нет. тем более, что на С используешь только +,-,=. а если использовать спец функции - то код сразу пухнет на глазах. так что разница еще меньше.

259. Dikoy, 15.11.2004 21:58
Tosha_443
Ну ладно, с мануалом подколол А вот что там в "мануале" про клаву писано Я честно искал, но ясных указаний на тип символов * и # не нашёл

а для контроллеров и процессоров самый быстрый и компактный код - на асме.
Это при условии, что он грамотно написан И на ассме можно написать код, который медленней любого васика работать будет...

Wh`te
написал проект на АВРине на 10000 слов на асме
Мисье тонкий извращенец!

260. Tosha_443, 16.11.2004 10:16
функцию inkey(); для Codevision в мануале не нашел(CV 1.24.2с).

когда-то еще на 8051 в институте код писал типа if (a==1){c=x;} else {c=y};
так вот почти в каждом асме есть команда "пропустить если" и код будет 3-4 команды, а на С этот код обычно больше.
код a!=a; a^=a; - по разному интерпретируется сомпилятором, а результат один.

261. Wh`te, 17.11.2004 09:35
Tosha_443

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

262. psnsergey, 17.11.2004 11:20
Wh`te
Случай вспомнил. Один программер написал ужасно быстренький код CRC32 на асме. Я написал на Дельфи - и это РАБОТАЛО в 1,5 раза быстрее.

263. Shinen, 17.11.2004 12:44
Wh`te
Современные компиляторы оптимизируют лучше, нежели ты напишешь на асме это раз

Коли мы тут про микроконтроллеры говорим (зачастую 8-битные) то это несколько не верно. Для, например, PowerPC я еще соглашусь и то по причине того, что там несколько неудобоваримые команды и писать на асме тяжело.
Довольно часто слышу подобные заверения приверженцев сей, а вот реального примера так никто ни разу и не привел (это наверно пишут люди, которые на асме "двух слов связать не могут" бишь оптимизировать, а тупо писать - это и на сях ничего хорошего не выйдет (на сях тоже писать надо уметь). Например ежели посмотреть код полученный компилятором, то очень часто можно увидеть перекидку значений из одних регистров в другие которые нормальный программер на асме никогда делать не будет (ибо пустая трата тактов). Развернутые циклы для ускорения кода компилятор нормально не сделает и места критичные к таймингам тоже. Всякие языки высокого уровня придуманы для экономии времени, а не для оптимального кода, хоть в сях к этому очень усиленно стремятся но еще очень долго, а учитывая тенденцию - никогда, не будет компилятора способного генерить код лучше человека (имею в виду профессионала в своем деле, а не студентов "по нужде") - компиляторы ведь тоже люди пишут .

264. Неонил, 17.11.2004 12:48
psnsergey
Правда дельфи - отстоооой...

Добавление от 17.11.2004 12:58:

Shinen
а вот реального примера так никто ни разу и не привел

Их было ДВА, оба раза это были горести уважаемого участника Зануда, который в силу консерватизма использует асм.

И оба раза это были проблемы, которые на Си не вызывают и мысли о затруднении.

265. Shinen, 17.11.2004 13:02
Неонил
Пусть меня извинит уважаемый Зануда, но в асме (по крайней мере для AVR, а скорее всего он вообще на асме пишет не часто) он начинающий и его промахи не показательны.

266. Wh`te, 17.11.2004 13:04

Неонил За Дельфи ответишь как за родного

Shinen В некотором роде ты прав, но! Короткие процедуры ввода вывода согласен на асм в виде библиотеки или инлайна, но писать целый проект лазание по менюшкам и пр, нет уж, я не располагаю таким ресурсом как время. Больше в дискуссии учасвовать не буду, твое мнение уже читал много раз тут

267. Shinen, 17.11.2004 13:16
Wh`te

268. Неонил, 17.11.2004 13:43
Shinen
Да не обижайся.
Я кстати и сам асмовец, бывший. Скоро будет 15 лет как я бросил.
А ведь был лучшим!

Основная мысль - крупный и динамичный проект на асме не нагородить. Это хоть кол на голове теши.

269. Wh`te, 17.11.2004 14:05
Ага, выйдет как на моей домашней странице

270. psnsergey, 17.11.2004 15:46
Неонил
Правда дельфи - отстоооой...
Верно. Я просто Дельфи привёл как пример сравнительно медленного кода, тем не менее сразу обошедшего начерно написанный асм. Когда я для прикола и ради эксперимента переписал на VC. NET, получилось ЕЩЁ в 1,5 раза быстрее. Итого более чем в 2 раза превышение над асмом.


Shinen
На асме пока для МК быстрее, но общая тенденция такова же, как и для PC - компиляторы PC ныне стали столь умными, что на асме пишут коротенькие-коротенькие вставочки даже для вычислительных программ, а ведь сравнительно недавно, лет 10 назад, старались-старались, писали-писали асмовские процедуры и библиотеки... То же будет и с МК, и никуда от этого не деться. Уже происходит. Революция сегодня!

271. CrazyElk, 17.11.2004 16:54
Shinen - Не удержался от ОФФА да простит мне модератор. Твои бы мысли да моим знакомым специализовавшимся на построение оптимизирующих компиляторов вот смеху было бы.

Причем самое серьезное возражение на никогда, не будет компилятора способного генерить код лучше человека - звучит как - А оно НАДО хоть кому нибудь реально, а не из спортивного интереса. На практике нет, небыло и не будет задачи сгенерить самый лутший код. Достаточно достаточно хорошего ( каламбур однако) . Это как в при игре в блиц чтобы выиграть (сделать устройство) не нужен лутший ход достаточно просто хороших. В 99,9...% (нужное количество 9 поставить самостоятельно) целевой функционал не оптимальность кода а СТОИМОСТЬ разработки. Если учесть опять таки что 90% людей и тех КОТОРЫМ НЕОБХОДИМО работать с МК лутше чем компилятор на ASM не напишут (или напишут через ххх лет) то факт что существуют 10% умеющих и обычно создающик код лутше чем компилятор (причем часто на проценты и доли их и лишь иногда значительно лутше) ничего по сути в вопросе "а кому оно надо" не меняяет. Так что мое IMHO в МАССЕ СВОЕЙ компилятор справляется с задачей кодировния на ASM лутше чем человек.

Что касается - развернутые циклы для ускорения кода - не знаю уж как компиляторы для МК (не моя епархия) а для intel & etc. еще как сделает- разворачивание и редукция цикла, вынос переменных и блоков колда за него, упреждающие вычисления, расчет константых условий в момент компиляции и реорганизация порядка вычислений, распаралеливание независимых расчетов по конвеерам и блокам все это было азбукой и классикой еще когда я был студентом (15 лет однако прошло). Как сейчас помню "горестные" стенания соседа писавшего в качестве диплома препроцессор с фортрана на оккам мол слишком поздно серьезно взялся за диплом (месяца за два три до сдачи) и вот никак не успевается впихнуть оптимизацию ветвления с предсказанием перехода только вот распаралеливание цикла и успевает (для диплома однако и этого лишнее было ему задание было просто транслятор корректный сделать). И это в компиляторе (с фортрана на оккам чем не компиляция) студента сваянного за пару тройку месяцев. Так что IMHO превосходство человека над компиляторами сровни неуловимости ДЖО. Все равно что рассуждать играет ли компютер в шахматы лутше человека. Или кто лутше передачи в машине переключает автомат или человек на ручной (Формула1 кстати с автоматической человек только контролирует переключает она сама автоматом ). IMHO все.

272. Tosha_443, 17.11.2004 18:43
to ALL

я, по моему уже приводил цифры - на 25-30% ужал выходной код на С путем максимального приближения к асму.(напишешь конструкцию - проверишь сколько скушалось, перепишешь - проверишь и т.д. до посинения(метод узырьково оптимизации )) ну пишешь не mov R2,R3, а xxx=rrr.
С их интерпретирует нормально, а дальше - 1. структуры вон их проекта(много кушают) и т.д. а логику работы устройства продумываешь все равно, как на асме - до последних мелочей. а результирующий код на С очень на асм похож - только команды сишные... пишу нечасто и на Codevision AVR C. - ну хобби у меня такое...

273. Shinen, 17.11.2004 23:52
CrazyElk
Тема однако про микроконтроллеры (однако сколько можно повторять) и говорим про компиляторы для микроконтроллеров. На ПЦ я на асме никогда не писал и писать не собираюсь и спорить о том кто там лучше я не буду (да и не в этой ветке). А что касается данного контекста, то я прав на 100%. По крайней мере расхваленные компилеры на поверку генерят довольно ужасный код или нужно писать практически как на асме (как раз то, о чем говорил Tosha_443 )

p.s. некоторые вон алгоритмбилдерами всякими "программы" собирают и ниче ... еще быстрее чем на сях

274. Dikoy, 23.11.2004 06:03
Народ, я совсем запутался
Вот, например, хочу я отображать на внешнем 7-и сегментнике число от 0 до 9. Вроде всё ясно: взял КР514ИД1, присобачил её к 4 младшим разрядам порта (у меня свободен только PORT_D у 90S2313, он семибитный), отправляй туда числа от 0 до 9 и радуйся - всё высветится.
Но блин! Какие там биты то младшие! Чем больше читаю, тем больше путаюсь...
Плиз, напишите с привязкой к выводам, какой вывод (бит) младший...

275. LazyCamel, 23.11.2004 07:16
Ты что ? PD0 и есть младший. Pd6 - старший.

276. Wh`te, 25.11.2004 16:50

277. Nim-82, 27.11.2004 13:05
Здравствуйте.
Вот, ещё один ламер с глупыми вопросами (в моём лице ) вам на голову...

Недавно начал использовать атмеловские МК. Даже получилось сделать светофор из 2313 Но теперь задачка по сложнее:
Есть два МК: мега8 и 2313. Первая - МОЗГ. То есть она там чёта делает, а на 2313 по UART гонит числа. На 2313 выполнена панель индикации - то есть к нему приделан LCD и пара светодиодов. Обратной связи нет.
Так вот не могу я с этим UART разобраться!
Пишу в CodeVisionAVR. С КодеВизардом, вроде, разобрался... Как скорость установить, сколько бит выбрать и тд. Вот только не совсем представляю, как из программы этот буфер UARTа читать....

Если не трудно, напишите какой нибудь простенький пример кода, чтоб отправлял переменную "а" (в ней число типа int в диапазоне 0-255) через UART, и пример, где идёт её считывание и преобразование снова в переменную int... А то все примеры в нете на ассме...
Только с коментами, пожалуйста А то я не въеду...

А у приёмника (2313) надо какой нить обработчик прерывания писать? Чтобы читать UART по пришествии байта, или можно както проверять его в начале каждого while(1)? Просто данные идут очень редко (1-2 байта в час). Некоторые числа являются данными, а некоторые - командами. Например, число 15 - команда на включение подсветки и т.п. Обработчик прерывания тут, по моему, лишний... Да и удобнее мне, как начинающему программисту, получать данные в начале цикла, нежели в любой момент...


Кстати! В закладке настроек UART, визарда, есть галка Rx Interrupt. Что Interrupt, это прерывание, я, спасибо промту, разобрался... Но какой от неё практический смысл? И что там за загадочный буфер вылазит?

И какую посоветуете выбрать скорость, если между МК около 15 метров. Связь - по витой паре.

Ещё парочка вопросов вне темы:
1) Если я подключаю к выводу МК простой пьезоизлучатель типа ЗП-19, нужно ли последовательно включать резистор? Если да, то какого номинала?
2) Вопрос дребезга. Вот есть вывод порта, настроенный на ввод. Подтяжка включена. Кнопка, есно, замыкает его на землю. Если я включу параллельно кнопке кондёр, скажем, на 6800пФ, это пойдёт в качестве подавителя дребезга?
3) Я слышал, что помимо простых кварцев есть уже готовые генераторы, для тактирования МК. Не кините ссылку на любой, чтоб просто понять, что это за зверь...

Спасибо.

278. Dikoy, 27.11.2004 14:25
LazyCamel
PD0 и есть младший. Pd6 - старший
То есть (я дотошный ), вес ПД0=1, а вес ПД6 = 64. Так?

279. Tahoe, 28.11.2004 12:43
Dikoy
Так, так. 2 ^ 6 = 64.

P.S. Люблю дотошных...


Nim-82
Для того что бы передать байт ты должен:
1. Дождаться пока бит UDRE не встанет в 1.
2. Записать байт в UDR.

char a;

while !( USR & UDRE );
UDR = a++;

Собственно даже и не знаю что здесь комментировать.

А вот с приёмом всё по другому. Это ты сам должен выбрать способ - либо мониторь постоянно бит RXC, либо работай по прерыванию.

Касательно сокрости. Ставь что-нить о-о-очень медленное. 300 бод, или ещё меньше, т.к. вот так втупую соединять два UARTа на 15 метров ИМХО крутовато будет. Да и вообще ИМХО не правильно, с точки зрения электрических сигналов, конечно, а не программирования. Поставь какой-нить RS485, что ли. Хотя можно наверное и RS232 попытаться обойтись.

Пьезоизлучатель можешь подключать непосредственно к порту. Если параноик или устройство пойдёт в серию, то поставь последовательнго резистор 1 кОм. Если интересно про это почитать залезь на сайт Murata, там про это есть.

Антидребезг лучше делать программно. Но ИМХО никто не запретит тебе сделать его с помощью RC.

Про генераторы. Ищи Epson-овские. Качай даташиты. Наслаждайся.
Только ИМХО пока ты ПЛИСины не возьмёшься осваивать, тебе эти генераторы вообще не понадобятся.

P.S. Занимайся плотнее английским. Хотя бы и с помощью упомянутого промта. Ибо в аппнотах есть ответы на все твои вопросы. Причём намного подробнее я тут накалякал.

280. Tosha_443, 29.11.2004 12:38
Nim-82
для ваших задач не стоит заморачиваться с генераторами - резонатора вполне хватит.
по поводу прерываний - лучше использовать прерывания - не зря же их придумали
буфер организует CodeWizard программный, поскольку аппаратно буфер приема и передачи есть один регистр, а буфер - 8 и более байт. при приеме етих 8-ми байт будет сгенерировано прерывание, и в обработчике его нужно написать, что собственно с полученными данными делать.

281. Dikoy, 30.11.2004 13:58
Tahoe
Так, так. 2 ^ 6 = 64.
Ну, это я и так знаю
Я спрашивал именно с привязкой к ногам - у какой вес 1, а у какой 64

Люблю дотошных...
Ты не в моём вкусе

282. Tosha_443, 01.12.2004 10:24
Dikoy
практически всегда порты считают от 0 к 8/16/32 т.е. PD0 - вес 1 PD1 - 2 и т.д.

283. Nim-82, 02.12.2004 15:31
Tosha_443
для ваших задач не стоит заморачиваться с генераторами - резонатора вполне хватит.
Я слышал, они бывает не запускаются
Кстати. А у Мега8 ведь есть встроенный генератор на 4 мега, кажется... Чтобы он запустился просто достаточно оставить входы Xtal свободными, или надо что-то программно инициализировать?

по поводу прерываний - лучше использовать прерывания - не зря же их придумали
Во! Придумал! В обработчике я буду писать код, который будет принимать команду (она же кодовое число) и присваивать его переменной. А вот читать значение этой переменной буду при каждой новой итерации цикла прграммы. Так, вроде, должно работать...

а буфер - 8 и более байт. при приеме етих 8-ми байт будет сгенерировано прерывание
То есть перывние будет сгенерировано, когда буфер заполнится? Тогда это не есть гуд, т.к. мне нужно прерывание по факту прихода любого числа, т.к. обработка его должна происходить сразу.
Значит, я этот буфер не устанавливаю. Тогда у меня будет прерывание каждй раз, как по UART приходит байт. Так?

Tahoe
Собственно даже и не знаю что здесь комментировать
Спасибо, здесь, вроде, всё ясно...

либо мониторь постоянно бит RXC
Это тот самый бит, который устанавливается, когда в UART пришёл бит?

либо работай по прерыванию
А прерывание инициализируется одновременно с UARTом? то есть, если я в Визарде "включил" УАРТ, все эти прерывания включаются вместе с ним по умолчанию?
А можно примерчик обработчика для 2313 Простенький, типа приёма данных и присвоении их переменной а...

Ставь что-нить о-о-очень медленное. 300 бод, или ещё меньше,
Попробовал... Он ругается, что частота проца (4 мега) слишком большая для такой скорости... Что делать? Забить на предупреждение?

вот так втупую соединять два UARTа на 15 метров ИМХО крутовато будет
Ну... А если не совсем втупую: например, 6 инверторов К561ЛН2 включённых параллельно к выходу передатчика (чтобы уменьшить его выходное сопротивление), а по входу приёмника триггер шмидта. Что то вроде 1564тл2 (74НС14). Так, вроде, по скорости нарастания выходного сигнала проблем быть не должно...

Поставь какой-нить RS485,
Мая не уметь. Да и ограничене по цене есть - лишняя микра не есть гуд.

Антидребезг лучше делать программно. Но ИМХО никто не запретит тебе сделать его с помощью RC.
Программно - не умею. Я только начал с МК дружить.
А указанная ёмкость (6800 пФ) пойдёт? Я слышал, сопротивление подтяжки у порта МК порядка мегаома. Как раз должно хватить, вроде.

Занимайся плотнее английским
Ага! Особенно с учётом того, что я учил французский Вот только начальнику скажу, что вместо разработки хочу заняться языками. Интересно, что он ответит
Вот.

284. Texnik, 02.12.2004 21:06
...
цитата:
для ваших задач не стоит заморачиваться с генераторами - резонатора вполне хватит.
цитата:
Я слышал, они бывает не запускаются
С нормальными компонентами (кварц + пара китайских кондеров) все работает нормально, а вот с совковыми трубчитами не запускался.

цитата:
Кстати. А у Мега8 ведь есть встроенный генератор на 4 мега, кажется... Чтобы он запустился просто достаточно оставить входы Xtal свободными, или надо что-то программно инициализировать?
У него куча возможностей. По умолчанию (заводская установка) - внутренний РЦ генератор на 1МГц, можно выбрать:
- внутренний РЦ 1, 2, 4, 8МГц;
- внешний кварцевый резонатор (включая часовой) (crystal);
- внешний керамический резонатор (ceramic);
- внешняя РЦ - цепочка;
- внешний генератор.
Выбор осуществляется прошивкой FUSE битов. (Есть возможность подстройки внутреннего РЦ генератора).

цитата:
Поставь какой-нить RS485,
Мая не уметь. Да и ограничене по цене есть - лишняя микра не есть гуд.
Это очень просто, а главное надежно. Цена мск.~40р. Посмотри доку на нее, все станет ясно.
см. http://rs232.ru/i_rs485.html

285. Dmitrij[BtK], 03.12.2004 02:05

читая вспомнил как можно было быть менее расточительным -
покупаеш pic16x84 для одной частоты а кварц ставим больше.
pic для большей частоты имел большую цену
ну как бы турбим. ех, .....
работало

286. Tosha_443, 03.12.2004 10:06
Dmitrij[BtK]
если в серию, то не стоит - есть вероятность, что не запустится.
Nim-82
А прерывание инициализируется одновременно с UARTом? то есть, если я в Визарде "включил" УАРТ, все эти прерывания включаются вместе с ним по умолчанию?
нет. в визарде есть галочки Tx interrupt & Rx interrupt. если их взвести, то прерывания будут генетиться и под них специально фунции заводятся - именно в эти функции передается управление при приеме и передаче инфы через UART.

287. Tahoe, 03.12.2004 19:42
1

288. Xradio, 04.12.2004 11:06
Может быть не совсем в тему, но... временА... - на работе выматываешься... альтернативой отдыха стало... попить... а здоровье от этого не улучшается
Надо бы хобби какое-то себе придумать. Да чтобы не далеко было от проф. деятельности - электроники. Это конечно спорный факт, но мне так кажется.
Вот и задумал я "развлекающие игры" с оптимальными алгоритмами "искусственного", скажем, полуинтеллекта...
Что на первых порах сделать?
Забавной показалась мне игрушка в виде "прямоходящей" по столу макетной печатной платы с микроконтроллером... собственно заставить её ходить, легко - это два моторчика, и эксцентрик равновесия наверху - вариантов много. Но вот беда - ничего не могу придумать в качестве вестибулярного датчика... все типы маятников будут перерегулировать параметр, надо как-то механически его демпфировать, да так чтобы не потерять скорость реагирования.
Падает пока моя PCB... покачается, подергается... и падает... AT90S2313 уже веcь поцарапался.
Есть у кого мысли насчет вестибулярного датчика? может быть как-то сенсор от оптической мыши приспособить?

289. Rupor, 04.12.2004 20:54
может ADXL?

290. Xradio, 05.12.2004 11:46
цитата:
Rupor:
может ADXL?
Акселерометр? хм... может быть, но отреагирует ли он на столь малые перемещения, когда равновесие более-менее установится? Вот чего я и боюсь, что система будет ощутимо "дрожать" отрабатывая погрешность датчика. Хотя-я... надо попробовать.
В идеале плата должна "вставать" сама при подаче питания засчёт хорошего сцепления колёсиков из "липкой" резины с поверхностью, в крайнем случае с помощью "рук"(следующий этап)... Далее ждать команды куда-нибудь ехать... И уронить её должно быть проблематично.
А освоив равновесие, можно будет научить её прыгать... и.т.д. Работы предвидится много...

О, Мысль пришла! :
Применить комбинацию из ADXL и обыкновенного спиртового ватерпаса!

291. Dikoy, 05.12.2004 23:49
Xradio
Смотря какой АДХЛ взять... Разрешение у них разное бывает.
Вот недавно ради прикола собрал мышу с ним. Из майского номера Радио. Прикольная штучка только дискретность измерения угла плохая.... (202 датчик).
Если взять не акселерометр, а гироскоп, то тут уже ваще другой уровень получается, ибо даже самые плохие мериют угол с дискретностью 1о. Этого должно хватить...
Кстати, японцы своего "космонавта" 10 лет ходить учили. Научили. Правда, было это 10 лет назад - тогда совершенно другой уровень технологий был. Теперь попроще должно быть...

292. Rupor, 06.12.2004 03:08
По теме: http://www.geology.smu.edu/~dpa-www/robo/nbot/
Ну и у гугла про inverted pendulum поспрашивай...

293. Xradio, 06.12.2004 07:38
Rupor Спасибо за ссылку. Но мы пойдём своей дорогой
Dikoy Гироскоп никак не хочется применять... он радикально лишит машинку динамики. У природы же нет гироскопов!
А вот балансирование двумя "руками" или шестом (как канатоходец) вполне реально.
Взмахи "рук" мне кажутся более предпочтительными, и наглядными... Интересно будет посмотреть на схожесть балансирования человека и машинки.
Еще можно применить перегиб "тела", но что-то уж много приводов набирается

294. AlexeyF, 06.12.2004 09:00
Чтобы не создавать новой темы....
Скажите пожалуйста, корифеи программирования, как на AVR-е осуществить битовый сдвиг 16 битового числа ??? Т.е. нужно типа LSR (LSL) только для 2 байтового значения.

295. Xradio, 06.12.2004 09:33
[q]AlexeyF:
Число же размещено в двух байтовых регистрах? вот двигай их последовательно через флаг C (rol, ror). Результатом может оказаться четырехбайтное число...
Часто нужно собственно содержимое бита переноса С, а не сдвинутое слово целиком, на это стоит обратить внимание.
WIN калькулятор в расширенной моде поможет посмотреть это в двоичном виде.
(hex)/2 - вправо. (hex)*2 - влево (не циклический сдвиг)

296. AlexeyF, 06.12.2004 10:02
Xradio
хм... я чего то недопонимаю... в классике AVR регистры 16 битовые ?? Да нет.. только что снова руководство прочитал....

297. Xradio, 06.12.2004 10:19
цитата:
AlexeyF:
Xradio
хм... я чего то недопонимаю... в классике AVR регистры 16 битовые ?? Да нет.. только что снова руководство прочитал....

Есть и 16 битовые - X,Y,Z но речь не о них шла. Я написал "в двух байтовых регистрах" это же не значит в "ДВУХБАЙТОВЫХ" !

298. AlexeyF, 06.12.2004 10:32
Xradio
хорошо... беру следующий пример...
ldi r16,$0f
ror r16
ror r16
ror r16
.......
так ??

если так, то это $0F крутиться в R16 по кругу.....

299. Xradio, 06.12.2004 10:33
ВЛЕВО:
СLC ; стираем флаг
ROL R(low) ; двигаем влево младший. здесь может быть команда LSL
ROL R(hi) ; двигаем старший с учетом переноса из младшего
ROL R х ;сюда задвинется старший бит из R(hi)
и.т.д.

Добавление от 06.12.2004 10:42:

AlexeyF
Да, циклический сдвиг... но победимо! погоняйте примерчики в AVRstudio.
Принцип вроде бы понятен.

300. AlexeyF, 06.12.2004 10:46
Xradio
СПАСИБО !!!!

Добавление от 06.12.2004 10:48:

все получилось !!! мне именно так и надо было !!! )))

301. Dikoy, 06.12.2004 11:37
Xradio
Гироскоп никак не хочется применять... он радикально лишит машинку динамики
Я предлагаю использовать микромеханический гироскоп Чисто как датчик, а не вращающуюся дуру как стабилизатор Двухосевой гирик даст измерение угла где то градус. Вот и всё - выход ШИМ.
Тот же акселерометр, например, будет мерить проекцию g на вертикальную ось. Принцип тот же, только g у нас сильно не постоянная Может и беситься...

У природы же нет гироскопов!
А что, у природы есть микроконтроллеры? Если уж косить под природу, то тут нейросети более уместны

Кстати! Вот, в ссылке Rupor-а:
The ball-bearing pivot and angle sensor were replaced by a piezo-electric gyroscope and ADXL202 accelerometer mounted just above the motor deck.

302. Nim-82, 16.12.2004 14:30
Tahoe
Это ты сам должен выбрать способ - либо мониторь постоянно бит RXC, либо работай по прерыванию.
Хе хе.. А прерывания то не входят в состав Коде Вижн евалюшн нон комерциал Так что выбор сделан за меня

ALL
Тут читал доку по уарт... Забавное занятие
Вычитал, что из нужных мне битов при приёме только RxC и FE. Кстати, с последним я до конца не разобрался... То, что он устанавливается при ошибке принимаемого слова, ясно. Но вот какой ошибки? В доке написано, что если стоповый бит равен 0. То есть, я так понял, к проверке чётности и т.п. этот FE отношения не имеет. А помогает определить ошибки, вызванные неодинаковыми скоростями передатчика/приёмника, обрывом линии и т.п?
А мне от него прок есть? То есть у меня то односторонняя связь, а не дуплекс. Даже если приёмник "поймёт", что принятое слово неверно, максимум что он сделает, это его игнорирует. Но ведь передатчик то об этом не узнает! И передачу не повторит. А дуплекс сделать нельзя - только одна витая пара есть... Конечно, можно сделать передучу/приём по однй линии, с коммутацией Rx/Tx ножек логикой 2И... Но тогда придётся нагружать МК лишними функциями. Да и городить такое ради простого подтверждения приёма (соотношение входящего/исходящего траффика получится где-то 1000/1) нецесообразно.

А существуют микры RS485, которые могут сами формировать дуплекс по одной линии, без участия МК?

Возвращаясь к теме обнаружения ошибок передачи.
Насколько я понял, проверка чётности у АВРок идёт программно. Иначе чем объяснить вот этот код, который Визард сгенерил когда я настроил приёмник как "8 data, 1 stop, Even Patity":
код:

unsigned char parity_even(unsigned char c)
{
#asm
ld r30,y
mov r31,r30
swap r30
eor r30,r31
mov r31,r30
lsl r31
lsl r31
eor r30,r31
mov r31,r30
lsl r30
eor r30,r31
andi r30,0x80
#endasm
}


Так вот проверка эта идёт автоматом? Что происходит если например принятый байт ошибочен? Он просто игнорируется или что?
Может мне вообще тогда отказаться от проверки чётности.

Что до самого процесса приёма.
Я уже вознамерился сгенерить что то вроде
код:

while !( USR & RXC );
a = UDR;

как вдруг подлый визард сделал всё за меня

код:

char getchar(void)
{
char status,ctrl,data;
while (1)
{
while (((status=USR) & RX_COMPLETE)==0);
ctrl=UCR;
data=UDR;
if (status & (FRAMING_ERROR | DATA_OVERRUN)) continue;
if (parity_even(data)==((ctrl<<(7-RXB8)) & 0x80))
return data;
};
}


Судя по всему, теперь весь процесс приёма принимает вид:

getchar(data);

При этом оно само дождётся установки RXC, примет байт, проверит на чётность и вернёт как переменную data. Это так?
По ходу, с передачей такое тоже прокатит
Что до проверки на чётность, функция parity_even(data) наводит на некоторые ассоциации, вот только как эта проверка происходит и к чему приводит не могу я разобраться. Но чувствую, что если условие if (parity_even(data)==((ctrl<<(7-RXB8)) & 0x80)) не выполнится, фиг он мне вернёт, а не data. Причём, молча.



P.s. Tahoe , а как делается программный антидребезг? Я сколько не думал ничего не придумал. Можно пример кода или ссылку?

P.P.s А каким образом в С можно "резать" бит? То есть например у меня слово из 10 бит и мне его надо передать по UART (и ещё добавить идентификационный номер). Логично, что делать это надо в два захода. В первый передавать первые 8, а во второй - оставшиеся два + номер {3 бита}). Но как разбить его на 8 и 2 бита?
ПОЖАЛУЙСТА, ответте на этот вопрос, даже несмотря на его тупизну. Ну не учили меня С и ассемблеру!!! (((

303. Xradio, 16.12.2004 15:08
Nim-82
С отдельными битами легко работать с помощью логических операций. Потому ими так насыщены системы команд микроконтроллеров.
Для начала рассмотрите маскИрование (от маска) байта, а в нём отдельных битов - функция "логическое И".
И я уже писал здесь про удобный калькулятор в Windows - он позволяет работать с любыми представлениями чисел и переводить их из одной системы в другую. Там же есть набор функций булевой алгебры.

Добавление от 16.12.2004 15:31:

Dikoy
Хе-хе... Что-то смущает меня один немаловажный аспект: - все датчики нужно предварительно "учить" равновесию... а это проекция центра массы на точку опоры.
Скучно как-то выглядит сей процесс...
Кажется мне, что без пузырька никак не обойтись...
Но вот ж проблема - "вязкие" жидкости тормозят, а текучие колеблются... Что же такое в организме работает вестибулярным датчиком!?

304. CrazyElk, 16.12.2004 16:47
Xradio - Что же такое в организме работает вестибулярным датчиком - Улитка внутреннего уха - внутрення поверхность покрыта чувствительными к движению заполняющей жидкости волосками. Калибровка и коррекция по визуальной картинке. а текучие колеблются - а ты думал почему после качания на лопинге по прямой линнии пройти трудно - именно поэтому. Морская болезнь и т.д. все по той же причине.

WBR CrazyElk

305. Xradio, 16.12.2004 17:17
CrazyElk
Субъективно понятно, но как может быть вестибулярный аппарат в ГОЛОВЕ? - она же не жёстко связана с центром массы всего тела!
А вот за "волоски" - электроды положения, спасибо! - сие реальновоплощаемый метод количественной оценки угла наклона, в отличие от оптического считывания положения "пузырька".

Добавление от 16.12.2004 17:46:

С "вестибуляром" текущие проблемы такие:
Все типы "отвесов" являются инерционными приборами в связи со своей не нулевой массой... т.е. они - маятники. ...вакуум для очень малого веса? - Так все равно "Ньютон"...
Жидкостные уровни страдают тем же...
Датчики положения - гироскопы и акселерометры, не "привязаны" к собственно понятию равновесия. Их всякий раз необходимо "ставить на ноги" ... причем, очень тщательно -
Иначе система побежит искать.

Хорошо CrazyElk сказал про визуальную обратную связь положения! над сим надо думать.

306. Зануда, 16.12.2004 23:05
Спецы, подскажите какой командой или каким образом считать байт из портов G и F у АТМеги128??
In не работает, sts тоже.
Делаю в АВРСтудии

Добавление от 16.12.2004 23:11:

Xradio:
Лови дурацкую идею. Я бы попробовал приделать к датчику Холла директор из протяженного и слабого постоянного магнита. Если направление собственного магнитного поля совпадает с полем Земли, то сигнал складывается. Если не совпадают - вычитается. Только придется два датчика делать. Один для азимутальной плоскости, а второй для меридианальной. Но зато сумировать-вычитать можно на ОУ, будет очень точно и супербезинерционно.
Не знаю только какая получится чуствительность.

Добавление от 16.12.2004 23:15:

Я подумал и решил, что 3 датчика будет в самый раз...
С двумя, это я погорячился.

307. psnsergey, 16.12.2004 23:19
Xradio
как может быть вестибулярный аппарат в ГОЛОВЕ? - она же не жёстко связана с центром массы всего тела!
А голова - самое главное. Кроме того, "всё тело" относительно головы имеет вполне определимые мышечным чувством шеи координаты. Кстати, идеальный гироскоп - курица. Держишь за туловище, а голова неподвижна, как туловище ни поворачивай. Если сама не захочет голову повернуть.

308. Shinen, 16.12.2004 23:59
Зануда
In не работает, sts тоже
Вообще странная мысль пытаться считывать командой записи

309. sergei_rott, 18.12.2004 02:40
По теме:

Попробуйте начать с моего мини-сайта:

Краткий Курс начинающим - AVR с нуля на языке Си

avr123.nm.ru

У многих пошло, судя по откликам.

Удачи!

310. Dikoy, 19.12.2004 01:35
Nim-82
Но как разбить его на 8 и 2 бита?
А бить то зачем? Сначала к 10 битному слову присобачиваешь ещё два функцией И (или просто прибавляешь число в 16 ричном коде), а потом копируешь в буфер УАРТ по кускам, типа (ведь АЦП наверняка читаешь ):

UDR = ADCL; // Чтение младших 8 бит ПЕРВЫМИ
UDR += (ADCH << Х);// Чтение старших 2 бит и сложение с префиксом

Где Х - твой добавочный префикс.
Так, вроде...

Xradio
все датчики нужно предварительно "учить" равновесию
А вот и нет! ADXL202, если висит горизонтально, будет показывать 0 по обоим каналам. Если же его наклонять, то будет показывать проекцию g (которое ускорениеи свободного падения) на ВЕРТИКАЛЬНУЮ ось. Т.е. вертикальную относительно центра нашей родной планеты. А он, вроде как, статичен Вот и получается, что никаких предустановок не надо.
А вот гироскоп действительно придётся арретировать. Это минус. Зато угол хорошо мериет - так что для ориентации можно использовать АДХЛ, а вот для относительного измерения угла с большой точностью, поставить гирик

Что до вестибулярногг аппарата, то там ещё и кристалики плавают, но суть не в этом.
Элементарная модель его, это кольцо из стеклянной трубки. В ней - капля ртути. Вверху - сплошной проводник. Внизу - несколько десятков контакторов. Капля перетекает в зависимости от угла и замыкает контакторы.
Ртуть можно заменить чем то иным, с большим поверхностным натяжением и небольшим сопротивлением...

psnsergey
а голова неподвижна, как туловище ни поворачивай
Ну, родной человеческий глаз тоже неплохо стабилизируется

sergei_rott
Да знают тут все эту ссылку Просто народ уже притёрся к этому форуму, вот и постит тут. К тому форруму ещё привыкнуть надо...
А сайт действительно классный В смысле, идея. Только у нас на работе 4 чела благодпря ему в АВРках разобрались. Я, правда, пораньше начал

311. Dikoy, 16.01.2005 18:36
Народ, как подружить супервайзер питания и программатор?
То есть на плате стоит AVR с супервизером на ресете. Как туда проводник от разъёма программатора подвести? Есть супервизоры с отдельным входом для внешнегно RES?
ЗЫ: Какой супервизор порекомендуете (из легкодоступных)?

312. Dismon, 17.01.2005 09:38
Может я чего-то не понимаю, но какой смысл в супервизоре питания на ресете? Чтобы сброс прошел при падении питания? Так он и так пройдет. Обычно нужда в супервизоре возникает если надо падение питания зафиксировать на ранней стадии, чтоб успеть например записать в епром какие-то значения, чтоб после нормализации питания их восстановить. Тогда супервизор надо вешать на внешнее прерывание. Может к ресету подцеплен генератор сброса? Так он тоже нафиг не нужн, достаточно (согласно атмеловскому апноту кстати ) подать на ресет 5В через резистор в 10К

313. T100, 17.01.2005 10:26
Dismon
http://www.atmel.com/dyn/resources/prod_documents/DOC1051.PDF
Супервайзер нужен. Особенно, если программа пишет что-нибудь в eeprom. Тогда без него кирдык содержимому eeprom с достаточно большой вероятностью.

Dikoy
Если супервайзер имеет выход с открытым коллектором, ресет от программатора вешается просто параллельно. Если выход - пуш-пул - тогда на выходе супервайзера нужен резистор, ресет программатора - после него. (см. аппноту по ссылке)
1171СП42 - легкодоступный

314. Dismon, 17.01.2005 12:26
T100
Супервайзер нужен. Особенно, если программа пишет что-нибудь в eeprom.
Дык я с этим и не спорю. Смысл доки на которую ты ссылку дал (насколько мне не изменяет мой убогий английский) в том, чтобы не повредилось содержимое регистров, епром и т.п. при нормальной работе. Т.е. никакие действия от микроконтроллера не требуются. Я же имею в виду несколько другое. Например промышленый контроллер вполняет некий техпроцесс, состоящий из нескольких стадий. Где-то в середине отключают свет. Через некоторое время свет включают обратно, и требуется продолжить техпроцесс с той же стадии. В таком случае у нас в фирме ставится супервизор на внешнее прерывание. При падении питания происходит прерывание, в котором успевает записывается в епром все что надо, стопорятся все исполнительные устройства и т.п., пока разряжаются конденсаторы блока питания. А это около 100 мс - вагон времени . После выполнения всех необходимых действий можно и самому перейти к адресу 0, сделав тем самым ресет, а можно зациклить программу в этом прерывании.

Т.е. если вешать супервизор не на ресет, то помимо отсутствия вопросов с программированием получаешь возможность сделать еще и некие полезные действия при отключении питания.

315. T100, 17.01.2005 13:05
Dismon
Я тоже знаю о таких системах, где при пропадании питания данные успевают сохраняться. Не так уж часто такое требуется. И даже в этом случае супервайзер нужен AVR-ке и на ресете. Иначе в результате random CPU activity что-нибудь проскочит на выходах, кого-нибудь убьет, разработчика посядят. А супервайзер придавит ресет к нулю и будет держать, контроллер будет стоять как вкопанный, и eeprom не разрушится. Именно поэтому Atmel рекомендует ставить эту копеечную деталюшку, и все ставят. Не, конечно, если нужно успеть сохранить данные, можно дополнительно сваять систему, подобную той, которою ты описываешь, программу дописать.

316. Dismon, 17.01.2005 13:54
T100
И даже в этом случае супервайзер нужен AVR-ке

Мысля конечно здравая, только вот в серийных устройствах статраются минимизировать стоимость комплектующих, и 2 супервизора не ставят.

ЗЫ: У нас в качестве супервизора на потенциально опасных для жизни устройствах сейчас используется ADM706TAR, так он и падение питания отслеживает, и ресет шлет, если ему в течении некоторого времени импульсы не слать. Помимо этого еще программный вачдог микроконтроллера задействован.

ЗЫЫ: А вопросы дуркования и наводок у нас решаются схемотехниками и конструкторами - первые разрабатывают такую схему, чтобы сам алгоритм работы железа исключал фатальные последствия возможных сбоев, а конструктора соответствующим образом разводят платы, чтобы свести вероятность наводок к малоотличающейся от 0 величине. Недавно с некоторым удивлением узнал (в фирме я работаю относительно недавно) что мы прошли гос сертификацию и будем производить системы контроля и управления паровыми турбинами для атомных станций, а в настоящий момент проходим сертификацию для минобороны, будем делать систему для управления корабельными дизельгенераторами. Возможно там и будет по супервизору на каждый чих.

317. T100, 17.01.2005 14:24
Dismon
У нас в качестве супервизора на потенциально опасных для жизни устройствах сейчас используется ADM706TAR
Так он все-таки на ресете сидит, не на прерывании? Микроконтроллер в устройстве АВР или нет? Дело в том, что у многих других микроконтроллеров и у некоторых моделей АВР есть встроенная brown-out защита. А, например, в AT90S2313 ее нет. Там для глюков никаких наводок не нужно, просто при выключении устройства из-за медленного разряда конденсаторов процессор начинает скакать по программе как попало.
ЗЫ: А грамотная разводка плат и грамотная схемотехника есть гуд, очень повышает стабильность устройств на АВР, он очень к этому делу чуствителен. Супервизор питания на ресете - тоже грамотная схемотехника.

318. Dismon, 17.01.2005 15:00
ADM706 это 2 супервизора в одном 8 pin корпусе (если не ошибаюсь - около 2 у.е. цена). Один супервизор - питания сидит на внешнем прерывании (Это выход PFO на ADM). При падении питания генерируется прерывание в котором производится запись в память уставок. А на ресете сидит выход RST ADM706. Контроллер шлет импульсы на вход WDI. Как только контроллер перестает это делать и проходит какое-то время (вроде его можно задавать обвязкой), ADM вырабатывает сигнал сброса. Если импульсы продолжают отсутствовать - повторно генерирует сигнал сброса. Т.е. по сути аппаратный вачдог. А микроконтроллер может быть любой. В данный момент я работаю с MSP430, пишу программу для управлления пресом вулканизации. А следом за ним буду работать с mega128. AT90S2313 использовалась в старых разработках, но с ними я дела уже не имею, потому ничего сказать по ним не могу, не знаю .

319. Xradio, 17.01.2005 15:37
T100
Там для глюков никаких наводок не нужно, просто при выключении устройства из-за медленного разряда конденсаторов процессор начинает скакать по программе как попало.

Неужели? А если он управляет технологическими объектами? И всё начинает пилить, строгать, сверлить и прессовать? Даже страшно стало что либо делать на таком устройстве...
Я всегда соединяю вход Reset непосредственно c Vcc, естественно после окончательной отладки и программирования, и никаких "чудес" ни разу не было.
AT90S2313 имеет встроенную систему сброса с доступной битом-перемычкой FSTRT

320. T100, 17.01.2005 15:43
Dismon
Посмотри даташит на ADM706. Выход RESET срабатывает при ручном ресете или при падении напряжения питания ниже 4,65 В
Далее, mega128 имеет встроенный Brown-out Reset, т. е. без внешнего можно обойтись. В MSP430x15x и MSP430x16x тоже есть подобное - SVS, правда он там, похоже, не обязательно ресетит контроллер, а может всего лишь устанавливать флаг. Но это наверное потому, что MSP430 при снижении напряжения питания не начинает скакать по программе как попало, это фирменный глюк Атмела. ИМХО, для каких камней Атмел рекомендует ставить внешний супервайзер, там надо ставить, слушаться производителя.

Добавление от 17.01.2005 16:03:

Xradio
У тебя чудес не было, у меня тоже до поры до времени не было. Но вот однажды в одной схеме стала портиться eeprom. Если не считать отсутствия супервайзера, в остальном схемотехника была грамотная, не беспокойся. И у других людей были похожие случаи, Атмел признала наличие проблемы и выпустила апноту AVR180, на которую я ссылался.

ЗЫ: фуза FSTRT всего лишь задает длинную или короткую задержку при запуске устройства

321. Dismon, 17.01.2005 16:30
T100
Посмотри даташит на ADM706. Выход RESET срабатывает при ручном ресете или при падении напряжения питания ниже 4,65 В

Посмотрю, завтра схемотехников еще пораспрашиваю, тока вот ресет адм генерит через секунду после того, как я перестаю слать импульсы. А при отключении питания я попадаю в прерывание по порту 1, где пишу в память уставки, гашу индикаторы, отключаю пускатели и т.п.

322. T100, 17.01.2005 16:47
Dismon
Через секунду после того, как ты перестешь слать импульсы, наверное все же срабатывает выход WDO супервайзера, а не RESET.
При отключении питания где-то вдали от контролера и супервайзера (наверное там есть еще какая-то схема обнаружения пропадания питания, и наверное быстродействующая) ты, правильно, попадаешь в прерывание и т. д. ...
А вот потом, когда конденсаторы по питанию разрядятся до 4,65В сработает выход RESET и контроллер остановится. Правда ты (программа) об этом уже не узнаешь.

323. Xradio, 17.01.2005 17:00
T100
Всегда верю Опыту других! Но вот однажды пришлось "лечить" промышленную партию неких устройств на МК Atmel, как раз "для правильности" оснащённых супервизорами... Как выяснилось, разработчик не учёл помеховую обстановку всего изделия в целом - супервизор иногда отрабатывал при вполне рабочих "брызгах" от фронтов силовых триаков. И чтобы не переделывать топологию готовых ПП, пришлось удалить супервизоры - сбои устранились. Случай конечно не показательный! скорее поучительный - "не экономьте меди" и хороших блок-конденсаторов

324. Dikoy, 18.01.2005 03:22
Dismon
но какой смысл в супервизоре питания на ресете?
Чтобы ядро не запускалось, пока напряжение не достигнет нормы

Добавление от 18.01.2005 04:59:

...а то там в БП кондёр на 15 тыщь стоит... Я как его увидел, сразу о визоре подумал

Dismon
Спасибо за наводку. Нашёл кое что по нему: http://www.fulcrum.ru/cgi-bin/bbs/mess_sel.pl?v=p&am…ID=970&page=1 Вот только цоколёвки и внешнего вида нигде нету

325. T100, 18.01.2005 08:06
Dikoy
Паазвольте, паазвольте! Это мне спасибо! Проверь почту, послал подобие даташита на 1171СП. Он, кстати, с открытым коллектором, не забудь резистор с выхода на Vсс, килоом так с десяток.

Xradio
Мне тоже как-то пришлось общаться с неким устройством. Там питание обеспечивал импульсный стабилизатор LM2597HV, со встроенным супервайзером. Так вот, дорожка ресета оказалась достаточно длинной, ловила помехи, и ресетила контроллер, когда хотела. Я, правда, отключить супервайзер не догадался, всего лишь поставил кондюк на 47 нан между ресетом и землей, поближе к контроллеру.

326. Jelsay, 18.01.2005 10:28
удачная связка для старта новичка

1) Algorithm Builder for AVR - русский, бесплатный до 1кБ кода - Среда предназначена для производства полного цикла разработки начиная от ввода алгоритма, включая процесс отладки и заканчивая программированием кристалла
схема SPI программатора в хелпе.
http://home.tula.net/algrom/russian.html

2) ATtine26 - 80 руб, 20ножек, для простых задач внешних элементов поддержания работы контроллера не нужно, 16 - i\o, 11 ацп, 3 таймера, SPI-USI(типаUART), компаратор.. - короче удачная "рабочая лошадка"

3) программатор разьём для СОМ-порта + 3 диода типа кд510 + 7 сопротивлений типа млт-0125/025 + шлейф - короче максимум 30 руб..

4) панелька 20 pin - 5 руб, 2-3 светодиодика - 5 руб, парочку резисторов 470Е для этих светодиодиков. - примерно всего руб 10.
всего 0+80+30+10=120руб

программатор пояется самыми косоруким за полчаса.
ещё полчаса паяется панелька под контроллер + светодиодики
еще полчаса времени тратиться на написание простенькой программки-мигалки.
итого 1.5 часа

проверенно на куче студентов.

327. Dikoy, 19.01.2005 06:29
T100
А, сорри
Ну, пусте тебе будет ДВОЙНОЕ БОЛЬШОЕ спасибо!



T100
не забудь резистор с выхода на Vсс, килоом так с десяток.
всего лишь поставил кондюк на 47 нан между ресетом и землей
И получится RC цепочка на 470 мкС... Не много ли?



PS: А в качестве подтяжки ОК внутренняя подтяжка вывода res не может послужить? Или большая слишком?


Кста! А что с выходом TxD делать в кодевижне, если я UART включил. Как его в закладке ports настроить? А то меня это вдруг стало немножко беспокоить: если я его с нечего делать на вход настрою, компилятор это пропустит?

328. T100, 19.01.2005 10:36
Dikoy
И получится RC цепочка на 470 мкС... Не много ли?
Боишься, что контроллер на 470 мкС позднее запустится? Так у АВР-ки по дефолту вообще задержка 16 мс при старте, если, конечно, не запрограммирована фуза FSTRT. В любом случае, ресетную дорожку нужно делать максимально короткой, я конденсатор ставил только из-за длинной оной и всё работает как часы уже довольно давно.

Внешний резистор с ресета на плюс даже Атмел рекомендует. Внутренний великоват.

А вот насчет кодевижена я тебе не подскажу, для моих задач ассемблер был оптимальнее.

329. Dikoy, 19.01.2005 11:45
T100
я конденсатор ставил только из-за длинной оной
У меня она 1.5см от визора получилась, и около 7см до разъёма программатора
Место под кондёр на плате предусмотрел. Пока 10 нан поставлю, а там посмотрим...
Резюк 10к тоже поставил.

330. 40inD, 20.01.2005 11:34
Достался мне тут фитоновский PicProg+ с ПО. Не пойму: при загрузке hex-файла как кода микроконтроллера он меняет местами старший и младший байты. При загрузке этого же файла как дампа данных - он байты не меняет местами. Так и должно быть? Что-то у меня не получилось запустить ни один PIC, прошитый этим программатором. Запустился только один 16F84A, когда я попробовал его прошить не как кодом контроллера а как данными. Кто-нить сталкивался с этим программатором?

331. Dikoy, 22.01.2005 23:42
Помогите барану (с) разогнать UART.
Задача проста - получить 0.5 Mbps с UART меги8. Насколько понял из даташиты, для этого надо подавать внешнее тактирование на пин PD4. Но вот какую частоту и как это вообще будет работать, не ясно
Ткните, плиз, хотябы в страницу в даташите, а то я там про этот режим ничё не нашёл

Добавление от 23.01.2005 16:35:

Dikoy
получить 0.5 Mbps с UART меги8
Разобрался уже... Оказывается, просто не там читал...

Теперь другой вопрос: Я хочу получит двойную скорость UART (асинхронный режим), то есть 230.4k.
Значит я записываю в UBRR число 15 (при кварце 14.7456), то есть
UBRRH=0x00;
UBRRL=0x0F;
И всё работает.

Тогда почему в таблице против значения скорости 230.4k и U2X = 0 стоит тройка, а не 15?
Или я опять что-то не понял?

332. T100, 24.01.2005 09:23
Dikoy
Чегой-то я не пойму сколько тебе нужно - 0.5 Mbps или 230.4k? Если 230.4, то в режиме удвоения скорости (U2X = 1) ты должен был записать в UBRR число 7 (см. таблицу 62). Формула для расчёта есть в таблице 52:
UBRR = fosc/8*BAUD - 1
14745600/8*230400 - 1 = 7
А ты записал 15 почему-то. Говоришь, всё работает? Уверен, что там 230.4k? Может кварц генерит на второй гармонике?

Тогда почему в таблице против значения скорости 230.4k и U2X = 0 стоит тройка, а не 15?
При U2X = 0 UBRR = fosc/16*BAUD - 1
14745600/16*230400 - 1 = 3

333. Dikoy, 24.01.2005 10:05
T100
сколько тебе нужно - 0.5 Mbps или 230.4k
Расчётно - 330к. А 0.5 Mbps взял из таблицы с запасом. Потом вычитал, что это в синхронном режиме, а в асинхронном максимум 230.4k. Вот на него и нацелился (придётся код жать...).

А ты записал 15 почему-то.
Так в том то и фишка, что не я
Когда я в визарде ставлю 115200 и галку *2, он генерит те самые
UBRRH=0x00;
UBRRL=0x0F;
То есть 15.
При этом установки U2X я что-то не наблюдаю...

То есть одна и та же скорость - 230.4k - получается разными числами
Чушь какая-то...

334. T100, 24.01.2005 10:16
Dikoy
я в визарде ставлю 115200 и галку *2
Наверное он тебе делает не 115200*2, а 115200 в режине удвоения скорости. Тогда правильно, должно быть 15. Но U2X должен взводиться.
В ассемблере-то таких проблем в принципе возникнуть не может, что ручками поставил, то и будет.

335. Dikoy, 24.01.2005 12:28
T100
115200 в режине удвоения скорости.
Ну да, так и должно происходить. Но ведь U2X то не взводится! Или я этого не вижу...
Короче, интересное кино получается: если я пишу 15 и U2X = 1, то получаю 230.4.
Если я пишу 3 и U2X = 0, то тоже получаю 230.4
Значит, если записать 7 и U2X = 1, то я получу 460.8 в асинхронном режиме?
Короче, толи лыжи не едут... Толи я чего-то не понимаю...

А всего то хотел быстрый UART для подачи на FT232BM...

336. Tahoe, 24.01.2005 16:18
Dikoy

/* Processor type: ATmega8l-8 at 3v3 */
/* Main clock: 8 192 000 Hz */

UCSRA = U2X;
UCSRB = TXEN;
UCSRC = URSEL | UCSZ1 | UCSZ0;
UBRRH = 0;
UBRRL = 0;

Всё отлично работает на 1024 кбод.

337. Dikoy, 24.01.2005 18:37
Tahoe
Всё отлично работает на 1024 кбод.
Это в асинхронном режиме? То есть по RS-232?
Тогда я нафих запутался...

8 мег поца мне мало, а 1024 кбод много... Смотрел сейчас таблицу, высмотрел для fosc = 16.0000 MHz, чтоб скорость 0.5M была. Значит, я пишу так:

UCSRA = U2X;
.....................
UBRRH = 0x00;
UBRRL = 0x03;

То есть ставлю 250k и U2X = 1.
Верно?

ЗЫ: как там мега на 16 МГц себя ведёт? Устойчиво? (EEPROM не используется). А то я её на таких скоростях ещё не гонял...

338. Tahoe, 24.01.2005 19:31
Dikoy
То есть по RS-232?
Да. Точнее говоря по UART. По RS-232 не пробовал. Я даже преобразователей на такую скорость не знаю.

U2X это ни что иное, как просто ухудшение точности АВРовского UART. Сам UART каждый "UART-овский бит" сэмплирует. В обычном режиме он семплирует по 16 отсчётов. В "ускоренном" ( U2X ) по 8 осчётов. Итого, если тактовая 8 МГц, то самое быстрое в обычном режиме будет 8 МГц / 16 = 500 кГц. А если брать только 8 отсчётов, то 8 МГц / 8 = 1 МГц. В моём случае кварц 8,192 МГц / 8 = 1,024 МГц.
UBRR это ни что иное, как просто делитель тактовой. Т.е. если ты поделишь тактовую например на 4, то в вышеприведённых примерах вместо 8 МГц подставляй 8 МГц / 4 = 2 МГц. Т.е. в "обычном" режиме 2 МГц / 16 = 125 кГц. Собственно эти "килогерцы" и есть искомые "килободы".
Всё это дело очень подробно разжёвано в даташите, секция про UART.

ЗЫ: как там мега на 16 МГц себя ведёт?
Да обыкновенно. Я, правда, в основном её на 8 МГц завожу. Потому как у меня питание обычно 3,3 В.

339. Dikoy, 25.01.2005 13:25
Tahoe
В обычном режиме он семплирует по 16 отсчётов. В "ускоренном" ( U2X ) по 8
Угу, вкурил...

Всё это дело очень подробно разжёвано в даташите
У тебя лучше получается

Короче, вот, что я насчитал:
Ставлю кварц 16.384 МГц, U2X=0, UBRR=1. Получаю 512 кБод.
А с FT232BM не будет проблем при установки такой скорости? Всё чётко работать будет?

ЗЫ: Я всё ж не понял, какая скорость "стандартней": 500 или 512?
Просто по таблице, 0.5М (вот только не знаю, 500 кБод чистых они имели ввиду, или 512, но просто сократили запись) при 16.000 МГц даёт ошибку 0%. Я же насчитал 2.4%
Просто мне интересен преход скоростей: сначала 115.2k, 230.4k, а потом сразу 250k, 0.5M, 1M... Или это уже не важно, когда скорость вышла за пределы RS-232 диапазона?
Просто сейчас обзвонил местные конторы - кварц на 16.384 редкость Зато на 16.000 есть в неограниченных количествах... То есть скорость 500.0 кБод мне предпочтительней, а как это всё будет работать, не знаю...

340. Tahoe, 25.01.2005 18:30
Dikoy
А с FT232BM не будет проблем при установки такой скорости?
Я вот именно с FT232BM и работал на этой скорости. Только не забудь выставить в самой FT такую же скорость. Там, помнится, скорость задаётся путём деления 3 МГц. Посмотри АппНоту соотвествующую к FT.

Или это уже не важно, когда скорость вышла за пределы RS-232 диапазона?
Это наверное вообще не важно. Главное, что бы оба устройства работали на одной скорости. Другое дело, что вряд ли ты заставишь комповый COM-порт работать на частоте,скажем, 68 572.
У меня стабильно работало устройство на 1М с устройством на 1,024М. В UARTе синхронизация происходит каждый новый байт, по старт биту. Т.е. ему надо "продержаться" в пределах погрешности только 8 бит + стоп бит. А там подоспеет следующий старт-бит.
Так что если интересно, можешь дальше даже сам посчитать или нарисовать на бумажке, какой разбег по времени получается. А для пущего интереса, нарисуй на этой же бумажке на каждом бите 8 или 16 отсчётов сэмплирования. Т.е. посмотри на эти биты глазами UARTа.

Зато на 16.000 есть в неограниченных количествах...
Если правильно помню, у тебя с таким кварцем вообще 1 в 1 с FTDI должна получиться скорость. Мне-то нужен был кварц именно на 16,384 / 8,192 из других соображений ( что бы точно 8 кГц на таймере получить ).

341. BerSer, 27.01.2005 19:22
Подскажите ссылку где можно заказать бесплатный образец PIC контроллера и диски датошитов.

342. An_private, 27.01.2005 19:31
BerSer
а на хрена? pic'и стоят от 1$ в любом магазине. Все даташиты лежат на сайте.

343. BerSer, 28.01.2005 14:51
An_private
Имею слабость к халяве

Просто я читал, что они высылают pic16F84, а он стоит около 3 баков ...

344. Dikoy, 03.02.2005 03:23
Tahoe
Там, помнится, скорость задаётся путём деления 3 МГц.
Ага, оно! Во как звучит:
"Чтобы рассчитать нужное значение коэффициента деления, число, вдвое меньшее частоты кварцевого резонатора (Гц), делят на требуемую скорость передачи (Бод). Частное округляют до ближайшего числа с дробной частью 0,125, 0,25, 0,5 или до целого числа."
То есть (3 МГц)/(0.5 Mbps) = 6. Всё чётко, аккурат под кварц 16.0 МГц в атмелке!

345. Tahoe, 03.02.2005 04:16
Dikoy
Всё чётко, аккурат под кварц 16.0 МГц в атмелке!
Кстати, с кварцом 16384000 тоже стабильно работает. По крайней мере на передачу из АВРа в FT. Я специально ставил на прогон, смотрел.

346. Dikoy, 03.02.2005 05:32
Tahoe
Кстати, с кварцом 16384000 тоже стабильно работает
Ну да, так и должно быть - бумажку нарисовал, она это подтверждает
Но мне 16.0 кварц гораздо выгоднее.

347. toshas, 03.02.2005 11:12
Люли помогите купил программатор ponyprog воткнул в него pic16F84A, пытался запрограммировать и вот результат
ic-prog 1.05D - ошибка поп адресу 000h
ponyprog 2.04 2.05 2.06 - error -24 & WriteFailed
ponyprog 1.17 2.02 2.03 - все работает отлично

ПОЧЕМУ???

348. Dikoy, 13.02.2005 19:31
Ещё один вопросец по ATmega8...
Что означает (в общих тезисах) галка "SPI Clock Rate *2" в закдадке SPI КодеВизарда?
То есть, что она увеличивает тактовую частоту SPI, ясно. Но какой ценой? Просто делитель тактовой частоты процессора, или что-то более коварное за этим скрывается?

ЗЫ: Сейчас изучал даташит на ATmega48. Я правильно понял, что у неё уже все 6 (DIP корпус) каналов АЦП десьтибитные?

349. lmaks, 13.02.2005 20:08
А вот вопрос про Часовой кварц 32768. Atmel Mega128
В спецификации не четко указано надо ли к нему ставить конденсаторы на землю. Вроде как написано что вход заточен под часовой кварй, а про кондеры не слово? Вот на основной даже таблица с номиналами дана.

350. ADO, 14.02.2005 13:33
Dikoy
Как следует из описания, цена - SPI не работает слейвом на максимальной скорости при установке этого удвоения. Видимо поэтому отдельный бит.
lmaks
Просто подключается кварц без всего.

351. Dikoy, 21.02.2005 01:40
ADO
цена - SPI не работает слейвом на максимальной скорости п
То есть, если я читаю данные с внешнего АЦП (МК - master), то ничего страшного. Данные будут читаться с тактовой частотой 7,3728 МГц. Так?

352. ADO, 21.02.2005 14:26
Dikoy
Видимо так... Я так понял, что слейвом АВР так быстро работать не может, а мастером пожалуйста.

353. Tahoe, 21.02.2005 14:41
Dikoy
Поправочка. Если это Мега, то макс. мастера Fclk/2.

354. Vesel'chak U, 25.02.2005 14:26
40inD
при загрузке hex-файла как кода микроконтроллера он меняет местами старший и младший байты.
Какой формат стоит? Intel или Motorola?

355. 40inD, 26.02.2005 02:15
Vesel'chak U
Интел или Микрочип.

356. Dismon, 26.02.2005 17:03
Dikoy
То есть, если я читаю данные с внешнего АЦП (МК - master), то ничего страшного. Данные будут читаться с тактовой частотой 7,3728 МГц.

Только вот я так и не сумел найти АЦП с последовательным интерфейсом, которое работало бы с частотой больше 1.5 МГц. Из этого я сделал вывод, что SPI (или I2C) просто не могут с большей скоростью работать. Так что если у тебя ссылка на такой АЦП, приведи пожалуйста.

357. Dikoy, 26.02.2005 17:59
Dismon
Только вот я так и не сумел найти АЦП с последовательным интерфейсом, которое работало бы с частотой больше 1.5 МГц.
Ты шо? Самый хреновый TLC546 5 МГц держит, 8 разрядов.
TLC1549 - 7 МГц, 10 разрядов.
AD7896 - The maximum SCLK frequency is 10 MHz for 5 V operation
(giving a throughput of 100 kHz) and at 2.7 V the maximum
SCLK frequency is less than 10 MHz to allow for the longer
data access time. 12 разрядов.
MAX1241 - как и AD7896.
К 1241 и 7896 в хелпе КодеВижна есть готовые коды

358. Mura-vey, 27.02.2005 00:50
Народец. Может кто делал часы на базе МК? Как реализуетсясия фишка (мне просто велосипед изобретать не хочется, может кто делал)? У меня есть мечта с дества - часы в двоичном формате. Вот и думаю намутить на ATmega8L. SMD светидиодики и три конопочки, дабы время подстраивать. За раннее благодарен

P.S. Специально не создавал отдельную тему, дабы не забивать форум глупостями.

359. Dikoy, 27.02.2005 01:34
2all
Подскажите простейший способ соединения двух МК AVR.
Есть: UTP витая пара (4 шт), расстояние - 3..4 метра. Связь односторонняя - один МК сливает данные в другой. Есть подозрения, что UART на таком расстоянии не очень хорошо будет работать... Что порекомендуете? Скорость не важна, единицы байт/с.

360. An_private, 27.02.2005 01:40
Dikoy
UART на таком расстоянии не очень хорошо будет работать...
Зависит от уровня помех и наличия земляных петель. Работать, думаю, будет без проблем.
В идеале уйти на что-нибудь типа RS422/485. Там дифференциальная пара. Есть Maxim'овские преобразователи.

361. Dikoy, 27.02.2005 03:40
An_private
Зависит от уровня помех и наличия земляных петель.
Простой магазин одежды. Охранка. UTP идёт от платы к плате напрямки.

В идеале уйти на что-нибудь типа RS422/485.
Хорошо, конечно, но дорого... Плюс, скорость совсем небольшая нужна...
А если всёже юзать UART, пины Tx - Rx передатчика и приёмника соответственно надо чем то усиливать/защищать, или напрямки к UTP проводу паять?

362. Zman, 27.02.2005 13:24
Dikoy:
А если всёже юзать UART, пины Tx - Rx передатчика и приёмника соответственно надо чем то усиливать/защищать, или напрямки к UTP проводу паять?

преобразователи в RS232 само собой (напр мах232)

4 метра имхо не то расстояние чтобы беспокоится - потестируй передачу,
если будут сбои - уменьши скорость. У меня 2.5 метра на 115200 работает
безо всяких проблем, у тебя на 4 метра и скажем на 2400..4800 должно работать
по-любому

363. An_private, 27.02.2005 13:55
ну, у меня 9600 работало где-то на 150 метров Обычный RS-232C, причем кабель (экранированная витая пара) лежала в одном лотке с силовыми кабелями
А почему дорого? MAX485 стоит около 50 рублей.

364. Dismon, 27.02.2005 17:58
Dikoy
AD7896 - The maximum SCLK frequency is 10 MHz for 5 V operation

Ммм... Из даташита AD7896 я уяснил что у него время преобразования 8 микросекунд, производительность до 100 kSPS. Наверно я неправильно выразился, и возможно надо было говорить не про частоту, а про производительность, т.е. сказать так:

"я так и не сумел найти АЦП с последовательным интерфейсом, которое работало бы с производительностью больше 1.5 МSPS"...

Или если этому АЦП дать SCLK 10 MHz то я получу производительность 10 МSPS? Хотя на временной диаграмме явно указано время преобразования 8 мкс... Блин, почему я в свое время не учил как следует англйский ...

Добавление от 27.02.2005 18:11:

Немного почесав репу и подумав над фразой из даташита

цитата:
For the fastest throughput rate (with a serial clock of 10 MHz 5 V operation) the read operation will take 1.6 ms. The read operation must be complete at least 400 ns before the falling edge of the next CONVST, and this gives a total time of 10 мкс for the full throughput time

Я понял, что эти 10 МГц - это максимальная скорость передачи по последовательному интерфейсу после завершения преобразования, которое длится 8 + 1,6 = 9,6 мкс (грубо 10), и как в даташите и написано: and this gives a total time of 10 мкс for the full throughput time. Отсюда и производительность до 100 kSPS. . И значит я тогда действительно неверно высказался про частоту. В АЦП я пока полный , тока учусь.

365. Dikoy, 28.02.2005 01:09
Dismon
Наверно я неправильно выразился, и возможно надо было говорить не про частоту, а про производительность
Есть понятие частоты синхронизации SPI, от которой зависит скорость ИНТЕРФЕЙСА, а есть понятие частоты дискретизации, которая указывает, сколько выборок/с делает АЦП Выборка - это сампл. Вот и получается, 100 kSPS = 100000 выборок/с.

8 + 1,6 = 9,6 мкс (грубо 10),
Там ещё 400 нС паузы до следующего преобразования, так что 10 мкС, это не грубо, а точно

В АЦП я пока полный , тока учусь.
Тогда рекомендую тебе книженцию: Патрик Гёлль. \ Как превратить ПК в измерительный комплекс. \ ДМКпресс \ 2002г.
Материал староват, но общая концепция изложена очень хорошо.

366. Dikoy, 01.03.2005 09:19
2all

Вопрос по AVR. ATmega48 в частности.
Если я "включаю" (инициализирую) внутренний АЦП, а нужен мне только один его канал, могу я безо всяких дополнительных настроек использовать остальные выводы PC (которые его каналы) как обычные выводы порта? Причём и на ввод, и на вывод.

А то дефицит пинов, хочу клаву через АЦП пустить...

367. LazyCamel, 01.03.2005 11:31
Dikoy
Если дефицит пинов для клавы - то тебе же говорили уже
Вешай на свободные входы АЦП резистивный ЦАП. 4-битный например при точности резисторов 1% за глаза.
решение проверенное многолетним опытом джойстикостроителей
если сильно охото стандартную матрицу заюзать - то ног все одно не хватит она 4х4

А так использовать свободные входы порта с АЦП можно спокойно , но только при их работе на вход/выход с меандром более менее приличной частоты - резко падает точность АЦП. По крайней мере на Тини циклы SPI и ADC пришлось явно разводить, иначе в ADCL были цены на апельсины в африке.

368. Instylar, 02.03.2005 13:17
Хм... Помогите пожалуйста в таком вопросе - требуется сваять измерительное устройство, в данном случае осциллограф. Подключение к USB. Учтя желательные рабочие частоты в пределах до 20 мегагерц (ну или уж 10ти хотя бы) подразумевается 2.0 спецификация... В общем учтя некоторую неподкованность в данном вопросе порекомендуйте - что необходимо будет использовать и ссылки по теме (за схемные решения буду очень благодарен). Вообще говоря подразумевается на входе АЦП (а как иначе))), но относительно высокие частоты подразумевают его снятие не с потолка...). Далее либо однокристалка, которая будет передаввать результат на усб(как осуществить?), ну и либо преобразовательн порта усб типа FT245BM для передачи собственно в усб. Программу опроса порта написать будет вероятно проще (хотя ссылки по теме тоже приветствуются). Хм... И нужна ли оджнокристалка? Или с АЦП можно сразу через преобразователь в порт а далее программно расшифровывать и отрисовывывать? В общем просьба ответить на вопросы как можно проще и доступнее. Учтя общую неподованность в вопросе)))...

369. Zman, 02.03.2005 17:44
Instylar:

создать хороший измерительный прибор самому - не такая тривиальная задача, как может показаться , ты уверен, что сам хочешь это сделать "не имея достаточно опыта" ?
тебе важен процесс или результат ?
p.s. готовые решения продают от 30 и выше баксов, поищи на форуме тему "делаем осциллограф сами"

370. Instylar, 02.03.2005 19:22
Ну не то чтобы хочу(((... Начав разбираться в вопросе я это понимаю уже довольно хорошо... Просто интересует устройство даже скорее как демонстрация процесса, сверхвысокая точность мне не нужна(но и данные с потолка тоже не устраивают). Скажем так - опуская требования вниз (245ая кажется все равно больше 8 мбит/с не даст) надо подобрать остальные компоненты (достаточно распространенные и уовлетворяющие частоте...) и возможные схемные решения... Основная загвоздка на данный момент во входной части - аналоговая часть и АЦП...
Хорошо, посмотрю...

371. An_private, 02.03.2005 19:50
Instylar
А зачем темы плодить? Есть же уже...
Осциллографический USB пробник (http://forum.ixbt.com/topic.cgi?id=48:3412)

372. Dikoy, 03.03.2005 11:30
Instylar
По теореме Котельникова, чтобы снимать АЦП 20 МГц, нужно дискретизировать с частотой 40 МГц МИНИМУМ.
Если продаш квартиру и машину, может хватит на такой АЦП

Получить один мегасампл - реально, но надо знать ПЛИС. С однокристалкой - 100 килосамплов МАКСИМУМ. Так что забей

2 алл
ЗЫ: Как настраивать неиспользуемые пины МК? ИМХО - входы с подтяжками самое безопасное. Или не так?

373. An_private, 03.03.2005 12:35
Dikoy
Если продаш квартиру и машину, может хватит на такой АЦП
Не в том веке живете АЦП на 80 MSPS, 10 бит -
http://www.analog.com/en/prod/0%2C%2CAD9865%2C00.html
Заводская цена - 12$ за штуку

374. Zman, 03.03.2005 16:51
Dikoy:
ЗЫ: Как настраивать неиспользуемые пины МК? ИМХО - входы с подтяжками самое безопасное. Или не так?

имхо это то же самое, что и оставлять неподключенные выходы в одном состоянии..
в КМОП-ах потребления не должно быть в обоих вариантах..
нельзя только оставлять входы без пулапов и никуда не подключенные

375. T100, 04.03.2005 09:30
Dikoy
ЗЫ: Как настраивать неиспользуемые пины МК? ИМХО - входы с подтяжками самое безопасное. Или не так?

С точки зрения помехозащищённости лучше сделать их выходами

376. LazyCamel, 04.03.2005 11:31
Dikoy

Э-э-э... Не пугай человека..

Розница по москве на двухканальные АЦП:

8 бит 100Мгц - AD9288 - 15-20$
10 бит 100Мгц - AD9218 - 25-30$
12 бит 100Мгц - LTC-2222 - 50-60$

Пользуйтесь ресурсом efind.ru

T100

Кстати, все время забываю попробовать радиогубительский трюк - сделать на АВРе выход, установить 1, замкнуть на землю и прочитать PINх - как вход работать будет ?

377. Dikoy, 04.03.2005 14:59
LazyCamel
А ИОН? А цифровая часть на такй битрейт? Ведь даже USB будет уже мало, надо на PCI коситься... Вот и получится, что в сумме прибор будет как самолёт

ЗЫ: Про АЦП меги вопрос в силе - я НЕ ХОЧУ использовать остальные каналы как АНАЛОГОВЫЕ входы. Аналоговым мне нужен только ОДИН. А остальные - КАК ЦИФРОВЫЕ

378. ADO, 04.03.2005 15:37
Dikoy
В даташите ясно сказано - во время преобразования не шевели выходами. На чистом аглицком языке. А так смотря что меришь, я температуру мерил - нормально.

379. Dismon, 05.03.2005 09:28
Dikoy
Получить один мегасампл - реально, но надо знать ПЛИС. С однокристалкой - 100 килосамплов МАКСИМУМ. Так что забей

Да ну, фигня... Я вот хоть и начал мучать ацп 2 недели назад, но уже спокойно получаю 14 мегасемплов (по частоте есс-но ). Мог бы и больше, но буферная память что я заложил в девайс всего 70нс время доступа по паспорту, что совсем немного больше 14МГц. АЦП AD9203.

Кстати, я честно говоря не понимаю, зачем тебе внешний АПЦ дискретизации 100Кгц, когда есть например микроконтроллер MSP430F149 от техас инструмент? В аргусофте, если память не подводит, jtag (он же программатор) с 2 пробными контроллерами и диском с софтом стоит 70$. Так там как раз 8-канальный 12-бит 200КГц АЦП, 6 портов ввода/вывода, стоит микроконтроллер отдельно 9-12$, он кстати еще и 16-битный, с аппаратным умножителем, малопотребляющий (рассчитывался для батарейного питания). А если уж ставить внешний АЦП 12 бит, то лучше AD7476, он имеет частоту дискретизации 1МГц, спи интерфейс и стоит около 7$.


LazyCamel
8 бит 100Мгц - AD9288 - 15-20$
10 бит 100Мгц - AD9218 - 25-30$
12 бит 100Мгц - LTC-2222 - 50-60$


Сюда для красоту еще строчку нада:
MAX1124EGK-D/250M/97.78$

380. Dikoy, 05.03.2005 13:18
Dismon
Ну вот, пошли варианты!
Да много всего можно сделать, и запись значений во внутреннюю память, а потом слив их в комп, уже сто раз обсуждались Я имел ввиду real time reading
Да и вообще, начинающему, который ещё и не знает толком, как там всё работает, ИМХО, делать девайс с внутренней памятью... Да и что эти 12 бит 100Мгц для 20Мгц сигнала? Пять точек на период?
Я уход гироскопов мерию, дискретность - 1о. И то, от меня требуют 20 точек на градус, а лучше - 40, а 20 получить из них усреднением...

Кстати, я честно говоря не понимаю, зачем тебе внешний АПЦ дискретизации 100Кгц,
А по-тому, что есть всякие ламеры, строящие из себя спецов! Как мой шеф!
Нафих было покупать упаковку AD7896 (аж 48 штук), я до сих пор не знаю. Пытался у него спросить, ответ таков: "ну тебе ж нужен был 12 разрядный, вот и купили" и удивлённый взгляд...
Вот и приходится делать всё на них, т.к. объяснить шефу, что у АЦП помимо разрядности есть ещё пара "второстепенных" параметров, нереально

Что до разных МК, то мне до недавнего времени их вообще не давали использовать - вражеская техника Сейчас хоть атмел разрешили, уже прогресс

381. Dismon, 05.03.2005 15:46
Dikoy
Что до разных МК, то мне до недавнего времени их вообще не давали использовать

Хм... Интересная особенность. Значит АЦП вражеские использовать можно, а МК - ни-ни.

Да и вообще, начинающему, который ещё и не знает толком, как там всё работает, ИМХО, делать девайс с внутренней памятью...

Так я подумав выбирал память . Я не стал брать SRAM, или DRAM (свят-свят), а взял за 7 у.е. (эт если память не подводит, честно говоря просто не помню, почем брал) FM1808. Там все просто, всего 3 линии, шина адреса и шина данных. Причем память энергонезависима. С практически неограниченным числом циклов перезаписи. И повторяю, все пока работает, причем на макетке. )

382. Dikoy, 06.03.2005 00:54
Dismon
Хм... Интересная особенность. Значит АЦП вражеские использовать можно, а МК - ни-ни.
Ну, дежурная мысль вояк - схема должна быть разработана такой, чтобы её при случае можно было собрать из отечественных комплектующих. С АЦП проще - их устройство известно и даже есть отечественные аналоги ( ), а вот МК - вещь более сложная. Спасибо Ангстремовским ВЕ, которые хоть отдалённо похожи на атмелы и пики, а то б до сих пор на Z80 всё делал
Да и то, если вдруг задействуешь какую-то Атмеловскую фичу, которой нет в ВЕ, могут и по шее надавать. Но это от конкретного заказа зависит.


И повторяю, все пока работает, причем на макетке.
Да я верю, верю! Вот только у Instylar может и не заработать

383. Dismon, 09.03.2005 08:33
Dikoy
С АЦП проще - их устройство известно и даже есть отечественные аналоги ( ), а вот МК - вещь более сложная.

Вообще-то вопрос спорный . Если взять для рассмотрения ракетно-артелерийский автомат "Каштан", который идет не только на экспорт, то там используются PIC16F877. Во вспомогательных схемах. А сам вычислитель построен на 2 DSP процессорах по 500Мгц, если память не подводит. Есть также блок питания для вертолетов, размером с ладонь, толщиной 1см, выдающий 10-20А постоянки по разным каналам, в котором используется AT90S8535.
Ну и еще до кучи измерительный комплекс, который используется в космической отрасли для определения стартовых параметров ракет так же на PIC. Я это к тому, что все эти девайсы проходят госприемку у военпредов, и, насколько мне известно, данные элементы входят в список разрешенных к использованию. Причем такого нет:

Да и то, если вдруг задействуешь какую-то Атмеловскую фичу, которой нет в ВЕ, могут и по шее надавать.

Наоборот, даже несколько раз приходилось писать специальные акты и обоснование на использование отечественных элементов.


Да и что эти 12 бит 100Мгц для 20Мгц сигнала? Пять точек на период?

Это внешний АЦП, который ты используешь (по крайней мере, мне так показалось из поста). Я знаком с теоремой Котельникова, и потому мне жутко интересно, как ты хочешь получить:

Да и что эти 12 бит 100Мгц для 20Мгц сигнала? Пять точек на период?
Я уход гироскопов мерию, дискретность - 1о. И то, от меня требуют 20 точек на градус, а лучше - 40, а 20 получить из них усреднением...


с помощью АЦП 100 kSPS. .

384. psnsergey, 09.03.2005 12:18
Dikoy
Вообще-то для полной инфы о 20 МГц сигнале довольно 40 МГц сэмплов... По Котельникову . И хоть 1 градус, хоть секунда угловая - знай разрядность повышай...

385. Dikoy, 09.03.2005 17:14
Dismon
Если взять для рассмотрения ракетно-артелерийский автомат "Каштан", который идет не только на экспорт
В Каштане ПИКИ!!!!?? Это либо я отстал, либо это какой-то экспортный каштан... Насколько помню, там даже вычислитель блока целеопределения на логике, причём на радар и на оптику отдельно. Всё это идёт на ЦП, который аналог П4 и в Сухарях стоит... По крайней мере, в той ТД, что я наблюдал...
А система перезаряда, та вообще на ПЛМ и рассыпухе...

Наоборот, даже несколько раз приходилось писать специальные акты и обоснование на использование отечественных элементов.
Значит повезло У нас всё с точностью до наоборот

Кстати, военная приёмка тоже разная бывает. Завит от назначения девайса, ИМХО. Т.к. мне часто задание дают, сваять девайс на импорте и отечественных компонентах. Оправдываются, что для сравнения, но я думаю, что это просто внутренний и экспортный варианты.
Что до импортных компонентов в нашей военной технике... Даже закон есть, это запрещающий... Да и, в случае войны, изъятию подлежат все внедорожники отечественного производства, а вот про импортные ни слова


с помощью АЦП 100 kSPS. .
А что такого? У хорошего гироскопа уход 360о в сутки. Причём не за счёт внутренней прецесии, а за счёт вращения земли То есть 1о за 4 минуты

psnsergey
Вообще-то для полной инфы о 20 МГц сигнале довольно 40 МГц сэмплов... По Котельникову
Ну а я что писАл:
Dikoy
По теореме Котельникова, чтобы снимать АЦП 20 МГц, нужно дискретизировать с частотой 40 МГц

А если я вдруг захочу на экране сигнал посмотреть, что я увижу? Трапецеподобные бяки?
Вот 10-20 точек на период, это уже куда ни шло...

386. Dismon, 10.03.2005 14:26
Dikoy
В Каштане ПИКИ!!!!?? Это либо я отстал, либо это какой-то экспортный каштан...

В каштановской подсистеме "Кортик" ближнего действия, если точнее. .

это просто внутренний и экспортный варианты.
Что до импортных компонентов в нашей военной технике... Даже закон есть, это запрещающий... Да и, в случае войны, изъятию подлежат все внедорожники отечественного производства, а вот про импортные ни слова


Я лично участвовал в формировании экспортного варианта документации. Для Индии экспортная документация - перевод на английский плюс удаление некоторых сигналов. . Для Китая - просто удаление некоторых сигналов, т.е. китайцы предпочитают документацию на русском. . А что касается импортных компонентов - может закон и есть, да тока в БСН, когда я копался в документации, мне попадались официальные издания (с печатями, всеми что полагаются) с перечнем разрешенных к использованию импортных компонентов. Когда я работал в этой конторе, да, девайсы шли только на экспорт, однако я там видел и старый вариант, с меньшими возможностями, однако на той же элементной базе. А старый вариант стоит (ну на сколько мне известно) и на ТАвКр "Адмирал Советского Союза Кузнецов", который пока вроде никому не собираются продавать.
.

что такого? У хорошего гироскопа уход 360о в сутки. Причём не за счёт внутренней прецесии, а за счёт вращения земли То есть 1о за 4 минуты
Так тогда и сигнал, который ты обрабатываешь АЦП не 20 МГц, а 1/240 Гц. . А если тебе разрешили использовать пики и авр, я думаю и техас разрешат. А там встроенный АЦП 12 разрядов 200kSPS. Тогда в твоей схеме не нужен внешний АЦП. Девайс будет компактней, дешевле, проще в производстве и настройке.

387. АСУТПшник, 11.03.2005 17:30
Давайте уже по теме
У меня ламерский вопрос есть. Я немного поковырял ПИКи и АВРки на асме и вот мне захотелось попробовать СИ. Взял любимый Неонилом GCC, да вот беда - не успел я толком что-то написать (сделал умножение float-ов) как память у моей at90s2313 (2кб) кончилась
Где подкрутить чтобы размер выходил поскромнее? Вот строка для линковки
avr-gcc -mmcu=at90s2313 -I. -gstabs -DF_CPU=10000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test.o -std=gnu99 -MD -MP -MF .dep/test.elf.d test.o --output test.elf -Wl,-Map=test.map,--cref -Wl,-u,vfprintf -lprintf_min -lm

388. Instylar, 11.03.2005 20:40
Dikoy
Вот только у Instylar может и не заработать
Ну это конечно в руки все упирается... Блин, у кого есть схема (20 МГц я уже забыл после ознакомления с темой по осциллографу (та что на 70 страниц)), дайте в мыло или ссылкой... В пробнике была ссылка , интересует еще пара тройка вариантов (особенно из тех что были собраны повторены самими)...

А если я вдруг захочу на экране сигнал посмотреть, что я увижу? Трапецеподобные бяки?
Вот 10-20 точек на период, это уже куда ни шло...

Трапецевидные бяки не очень интеерсуют, но если считать что более точное снятие сигнала обуславливает пониженную частоту снятия то бяки будут для верхнего предела... Частота ниже качество лучше... Бяки пусть в районе Мгц и выше...

389. Dikoy, 11.03.2005 20:46
АСУТПшник
Может, с КодеВижна стоило начать?..

2алл
Можно ли в программно ресетить АВР? То есть, есть ли у него команда/бит, выполнение/взведение которого аналогично нулю на входе /res?

Dismon
Для Китая - просто удаление некоторых сигналов, т.е. китайцы предпочитают документацию на русском.
Это да Сам прочувствовал: приносят мне даташит на русском. Долго я его читал, потом плюнул и скачал на английском Это как в анекдоте: "Алиса долго вспоминала, как будет save по русски"

390. SXC, 11.03.2005 21:23
Прошу прощения за вопрос, могущий показаться простым, но всё же…
в CodeVisionAVR есть функции:
void delay_us(unsigned int a)
void delay_ms(unsigned int a)
которые точно выставляют произвольную задержку в ms b us соответственно.
В ICCAVR этого нет. Проц работает на 8M – может кто поможет или у кого есть самописные аналогичные функции?

Заранее благодарен за ответ

391. spliner, 11.03.2005 21:56
Dikoy 2алл
Можно ли в программно ресетить АВР? То есть, есть ли у него команда/бит, выполнение/взведение которого аналогично нулю на входе /res?


jmp 0

392. GedasL, 11.03.2005 22:00
цитата:

Можно ли в программно ресетить АВР? То есть, есть ли у него команда/бит, выполнение/взведение которого аналогично нулю на входе /res?


Надо заставить сроботать watchdog. Только так сделаеш нормальны ресет программно

393. АСУТПшник, 11.03.2005 22:31
Dikoy
А что, CodeVision генерит код меньше?
Просто мне GCC показался круче.
Ну так что, Си не подходит для контроллеров ниже Меги? Пробовал компилить примеры - тоже выходит под 5-6 кб.

394. spliner, 11.03.2005 22:37
GedasL Надо заставить сроботать watchdog. Только так сделаеш нормальны ресет программно
Теоретически программно наверное можно это сделать так:
Выполнить подпрограмму с недозволенным кодом... Например, обратиться к несуществующему адресу. Тогда watchdog через некоторое время сделает "jmp 0", программно эквивалентный РЕСЕТ-у...

395. GedasL, 11.03.2005 22:43
Если просто сделать jmp 0, в регистрах небудет "initial value", а ето нехорошо

396. spliner, 11.03.2005 22:55
GedasL. Это не есть "не хорошо".
Это плюс. Можно сделать выбор - либо их очистить, либо использовать.
И вообще, есть такая полезная привычка - перед использованием регистров их нужно инициализировать и не предполагать, что там какие-либо значения, которые мы туда не вводили самостоятельно (например, нули). Есть нюансы, конечно, но в большинстве случаев так. ИМХО.

397. GedasL, 11.03.2005 22:57
цитата:

В ICCAVR этого нет. Проц работает на 8M – может кто поможет или у кого есть самописные аналогичные функции?

Два варианта
1 - проц сидит в цикле нужное время
2 - надо настроить timer interrup скажем на 1ms и в нем просто инкрементировать коунтер
1-1ms, 2-2ms и тдю


p.s. скачаи AVRCalc.

Добавление от 11.03.2005 23:02:

цитата:
spliner:
GedasL. Это не есть "не хорошо".
Это плюс. Можно сделать выбор - либо их очистить, либо использовать.

Ну я люблю делать просто - если ресет значит ресет А то потом будеш голову ломать и искать бит которы забыл

398. Shinen, 12.03.2005 01:55
spliner
Выполнить подпрограмму с недозволенным кодом... Например, обратиться к несуществующему адресу. Тогда watchdog через некоторое время сделает "jmp 0",
для этого просто достаточно не давать команду WDR

399. spliner, 12.03.2005 02:08
Shinen
Допустим.. Тогда получается - чтобы программно перезагрузить код... Нужно программно "не дать комманду WDR" . Если вдуматься в эту игру слов... ЭТО может оказаться сложнее..

400. Shinen, 12.03.2005 02:10
spliner
да и допускать нечего как раз при разрешенном вачдоге необходимо периодически давать команду WDR не реже чем интервал срабатывания вачдога - если команда вовремя не придет (повис камень или зациклился где) то произойдет резет

401. spliner, 12.03.2005 02:22
Shinen. Так и я о том.
В твоем варианте программного перезагруза нужно "не дать комманду WDR" т.е. добавляется строчка условия, причем реальный РЕСЕТ произойдет после выполнения нескольких (мягко выражаясь) строчек после этого, т.к. сбрасываем таймер watchdog-а мы конечно раньше, чем он досчитает "до ручки"...

402. Shinen, 12.03.2005 02:29
spliner
начнем с того что твой вариант даст непредсказуемый результат
а вообще это делается так:
код:

soft_reset: cli
inf_loop: rjmp inf_loop

при условии что вачдог разрешен

403. SXC, 12.03.2005 20:44
GedasL
p.s. скачаи AVRCalc.
Спасибо, а что это и откуда скачать?

404. GedasL, 12.03.2005 21:41
http://www.avrfreaks.net/index.php?module=FreaksTool…l&item_id=292

405. SXC, 12.03.2005 21:59
GedasL
Спасибо за линк!

406. Dikoy, 13.03.2005 01:54
spliner
jmp 0
То есть прыгнуть в начало кода?
Не, меня это не устраивает Мне нужен полноценный ресет, с обнулением всех регистров, памяти и новой переустановки состояния портов и прочей внутренней фигни... Сторожевой таймер тоже не фонтан - ждать долго...
А может просто какую нить ножку порта с ресетом соединить Хотя есть риск, что МК вообще не стартанёт...

407. Tahoe, 13.03.2005 04:47
АСУТПшник
А что, CodeVision генерит код меньше? Просто мне GCC показался круче. Ну так что, Си не подходит для контроллеров ниже Меги? Пробовал компилить примеры - тоже выходит под 5-6 кб.
Пользуй IAR, будет тебе от этого хорошо. Единственный случай, когда мне пришлось воспользоваться CodeVision, это когда надо было Тини12 или 11, не помню точно, откомпилить. Пришлось, просто потому что IAR их не знает. У них памяти нет, только регистры.
А GCC... ИМХО если любишь *nix, то самое то. Иначе что бы получить столь же оптимальный код как в IAR придётся потрахаться. А зачем, когда IAR делает всё это без секса, либо даже получше. Всё ИМХО, разумеется. Да, тут же была ветка про кимпиляторы для АВР. Поищи.

Dikoy
Точно помню, что в даташитах на АВРы расписывается ситуация, когда дёргаешь портом ножку INT0/INT1 и таким образом сам генеришь якобы внешнее прерывание. Это так, размышления. Собственно чем отличается INT от RESET кроме адреса перехода?

Dikoy
Могу заблуждаться, но насколько я понимаю в случае с IAR Си после ресета вызывается _low_level_init и именно она занимается чисткой, инициализацией и прочая. Пусть Shinen или spliner меня поправят, если не прав.

А может просто какую нить ножку порта с ресетом соединить Хотя есть риск, что МК вообще не стартанёт...
Так посмотри время/клоки ресет и соединяй не напрямую, а поставь какую-нить дифференцирующую или интегрирующую цЕпочку. Т.е. что бы в худшем случае ресет не висел вечно ( значит цепочка дифференцирующая ). Но и что б хватало, когда дёрнешь. Время ресета в клоках см. в даташит.

408. Shinen, 13.03.2005 13:16
Tahoe

Могу заблуждаться, но насколько я понимаю в случае с IAR Си после ресета вызывается _low_level_init и именно она занимается чисткой, инициализацией и прочая.

по идее сей - должно, а если и не делает это сразу, то перед исползованием точно. Сам на сях не пишу

409. Dismon, 14.03.2005 10:00
АСУТПшник
Ну так что, Си не подходит для контроллеров ниже Меги? Пробовал компилить примеры - тоже выходит под 5-6 кб.

Да ну, С подходит. Например АТ90S8535. Там память программ 8 кб. Я им управляю графическим жки, памятью, АЦП, обеспечиваю связь с компом по RS232, и при этом компоилятор (я использую ICC(Image Craft C)) пишет что задействовано 23% ресурсов. Правда я флоаты не использую, нет надобности. Кстати говоря, компиляторы как правило генерируют ассемблерный листинг, попробуй просмотри его. По личному опыту могу сказать, что код на С может быть минимум на 20% больше ассемблерного (если писать, постоянно сверясь с листингом что выдает компилятор и пробовать разные варианты написания), и в 3 раза максимум (вообще не заглядывая в ассемблерный листинг).

Добавление от 14.03.2005 10:12:

Tahoe
Это так, размышления. Собственно чем отличается INT от RESET кроме адреса перехода?
Тем что сразу после ресета порты ориентированы на чтение, а подтягивающеие резисторы отключены. При этом ресет производится низким уровнем, который и будет на пине, если не ставить инвертора. Т.е. получится вечный сброс.

Dikoy
То есть прыгнуть в начало кода?
Не, меня это не устраивает Мне нужен полноценный ресет, с обнулением всех регистров, памяти и новой переустановки состояния портов и прочей внутренней фигни...


А ты что, после ресета не инициализируешь порты регистры и переменные, так как тебе надо? Если ты инициализируешь, то это уже "и новой переустановки состояния портов и прочей внутренней фигни...", память (ОЗУ) кстати не обнуляется, а скорее заполняется случайными значениями. Я это проверял специально. . Если я не инициализировал переменные, то они имели случайное значение. А если обнуление и прочее жизнено необходимо (что в общем-то сложно представить), ничто не мешает перед переходом к адресу 0 самому дать несколько команд, которые это проделают. Правда в С средствами самого С переход по адресу 0 сделать довольно проблематично.


Сторожевой таймер тоже не фонтан - ждать долго...
А что мешает перед сбросом его настроить так чтоб он сработал быстро?


410. ADO, 14.03.2005 14:13
Dikoy
Кстати, Dismon прав. Если ты чем-то пользуешься, то все равно инициализируешь, а если не инициализируешь, то какая тебе разница что там лежит..

411. Dikoy, 14.03.2005 17:15
Dismon
А ты что, после ресета не инициализируешь порты регистры и переменные, так как тебе надо?
Есно инициализирую.

А что мешает перед сбросом его настроить так чтоб он сработал быстро?
Тогда его придётся часто сбрасывать, а время прохождения цикла кода очень непостоянно...

Tahoe
Так посмотри время/клоки ресет и соединяй не напрямую, а поставь какую-нить дифференцирующую или интегрирующую цЕпочку.
А тогда один хрен ждать её время RC. То же самое, что вачдог, только на аналоговом уровне...

412. Dismon, 15.03.2005 09:00
Dikoy
Тогда его придётся часто сбрасывать, а время прохождения цикла кода очень непостоянно...

Ключевые слова
перед сбросом его настроить

Т.е. вначале ставишь его нормально, как тебе надо в программе, а когда хочешь сделать сброс изменяешь его значение так, чтоб сработал быстро, в общем виде:

jmp Res_
....

Res_:
перестановка вачдога (WDTCR = 0x08)
Res_Loop: rjmp Res_Loop

Правда быстрее чем 16К циклов ты установить не сможешь, что при внутреней частоте тактового генератора вачдога 1 Мгц составит примерно 16.3 мс.

413. Xradio, 16.03.2005 16:55
Больше всего понравилось: "соедини вывод порта с reset"................................... ржал долго.

414. Shinen, 16.03.2005 23:33
Xradio
не нахожу юмора в данном конкретном случае

415. Vesel'chak U, 18.03.2005 12:06
Пользуйтесь IAR'ом очень осторожно. Мне недавно так и не удалось в Mega64 воспрользоваться функцией sprintf - происходило (по-видимому) переполнение стека или нехватка памяти - пляски с бубном не помогли, пришлось делать свой аналог функции.

Добавление от 18.03.2005 12:10:

Да и вообще, в IAR отследить утечку памяти проблематично. В MSP430 была похожая проблема при большом количестве прерываний и использовании того же sprintf.

416. lmaks, 18.03.2005 12:26
Vesel'chak U

В ICC там сразу есть предупреждение - что при использовании SPRINTF стек программ должен быть как минимум 32 (+ то что Вам нужно)

417. Vesel'chak U, 18.03.2005 15:05
lmaks
Да я уж какой только не делал, даже 512 байт.

418. lmaks, 18.03.2005 19:27
Vesel'chak U

Не путать стек данных и программ.
Вообще на ICC функция sprintf не удобна в использовании. Требует размещение формата данных в озу. Да и великовата она (если со всеми опциями). Так что конечно проще свою написать.

419. Vesel'chak U, 19.03.2005 03:06
lmaks
Не путать стек данных и программ.
С обоими манипулировал.

Так что конечно проще свою написать.
Проще, вообще-то, использовать готовую.
Я был сильно разочарован. Посмотрим, какие косяки они для ARM'ов подготовили.

К этой теме 19.03.2005 18:56 Chudik подклеил тему "Чертовски хочется поболтать про Микроконтроллеры PIC" (автор: пкш)

421. пкш, 18.03.2005 21:25
Занялся я микроконтроллерами, а все началось с того, что в чисто научных целях надо передавать 16 бит в компьютер с АЦП а сделать соответствующую плату не удалося (поверте пытался сделать плату расширения ISA но работала она только в динамике а в статике...), так вот контроллер PIC16F84A - не получается программировать используя Шаер программер и универсельный программатор ICProg есть еще куча запарок, пытался написать соответствующую программу на дельфи. Работает только на экране оссцилографа а в жизни - болт.Вот такая ботва.

422. An_private, 18.03.2005 21:46
это конец. осталось только застрелиться
А лучше писать в соответствующие темы. А еще лучше их читать.
Помогите начать работать с микроконтроллерами. (http://forum.ixbt.com/topic.cgi?id=48:1119)

423. spliner, 18.03.2005 21:47
пкш. Четче. Так в чем проблема - спрограммировать PIC16F84A?

424. D_Stepan, 18.03.2005 22:12
Чего то я не понял- в этом Пике вроде нет АЦП?

425. joptpd, 18.03.2005 22:45
вышел новый IC-PROG 1.05D ! (http://forum.ixbt.com/topic.cgi?id=48:3727)
jdm собери
я им прошивал

426. alekciy, 19.03.2005 16:02
пкш
Есть такая штука как Microchip MPLAB. Непосредственно для программирования вроде есть PoniProg с поддежкой русского языка.

427. Fedot, 19.03.2005 17:52
alekciy
...есть PoniProg

Народ, кто-нибудь пробовал PonyProg-ом программировать pic16f877a?
В версии v206c он есть, но прошиваться не хочет. Вернее прошиваются только первые два байта, а дальше ff.

428. D_Stepan, 19.03.2005 18:37
Fedot
Ага- есть такое. А в фирме где покупали нам ещё сказали - полная совместимость.

429. Fedot, 19.03.2005 22:47
Только что, на домашней странице PonyProg (http://www.lancos.com/) , обнаружил очередную V206e (http://citkit.dl.sourceforge.net/sourceforge/ponyprog1/ponyprogV206e.zip) программы под Винду. Жаль, что программатор на работе - придётся ждать понедельника !

430. пкш, 28.03.2005 20:37
Народ, А что так тихо - то?

Добавление от 28.03.2005 20:41:

НАРОД! Есть маньяки пытавшиеся самоостоятельно свагранить програму для программирования пиков или вообще хотябы вдуплить как это делается. Вот я на это месяц потратил и ни слова от микроконтроллера в ответ не услыхал. Могу выложить наваяное на дельфе на всеобщий обзор...ежели кому интересно.

431. Tahoe, 28.03.2005 21:35
пкш
Самый большой геморрой для ЛЮБОГО программатора, это не сделать его, и даже не "сделать хорошо, лучше всех". А год из года поддерживать его, по мере выхода новых камней. Ты готов этим заниматься?

432. spliner, 28.03.2005 23:03
пкшЕсть маньяки пытавшиеся самоостоятельно свагранить програму для программирования пиков или вообще хотябы вдуплить как это делается.
Вообще, сигнальчики ведь прописаны - какой после какого. В чем проблема?.
Я года 4 назад "в охотку" написал и сделал свой программатор, правда для Атмела.. Написал на Дельфи. Несколько вечеров потратил - нигде затыков не наблюдалось -все читалось и писалось. Переводчик из Hex формата в BIN больше всего время занял. .
Вообще, сейчас валяется - нафиг не нужен. Есть готовые проги и программаторы -ими и пользуюсь. А причина простая - как Tahoe
говорит - времени жалко. Попробовал - получилось. И успокоился.

433. Tahoe, 02.04.2005 00:06
Во я запостил... Пора спать наверное... Хорошо хоть стереть успел.
Это я на пост с первой страницы отвечать порывался...

434. Dikoy, 04.04.2005 04:17
АЛЛ
Такой вот вопросец.
Есть мега8. В ней постоянно работает АЦП - измеряет напряжение и отправляет в порт. И есть 6 пар светодиодов. По два к одному пину порта (приаттаченная схема, рис. а). При "1" на порте горит один, при "0" - другой. То есть в любой момент времени горят 6 светодиодов (по 5мА на каждый). И того - 30 мА - статический ток через кристалл.
Переключение светодиодов во время преобразования не происходит - они устанавливаются один раз при старте. И от порта к светодиодам тянутся провода по 10см.
Вопрос - это не повлияет на качество преобразования? А то дополнительные ключи для управления светодиодами лень городить...

К сообщению приложены файлы: 1.gif, 396x392, 4Кb

435. psnsergey, 04.04.2005 11:17
Dikoy
На точность - из-за падения напряжений на общих сопротивлениях тока светодиодов и входа АЦП - повлияет.

436. SoKoL_ru, 08.04.2005 21:43
to ALL
тема вроде подходящая ... вопросик в следующем: существует микроконтроллер AT89S8252 24PI и хотелось бы с него слить программу, но загвоздка в битах защиты .Существует ли какой-нибудь способ обойти защиту и нормально слить программу (в рабочем виде) и по-подробнее, если можно
ЗЫ:...просьба сильно не пинать за такой "простой" вопрос, я в этом

437. Неонил, 15.04.2005 08:11
SoKoL_ru
Существует ли какой-нибудь способ обойти защиту и ...

Понимаешь ли... Тут обычно собираются люди, которые создают в непосильном труде то, на что эта защита ставится...
Смотри, как бы не дошло до рукоприкладства...

К этой теме 24.04.2005 11:58 Chudik подклеил тему "Начал изучать AVR. Почему не мигает светодиод?" (автор: Mormon)

439. Mormon, 24.04.2005 06:16
Привет всем!
Начал изучать AVR микроконтроллеры. Моя первая программа идет неверно. После возврата от команды rcall почему-то не продолжается дальше,а возвращается на начало. Может надо запретить сторожевой таймер? Но я не знаю как это сделать. Вот моя программа:
код:

;********************************************************
; Мигание светодиода. Кварц 32 КГц.
;********************************************************
.INCLUDE "2313def.inc"

.DEF COU=r20
.DEF COUNT1=r21

.ORG 0
ldi r30,$40
out DDRD,r30
P1: sbi PORTD,6 ; включить светодиод
rcall SEK ; пауза
cbi PORTD,6 ; выключить светодиод
rcall SEK ; пауза
rjmp P1
;********************************************************
; программа паузы (примерно 1сек)
;********************************************************
SEK: ldi COUNT1,$0F
S3: ldi COU,$FF
Pausa1: dec COU
brne Pausa1
dec COUNT1
brne S3
ret
.EXIT

Светодиод включается и не гаснет.На симуляторе AVR Studio тоже
после первой паузы возвращается на начало.

440. Elektronik, 24.04.2005 08:08
Потому, что в первых строчках программы необходимо проинициализировать указатель стека на конец ОЗУ конкретного чипа.
P.S. До чего вы предсказуемы в очевидных ляпах.

441. yxo, 24.04.2005 09:52
А еще лучше, чтобы его не инициализировать, использовать просто джамп на подпрограмму паузы.

442. Shinen, 24.04.2005 12:26
yxo
а зачем нужна одноразовая подпрограмма ?

Добавление от 24.04.2005 13:30:

Mormon
ldi r16,RAMEND
out SPL,r16

443. Dikoy, 24.04.2005 21:13
Вот такой вопросец.
Если в Мк встроен внутренный генератор (напимер, АТмега), то при программировании МК тактируется от него, или от внешнего кварца (если таковой имеется)?
То есть, если я шью МК со встроенным генератором, причём кварца на плате небыло и в помине, фьюз биты надо переставлять, или он автоматом будет тактироваться от внутреннего генератора?

И вообще, по умолчанию такие МК тактируются от внутреннего генератора?

444. Shinen, 24.04.2005 21:23
Dikoy
тактуется независимо ни от чего от источника прошитого в вьюзах. Т.е. если ты прошьешь использование внешнего кварца или генератора то без оных ничего сделать не сможешь.

445. Dismon, 25.04.2005 11:23
Shinen
Т.е. если ты прошьешь использование внешнего кварца или генератора то без оных ничего сделать не сможешь

Т.е. если я выставил фузы на внешний кварц, поставил 8 Мгц, отладил программу, и теперь хочу использовать кварц 16 Мгц, мне не достаточно просто сменить кварц? А надо вначале прошить на старом кварце новые фузы, затем поменять на 16Мгц?

446. Shinen, 25.04.2005 11:30
Dismon
прошивается тип источника, а не частота

447. An_private, 25.04.2005 13:15
Shinen
прошивается тип источника, а не частота
не совсем. у некоторых контроллеров во фьюзах прошивается еще и диапазоны частот кварца. То есть для 4-8 МГц одна комбинация, для 8-16 - другая.

448. Shinen, 25.04.2005 13:23
An_private
я всегда исполлозую второй вариант, на сколько я понимаю это сделано в угоду потребления, так как у меня кварц редко ниже 8мгц стоит то и разницы нет.

449. An_private, 25.04.2005 13:25
Shinen
ну не знаю. я часто использую 3.6864, так что приходится

450. Shinen, 25.04.2005 13:31
An_private
смысл в том, что второй вариант будет работать с твоим кварцем только жрать больше будет. imho

451. An_private, 25.04.2005 13:33
Shinen
возможно не проверял

452. Dismon, 25.04.2005 13:34
цитата:
Shinen:
Dismon
прошивается тип источника, а не частота

Shinen
прошивается тип источника, а не частота

Гм... А как же CKOPT в мега 8535 и ей подобных новых кристаллах, который

цитата:

For resonators, the maximum frequency is 8 MHz with CKOPT unprogrammed and
16 MHz with CKOPT programmed.

.

кроме того, в описании меги8535 на странице 24 есть табличка, называется "Table 4. Crystal Oscillator Operating Modes" и выглядит так (см. вложение), из которой я делаю вывод, что таки надо в фузах CKSEL3..1 запрограммировать частоту. . Хотя возможно я чего-то недопонимаю в данном даташите.

Я прикупил 2 меги8535, для собственного использования, жене на диссертацию , однако их включение затормозилось, так как я прочитал в инете, как многие жаловались, что у них возникли проблемы с программированием и функционированием после программиования данных контроллеров. Поскольку в случае, если я неправильным программированием введу эти 2 кристала в ступор, мне надо будет ждать минимум месяц, пока местный маганчик привезет на заказ новые, я решил вначале как следует поразобраться с данной проблемой. Так что буду признателен за любые разъяснения.

Добавление от 25.04.2005 13:37:

Кроме того, мне пока не совсем понятно, как лучше запрограммировать SUT1...0...

К сообщению приложены файлы: 1.jpg, 799x285, 45Кb

453. Shinen, 25.04.2005 13:41
Dismon
выше я написал по повожу 8/16.

по поводу ступора - можно только путем программирования пина ресета как i/o пин (тонгда нужно паять/искать параллельный программатор), но в твоем камне, на сколько я помню, этого нет. В другом случае "ступор" не смертелен - прицепишь генератор на вход и оживишь.

454. Dismon, 25.04.2005 14:17
Shinen
выше я написал по повожу 8/16

Дык пока я написал - ты уже написал. .

И остался вопрос про SUT:
Что лучше?

1)Crystal Oscillator, BOD enabled

2)Crystal Oscillator, fastrising power

3)Crystal Oscillator, slowly rising power

Со встроенными Brown-out Detector на атмелках (да и вообще) я не работал, в критических случаях на фирме использовались внешние супервизоры...

455. Shinen, 25.04.2005 23:42
Dismon
BOD enabled imo

456. Dikoy, 30.04.2005 16:35
На каком принципе работает randomise в AVR C?
У ПК он, вроде как, ориентируется на часы. А в МК?

Ситуация такая: делаю хрень типа "поющей новогодней ёлки". Фиговинка такая с множеством светодиодиков...
Так вот, при старте МК (подачи питания) программа генерит рандомайзом число от 0 до 7. В зависимости от числа, вибирается та или иная подпрограмма мигания светодиодами. Так вот будет ли рандомайз нормально работать в таких условиях? Ведь это первая выполняемая функция.
И вообще, кто знает, на что этот рандом ориентируется?

457. Lake, 06.05.2005 11:49
Дык, взял, да проверил...
А чтоб наверняка отвязаться от детерменированности при старте - то в процессе работы программы - по прерыванию, или где-нибудь в главном цикле пиши случайное число в EPROM. А при старте читай это число - вот и все... Для параноидального изврата можно XOR с свежеполученным случайным числом

458. pavlov, 06.05.2005 18:42
нет ли у кого модели attiny 26 для proteus"а

459. IgorT, 08.05.2005 23:32
Привет всем!
Хочу собрать вот такое устройство http://www.transmic.net/gb89c2051.htm, но есть несколько но:
1. Для МК есть только исходник , а он похоже не доработан, покрайней мере у меня не получилось его откомпилировать.
2. Я в МК и прграммировании полный .
Может кто нибудь не сочтет за труд, посмотрит, что там не так.
Исходник http://www.transmic.net/fichiers/atmel/cdi8.zip

460. Kosta_GG, 10.05.2005 13:33
IgorT
c.10 INCLUDE 89C2051.mc
во-первых перед инклудом должен стоять доллар $INCLUDE 89C2051.mc
во-вторых, если компилятор заточен под 51, то тебе не нужен этот файл, можешь его закомментировать(поставь точку с запятой перед этой строкой ;INCLUDE 89C2051.mc)

с.39 с.51 с.55 с.63 с.76 перед числами начинающимися с буквы, ставится ноль, т.е. конструкции типа #FFh нужно заменить на #0FFh

с.26 с.71 Используется метка TIMER, она же описана как константа в с.12 :
timer EQU 38h ;preset value for timer interrupt (100µs @ 24MHz)
А для АСМ регистр не имеет значения, поэтому происходит конфликт объявления переменных... Необходимо поменять имя константы или метки...например:

AJMP TIMER ;TIMER interrupt routine
...
;************ Timer 0 Interrupt every 100µs
TIMER:

Заменить на :
AJMP I_TIMER ;TIMER interrupt routine
...
;************ Timer 0 Interrupt every 100µs
I_TIMER:

461. IgorT, 10.05.2005 14:05
Kosta_GG
Спасибо
Дома попробую

462. JE, 25.05.2005 22:31
А кто мучался с Fast AVR? Достал глюк, когда

a as word
b as word

a=250
b=a-100

сколько будет b? - правильно, 150.

а теперь
a=250
b=300-a

сколько теперь будет b? - оно будет -50! И этот минус ничем не выбъешь! Хочешь ставь "b=-b" будет -50, хочешь ставь "b=abs(b)", все равно будет минус.

Т.е. если перед переменной word, integer, float или long в какой-нибудь формуле пробежал минус (да хоть с=a-b, причем a=10000, b=10), результат всегда будет отрицательным, и уже никакой силой этот минус не вышебешь! Даже если записать его в byte или в word, они тоже станут отрицательными!

463. Зануда, 26.05.2005 01:41
цитата:
JE:

a=250
b=300-a


Может ты сначала приведешь оба числа к long?

По крайней мере, все, что больше 8 бит, требует немного более сложного алгоритма. Оттого и траблы.
Лично я, поскольку пишу на АСМе, всегда выполняю 16 разрядные операции, даже если один из операндов 8 разрядный.

464. Dismon, 26.05.2005 09:31
JE
Достал глюк, когда

А ты посмотри ассемблерный листинг, что компилятор выдает. Что там?

ЗЫ: Кстати, ты как смотриш значения? Симулятор? ЖТАГ? ЖКИ? УАРТ?

465. JE, 26.05.2005 12:01
Разобрался. JTAG и вообще прога в целом более менее работают (кроме float). А вот UART и GLCD если в вычислениях присутствовал знак "-", то результат всегда будет отображаться отрицательным.
Просто у меня прога большая - >2000 исходник, а BASCOMа рабочего не могу найтить...

466. Xradio, 30.05.2005 12:20
Столкнулся со странным эффектом... Сделал устройство на 2313, которое питается от 3-х ААА батареек. Пока питал от БП - вообще никаких проблем, но стоило подключить батарейки, как контроллер стал устойчиво зависать при включении.
Смущает, что и принудительный ресет не помогает! Не поверил было, но посмотрел осцилом, а кварц молчит...
Буфер питания в виде конденсатора 2200 мкф тоже не помогает... .
Непонятно - почему, но возбуждение кварца зависит от времени фронта Vcc... Проблема была в "неудачных" номиналах фазосдвигающих конденсаторов, которые пришлось применить для получения точной опорной частоты (кварц заводится на последовательном резонансе, что отличается от его маркировки на несколько килогерц)

467. Dikoy, 01.06.2005 12:12
to all
Объясните барану, как фьюзы настроить, если у меги8 внешний кварц на 16.00 МГц? То есть какие галки поставить?
Уже час даташит перечитываю, таблица только до 8 мгц...
Правда, есть загадочный бит СКОРТ, значение которого мне ясно мутновато....
Кстати, что он делает?

468. Dismon, 01.06.2005 14:59
Dikoy
Кстати, что он делает?

А он как раз и задает режим частоты более 8 МГц. Собственно расширяет частоный диапазон, как и сказано в даташите: This mode has a wide frequency range. Т.е. если у тебя керамика или кварц более 8 МГц, - его надо запрограммировать.
Что-то (наверно интуиция ) подсказывает, что для 16МГц
СКОРТ = programmed
CKSEL3...1 = unprogrammed

Т.е. установка фузов как для кварца 8МГц, за исключением того, что запрограммирован CKOPT.

469. Dikoy, 01.06.2005 15:25
Dismon


как и сказано в даташите:
Ну вот я тоже читал это, но помня, как однажды поигравшись с фьюзами мега вообще перестала запускаться, решил спросить

470. m16, 01.06.2005 15:34
Видимо все фузы CKSEL0...3 прошил нулями т.о. включил внешнее тактирование

471. ROC, 01.06.2005 15:45
цитата:
JE:
Разобрался. JTAG и вообще прога в целом более менее работают (кроме float). А вот UART и GLCD если в вычислениях присутствовал знак "-", то результат всегда будет отображаться отрицательным.
Просто у меня прога большая - >2000 исходник, а BASCOMа рабочего не могу найтить...
А что его искать? В Осле или в Муле, кому что удобнее - ссылок на Bascom навалом

472. yxo, 03.06.2005 01:29
Доброе время суток!
У меня такая проблема: стоит на плате контроллер мега128. Шиться должен по последовательному интерфейсу (RxD,TxD,SCLK,Reset). Но AVRstudio даже не может его увидеть и соответственно не читает сигнатуру . Когда пытаюсь ее читать смотрю осцилом на входе контроллера. CLK проходит, на RxD тоже поступают сигналы, но ответа на TxD не появляется. Такое ощущение, что контроллер просто мертв. Пробовал подавать синроимульсы отдельно на XTAL1, хотя кварц стоит- результат тот же. Питание в норме, на AVCC тоже все OK. Может кто сталкивался с такой проблемой?

473. An_private, 09.06.2005 15:31
похожая проблема.
не очень умелый паяльщик непропаял проводок, в результате на stk адаптер приходило непонятное плавающее напряжение.
причем все читалось, но после прошивки mega162 вообще не видится ничем.
даже никогда не подводивший avreal с подведенным на xtal1 clock'ом чип не видит в помойку или можно чем-то оживить?
или пытаться собрать параллельный программатор и посмотреть им? может кто схему посоветует?

474. m16, 09.06.2005 18:07
Ухо

1.Для проверки : MOSI->2 MISO->3 SCK->11 RES->20
2.У вас сброшен фуз SPIEN т.е. в нем прописана "1" .В таком случае нужен JTAGICE либо параллельный программатор.
У меня таким образом "умерла" мега16 - во время прошивки фаза пропала , JTAGом удалось "воскресить".

An_private
Лучше собрать JTAG собрать А кто-нибудь сделал AVR JTAG ICE? (http://forum.ixbt.com/topic.cgi?id=48:2805-8) а вот параллельный http://pol-sem.narod.ru/paraprog/paraprog.htm

475. An_private, 09.06.2005 18:45
m16 Понял. Спасибо. Наверное попробую.

476. Kosta_GG, 24.06.2005 11:27
А что народ может посоветовать из 16-разрядных микроконтроллеров, что-нить достаточно доступное и достаточно быстрое...

477. Vesel'chak U, 24.06.2005 12:14
Kosta_GG
Может сразу уже на 32 разряда перейти? Скоро будут доступны дешёвые ARM'ы от разных производителей. Пока есть LPC21xx (Philips), но довольно дорогие и надёжность не очень, но начинать осваивать можно.

478. Dismon, 24.06.2005 13:41
Kosta_GG

Можно использовать серию MSP430 от TI. Достаточно производительные, очень мало потребляющие, комплект из JTAG + 2 пробных контроллера (кажется msp430F149) стоит около 100$. Этот комплект используется у нас в качестве программатора, весьма удобно получается, я даже не задумываюсь, есть ли в природе отдельный програматор . Доступность - очень высокая.

479. Tahoe, 24.06.2005 15:42
Kosta_GG
Я бы смотрел на АРМы. А лучше сразу на какой-нить DSP простенький. Если не собираешься всю жизнь только TCP/IP на контроллере обрабатывать, то смотри на DSP. Это либо AD либо TI. Других считай что не существует в реальности ( Моторола даже не обсуждается ).

Dismon
MSP430 штука неплохая. Даже хорошая. Но два "но". Во-первых "вещь в себе". Т.е. например я не встречал 430-х с интерфейсом внешней памяти. А на 0,5-2 килослова не всегда хватит. Во-вторых не такой эффективный код на Си получается. Хотя вкусностей в нём безусловно много. Но ИМХО это уже "вчера". "Сегодня" - это АРМ.

480. Kosta_GG, 24.06.2005 17:22
Dismon
Tahoe
Vesel'chak U
Спасибо за первоначальные наводки....
Немножко поясню, пока у меня нет конкретной задачи для 16-бит контроллера, 8-битника 51-го вполне хватает (тем более их сейчас на любой вкус), но тенденции таковы, что сейчас все больше идет усложнение задач, и уже появляются задачи где нужна математика, 16разрядное умножение/деление, 32-разрядное сложение вычитание... Хоть 51-й и справляется еще, но времени много требует , "на лету" уже не всегда получается справляться, поэтому и хотелось прощупать как дела на рынке обстоят с контроллерами большей разрядности, пощупать их немного, чтоб потом не было неожиданностью...
Поэтому и попросил что-нить не особо экзотическое..

А то что у 430-го нет внешней памяти, это совсем не гуд..:-/

481. Chudik, 24.07.2005 00:34
А кто сможет подсказать навскидку - есть ли у 8051 программные прерывания?
Собстенно, ситуация следующая. Сейчас используется "старый добрый" 80188 (блин, как он меня за... ). Для вызова некоторых функций используются программные прерывания. Заказчики хотят использовать 8051 (привыкли). Можно ли использовать аналогичный механизм в 8051?

Добавление от 24.07.2005 06:49:

Нашёл сейчас информацию. У классического 8051 5 прерываний, биты которых можно установить и программно. Но мало их там. Есть ли 8051 с бОльшим количеством прерываний?
В принципе, есть другой подход - закинуть в ячейку памяти указатель на функцию и использовать этот указатель для вызова функции. В х86 с его Фон Неймановской архитектурой это возможно. Можно ли сделать то же в гарвардской архитектуре 8051?

482. Kosta_GG, 25.07.2005 15:47
Программных прерываний нет.
Да и классический 51 вроде уже почти не используется, в основном MCS-251. У него еще один таймер добавлен, и соответственно прерывание от него.
Плюс может быть еще прерывание от переферии (типа SPI, или ADC).... в зависимости от наличия оной.

Chudik
В принципе, есть другой подход - закинуть в ячейку памяти указатель на функцию и использовать этот указатель для вызова функции. В х86 с его Фон Неймановской архитектурой это возможно. Можно ли сделать то же в гарвардской архитектуре 8051?

Не знаю, правильно ли я тебя понял...Но как-то ради интереса попробовал сделать так, что-бы сразу после прерывания выполнялась определенная функция (независимо от того в какой момент произошло прерывание), причем чтоб выполнялась она не в прерывании, а в обычном режиме т.к. она длинная и не должна мешать вызовам других, более частых прерываний.
Собственно все сводилось к корректному добавлению в стек еще одного адреса возврата из прерывания, который как раз и указывал на адрес моей функции. т.е. после прерывания return происходил не туда, откуда программа ушла в прерывание, а по другому адресу... а потом уже оттуда шел возврат в исходное...
Просто у меня адрес доп. функции был константой, а тебе нужно брать его из определенной ячейки памяти....Т.е. как бы это все реально

483. Chudik, 25.07.2005 18:45
Kosta_GG
т.к. она длинная и не должна мешать вызовам других, более частых прерываний.
А разрешить внутри неё прерывания?

Но в принципе ты меня успокоил немного.

484. Leka, 25.07.2005 20:02
Xradio
Буфер питания в виде конденсатора 2200 мкф тоже не помогает... . Непонятно - почему, но возбуждение кварца зависит от времени фронта Vcc...
Буфер питания - в смысле постоянно подключен к батарейке, т.е. до выключателя питания?

485. Kosta_GG, 25.07.2005 23:20
Chudik
А разрешить внутри неё прерывания?
Собственно для этого все и затевалось... Если эту функцию использовать как функцию обработки прерывания, то все прерывания этого же приоритета будут аппаратно запрещены.. поэтому чтоб их разрешить пришлось делать такой изврат.
Я использовал эту конструкцию :

EXTRN CODE(Wait_ACK, PARALL_int)

CSEG AT 013h
jmp podstava


cseg
podstava:
inc SP ; сдвиг указателя стека для получения окна
inc SP ; сдвиг указателя стека для получения окна
push PSW ; сохранение PSW
mov PSW, #00 ; Установка 0-го банка регистров
push AR0 ; сохранение R0
push ACC ; сохранение Acc
mov A, SP ; пересылка в акк. указателя стека
add A, #-4 ;установка адреса окна
mov R0, A ; пересылка этого адреса в регистр
mov @R0, #LOW(Wait_ACK) ; подстава "левого" адреса возврата мл. байт
inc R0 ; переход на следующий адрес стека
mov @R0, #HIGH(Wait_ACK) ; подстава "левого" адреса возврата ст. байт
pop ACC ; восстановление Acc
pop AR0 ; восстановление R0
pop PSW ; восстановление PSW
lcall PARALL_int ; вызов процедуры обработки прерывания
reti ; выход из прерывания
end
Чехарда с регистрами, связана с тем, что командой РUSH нельзя загнать в стек константу (адрес нужной функции).
Если же ты заранее запишешь адрес функции в определенные ячейки памяти adr_hi, adr_lo то конструкция должна упроститься до смешной:

podstava:
push adr_lo ;
push adr_hi ;
lcall PARALL_int ; вызов процедуры обработки прерывания
reti ; выход из прерывания

И после обработчика прерывания, которого в принципе может и не быть, у тебя перескочит на адрес нужной функции, а после ее выполнения вернется в точку, где выполнялась основная программа в момент прихода прерывания

Добавление от 25.07.2005 23:37:

А вот я не додумался что проще было бы выделить одну ячейку памяти под адрес... и обошелся бы просто
podstava:
mov adr, #LOW(Wait_ACK)
push adr ;
mov adr, #HIGH(Wait_ACK)
push adr ;
lcall PARALL_int ; вызов процедуры обработки прерывания
reti ; выход из прерывания
Вот блин

486. Dokhtor, 31.07.2005 05:38
вопрос от новичка:

Какой микроконтроллер наиболее подходит для замены 16-битного счетчика с таймером?
Фактически нужен частотомер с диапазоном 0...200 кГц.

Смотрел имеющиеся схемы частотомеров на PIC16F84:
http://rf.atnn.ru/s2/digiscal.html
РАДИО 1, 2001, ст.21 "Частотомер на PIC-контроллере"

остался непонятным принцип измерения интервала времени

Насколько я понял после беглого прочтения документации к PIC16F84 - счетный регистр таймера инкрементируется _либо_ внешним _либо_ внутренним сигналом; получается, если таймер занят подсчетом внешних импульсов, то временной интервал остается отмерять не иначе как инструкциями процессора типа пустого цикла, а хотелось бы иметь отдельный таймер.

487. Chudik, 31.07.2005 07:04
Kosta_GG
не додумался что проще было бы выделить одну ячейку памяти под адрес... и обошелся бы просто
Угу, лет 10 назад у меня была та же проблема. Ну никак константа в стек не лезла

Dokhtor
Какой микроконтроллер наиболее подходит для замены 16-битного счетчика с таймером?
Практически любой, у которого есть 2 таймера: таймер с режимом гейта + таймер, который определяет время гейтирования.

остался непонятным принцип измерения интервала времени
1. Подсчёт внешних событий (фронтов импульсов входной частоты) за время, опредеяемое другим таймером.
2. Подсчёт внутренних тиков за время, определяемое внешним событием. В этом случае, вообще говоря, можно удовольствоваться одним таймером.

Для частоты лучше первый вариант, при этом длительность гейта ты можешь устанавливать сам. Скажем, для частоты 20 кГц тебе совсем нет необходимости ждать секунду, чтобы досчитать до 20000 (если тебе не нужна точность до 1 Гц, конечно ). Впрочем, если тебе потребуется бОльшая точность, всегда можно увеличить длительность гейта. И, кстати, микроконтроллер хорош тем, что даже с 16 разрядным внутренним счётчиком ты можешь реально сделать и 32 и 48 разрядов, лишь бы быстродействия контроллера хватило для того, чтобы отследить переполнение счётчика за период измеряемой частоты.

Второй вариант хорош для измерения длительности входного импульса. Только надо быть уверенным, что прийдёт вторая часть входного события

488. Dokhtor, 31.07.2005 16:58
Chudik
Спасибо за теорию, но новичок я - в м.контроллерах, на x86 с этими делами знаком; а сейчас задумал "убрать" в один чип м.контр-ра упомянутый счетчик и таймер, который на самом деле реализован программно на x86 из системного таймера PC, т.е. сейчас устройство такое: внешний счетчик запускается и останавливается из PC, и средствами PC же отмеряется временной интервал (который варьируется в зависимостиот задачи).

А вопрос был именно по функциональному составу м.контр-ров и их возможностям, а именно какой может быть принцип измерения интервала времени в приведенных схемах, или если разбить вопрос на составляющие:

1. в PIC16F84 действительно только один счетчик-таймер ?
2. как может быть реализован алгоритм отмера временного интервала в известных частотомерах на PIC16F84?
3. в схеме из РАДИО 1, 2001 входной сигнал идет на 3 и 6 выводы - на RA4/T0CKI и RB0/INT; зачем понадобилось подавать входной сигнал на RB0/INT? прерывания генерить - несерьезно т.к. входная частота 50 МГц.
4. в схеме http://rf.atnn.ru/s2/digiscal.html входной сигнал идет на 3 и 2 выводы - на RA4/T0CKI и RA3; зачем понадобилось подавать входной сигнал на RA3? ловить импульсы "на лету" опять-таки несерьезно.
5. в AVR сторожевой таймер (Watchdog Timer) - это то что надо в смысле отмера временных интервалов?

489. Chudik, 31.07.2005 20:50
Dokhtor
Спасибо за теорию, но новичок я - в м.контроллерах
Упс, извини Но напоминание/вспоминание теории (даже не теории, а принципа работы) зачастую полезно. Позволяет понять, что же тебе нужно от микроконтроллера и сделать правильный выбор

в PIC16F84 действительно только один счетчик-таймер ?
с Пиками не работал. Если в доке написано, что один, то так оно и есть

(Watchdog Timer) - это то что надо в смысле отмера временных интервалов?
Не. Это девайс, который при взведении ресетит твой микроконтроллер, если ты его вовремя не сбросишь. Это аппаратная примочка против некоторых горе-программистов, выпускающих программы, которые могут зависнуть. Ну и ещё полезно для контроллеров, работающих в условиях сильных помех.

зачем понадобилось подавать входной сигнал на RB0/INT?
зачем понадобилось подавать входной сигнал на RA3?
Очевидно, используется второй метод. Тем более, если таймер действительно один. Рискну предположить, что таймер отслеживает только один фронт сигнала. Соответственно, для обнаружения второго фронта используется второй вход. В первом случае - прерывание. Во втором программа должна отследить то, что таймер начал работать (т.е. не 0) и после этого опрашивать уровень сигнала на входе.
Использование прерывания мне представляется более разумным - контроллер может делать что-то ещё, а не просто тупо ожидать события, находясь в бесконечном цикле.

490. Dokhtor, 01.08.2005 02:26
Chudik
Очевидно, используется второй метод
этот метод я имел в виду, когда писал ловить импульсы "на лету", но однако кварц 4МГц, значит инструкции выполняются с частотой 1МГц, а как с такой частотой CPU поймать фронты сигнала 50МГц, - нереально IMHO (прерыванием или чтением порта - все равно не успеть), ведь на RB0/INT или RA3 подается исходный сигнал, т.е. без предделителя
поэтому, видать, все же используется первый метод, который требует отмерить промежуток времени, пока идет счет в регистре таймера. А чем его отмеряют при занятом таймере?..
кстати в соседней конфе разгадывают алгоритм часов, но там задача попроще - в смысле без внешнего сигнала:
Часы, 4 будильника и термостат на одном PIC16F84 (http://forum.ixbt.com/topic.cgi?id=48:4429)

491. Chudik, 01.08.2005 05:12
Dokhtor
а как с такой частотой CPU поймать фронты сигнала 50МГц, - нереально IMHO (прерыванием или чтением порта - все равно не успеть)
Ээээ, во-первых там написано - до 25 Мгц, а во вторых, как мне помнится, тебе Фактически нужен частотомер с диапазоном 0...200 кГц. Аппетит приходит во время еды?

Я не знаю, как там при работе на 4 МГц отлавливаются более скоростные сигналы. Посмотри спек, может там таймер стоит, который работает с существенно большей частотой, чем рабочая частота процессора. Я же говорю - с Пиками не работал. Может там есть какой хитрый режим у таймера типа стоит предварительный делитель, выход которого используется в качестве гейта для основного таймера. Собственно, вся работа с микроконтроллерами заключается во внимательном прочтении его спецификации и понимании, что из его периферии можно использовать для твоих целей. Ну и такая особенность, как ограничения памяти.

492. Dokhtor, 01.08.2005 10:57
Chudik
цитата:
тебе Фактически нужен частотомер с диапазоном 0...200 кГц.
Дык всегда хочется иметь полную отдачу от техники, в данном случае хочется чтобы точность была максимальной, а это даже для 200кГц будет достигаться только при использовании первого метода.
А если вторым методом мерить 200кГц процессором с частотой инструкций 1Мгц, иначе говоря интервал 5мс мерить с погрешностью 1мс, то в процентах погрешность будет 20% .

цитата:
Может там есть какой хитрый режим
я тоже это подозреваю; кстати в упомянутой соседней конфе говорят о подсчете количества вложенных прерываний (что, как видно, допускается в PIC) для отмера интервала времени; быть может что похожее и в частотомере
может кто из народа, работавшего с PIC объяснит

Однако пока что я был на распутье по пути в радиомагазин , но взглянув на таблицу ресурсов AVR, похоже определился, - два 8-битных таймера - это как правило, а то ещё и 16-битный.

посмотреть на время создания сообщений - фантастика , ладно - я, я сейчас - в "запое" изучения микроконтроллерного программирования

493. Dismon, 01.08.2005 16:05
Chudik
Я не знаю, как там при работе на 4 МГц отлавливаются более скоростные сигналы.

Ну, на вскидку, не глядя ссылку (лень, только что из отпуска вышел ), предполагаю стробоскопический эффект.

494. Chudik, 01.08.2005 18:23
Dismon
предполагаю стробоскопический эффект.
Стробоскопирование для измерения частоты? Это же не осциллоскоп.

Dokhtor
взглянув на таблицу ресурсов AVR, похоже определился, - два 8-битных таймера - это как правило, а то ещё и 16-битный.
Посмотри ещё на eZ8, если он у вас продаётся. Основное в нём то, что кроме приличной периферии он программируется и отлаживается через одни и те же 2 контакта с очень простым интерфейсом. Плюс, практически в любом из них, начиная чуть ли не с самого младшего, есть IrDa контроллер. Можно данные считывать в PDA. Или какие-то параметры в программе менять. Естественно, написав программку для PDA
А тут у некоторых есть валяющиеся без дела отладочные адптеры, полученные на халяву.

посмотреть на время создания сообщений - фантастика
Ты лучше посмотри на "Откуда" и тебе всё станет понятно


в упомянутой соседней конфе говорят о подсчете количества вложенных прерываний (что, как видно, допускается в PIC) для отмера интервала времени; быть может что похожее и в частотомере
Для этого надо точно знать, что прерывание выполнячется за строго определённое время независимо от того, что делается в текущий момент. А такое возможно в DSP, но не в обычных микроконтроллерах. Ну, не знаю...

Добавление от 01.08.2005 18:46:

Vesel'chak U
Пока есть LPC21xx (Philips), но довольно дорогие и надёжность не очень, но начинать осваивать можно.
А что значит "надёжность не очень"? Ты с ними уже поигрался?
А то тут надо переходить на что-нибудь с 80188. Заказчики хотят 8051 (всякие разновидности). Но то, что они используют, имеет 4к на программу и 1.2 к для данных. А у нас программа сейчас занимает 84к, предполагается, что займём ещё 16 к + часть заказчика около 16 + данные в ПЗУ/флэш на сегодня 32 к. ОЗУ - не меньше 8к (это на сегодня). 8051 с такими данными стоят больше 20 баксов. Надо что-то предложить заказчику. Один из кандидатов - eZ80, но там у меня с ним были проблемы. (не смог разобраться с его многочисленными конфигурациями памяти, хотя наверняка решаемо, надо только один раз хорошо разобраться). Как один из кандидатов мне понравились Филипковские АРМы. Смотрел и в сторону Атмелок, но там такие тулзы...

495. majorPAE, 01.08.2005 19:26
Dokhtor
Ну, во-первых тебе сюда (http://www.microchip.ru/lit/?mid=1x0) .
Если конкретнее то разделы 8,11...13. Все на русском.
Там, в описании режимов таймера обрати внимание на описание режима "захвата".
Во-вторых, "понюхавши" немножко ПИК-и, скажу сразу: не смотри на 16Ф84, смотри сразу на 16Ф628А. Он и дешевше, и возможностей гораздо больше(для твоего случая три таймера ). Описание его на русском по тойже ссылке. И еще там тоже есть форум, пошерсти его поиском, много ответов найдешь. Я также начинал года три назад...

496. LazyCamel, 02.08.2005 08:00
цитата:
Chudik:
Как один из кандидатов мне понравились Филипковские АРМы. Смотрел и в сторону Атмелок, но там такие тулзы...

Какие тулзы у ARM Атмелок, что по сравнению с Филипками они о-о-о.... ?

Ровно абсолютно тоже самое.

Тот же ослик IAR , те же Зеленые Горы, тотже АДС. Только тагет меняешь и все. Отлаживаются все точно также через стандартный ЖиТаг. ARMы счаз по кросплатформенности почти как 8051 становятся. Хоть филипс, хоть атмел, хоть самсунг какой-нибудь.

ЗЫ:
Между прочим, стоит например Атмеловское семейство SAM7S дешевле и работает в режиме MCU (в смысле управляемого ногодрыжества) с переферией эффективней и по крайней мере предсказуемей чем LPC.
У меня теперь две платформы для своих поделок остались - Мега48 для всего что должно стоить дешевле семечек и SAM7S для того что надо побыстрее и подороже.

497. Chudik, 02.08.2005 08:14
LazyCamel
Атмеловское семейство SAM7S дешевле и работает в режиме MCU (в смысле управляемого ногодрыжества) с переферией эффективней и по крайней мере предсказуемей чем LPC.
А как там насчёт встроенной памяти?

498. LazyCamel, 02.08.2005 10:11

http://www.at91.com/Pages/products/microcontroller/A…7S/at91sam7s.html

Вкрадце
SAM7S256
256-kbyte 30 MHz Flash Memory,
64-kbyte 0-Wait state SRAM

Остальные:
SAM7S128 - 1/2, т.е. 128/32.
SAM7S64 -1/4 т.е 64/16
SAM7S321 -1/8 т.е. 32/8

Все остальное(переферия, корпус, распиновка) полностью одинаковое.

499. Vesel'chak U, 02.08.2005 14:12
Chudik
А что значит "надёжность не очень"? Ты с ними уже поигрался?
Знакомый пощупал. Несколько штук ушли в даун с разными симптомами. Ядро Линуха работает.

500. Chudik, 02.08.2005 17:46
LazyCamel
SAM7S256
256-kbyte 30 MHz Flash Memory,
64-kbyte 0-Wait state SRAM

Ничего. Жаль, что нет 256/16.


Vesel'chak U
Ядро Линуха работает.
Моему шефу надо сказать - сразу заявит, что только это.

Несколько штук ушли в даун с разными симптомами.
У, тогда действительно надо подождать с Филипком.

501. Batmah, 02.08.2005 22:27
долго решался подключиться к обсуждению, очень обширная тема

SoKoL_ru
про биты защиты
если прицелиться ультрафиолетовым лазером в биты и стереть их - можно читать содержимое памяти программ . первые интел8051 считать было можно - 100%
, хитрым подключением внешней пзу.

моё имхо говорит что не атмел89s8252 для начала лучше, а at89c2051. у нее удобный корпус dip20 , питание 2.7-7вольт, компаратор и выходы, пригодные для подключения светодиодов непосредственно.
как учебную задачку можно взять измеритель электролитических кондеров,
по времени разряда от Ucc до Ux через транзистор и резистор R, ловить Ux компаратором и посчитать время. я такой агрегат сделал в связи с ремонтом БП,
конденсаторы имели от старости произвольную ёмкость , вот на коленке и сделал.
язык программирования всё-таки ассемблер, т.к. во что компилятор Си превратит
исходный текст , никому не известно точно. 2+2=RND случается .

502. Vesel'chak U, 06.08.2005 17:56
Batmah
во что компилятор Си превратит
исходный текст , никому не известно точно.

Очень даже известно. Достаточно листинг посмотреть. Ежели не использовать навороченных конструкций, то вполне адекватно получается.

503. Mura-vey, 10.08.2005 14:52
Не подскажете, как заставить работать Атмегу 128 на 16 мегагерцах. Использую кварц на 16 МГц, два кондёрчика по 22 пФ. Програмирую биты CKSEL 3..0 (все в "1"), активизирую бит СКОРТ. Любая конфигурация битов SUT не даёт результатов. Проц не запускается, даже если касаться рукой. Может втолкуете как быть?

504. Dismon, 10.08.2005 16:07
Mura-vey

Можно предположить, что у тебя Mega128L, которая свыше 8МГц не работает. Попробуй поменять кварц, поставив 8МГц или меньше, и если все заработает - значит так и есть. Если же и так не заработает - скорее всего просто дохлая мега попалась.

505. Batmah, 10.08.2005 16:14
Mura-vey
может просто атмегу или кварц сменить. она с другим кварцем работает ?

Vesel'chak U
это даже не тема по-моему для обсуждения , примерно как обсуждать какой лучше - китайский или чукотский . какой удобнее тебе , тот и хорош. всё-же писать на си , а потом что он в ассемблер перекроит снова исправлять , а потом опять компилить неправильно как-то - зачем из москвы в тулу через магадан летать ?

506. Mura-vey, 10.08.2005 16:57
Dismon Точно не "L", ща пойду куплю кварц на 8 МГц. А какая лучше коция SUT битов для совков кварцев?

507. DrAG0n, 10.08.2005 17:50
можно на отдельной AC04 сделать генератор и подать с него на X.. (которая вход внешней частоты) - даже от 20 может иногда завестись (Мега16 у меня заводилась от 24х - правда, использовать в критичной технике такое не стоит)

508. kir102, 10.08.2005 18:47
блин, никак не могу сделать вот что:

жмешь на кнопку больше чем 1 сек - просыпается контроллер и зажигает красный светодиод (три моргания по 0,5х0,5 сек, после чего светодиод горит). жмешь еще раз на кнопку (меньше чем 1 сек, но больше чем 50 мс /антидребезг/) - включается белый светодиод (просто загорается). теперь если еще раз "коротко" нажать - белый потухнет, а красный горит. снова коротко нажать - белый снова загорится. т.е. после того как схема включилась, короткие нажатия - включают/выключают белый. длинное нажатие при необходимости гасит белый и гасит красный (три моргания и погас).

ух... описал)))

подскажите, пожалуйста как (на чем основывать алгоритм) такое на пике написать? у меня почему-то работает абы-как...=/

навернякак что-то подобное (селекция короткое/длинное + антидребезг) уже у кого-то встречалась. может, расскажите?

p.s. забыл рассказать для чего программа - свет включать на велосипеде)))

509. Chudik, 10.08.2005 22:28
kir102
Есть такое понятие, как "конечный автомат" (state machine). Обычно рисуется в виде кружка с узлами состояний и условиями перехода от одного состояния к другому. У тебя классический случай. Найди, как это рисуется и, нарисовав такой автомат, поймёшь, как тебе написать программу

510. Zman, 10.08.2005 23:13
Chudik:

Есть такое понятие, как "конечный автомат" (state machine)

511. Dismon, 11.08.2005 08:43
Mura-vey
А какая лучше коция SUT

Да вроде как без разницы. У меня на стенде, с которым я щас работаю, стоит кварц 16.384 МГц (16 ровно под рукой не оказалось), те же кондеры 22 пф на нем, СКОРТ = 0(programmed), CKSEL3...1 = 1(unprogrammed). Я пробовал обе уставки Crystal Oscillator, fast rising power и Crystal Oscillator, slowly rising power[ для SUT и CKSEL из Table 9. Start-up Times for the Crystal Oscillator Clock Selection, однако никакой разницы, кроме разных задержек перед началом программы не заметил, остановился на Fast, т.е. SUT0=0(programmed), SUT1 и CKSEL0=1(unprogrammed)

Добавление от 11.08.2005 08:44:

Да, кстати, приведи полную маркировку меги, так, на всякий случай...

512. Mura-vey, 12.08.2005 10:02
Dismon
Маркировка: ATMEGA128-16AI. Серия, вроде, 0504I (или что ето?)
Купил кварц на 8Мгц, установил CKSEL в единицы, CKOPT=1, и мега пошла на помойку Подавал импульсы, другой кварц, ни фига.... Мертвая.
Причем уже с второй 128 мегой. Интересно, а скока раз можно FUSE биты перепрограммировать? А то я развлекался с комбинациями достаточно долго. Мож у них ресурс не как у FLASH. Или они там же храняться?
Ладно перепаяю и поробую полностью твои установки. Либо я где-то сильно туплю, либо брак. Сокрее первое, но......

513. Dismon, 12.08.2005 10:18
Mura-vey

Э... Погоди, ты каким программатором пользуешься? Я значения фузов приводил в терминологии атмела, у них 0=programmed, 1=unprogrammed. А если брать понипрог например, то там установленная галочка означает, что в фуз пишется 0. И если ты вдруг пользуешься поником, и поставил галочки на все CKSEL, считая, что пишешь единицы - то ты перевел мегу в режим работы от внешнего генератора. В других программах для прошивки все может быть наоборот.

ЗЫ: Судя по маркировке, эта мега рассчитана на 16МГц, так что должна была работать...

514. Mura-vey, 12.08.2005 17:16
Dismon
Прорамматор AS2. По-моему аргусофтовский. Там на вкладке программирования FUSE прямо написано соответсвие кнопочек и чего установленные значат (нажатая кнопка означает 0) так что там косяков нет. И я, тем более, подавал внешние ипульсы.... Все пофигу....

515. Dismon, 15.08.2005 08:14
Mura-vey

Гм. Процент брака не может быть таким высоким, чтобы вторая подряд мега себя так вела. Не можешь ли привести схему включения? Ну и заодно скрин от AS2, посмотреть как фузы расставлены. Кстати, если будешь запаивать новую мегу, попробуй ничего в нее не писать, а только считать фузы и флэшь. Если получится - буешь знать, что мега работала по крайней мере.

ЗЫ: Кстати, не используется ли в схеме внешний аппаратный вачдог типа ADM706?

Добавление от 15.08.2005 08:17:

ЗЫЫ: Хотя... щас внимательно перечитал

Помогите начать работать с микроконтроллерами., #512 (http://forum.ixbt.com/topic.cgi?id=48:1119:512#512)

из чего сделал вывод, что мега вроде как читалась, пока очередной раз не прошил фузы? Или я ошибаюсь?

516. joptpd, 15.08.2005 22:03
подскажите по етой схеме
http://www.freddospage.nl/s1057/1057s.gif
вывод 18
при захвате частоты там 1
как ето дело мониторе контролером

опрашивать в главном цикле while или же прерыванием?
с прерыванием я пока еще не разобрался
хочу прогу с нуля под авр 2313 написать с подключением разных модулей (типа еще один на 7 сегментах с регистрами)

и кто знаком с пиками
зачем там резисторы к земле подтянуты?
должны же к плюсу

517. Zman, 15.08.2005 22:31
joptpd:

зачем там резисторы к земле подтянуты? должны же к плюсу

вообще-то это по барабану куда подтягивать (по крайней мере для КМОП-ов)
просто полярность при нажатии будет обратная
принято - да, к плюсу... наверное исторически сложилось со времен ТТЛ

518. -=mozg=-, 16.08.2005 17:28
простите меня грешного, но сидю на ЖПРСе - так бы в поиск сходил.
После долгого перерыва наконец вернулся к изучению AVRок, теперь уже к практическому. Спаял на коленке stk-200 на 74HC244 (навесной монтаж форева! ), подключил к LPT, достал из шкафа БП от кворума на 5 стабилизированных вольт и включил. PonyProg - молчит. Uniprof c avr.nikolaew.org - пишет "МК не откликнулся". Хы.... последняя надежда - встроенный в CodeVision AVR программатор.
Барабанная дробь.... Read Signature ... Intel Pentium 4 HT! (шутка )
Наконец-то вижу желанную надпись "ATTiny26 (L)".
Затем - стандартные пионерские издевательства, запись ника в EEPROM и матерных стишков во флэш, выкл-вкл, чтение - всё осталось! Стирание - чисто!

Затем - первая программка. Логический пробник на PB7 - будем ногой дрыгать. 10 минут на С, compile, make ... Можно шить!
Хм... Program, Reset chip, Compare flash - всё ок. Но не работает. Думаем, думаем, думаем..... точно - про клок забыл! Но веть у нас там встроенный R-C есть!
Открываем даташит, глядим... для встроенного генератора нужны PLLCK=1, CKSEL=0100..0001. Делаем... первую ошибку - я даже не догадался Read fuse bits. Итак, выбираем 4 Мгц, CKSEL=0011, ставим галку на PLLCK, Program fuse bits.
С мыслью "ща проверим!" делаю Read fuse bits и ... ОБЛОМИЩЕ! опаньки.... read flash - ошибка! read signature - ошибка!!! тыкс, ребут по питанию - всё то же.
Углубляемся в даташит. Читаем - The minimum low and high periods for the serial clock (SCK) input are defined as follows: > 2 CPU clock cycles for fck < 12 MHz. ставим Delay Multiplier в настройках с 1 на 10 - то же самое, ошибка. 25- ошибка. 99 - ошибка...

Итак, вопрос: что проще - купить ещё один Tiny26 или сппять параллельный программатор? И, если есть возможность - ткните носом прямо в схемку, и ещё в софтинку, и ещё денег дайте.... не, это уже я разошёлся. Просто интернета халявного нет в связи с больничным, а руки до конца недели хочется занять полезным ...

З.Ы.: пришло в голову , что я мог ткнуть на радостях CKSEL=1100 вместо 0011, а это - внешний кварц 0.9 ... 3 Мгц. Хм... заодно не подскажете, какой в мышах резонатор - есть тут один, надо бы с ним проверить.

Всем заранее огромное спасибо, даже за то что прочитали мои бредни - я тут с температурой сижу.

519. Tahoe, 17.08.2005 03:37
-=mozg=-
очно - про клок забыл!
Делаем... первую ошибку - я даже не догадался Read fuse bits.
А зачем париться? Атмелы идут с завода с установлеными фьюзми: RC-генератор, 1 МГц. Так что по-первости просто ничего не трогай.

Добавление от 17.08.2005 03:39:

какой в мышах резонатор
А на нём разве циферок никаких нет? Ну там 4, или 6, или ещё какой... Что будет скорее всего означать мегагерцы.

Добавление от 17.08.2005 03:42:

А вообще, начни с этого программатора: http://ln.com.ua/~real/avreal/
Потому что в нём сложно запутаться индивидууму, который в состоянии состряпать make.

520. -=mozg=-, 17.08.2005 08:56
А вообще, начни с этого программатора: http://ln.com.ua/~real/avreal/
Схема именно оттуда

А на нём разве циферок никаких нет?
KDS60 есть. 6 МГц?

Атмелы идут с завода с установлеными фьюзми: RC-генератор, 1 МГц. Так что по-первости просто ничего не трогай.
Золотые слова-"ничего не трогай"!

Лан, буду пробовать керамику прикручивать - всё-таки с CKSEL вроде перепутал. Хотя... если подать на XTAL1 простой меандр, а на XTAL2 - его же, но проинвертированный - заведётся? (вроде видел где-то такую схемку, но могу ошибаться)

521. LazyCamel, 17.08.2005 09:32
-=mozg=-

Вообще-то в описаловке Аврила есть то, как заводить МК от дрыгающего ногою лпт-порта.
Ключи посмотри внимательно.

522. -=mozg=-, 17.08.2005 09:37
Урра, завёлся с кварцем! Show must go on!

Добавление от 17.08.2005 09:49:

Вообще-то в описаловке Аврила есть то, как заводить МК от дрыгающего ногою лпт-порта.
-o0 который? Не, со светодиодиком красивее!
И я пока CV AVR мучаю, там GUI для ламеров.

Добавление от 17.08.2005 10:35:

Н-дя... читать зато начал с ошибками, выглядит как на аттаче. Сигнатура - и та через раз правильно приходит. С таймингами игрался - ситуация не изменяется. А для avreal урезанный набор дров для ЛПТ не ставится, а полный слить пока нет возможности.

Хотя, навесной монтаж программатора не есть гут, отсутствие конденсаторов по питанию-тоже. Надо будет по уму переделать, и засунуть всё в корпус DB-25. Возвращать фьюзы в старое положение, да и вообще что-либо шить страшно при такой стабильности.

К сообщению приложены файлы: 1.png, 635x399, 16Кb

523. Mura-vey, 17.08.2005 14:06
Dismon
Вачдогов нету. Ресет вообще болтается в воздухе. После устанолвки онных фьзов, атмега (с кварцем на 8 МГц) перестала подавать признаки жизни.

К сообщению приложены файлы: 1.jpg, 568x397, 47Кb

524. Vesel'chak U, 17.08.2005 15:16
Кто нибудь пробовал к Меге прицеплять LM76 (датчик температуры)? Какой-то бред - один раз температуру считывает, а потом никак, а иногда даже после включения сразу ничего не читает.

Batmah
какой удобнее тебе , тот и хорош. всё-же писать на си , а потом что он в ассемблер перекроит снова исправлять , а потом опять компилить неправильно как-то - зачем из москвы в тулу через магадан летать ?
Вопрос был вообще не в этом, а в том, можно ли посмотреть что будет делать компилятор.

525. Dismon, 17.08.2005 16:32
Mura-vey
Ресет вообще болтается в воздухе.

Это совсем не правильно. Есть такое простое правило - входы болтаться в воздухе не должны. А RESET - это вход. Подтяни его к +5В через резистор 10К.

После устанолвки онных фьзов

Э... Ты зачем фузы BOOTSZ запрограммировал? Их надо отжать. А так у тебя (если память не подводит), мега переходит в режим загрузчика. Вот как у меня выглядят фузы для кристалла 7.3728 Мгц:

573x303, 33,5Kb


Галочка означает, что фуз запрограммирован, т.е. равен 0.

ЗЫ: Если и так не заработает, всеже запости схему включения меги.

К сообщению приложены файлы: 1.jpg, 573x303, 34Кb

526. knock about, 18.08.2005 06:14
Только начал работать с АВРами. Пока у меня все в теории. Для разработки использую AVR Studio 4.0 и VM Lab.

Возможно глупый вопрос – как организовать SPI интерфейс и как это все будет работать, если кварц будет внешний и рассчитан на частоту от 12 до 16 МГц.
На платке хотелось бы иметь колодочку и время от времени менять прошивки.
Прошивать собираюсь адаптером на 74HC244 STK200/300 через LPT порт компьютера. Ситуация осложняется еще и тем, что некоторые из SPI ножек используются как входы (при работе программы).
Вопрос как тактировать кристалл (Мега8, Тини26) во время прошивки? Через программатор или от кварца? Где-то читал, что лучше прошивать при частоте <=4МГц, а кварц перепаивать не хочется, да и конфигурация фюзов под частоты более 8 МГц отличается.

527. LazyCamel, 18.08.2005 07:24
-=mozg=-

как вариант посмотри "avrdude". Порт с линюха, заводится почти на любой чип и на любой вариант программатора. Под виндой работает со стандартным IO-порт врапером который ставит для себя половина программ. У меня он шел в комплекте с GCC-AVR.

ЗЫ: Но все - командная строка, максимум - простенький интерфейс..

528. -=mozg=-, 18.08.2005 09:05
LazyCamel
Да тут не софтовая проблема - тут программатор ловит все помехи (+ рядом сотик с ЖПРС-сессией) + я полез в фьюзы не разобравшись. Кстати я их ещё раз запорол, CKSEL шилось 0001, а verifнулось 0111 , и после снятия RESET я снова потерял АВРку. Короче, делаю нормальный программатор вместо этого позора, иду за новой атмелкой и начинаю сначала.

knock about
и как это все будет работать, если кварц будет внешний и рассчитан на частоту от 12 до 16 МГц.
Нормально будет. Сначала со встоенным R-C прошиваешь фьюзы для внешнего кристалла, а потом играешься дальше. У тебя LPT всё равно не даст такой частоты, чтобы на SPI были импульсы меньше
цитата:
3 CPU clock cycles for fck ≥ 12 MHz
Ситуация осложняется еще и тем, что некоторые из SPI ножек используются как входы (при работе программы).
А какая разница? ну цепляй выходы от схемеы к ним через резисторы ом по 500, а от STK - напрямую.

529. knock about, 18.08.2005 16:14
-=mozg=-
Спасибо, я так понял, что сначала нужно прошить фюзы от встроенного генератора, а уже потом впаивать кварц и пару конденсаторов так? Смогу ли я потом перепрошивать кристал уже на работающей плате? Нужно ли тактировать кристал от ЛПТ в первый раз, или достаточно внутреннего генератора?

530. lmaks, 18.08.2005 16:35
knock about

Абсолютно не вижу никаких прблем. Всегда запаиваю кварц сразу. После входа в режим программирования устнавливаю Fuse для работы от внешнего кварца, а потом прошиваю Flash. На плате маленький разъемчик- для перепрограммирования. Единственно всегда ставлю коммутатор. который отключает SPI цепи от всего остального при программировании. 4053 - достаточно дешево

531. -=mozg=-, 18.08.2005 17:00
knock about
что сначала нужно прошить фюзы от встроенного генератора, а уже потом впаивать кварц и пару конденсаторов

Сразу всё паяй, пока не скажешь атмелке, что нужно кварц использовать - ей всё равно что на ногах висит. Да и иногда отлаживать приятнее на меньшей скорости.

Нужно ли тактировать кристал от ЛПТ в первый раз
А сможешь запустить нулёвый чип от внешнего клока НЕ ТРОГАЯ ФЬЮЗЫ?
Тактирование от LPT - уже немного экзотика.

lmaks
4053 - достаточно дешево
Не столько дёшево, сколько красиво и правильно.

532. knock about, 18.08.2005 17:24
-=mozg=-
А сможешь запустить нулёвый чип от внешнего клока НЕ ТРОГАЯ ФЬЮЗЫ?
Стормозил, с кем не бывает.

533. lmaks, 18.08.2005 18:19
-=mozg=-

ей всё равно что на ногах висит. Да и иногда отлаживать приятнее на меньшей скорости.

Вот у меня платы бракованные попались - коротил конденсатор кварца на +5в.
Так процессор вовсе не запускался - даже signature не чиаталась. Хотел уже процессоры перепаивать. (10 штук).
Так что не совсем все равно. (Естественно Fuses - сновья стояли на внутреннем генераторе - я до них просто добраться не мог)

534. -=mozg=-, 18.08.2005 23:22
Вот у меня платы бракованные попались - коротил конденсатор кварца на +5в.
Так процессор вовсе не запускался

А AVRка какая была? Там же обычно простые входы портов висят вроде, если кварц not used...

коротил конденсатор кварца на +5в.
Это тот конденсатор, который на землю идёт?

535. lmaks, 19.08.2005 12:29
-=mozg=-
Mega 128.
Конденсатор который на землю - но коротил естественно не питание на землю.
Но кто-его знает, может еще чего было.

536. joptpd, 24.08.2005 00:19
назрел вопрос еще по авр
надо сделать индикацию на 3 разряда и самый левый 4й должен гореть 1 или совсем ничего
ну как в фм приемниках
на компе ето работает
там 3 регистра с последовательной загрузкой включены последовательно
все работает

вопрос вот в чем
где мне расположить даные для цифр?
тоесть могу ли я тупо создать масив на 10 елементов или же тут надо какую то память из контролера использовать

знаю че там есть 128бит флеша куда можно ложить настройки

а как с даными

вопрос возник в результате просмотра кода по работе с жк индикатором
где сохранен масив во флеш памяти

/* table for the user defined character
arrow that points to the top right corner */
flash byte char0[8]={
0b0000000,
0b0001111,
0b0000011,
0b0000101,
0b0001001,
0b0010000,
0b0100000,

0b1000000};

типа стрелка указывает вверх вправо

537. Xradio, 24.08.2005 10:24
joptpd
Здесь тоже последовательно-загружаемый регистр (3шт.)? А индикаторы какие, 7seg. LED?
Десятичные числа можно хранить в четырёх отдельных регистрах - "буфер индикации". Хотя "упакованный формат" позволит хранить число 1999 в двух регистрах (макс. 65535).
Далее создаётся "таблица индикации" .db В которой находятся байты соответствия мнемоники цифр и топологии их разводки на разряды регистров. Например, погашенный, с общим анодом, индикатор, это все 1, значит байт выглядит как 11111111b, и в таблице будет на 10 месте (после всех цифр), а цифра 8 - все "0" 00000000b, в таблице на 8 месте. (это независимо от разводки. бит запятой не учитываем) Другие цифры пересчитываются соответственно нужным сегментам.
Таблица .db адресуется Z регистром
Вот кусочек для примера.
код:

ChiftDS:
ldi ZH,high(tabDisp*2)
ldi ZL,low(tabDisp*2) ; загружаем в Z 2 байтный адрес начала таблицы
add ZL, r16 ; в R16 уже лежит выводимая цифра, складываем с
; адресом начала табл.
lpm ;получаем данные
mov r16, r0
ldi r17, 8 ; r17 - счётчик сдвигаемых битов
loopchiftDS:
clc ; стираем тайдом
rol r16 ; сдвигаем в перенос
brcs wr1S
cbi PORTB,4 ;Data displ
rjmp clkDS
wr1S: sbi PORTB,4 ;
clkDS:sbi PORTB,5 ; CLK displ
cbi PORTB,5 ;
dec r17 ;
brne loopchiftDS ;
ret ; Вернулись из процедуры вывода в 74HC164 одной цифры,
;загружаем в r16 следующую.
tabDisp:
.db $20,$7D,$12,$18,$4C,$88,$80,$3C,$0,$8,$FF
;таблицу надо прописывать в начале программы или директивой .org в конце,
;но так чтобы начиналась с "круглого" сегмента памяти. (чтобы не
;переполнился ZL при сложении)

Чертово форматирование не получается.

538. VBKesha, 24.08.2005 10:52
Разъясните пожалуйста ситуацию есть ATMega8, у неё нога PC6 и нога RESET совмещены, есть FUSE бит с именем RSTDISBL, он отвечает за то чем является наго номер 1 PC6 или RESET. Вот меня интересует вопрос если я прошью этот FUSE смогу ли я после этого прошивать чип по SPI при помощи адаптера из 5 проводов на LPT порт.

И еще вопрос встречал ли кто ни будь информацию о подключении стандартной PS/2 мыши/клавиатуры к микроконтроллерам?

539. joptpd, 24.08.2005 19:23
Xradio
ты меня не понял
по моей правда причине
писал просто уже ночью

короче я буду писать тока на си в codevision
в асемблере я ниче не понимаю ваще
вопрос в том куда записывать байты для цифр

есть срам
есть флеш и епром

для авров че ето за типы памяти?
из примера я понял че надо во флеш писать

срам ето аналог рам памяти в компе
а флеш ето типа жесткий диск?
тогда почему бы и не записать все ето в флеш?

а про байты для индикатора я уже придумал
1 индикатор с него 2 сегмента на единицу
соединить вместе

она либо горит либо нет
и подключена к регистру десятков мгц

у регистра единиц мгц точка горит всегда и подключена просто к +5в
етот свободный 8й выход будет управлять включением стереокодера
и еще одна свободная точка остаеца у регистра сотых долей мгц
ее хз куда приделать
можно управлять питание выходного усилителя

короче выходит мне надо 10 байт под цифры и 3 маски для точек


и ваще
в какой памяти че надо хранить и че можно хранить в другом типе памяти?

540. Tahoe, 24.08.2005 20:26
VBKesha
если я прошью этот FUSE смогу ли я после этого прошивать чип по SPI при помощи адаптера из 5 проводов на LPT порт.
Нет, не сможешь. Только параллельным программатором лечится. Потому осторожнее с этим фьюзом.

Добавление от 24.08.2005 20:29:

joptpd
В отличии от привычного писюка, у АВРа гарвардская архитектура. Т.е. память программ и память данных - это разные вещи, никак не пересекающиеся между собой. В отличии от писюка, где всё смешано в одну кучу - и данные и программный код.

541. LazyCamel, 25.08.2005 07:37
VBKesha

Не знаю как на 8-ой меге, а на 48-ой ты по SPI этот фуз просто не запрограмишь. Защита от дурака так сказать.

По поводу PS/2. Где то было в
www.Atmel.com - AVR Application Notes.
Но на ангельском.

542. Zman, 25.08.2005 12:30
VBKesha:
букварь по клаве (http://www.beyondlogic.org/keyboard/keybrd.htm)

543. joptpd, 28.08.2005 00:15
еще такой вопрос
щас я зарылся поглубже
кто может обяснить простым зыком
че за буквы такие возле полей ввода текста

не я понимаю че ето регистры таймера
но зачем столько?
даташит читал
ниче не понял

desired value типа значение в герцах о переполнении таймера
таймер сей нужен для того чеб обрабатывать какое то событие через определеные равные промежутки
еще в програмировании на дельфи видел пример считывания с лпт и там таймер тож был

правильно я понял?

дальше записывая какие то байты в ети регистры мы ето дело определяем
точней компилятор както там вычисляет

в иссавр он ето делает хорошо в отличии от кодевижина
но в последнем зато есть всякие штуки типа и2с жк микролан и прочее и я его выбрал

теперь мне надо знать почему когда я выбираю коефициент деления
значения регистров меняюца
но выходная частота таймера остаеца

че происходит то?
зачем тогда разный коефициент деления?
где есть методика ращета етих значений?

К сообщению приложены файлы: 1.gif, 520x432, 31Кb

544. 'Vlad', 28.08.2005 08:10
Вопрос по AVR, в частности, по AT90S2313.

В регистре управления прерыванием MCUCR биты ISC01 и ISC00 отвечают за то, каким событием на входе INT0 вызывается прерывание, а именно: 00 - низким уровнем, 10 - переходом из 1 в 0, 11 - переходом из 0 в 1.

Предположим, что в регистре биты установлены в 11. Если на INT0 вход поступает последовательность импульсов, то каждое новое прерывание происходит по фронту. А если мне нужно, чтобы первое прерывание произошло по фронту, а второе - по спаду, третье - снова по фронту, и т.д.? Могу ли я при обработке прерывания инвертировать бит ISC0 для получения необходимого результата? Правильно ли меня поймет контроллер? Чем может быть чреват такой трюк? Обязательно ли в этом случае перед сменой данных в MCUCR запрещать прерывание, а после модификации - возобновлять?

545. Shinen, 29.08.2005 00:20
'Vlad'
Могу ли я при обработке прерывания инвертировать бит ISC0 для получения необходимого результата
можешь

546. Alexandr Iz, 29.08.2005 13:05
joptpd

теперь мне надо знать почему когда я выбираю коефициент деления
значения регистров меняюца
но выходная частота таймера остаеца


Fпрерывания = Fclk / прескаллер / значение OCR
соответственно, значение в регистре меняется по закону математики в зависимости от прескаллера.
а нужен он для того что бы можно было получить частоту прерывания 1 Гц при кварце в 4 МГц, к примеру...

Добавление от 29.08.2005 13:11:

'Vlad'

Обязательно ли в этом случае перед сменой данных в MCUCR запрещать прерывание, а после модификации - возобновлять?

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

547. Андрей Осипов, 29.08.2005 13:44
По поводу освоения AT89S8252 -

- я тут выкладываю схемы и программы для начального освоения.
У меня много Си программ ,обслуживающих простые устройства для 8051
от разрабортчика платы.
(Правда с КИТом ,но это не основное (для меня).
Нужна помощь от начинающих - вопросы.

http://x4000.15ru.net/viewtopic.php?p=66#66

Я сам - использовал ассемблер + PLM-51 + ДОС.
Очень простой и прозрачный язык, все рабатает под ДОСом.
ДОС для работы с "железом" - самое то...
У меня стоит Мульти едит 7.
Их под него работаю с ассемблером 8051, PLM-51 и Си - 51
Также AVR - ассемблер и Си.

В этой ветке - я могу поделится своими программами
(у меня Atmel 8252 - клон 8051, управляет с\моей студийной фото-вспышкой на 400 дж.)
Схема и программы- на сайте.
Программы на ассемблере 8051, например , обслуживании I2C.
Связь РС и 8051 по RS232 и др....

http://www.osipoff.ru/modules.php?op=modload&nam…rum=1&start=0

548. knock about, 29.08.2005 22:04
А в чем можно отладить программу, если в устройстве более одного (4) АВРа?

549. lmaks, 29.08.2005 23:18
knock about
Программу все равно надо отлаживать по одной.
А так вообще покупаешь 4 JTAG ну или 2 как минимум. И на двух компах отлаживаешь в реальном времени. Просто класс.

550. knock about, 29.08.2005 23:35
lmaks
Два компа не проблема, а вот про минимум 2 JTAG можно поподробнее, и какая программа позволяет это делать? Сейчас для отладки пользуюсь VMLab.
АВРы будут связаны по USART.

551. VBKesha, 30.08.2005 00:23
knock about
Недавно обсуждали Proteus в нём вполне можно.

552. lmaks, 30.08.2005 00:25
knock about
JTAG это внутрисхемный отладчик стоит от 90$ (Россия) до 350$ (Atmel).
Отлаживаю в Studio. Можно в эмуляторе - но рельно большие программки отлаживаются в железе -посредством JTAG. Т.е. при помощи этой штуковины процессор виден изнутри. Все регистры, выполнение в пошаговом режиме ну и т.д.
А если два процессора то оба подключаются через свой JTAG - на свой компьютер на Studio. И задача намного упрощается. Я так полудплексный интерфейс между двумя процессорами отлаживал.

553. knock about, 30.08.2005 16:02
VBKesha
Огромное спасибо. По описанию вроде то, что нужно.

554. joptpd, 04.09.2005 04:43
решил попробовать поработать с юарт
где я туплю?

код:
Chip type           : AT90S2313
Clock frequency : 3,686400 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/

#include <90s2313.h>

#define RXB8 1
#define TXB8 0
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// UART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on UART Receiver buffer overflow
bit rx_buffer_overflow;

// UART Receiver interrupt service routine
interrupt [UART_RXC] void uart_rx_isr(void)
{
char status,data;
status=USR;
data=UDR;
if ((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the UART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// UART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

// UART Transmitter interrupt service routine
interrupt [UART_TXC] void uart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the UART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((USR & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index]=c;
if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
TCNT0 = 0xB8; //set count
[b]тут мой код[/b]
switch (getchar()) {
case '0': PORTB.0=1;
break;

default : PORTB=0x00;
};
[b]конец тупого кода[/b]
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

//TIMER0 initialize - prescale:1024
// desired value: 20mSec
// actual value: 20,000mSec (0,0%)
TCCR0 = 0x00; //stop timer
TCNT0 = 0xB8; //set count
TCCR0 = 0x05; //start timer

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1 output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;

// UART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// UART Receiver: On
// UART Transmitter: On
// UART Baud rate: 9600
UCR=0xD8;
UBRR=0x17;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here
PORTB=0x00;
[b]putchar('a');[/b]
};
}


я включил прерывание по рх и тх с буфером в 8 байт
прога должна делать следущее

при приеме аски от 0 до 7 зажигать светодиод соответствующий
тока я прогу сократил до 1 диода

но ниче не работает в протеусе

куда нужно писать мой код и как сконфигурировать мой таймер?
таймер вроде на 20мс поставлен

555. DrAG0n, 04.09.2005 18:55
фьюзы правильно прожег? Он точно кварц использует? Попробуй посимулировать на VMLABе. (программу смотрел невнимательно)
Что там за си, который после инклюда требует объявления RXC и UDRE? Они ж в io2313.h должны быть...

Очень советую на WinAVR перейти. Неонил советовал - я попробовал - мне понравилось.

556. joptpd, 05.09.2005 00:23
DrAG0n
я пользуюсь кодевижыном
там есть куча полезных функций
еще есть исс авр
там можно нормально конфигурить таймер
задавать время или частоту когда он сработает
читал заметки кого то
он их вместе использует

а винавр есть
я там хз че и куда
мой знакомый его юзает
но там гимор с юартом

например в платных компиляторах передача одного символа идет через putchar
а в бесплатном хз че там они наделали
ваще не стороник студенческого софта коим являеца опенсорс

к тому же я тогда пару недель назад начал со всем ети разбираца
да и програмер с меня никудышны
ето несмотря на то че я прошел путь от машиных кодов до скриптовых языков

557. Dismon, 05.09.2005 08:38
joptpd
еще есть исс авр
там можно нормально конфигурить таймер
задавать время или частоту когда он сработает


У каждого компилятора есть свои тараканы. Например ИЦЦ, которым я пользуюсь (версия 6.31а) весьма своеобразно работает с плавающей точкой. Посмотри скриншот. Если он такое делает при простом присвоении, мне даже страшно подумать, что он может сотворить при вычислениях. Ладно это бы только в аврстудио сказывалось, дык на лцд дисплей то же самое выводит. Тем не менее, я от ИЦЦ отказаться не могу, так как там так легко делаются ассемблерные встаки (без них временами никак) в теле подпрограмм, в отличии от того-же иара...

615x224, 26,9Kb

К сообщению приложены файлы: 1.jpg, 615x224, 27Кb

558. Vesel'chak U, 05.09.2005 11:41
Dismon
Это нормально - ошибка округления. В hex это будет 0x18.(3), поэтому точное преобразование невозможно.

559. DrAG0n, 05.09.2005 12:08
я начинал с ICC; ImageCraft не пробовал. WinAVR понравился больше всех:
1) много общего с Linux+gcc
2) не надо напрягаться с кряками и вообще с нелицензионщиной
3) есть основания надеяться на поддержку и реализацию всего нового в С
4) очень хорошо интегрируется с VMLAB
5) то, что нужно самостоятельно писать putchar и getchar - это к лучшему. Кода там на 4 строчки - чтобы повторить небуферизированную функциональность "коммерческих" - ошибки в них видны сразу. Зато можно чуть модифицировать и сделать, скажем, буферы по 16 символов на прием и передачу - и программу переписывать не надо (конечно, Replace all сильно поможет, но все-таки...)

560. Dismon, 05.09.2005 12:27
Vesel'chak U
Это нормально - ошибка округления.

Тем не менее иар такой фигней не страдает. И кстати говоря, float ведь плавающая точка, а не фиксированая, т.е. число хранится в виде мантиса/порядок. И мне сложно поверить, что есть какие-то проблемы округления при присвоении переменной значения 242^-1.

Добавление от 05.09.2005 13:11:

Собственно эта ошибка у меня вылезла так: написал я программу на иаре для девайса на основе MSP430. Там для индикации использовались 7-сегментные индикаторы, надо было температуру отображать с точностью до десятых, и с такой же точностью задавать граничные значения. Я прогу написал, девайс отправился заказчикам. Следующим проектом мне дали девайс, в котором температура измерялась/задавалась с такой же точностью, но на основе мега128, так как там большая программа предполагается. Каково же было мое удивление, когда я увидел отсутсвующие десятые на индикаторах (я умножал float на 10, откидывал дробный остаток, и выводил на индикаторы целое число, отделяя запятой один знак). Стал разбираться и собственно обнаружил такую пакость у имэйдж крафт.

561. 40inD, 06.09.2005 14:10
Мне нужно одновременно измерять длительность 2х импульсов, приходящих на 2 разных пина контроллера. Как мне это реализовать? Импульсы идут постоянно, изменяется толкьо их длительность от 1 до 2х мс.

562. Xradio, 06.09.2005 14:47
40inD
На одном кристалле imho только с потерей точности...
Лучше применить 4 мелких и опрашивать данные из них пятым контроллером.

563. 40inD, 06.09.2005 15:03
Мне нужно обрабатывать 2 ШИМ сигнала идущих с приемника стандартного радиоуправления. Период 20мс. ЯXradio
По i2c?
Какой мелкий контроллер можно применить и 2мя прерываниями тогда?

564. Xradio, 06.09.2005 15:18
40inD
Уверенно не подскажу - какой именно, всё зависит от требуемого временнОго разрешения и оговоренных ценовых рамок проекта. Интерфейсы МК описаны в даташитах и аппнотах.

Добавление от 06.09.2005 15:22:

40inD
А разве их нужно обрабатывать МК? Насколько я себе представляю, эти ШИМ сигналы напрямую управляют сервомашинками? Или это для других целей?

565. 40inD, 06.09.2005 15:35
Я хочу не напрямую управлять сервомашинками, через контроллер 4-мя двигателями.

566. Xradio, 06.09.2005 15:41
40inD
Может быть тогда имеет смысл передавать не 4х канальный ШИМ, а непосредственные данные?

567. 40inD, 06.09.2005 15:49
Нет, в моей ситуации очень подходит именно ШИМ с радиоуправления.
Хотя тут мне предложили изменение, так что требования упростились. Нужно одновременно измерять 2 канала, а не 4. А остальные 2 пойдут и правда сразу на сервы.

568. Vesel'chak U, 06.09.2005 17:25
Dismon
Тем не менее иар такой фигней не страдает.
У него другая фигня, похоже округляет в меньшую сторону. Мне в одной программе пришлось добавлять 0.0001, чтобы правильно показывать.

И мне сложно поверить, что есть какие-то проблемы округления при присвоении переменной значения 242^-1.
У него в памяти всё хранится в двоичном виде, поэтому получается бесконечная дробь (как я и написал - 0.316 в периоде).

569. knock about, 06.09.2005 18:20
40inD
Уточнение первое - эти два импульса никигда не пересекутся, так? Т.е. можно просто завести их через диоды на одно прерывание. Плюс завести их на два входа микроконтроллера. Так можно сделать хоть со всеми сигналами с приемника.

В принципе можно вообще обойтись без прерывания. Я не знаю, насколько серьезной (большой) будет другая часть программы. Можно просто опрашивать входные сигналы в бесконечном цикле. При частоте кварца 12.8МГц и длине цикла 50 тиков точнось будет 1мс/256 = 0.0039мс, что составляет 0.4% от длительности контрольного(значащей части) импульса 1.5+-0.5 мс, или 128 позиций в обе сторони от нейтрали.

50 тиков на асемблере это довольно таки много. Мне этого хватило, чтобы декодировать два PPM сигнала, и выдать 7 канальных импульсов на оптопары.

Единственный недостаток этой cxемы - при любых ветвлениях внутри цикла, длительность самого цикла должна всегда оставаться постоянной.

570. 40inD, 06.09.2005 22:46
knock about
Основная программа будет десятки раз меняться, будет опрос других датчиков, скорее всего будет еще общение по шине i2c. так что такой вариант вряд ли подойдет. Вот смотрю на PIC18F4431 - он умеет сам определять длительность импульса. Там трехканальный модуль IC. Надо только разобраться с программой будет.

571. knock about, 06.09.2005 23:33
40inD
тогда можно сделать определитель канальных импульсов на отдельном кристале, и подключить его также, как и другие сенсоры.

Автопилот делаешь, с возможностью взять управление в свои руки?

572. LazyCamel, 07.09.2005 08:11
knock about

Скорее защиту от дурака в виде САУ
Если сесть чем-то умным на канал элеронов и руля высоты плюс поставить акселерометр - можно будет не бояться того, что чайник загонит модельку в штопор

ЗЫ:
А ШИМ вместо реальных сигналов управления - чтобы было универсально и не зависило от радиоаппаратуры
"Я так думаю !" (С) Мимино

573. Dismon, 07.09.2005 08:22
Vesel'chak U
Мне в одной программе пришлось добавлять 0.0001, чтобы правильно показывать.

Гм... Иар для авр? Просто я вчера специально посмотрел для мсп430 - нет там такой фигни. Хотя конечно мсп - своеобразный контроллер, у него с-код получается всего лишь на 10-15 процентов хуже чем если писать на асме. У него всего-то 21 ассемблерная команда. Зато каждой команде доступен любой тип адресации. Может все дело в том, что мсп430 16-разрядный? Да и аппаратный умножитель у него есть...

574. 40inD, 07.09.2005 09:41
LazyCamel
knock about
Ну робота я делаю, колесного, с возможностью радиоуправления.

575. Vesel'chak U, 07.09.2005 10:49
Dismon
Может все дело в том, что мсп430 16-разрядный? Да и аппаратный умножитель у него есть...
Вроде не должно. Для MSP430 я пользовался стандартной функцией sprintf (о чём потом и пожалел, но было поздно), а в AVR сразу страшно заглючило, тогда я это и обнаружил.
В AVR тоже есть аппаратный умножитель, а разрядность, теоретически, влиять не должна.

Сейчас специально проверил: в IAR для AVR (v.4.10B) получается чуть лучше "2.42000007E+1", но всё рано эффект есть.

Кстати, а в чём сложность вставки ассемблерных команд в IAR?

576. Dismon, 07.09.2005 13:02
Vesel'chak U
Кстати, а в чём сложность вставки ассемблерных команд в IAR?

В переходах. В иаре (по крайней мере в старых версиях, я когда начинал с микроконтроллерами работать, если память не подводит 2.7 или 2.8 версия была) переход должен быть в пределах одного оператора asm, а его длина ограничена. Возиться с опкодами не хотелось. Да и с переменными общаться надо было по их адресам в озу. Может в 4.10 это и исправили (а может исправили уже в 3.10), однако уже большой объем исходников в формате ицц, и хотя их перегнать - минутное дело, но лень - матушка не дает, тем более, что пока серьезных причин для перехода на иар я не вижу.


Для MSP430 я пользовался стандартной функцией sprintf (о чём потом и пожалел, но было поздно)
Я как тот гриф из мультика - "Лучше день потерять, зато потом за 5 минут долететь" и все процедуры ввода/вывода/конвертации писал сам.

577. Xradio, 08.09.2005 11:03
Подскажите пожалуйста, как лучше считывать в TTL состояние контактов концевых выключателей старого типа (на 220 вольт) в пром. установках. Одновременно нужна опто-развязка. (Я подозреваю, что низкие напряжения оптронов приведут к ненадежности)

578. joptpd, 10.09.2005 02:37
а кто пользует iccavr
никак не пойму ето спецом такая байда когда период тестирования проги закончился или врожденый глюк?

#define BIT7 0x80
#define BIT6 0x40
#define BIT5 0x20
#define BIT4 0x10
#define BIT3 0x08
#define BIT2 0x04
#define BIT1 0x02
#define BIT0 0x01

#define biton(x,y) (x|=1<<y)
#define bitoff(x,y) (x&=~(1<<y))
#define invertbit(x,y) (x^=(1<<y))
#define testbit(x,y) (x&(1<<y))

взял я макросы из его хелпа и биты из одного примера
но почему то ети макросы не работают как надо
к примеру бит0 порта Б на самом деле 3й бит

4-7 ваще не реагирует

тестил в протеусе...

в кодевижине операции с битами намного проще и встроены уже
а тут какая то муть

и еще как в кодевижине с юартом работать
куда там свой код писать для передачи или приема?

в иссавр я сразу все понял и засунул в прерывание таймера0
сразу заработало

а в кодевижине хз

протестил в авр студии
результат такой же как и в протеусе
похоже компилятор тупит

579. Dismon, 11.09.2005 12:09
joptpd

похоже компилятор тупит
А причем тут ицц? Это все справедливо в любом компиляторе.

#define BIT7 0x80
#define BIT6 0x40
#define BIT5 0x20
#define BIT4 0x10
#define BIT3 0x08
#define BIT2 0x04
#define BIT1 0x02
#define BIT0 0x01


делается для прямой работы - конкретно указываются значения, соответствующие биту, а

#define biton(x,y) (x|=1<<y)
#define bitoff(x,y) (x&=~(1<<y))
#define invertbit(x,y) (x^=(1<<y))
#define testbit(x,y) (x&(1<<y))


делается для относительной работы с битами. В последнем наборе макросов используется операция сдвига влево <<. Получается, что задав эти макросы и написав

biton(PORTA,BIT1)

ты не занесешь единичку в бит 1, а выполнишь опреацию PORTA |= 1 << 2, т.е. пошлешь в порт А значение 4, включив тем самым бит 2. А что на биты 4-7 не реагирует - оно и понятно, попробуй сдвинь 16/32/64/128 раз влево 1, и получи что-то отличное от 0 в 8 битах.

Правильно будет делать так:

PORTA |= BIT1;

или так:

biton(PORTA,1)

Оба эти оператора включат первый бит порта А.

Если же хочешь писть

biton(PORTA,BIT1)

то надо задавать такой дефайн:

#define BIT7 0x07
#define BIT6 0x06
#define BIT5 0x05
#define BIT4 0x04
#define BIT3 0x03
#define BIT2 0x02
#define BIT1 0x01
#define BIT0 0x00

580. Dikoy, 19.09.2005 15:17
Можно ли переназначать пины UART в AVR?
Вот есть МК. 2313 к примеру. У него есть два пина Rx/Tx. Выводы 2 и 3 соответственно. А могу я переназначить эти выходы на контакты 15/16 (порт В) например? А ещё лучше - на несколько контактов и передавать данные в любую линию на выбор?
Если нет, то какой МК это умеет?

581. Tahoe, 19.09.2005 17:58
Dikoy
Однозначно не можешь.

Если нет, то какой МК это умеет?
Программный UART. А лучше тогда уж ПЛИС.

582. joptpd, 19.09.2005 18:06
Dikoy
не умеет он
юарт там апаратный (см блок схему даташита)
есть контролеры с 3мя портами типа мега103 или 106 если не ощибаюсь
но они стоят окло 20 евров

ты можеш написать некое подобие програмного юарта но ето будет изврат

Dismon
понятно
я думал надо biton(PORTA,BIT1)
примеров использования не было там

583. Mura-vey, 19.09.2005 18:13
Есть один интересный вопросец. Возможно ли в АВР-ках переписывать на ходу, т.е. создавать програмные объекты и их срау выполнять. Скажу понятнее. Загружать программу напр. с флешки или жёстких дисков и её выполнять. Хочется сделать устройство перепрограмируемо на ходу (коробочка, с дисплеем и клавиатурой + куча портов.Есть такая задача). Или всё же целесообразнее для этих целей использовать другие средства, если да то какие?

584. m16, 19.09.2005 18:34
у авр-ов есть средства самопрограммирования. пишется загрузчик (boot loader) который через уарт либо другой интерфейс загружает код во флеш а затем передает ему управление

585. Vesel'chak U, 19.09.2005 18:43
Mura-vey
Только это изврат, лучше брать МК с принстонской архитектурой.

586. LazyCamel, 20.09.2005 08:19
Mura-vey

Нет. Все что есть - средства перепрошивки. У АВР принципиально не выполняется код из ОЗУ. Только из флеша. Если нужна гибкая реконфигурация - это скорее к АРМам. Они умеют работать как из памяти, так и из флеша.

587. Dismon, 20.09.2005 08:51
Dikoy
Можно ли переназначать пины UART в AVR?
У атмела - нет.

Если нет, то какой МК это умеет?
Незнаю насчет уартов, но Philips LPC2129 например может переназначать некоторые выводы. Подробно не смотрел, так что ищи даташит.

588. Dikoy, 20.09.2005 21:20
Вот ещё вопросец.
Если я подключу светодиоды непосредственно к пинам атмела (тини2313 в частности), без резисторов, ограничат ли ключи порта ток на уровне 20 мА? Питание 5 вольт.

589. Smoke Jaguar, 21.09.2005 01:27
Вот решил просвещаться в этом направлении

Есть ли где-нибудь нормальная документация на русском по PICC Lite от HT ?

590. psnsergey, 21.09.2005 11:41
Dikoy
Ключи не умеют ограничивать ток.

591. Dikoy, 21.09.2005 12:55
psnsergey
Ключи не умеют ограничивать ток.
Это то ясно, только я не раз слышал что многие подключают светодиоды прямо к портам без резисторов и "всё ништяк"...

592. Xradio, 21.09.2005 16:03
Dikoy
Это было предусмотрено разработчиками некоторых МК - непосредственное подключение к портам LED или Б-Э ключей. Ток граничивается "аппаратно" на уровне 20-30 ма.

593. Vesel'chak U, 21.09.2005 16:09
Dikoy
многие подключают светодиоды прямо к портам без резисторов и "всё ништяк"...
Радиолюбительство чистой воды.

594. Нуф, 21.09.2005 20:37
Здравствуйте!

Есть желание получить от PICа логическую единицу напряжением вольт так в 300, хотя можно и больше или меньше, но чтобы точно больше питания самого микроконтроллера.
Классический подход - транзисторный каскад на пине контроллера, но хотелось бы отойти от классики "Придумал" другое решение, но не знаю, будет ли это работать. В инете, чего-то, не встречал такого... А попробовать сам не могу

Подскажите безграмотному, будет ли работать такая схема долго и счастливо, или не будет. Или будет, но не счастливо, или счастливо, но не долго?
И почему?

Спасибо!

К сообщению приложены файлы: 1.gif, 371x201, 3Кb

595. Dikoy, 21.09.2005 22:22
Нуф
Клёвый веервег получится!

Не будет оно работать - пробьёт ключи порта напряжением, там же полевики. Если и городить что-то подобное, то минимум на опторазвязке (оптрон между портом и всем остальным).

Какая частота нужна?

596. Нуф, 21.09.2005 23:30
Dikoy
Клёвый веервег получится!
Не, максимум взрывное устройство со сверхмалым радиусом поражения - я ж это дело эпоксидкой залить собирался


Не будет оно работать - пробьёт ключи порта напряжением
Вот так я и думал, блин
Хотя мысли текли другим руслом:
1. Когда порт в высокоимпедансном состоянии, то в теории его как бы и нет совсем, т.е. резюк просто подключен к стрелочке на схеме и все.
2. Когда нужен "ноль", то мы переводим порт в логический ноль и снимаем Z-состояние. Тут, типа, 300 вольт в количестве 3 миллиампер через резюк с криками бегут к пину, мол, вот ты где, а он (пин) им в ответ - дули вам, я в домике, типа, я уже подключён к земле и напряжение на мне, соответственно, будет равно нулю. А еше ток, который могу держать (если верить родителям) равен 20 мА, а вас только 3!
Ну и все такое...

Получается, ошибка в приложенном к пину потенциале? Резюк-не резюк, а к пину приложено 300 вольт, на которые он не расчитан? Получается так?
Если можно, то прям как для детей...

Если и городить что-то подобное, то минимум на опторазвязке (оптрон между портом и всем остальным).
Мне легче к выходу пина подоткнуть транзистор по схеме ОЭ. Транзистор тоже должен быть высоковольтным (в случае с 300В)?

Какая частота нужна?
Плавающая. Примерно от 100Гц до 3кГц.

И еще... Спасибо Вам за ответ!

З.Ы. Не бейте любителей! Может они и не умеют, но зато любят...

597. Dikoy, 22.09.2005 00:47
Нуф
Резюк-не резюк, а к пину приложено 300 вольт, на которые он не расчитан?
Там мосфетик стоит. Z состояние - это его огромное прямое сопротивление. То есть он очень сильно заперт. Но он то есть! И к его стоку всё равно приложено 300В. Вот и профигарит. Полевики к напряжению очень чувствительны, гораздо сильнее биполярных.

Мне легче к выходу пина подоткнуть транзистор по схеме ОЭ.
А ещё проще взять тиристор со встроенным оптроном. Гальваническая развязка с портом обеспечена, работать будет как часы. + это самое дешёвое и грамотное решение.

Транзистор тоже должен быть высоковольтным (в случае с 300В)?
Транзистор можно и простой взять если исхитриться (высоковольтные есть, но до-о-о-орого). Но вот если исхитриться не правильно, то через этот же транзистор напряжение пройдёт в порт и будет то же самое, только во всей схеме живым останется только транзистор

Плавающая. Примерно от 100Гц до 3кГц.
А ток? Может, твердотельное реле взять? AB30S (http://www.chip-dip.ru/shop/article_mysql.xtml?id=729178746&topid=4&ggid=31500&gid=31501) Это, по сути, и есть симистор с оптроном. Только оформлено всё типа под реле

598. DrAG0n, 22.09.2005 07:27
не. Если реле - то оно и выключаться, наверное, может под напряжением. А с симистором такое сделать сложно. Есть микросхема К155ИД1 - древняя... но на ней ИВ-1 запитывали. Там вольт 160 было... Да и вообще - любой 2SC4161 подключить - и все будет ок (без развязки, правда).

У меня маленький вопрос - есть у кого-нибудь схема простенького программатора под ATTINY11 - он по SPI не шьется, 12 вольт найду - но как-то б его к LPT подключить, что ли... А то все норовят с ATTINY12 начать - у него SPI уже есть, он 11-й - самый дешевый и его хватает для моих нужд.. А 400р зазря тратить - лучше уж программатор собрать - шоб был...

599. Dismon, 22.09.2005 08:43
DrAG0n
А 400р зазря тратить - лучше уж программатор собрать - шоб был...

Какие 400р? Если посмотреть в ефинде, типичные цены: тини11 18р, тини12 32р.

600. Dikoy, 22.09.2005 09:34
DrAG0n
Если реле - то оно и выключаться, наверное, может под напряжением
В смысле?

601. DrAG0n, 22.09.2005 13:05
400р - это потомучто 20 шт. (у нас в промэлектронике 20р и 42р соотв.)
Тиристор (или симистор) если открылся - то его уже не закрыть, кроме как убирая напряжение. Поэтому для переменки - ок, а для постоянки - нет. А реле - оно так: сигнал подал - включилось. Убрал - выключилось.

602. Vesel'chak U, 22.09.2005 14:06
У кого есть компиляторы для AVR, кроме IAR. Проверьте, пожалуйста, такую программу:

код:

unsignet int Temp;
main()
{
for (;;)
{
for (Temp=0; Temp<=0xFFFF; Temp++)
{
for (CntOut=0; CntOut<5; CntOut++)
{
_NOP();
}
PORTB&=~0x1;
_NOP();
PORTB|=0x1;
}
for (Temp=0xFFFF; Temp>0; Temp--)
{
for (CntOut=0; CntOut<5; CntOut++)
{
_NOP();
}
PORTB&=~0x1;
_NOP();
PORTB|=0x1;
}
}
}


В IAR 4.10B второй цикл (на уменьшение Temp) даже не компилируется (оптимизация выключена).
Ежели их поменять местами, то цикл на уменьшение Temp один раз полностью проходит, а затем повторяется только цикл с увеличением.
Видимо, придётся переходить на другой компилятор.

603. DrAG0n, 22.09.2005 14:24
Еще столкнулся с проблемой - AVR_ISP на 74HC244 не программирует AT90S1200. Иногда удается стереть, иногда начинает запись. Иногда считывает. После записи (Write failed) показывает, что запрограммировалось правильно 2 байта. В остальных - муть. ATMEGA8 тут же сразу же программируется нормально. И кварц подключал, и от внешнего генератора пробовал... А понипрог не видит фьюзы.

604. Xradio, 22.09.2005 15:54
DrAG0n
Странно... Я вообще не встречал проблем с АВРИСПом. Эл. конденсатор между 10-20 ног АПэшки есть? И длина хвостов от компа до 244 не более 1.5м, а от нее до АВРки 20-30см. ?

МОБИЛА, лежащая ближе 1 метра от программируемого дивайса, может Вас огорчить!

605. Dismon, 22.09.2005 16:44
Vesel'chak U
В IAR 4.10B второй цикл (на уменьшение Temp) даже не компилируется

Не компилируется = выдает ошибку? Или просто в отладчике в него не попадаешь?

Скорее всего второе, ибо в программе у тебя ошибка. Потому и если циклы поменять местами цикл на уменьшение выполняется один раз. Дело в том, что у тебя получается бесконечный цикл на приращение. Ведь Temp - unsigned int. Условие кручения цикла

Temp <= 0xFFFF

Т.е. цикл выполняется при Temp равном 0xFFFF, затем Temp увеличивается на 1, и принимает значение 0. А 0 всегда меньше 0xFFFF. Вот он его и крутит все время. Правильно должно быть так:

for (Temp=0; Temp < 0xFFFF; Temp++)

606. DrAG0n, 22.09.2005 18:09
Xradio
да, кондер вроде есть (собирал давно, в соотв. со схемой) От компа до 244 - 10см, от 244 до девайса 1.2м. Мобилы рядом аж 3. Но ведь не могут же они одновременно излучать? Тем более, что мега8 вообще без проблем программируется. Каждый раз.

607. Xradio, 22.09.2005 18:28
DrAG0n
Длины хвостов лучше было наоборот было сделать, как и рекомендовано авторами. Хвосты - плоские шлейфы? В сетапе компа LPT порт не расширенным назначен? Кварц не выше 4 мег? Конденсатор на выводе reset?... итого... много нюансов. Осциллоскопирование линий ISP что говорит с точки зрения лог. уровней и качества фронтов?

608. knock about, 22.09.2005 18:46
Xradio
Почему кварц не выше 4МГц.? А как тогда программировать, если частота кварца 12МГц. и выше? Ну первый раз я от внутреннего прошью, но ведь потом фьюзи будут установлены на частоту 12-16. Как в этом случае прошивать?

609. DrAG0n, 23.09.2005 07:52
кварц и 2 и 4 МГц, их же и на внешний генератор сажал, фронты посмотреть не могу - осциллографа нет. Шлейф плоский - земля-сигналы чередуются - как и положено. А какой конденсатор на резет?

610. Vesel'chak U, 23.09.2005 10:56
Dismon
СПАСИБО!
Совсем заработался, ничего не соображаю.

611. Xradio, 23.09.2005 11:09
DrAG0n
какой конденсатор на резет
Вообще никакого не надо - сигнал идёт от 244, АТМЕЛ программируется в режиме сброс. А после окончательного программирования, вывод Reset лучше всего непосредственно замкнуть на +5. Вообще, насчет AT90S1200, или конкретной их партии, что-то нехорошее насчет программирования пробегало в конфе TS. ИМХО. Еще есть некоторые нюансы LPT портов на новых платах.
Я вообще прогаю только из под пня1 - 200 с Вин 98... и "студия" там нормально шевелится.

612. Jang, 24.09.2005 20:01
Привет всем !
Подскажите пожалуйста, чем можно скомпилировать файл ASM для AT89C2051?
Пробовал Tasm`ом, все получается хорошо, ошибок не выдает, но выходной код получается только *.obj , а надо hex, иначе программатор непрошивает
Может есть какаянибудь утилита для преобразования obj в hex ?

613. VBKesha, 24.09.2005 22:12
Jang
вот этим http://www.atmel.com/dyn/resources/prod_documents/ASMB51.EXE

614. Jang, 24.09.2005 23:49
VBKesha
Спасибо! Хотя я так и неразобрался с ASMB51 (плохо принимает готовые листинги ASM и выдает много ошибок почемуто), но
ссылка помогла разобраться с Tasm`oм, оказывается в бат файле надо было убрать ключ -B (Binari) теперь всё ок, хотя файл попрежнему с расширением obj, но программатор его принимает

615. VBKesha, 24.09.2005 23:55
Jang
А ты на работоспособность проверил, то что прошил. Здаётся мне Tasm не сможет для AT89C2051 прошивку скомпилировать.

616. Jang, 25.09.2005 00:34
VBKesha
Да, написал пару простеньких программ Может в каких-нибудь нюансах может проблема появиться, но надеюсь что нет.
Это мой первый запрограммированный контроллер, поэтому знаний почти ноль. Но в Tasm`е есть поддержка MCS-51,(задается ключем) а они вроде полностью совместимы (кроме размера памяти конечно).
От AVR ассемблер вообще постоянно ругается на готовые (не мои) листинги, то тут ошибка то там, удобная штука в отличие от Тасм, но вот почему ругается непонятно (листинги точно рабочие, из инета взял). Еще пробовал Keil, тоже только время зря потерял, но может просто еще неразобрался. А вот с Тасмом вроде подружился

617. Xradio, 25.09.2005 10:40
Jang
C 51 ми замечательно работать Franklin_ом. - там и Асм и Си, и любой формат трансляции.

618. joptpd, 25.09.2005 12:11
скажите
а p80c51205
дип40

ето контролер из серии 51?
я его вроде со старых мамок снял
можно ли его для домашних поделок использовать? только нужен сишный компилятор

619. Xradio, 25.09.2005 12:36
joptpd
Наверняка контроллер, посмотри в Philips. Но "умные" приборы все, как правило, однократно прошитые... Но не беда - их, 51-е, можно перевести в моду работы с внешним ПЗУ. Только вот проблематика возникнет в виде изготовления эмулятора ПЗУ, чтобы спокойно отлаживать свой продукт...
Эх-ма... десяток лет назад я так жил... Но машинки до сих пор живы.

620. coppermine, 26.09.2005 11:07
Лично советую PIC16F84A, почитай даташити и поймешь. Я так нфчинал, трудно но ничего не поделаешь.

621. Vesel'chak U, 26.09.2005 13:46
coppermine
Лучше AVR - начинать проще, да и циклов перезаписи больше.

622. quadrat, 27.09.2005 11:17
Vesel'chak U
Лучше AVR - начинать проще, да и циклов перезаписи больше.

циклов перезаписи и в PIC-е.. хвататет по уши


coppermine
Лично советую PIC16F84A
а я бы посоветовал сразу на PIC16F628-м учиться.. отличия минимальные, но 84-ый уже снимается с производства, стоит дороже, не имеет встроенного генератора и встроенного USART порта. Переделка готовых исходников для PIC16F84 под 628-й заключается чаще всего в переносе начала области регистров общего назначения и в редких случаях проследить в какой странице находятся некоторые специальные регистры (есть небольшие отличия).

623. Tahoe, 28.09.2005 00:09
Лично советую PIC16F84A
а я бы посоветовал сразу на PIC16F628-м учиться..

Вы бы ещё посоветовали начинать осваивать Z80.
PIC это путь в никуда, ИМХО. АВР очень удачное ядро, к тому же Атмел предлагает хорошие перспективы роста. Перейти с АВРа на тот же АРМ не будет большой проблемой. К тому же можно долго орать что "асм рулезз", но на Си писать быстрее. А с ядром вроде АВР ещё и не менее эффективно. Так что если кто-то к чему-то привык, это ещё не значит что так лучше всего.

624. joptpd, 28.09.2005 08:43
я с авр начал
пик у нас 84а стоит 9 евров и есть тока в одномо магазине в городе (в остальных заказывать по почте)
а 2313 1.80
а мега 16 стоит 3.90

625. Vesel'chak U, 28.09.2005 14:02
Лично я начинал с 8080, а потом x51. Мне кажется, что начинать изучение лучше с x51, а после изучения 2-х, 3-х типов уже становится без разницы что использовать, тем более при использовании C.

Tahoe
АВР очень удачное ядро
Слово "очень" не подходит.

626. Tahoe, 29.09.2005 17:29
Vesel'chak U
Пардон, не совсем верно выразился. "Очень" в контексте программирования на Си. Так принимается?

627. DrAG0n, 29.09.2005 17:41
Можно подробнее? В чем Вы видите его недостатки?

628. vict, 29.09.2005 21:15
Народ, к Вам с просьбой, а задачка такая: бензобак с контактным резистором и нелинейными показаниями (могу откалибровать по наполнению), так вот есть желание вывести показания уже в литраже на индикатор.
Как проще сделать, а ветку создавать не вижу смысла,.
AVR в наличие есть.

629. Dikoy, 30.09.2005 00:41
vict
Резистор в цепь делителя от напряжения питания. Напряжение питания тогда можно использовать как опорное (можно включить в АВР-е программно). Это всё на вход АЦП в 10-битном режиме. А далее - математика
Бензобак авто? То есть чисто резистор перменного номинала, один контакт на массу, другой к индикатору?

К сообщению приложены файлы: 1.gif, 658x591, 4Кb

630. Tahoe, 30.09.2005 03:04
DrAG0n
А это к кому обращение было? Просто если "Вы", то это личное обращение. Но в посте не указано к кому. А если обращение ко всем, то это "вы".

631. Dikoy, 30.09.2005 09:44
vict
Кстати, зависимость сопротивления переменного резистора хоть и нелинейная, но подающаяся вычислению. Вот только я не помню, как... Но если учёные товарищи подсткажут, то просто введёш в прошивку формулу и ничего калибровать не надо будет.

632. Dismon, 30.09.2005 10:48
to All

Народ, никто случайно не знает, есть ли в Image Craft C возможность запретить компилятору сохранять регистры при вызове функций?

633. vict, 30.09.2005 12:50
DikoyКонечно, могу по снятым точкам через литр для 43 литрового бака, построить сплайн функцию и заколотить её в МК. И без Вашей схемы не обойтись - только дабавим ещё один делить, как опорный. Бак, переменник, угол поворота рычага по положению поплавка - все самое "кривое", вряд ли теоретическая формула поможет.

634. quadrat, 30.09.2005 13:04
vict
в твоём случае проще всего сделать так:
1. опустошить бак.
2. заливать в бак через мерную бутылку по 1 литру и делать замеры сопративления.
3. повторить пункт 2. 43 раза
4. составить таблицу соответствия

всего-то потребуется 43 байта програмной памяти. Ф-цию высчитывающую кривую ты вряд ли сделаешь компактнее. Да и таблицу можно заганть в внешнюю память.. тогда калибровать будет еще проще.

635. DrAG0n, 30.09.2005 16:12
Tahoe
Это ко всем. Особенно к Vesel'chak U и Tahoe.
Вкратце, хотя бы. А то мне сравнить его особо не с чем - x80, x86, 1879ВЕ1, да и все. ни PIK, ни MSP, ни х51 не трогал.

636. vict, 30.09.2005 16:20
quadrat4. составить таблицу соответствия. - да,
И интерполировать внутри интервалов? В смысле хватит ли 8 разрядов?

637. Dikoy, 30.09.2005 17:22
vict
дабавим ещё один делить, как опорный.
Нафиг? Сигнал формируется из напряжения питания. Оно же и опорное. Точность абсолютная получается.

И интерполировать внутри интервалов?
Внутри точек зависимость считать линейной и высчитывать как пропорцию. Тебе ж не нужна точность выше десятых долей
Делаешь выборок 100 с последовалельным суммированием, делишь на 100 - получаешь среднее арифметическое. Раз в секунду выводишь на дисплей. В цепи входа АЦП ставишь RC фильтр и фербид, от помех.
Можно добавить алгоритм, проверяющий величину разницы между соседними измерениями (чтоб на поворотах цифирки не скакали). Если разница большая, данные не выводятся (держатся на дисплее) десяток отсчётов. Если не изменились - выводятся, если пришли в норму, тоже выводятся... Короче, тут можно долго и плодотворно думать, улучшать...

Добавление от 30.09.2005 17:25:

quadrat
. опустошить бак.
2. заливать в бак через мерную бутылку по 1 литру и делать замеры сопративления.

Кстати да, т.к. форма бака не обязательно правильная.

638. Leka, 30.09.2005 18:14
DrAG0n
Вкратце, хотя бы. А то мне сравнить его особо не с чем - x80, x86, 1879ВЕ1, да и все. ни PIK, ни MSP, ни х51 не трогал.
У АВР (и MSP, кажется) регистровая система команд, у ПИК и х51 - аккумуляторная. Например, код:
A:=B+C
где A B C - регистры общего назначения, У АВР займет 2 команды, у ПИК, х51 - 3 команды. Имхо.

639. lmaks, 30.09.2005 23:42
Dismon

#pragma ctask <func1> <func2>...

Specifies that these functions should not generate volatile register save and restore code. See Assembly Interface and Calling Conventions regarding register usage. This is typically used in a RTOS system where the RTOS kernel manages the registers directly. See C Tasks.

640. Tahoe, 01.10.2005 00:20
DrAG0n
В принципе тебе Leka ответил. Если утрировать, то 32 аккумулятора лучше чем один. Добавлю ещё, что в АВРе есть пары 8-разрядных регистров, которые могут рассматриваться как один 16-ти разрядный и тут же использоваться для адресации.
В общем - для Си хорошо, когда проц с регистровым файлом.

Я, кстати, переспросил, потому что сначала увидел некий сарказм в твоём вопросе. Вот ведь, блин, что значит грамотность. А ведь всего-то - с большой или с маленькой буквы написАть.

641. Dismon, 01.10.2005 12:05
lmaks
Спасибо .

642. joptpd, 01.10.2005 18:15
есть ли простой програматор для at89s2051
тока не тот че у атмела
видел еще один програматор
но там такая же мс стоит *интересно чем думают те кто делает таки програматоры?)
и еще один видел попроще
но там стоит какая то страная мс от интела
расширитель портов
такой точно нет

или все же придеца в сервис топать и еще 5 евров отдавать

а может быть кто то поправит асемблерный код под 2313?
http://www.hw.cz/constrc/lc_metr/download/lc_v2.zip

http://www.hw.cz/constrc/lc_metr/index.html схема и описание для lc метра

643. Vesel'chak U, 03.10.2005 11:54
Tahoe
"Очень" в контексте программирования на Си. Так принимается?
Не согласен. Не очень оптимально получается.

32 аккумулятора лучше чем один
16 из которых неполноценные.

DrAG0n
В чем Вы видите его недостатки?
Не полностью ортогональная архитектура и разные команды обращения к разным регистрам (хотя на C это всё равно). Остальное не так важно.

x80, x86, 1879ВЕ1, да и все. ни PIK, ни MSP, ни х51 не трогал
Тогда сравнивать особо не с чем. Что такое 1879ВЕ1 не знаю, но x8x - принстонская (Неймановская) архитектура - можно сравнивать с MSP430, а PIC, AVR, x51 - гарвардская, так что различия большие.

Leka
У x51 есть свои плюсы.

644. vict, 05.10.2005 14:48
Dikoy Спасибо, за ответ. Только есть легкое возражение о необходимости 100 отсчетов - точность не увеличиться, так как чисто измеряется - правда на столе, без шумов. Хочу провод использовать, что идет к указателю "Уровень бензина" на щиток. Да и способ усреднения ниже методической ошибки (плюс разное) часто не работает. Или сглаживание RC цепью проще./

645. Jang, 05.10.2005 21:13
Привет всем! Нашел на сайте у TexasInstrument микроконтроллеры серии MSC1210xx , подскажите кто сталкивался с такими, есть смысл вникать и осваивать их ? (просто их нахаляву можно заказать )
Они вроде совместимы с 8051, только каким программатором их прошивать ума неприложу, да и в инете инфы на русском по ним что-то невидел
Неплохие вроде микросхемки.. (корпус TQFP 64)
Если кто что знает помогите советом или ссылкой пожалуйста.

646. Dismon, 06.10.2005 09:08
Jang
Они вроде совместимы с 8051

Если там такая же система команд и архитектура, как и у 51, то имхо не стоит. Гораздо лучше выглядит серия МСП, полная ортогональность (кажется это так называется ) всего 21 команда, зато каждая из них работает со всеми типами адресации (6 или 7 типов, точно не помню). За счет этого откомпилированный С/С++ максимум на 10-15% больше, чем чистый ассемблер. Плюс мне понравился аппаратный умножитель: записываешь в ячейки два 16-разрядных числа (2 такта), а следующей командой (всего через такт) извлекаешь результат. 16 внешних прерываний тоже бывают полезны. 12бит/8каналов ацп 200 кГц. Тот же TQFP64 (по крайней мере у МСП430). Вот только частота у них до 8МГц всего.

647. Dikoy, 06.10.2005 18:27
vict
есть легкое возражение о необходимости 100 отсчетов - точность не увеличиться, так как чисто измеряется - правда на столе
В машине у тебя полезут наводки от системы зажигания и пр. Усреднение помогает частично слизать эти всплески.
Но можно применить алгоритм, фиксирующий резкое изменение показаний относительно серии предыдущих. Тоже поможет.
А вообще, от плясок цифр тебя ничего не спасёт Можно только эту пляску уменьшить.

Хочу провод использовать, что идет к указателю "Уровень бензина" на щиток
И используй!

Или сглаживание RC цепью проще./
Лучше и то, и то. См схему:

К сообщению приложены файлы: 1.gif, 720x331, 2Кb

648. lmaks, 09.10.2005 13:17
Что такое PPM кварца. И как вычислить PPM если известно, что надо точность 1% на 16 мгц кварце.

649. Zman, 09.10.2005 14:47
lmaks:

PPM - parts per million

дословно: сколько частей на миллион
глубокий смысл: 1 ррм это как бы 1 микро-процент (точнее в 10 000 раз меньше 1%)

то есть если у тебя уход кварца за час равен 5ррм, это означает что надо взять номинал кварца (напр. 20МГц) разделить его на миллион (20 000 000 / 1 000 000 = 20 ), получаешь 1ррм (как бы 1 микропроцент от твоих 20Мгц). Соответственно 5ррм для этого примера будет 5 * 20 = 100 тиков. То есть за час этот кварц плывет на 100 тиков в плюс или минус

по твоему вопросу -

дано: 1% на 16Мгц
то есть это 0.01 от 16 000 000, то есть 160 000 тиков
1ррм для 16 Мгц = 16, значит 1% = 10 000 ррм

т.е 1% = 10 000ррм
или 1ррм = 1% / 10 000

650. lmaks, 09.10.2005 16:34
Zman

Спасибо.
Иными словами точность самого простенького кварца (100PPM) будет где-то 0.01%.
И можно брать любой.

651. Нуф, 10.10.2005 12:41
Dikoy
На мой вопрос в данном топике:

Есть желание получить от PICа логическую единицу напряжением вольт так в 300, хотя можно и больше или меньше, но чтобы точно больше питания самого микроконтроллера. <...> К сообщению приложены файлы: 1.gif

Вы ответили:

Клёвый веервег получится!
и
Там мосфетик стоит. Z состояние - это его огромное прямое сопротивление. То есть он очень сильно заперт. Но он то есть! И к его стоку всё равно приложено 300В. Вот и профигарит.

Я только что проверил... Никакого "веерверга" PIC12F629 продолжает работать... Все порты на месте, сохранили свою функциональность и никто не "пофигарен" Наверное, всеж таки, это от того, что как я и предполагал в нашей с Вами беседе, на входе "ПИКовых" портов стоят диоды, шунтирующие напряжения, выходящие за диапазон Vss-Vdd.
Что я делаю не так, для достижения описанных Вами спецэффектов? Ведь как любому нормальному дураку мне хочется убедиться на своей шкуре
С уважением, Нуф.

652. Jang, 11.10.2005 20:39
Микроконтроллеры MSP430, с каких моделей лучше их начать осваивать ?
Выбор слишком большой, трудно соорентироваться, особенно начинающему

653. ttmm, 11.10.2005 21:07
А не подскажет ли кто алгоритмы:
1)сложения двух 16 битовых чисел, если контроллер работает только с 8 битовыми
2)преобразование 8 (16) битового числа в отдельные цифры тысяч, сотен, десятков, единиц (надо для вывода на экран)

Ну или еще какие математические алгоритмы (например, деления). Интересуют сами алгоритмы, а не код для конкретного МК.

654. GedasL, 11.10.2005 23:37
цитата:
ttmm:
А не подскажет ли кто алгоритмы:

2)преобразование 8 (16) битового числа в отдельные цифры тысяч, сотен, десятков, единиц (надо для вывода на экран)

сотен, десятков, единиц:


third_digit = number % 10;
temp= number / 10;
second_digit = temp % 10;
first_digit = temp / 10;

655. Dikoy, 12.10.2005 01:09
ttmm
1)сложения двух 16 битовых чисел, если контроллер работает только с 8 битовыми
А компилятор? Если С, то c=a+b; остальное компилятор сам сделает

656. Zman, 12.10.2005 01:55
ttmm:

1)сложения двух 16 битовых чисел, если контроллер работает только с 8 битовыми

c16=a16+b16
cLow=aLow+bLow
cHi=aHi+bHi+carry

657. Dismon, 12.10.2005 09:08
Jang
Микроконтроллеры MSP430, с каких моделей

Ммм... Я полагаю с тех, которые входят в стартовый набор разработчика вместе с программатором. Года 2 назад покупали набор, им оказался jtag и 2 пробных MSP430F149. Стоил 100$.

Вообще, сходи например сюда:

http://gaw.ru/html.cgi/txt/doc/micros/msp430/faq.htm

Там есть ответы на многие вопросы.

658. Kosta_GG, 12.10.2005 11:05
ttmm
2)преобразование 8 (16) битового числа в отдельные цифры тысяч, сотен, десятков, единиц (надо для вывода на экран)

Алгоритм, который можно применять для числа любой разрядности
;A simple algorithm to convert binary to BCD is:
;1. Add 3 to every BCD nibble that's >=5
;2. Shift left

;Example: Convert $F9 to BCD
;0000 0000 0000 : 1111 1001
;0000 0000 0001 : 1111 0010 (shift left)
;0000 0000 0011 : 1110 0100 (shift left)
;0000 0000 0111 : 1100 1000 (shift left)
;0000 0000 1010 : 1100 1000 (add 3)
;0000 0001 0101 : 1001 0000 (shift left)
;0000 0001 1000 : 1001 0000 (add 3)
;0000 0011 0001 : 0010 0000 (shift left)
;0000 0110 0010 : 0100 0000 (shift left)
;0000 1001 0010 : 0100 0000 (add 3)
;0001 0010 0100 : 1000 0000 (shift left)
;0010 0100 1001 : 0000 0000 (shift left)

659. Jang, 12.10.2005 11:39
Dismon
Спасибо! Отличная ссылка

660. ttmm, 12.10.2005 11:40
Со сложением поторопился. Думал будет сложнее, но вчера сам на сях написал и посмотрел дизассемблированный код. Оказалось элементарно, один к одному как написал Zman.
Вот пример что у меня получилось под z8
код:

v5 .equ 20h ;1 слогаемое
v6 .equ 21h
v7 .equ 22h ;2 слогаемое
v8 .equ 23h
v9 .equ 24h ;сумма
v10 .equ 25h

..........

;disassembled from c
; p1=567;
; LD %20,#%02
; LD %21,#%37
; p2=1234;
; LD %22,#%04
; LD %23,#%D2
; p3=p1+p2;
; LD %24,%20
; LD %25,%21
; LD R2,%22
; ADD %25,%23
; ADC %24,R2

ld v5, #22h ;h_byte 1
ld v6, #34h ;l_byte 1

ld v7, #11h ;h_byte 2
ld v8, #43h ;l_byte 2

ld v9, v5
ld v10,v6
ld r3, v7
add v10,v8
adc v9, r3

Теперь насчет 2 алгоритма:

GedasL
2)преобразование 8 (16) битового числа в отдельные цифры тысяч, сотен, десятков, единиц (надо для вывода на экран) сотен, десятков, единиц:

third_digit = number % 10;
temp= number / 10;
second_digit = temp % 10;
first_digit = temp / 10;


Я так понимаю это на C? А хотелось бы универсальный алгоритм чтоб можно было написать на ассемблере и на контроллере где нет команды деления. Я как-то писал подобное под "самый народный пик" - но получилось коряво (в смысле не очень правильно с точки зрения алгоритма). У меня цифра не превышала 99 и поэтому для получения десятков просто вычитал в цикле 10 пока остаток не будет <10.

код:

hex_to_ind
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Преобразование hex в 2 цифры ;;
;; на входе hex число в w ;;
;; на выходе w,tmp1-единицы ;;
;; tmp2-десятки ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movwf tmp1
clrf tmp2
label_1_1
movlw .10
subwf tmp1,0
btfss status,carry
goto label_1_2
incf tmp2,1
movlw .10
subwf tmp1,1
goto label_1_1
label_1_2
movf tmp1,0
return

Но если цифра очень большая (>99 или в случае 16 бит) такой алгоритм не прокатит.

Kosta_GG
Попробую.
Вот обнаружил, что в твоем алгоритме отсутствует условие, когда надо заканчивать цикл.
Воспользовался поиском и вот нашел этот же пример:
;1. Add 3 to every BCD nibble that's >=5
;2. Shift left
;Repeat until binary portion is all 0000

661. Kosta_GG, 12.10.2005 12:20
ttmm ну алгоритм то не мой.. За что купил, за то и продаю..

662. Vesel'chak U, 12.10.2005 13:00
Jang
JTAG можно спаять и самому. Схема, ежели не ошибаюсь, Кузнецова.

663. Jang, 12.10.2005 16:55
Vesel'chak U
Вот эта схема тоже подойдет ?
Посмотрите пожалуйста.

http://www.e-kit.ru/main/jtag/index.shtm

Добавление от 12.10.2005 17:06:

Еще одну схемку нашел:

http://www.terraelectronica.ru/catalog_info.php?CODE…bleName=class_7_1

Теперь бы еще найти литературы на русском где-нибудь с подробным описанием команд и внутреннего устройства

Добавление от 12.10.2005 17:17:

Нашел неплохое руководство по MSP430, может пригодиться всем кто тоже ищет что-то про эти МК

http://www.gaw.ru/html.cgi/txt/doc/micros/msp430/arh/index.htm

664. vict, 12.10.2005 18:03
ttmm Если пошли путем вычитания - для больший разрядностей и вычитайте крупнее. 999-100-100- ...
Видится недостаток - зависимость времени выисления от числа.

665. Tz, 13.10.2005 10:55
DrAG0n

Здравтвуйте.

Поставил WinAVR, прога компилится и hex файл создается(в AVR Studio дебагится нормально). А в контроллер прошить не могу

. Пытаюсь пользовать uisp.
Под Линухом все прекрасно работало. Щас нужно повторить подвиг под WinXP.
Ставил и пользуюсь под админом. Контроллер рабочий, пытаюсь прошить через dapa,
пробовал и мега8 и 90S4433....

Подскажите плз работает ли программатор из WinAVR под Windows XP?

Огр. спасиба

666. DrAG0n, 13.10.2005 11:26
я обычно понипрогом пользуюсь. Но попробую. Вроде, должен - ошибок не выдавал.

667. Vesel'chak U, 13.10.2005 12:57
Jang
У меня схема была другая, несколько похожая на вторую.
Литература есть в магазине . Я себе купил в Микронике 2 книги: по устройству и по применению.

668. ttmm, 13.10.2005 14:04
vict
Видится недостаток - зависимость времени выисления от числа.
Вот именно по-этому я и не хочу использовать вычитание. Просто в том конкретном случае цифра не превышала 99, вот за не имением на то время лучшего алгоритма и написал первое, что пришло в голову.

669. Tz, 13.10.2005 15:15
DrAG0n

а что за понипрог? где взять ?
под виндой ХР работает ?

Добавление от 13.10.2005 15:18:

DrAG0n

я извиняюсь за мож быть глупые вопросы
но в программировании контроллеров опыта большого пока нет

Добавление от 13.10.2005 16:14:

DrAG0n

да, забыл сказать
прошивать я пытаюсь через LPT1
устройство для программатора обзываю /LPT1

670. DrAG0n, 13.10.2005 20:48
http://www.lancos.com/prog.html

А вообще - эта тема содержательная в плане начала работы. Ее стоит прочитать всю.

671. Tz, 14.10.2005 10:25
DrAG0n
Спасиба за ссылку.
Скачал, поставил - те же проблемы
А может быть LPT порт должен быть настроен как-то по-особенному в биосе ?

Вчера из-под Линуха опять пробовал - все прекрасно заработало с первого раза.
Значит и порт и контроллер и шнурок в порядке.

Как же все-таки запустить это дело под виндой ?

thanks

672. DrAG0n, 14.10.2005 12:00
а какая схема шнурка?

673. LazyCamel, 14.10.2005 13:02
попробуйте использовать acrdude из штатной поставкм WinAVR. Так же не забудьте установить giveio.sys, чтопы получить доступ к порту из-под ХР. Соответствующий бат-файл есть в каталоге avrdude

674. joptpd, 14.10.2005 14:52
Tz
ты забыл установить драйвер порта
в виндах нет прямого доступа к портам теперь

для понипрога я собрал http://www.lancos.com/e2p/avrisp-stk200.gif
шнурок от платы 10см
програмирую прямо из компилятора CodeVisionAVR

а схему на сайте понипрога не советую собирать
она не работает на любой плате
у меня не пошла

http://mladkonstruktor.bg/Programator.htm

вот ета работает

675. Tz, 14.10.2005 16:47
DrAG0n
Схема кабеля- не знаю как называется. Просто с ЛПТ порта на контроллер через резюки.
Взял отсуда http://www.linuxfocus.org/Russian/March2002/article231.shtml
что в понипроге выбирать под него пока еще не понял.

LazyCamel
joptpd
да, драйвер порта из WinAVR я не ставил.
Спасибо, попробую.

LazyCamel
acrdude - что это? еще прошиватель?
его можна в Makefile указывать вместо uisp ?

676. joptpd, 14.10.2005 20:23
Tz
avrdude идет с тем компилятором
там и редактор кода идет
все прописываеш в мейкфайл
тока ему сначала в его конфиге надо прописать чето

ну короче обычная опенсорсная работа напильником
CodeVisionAVR сразу работает
тока он платный

Добавление от 14.10.2005 20:26:

и еще http://www.linuxfocus.org/Russian/March2002/article231.shtml
указаный тут шнурок не работает 100%
если 2313 он еще прошивал то мега16 уже все
просадка напруги
если 74244 прицепить то все идет нормально

677. LazyCamel, 14.10.2005 20:55
цитата:
Tz:

LazyCamel
acrdude - что это? еще прошиватель?
его можна в Makefile указывать вместо uisp ?
Это я писал с ПДА, ошибся с клавиатурой. разумеется avrdude

в makefile разумеется прописывается. описание есть в каталоге doc.

74HCT244 (или аналог)стоит рублей 10 максимум и есть в 99% магазинов торгующих комплектующими.
Монтажная плата - ну рублей 30., ну 50 у очень жадных. Диод 1n4148 - меньше рубля. ПРоконденсаторы даже говорить смешно.
Соберите себе программатор известный как STK 200/300. Например с той ссылки про авреал. прошивать сможете 100% софта для АВР. Поддержка этой схемы есть во всем софте для программаторов.

Автор аврила правду говорил, я ее на собственном опыте проверил - сразу не сделаете нормальную схему - будете материться, бороться с глюками, но лениться сделать нормальную. А работоспособность схемы без шинного формирователя зависит от массы факторов, начиная от емкости шлейфа и заканчивая фазой луны.

ЗЫ:
Откройте файл avrdude.conf - там все просто и примитивно, можно его подстроить под любую схему ЛПТ програматора.

678. Dikoy, 16.10.2005 00:22
А можно купить готовый программатор, типа AS2M или AS3 (он для USB) за 900 и 1200р соответственно, и не парится... Шьют весь АВР.

679. Tz, 17.10.2005 11:10
Огромное спасиба всем за помошч!

все заработало! нехватало для счастья установки драйвера getio.sys.
Пользую uisp как и под Линухом, прошиваю мегу8, шнурок с http://www.linuxfocus.org/Russian/March2002/article231.shtml.
avrdude - смотрел, вроде классная штука, но пока и так все работает.
В процессе понял шо нормальный программатор - вешч не лишняя.

Засскажите плз почему я не смогу прошивать меги16 моим кабелем
и шо значит "просадка напруги".
Если я возьму эту схему http://www.lancos.com/e2p/avrisp-stk200.gif, будет работать ?

... и еще раз спасиба !

680. DrAG0n, 17.10.2005 11:58
>будет работать ?
Да, у меня именно он и работает

Недавно, правда, собрал с опторазвязкой - но он тормознутый получился. Пользуюсь первым.

681. Vesel'chak U, 17.10.2005 14:16
Вместо getio.sys. можно использовать DLPORTIO.dll.

682. joptpd, 17.10.2005 19:27
вот образец для 2313
подразумеваеца че надо 8 чисел принять

код:
 83 while (1)
_0x3:
84 {
85 for(i=0;i<8;i++)
LDI R16,LOW(0)
_0x7:
CPI R16,8
BRSH _0x8
86 arr[i]=PINB;
RCALL SUBOPT_0x0
IN R30,0x16
ST X,R30
87
88 for(i=0;i<8;i++)
SUBI R16,-1
RJMP _0x7
_0x8:
LDI R16,LOW(0)
_0xA:
CPI R16,8
BRSH _0xB
89 PORTD=arr[i];
RCALL SUBOPT_0x0
LD R30,X
OUT 0x12,R30
90
91 };
SUBI R16,-1
RJMP _0xA
_0xB:
RJMP _0x3
92 }
_0xC:
RJMP _0xC


;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES
SUBOPT_0x0:
MOV R26,R28
ADD R26,R16
RET


я те с си кодом привел
сразу увидиш какой код че делает

а вот чистый си

код:
void main(void)
{
unsigned char i, arr[8];
тут выделяю 1 байт памяти для щечика и 8 байт для чисел

while (1)
{
for(i=0;i<8;i++) \\ считаем до 0 и каждый раз записываем число из порта б если нужны какие то даные извне или же PORTB
arr[i]=PINB;

for(i=0;i<8;i++)
PORTD=arr[i];
тоже самое
тока обратно
};
}


заняло 2 минуты от запуска компилятора до компиляции

683. hardlock, 18.10.2005 10:11
Вопрос дилетанта: есть исходник... Чем ЭТО скомпилировать?
Пробовал AVRStudio, Asmb51, Franklin, CodeVisionAVR, WinAVR, CVASM. Ничё не получается -ругаются на всё начиная c DEBUG = 0

; ------ DALLAS DS1990A based lock ------
; ------ Supports 9 keys + 1 master-key -----
; ------ wubblick@yahoo.com -------

;TARGET = AT89C2051
DEBUG = 0 ;0-off, 1-rdfn ports, 2-on
#INCLUDE "LIBR51.ASM" ;8051 SFR set

CLK_KHZ = 10000 ;OSC frequency, KHZ
RTC_MS = 20 ;system clock, MS

RTCV = -(CLK_KHZ*RTC_MS)/12

;Macros:

#DEFINE LO(XXX) XXX & 0FFH
#DEFINE HI(XXX) (XXX >> 8) & 0FFH

#IF (DEBUG>1)
#INCLUDE "LIBDEF.ASM"
#ENDIF

; ------ Constantes ------

MAXK .EQU 9 ;max number of keys
I2C_ADDR .EQU 0A0H ;I2C address for 24C02 (A0,A1,A2=0)

684. Tz, 18.10.2005 10:15
Помогите разобраться плз.
Хочу настроить коммуникацию через УАРТ к ПК.
Настраиваю так:

#define F_OSC 4000000 /* oscillator-frequency in Hz */
#define UART_BAUD_RATE 9600
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_OSC)/((UART_BAUD_RATE)*16l)-1)


void init(void) {
// set baud rate
UBRRH = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)>>8);
UBRRL = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_OSC);

// Enable receiver and transmitter; enable RX interrupt
UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE);

//asynchronous 8N1
UCSRC = (1 << URSEL) | (3 << UCSZ0);
}

а работает на 2400. Как говорил я пользую мегу8.
Стоит отдельный кварц, но никак нигде не настроенный.

Я думаю что проблема в тактовом генераторе потому что
по умолчанию он настраивается на 1Мег и при моих настройках и получися 2400бод.

Подскажите пож-ста все ли правильно в коде и где почитать про настройку
тактового генератора для меги8 или как правильно его настроить на внутренние
или внешние источники тактового сигнала?

Добавление от 18.10.2005 10:21:

В книге сказано что конфигурационная ячейка CKSEL определяет режим работы тактового генератора.
А CKPOT - функционирование тактового генератора, и его действие зависит от установок CKSEL.

А вот как их правильно установить и как этим вообще пользоваться не обьяснили !!!!!!!!!!!!!!!!!

685. LazyCamel, 18.10.2005 10:48
Читать в даташите, практически самое начало. "clock sources". Более того ссылка на нужный раздел есть и в примечании под табличкой с fuse-bitaми в разделе "memory programming - fuse bits"
К сожалению прямо сейчаз под рукой даташита Mega8 нет.

686. Tz, 18.10.2005 12:50
огр спасиба.
Даташит нашел. Раздел нашел.
Попробую на внутреннем, все-равно 4Мег какой смысл внешнего....или есть ?

687. Vesel'chak U, 18.10.2005 13:13
Tz
Внешний - кварцованный, а внутренний - RC-цепочка и от напряжения питания и температуры будет гулять.

688. Glupen', 18.10.2005 19:01
В даташитах на ПИК написано, что ГРАМОТНО делать запись TIMER1, при остановленном таймере, а все-таки, можно ли записать в старший разряд TMR1H если таймер "идет" и заведомо известно, что в момент записи старший разряд не прибавится (т.е. младший не переполнится)?

689. serg28serg, 18.10.2005 23:43
Tz
Если при работе от внутреннего генератора нужно пользоваться уартом, то просто так, как то делают с кварцем, он не заработает. Для работы от внутреннего генератора требуется прописывать в калибр. рег. меги калибровочный байт для точной настройки частоты - на 1 МГц, он прописыватся автоматом, а для 2, 4, 8 это делается ручками, ничего не попишешь.

Порядок работы ручками будет таким будет таким:
1. Берешь продвинутый флешер, типа AVReal (он работает с "хвостом" понипрога), пишешь ему батник, который будет вычитывать из служебных регистров калибровочные байты и прописывать их в хвост флешь (лучше флешь, потерять во время работы труднее), заодно дописать счетчик серийных номеров, и количество стираний, последние 16-ть байт должны получится примерно такими:
0-1-2-3-4-5-6-7 ++ 0-1-2-3-4-5-6-7
1Мгц-FF-2Мгц-FF-4Мгц-FF-8Мгц-FF ++ серийный номер-счетчик стираний
последние счетчики по 2 байта (вообщем см. тех. док. на программатор)
2. Прописываешь в исходнике , можно сразу после стека, строку записи нужного калибр байта в калибровочный регистр.
3. Программируешь уже только AVReal’лом.

И в итоге должно работать замечательно, даже с прогевом на 57К и 8МГц сбивается только при т. выше +70 цельсия (по даташиту кристалла уход частоты в этом случае 3%, что уарту вполне хватит).
Если так не рулит, то остается кварц.
Программаторов, которые умеют вычитывать все калибровочные байты, кроме AVReal, не встречал.

690. ttmm, 19.10.2005 11:22
А чего - это правда, что PIC12F683 нельзя прошить JDM программером (классическая схема с 2-мя транзисторами)? Судя по цветной табличке на этом сайте (http://feng3.cool.ne.jp/en/rcd.html) . А то неохота лепить еще один программатор.
Кстати кто-то юзал этот RCD програмер? Я так понимаю лучше сразу делать тот, что с подстроечным резистором (ver 2.3)?

691. Tz, 19.10.2005 12:06
LazyCamel
прошил фюзы - заработало!!!!!!!!!!!!


serg28serg
спасиба, постараюсь понять


А кто-нить работал с ЦАП типа AD8801 ? (http://www.datasheetcatalog.com/datasheets_pdf/A/D/8/8/AD8803AN.shtml )
Интересует вот что: в даташите пишут шо можна подключить хоть к UART
хоть к SPI. Это что, одно и то же ? Пробовал поискать и сети пример - ниче конкретного не нашел.
UART занят, хотелось бы к SPI прилепить.... Возможно ли это сделать с мегой8 ?

Кто знает подскажите плз ссылку на пример такого использования.

692. ADO, 19.10.2005 14:01
Vesel'chak U
Поясните пожалуйста про драйвера доступа к портам. Они просто автомагически перехватывают старые API или имеют свой? Сам драйвер я скачал, но описания работы что-от не найду никак.

693. Glupen', 19.10.2005 16:17
В даташитах на ПИК написано, что ГРАМОТНО делать запись TIMER1, при остановленном таймере, а все-таки, можно ли записать в старший разряд TMR1H если таймер "идет" и заведомо известно, что в момент записи старший разряд не прибавится (т.е. младший не переполнится)?

694. Dikoy, 20.10.2005 00:26
В даташите на irlml2402 написано - "управляется логическим уровнем". А будет он нормально работать в схеме с трёхвольтовым питанием и управляемый от МК типа L? Уровень "1" то может до ТТЛовских 2,7 вольт не дотянуть...

695. Fachleute, 20.10.2005 12:51
Dikoy
Должно!
У меня все работает даже от 2.5В

В даташит смотри fig.6

696. Vesel'chak U, 20.10.2005 14:22
ADO
Поясните пожалуйста про драйвера доступа к портам. Они просто автомагически перехватывают старые API или имеют свой?
Это вопрос к разработчику этих драйверов. Мне это даже не интересно - работает, и ладно. Свой программатор я писать не собираюсь.

697. ADO, 20.10.2005 15:09
Vesel'chak U
Я в том смысле, что ставишь драйвер, и программа, которая шла на 95й, работает и на ХР без дополнительных телодвижений. Так?
Как это крутится внутри мне самому не очень интересно. Разве что чисто теоретически для общего развития.

698. Chudik, 20.10.2005 21:33
Подскажите, какие микроконтроллеры имеют CAN и вообще где про него почитать. Про CAN, в смысле.

699. Fachleute, 20.10.2005 23:24
Chudik
Из AVR рекомендую At90can128 + CAN драйвер PCA82C250T
Также можно использовать след. схему
любой мк + CAN контроллер MCP2510 – I(E) + CAN драйвер PCA82C250T

700. LazyCamel, 21.10.2005 09:53
Chudik

из армов AT91SAM7X128/256
http://www.at91.com/Pages/products/microcontroller/A…7X/at91sam7x.html

по переферии не хватает только DACа, что еще приделать туда я не знаю

USER PERIPHERAL
-2 Parallel I/O Controller (62 PIO lines) with individual interrupt, Opend-drain, or Pull-up resistor function by pin.
-One Advanced Encryption System (AES) with 128-bit Key Algorithm,
-One Triple Data Encryption System (TDES),
-USB 2.0, Full Speed, Device port,
-1 Ethernet MAC 10/100 base-T,
-1 Part 2.0A & Part 2.0B Compliant CAN Controller,
-1 Synchronous Serial Controller (SSC)
-2 USART
Support for ISO7816 T0/T1,
IrDA (up to 115kbps),
Full Modem Control Lines (USART1)
-2 Master/Slave Serial Peripheral Interface (SPI)
-1 Three-Channel 16-bit Timer/Counter
-1 Two Wire Interface (TWI)
Master Mode Only
-1 Four-Channel 16-bit PWM Controller,
-1 Eight-Channel 10-bit ADC Converter,
-16 Peripheral DMA Controllers.

701. Dikoy, 22.10.2005 20:27
Объясните, что за хрень!
Впаял новый тини2313. В даташите сказано, что по умолчанию фьюз биты стоят в состоянии 0100 что обеспечивает работу от внутреннего сциллятора на 8 МГц.
Читаю состояние фьюзов программатором - получаю 0010 что соответствует 4 МГц
Вот, приаттачил принтскрин. Там с низу виден тот кусок даташиты с таблицей, а сверху окно программатора.

К сообщению приложены файлы: 1.png, 712x654, 34Кb

702. Vesel'chak U, 25.10.2005 17:16
ADO
Я в том смысле, что ставишь драйвер, и программа, которая шла на 95й, работает и на ХР без дополнительных телодвижений. Так?
Именно.

703. serg28serg, 25.10.2005 17:37
Vesel'chak U
ADO
Я в том смысле, что ставишь драйвер, и программа, которая шла на 95й, работает и на ХР без дополнительных телодвижений. Так?
Именно.


И где такой драйвер взять ?
Сылочку можно, плз ..
Он что, полный рилтайм из под ХРхи поддерживает, для дос приложении ???

704. Jelsay, 26.10.2005 17:02
Кто "трогал" PSoC - поделитесь впечетлениями
http://antiradio.narod.ru/raznoe/cypress/intro.htm

705. Jelsay, 27.10.2005 17:04
Jelsay придётся тебе самому "трогать" )

706. АСУТПшник, 27.10.2005 20:45
Вопрос возник.
Наверно каждый, кто начинал работать с USB на PIC пробовал тестовую программку "Mouse in circle demo". Вот и я тоже. Только какие-то странности творятся. Курсорчик бегает, только вот его можно остановить и снова запустить прикосновением руки (или даже просто близко поднесенным пальцем). Причем кварц генерить не перестает и прога внутри выполняется.
Использую PIC18F2550, кварц 16МГц. Пробовал режимы HS и HSPLL - одинаково.
Как это лечить?

707. ADO, 28.10.2005 12:47
serg28serg
http://www.driverlinx.com/DownLoad/dnload.htm драйвер здесь. Искал не себе, так что сам не щупал. Полный реалтайм это вряд ли. Про ДОС тоже не знаю. Дает доступ к портам, программам, которые "постаринке" пользуют что-от типа inportb/outportb.

708. Xradio, 30.10.2005 12:21
ЗЛО называется: "хотел дома поработать" (Win2000)
AVRstudio4 поставил, а она говорит: - нету у тебя VC6-RE200L.DLL
И я не смог найти эту дин. библиотеку в сети! ...
Посоветуйте что-нибудь?

709. Useroff, 30.10.2005 12:55
Xradio
Посоветуйте что-нибудь?
Могу посоветовать проверить почту

710. Xradio, 30.10.2005 13:13
Useroff
спасибо!

711. SVP, 01.11.2005 10:13
Люди!!! Помогите дописать программу для НС08. Я сам студент, уже 2-й день пробую что то понять и исправить но ничего невыходит,а сдавать нужно уже эту лабораторную.
Задание:
Подготовить исходный текст программы для ввода в микроконтроллер через порт С в режиме параллельного ввода 4-разрядного двоичного кода, устанавливаемого с помощью переключателя, и вывода через порт А на индикатор символа соответствующего заданному коду в зависимости от варианта. Данные должны отображаться при подаче сигнала на вход РТС4.
Нужно выводить на первый индикатор.Код выводимого символа - десятичное отображение.

Р.S. Если честно, то я и задание до конца непонял. Но думаю есть какие-то 4 переключателя и переключив какой-то из них будет посылаться единица, в двоичной системе, а потом этот двоичный код преобразовывается в десятичный и выводится на экран.

Программа, которая была предоставлена кафедрой как пример, который нужно долго переделывать:
PORTA EQU $0000 ; обьявление адресов PORTx и DDRx
DDRA EQU $0004
PORTC EQU $0002
DDRC EQU $0006
PORTB EQU $0001
DDRB EQU $0005
ORG $40
IND1 RMB 1
IND2 RMB 1
IND3 RMB 1
IND4 RMB 1
PORTR RMB 1
ORG $50
MOV #$FF,DDRA ; инициализация регистров направления портов ввода-вывода
MOV #$FF,DDRB
MOV #$00,DDRC
BSR NULL ; инициализация -- "гашение индикаторов"
M0 MOV IND1,PORTA
LDA #%11100000 ;Формирование 1-го строба
STA PORTB
BSR DELAY
BSR STRB
MOV IND2,PORTA
LDA #%11010000 ;формирование 2-го строба
STA PORTB
BSR DELAY
BSR STRB
MOV IND3,PORTA
LDA #%10110000 ;формирование 3-го строба
STA PORTB
BSR DELAY
BSR STRB
MOV IND4,PORTA
LDA #%01110000 ;формирование 4-го строба
STA PORTB
BSR DELAY
BSR STRB
BRA M0
DELAY:
LDA #$FF ;подпрограмма задержки
MM0: NOP
NOP
DECA
BNE MM0
MOV #$F0,PORTB
LDA #$0A
MM1: NOP
NOP
DECA
BNE MM1
RTS

STRB:
LDA PORTC ; анализ наличия строба
AND #%00010000 ; анализ наличия строба PC4
BNE MDR ; если строба нет – получаем «1» и переход на RTS
MOV PORTC,PORTR
BSR NULL

LDA PORTR
AND #%00000001 ;Анализ 1-го разряда
BNE MD1
MOV #%00001100,IND1 ;=1= (7-segment)

MD1 LDA PORTR ; анализ 2-го разряда
AND #%00000010
BNE MD2
MOV #%10110110,IND2 ;=2= (7-segment)

MD2 LDA PORTR ; анализ 3-го разряда
AND #%00000100
BNE MD3
MOV #%11001100,IND3 ;=4=(7-segment)

MD3 LDA PORTR ; анализ 4-го разряда
AND #%00001000
BNE MDR
MOV #%11111110,IND4 ;=8=(7-segment)
MDR RTS
NULL:
LDA #%01111110 ; «0» - семисегментный код
STA IND1
STA IND2
STA IND3
STA IND4
RTS


Помогите кто чем может!!!
sukvitaliy@list.ru

712. wonderer, 01.11.2005 15:56
Jelsay
Кто "трогал" PSoC - поделитесь впечетлениями

Я трогал. Очень хороший и гибкий МК. Легко кофигурируется для любой периферии: захотел 2 уарта и SPI -пожалуйста, захотел 3 АЦП с инструментальным усилителем на входе, захотел 4 компаратора и 2 ЦАПа - все к твоим услугам. Весь набор переферии реализуется конфигурируемыми блоками (цифровыми и аналоговыми). Причем можно на лету менять конфиг, был уарт стал SPI или таймер, был подключен к одим выводам переподключил к другим. Это у меня первый МК у которого не зафиксированы ноги на переферию (обычно уарт,SPI или модуль захвата имеют целевые выводы, а тут какие хочешь такие ставишь)

713. Xradio, 02.11.2005 11:00
Посоветуйте пожалуйста популярный ИОН на 2.5 вольта, который спокойно тянет вход Uref. AT90S8535 (10kOm)?
Я временно применил в этом качестве TL431, запитав его через 100 ом с 5 вольт.
Шум получается страшный. Причём, это какая-то авторелаксация. Подключение конденсатора только усугубляет её - возникает видимая "пила" с тау=xRC

Поделюсь впечатлением от "накопительного АЦП".
Мне нужен формат индикации результата преобразования =5 десятичных разрядов, а 10 бит АЦП даёт макс. число 1023. Я его умножаю на 50. Естественно получаю на дисплее постоянный 0 в младшем разряде, что не очень красиво для считывания результата... пусть и с дискретом 50 (точность устраивает). Но пляска второго справа разряда при неизменном 0 в первом - весьма ламерски выглядит...
Попробовал заменить умножение на сложение результатов пятидесяти измерений.
И всё получилось! Тут и выяснилось, почему у меня, даже при делении тактовой частоты на 128, была сильная пляска младшего разряда преобразования - это шум ИОН. При подаче на Uref. +2.5 с делителя от AVcc. результат сложения 50 преобразований пляшет +1, -1! в разряде десятичных единиц, и совсем изредка +2, -2.
Значит метод работает?

714. m16, 02.11.2005 12:17
Xradio
MAX6002 ,REF192 - 2.5в

чтобы вычисления были минимальными я использую ион с напряжением кратным степени двойки REF198 4.096в REF191 2.048 MAX6004 4.096в

715. Xradio, 02.11.2005 12:44
m16
СенQ. Мне всё равно надо масштабировать до АЦП, поэтому ИОН любой >2в. подойдёт. Лишь бы не шумел как ТЛка - что вообще-то странно...

716. Leka, 02.11.2005 15:01
Xradio
результат сложения 50 преобразований пляшет +1, -1! в разряде десятичных единиц, и совсем изредка +2, -2.
Значит метод работает.

А не так проверяется, имхо. Попробую предсказать: плавно меняя напряжение на входе, подбираемся к границе ступеньки --> получаем пляску +7...-7.

717. Xradio, 02.11.2005 15:54
Leka
Почему именно +7... -7?
Границы этой как-то особо не чувствуется. Т.е. получается, что максимально тормознутый прескалером, АЦП, реально имеет погрешность в районе 0.5 LSB? или меньше? Сейчас гоняю его на разных диапазонах шкалы, но больше чем + - 4 нигде не видел. И это без ИОНа. делитель Uref. заблокирован керамикой 0.22мкф.
Тут какой-то странный вопрос возник по разрядности в моём случае: сумма 50-ти измерений? Кстати, неплохо было бы фильтрец "среднего" салгоритмить... но я пока не умею в асме AVR

718. Leka, 02.11.2005 17:45
Xradio
Почему именно +7... -7?
+/- sqrt(50)
но больше чем + - 4 нигде не видел
А размер ступеньки какой ?

Добавление от 02.11.2005 18:35:

но больше чем + - 4 нигде не видел
Все правильно, среднеквадратичное отклонение точно на границе ступеньки:
0.5*sqrt(50)=3.5 --> +/- 4.
Если просуммировать 2500 отсчетов и результат поделить на 50 (просуммировать 3200 отсчетов и сдвинуть на 6 разрядов), пляска должна уменьшиться до +/- 1. А размер ступеньки должен остаться (=50).

719. Xradio, 03.11.2005 10:53
b]Leka[/b]
Если просуммировать 2500 отсчетов
...
Сейчас просуммировал 200 двухбайтных результатов (маленько попарился с третьим байтом) и поделил на 4 (два сдвига вправо через перенос). Стало ещё красивее! Т.е. получается что предела повышения разрядности АЦП как бы особого нет, кроме разве что скорости? И иногда можно сэкономить на внешнем высокоразрядном кристалле?

Добавление от 03.11.2005 11:58:

Остановился на 800 сложениях. Далее уже сказывается тормозность... (менее 5 изюмов в секунду)

код:

;АЦП********************
ADConvU: ;Сложение результатов 800 измерений
clr r18
clr r19
clr r20
clc
ldi r16,7
out ADMUX,r16 ; номер канала АЦП = 7
ldi r21,4
l800: ldi r17,200
loopadc: rcall ADCc ; вызов процедуры АЦП возвращает результат в bufl,bufh
; (здесь не показана)
clc
add r18,bufl
adc r19,bufh
brcc lr20
inc r20
lr20: dec r17
brne loopadc
dec r21
brne l800
ldi r17,4
ldiv16: clc
ror r20 ;деление на 16
ror r19
ror r18
dec r17
brne ldiv16
;
mov bufl,r18 ;результат АЦП умноженный на 50
mov bufh,r19
ret

720. Dismon, 03.11.2005 13:16
Xradio
Т.е. получается что предела повышения разрядности АЦП как бы особого нет, кроме разве что скорости?

Дык. У меня также стоял вопрос повышения разрядности измеренного значения (справедливости ради надо заметить, что дело было не в разрядности, и в итоге результат так и остался 10бит), Так меня по этому поводу просветили тут хорошо. Может тема еще осталась, была Программные способы повышения точности (числа разрядов) АЦП (http://forum.ixbt.com/topic.cgi?id=48:4686)

ЗЫ: Кстати говоря, ты можешь сократить время выполнения подпрограммы, просто заменив

код:

brcc lr20
inc r20
lr20: dec r17


на

код:

adc r20, R22
dec r17


предварительно приравняв R22 к 0. Вместо R22 можно использовать любой свободный регистр. Дело в том, что если не будет переполнения при втором adc, у тебя выполняется brcc. А он занимает в случае выполнения 2 такта. В случае невыполнения условия brcc займет 1 такт, и 1 такт займет inc, т.е. получим те же 2 такта. adc же всегда выполняется за 1 такт. При 800 суммированиях экономим 800 тактов.

721. Xradio, 03.11.2005 14:35
Dismon
brcs выполняется за 1/2 такта, а inc R20 (1 такт) происходит только при наличии переноса, или максимиум 12 раз. Экономия тактов как раз в моём коде. Да и держать пустой регистр бывает накладно.

Добавление от 03.11.2005 14:45:

Реально получилось, что АЦП-10 стал работать как 16. Т.е. с точностью его младшего бита. А это здорово, пусть и не быстро, но для целей визуализации значения напряжения -вполне, и не хуже внешнего "двустадийноинтегрирующего" АЦП.
А ссылку почитаю, спасибо.

722. Leka, 03.11.2005 15:44
Xradio
Далее уже сказывается тормозность...
Результат можно выводить чаще периода накопления, если хранить "частичные" суммы в кольцевом буфере (например 16 сумм по 200 отсчетов) и полную сумму (до деления). В цикле: полная=полная-самая старая+новая, новая --> самая старая, полная/делитель --> индикация.

723. Dismon, 03.11.2005 15:46
Xradio
brcs выполняется за 1/2 такта,

Все верно, если условие выполняется (С сброшен), brcc выполняется 2 такта, если же условие не выполняется, brcc выполняется 1 такт, и 1 такт inc. О чем я и писал:

Дело в том, что если не будет переполнения при втором adc, у тебя выполняется brcc. А он занимает в случае выполнения 2 такта. В случае невыполнения условия brcc займет 1 такт, и 1 такт займет inc, т.е. получим те же 2 такта.

Т.е. твой код всегда занимает 2 такта.

724. Xradio, 03.11.2005 16:03
Dismon
Не могу спорить - я в краткой сводке системы команд AVR смотрел, а там не густо... "1/2" и всё. Никаких оговорок... Особой цели сэкономить время процедуры у меня нет. Да и пустячное оно... а регистры - всегда на вес золота!
Кайфую от неожиданной находки - типа, два зайца догнал... задержку для вывода на дисплей исключил, а точность АЦП в 28 раз умножил (если верить Неонилу), и всё одним выстрелом.

725. LazyCamel, 03.11.2005 20:37
Ребят, а посчиталку какую-либо озвучить можно ?

Например если я вместо того чтобы оцифровываь сигнал с 2 мостов 10 бит АЦП а потом делить их, буду суммировать 4 значения по каждому каналу, а только потом делить эти два 16 битных числа - какой будет выигрыш, учитывая что период ацп 65мксек , а полоса на датчике в лучшем случае 100 герц ?

726. Leka, 03.11.2005 23:01
LazyCamel
Правильно ли понял: измерения по двум каналам не одновременные, те одно УВХ (один АЦП) с переключением каналов, измерения по двум каналам чередуются (А1 Б1 А2 Б2 А3 Б3 А4 Б4 ) с последующим суммированием (А=А1+А2+А3+А4, Б=Б1+Б2+Б3+Б4) с целью минимизировать динамическую погрешность деления (А/Б) ? Какой будет выйгрыш в этом случае - зависит от сигнала и моментов измерений, имхо.

727. Tahoe, 04.11.2005 02:50
LazyCamel
Ребят, а посчиталку какую-либо озвучить можно ?
Программные способы повышения точности (числа разрядов) АЦП, #17 (http://forum.ixbt.com/topic.cgi?id=48:4686:17#17)

728. Shinen, 04.11.2005 12:17
Xradio
Я временно применил в этом качестве TL431, запитав его через 100 ом с 5 вольт.
Шум получается страшный. Причём, это какая-то авторелаксация. Подключение конденсатора только усугубляет её - возникает видимая "пила"


может уже не актуально, но я применяю TL431 и никакого особенного шума не испытываю. Параллельно верхнему резюку делителя кондер 0,01-0,1uF и после TL - LC фильтр(10uH/0.1uF). MEGA8 у меня измеряет с точностью до поледнего знака, т.е. редко когда "прыгяет" значение в последнем разряде. У меня опорное было 3,3v от питающего 5v по питанию на TL тоже 100 Ом.


кстати зачем ты постоянно чистишь флаг C ? он и так сам устанавливается как нужно после операций за редкими исключениями (очень редкими) ручная манипуляция флагами не нужна.
кстати вместо перехода:
код:

clc
add r18,bufl
adc r19,bufh
brcc lr20
inc r20
lr20: dec r17

можно сделать так
код:

add r18,bufl
adc r19,bufh
adc r20,r18 ; можно любой другой регистр - не важно.
sub r20,r18
dec r17

те же 2 такта но писанины меньше и не лезут в глаза лишние метки и переходы

кстати если в каком-либо регистре есть заведомо "0", то можно использовать его и убрать команду sub

опять же чтоб не чистить флаг при сдвиге вправо нужно первой командой применить LSR а не ROR.

На вот тебе подробное описание команд и флагов.
http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF

729. LazyCamel, 04.11.2005 21:13
цитата:
Tahoe:

Ребят, а посчиталку какую-либо озвучить можно ?
Программные способы повышения точности (числа разрядов) АЦП, #17 (http://forum.ixbt.com/topic.cgi?id=48:4686:17#17)

Огромное спасибо, как раз то что было нужно

730. joptpd, 05.11.2005 10:14
а нет ли где хорошего ресурса по описанию генерации видео на авр?
нашел тока на пике
щас буду читать http://www.rickard.gunee.com/projects/video/pic/howto.php
однако было бы неплохо под авр

есть монитор монохромный от пишущей машинки
там 3 сигнала
судя по всему видео и развертка

так вот че мне с разверткой делать?
какие частоты туда подавать? и зачем вообще оно нужно? ведь можно же просто 2 генератора на плате поставить и пусть бы себе луч гоняли

731. Vesel'chak U, 06.11.2005 03:05
serg28serg
И где такой драйвер взять ?
Что-то ссылку не найти, но есть другой вариант http://www.ln.ua/~real/avreal/p95nt.zip. Тоже работает.

732. Dismon, 07.11.2005 09:56
Xradio
Да и пустячное оно... а регистры - всегда на вес золота!

Ну... Как абсолютно верно заметил Shinen

кстати зачем ты постоянно чистишь флаг C ? он и так сам устанавливается как нужно после операций

команда clc совершенно не нужна. Флаг С на результат add не оказывает никакого влияния, а после add устанавливается в соответствии с результатом. В итоге экономится 800*2 - 5 = 1595 тактов, если вместо

код:

clc
add r18,bufl
adc r19,bufh
brcc lr20
inc r20
lr20: dec r17


сделать так (вместо многоточия - остальной код):

код:

push r22
clr r22

....................

add r18,bufl
adc r19,bufh
adc r20, R22
dec r17

.....................

pop r22



А 1595 тактов - это уже не мало, в них можно еще десятка два суммирований запихнуть.

joptpd
а нет ли где хорошего ресурса по описанию генерации видео на авр?

http://www.vga-avr.narod.ru

733. Xradio, 07.11.2005 10:38
Dismon, Shinen Спасибо за поправки. Представленный кусок кода был "рабочей" версией, естественно подлежащей оптимизации. Поэтому и флаг С, что называется - "почему бы не подстраховаться, когда допустимы сомнения"?

Добавление от 07.11.2005 10:45:

Shinen
применяю TL431 и никакого особенного шума не испытываю. Параллельно верхнему резюку делителя кондер 0,01-0,1uF и после TL - LC фильтр(10uH/0.1uF)
Я её включал без делителя (Uadj замкнут непосредственно на анод) и вот именно в таком режиме TLка шумит. (проверил на 3 экземплярах, правда - БУшных из ATX БП)

734. Dikoy, 08.11.2005 00:56
Xradio
REF-19* хорошие ИОН, только кондёры нужны SMD и лепить их надо как можно ближе. А то как-то по молодости штыревых напихал, так он у меня генератором работал С СМД работает чисто, для 16-и разрядных АЦП ставил.

735. Xradio, 08.11.2005 06:53
Dikoy
И обязательно тантал с керамикой на выходе, как в даташите.

736. psnsergey, 08.11.2005 12:05
Самые хорошие ИОН - REF102 от TI. Самые стабильные во времени. Хотя уступают 40-баксовым LTZ1000.

737. Long Dog, 08.11.2005 14:16
Что за чудеса!!!! может сталкивался хто....
ситуация следующая:
собран девайс на Атмеге8515Л , был отлажен на STK500 потом перенесен на плату по Л-У_технологии _ все работает как часы;
и теперь все установлено на заводскую ПП.
тут пошли чудеса. процесор глючит. При чем по некоторым ногам отрабатывает правильно, по некоторым нет, в целом не работает.
Грешу на источник питания на LM2576, но собрано по даташиту с учетом опыта местных форумчан.
при подключении внешнего источника глюк пропадает, НО! если поднести руку к процу или коснуться его корпуса - возникает снова.
пробовал менять процессоры - с одинаковым эффектом обвешал все емкостями - тоже ноль..
уже и не знаю чего придумать..... какие советы будут?

738. VVT, 08.11.2005 14:58
Long Dog
при подключении внешнего источника глюк пропадает
Внешний источник заземлён? А не внешний откуда получает питание? Есть ли у девайса заземление? Длинные провода сигналов или питания?
А вообще глючные они, 8515 эти. Делали мы как-то на них девайс, ну и глючили они, а менять ни плату ни контроллер мы не могли. Причём происходило что типа сброса счётчика команд на 0. Боролись только программными методами, после каждого этапа выставляли флаги и после сброса смотрели на каком месте сбойнуло и шли туда.

739. Dismon, 08.11.2005 15:12
Long Dog
какие советы будут?

Для начала - посмотреть, кварц какой частоты стоит на заводских платах.

740. Long Dog, 08.11.2005 16:02
Dismon
частота в пределах.. 7,32.....классический

741. Zman, 08.11.2005 16:23
Long Dog:

может быть не в тему, но трюки с подносом руки и магическими жестами для зависания/отвисания очень имееют место быть, если у тебя CMOS входа висят неподключенными никуда (наступал на такие грабли )

742. Dismon, 08.11.2005 16:28
Long Dog
7,32.....классический

Ок, значит разгона нет. Теперь вопрос по конденсаторам на ногах кварца - сколько? (по идее должно 12-18 пф). И вопрос по фьюзам, что зашито?

ЗЫ: Извини за педантичность, но последовательным перебором идти легче.

743. Dikoy, 08.11.2005 18:26
Xradio
И обязательно тантал с керамикой на выходе, как в даташите.
У меня они стояли, но штыревые. Шумел. Поставил СМД - тот же ИОН (но в другом приборе, следующей версии) работал чисто.

Long Dog
RESET к Ucc резюком подтянут? Если только внутренний - не есть гуд, нужен внешний на 10к. И поставь неиспользуемые пины выходами, состояние 0. Как сказал VVT.
Супервайзер есть?

744. Long Dog, 09.11.2005 00:34

забыл сказать - питание 3,6 вольта нада
Dismon
генерит как заведенный

Dikoy
ресет подтянут как положно, супервайзер не ставил...питание планируется не батарейное.
неиспользованные пины...... т.е. програмно их настроить на вход и установить "0"?

тантал....тут я проморгал, стоит обычный электролит.....поищу тантал на 1000
посмотрел осциллом генерацию перед индуктивностью.... не нравится мне форма сигнала....передний фронт четкий, а после заднего-классические затухающие колебания...

вечерние изысканя:
посмотрел питание на процессоре - проверил пульсации - большой (раза в 4 относительно пульсаций на остальных элементах) амплитуды синхронно с тактовой частотой. плохо! керамикой не давятся....

повысил питание до 4,9 - ситуация исправилась. пульсации остались, но прибор шелестит...
чудеса кароч..
всеже хочется шоб от 3,6в работало....

745. Dikoy, 09.11.2005 04:38
Long Dog
т.е. програмно их настроить на вход и установить "0"?
Программно настроить на выход и установить в 0. Но можно и в 1, дело вкуса В 0 безопаснее просто.

поищу тантал на 1000
Забей, дорого. Лучше прицепи тантал на 10 или керамику на 100н прямо к ногам МК, а электролит оставь в покое.
Ещё можно попробовать фербид по питанию воткнуть...

посмотрел осциллом генерацию перед индуктивностью..
Что за индуктивность?

передний фронт четкий, а после заднего-классические затухающие колебания...
Значит с какой-то ёмкостью контур образует... Надо этот контур найти и придушить добротность...

керамикой не давятся....
А П фильтр из фербида и двух керамических С не пробовал?

повысил питание до 4,9 - ситуация исправилась. пульсации остались, но прибор шелестит...
А может проще DC/DC конвертор внедрить? Поднимать напряжение до 5 вольт. И КПД возрастёт, и батарейки получится полнее высасывать... Сколько потребляет девайс?

746. Jelsay, 09.11.2005 06:50
http://rifer.narod.ru/index.html
юзеровка Lcd сотовых

747. Long Dog, 09.11.2005 08:22
Dikoy
Что за индуктивность?
А может проще DC/DC конвертор внедрить?

так эта индуктивность при нем и стоит, я писал выше lm2576 и питание НЕ батарейное.

А П фильтр из фербида и двух керамических С не пробовал?
я не пойму что фильтровать. впечатление такое, что тактовая частота вылазит на ногу питания МК, но тальше повсей остальной схеме питание чистое.

Поднимать напряжение до 5 вольт.
дело в том, что этот МК управляет другими девайсами на этой плате, а вот им питание 3,3-3,6 самое то... и что самое поганое, эти модули работают на ять, потому и МК выбран с буквой L, а согласовывать уровни неохота...красота теряется

Программно настроить на выход
а вот это обязательно сделаю!

748. Dismon, 09.11.2005 09:28
Long Dog
генерит как заведенный

Ну значит эту причину исключаем. Далее:

1) Где фьюзы? В 90% случаев проблема в них.
2) Как верно заметили выше, болтающихся в воздухе входов быть не должно. Вообще. Не только у микроконтроллера, но и у всех остальных элементов.
3) Если там все впорядке - осталось запостить сюда схему.

ЗЫ: Кстати, почему хочешь делать питание 3.6В, а не 3.3В, которые вроде бы являются стандартом после 5В?

749. Xradio, 09.11.2005 09:45
Dismon
болтающихся в воздухе входов быть не должно
Это утверждение весьма спорно. Если в программе нет глюков, типа разрешенных прерываний когда они не нужны, и прочих недоглядов в виде опроса ненужных пинов, то
ничего не случится.
И осциллятор никак не может "пролезть" на Vcc. Проблема видимо в "грязном" напряжении питания после ключевого стаба LM2576, или в топологии ПП.
В последнее время вижу множество поделок "новых русских трассировщиков ПП", в которых линии земля и питание ничем не отличаются от сигнальных. Просто оторопь берёт от таких поделок

Добавление от 09.11.2005 10:01:

Подскажите пожалуйста, как правильно маскировать Порт АВР, когда его пины исползуются в разных процедурах?
Например, у меня есть байт данных, а выводить в порт нужно только два его младших бита (старшие = 0), но при этом не изменять состояние остальных шести битов порта.
Я делаю так: читаю из порта в регистр и делаю OR с выводимым значением. Результат возвращаю в порт. И почему-то иногда! выводится глюк в моих двух битах...

750. Dismon, 09.11.2005 11:14
Xradio
Это утверждение весьма спорно

Конечно все в мире относительно. Однако опыт работы показывает, что так делать очень желательно. Даже при правильной программе.


И осциллятор никак не может "пролезть" на Vcc. Проблема видимо в "грязном" напряжении питания после ключевого стаба LM2576, или в топологии ПП.
В последнее время вижу множество поделок "новых русских трассировщиков ПП", в которых линии земля и питание ничем не отличаются от сигнальных. Просто оторопь берёт от таких поделок


Теоритически не может. Разве что наводить пульсации на линию питания. Кстати, мне не понятно само понятие "линия земли". Наши трассировщики все нафиг заливают землей с 2 сторон, и потому линий земли нет вообще, а линии питания потолще, сами считают ширину в зависимости от тока.



Подскажите пожалуйста, как правильно маскировать Порт АВР

in Rx1,PINx
andi Rx1,0xFC
or Rx1,Rx2
out PORTx,Rx1

И почему-то иногда!

тогда и только тогда, когда ты читаешь из порта единицы в этих 2 младших битах и пытаешься их превратить в 0 командой OR. 1 OR 0 остается 1.

751. Tahoe, 09.11.2005 11:35
Long Dog
Я уже писал тут как-то, но перво-наперво смотри разводку кварца. Там есть вход ( XTAL1 ) и есть выход ( XTAL2 ). Смотри, что бы дорожка от входа до карца был как можно короче, потому как этот вход _высокоомный_. Т.е. наловить на него помеху - как два пальца. Он просто создан для этого. Кстати справедливо и наоборот. Т.е. с выходом ситуация обратная. Т.к. он мощный и "лучит" на частоте кварца, то эта дорожка тоже работает антенной, только уже на передачу. И чем она короче, тем менее эффективна. Но проблемы ЭМИ это уже дело десятое, в твоём случае. Просто знай это и всё. Кстати, остальные дорожке на плате это тоже антенны. Только по ним передаются как правило видеоимпульсы.

Насчёт подтяжек ресета - ИМХО дело десятое. Разница между встроеным 20-50 кОм и внешним 10 кОм резистором не такая уж и большая, ИМХО. И, между прочим, когда вешаешь внешний резистор ты наружу выводишь дорожку, которая по длинне гораздо больше, чем внутренняя. Т.е. ты выводишь отличную антенну для улавливания всякого жамна. Другое дело, что для ISP всё равно её выводить.

Насчёт пульсаций по питанию - забей. Они там всегда будут, в любом цифровом устройстве. На то оно и цифровое. Посмотри хохмы ради что у тебя в компе творится, что ли. У меня АВР нормально работал и при пульсациях около пол-вольта.

Проверить "удачность" разводки подручными средствами можешь так: берёшь отвёртку и водишь/касаешься земли своего устройства. При неудачной разводке будет виснутьресетиться контроллер.

752. Dikoy, 09.11.2005 16:52
Long Dog
так эта индуктивность при нем и стоит, я писал выше lm2576 и питание НЕ батарейное.
Повесь П фильтр на выход источника, должно помоч. У меня ИОН питался от удвоителя - до фильтра белый экран, после - чистая линия

Tahoe
Разница между встроеным 20-50 кОм и внешним 10 кОм резистором не такая уж и большая
А мне что-то по 100к говорили...

753. Long Dog, 09.11.2005 16:52
огромное спасибо всем откликнувшимся!!! есть поле для деятельности
вечерком попробую воплотить полезные советы и потом отчитаться.

Xradio
к новым русским трассировщикам ПП отнести себя ну никак не могу, поскольку диплом инженера-конструктора-технолога РЭА честно получил еще в прошлом столетии, вот только электроника вперед бежит и РЭА-элементы становятся все меньше....

754. Xradio, 09.11.2005 17:48
Dismon
тогда и только тогда, когда ты читаешь из порта единицы в этих 2 младших битах и пытаешься их превратить в 0 командой OR. 1 OR 0 остается 1.
точка. Вот глупец-то... andi Rx1,0xFC это и есть - маска.

Добавление от 09.11.2005 18:02:

Long Dog
сообщи всё же здесь о причине "аномалии" такого поведения АВР. (я их, 2313, питал и прогал "кандиАВРом" при 2.9 вольтах (2 NiCd). Сохраняют работоспособность до разряда 1.8 вольта при 4 мег (кроме записи ЕЕПРОМ - та начинает глючить при 2.3 в)

755. Tahoe, 09.11.2005 18:47
Dikoy
А мне что-то по 100к говорили...

90S8515 datasheet:
RRST Reset Pull-Up Resistor 100-500 kΩ

Mega8 datasheet:
RRST Reset Pull-up Resistor 30-80 kΩ

Правда Ваша, папаша. Это я с Мегой-8 перепутал, давно не брал я в руки шашек...

756. Dikoy, 09.11.2005 22:47
Tahoe
Посмотрел даташит на тини2313
Reset Pull-up Resistor 20-100 k...
I/O Pin Pull-up Resistor 20-100 k...
У них чё, на каждй чип свои номиналы?..

757. Tahoe, 10.11.2005 08:58
Dikoy
Да нет, просто как в любом другом деле - со временем что-то оптимизируют, улучшают. Вот собственно один из примеров - сабж. Уж насколько критичны были 90S8515 к разводке, а МЕГА8 поспокойнее к этому относится. Т.е. топология камушка явно изменилась.

758. Vesel'chak U, 10.11.2005 17:24
Dikoy
Tahoe
Там ещё сложнее - вместо резисторов стоят транзисторы, у которых сопротивление канала зависит от приложенного напряжения, т.к. они являются скорее источниками тока.

759. LazyCamel, 11.11.2005 11:50
Там еще имхо и технология имхо роль имеет
Переходы по техпроцессам 0.5 - 0.35 просто не могут не менять сопротивление пулл-аппов

760. REMBO, 12.11.2005 17:12
Может кому-то ворпос покажется глупыи но все же. Как к микроконтроллеру подключить клавиатуру? Конкретно интерисуют контроллеры Моторолы.

761. Xradio, 12.11.2005 17:38
REMBO
Точно так же, как и к любым другим микроконтроллерам, и даже к микропроцессорам
Для 8-бит AVR, например, есть давнишний пример:
Avr240.asm (найдётся любыми поисковиками)
Уточни задачу. (здесь хорошая традиция "на ты"), ибо всё чаще и чаще задают:
"Как мне подключить кнопки к "Мерседесу", чтобы всё в нём я мог сделать "как Я хочу!...?""

762. REMBO, 12.11.2005 23:53
Xradio
"Как мне подключить кнопки к "Мерседесу", чтобы всё в нём я мог сделать "как Я хочу!...?""

Да это как раз про меня

Этот пример я видел. Насколько я его понял то clock клавы нуно подкл к внешнему прерыванию контроллера а data к любому пину какого либо порта. Прав ли я?
Просто в описаниях некоторых контроллеров все пины какого то определённого порта мона перепрограмировать под прирывания клавиатуры
Вот и думаю как быть?

PS ЖК дисплейчик насколько я понимаю просто подключается к порту (ам) микроконтроллера.

Добавление от 13.11.2005 00:33:

Да ещё один вопрос
Как или через что (какой интерфейс) можно обеспечить связь мк-контроллера допустим с компом, растояние гдето 100-200 метров???

763. Xradio, 13.11.2005 04:20
REMBO
Насколько я его понял то clock клавы нуно подкл к внешнему прерыванию контроллера а data к любому пину какого либо порта. Прав ли я?
Ты имеешь в виду клавиатуру IBM компьютера?
Да, подключается она к микроконтроллеру. Но без программирования, без записанной внутрь микроконтроллера, специальной обслуживающей программы, ты с тем же успехом можешь фтыкать разъём клавиатуры, например, в землю цветочного горшка на подоконнике.
Просто в описаниях некоторых контроллеров все пины какого то определённого порта мона перепрограмировать под прирывания клавиатуры. ?
Понимаемая тобой клавиатура (та, что под пальцами) уже содержит в себе микроконтроллер, который постоянно опрашивает линии строк и столбцов (игра "морской бой"). При нажатии любой кнопки, этот микроконтроллер формирует посылку в компьютер - "скан-код" - или байт...
Как тебе должно быть известно, байт - это число 2 в степени 8, или восемь кокосов и восемь лунок в песке. А неповторяющихся комбинаций укладок кокосов в лунки будет = 255. Значит, передав в компьютер состояние 8 лунок - (есть или нет кокоса), мы можем знать состояние нажатия любой из 255 кнопок. Этим и занимается МК в клавиатуре. Кнопок у нас меньше, но зато есть возможность определять сочетания одновременно нажатых нескольких кнопок. Для примера, попробуй нажать последовательно, удерживая нажатыми, следующие кнопки Ctrl + Alt + Delete






уфф
от и думаю как быть?
Смело! Почитай материалы в сети, купи необходимое оборудование и эл. компоненты. Соедини всё, как оно должно быть.
И однажды ты закричишь посреди ночи: "Урра! Заррработало!" (с) Кот О.Табаков.

764. Dikoy, 13.11.2005 04:49
REMBO
Насколько я его понял то clock клавы нуно подкл к внешнему прерыванию контроллера а data к любому пину какого либо порта. Прав ли я?
Прерывание, как правило, можно настроить на любой пин. Вопрос, надо ли оно? Может проще просто мониторить порт?

PS ЖК дисплейчик насколько я понимаю просто подключается к порту (ам) микроконтроллера.
Всё подключается просто к порту Потом пишется программа и это работает

Как или через что (какой интерфейс) можно обеспечить связь мк-контроллера допустим с компом, растояние гдето 100-200 метров???
По радио. Есть готовые модули, по деньгам выйдет так же, как бухта витой пары.

Ты тз определи сначала Что нужно, для чего, какой бюджет и т.д. А так тебе здесь никто ничего советовать не будет - просто лень гадать

Добавление от 13.11.2005 04:53:

Xradio
Сильно!

765. REMBO, 13.11.2005 14:20
Xradio
ДА действительно сильно но про кокосы это ты сильно загнул, я же не совсем
Про "комповскую" клавиатуру понял, подскажи или покажи как подключаются "некомповские" и какие они бывают.

Мне нужно просто составить схему включения, ворпосы програмирования и бюджета меня просто не интерисуют. Дело в том что я делаю КП, и передомной стоит задача построения функциональной и принципиальной схемы, и точка. Никто проконтроллеры мне не расказывал, да я и не интерисовался. Так что сейчас пытаюсь набратся знаний у вас.

Dikoy
Что касается ТЗ, то мой КП называется так: "Система радиочастотной идентификации с хранением информации на flash памяти". Эта система будет состоять из главного упровляющего "компа" и рассредоточеных ридеров. Дык я проектирую как раз ридер. Вот пока до чего я додумался, ридер состоит из приемопередатчика соответствующей частоты и модуляции, микроконтроллера, контроллера флэш памяти, самой флэш памяти. Только вот никак не могу опредилится как и посредством чего обеспечить связь ридера с удалённой управляющей системой. Если средствами ethernet то как?? чот выбрать для этого, те же вопросы и по радио. Какие готовые модули вы имеете ввиду?

766. Dikoy, 14.11.2005 19:05
REMBO
Если клава не комповая, то сколько кнопок надо?

контроллера флэш памяти,
А это ещё зачем? Никакой контроллер не нужен. Тебе сколько памяти надо?

По теме радио, вот: http://www.atmel.ru/Articles/Atmel09.htm Ещё xemix делает подобные вещи.
А вообще, тут почти всё, что надо http://www.atmel.ru/Articles/Articles.htm

767. REMBO, 14.11.2005 20:41
контроллера флэш памяти,
А это ещё зачем? Никакой контроллер не нужен. Тебе сколько памяти надо?


Препод сказал надо. Значит надо. Я и как раз МК нашел с контроллером флэш.

Тебе сколько памяти надо?
Много

Если клава не комповая, то сколько кнопок надо?
впринципе я не знаю, а что это меняет? Ну например 24. Как будет выглядеть подключение ? Бывают ли готовые клавиатуры, что бы можно было выбрать?
Мой МК
http://www.freescale.com/webapp/sps/site/prod_summar…Id=0162468636K100

768. Dikoy, 15.11.2005 09:53
REMBO
Препод сказал надо. Значит надо. Я и как раз МК нашел с контроллером флэш.
Да не нужен её контроллер. У неё он свой есть. Просто отправляешь/принимаешь данные по какому нибудь стандартному интерфаку и всё.

Много
Не, ну это не разговор... Если килобайты, тут подход один. Если мегабайты, то немного другой, но в целом всё одно.

Как будет выглядеть подключение ?
Поищи поиском "подключение матричной клавиатуры".

Бывают ли готовые клавиатуры, что бы можно было выбрать?
Море. В любом нормальном магазине их куча. Если паять не надо, зайди на chip-dip.ru и подбери

769. Xradio, 18.11.2005 15:32
Расскажите лучше, как в АВР вывалиться из прерывания в нужное место?
Часто не нужно обрабатывать прерывание немедленно, а сама процедура потребует сохранения множества регистров в стеке, что напрягает...
Я вот что придумал. По адресу в векторе просто ставить флаг и ретироваться, а далее, в основном цикле (если он конечно есть), опознавать этот флаг, делать чо надо, стирать его и... всё пожалуй.
И, если не трудно, подскажите, какие юзеровские флаги есть в мелких АВРах? я только "Т" пользую. И можно ли в этом качестве пользовать младшие регистры, которые обычно "не любят"?

770. Leka, 18.11.2005 15:44
Xradio
ЕМНИП: можно просто запретить соответствующие аппаратные прерывания, а в проге проверять соответствующие флаги прерывания.

771. Xradio, 18.11.2005 15:50
Leka
А RETI разве их не стирает? Или ты имеешь в виду бит разрешения данного прерывания?

772. Leka, 18.11.2005 16:07
Xradio
Или ты имеешь в виду бит разрешения данного прерывания?
Этим битом запретить, а проверять другой (флаг). Данное прерывание запрещено --> прерывания - нет, данный флаг не сбрасывается.

773. Казан, 29.11.2005 09:38
Прошу тех (и только тех), кто имеет практический опыт, помочь определиться в выборе конкретной микросхемы - PIC, AVR или что то иное.
Интересует наиболее помехозащищенная микросхема, вернее - помехоустойчивая.
Быстродействие совершенно не волнует, может быть медленная - хоть от 100 кгц.
Но с помехами очень напряженно - питание от плохой электросети, возможны сбои питания, импульсные короткие выбросы, импульсные наводки и пр. Поэтому нужен именно ПРАКТИЧЕСКИЙ совет. На сайтах производителей, ясное дело, ничего на эту тему нет и быть не может, в смысле честного сравнения с конкурентами...
Бывают ли с высокопороговой логикой - вольт 12, чтобы облегчить борьбу с помехами?
Какие еще параметры интересуют - внутренняя перепрограммируемая постоянная память для данных - не менее 1 килобайта,
примерно килобайт 8-10 такой же памяти для программы, ОЗУ может быть небольшое совсем, обязательно ДИП корпус - для упрощения разводки платы и для установки в сокетке. Побольше ножек, работающих на _выход_ - чтобы с внешними регистрами поменьше заморачиваться. Никакие ЦАП-АЦП, и прочие навороты не интересуют, выходы и входы нужны лишь логические. Ну, и чтобы поменьше было мороки с программатором, вроде есть такие, что прямо к СОМ порту через простейший переходник можно подключать?
Да, еще - заливка программы и данных предполагается только в автономном режиме, т.е. не в устройстве, где будет использоваться микросхема (там очень "грязно" во всех отношениях). Желательно - не однократно программируемые.
Прошу прощения за развернутый "чайниковый" вопрос - я действительно в _этой_ области полный чайник, но когда то надо начинать учиться дальше...

774. Dikoy, 29.11.2005 10:10
Казан
Бывают ли с высокопороговой логикой - вольт 12, чтобы облегчить борьбу с помехами?
А это не показатель.
Я не сравнивал, но рядом с вертолётным движком мой девайс на АВР работал нормально. Причём на предельной частоте.
В остальном - ATmega88 and ATmega168 - твой выбор Все АВР заливаются "через СОМ порт" и имеют ФЛЕШ как для программ, так и для данных. А АЦП и прочее, это сейчас в любом мк навёрнуто.

775. m16, 29.11.2005 10:48
Казан
имхо какой бы не применялся проц при не грамотном монтаже (разводка РСВ, фильтрация питания , экранировка и тд ) Ваше устройство устойчиво работать не будет.
почитайте эту статью , весьма полезна http://www.caxapa.ru/faq/emc_immunity.html

776. Xradio, 29.11.2005 10:58
Казан
Напрасно так усложнять требования к микроконтроллеру... Всё решаемо. Помехи по цепям питания чистятся стабилизатором + LС + полное экранирование в самых страшных условиях помех. Обеспечив резервное питание МК от батареи, оснастив его супервизором, а в программе задействовав watchdog timer, можно вообще забыть о проблемах надёжности.
Импульсные помехи по интерфейсным цепям можно почистить RC цепочками + дополнительное понижение их импеданса, экранирование + опторазвязка.

777. Казан, 29.11.2005 11:56
цитата:
Dikoy:
...ATmega88 and ATmega168 - твой выбор.
Спасибо! Рою литературу. Пока нашел на www.atmel.ru море статей на русском(!) Но больше по ATmega89 и ATmega169 почему то...
Это оно, или не очень?
Что касается правильного монтажа для борьбы с помехами, батарйки или аккумулятора, стабилизатора, фильтров и т.п. - это всё ясно, так я и делал всегда. Но пока что - на рассыпухе, с микроконтроллерами хочу попробовать впервые. Там у меня проблема - очень много (под сотню) выходных проводов, и все - для управления силовыми ключами в грязной электросети... Чисто емкостных наводок будет выше крыши... Оптроны, боюсь, тоже не спасут - суммарная проходная емкость будет ого-го.

Добавление от 29.11.2005 12:06:

m16:
Спасибо за ссылку! Вообще то я в промэлектронике уже четверть века работаю, так что этот вопрос мне хорошо знаком. С киловольтными импульсами в электросети, как с новостью для себя, столкнулся еще году в 1980-м
Но вот и в этой статье настораживающие фразы есть: "Развязка внешних сигналов при помощи оптронов тоже слывет хорошим средством повышения помехоустойчивости, но на самом деле не является надежной защитой от НП"...
Т.е. выбор "правильного" микропроцессора, похоже всё таки актуален в моем случае?

778. Xradio, 29.11.2005 12:33
Казан
Оптроны, боюсь, тоже не спасут - суммарная проходная емкость будет ого-го.
"ого-го" - это скоко? "пикушки"? Тау цепи при R=1kOm. (послед. с портом - входом) и С вх.?
i]проблема - очень много (под сотню) выходных проводов, и все - для управления силовыми ключами в грязной электросети... [/i]
"Ферритовые бусы" разорвут эти "антенны" на сегменты, которые не смогут излучать.

779. Казан, 29.11.2005 14:12
цитата:
Xradio:
"ого-го" - это скоко? "пикушки"?
Да если бы так. У силовых симисторов сколько проходная емкость? Вероятно - пик 10, Умножаем на 100 - получаем целую тыщу

780. D3d, 29.11.2005 17:34
Нужен DC/DC преобразователь в широком диапазоне входных напряжений 8-26В для автомобилей. А на выходе несколько стабилизированных 3.3, 4 и 5 вольт. 0.5, 1, 0.1 А соответственно. Есть соображения?

781. Dikoy, 29.11.2005 17:56
Казан
Но больше по ATmega89 и ATmega169 почему то...
Это оно, или не очень?
Вот если честно, не помню...
Вообще, смотри ATmega8 и ATmega16, по этим точно инфа есть. Просто они на поколение младше, чем ATmega88 и ATmega168. Эти то вообще самые последние. А разница только в более скоростном АЦП и бОльшей частотой. В остальном эти МК идентичны.

782. yxo, 29.11.2005 19:01
У меня такой вопрос: есть микроконтроллер на ядре C51, Атмеловский (AT89C51SND1C). Так вот. Если я использую, например, среду Keil uVision для отладки и компиляции программ под этот контроллер, будет ли код корректный? Меня смущает то, что когда я создаю проект нет выбранного этого контроллера. Или же выбор микроконтроллера в среде разработки это лишь упрощение программироваия в том смысле, что мне не придется, дефайнить регистры и писать стандартный скелет (настройку) для данного контроллера? Или есть еще какие-нибудь нюансы?

783. Казан, 30.11.2005 04:58
цитата:
Dikoy:...на поколение младше, чем ATmega88 и ATmega168. Эти то вообще самые последние..
Ясно... Поэтому то их и в ташкентских магазинчиках еще нету
А 89-е и 169-е есть, и недорогие зато!
Учу матчасть, много матерьяла уже скачал. Но пока малость не въеду в тему - совсем глупых вопросов задавать здесь не буду

784. VBKesha, 10.12.2005 21:57
Возникла надобность сделать одностороннюю передачу по IR. В голове есть идея использовать UART на низкой скорости, но сам я с IR не работал может есть какие грабли или готовые модули?

785. Chudik, 10.12.2005 22:26
VBKesha
Z8 имеет на борту контроллер IrDA. Тот же ZiLOG выпускает и IR приёмо-передатчики. Но можно, очевидно, и другие использовать.

786. VBKesha, 10.12.2005 22:57
Chudik
Забыл сказать что для этого устройства выбран ATTiny2313, выбирал не я так что думаю над ним. И ИМХО IrDA это довольно большой стандарт а тут надо передать пару байт которые примет другой контроллер и выполнит одно из задуманных действий.
Да расстояние большие не надо.

787. Zman, 10.12.2005 23:39
VBKesha:

...одностороннюю передачу по IR. ....готовые модули?

Готовые модули для приемника - типа TSOP1736, TSOP1836 и другие для бытовой аппаратуры (внутри усилитель, АРУ, полосовой фильтр, детектор итд), на выходе дает 0/1 после детектора

передатчик - почти любой IR светодиод с ключом на транзисторе.
тебе нужно генерить на нем сигнал с несущей частотой приемника (36..38кГц)модулированный последовательностью 0/1

обязательно CRC!

788. serg28serg, 10.12.2005 23:46
VBKesha
Возникла надобность сделать одностороннюю передачу по IR. В голове есть идея использовать UART на низкой скорости, но сам я с IR не работал может есть какие грабли или готовые модули?
Есть готовые модули с полностью интегрированные,такие в USB-IRDA стоят (получаешь и предаешь готовые ТТЛ уровни), только если односторонняя передача, то значит и протокол должен быть свой, и если с РС то и софт свой.

789. Xradio, 29.12.2005 15:31
6-ти гирляндная ёлка на AVR Для управления триаками обязательно использовать оптосимисторы без контроля перехода через ноль (6-PIN DIP RANDOM-PHASE
OPTOISOLATORS TRIAC DRIVER OUTPUT
MOC3010M MOC3011M MOC3012M MOC3020M MOC3021M MOC3022M MOC3023M)
код:

.include "2313def.inc"
;Программа шестиканальной ёлки
.cseg
.equ G1 =PB0
.equ G2 =PB1
.equ G3 =PB2
.equ G4 =PB3
.equ G5 =PB4
.equ G6 =PB5
.def a =R16
.def aa =R17
.def aaa =R18
.def acc =R19
.def ac =R20
.def act =R21
.def buf =r22
;.def dn =R0
.EQU RESET =$000
.EQU MAIN =$020
; .org 0
.ORG RESET
rjmp init
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
.ORG MAIN
init: ldi a, 0xDF
out SPL, a ;
ldi a, 255 ; все выходы
out DDRB, a ;
ldi a, 255 ; все выходы
out DDRD, a ;
ldi a, 0 ;
out PORTB, a ;
ldi a, 0x80 ;
out SREG, a ;
ldi a, 0b00000000 ;INT0,INT1 Off
out GIMSK, a ;
ldi a, 0b00100000 ; idle mode
out MCUCR, a ;
ldi a,0b10000000 ; INT overflow TC1
out TIMSK,a
sei
;start:
MERTZANIE:
ldi buf,0b00111111 ;all G on
ldi a,0b00000100 ;/256
out TCCR1B,a ;startTC1
ldi aa, $62 ;10mS FF63h 4MHz/256 AEh- 5mS
ldi a,$FF
out TCNT1H,a
out TCNT1L,aa
ldi ac,0b00111111 ;byte for inversion buf
ldi acc,8
loop1:
ldi aaa,255
loop255:
rcall TC1
out PORTB,buf
eor buf,ac
dec aaa
brne loop255
inc aa
dec acc
brne loop1
; rjmp merzanieUP
SWITCHROL:
ldi aa, $0 ;131mS 4MHz/256
ldi a,$F8
out TCNT1H,a
out TCNT1L,aa
ldi aaa,5
swrol: ldi buf,0b00000111
out PORTB,buf
rcall TC1
ldi buf,0b00001110
out PORTB,buf
rcall TC1
ldi buf,0b00011100
out PORTB,buf
rcall TC1
ldi buf,0b00111000
out PORTB,buf
rcall TC1
ldi buf,0b00110001
out PORTB,buf
rcall TC1
ldi buf,0b00100011
out PORTB,buf
rcall TC1
;ldi act,25
;add aa,act
inc a
dec aaa
brne swrol
INCDOWN:
ldi buf,0b00000111
out PORTB,buf
rcall TC1
ldi buf,0b00001111
out PORTB,buf
rcall TC1
ldi buf,0b00011111
out PORTB,buf
rcall TC1
ldi buf,0b00111111
out PORTB,buf
rcall TC1
push a
push aa
rcall SLOWBRI
pop aa
pop a
ldi buf,0b00111111
out PORTB,buf
rcall TC1
ldi buf,0b00011110
out PORTB,buf
rcall TC1
ldi buf,0b00001111
out PORTB,buf
rcall TC1
SWITCHROR:
ldi aaa,5
swror: ldi buf,0b00000111
out PORTB,buf
rcall TC1
ldi buf,0b00100011
out PORTB,buf
rcall TC1
ldi buf,0b00110001
out PORTB,buf
rcall TC1
ldi buf,0b00111000
out PORTB,buf
rcall TC1
ldi buf,0b00011100
out PORTB,buf
rcall TC1
ldi buf,0b00001110
out PORTB,buf
rcall TC1
;ldi act,25
;sub aa,act
dec a
dec aaa
brne swror
ldi buf,0b00000111
out PORTB,buf
rcall TC1
ldi buf,0b00000011
out PORTB,buf
rcall TC1
ldi buf,0b00000001
out PORTB,buf
rcall TC1
ldi buf,0b00000000
out PORTB,buf
rcall TC1
rcall TC1
rcall TC1
rcall TC1
;ldi buf,0b00111111
;out PORTB,buf
rcall TC1
rcall TC1
rcall TC1
rcall TC1
PEREMEJ: ldi aaa,25
pereloop: ldi buf,0b00101010
out PORTB,buf
rcall TC1
ldi buf,0b00010101
out PORTB,buf
rcall TC1
dec aaa
brne pereloop
;rcall SLOWBRI
TOOLIN: ldi aaa,5
retrytoo: ldi aa, $BD ;250mS 4MHz/256
ldi a,$F0
rcall TC2
ldi acc,2
tooloop1: ldi buf,0b00001001
out PORTB,buf
rcall TC2
ldi buf,0b00010010
out PORTB,buf
rcall TC2
ldi buf,0b00100100
out PORTB,buf
rcall TC2
dec acc
brne tooloop1
ldi buf,0b00001001
out PORTB,buf
rcall TC2
rcall TC2
ldi aa, $F2 ;130mS 4MHz/256
ldi a,$FC
ldi acc,2
tooloop2:
ldi buf,0b00100100
out PORTB,buf
rcall TC2
ldi buf,0b00010010
out PORTB,buf
rcall TC2
ldi buf,0b00001001
out PORTB,buf
rcall TC2
dec acc
brne tooloop2
ldi buf,0b00100100
out PORTB,buf
rcall TC2
rcall TC2
ldi aa, $BD ;250mS 4MHz/256
ldi a,$F0
ldi acc,2
tooloop3: ldi buf,0b00100100
out PORTB,buf
rcall TC2
ldi buf,0b00001001
out PORTB,buf
rcall TC2
ldi buf,0b00010010
out PORTB,buf
rcall TC2
dec acc
brne tooloop3
ldi buf,0b00010010
out PORTB,buf
rcall TC2
rcall TC2
ldi aa, $F2 ;130mS 4MHz/256
ldi a,$FC
ldi acc,2
tooloop4:
ldi buf,0b00001001
out PORTB,buf
rcall TC2
ldi buf,0b00100100
out PORTB,buf
rcall TC2
ldi buf,0b00010010
out PORTB,buf
rcall TC2
dec acc
brne tooloop4
ldi buf,0b00001001
out PORTB,buf
rcall TC2
dec aaa
brne netoo
rjmp Ten
netoo: rjmp retrytoo

Ten: ldi aaa,10
retryten:ldi aa, $BD ;250mS 4MHz/256
ldi a,$F0
ldi acc,8
ldi buf,0b1111111
rcall TC2
tenloop1:
out PORTB,buf
rcall TC2
lsr buf
dec acc
brne tenloop1
rcall TC2
ldi aa, $F2 ;60mS 4MHz/256
ldi a,$FC
ldi acc,8
sec
ldi buf,0b00000000
tenloop2:
out PORTB,buf
rcall TC2
rol buf
dec acc
brne tenloop2
dec aaa
brne retryten
rjmp MERTZANIE

SLOWBRI: ldi aa, $63 ;10mS 4MHz/1024
ldi a,$FF
ldi aaa,255
slowloop:
out PORTB,buf
eor buf,ac
rcall TC1
dec aaa
brne slowloop
ret
TC1:
sleep
out TCNT1H,a
out TCNT1L,aa
ret
TC2:
out TCNT1H,a
out TCNT1L,aa
sleep
ret


790. joptpd, 31.12.2005 18:29
живой еще кто есть?

скажите че ето значит
гугл не знает
pointers are to different memory classes

unsigned int min=8850, max=10800 ;
unsigned char buffer[7];

в обработчике прерывания таймера0 делаю следущее

if UP {
min=min+50;
printf(buffer, "%u", min);
lcd_puts(buffer);
}

вот в строке с принтф такая ошибка
если же я беру спринтф то все нормально но памяти сжирает больше 2кб

вот хелп из компилятора кодевинжин

void printf(char flash *fmtstr [ , arg1, arg2, ...])

outputs formatted text, using putchar, according to the format specifiers in the fmtstr string.
The format specifier string fmtstr is constant and must be located in FLASH memory.
The implementation of printf is a reduced version of the standard C function.
This was necessary due to the specific needs of an embedded system and because the full implementation would require a large amount of FLASH memory space.
The format specifier string has the following structure:

%[flags][width][.precision][l]type_char

The optional flags characters are:
'-' left-justifies the result, padding on the right with spaces. If it's not present, the result will be right-justified, padded on the left with zeros or spaces;
'+' signed conversion results will always begin with a '+' or '-' sign;
' ' if the value isn't negative, the conversion result will begin with a space. If the value is negative then it will begin with a '-' sign.

The optional width specifier sets the minimal width of an output value. If the result of the conversion is wider than the field width, the field will be expanded to accommodate the result, so not to cause field truncation.
The following width specifiers are supported:
n - at least n characters are outputted. If the result has less than n characters, then it's field will be padded with spaces. If the '-' flag is used, the result field will be padded on the right, otherwise it will be padded on the left;

0n - at least n characters are outputted. If the result has less than n characters, it is padded on the left with zeros.

The optional precision specifier sets the maximal number of characters or minimal number of integer digits that may be outputted.
For the 'e', 'E' and 'f' conversion type characters the precision specifier sets the number of digits that will be outputted to the right of the decimal point.
The precision specifier always begins with a '.' character in order to separate it from the width specifier.

The following precision specifiers are supported:
none - the precision is set to 1 for the 'i', 'd', 'u', 'x', 'X' conversion type characters. For the 's' and 'p' conversion type characters, the char string will be outputted up to the first null character;
.0 - the precision is set to 1 for the 'i', 'd', 'u', 'x', 'X' type characters;
.n - n characters or n decimal places are outputted.
For the 'i', 'd', 'u', 'x', 'X' conversion type characters, if the value has less than n digits, then it will be padded on the left with zeros. If it has more than n digits then it will not be truncated.

For the 's' and 'p' conversion type characters, no more than n characters from the char string will be outputted.
For the 'e', 'E' and 'f' conversion type characters, n digits will be outputted to the right of the decimal point.
The precision specifier has no effect on the 'c' conversion type character.

The optional 'l' input size modifier specifies that the function argument must be treated as a long int for the 'i', 'd', 'u', 'x', 'X' conversion type characters.

The type_char conversion type character is used to specify the way the function argument will be treated.
The following conversion type characters are supported:
'i' - the function argument is a signed decimal integer;
'd' - the function argument is a signed decimal integer;
'u' - the function argument is an unsigned decimal integer;
'e' - the function argument is a float, that will be outputted using the [-]d.ddddd e[-]dd format
'E' - the function argument is a float, that will be outputted using the [-]d.ddddd E[-]dd format

'f' - the function argument is a float, that will be outputted using the [-]ddd.ddddd format
'x' - the function argument is an unsigned hexadecimal integer, that will be outputted with lowercase characters;
'X' - the function argument is an unsigned hexadecimal integer, that will be outputted with with uppercase characters;
'c' - the function argument is a single character;
's' - the function argument is a pointer to a null terminated char string located in SRAM;

'p' - the function argument is a pointer to a null terminated char string located in FLASH;
'%' - the '%' character will be outputted.

void sprintf(char *str, char flash *fmtstr [ , arg1, arg2, ...])

this function is identical to printf except that the formatted text is placed in the null terminated character string str.

использую встроеную библиотеку для работы с жк

791. DrAG0n, 31.12.2005 19:40
Надо писать так:

volatile unsigned int min=8850, max=10800 ;
unsigned char buffer[7];

в обработчике прерывания таймера0 делаю следущее

if UP {
min=min+50;
sprintf(buffer, "%u", min);
lcd_puts(buffer);
}

792. Tahoe, 31.12.2005 20:29
joptpd
Грубо говоря:
printf() - выводит аргумент на устройство по умолчанию, т.е. на экран
sprintf() - выводит аргумент туда, куда сказано, а именно в файл, потому сначала укажи, куда именно выводить

P.S. Ты охренел, 31 вечером такой фигнёй заниматься? Тебе что, выпить не с кем?
Хошь, я за тебя рюмочку через часок-другой хряпну?

793. Chudik, 31.12.2005 20:58
Блин, ни фига себе - вызывать printf в прерывании

794. joptpd, 31.12.2005 21:32
Tahoe
да мне пох празники я лучше за компом посижу
DrAG0n
ну спринтф работает
но оно сжирает почти всю память

Chudik
че делать то?
почему нельзя из прерывания вызывать?

795. Chudik, 01.01.2006 00:55
joptpd
почему нельзя из прерывания вызывать?
Потому, что это большая функция, занимающая долгое время. А на время работы прерывания обычно все остальные прерывания запрещаются. В результате система может вести себя достаточно непредсказуемо. Особенно, если не знаешь, что использовано в этой функции.

Выстави флаг о том, что это прерывание случилось и обработай этот флаг в основном цикле программы.

796. DrAG0n, 01.01.2006 01:27
sprintf - вывод в строку. fprintf - в файл.

Добавление от 01.01.2006 01:27:

printf - в stdout

797. joptpd, 01.01.2006 03:07
Chudik
и как ето сделать?

код:
volatile unsigned int min=8850, max=10800 ;
unsigned char buffer[10];


interrupt [TIM0_OVF] void timer0_ovf_isr(void){
TCNT0=0x3D;

if (PIND.5==0) {
min=min+50;
sprintf(buffer, "%u", min);
lcd_gotoxy(0,0);
lcd_puts(buffer);
}

if (PIND.6==0) {
max=max-50;
sprintf(buffer, "%u", max);
lcd_gotoxy(0,0);
lcd_puts(buffer);
puts(buffer);
}

}


void main(void)
{

PORTB=0x00;
DDRB=0xF7;

PORTD=0x00;
DDRD=0x1E;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
TCCR0=0x05;
TCNT0=0x3D;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;

lcd_init(16);

#asm("sei");
while (1);

}


при симуляции в протеусе при нажатии на кнопку она как бы 3 раза нажимаеца

в оригинальной прошивке все работает нормально
тока там нет принтф
там какой то свой файл для работы с жк
все происходит имено в прерывании таймера 0
даже запись в память
в главном цикле ниче нет

может уж посоветуете нормальную утилиту для работы с жк и и2с?

798. Chudik, 01.01.2006 04:09
joptpd
и как ето сделать?
Элементарно, Ватсон.

код:
volatile unsigned int min=8850, max=10800 ;
unsigned char buffer[10];
insigned char flag = 0;


interrupt [TIM0_OVF] void timer0_ovf_isr(void){
TCNT0=0x3D;

if (PIND.5==0) {
min=min+50;
flag |= 1;
}

if (PIND.6==0) {
max=max-50;
flag |= 2;
}

}


void main(void)
{

PORTB=0x00;
DDRB=0xF7;

PORTD=0x00;
DDRD=0x1E;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
TCCR0=0x05;
TCNT0=0x3D;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;

lcd_init(16);

#asm("sei");
while (1)
{
switch(flag)
{ case 1: sprintf(buffer, "%u", min);
flag &= ~1;
flag |= 4;
break;
case 2: sprintf(buffer, "%u", max);
flag &= ~2;
flag |= 0xC;
break;
case 3: sprintf(buffer, "%u\n%u", min, max);
flag &= ~3;
flag |= 0хС;
break;
default: break;
}
if (flag & 4)
{
lcd_gotoxy(0,0);
lcd_puts(buffer);

if(flag & 8)
puts(buffer);

flag &= ~0xC;
}
}

}

Единственно, что если в твоём случае при нажатии двух кнопок у тебя на lcd выводиттся оба значения, а на stdio только max. А в моём случае при этом оба значения выводятся в оба порта. Если надо именно как у тебя, то надо немного изменить - добавить вызов ещё одной функции.

799. Tahoe, 01.01.2006 18:40
joptpd
И небольшой совет. Приучись сразу - никаких цифр в .с файле. Не надо писать типа "if( PIND.5==0 )" или "case 1, case 2". Дай этим 1,2,3... осмысленные названия ( #define BUTTON_0 1 ) и пользуйся только этими названиями. Иначе уже сейчас не совсем удобно, но когда через пол-года полезешь править этот файл - либо сам свихнёшься, либо разбираться по времени будешь столько же, сколько заново переписать всё.

800. joptpd, 01.01.2006 20:10
Tahoe
да в оригинале оно было так

#define DLEN_ON sbi(PORTD,PD3)
#define DATA_ON sbi(PORTD,PD4)
#define DLEN_OFF cbi(PORTD,PD3)
#define DATA_OFF cbi(PORTD,PD4)
#define CLK {sbi(PORTD,PD2);delay(1);cbi(PORTD,PD2);}
#define UP ((PINB & 0x01)!=0x01)
#define DOWN ((PIND & 0x20)!=0x20)
#define MENU ((PIND & 0x40)!=0x40)
#define sint uint8_t

мне пока далеко еще до такого

801. Chudik, 01.01.2006 22:40
Да, совет Tahoe абсолютно правилен. Это в маленькой программе у тебя всё рядышком и ты можешь посмотреть, из-за чего у тебя стоит та или иная единичка. А когда у тебя, например, какой-то набор флагов используется в нескольких модулях программы и в разных файлах, то введение дефайнов существенно облегчает жизнь.

Добавление от 01.01.2006 22:43:

Кстати, программка Xradio в этом отношении совершенно жуткая. Мало того, что куча непонятных двоичных цифирек, так ещё и совершенно непроизводительная трата памяти программ.

802. lmaks, 02.01.2006 00:01
Chudik

joptpd

Рекомендуется так же аккуратно работать с флагами.
То есть запрещать прерывания при установке флагов или сбросе.
CLI();
flag &= ~3;
SEI();
В противном случае в процессе выполнения операции (она же не за один такт выполняется) может произойти прерывание в котором так же этот флаг будет устанавливаться - что приведет к потере информации.

803. Chudik, 02.01.2006 00:30
lmaks
Вообще говоря, ты прав. Единственно, что здесь уже смотришь на логику работы программы. В обсуждаемом примере достаточно понятно, что вряд ли пользователь нажмёт кнопку раньше, чем увидит число на экране. Т.е. учёт реальных соотношений входных сигналов и работы программы может явиться своеобразным фильтром, позволяющим не делать лишних операций.

Кстати, вот за что люблю DSP - в них фраза "(она же не за один такт выполняется)" неверна Т.е. даже в случае сравнимых времён прихода прерываний и реакции на них можно не заботиться о запрете прерываний.

Но сейчас, отвечая, я понял одну ошибочку в моём написании модуля. Работа с флагами несколько неправильна. Должно быть так:

код:
while (1)
{
if (flag & 1)
{ flag &= ~1;
sprintf(buffer, "%u", min);
flag |= 4;
}
if (flag & 2)
{ flag &= ~2;
sprintf(buffer, "%u", min);
flag |= 0xC;
}

if (flag & 4)
{
lcd_gotoxy(0,0);
lcd_puts(buffer);

if(flag & 8)
puts(buffer);

flag &= ~0xC;
}
}

Именно потому, что младшие биты флага устанавливаются в прерывании и, вообще говоря, независимы, а реакция на это прерывание достаточно длительна, два if в данном случае работают более правильно, чем switch.

804. joptpd, 02.01.2006 13:28
а чего все ети цифры значат
1 2 4 8?
а flag &= ~0xC; ?

каков принцип? я догадываюсь но может совсем неправильно

805. DrAG0n, 02.01.2006 20:33
Кто-нибудь работал с микроконтроллерами Samsung? Только что видел рекламу - говорят, что они значительно дешевле аналогов.

806. Chudik, 02.01.2006 21:16
joptpd
а чего все ети цифры значат
1 2 4 8?

Кхе... Ээээ... О двоичном счислении слышал, мил человек? О том, что положение бита в байте можно описать значением его веса?


а flag &= ~0xC; ?
значок ~ означает инверсию значения.
А
a &= b;
заменяет выражение
a = a & b;
Вообще-то это стандарт языка С. Ты читал какую-нибудь книжку по С? Там об этом пишут обычно.

Добавление от 02.01.2006 21:29:

DrAG0n
Только что видел рекламу - говорят, что они значительно дешевле аналогов.
И ради Бога, не читайте за обедом советских газет!!!
Реклама. Да, наверняка есть некоторые контроллеры дешевле аналогов. Но при этом у них и возможности минимальные и, возможно, даже меньше, чем у аналогов. А стоит захотеть чего-то более сложного, как всё меняется. Посмотри список периферии, сравни с тем, что используешь. Посмотри, какие средства разработки для них есть....
Это, знаешь, как у Альтеры. Была как-то реклама - у нас есть самые дешёвые CPLD. Цены начинаются от $1.20 в единичных экземплярах. У Xilinx: "Самые дешёвые FPGA - всего $3.50 за Спартан 3"
Смотришь, думаешь - ни хрена себе. Класс!!! Начинаешь прикидывать и оказывается, что твой не очень-то и сложный дизайн получается далеко не таким дешёвым.

807. joptpd, 03.01.2006 01:13
Chudik
ну я не до такой степени тупой
я догадывался об етом

и операции знаю
а почему имено 0xC?
ето же полубайт

тоесть я так понял
смысл твоих действий такой

срабатывает прерывание
там определяеца какое то действие внешнее
в моем случае нажатие на кнопку
в переменую флаг пишеца один бит

в главном цикле тупо проверяем если бит норме 1 установлен то выполняем много действий которые в прерывании выполнять нежелатеьльно

так?

если да
то какие действия надо выполнять в прерывании а какие лучше в главном цикле

808. Chudik, 03.01.2006 02:11
joptpd
ну я не до такой степени тупой
я догадывался об етом

Ну... когда ты стал такие вопросы задавать, я даже растерялся...


а почему имено 0xC?
ето же полубайт

Ну правильно. Посмотри на программу. Сначала мы обнуляем флаг, выставленный прерыванием, а потом используем незадействованые биты для последующего вывода на lcd и в стандартный порт вывода. Если бы у тебя в обоих случаях выводилось бы на оба порта, то хватило бы одного бита. Впрочем, и сейчас может хватить, если использовать немножко другой алгоритм обработки флага. Можешь сам прикинуть .

в главном цикле тупо проверяем если бит норме 1 установлен то выполняем много действий которые в прерывании выполнять нежелатеьльно
так?

Угу, именно так.

какие действия надо выполнять в прерывании а какие лучше в главном цикле
В прерывании то, что выполняется быстро. Минимальная обработка входных данных. В идеале буквально пару операций. А в главном цикле всё остальное.
Конечно, могут быть разные варианты. Но я лично пытаюсь придерживаться такого распределения. Хотя в последнем проекте приходилось делать и более сложные вещи.

P.S. Я тебя очень прошу, пиши грамотнее. Я очень не люблю ставить замечания.

809. Stam, 05.01.2006 17:35
Помогите начинаюшему. please!
В "кроватку" AT89C5216 (PLCC44 корпус) готового проэкта "водрузил" микро ATmega8515-16JI(тоже PLCC44).
и пытаюсь "вдохнуть в него жизнь".
Ноги функционально и есно колличественно подходят "один в один" - сравнил Data Sheet.
Питание +5в; земля; и кварц 7,3728 Мгц с кондерами на 27пф- уже имеются на плате.
Супервайзэр поставил - MAX 802.
А микро запускаться не хочет - тактовая частота на XTAL отсутствует.
Как быть?

810. Pjetr, 05.01.2006 17:47
Stam

В Мегах, насколько я помню, по умолчанию fuse биты сконфигурированы на использование внутреннего генератора 1 МГц.
Перешей фьюзы на внешний генератор (прочитай внимательно в даташите значение бита CKOPT)..
Ну и RESET проверь на всякий случай.

811. serg28serg, 05.01.2006 18:35
Stam

Все нюансы перехода с первого "AT89C5216 (PLCC44 корпус) готового проэкта" на другой кристалл, с другой системой команд, надеюсь, учтены.

812. Dikoy, 07.01.2006 18:35
Вопрос, конечно, глупый, но никто в сетке не встречал библиотек или примеров по работе с термометром DS-1624? А то у них с распространённым DS-1621 протоколы вроде разные, насколько я понял...
Для AVR и желательно на С.
А то самому влом думать...

813. Stam, 08.01.2006 08:17
Большое спасибо за участие. но проблема в том. что мой программатор AVR ISP .видя. наверно.что микро не
генерит."ругается". мол частота программирования должна составлять 1/4 от тактовой и установи как следует. Т.О. нет возможности перешить фьюзы.потому что микро не генерит. а не генерит потому что
не установлены правильно фьюзы. Какой то замкнутый круг, а?
Help me please!

814. m16, 08.01.2006 10:45
Stam
возможно у вас фузы прошиты на внешнее тактирование-распространенная ошибка. делаем следующее: ногу XTAL2 проца программатора AVR ISP соединяем с ногой XTAL1 ATmega8515-16JI. и шьем фузы на внешний кварц.

815. Stam, 09.01.2006 12:56
Спасибо.ребята.сделал как посоветовал m16 и все пошло на "ура"!!!!

816. Vesel'chak U, 17.01.2006 13:31
Что-то никак не соображу, может кто подскажет, как в ассемблере (IAR) при резервировании данных вставить данные из файла?
Т.е.

DB #include <file.h>

Что-то типа того.
Очень не хочется вставлять все эти коды в текст основной программы.

817. Chudik, 18.01.2006 01:24
Vesel'chak U
Может просто в файле перед этими данными указать DB
Если он используется и для С и для асма, то придётся подумать, как сделать условную компиляцию, понятную обоим.

818. Vesel'chak U, 18.01.2006 04:36
Chudik
Да я могу и файл дополнительный сделать, и этот исправить, т.к. на C всё равно не потянет - быстродействия не хватает. Наверное раз в 5 хуже получается, чем на ассемблере.

819. Chudik, 18.01.2006 04:49
Vesel'chak U
на C всё равно не потянет - быстродействия не хватает. Наверное раз в 5 хуже получается, чем на ассемблере.
Зато алгоритм проще отлаживать
А может С с ассемблерными вставками в критических местах? Я бы прежде всего посмотрел именно в эту сторону. Причём вставки делать постепенной заменой с условной компиляцией. Да ещё и все h файлы не надо перерабатывать.

820. Jelsay, 18.01.2006 07:07
Есть язык который занимает промежуточное положение между асмом и сишняком - forth - люди говорят что целевой компилятор на нём под любой контроллер пишется самостоятельно за пару дней!

821. Chudik, 18.01.2006 07:23
Jelsay
НЕТ!!!! Только не forth!!!!
Фигню тебе сказали. Forth - это интерпретатор со всеми вытекающими отсюда последствиями. Достаточно быстродействующий за счёт того, что всё лежит на стеке. Но "обратная польская запись"... Никому не пожелаю работать на этом языке, если есть альтернатива.

822. Tahoe, 18.01.2006 08:25
Vesel'chak U
А почему не подходит #ifdef и асм-вставки? Это ж наверное первое, что пришло в голову?

823. Jelsay, 18.01.2006 08:47
Chudik - но он прощё чем асм?
Мне говорили что при целевой компиляции он по быстродействию не уступает асму и ещё привлекает возможность самому написать ЯВУ для контроллера "за пару дней"

http://rema.44.ru/about/persons/dobrinin/papers/dmr2005.doc
вот нашел статейку о роботах на ATMega128 со встроенной ФОРТ-системой - там форт хвалят.

824. joptpd, 18.01.2006 09:05
ява для мега 8 уже есть

825. Tahoe, 18.01.2006 09:31
Jelsay
Если б всё определялось только критерием "быстрее/медленнее"...
Стандартная ситуация: ты отдал устройство, а через пол-года надо что-то поправить в прошивке. И вот ты начинаешь разбираться в написаном...

А насчёт самому написать джаву, компилятор, операционку... Тут уже предлагали сделать супер-пупер программатор. Ничего сложного. Но после вопроса, мло, кто его поддерживать будет, т.е. новые камушки добавлять, ошибки править, тема вроде в бозе почила. Так и с джавами, операционками.

826. Jelsay, 18.01.2006 09:50
Tahoe - но в ЯВУ то легче разобраться чем в асме - при прочих равных - если и там и там не царапать коментарии.. и если новый "камушек" можно за 2-3 дня добавить - то почему бы и нет?

с другой стороны - конечно если проффи в этой области - то тут надо на хлеб зарабатывать а не эксперименты ставить.. но любителям то можно

827. Chudik, 18.01.2006 10:00
Jelsay
но он прощё чем асм?
Ну... через полгода полного погружения... наверное Лично я до сих пор вспоминаю как кошмарный сон. Это после 15 лет. При этом не забудь, что для исполнения программы на Форте, эта самая система должна быть зашита в памяти процессора. т.е. занимать место.

нашел статейку о роботах на ATMega128 со встроенной ФОРТ-системой - там форт хвалят.
Я же не говорю, что его нельзя использовать. Я почему-то не могу открыть твою ссылку. Но по поводу роботов... Да, наверное для такого применения Форт и неплох. Прежде всего потому, что несмотря на все изменения и ошибки, которые ты можешь внести при программировании, робот всегда будет иметь встроенное неизменённое ядро, которое ты не сможешь испортить никаким образом в силу принципа работы стековой машины.

828. Tahoe, 18.01.2006 10:17
Jelsay
но в ЯВУ то легче разобраться чем в асме
Вопрос золотой середины. С одной стороны, что б достаточно быстро работало. С другой, что б не запутаться. Т.е. одного критерия явно мало. В реале критериев ещё больше.
С другой стороны, бывает что народ в писюке на VBasic с COM-портами работает. И не просто работает, а даже продаёт такие "шедевры".

А самое главное - можно тратить по году-два на освоение нового языка. И так раз 5-10. А можно освоить один и больше вообще не смотреть по сторонам. И тот, и другой подходы имхо неправильные. И скакать с языка на язык - плохо. И циклиться на одном только асме тоже плохо.

829. Vesel'chak U, 18.01.2006 11:07
Chudik
Зато алгоритм проще отлаживать
А я на C отладил, а на asm переписываю для повышения быстродействия.

А может С с ассемблерными вставками в критических местах?
Я тоже сначала так подумал, но при входе в обработку прерывания там такое делается... Опять же для оптимизации проще за регистрами следить. А с условной компиляцией разбираться некогда. Тем более, что алгоритм простейший: сгенерить 3 фазы 400 Гц, амплитуда двух из которых меняется по синусоидальному закону - используются 3 канала ШИМ. Синус забит таблицами. Изменение амплитуд 2-х фаз задаётся напряжением постоянного тока, т.е. ещё используется АЦП.

Tahoe
Это ж наверное первое, что пришло в голову?
Решил, что на голом asm будет проще. Так и оказалось.

Chudik
Но "обратная польская запись"...
Иногда очень удобно, но, в основном, при математических вычислениях. В задачах управления не очень понятно насколько хорошо это будет работать.

Добавление от 18.01.2006 11:22:

Chudik
Может просто в файле перед этими данными указать DB
Помогло, спасибо. Правда пришлось разбить на несколько строк, каждую начинать db, а то длину больше 2048 символов не воспринимает.

830. CrazyElk, 18.01.2006 11:40
Jelsay & Chudik - как человек писавший однако реализацию оной - ФОРТ-системы (не выдумывал с нуля и не автор но таки разобрался достаточно подробно).

Он прости и непрост одновременно - Форт система это пополняемый словарик манипуляций со стеком (а вот с каким стеком и что значить манипуляция - реальное манипуляция байтами и битами на стеке или генерация кода который сделает это на целевом микроконтроллере это зависит от реализации базовых слов). Минимальный набор элементарных действий (базовых слов) (он очень не велик но от него зависит что именно делает конкретная форт система) + ядро поиска очередной инструкции реализуется в кодах машины на которой запускается система на исполнение - это можно описать на с, С++, asm …на выбор - остальной стандартный словарик определяется через эти базовые слова на самом языке Forth (в совсем классической постановке именно так и происходит загрузка грузится бинарный образ базовых слов и код управления поиском и запуском инструкций после чего на вход этого интерпретатора дается поток forth команд доопределяющих остальной стандартный словарик).

Как итог от того как именно реализованы базовые слова зависит будит ли конкретная система Runtime ядром или Кроосс-компилятором будет ли она (в момент определения новых слов) отдавать приоритет компактности записи определяемой инструкции - генеря набор ссылок на слова описывающие данную инструкцию (тогда фактически любой набор ASM инструкций опеделен один раз и во всех остальных местах идет или ссылка на него (один два байта) или ссылка на перечень ссылок - тотже LZW вид с боку) или скорости исполнения - инлйня код из определяющих инструкций (тогда куски кода повторяются и повторяются пожирая место зато никаких вызовов или лишних переходов - линейный поток исполнения в чистом виде реализующий поставленную задачу)

Так что на сомом forth писать кросс компилятор дело муторное - а вот переопределить базовый набор слов и место Runtime системы получить кросс компилятор из исходников дело плевое. Так и поступают пишут или добывают (писать это местяц-два максимум для студента по книжке) реализацию forth системы для платформы разработки - получают Runtime на котором разрабатывают программу. После чего делают дубль 2 - переопределяют часть базовых слов чтобы они не исполняли действие на машине разработки, а генерировали код реализующий эти действия для целевой машины - получается (из тех же исходников что и Runtime) кросс-компилятор. Ему скармливают программу разработанную и отлаженную на Runtime, на выходе получают код для целевой машины с заданными характеристиками по степени оптимизации скорости и т.д. и т.п. Манипулируя вариантами реализации базовых слов (а в их числе есть слово . определить новое слово можно получить скорость (сопоставимо с ASM) или великолепную компактность (порядка zip-ом) кросс-компилятор или интерактивный интерпретатор и т.д. и т.п.на сколько фантазии хватит но не все одновременно в одном флаконе - и IMHO это ключевое)

Ну... через полгода полного погружения... наверное
Скорость освоения и удобство работы языка зависит исключительно от двух факторов - насколько просто задача ложится термины стек машины и/или насколько доступны словарики реализующие на стек машине forth требуемую для задачи семантику. Cкобочная запись например дополнительными словариками реализуется на раз и примеров этому не счесть. Так что если обратная польская запись напрягает, то дополнительный словарь и нормальная запись становится доступна. Нужны переменные ? словарь вносящий слово определяющие переменные например dim (которое выделит переменной память добавляющей в словарь определения что делать при вызове переменной и т.д. и т.п.) и пожалуйста работаем с переменными самым обычным образом. Главное понять, что исходно есть только .... (мало короче) и что это конструктор, и если сильно достает отсутствие той или иной семантической конструкции надо выразить оную (или найти готовое ее определение) в терминах текущего словаря (не всегда это конечно элементарно достижимо).

эта самая система должна быть зашита в памяти процессора т.е. занимать место. Не совсем так без этого не обойтись если мы планируем полноценное ядро ставить чтобы интерактивно управлять и модифицировать прямо на целевой машине тогда да - размеры ядра порядка 2 - 8 Кб тут по месту смотреть надо много это или мало. Можно и еще ужать но тут вопрос, а надо ли? И не проще ли на машине разработки создать кросс-компилятор (благо технология его построения стандартна и полумеханическая) и получить сразу программу в маш кодах целевой платформы и уже ее заливать. Интерактивность модификации программы конечно пропадает, но нужна ли она на системах с таким объемом памяти?

Ограничений у языка есть таки тоже как их не быть . Но как минимум прочитать об идеологии построения и вариантах реализации оного языка веСЧь IMHO полезная безусловно. Пример подхода очень наглядный и что самое приятное не требующее много времени для осознания.

Ну как то так если обзорно.

WBR CrazyElk

831. Chudik, 18.01.2006 11:47
CrazyElk
класс Сколько ты разбирался с ним. Как долго программировал и, главное, когда занимался этим в последний раз?

Если бы ты ещё запятые ставил, цены твоим постингам не было бы.....

Добавление от 18.01.2006 11:49:

Vesel'chak U
длину больше 2048 символов не воспринимает.
Ну, извини, тут я ничем не могу помочь

832. CrazyElk, 18.01.2006 11:58
Chudik
1. Студентом был (как раз 2 месяца и ушло на осознание написание и отладку с 0. И писалось само собой с усилиями студенческими, а не в режиме промышленного программирования).
2. Ой давно лет 17 назад (написание было спортивным интересом, разобраться что за зверь, зачем применим и с тех пор не было с тех пор у меня задачи которая реально оправдала бы его применение не та у меня специализация).
3. язык исправил (насколько смог)

WBR CrazyElk

833. Chudik, 18.01.2006 12:09
CrazyElk
Ой давно лет 17 назад
Вот-вот, я примерно тогда же. Только мне надо было не просто разобраться, а написать и запустить программу, работавшую с аппаратным FIFO примерно на 16кБ (с переменной глубиной) в RT с аналоговым сигналом.... А перед этим найти ещё сбойную микросхему в том поле из 541РУ2 На ДВК 2. Поэтому мне было не до разбирательств с тонкостями языка . Хотя читал, что, вроде, можно привести запись к нормальному виду. Но некогда было.

После этого ТурбоПаскаль на появившемся после этого Правец 16 просто сказкой показался

834. Jelsay, 18.01.2006 13:36
CrazyElk - Chudik - ну вы и монстры! А я вот пишу на Форте только с 1991

835. Chudik, 18.01.2006 21:08
Jelsay
Ну ты змей Постоянно пишешь? Тогда понятно, почему ты увёл ветку в сторону, злобный оффтопер

836. Dikoy, 22.01.2006 15:51
К моему стыду, никогда не приходилось работать с ШИМ АВР, а тут потребовалось получить с выхода Т0 ATtiny2313 меандр в 56 КГц для тактирования ИК светодиодов IRDA. Вот, совместно с кодевижном накатали такой код… Правильно я хоть таймер инициализировал?

код:

// #include <tiny2313.h>

// Timer/Counter 0 initialization
// Clock source: System Clock (14.31818 МГц)
// Clock value: 55,930 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x03;
TCCR0B=0x04;
TCNT0=0x7F; // Половинное заполнение счётчика (число 127)
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog Timer interrupt: Off
WDTCR=0x39;
WDTCR=0x29;

И ещё глупый вопрос: какой командой в сях собачку сбрасывают?

837. Chudik, 22.01.2006 21:51
Dikoy
TCNT0=0x7F; // Половинное заполнение счётчика (число 127)
Забавно такое наблюдать Я понимаю использование hex когда работаешь с битовыми полячми. Но зачем счётчику записывать в hex и тут же ставить комментарий, что это 127? Почему бы не сразу написать 127?

какой командой в сях собачку сбрасывают?
какую собачку?

838. Leka, 22.01.2006 22:51
Chudik
какую собачку?
Наверно, заместо кукушки которая

839. Dikoy, 22.01.2006 23:12
Chudik
Но зачем счётчику записывать в hex и тут же ставить комментарий, что это 127?
А это не я 0x7F написАл, а кодевижн Вот я комент и поставил.

Собачка == Watchdog

840. Chudik, 23.01.2006 01:36
Dikoy
Собачка == Watchdog
А Насколько я понимаю, в определённом месте кода, через который ты должен проходить всегда ты просто должен обнулять её регистр. Т.е. обычный оператор присваивания, судя по тому, как пишутся регистры таймеров в твоём примере.

841. Dikoy, 23.01.2006 12:45
Chudik
Вроде была в сях даже команда, что-то вроде WtdRes; вот только точно не помню... Давно я собачку не мучил...

А насчёт ШИМа:
Названия режимов в ДЩ и кодевижне какие-то сильно разные... Подобрал как самый подходящий
// Mode: Fast PWM top=FFh
Это, как я понимаю, просто ШИМ с верщиной счёта FF?
И ещё. Нужного кварца у меня нет, но частота шим получается делением на n из частоты ядра f. То есть, я могу проверить теорию, запустив МК на любой частоте и проверив соблюдение этого отношения f/n?

842. Tahoe, 23.01.2006 13:28
Dikoy
Вроде была в сях даже команда, что-то вроде WtdRes
В самих Сях, разумеется, такой команды нет. А вот в конкретном компиляторе, для твоего удобства, обычно уже определён набор макросов. В том числе, возможно, и для сброса вочдога. Короче листай pdf от своего компилера.

Нужного кварца у меня нет, но частота шим получается делением на n из частоты ядра f.
Да. Только набор делителей ограничен и являет собой степень двойки. Т.е. либо подбирай "удобный" кварц, либо играйся с TOP таймера ( скорее всего такое есть в Тамер2, под рукой нет доки на Тини2313 ), либо работай со встроенного RC-генератора и если нужна точность получше делай PLL на нём ( регистр OSCCAL ).

843. Dikoy, 23.01.2006 15:28
Tahoe
Только набор делителей ограничен и являет собой степень двойки.
Там даже двойная степень двойки: 4 16 64 256 и т.д.

Т.е. либо подбирай "удобный" кварц
Да какая разница? С теми де настройками запустить от любого кварца, померить частоту ШИМ и системную частотомером да посчитать на кулькуляторе...
Меня вот другое волнует - будет ли на выходе ровный меандр, чтоб TSOPы не забастовали. Но это осциллом можно...

А вот в конкретном компиляторе, для твоего удобства, обычно уже определён набор макросов.
Дык как раз мне говорили, что эта штука есть во всех AVR C, начиная с кодевижна и кончая IARом. Я просто забыл, как оно пишется...

делай PLL на нём
Это программная коррекция частоты чтоли?
Кстати, а как внутренний осцилл у атмелов к температуре относится? Сильно плавает?
Собрал контроллер для выдвижной антенны в авто, и не пойму - толи она не до конца разворачивается по причине возросшего механического сопротиврения, толи время контроллер плохо отмеряет...

844. Tahoe, 24.01.2006 13:17
Dikoy
Меня вот другое волнует - будет ли на выходе ровный меандр
Ны дык при TOP=0xFF пропиши OCRx=0x7F, а если из-за подгонки частоты придётся делать например TOP=0x80, пропишешь OCRx=0x40. И вся любовь.

Дык как раз мне говорили, что эта штука есть во всех AVR C
Ну вот и отлично. Только раз это макрос, т.е. нечто не оговоренное стандартом, то и называться оно может как угодно в каждрм конкретном компиляторе. Короче открывай pdf на свой компилер, клацай ctrl-F и вбивай watchdog. Потом много F3, пока не наткнёшся на нужное.

Это программная коррекция частоты чтоли?
Да.

Кстати, а как внутренний осцилл у атмелов к температуре относится? Сильно плавает?
А в ДШ всё есть. Я только паялом в контроллер тыкал и смотрел когда UART в FT232 принимать перестанет. Говоря ненаучным и нетехническим языком - запас вышел "дохрена".

толи она не до конца разворачивается
Так поставь для проверки интервал в два раза больший. Вот и узнаешь.

845. Xradio, 24.01.2006 13:26
Меандр лучше делать инверсией (XOR) состояния пина.

846. Tahoe, 24.01.2006 13:33
Xradio
А по мне, так проще счётчик один раз зарядить - пусть сам дёргает.

847. joptpd, 28.01.2006 15:11
никто не знает нормальные утилиты для работы со стандартным жк?
есть одна но она для гцц
а у меня code vision
в нем все есть но функция sprintf сжирает половину памяти 2313

взял http://homepage.sunrise.ch/mysunrise/peterfleury/gro…pfleury__lcd.html
но она под гцц заточена и переделать ее нельзя ввиду каких то своих инклюдов которых нет в моем компиляторе

нужно выводить просто цифры и строки на определеные места
с резервированием мест под число

848. Chudik, 28.01.2006 17:11
joptpd
функция sprintf сжирает половину памяти 2313
Да, она такая. Причём даже не она сама, а функция, которая разбирает формат строки и подставляет в неё твои данные.

нужно выводить просто цифры и строки на определеные места
с резервированием мест под число

Т.е. тебе действительно нужна именно sprintf. Единственный выход - написать разбор формата самому и ограничить его только необходимыми типами данных. Может сильно помочь, если тебе не нужно выводить числа с плавающей запятой.

849. joptpd, 28.01.2006 18:56
мне без разницы че и как
у меня есть функция которая изменяет значения 3х переменых через указатели
часы минуты и секунды

я хочу либо lcd_putsomedata(...) и туда я мог бы указать просто переменые h m s или любые простые числа
тоесть они типа unnsigned char но не строковые

lcd_gotoxy(1,1);
if (FREQ<10000) lcd_puts_P(" ");
lcd_puti(FREQ,2);
lcd_puts_P(" MHz");
lcd_puts_P( " PLL SYNTHESIS\n" );
lcd_puts_P( " v1.0 by Dusan" );

тут нет никакого форматирования и етот код имеет еще функции работы с памятью и 3 кнопки

а то че у меня вышло то там 95% вроде использовано
но нет 3й кнопки записи в память т.к. уже етот код не влазит

и еще для пользователей вин авр
уже часа 2 пролистал инет но не нашел нормального ответа
в новых версиях нет sbi sci
на аврфрик один из разработчиков пишет че ето функции неправильные с точки зрения стандарта С

ща я опять слил версию за етот год
ошибок еще больше стало
они опять поменяли название файла с прерывыаниями

не понимаю как так можно ваще делать?
ведь куча проектов теперь надо будет переписывать

пишут че надо там чето написать и все будет работать
но я так и не нашел че и куда писать

850. Chudik, 29.01.2006 00:32
joptpd
мне без разницы че и как
Ну, тогда у тебя никогда места хватать не будет. В отличие от тебя для других есть разница, посему, очевидно и появилась функция типа lcd_puts_P.

я хочу либо lcd_putsomedata(...) и туда я мог бы указать просто переменые h m s или любые простые числа
Ну так и напиши, кто же тебе мешает Всего-то надо преобразовать твои числа в ASCII символы и использовать уже готовую функцию lcd_puts_P() .

851. Angelo, 31.01.2006 00:10
Помогите разобраться с АВР mega16, пытаюсь сделать, чтоб АЦП само запускалось через определённый постоянный промежуток времени(определяется таймером). Таймер в прерывание уходит, а АЦП не стартует....

.include "m16def.inc"
;
.def temp = R16
;
;
.cseg
.org 0x00 ;
rjmp START
;
;
.org 0x1C ; AD
nop
nop
reti
;
.org 0x26 ; Òàéìåð0
nop
nop
reti
;
;
.org 0x50
START:
ldi temp,0xFF ; Èíèöèàëèçèðóåì ÑÒÅÊ
out SPL,temp ;
ldi temp,0x00 ;
out SPH,temp ;
;
ldi temp,0x1F ; Ïåðèîä ñîâïàäåíèÿ òàéìåðà
out OCR0,temp

ldi temp,0b00000010 ; Âêë ïðåðûâàíèÿ ñîâïàäåíèÿ òàéìåðà
out TIMSK,temp

ldi temp,0b00001001 ; Ðåæèì ÑÒÑ, âûáîð CLK 1:1, òàéìåð çàïóùåí
out TCCR0,temp
;
ldi temp,0b11100000 ; AD, âíóòð ÈÎÍ, âûðàâ â ëåâî, êàíàë 0
out ADMUX,temp

ldi temp,0b01100000 ; Çàïóñê ïî ñîâïàäåíèþ òàéìåðà
out SFIOR,temp

ldi temp,0b10101110 ; AD âêë., ðàáîòàåì ïî SFIOR, ÷àñòîòà ïðåîáð = /64
out ADCSRA,temp
;
sei ;enable global interrupts
GO: rjmp GO

852. D3d, 02.02.2006 14:10
Помогите найти ошибку.
Хочу заставить светодиод, подключенный к МК ATMega128l мигать с частотой 1 раз в сек. А он горит постоянно после подачи питания.

Светодиод между VCC и PD3 + 500 Ом.
Питание МК от аккума 3.6V.
Зашиваю 5-ю провоками по LPT.
Компилирую CodeVision им же и заливаю.
Кварца нет. Работает на внутр. генераторе 1МГц.
код:

#include <mega128.h>
#include <delay.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x08;

// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;

// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;

// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
{
delay_ms(1000);
PORTD.3=1;
delay_ms(1000);
PORTD.3=0;

// если в этом цикле написать только PORTD.3=1; светодиод - не горит
};

}



Прогонял полученный .hex дебагером из AVRStudio4 - прога работает нормально. Бит ноги меняет свое состояние.

853. Jang, 02.02.2006 19:30
Извините за оффтоп.
Подскажите пожалуйста, что такое Jtag ?
Что это по своей сути ? Везде встречается ,а дословного и четкого определения всё никак немогу найти

854. joptpd, 03.02.2006 03:30
D3d
светодиод вроде как надо на землю вешать
vcc ето земля или +?

Jang
апаратный интерфейс отладки
авр студия имеет симулятор контролеров
а жтаг показывает реальное состояние регистров реального контролера

855. Chudik, 03.02.2006 04:10
D3d
Ты уверен, что у тебя функция delay_ms(1000) ждет именно 1000 мс, а не мкс? Осциллографом можешь на ножку посмотреть? И хорошо бы параллельно с ней дёргать ножку рядом, чтобы исключить влияние каких-либо цепей. Чисто для контроля.

856. DrAG0n, 03.02.2006 11:18
Надо напряжение вольтметром померять на ножке. Если 0 или +5В - то не мигает. Если 2.5В - мигает, но слишком быстро.

857. Chudik, 03.02.2006 12:36
Ну да, можно и так. Я просто привык, что осцил под руками всегда есть

858. D3d, 03.02.2006 13:21
DrAG0n
Chudik



Яркость светодиода при напряжении 1\2 от VCC - видно на глаз, что оно тусклее чем при чистом VCC.

Вот еще к размышлению:

PORTD.3=0;
while (1)
{
delay_ms(1000);
PORTD.3=1;
delay_ms(1000);
PORTD.3=0;
// вот этот вот код - нерабочий! Светодиод горит постоянно.
};

Теперь вносим в программу небольшое изменение, и снова компилируем и заливаем Code вижном.


PORTD.3=0;
while (1)
{
PORTD.3=1;
delay_ms(1000);
PORTD.3=0;
delay_ms(1000);

// переставляем функцию delay в конец цикла while. Результат: Светодиод вспыхивает на несколько милисекунд раз в секунду. Хотя должен секунду гореть, а секунду не гореть.
};


Может я его статикой попалил когда паял? Я же не передохранялся =)))))

Добавление от 03.02.2006 13:22:

Кашерный лаг!

Добавление от 03.02.2006 13:36:

обязательно ли запитывать мк на все ноги VCC и все GND заземлять? Я использовал одну VCC & GND.
Вольтметр показал что они все запаралеленны. внутри у него.

Любая математическая операция в теле програмы не дает МК выполнять ее дальше.
Такое ощущение что он просто висит.

в VMLAB и AVRStudio все работает норамльно.

Добавление от 03.02.2006 13:41:

Chudik

И хорошо бы параллельно с ней дёргать ножку рядом, чтобы исключить влияние каких-либо цепей.

И одну ногу дергал и канкан всем портом танцевал - однофигственно.

859. joptpd, 03.02.2006 13:58
наверно 3.6в мало дляя его встроеного генератора
а может и брак какой

860. D3d, 03.02.2006 14:15
joptpd

Эта модификатция 128l - она работает от 2.7 до 5.5

861. Dikoy, 03.02.2006 17:48
D3d
Либо у тебя траблы с генератором (наиболее вероятно), либо спалил мегу...
Попробуй завести её от чего нить другого, или фузы перепрошить..

862. D3d, 03.02.2006 17:52
Dikoy

Ткну кварц. на 3.6 миллиона колебаний в секунду посмотрим.... Спасибо за реальное руководство к действию...

863. Chudik, 03.02.2006 23:08
D3d
Яркость светодиода при напряжении 1\2 от VCC - видно на глаз, что оно тусклее чем при чистом VCC.
Значит какой-то процесс всё-таки идёт.

обязательно ли запитывать мк на все ноги VCC и все GND заземлять?
Да!!!

Я использовал одну VCC & GND. Вольтметр показал что они все запаралеленны. внутри у него.
. Извини, другого названия этому нет.
Толщина проводников внутри кристалла может не обеспечивать силы тока, необходимой для работы всех блоков микроконтроллера. Неужели ты думаешь, что в компании сидят такие долбаки, что не знают, что можно запитать чип от одного пина?

И одну ногу дергал и канкан всем портом танцевал - однофигственно.
И что было видно на экране осциллографа?

864. D3d, 04.02.2006 23:46
Chudik

Значит какой-то процесс всё-таки идёт.

Ага =))) Понять бы какой =)))

Извини, другого названия этому нет

контр ответ: Я не ламер. Я чайник! Ламер - это кто ничего не знает, а думает что знает все. Чайник по знаниям - тот же лаймер, но отличие в том, что учится.... ИМХО, конечно.

обязательно ли запитывать мк на все ноги VCC и все GND заземлять? Да!!!

Сделал не по-лаймески. Запитал и заземлил. Ничего не поменялось.

И что было видно на экране осциллографа?
К сожалению осцилографа нету.

Добавление от 04.02.2006 23:55:

Dikoy

Либо у тебя траблы с генератором (наиболее вероятно), либо спалил мегу

Проверил на двух мегах уже. Ставил кварц на 3.6МГц.
Обе пробовал и на внутненний RC и на внешний. Фьюзы прошивал соответственно datasheet. Результат стабильный: не работает по коду. Но льется нормально.

865. Dikoy, 05.02.2006 00:35
D3d
Есть ещё моментик... Возможно, глюкнутый вижн
У меня весной было нечто подобное - скачал я новый вижн, 1.24 кажется, и написал прошивку, где помимо всего прочего управлялись 4 светодиода. Так вот они нифига не управлялись. Написано было так же, через PORTX.X Что-то вроде этого
код:

// Инициализация.
for (i=0; i<5; i++)
{
PORTD.0=0;
PORTD.2=0;
delay_ms(75);
PORTD.0=1;
PORTD.2=1;
delay_ms(75);
}
PORTD.2=1;
PORTD.0=1;


Когда я затрахался искать причину, просто потратил пол часа, нарисовал на бумажке таблицу истинности и плевал в порт числа, типа
код:

delay_ms(1000);

PORTB=2; // /CONVST=1, SCLK=0
PORTC=2; // Светодиод 1 потушен (зел)

delay_ms(800);

PORTB=0x00; // /CONVST=0, SCLK=0
PORTC=10; // Светодиод 2 потушен (красн)

delay_ms(800);

PORTB=2; // /CONVST=1, SCLK=0
PORTC=42; // Светодиод 3 потушен (жёлт)

PORTC=127; //Все ножки порта "1"


Кстати, что касается регистров, коде вижн не очень периваривает запись типа PORTB=0; Иногда вообще делает вид, что её не понимает. Ему подавай PORTB=0x00; То есть хексовую запись. Что интересно, такое мною было замечено только с нулём - все остальные числа хавает нормально...

866. Chudik, 05.02.2006 00:40
D3d
Значит какой-то процесс всё-таки идёт.
Ага =))) Понять бы какой =)))

Скорее всего генерит

контр ответ: Я не ламер. Я чайник!
Хорошо, договорились Просто нет отдельного смайлика для чайников

Результат стабильный: не работает по коду. Но льется нормально.
Напоминает старый анекдот: Мужик утверждает, что знает, как из дерьма делать масло для бутербродов, но ему нужен миллион баксов для испытаний и внедрения проекта. В конце концов ему верят, дают деньги. Через год спрашивают: "Ну как?" Ответ: "Всё ещё пахнет, но уже мажется".

Попробуй упростить задачу: Повесь на другую ножку кнопку и опрашивай. По замыканию с землёй (или размыканию - что тебе проще) включай светодиод.

867. D3d, 05.02.2006 01:02
Dikoy

А я начинаю грешить на XP...., может у него свои соображения при работе с ЛПТ, в дебагере то все работает....


Кое что заработало
заменил delay_ms(x); на delay_us(x);

delay_us(50000);
PORTD=0x00;
delay_us(50000);
PORTD=0xFF;


но стоит куда нибудь добавить что-то вроде i++; или for на три раза поставить. Все стает раком. Ничего не понимаю... Качаю свежий вижин =)))

Chudik

Попробуй упростить задачу: Повесь на другую ножку кнопку и опрашивай. По замыканию с землёй (или размыканию - что тебе проще) включай светодиод.

Бывает еще что-то проще светодиода на ножке? :lol:

868. Dikoy, 05.02.2006 01:20
D3d
А я начинаю грешить на XP...., может у него свои соображения при работе с ЛПТ, в дебагере то все работает....
Мей би... Я вот юзаю AS2M от аргуссофта, для СОМ порта. Шьёт всё и под любую ось, никаких проблем за 900р Ещё есть AS3, он на USB вешается. 1200р.

Добавление от 05.02.2006 01:24:

D3d
Кое что заработало
заменил delay_ms(x); на delay_us(x);

delay_us(50000);
PORTD=0x00;
delay_us(50000);
PORTD=0xFF;

А настройки порта то изменил? У тебя там ажется не все пины порта Д на выход были настроены?

Качаю свежий вижин =)))
Лучше поиши в сетке гнутые версии Они, как правило, уже проверенные временем и без ограничения размера кода.

869. DrAG0n, 05.02.2006 08:38
А я еще раз предложу WinAVR Так... на всякий случай... Я использую VMLAB+WinAVR - очень удобно. Вроде, к AVRStudio тоже можно прикрутить.

870. joptpd, 05.02.2006 12:57
D3d
вижн щас 1 24 6
все там работает с простым нулем
на 2313 по крайней мере

DrAG0n
у тебя случайно не последний винавр?
у меня старый проект не компилит
даже если я вставляю compat/deprecated.h

Compiling: lcd_io.c
avr-gcc -c -mmcu=at90s2313 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=lcd_io.lst -std=gnu99 lcd_io.c -o lcd_io.o
In file included from lcd_io.c:94:
c:/winavr/avr/include/compat/deprecated.h: In function `timer_enable_int':
c:/winavr/avr/include/compat/deprecated.h:110: error: invalid lvalue in assignment
lcd_io.c: In function `lcd_write':
lcd_io.c:830: error: invalid lvalue in assignment

вот тут ошибка

/** \ingroup deprecated_items
\deprecated

This function modifies the \c timsk register.
The value you pass via \c ints is device specific. */

static __inline__ void timer_enable_int (unsigned char ints)
{
#ifdef TIMSK
TIMSK = ints;
#endif
}


и вот тут еще
cbi(LCD_D4_OUT_REG, LCD_D4_PIN);
и дальше еще строк 20 таких же

используеца
Title : C file for the HD44780U LCD library (lcd_io.c)
Author: Chris efstathiou hendrix@otenet.gr
Date: 2/2/2003 6:35:54 мм
Software: AVR-GCC with AVR-AS

оно было собрано давно и все работало
ошибка в файлах нового компилятора

871. Dikoy, 05.02.2006 21:20
joptpd
все там работает с простым нулем
на 2313 по крайней мере

Нифига подобного. У меня 1.24.3b, ни в мегах, ни в 2313 когда в регистр пишешь 0, он туда не пишеттся. Просто в математике, при обнулении переменных например, работает, а в регистр не пишется! Только 0х00... Несколько раз уже нарывался...

872. joptpd, 06.02.2006 00:22
Dikoy
ну дык обнови тогда


код:
void senddig(char in){ 
unsigned char i,j,dig[3];

dig[0]=digs[in%10];
in=in/10;
dig[1]=digs[in%10];
dig[2]=digs[in/10];

for(j=2;j>0;j--){
for(i=0;i<7;i++){
PORTB.1!= dig[j] >> i & 1;
// PORTB.1=(0x60 >> i) & 1;
PORTB.0=1;
delay_us(100);
PORTB.0=0;
delay_us(100);
}
}
}


тут вот все работает

873. il-nick, 06.02.2006 18:33
возьми ATMEGA 8 -просто .понятно и дешево..... я с нее начинал ничего ни понимая .... на www.atmel.ru посмотри на него список команд на ассемблере .....

874. Xradio, 10.02.2006 09:31
Подскажите плз, где взять и как добавить в AVRStudio4 DOS кириллицу? (комментарии исходника видимо написаны в КОИ7 - абракадабра) Или как перетранслировать?

решено.
Перекодировал MS Word 2003.

875. Vesel'chak U, 10.02.2006 23:34
Обнаружил баг или фичу в ATmega128.
При работающем ШИМ (fast PWM с переменным модулем счёта), запись в TCCRxA запрещает появление флага прерывания по переполнению счётчика. Видимо, только в текущем цикле. Проверено на таймере 1, AVRStudio об этом знает.
Интересно, где-нибудь в документации об этом написано?
Жаль. Придётся ставить внешнюю логику, чтобы менять фазу.

876. Boston5, 11.02.2006 16:48
Уважаемые спецы, подскажите с таким вопросом. Почему однокристалки 51-го семейства помирать не собираются? Т.е. есть ряд 90s, Mega, Tiny, которые по цене и по возможностям не чуть не хуже классическим 51-м. А так же много чего нового, но походу 51-е и разновидности с таким ядром делать будут еще много много времени. В чем фишка?

877. Chudik, 11.02.2006 21:38
Boston5
Почему однокристалки 51-го семейства помирать не собираются?
Потому что в Китае студентов учат работать только с ними и китайцы только с ними и работают.

878. Vesel'chak U, 11.02.2006 22:31
Boston5
У них есть свои удобства, да и совместимостью прблем нет - почти любая фирма делает что-то похожее, а чем заменить AVR? И сколько уже софта наработано.
Ничего, скоро ARM'ы станут стандартом.

879. Boston5, 12.02.2006 00:31
цитата:
Chudik:
Boston5
Почему однокристалки 51-го семейства помирать не собираются?
Потому что в Китае студентов учат работать только с ними и китайцы только с ними и работают.

Судя по обилию китайского барохла - им вообще все равно с чем работать. А 51-м учат не только китайских, а помоему вообще всех.

880. Atrides, 12.02.2006 16:30
Подскажите как в отладчике AVR Studio съэмулировать работу АЦП. Т.е. нужно, чтобы на вход АЦП поступало напряжение от некого "виртуального источника".

881. Vesel'chak U, 12.02.2006 22:47
Atrides
Обязательно постоянное изменение "измеряемого" напряжения?

882. Atrides, 13.02.2006 01:22
Не обязательно, пусть постоянное, например 1 вольт.

883. Xradio, 15.02.2006 11:57
Не работает AVR ISP из под WinXP (Использую Ланконелли LPT программатор с буфером 244)
Это как-нибудь решаемо? Нужен драйвер LPT для NT/XP?

Добавление от 15.02.2006 14:15:

После переинсталляции один цикл программировани-верификации прошел, а последующие попытки... "нет дивайса" говорит.
Что бы это значило? Может модами LPT поиграться?

884. LazyCamel, 15.02.2006 15:30
Обычно это значит что очередной бегинер не читал про фузы судя по всему.

ЗЫ:
Вообще для win32 конечно нужен драйвер для доступа к железу на нихком уровне, обычно используют giveio.sys

885. Boston5, 16.02.2006 01:17
А кто-нить пробовал МК от самсунга типа S3F9444 или подобных?

886. Xradio, 16.02.2006 06:12
LazyCamel
Спасибо!
Однако вот что:
Скопировать GIVEIO.SYS в каталог (например, SYSTEM32 в системном каталоге Windows)
Запустить LOADDRV, указать полный путь к каталогу, в котором находится GIVEIO.SYS и нажать "Install"
Перегрузить компьютер
Загрузить менеджер устройств (из закладки "Оборудование" системной Панели управления)
Выбрать опцию меню для показа скрытых устройств
Найти GIVEIO среди драйверов non-plug&play, нажмите правую кнопку и выберите "Свойства"
Выберите закладку "Драйвер" в сойствах и выберите "Автомат"
Перегрузите компьютер


Где в панели упр. XP "Выбрать опцию меню для показа скрытых устройств " ?

Добавление от 16.02.2006 07:24:

Все нашел & выполнил. Но, увы, ATMEL AVR ISP 2.56 глючит по прежнему.
Однако прекрасно работает в этой же системе под WIN98. Что весьма неудобно - в старой конфигурации нет сети. Есть еще решения?
А причем здесь фьюзы,LazyCamel?

887. joptpd, 16.02.2006 12:07
Xradio
The only chip used in the device is a 74LS245 octal bidirectional 3-state driver. However, a 74LS244 octal unidirecional bus driver may also be used. I just happened to have a 74LS245 lying around. The chip is used so that when the device is not being programmed, the programming interface lines are all tristated, allowing the device to function normally

ставь 245
из 2000 все работает
юзаю кодевижин
там свой програматор и ничего никуда копировать не надо
авр студия его тоже видит

888. LazyCamel, 16.02.2006 13:03
цитата:
Xradio:
А причем здесь фьюзы,LazyCamel?



Очень часто
цитата:
один цикл программировани-верификации прошел, а последующие попытки... "нет дивайса" говорит.
означает что фьюзы запрограмированы на работу от внешнего ГЕНЕРАТОРА, а не кварца.

889. Xradio, 16.02.2006 13:19
joptpd
из 2000 все работает
Из милленикма дома тоже все работает, а вот на работе поставил XP.
Самое интересное в том, что не то что совсем не работает AVR ISP, а что делает ошибки... С точки зрения использования LPT порта это выглядит необъяснимо. EPP, ECP моды менял - ничего не дает.
245 - двунаправленный буфер. След., должна быть линия переключения. А таковой в STK200 совместимом нет.
Ссыль, плз, на схему кодевижнвского прогера, или он в самом дистрибуте лежит? И есть ли там возможность стряпать на асме? (Си не буду пользовать принципиально) Это, imho, не для однокристалок язык. Это "большая ошибка".

Добавление от 16.02.2006 13:35:

LazyCamel
Понятно, но не тот случай.
Я не люблю такие случаи - когда цифра "глючит". Именно такое и происходит. Ладно бы ISP не видел порт совсем, а то лезет в него, и ошибается. Там ведь бинар!

890. Tahoe, 16.02.2006 18:50
Xradio
Си не буду пользовать принципиально) Это, imho, не для однокристалок язык. Это "большая ошибка".
Не, большая ошибка так рассуждать. Ты видимо просто ничего большого не делал, точнее не поддерживал/додедывал спустя пару месяцев.

891. Xradio, 17.02.2006 11:23
Tahoe
верно, ничего большого я не творил. Просто не повезло мне однажды, потому и сложилось такое мнение о Си.
Однажды пришлось переписывать контроллер в относительно простой прикладушке на 51-м. Дизассемблировал 512 пзу... и гляжу - там жуть сплошная, и её "под завязку" = 59 kB.
Нашел-таки разработчиков "кинувших" свой же проект. Исходник ес-но не дали, но сказали, что писано на Си под "Франклин софт-"
Делать нечего, и я переписал код под ту же железяку и задачу, но на ассме. Получилось 4.5 kB хекса...

892. Tahoe, 17.02.2006 12:17
Xradio
Тут в другом дело. 51-я архитектура и Си - понятия полхосовместимые. А вот когда делают современные процы, понимают, что на асме никому возиться неохота.

893. LazyCamel, 17.02.2006 12:36
Хе-хе.
Я в АРМе!!! не знаю чем память забить, напихал всякой хренотени, но половина от 64к пустая. Чтож они такого в 51-й то напихали что 60к заняли ?

894. Xradio, 17.02.2006 12:50
LazyCamel
Чтож они такого в 51-й то напихали что 60к заняли ?
Вероятно просто использовали имеющийся максимальный ресурс памяти, не применяя вызовы процедур... Да и в те годы заказчики ещё платили за "килобайты"

895. joptpd, 18.02.2006 11:21
Xradio
http://www.lancos.com/e2p/avrisp-stk200.gif
вот схема
я по ней делал
тока у тебя наверно провода до мк слишком длиные?
длинее 10см уже глючит
посему у меня шлейф взят от старого компа который выводил ком порты наружу
и сигнальные линии там чередуюца с земляной

програматор в кодевижине свой и встроен в ехешник
но я и понипрогом шил тоже через ету плату

писать на асме ты можеш в любом сишном компиляторе
вопрос тока в удобстве синтаксиса

кстати хотел написать впечатления от иар конфигуратора периферии
щас и компилятор закачал

896. угумс, 18.02.2006 11:52
LazyCamel
Хе-хе.
Я в АРМе!!! не знаю чем память забить, напихал всякой хренотени, но половина от 64к пустая

хе-хе. И нафига ж тогда авр-ы со 128 к выпускают, если выше 64 к в принципе не надо?

Добавление от 18.02.2006 12:07:

бери тогда microchip pic16c какую нибудь, если тебе не надо. Самое оно-)

897. Vesel'chak U, 18.02.2006 23:30
Atrides
Прошу прощения за задержку - работа доконала.
Я в таких ситуациях просто ставлю загрузку готового значения вместо результата АЦП. Т.е. процедуру "ацепирования" оставляю без изменений, но вместо чтения результата из АЦП загружаю своё значение.

Xradio
Не работает AVR ISP из под WinXP (Использую Ланконелли LPT программатор с буфером 244) Это как-нибудь решаемо? Нужен драйвер LPT для NT/XP?
Уж сколько раз твердили миру...
1. DLPORTIO.dll или P95NT есть?
2. Длина шлейфа от программатора до МК не более 10 см?
3. И не читайте вы советских газет...(с) Т.е. не надо пользоваться Ланконели. AVReal+AVRealShell намного лучше - прежде всего безопаснее - фьюзы явно не указанные никогда не перешьёт. И даже можно сделать внешнее тактирование - один раз помогло оживить процессор.

898. Tahoe, 18.02.2006 23:43
Vesel'chak U
И не читайте вы советских газет...(с) Т.е. не надо пользоваться Ланконели.

899. LazyCamel, 19.02.2006 01:22
цитата:
угумс:
LazyCamel
Хе-хе.
Я в АРМе!!! не знаю чем память забить, напихал всякой хренотени, но половина от 64к пустая

хе-хе. И нафига ж тогда авр-ы со 128 к выпускают, если выше 64 к в принципе не надо?

бери тогда microchip pic16c какую нибудь, если тебе не надо. Самое оно-)

О как. А что - в той пресловутой конструкции которую одной левой переписали в асм на 4кб было дофига таблиц, интерфейсов и т.д. Как раз что в основном и жрет память в старших чипах ?

Эта микрочиповская фигня мне и даром не нужна Они как перешли на флеши и тонкие техпроцессы - потеряли последнее приимущества в "помехо-дубовости" перед АВРами.

Как я уже говорил, меня вполне устраивают варианты AtMega48/88/168 и SAM7S321/64/128/256.
Отлаживаешься на старшей, а потом не мороча себе и людям голову ставишь нужное.

ЗЫ:
А Мегу128 я считаю если и не глупостью, то как минимум МК с страшно узким кругом применения. Учитывая плотность кода АВРов, ничего кроме хранения экранчиков для графических LCD, да шаблонов страничек для веб-сервера на ум даже и не приходит. Хотя случаи конечно они разные бывают

900. Xradio, 19.02.2006 10:24
Vesel'chak U
DLPORTIO.dll или P95NT есть
Спасибо! Просто не получилось найти упоминание этой старой библиотечки в связке с AVR ISP, как и не пришлось пользовать LPT под NT/XP "не по назначению". В отличии от АВРреал, AVRISP очень удобен! и незатратен в железе как JTAG или STK AVRSтudio.

joptpd
http://www.lancos.com/e2p/avrisp-stk200.gif
Именно эта схема у меня и работает уже несколько лет в связке c AVR ISP.
Естественно все сделано как положено. Плоский шлейф с чередованием земля-сигнал до компа ~1м. Далее на нем висит DIP20 244 без какого-либо корпуса, а от буфера до контроллера - 15 см. тоже шлейфом с чередованием.
DLPORTIO.dll еще не пробовал. Интересно будет проверить, найду, поставлю и отпишусь.

901. joptpd, 19.02.2006 10:40
DLPORTIO.dll драйвер для доступа к портам
просто так его куда либо засунуть и запускать проги нельзя
где то был пример с небольшим файлом который емулировал старые досовские функции outb
тоесть подключив етот "адаптер" можно было бы пересобрать старые проги для работы в нт

902. lmaks, 19.02.2006 13:32
угумс
LazyCamel
Я делаю систему контроля доступа. Быстродействие Mega 128 вполне хватает. А вот насчет памяти. Уже забито 80к - на отдельных устройствах. ДУмаю, конечно 128 хватит на все оставшиеся апгрейды. Но в притык. Задачка то не простая: поддержка базы данных - ее синхронизация, поиск карточек, работа с клавой, дисплеем, входы - выходы управление, интерфейс доп. оборудования и т.д. По времени заняло более 2 лет. 35 000 строк на С.

903. joptpd, 22.02.2006 17:54
подскажите по асемблеру
ADD A,#256-'0'
происходит ошибка

оригинал http://www.hw.cz/constrc/lc_metr/download/lc_v2.zip
у меня есть асемблер http://batronix.com/electronic/downloads/assembler.shtml

я поменял в файле '' на двойные кавычки т.к. он на одинарных тупит
а каким асемблером была собрана оригинальная прошивка я хз

так вот че мне делать с етой обищкой?
в асм ниче не понимаю

зы
компилировать не надо
там надо кое че подправить а число я пока не знаю
батарейка в мультиметре сдохла в нужный момент

904. Kosta_GG, 24.02.2006 12:24
Франклином компиляется без проблем и ошибку не дает. Почему твой асм не желает компилять - фик знает... :-/

905. joptpd, 24.02.2006 13:20
сайт нашел но там при скачивании 404
и ваще контора производит впечатление оставшейся в начале 90х

было бы кстати прикольно если бы где то была веб морда для компилятора

906. Kosta_GG, 24.02.2006 14:11
Ссылку не знаю. да и весит он под 12М.
Могу выслать старый интеловский ассемблер(в zipе 250К), он тоже компиляет. Только кавычки ему нужны одинарные.
и еще закомментируй строку $MOD2051 - эту настройку ни франклин ни интеласм не понимает...

907. joptpd, 24.02.2006 14:13
скачал я его
но там таааааакие старые файлы
аж 86 года че я не могу посмотреть их содержание
все кодировки перепробовал
я имею ввиду док файлы

можно мне просто строку с ключами?

908. Kosta_GG, 24.02.2006 15:08
Док. файлы в кодировке DOS, причем это не WORDовские, а просто текстовые файлы.

Запускаешь asm51.exe <file>.asm
на выходе получаешь:
<file>.lst - листинг программы, в котором если есть ошибки, будут написаны их номера и расшифровка.
<file>.obj - обектник, если проект состоит из нескольких файлов, то все их *.obj стыкуются линковщиком RL51. В твоем случае проект состоит из одного файла, поэтому(если компиляция прошла без ошибок) просто запускаешь OHS51.exe <file>.obj и на выходе получаешь файл прошивки в стандарте Intel HEX.

909. joptpd, 24.02.2006 23:10
понял
просто я ступил вначале
перетянул файл asm51.exe в окно командной строки а сам был не в той папке где лежит етот файл
ну он у меня не нашел асм файл

щас все собрал

910. Xradio, 25.02.2006 10:52
joptpd
У меня есть "франклин". Даже крякнутый вроде бы.
Fsisetup.exe весит 13 мег.

911. joptpd, 25.02.2006 15:02
Xradio
да уже не надо
мне одну прошивку тока один раз пересобрать

912. Dismon, 26.02.2006 08:58
to All

Подложили мне на работе маленькую свинку в лице PIC12C508A, которая грозит вырасти в большую свинью. Надо реализовать следующее:

604x282, 13,5Kb

Програмку я написал кажется, благо алгоритм не сложный, но возник вопрос с симулятором. Дело в том, что сей контроллер вставлен в девайс, в котором не предусмотрено внутрисхемное программирование. Потому для проверки и перепрошивки программы требуется модифицировать программу, встать, дойти до комнаты с девайсом, контроллер вытащить из девайса, дойти до комнаты с программатором, прошить, прийти обратно к девайсу и т.п., что на мой взгляд жутко неудобно.

Я закачал MPLAB 7.20, с имитатором выходов разобрался - использовал логический анализатор, однако симуляция входов оказалась выше моих сил. В описании, что на сайте микрочипов описываются некие "стимулы", которые позволяют имитировать входы портов. Однако это руководство похоже написано для какой-то старой версии среды, потому что в 7.20 таких пунктов меню нет, да и диалоги выглядят по другому.

Вопрос: как в MPLAB симулировать изменение состояния входных портов?

Добавление от 26.02.2006 09:48:

ЗЫ: Я так понимаю, что HI-TECH PICC-LITE with HI-TIDE 3 V9.50PL2 (56.3 MB) это компилятор с для пиков. Поддерживает ли он пики 12й серии, стоит ли его качать? Всетаки 56 мег трафика...



К сообщению приложены файлы: 1.png, 604x282, 14Кb

913. Zman, 27.02.2006 15:35
Dismon
hitech-lite с родного сайта - с ограничеиями, да и не вижу смысла для такой простой программки делать это на С

симулировать входы в мплабе можно, но не очень удобно...
гораздо лучше импользовать PROTEUS, там навесишь кнопки или тумблеры на входа и привет - полная симуляция, рекомендую

914. Dismon, 27.02.2006 16:00
Zman
PROTEUS

Ну да, еще и протеус качать, нет его у нас на фирме, да и мплаба нет. Да и не нужно уже , архитектура у этого пика хоть и дебильная, но заработала девайсина. Пришлось малость побольше мозгами поработать, а не как привык. Меня в этом пике особенно умилило 20 минутное стирание под ультрафиолетовой лампой, однако в девайсе заработала третья прошивка, хотя могла и вторая, если бы я не попутал делители - я то, наивный, полагал, что делитель один, а оказывается делитель для вачдога в 2 раза отличается от делителя для таймера. Работа через аккамулятор, отсутствие команд сравнения, условного перехода, стек на 2 вызова - поотрывал бы руки инженерам, произвевшим на свет ТАКОЕ .

915. Zman, 27.02.2006 16:01
зато цена $0.8

916. Dismon, 27.02.2006 16:25
Zman
зато цена $0.8



ATMEL ATTINY11-6PI 0.5302$
ATMEL ATTINY12-8PI 0.9446$
ATTINY13-20SSU 24.03 р.
ATTINY15L-1PI 24.08 р.
AT TINY28L - 4MI ATM 17,2975 р.

917. Xradio, 02.03.2006 10:16
Столкнулся с неприятным эффектом подсветки негорящих сегментв в обычной динамической индикации.
510x428, 1,1Kb
Верхние ключи "abcdefg" - интеллектуальные, Р-канал IPS5751. У них относительно медленное запирание = 120 мкс. Я учел это в программе обслуживания сделав 200 мкс. паузу, когда все нижние заперты.
Однако, легкая подсветка в виде импульса 1-5 мкс на негорящих сегментах не устраняется.
Ёмкость стоков нижних ключей IRL3705 виновата? Когда шунтирую их каналы 1 кОм подсветка исчезает, но это как-то некрасиво (канал = 1 ком)

К сообщению приложены файлы: 1.png, 510x428, 1Кb

918. psnsergey, 02.03.2006 12:58
Xradio
Через проходную ёмкость запертых П-канальников они приоткрываются при резком открывании Н-канальника. Плавнее открывай его.

919. Xradio, 02.03.2006 13:23
psnsergey
Плавнее открывай его.
интегрирующие в затвор?
КПД резко упадет... ток разряда порядка 20 А.
Может быть каналы верхних лучше шунтировать? не пробовал...
Однако, надо нечто вот такое:

920. Xradio, 02.03.2006 13:40
Подтяжка
194x340, 0,8Kb

К сообщению приложены файлы: 1.png, 194x340, 1Кb

921. psnsergey, 02.03.2006 15:32
Xradio
Может быть каналы верхних лучше шунтировать?
Не поможет. В принципе, как раз 1 кОм параллельно нижнему - ИМХО выход (если увеличить его насколько возможно, пока эффект будет сохраняться при ниабольшей температуре, чтоб ток утечки запертых П-канальников не мешал подтяжке всё же оттягивать потенциал стока Н-канальника ближе к земле).
А радикально - формировать "строчную развёртку", т.е. данного ряда включаемых одновременно светиков, П-канальниками, а кадровую (переключать ряды) - Н-канальниками, причём ПЕРЕД этим (переключением, т.е. выключением одного и включением другого Н-канальника) все П-канальники д.б. уже заперты.
Это распространённая проблема в ИБП с полевиками и игбтами: запертый транзистор приоткрывается при открытии другого из того же плеча моста (например, в двутактном полумосте всего одно плечо из транзисторов), если его драйвер слабее и не может удержать потенциал затвора меньше напряжения открывания, также этому способствуют отсутствие отрицательного смещения затвора запертого транзистора и распределённое сопротивление затвора транзистора (так сказать, "постоянная времени цепи стока"). Так что решение тут - либо усилить драйвер П-канальников, либо таки сделать так, чтобы при закрытом П-канальнике не происходило спада потенциала на его стоке - т.е. один Н-канальник закрылся, другой тут же открылся (можно даже раньше, совсем хорошо), напруга на стоках от токов утечки возрасти не успела, так и остаётся почти земляной.

922. Xradio, 03.03.2006 15:29
psnsergey
Спасибо!

923. joptpd, 04.03.2006 19:57
у кого нить есть пошаговый мануал
как начать работать с иар?
из ветки про компиляторы я понял че он лучший по оптимизации
и еще есть гцц авр
но он красноглазый и там все подперто костылями

к тому же как я понял у иар есть еще прикольный конфигуратор периферии который может быть встроен в среду иар

и еще
где все "стандартные" функции
типа и2с спи жк итд?

вот есть прикольная либа http://hubbard.engr.scu.edu/embedded/avr/avrlib/docs/html/index.html
все есть че я хочу но оно опять же под гцц

неужто компилятор за килобакс не имеет таких библиотек?
качал с офсайта демку на 30 дней

кодывижн дает слишком большой код но в нем я быстро разобрался и все че мне надо там есть

924. DrAG0n, 04.03.2006 21:42
joptpd
сколько ходил - костылей не видел и красных глаз тоже. Зато поддержка и VMLAB и AVRStudio.

925. joptpd, 04.03.2006 22:42
DrAG0n
Помогите начать работать с микроконтроллерами., #870 (http://forum.ixbt.com/topic.cgi?id=48:1119:870#870)

926. DrAG0n, 05.03.2006 07:47
Cорри. В свое время не заметил вопрос к себе
Сейчас скачаю свежий и попробую.

Добавление от 05.03.2006 07:53:

На АТМЕГА8 все хорошо. Какой там проц?

927. Tahoe, 05.03.2006 12:26
joptpd
А чем тебя его родная дока не устраивает?

928. joptpd, 05.03.2006 21:24
DrAG0n
старый 2313
исходник тут http://www.pira.cz/plllcd.htm
ошибка то в старых проектах тока иза того че красноглазым захотелось изменить название файла и выбросить макросы сброса и установки бит
и еще чето там с епромом вроде

Tahoe
доку я нашел таки в дебрях его папки
решил посмотреть чего там на 90 мег напихали
пока листал ее оглавление уже спать захотелось

929. Tahoe, 06.03.2006 06:37
joptpd
пока листал ее оглавление уже спать захотелось


решил посмотреть чего там на 90 мег напихали
Странно, у меня только 12 мег в папке \ewavr\avr\doc\

930. Dikoy, 09.03.2006 00:28
Требуется управлять внешней микрой от МК. У входа микры 3 состояния: "1", "0", и "float"... Вот как этот "float" получить на выходе МК? В частности, мега48.

931. joptpd, 09.03.2006 01:13
а че такое float?
третье состояние когда вывод как бы никуда не подключен?

932. Tahoe, 09.03.2006 07:53
Dikoy
Вот как этот "float" получить на выходе МК? В частности, мега48.
Вопрос странный. Как можно испоьзовать "float" в качестве управления? Скорее всего в этом состоянии выходы Меги "don't care", что в переводе на русский означает "пох".
Если уж очень надо именно так, как ты спросил, то самое близкое будет ножки Меги переключаешь на вход, подтяжка выключена.

933. Dikoy, 10.03.2006 02:41
ДШ к ADS1271:
код:

MODE 5 Digital Input

MODE = 0: High-Speed mode
MODE = float: High-Resolution mode
MODE = 1: Low-Power mode

Желательно переключать High-Speed и High-Resolution программно.
Но вообще, как то странно организовано управление... Там ещё два пина таких, но с теми проще - в моём режиме они оба в нуле.

Tahoe
Да уж сам допёр
Только при перезаписи регистра направления состояние остальных регистров не изменится?.. В смысле, не дрыгнет оно лапками? А то там к порту ещё девайсы подцеплены...

934. Tahoe, 10.03.2006 09:30
Dikoy
Если ты напишешь вот так:
DDRx |= ( 1 << PINx );

или так:
DDRx &= ~( 1 << PINx );

то поскольку а) работа с регистром < 32 ( ЕМНИМНС ) и б) работа с одним битом, то нормальный компиллер должен будет транслировать это дело в команду sbi или cbi, которая изменяет состояние бита. Думаю, соотвественно, на остальных ножках это не отразится. Имхо 99% что так.

935. Chudik, 10.03.2006 09:40
Tahoe
нормальный компиллер должен будет транслировать это дело в команду sbi или cbi, которая изменяет состояние бита
Хороший так и сделает, а обычный считает бит в регистр, сделает &/| и запишет обратно. Так что лучше посмотреть ассемблерный выход компилятора.

936. Batmah, 10.03.2006 10:19
ChudikTahoe
нормальный компиллер должен будет транслировать это дело в команду sbi или cbi, которая изменяет состояние бита
Хороший так и сделает, а обычный считает бит в регистр, сделает &/| и запишет обратно. Так что лучше посмотреть ассемблерный выход компилятора.


тут мне кажется может быть источник проблем. одно дело бит изменить , другое дело считывание-модификация-запись . если в данном порту на соседний бит повешена кнопка на землю , и она нажата , то чт-мод-зап этот бит сделает нулём и кнопка навсегда останется "нажатой" . внимательно надо смотреть из буфера данные или с ноги м.с.
используя компиляторы с непонятным поведением , можно получить трудно уловимые глюки
ASM FOREVER

937. Chudik, 10.03.2006 10:24
Batmah
Так всегда можно использовать inline assembler

938. Tahoe, 10.03.2006 10:25
Chudik
В общем верно. Из практики - ИАР точно сделает всё как надо, GCC вроде бы тоже. Возможно помойка ImageCraft ступит в этом месте.
Но, я тут подумал, имхо ножки всё равно дёргаться не должны.

Добавление от 10.03.2006 10:31:

Batmah
если в данном порту на соседний бит повешена кнопка на землю , и она нажата
... то ничего страшного не произойдёт. Порт DDRD - направление порта. А чтение кнопки это другой порт - PIND.

Примеры, приведённые мною, это рекомендации самого Атмела. Так что оставим асм дя ПИКов и 51-х. А тут процессор, который под Си создавался.

939. An_private, 10.03.2006 10:50
Tahoe
Возможно помойка ImageCraft ступит в этом месте
обижаете вот из листинга:
код:
(0061)   PORTB &= ~0x02;
0057 98C1 CBI 0x18,1

940. Tahoe, 10.03.2006 11:10
An_private
Ну что, значит совсем плохих компиллеров больше нет на свете. Вот и наступил коммунизм.

941. Dikoy, 10.03.2006 19:11
Tahoe
Установил порт В (мега48) на вывод, все пины в "0". В "while (1)" вписал "DDRB |= ( 1 << PINB.1 );".
Вот что Коде Вижн сгенерил:
код:
 
;>>> 122 while (1)
_0x3:
;>>> 123 {
;>>> 124 // Place your code here
;>>> 125 DDRB |= ( 1 << PINB.1 );
IN R30,0x4
PUSH R30
LDI R30,0
SBIC 0x3,1
LDI R30,1
LDI R26,LOW(1)
RCALL __LSLB12
POP R26
OR R30,R26
OUT 0x4,R30
;>>> 126 };

Похоже на правду...

942. Tahoe, 10.03.2006 21:04
Dikoy
Вот что IAR нагенерил:
код:

D:\work\projects\!Trash\trash\trash.c
1 #include <ioavr.h>
2 #define TRASH_PIN 4
...
3 void main( void )
\ main:
\ ??main_0:
4 {
5 while( 1 )
6 {
7 DDRB |= ( 1 << TRASH_PIN );
\ 00000000 9ABC SBI 0x17, 0x04
\ 00000002 CFFE RJMP ??main_0
8 }
9 }

Чёт не впечатляет после этого КодВижн.

Добавление от 10.03.2006 21:14:

Dikoy
Кстати, наверное КодеВижн тут ни при чём. Ты б задефайнил ножки порта попроще, без лишних структур.

943. Dikoy, 11.03.2006 01:32
Tahoe
код:

;>>> 122 while (1)
_0x3:
;>>> 123 {
;>>> 124 // Place your code here
;>>> 125 DDRB |= ( 1 << 4 );
SBI 0x4,4
;>>> 126 };

Во как оно бывает...

944. DrAG0n, 11.03.2006 09:18
и rjmp таки тоже есть, да?

945. Tahoe, 11.03.2006 09:22
Dikoy
См. тут: AVR035: Efficient C Coding for AVR (http://www.atmel.com/dyn/resources/prod_documents/doc1497.pdf) .

946. Dikoy, 12.03.2006 00:17
ALL­
Нашёл в ДШ к АЦП требования к режиму float:
C < 100pF, R > 10M
А пин атмелки, переключённый на вход, удовлетворит?..

947. Tahoe, 12.03.2006 03:30
Dikoy
Дык посмотри datasheet, раздел Electrical Characteristics.

948. avr123.nm.ru, 13.03.2006 10:39
Странное какое-то сравнение чуть выше !

IAR'у дали :

DDRB |= ( 1 << 4 ); - этот сдвиг уже сам препроцессор сделает ДО компиляции !

а CVAVR'у дали :

DDRB |= ( 1 << PINB.1 );


Этож разные вещи !

========

Я вообще против сравнения кода, я за выбор компиялтора
по удобсту для каждого конкретного юзера.

========

А если уж сравнивать то на проектах не меньше 50% флаши МК - при меньших это лишено смысла.

Какая мне разница какой будет занят объем памяти 5% или 20% - ведь в этом случае очевидно МК выбран по колич. ног или по его "железу".

А особо скоросные участки полюбому принято на АСМе вставлять либо частоту поднимать.

949. Tahoe, 13.03.2006 13:26
avr123.nm.ru
Этож разные вещи !
Ну дык я на это указал. Причём мой вариант это рекомендация Атмела.

А особо скоросные участки полюбому принято на АСМе вставлять либо частоту поднимать.
По-большому счёту имхо если придерживаться рекомендаций производителя и не делать всё "впритык", то и асм никакой не понадобится. Ну например тот же вход в прерывание с использованием глобальных переменных. Если делать не отдельные переменные, а глобальную структуру с указателями, то никакой асм уже имхо ничего не ускорит.

950. Dismon, 13.03.2006 13:54
Tahoe
Ну дык я на это указал. Причём мой вариант это рекомендация Атмела.

Ммм... А как ты пришел к такому варианту? Т.е. я хочу сказать, что строка

DDRB |= ( 1 << PINB.1 );

вроде как должна ставить на вывод пин РВ0 либо РВ1, в зависимости от того, что на PINB.1, причем видимо предполагается, что это значение может меняться в ходе работы устройства. Вот я и не понял, почему ты рассматриваешь как эквивалент приведенной строки строку

DDRB |= ( 1 << 4 );

которая просто ставит на вывод пин РВ4

951. avr123.nm.ru, 13.03.2006 14:04
да я и говорю что это не есть эквивалент !


DDRB |= ( 1 << 4 );

я получил из написаного выше вот этого:

#define TRASH_PIN 4

DDRB |= ( 1 << TRASH_PIN );

952. Dismon, 13.03.2006 14:32
ЗЫ: Вообще, имхо, действительно хороший компилятор должен развернуть строку

DDRB |= ( 1 << PINB.1 );

во что-то такое:

код:

sbis PINB, 0x01
sbi DDRB, 0x00
sbic PINB, 0x01
sbi DDRB, 0x01


Кто видел такой компилятор?

953. Tahoe, 13.03.2006 17:23
Dismon
ставить на вывод пин РВ0 либо РВ1, в зависимости от того, что на PINB.1
Я не вижу никакого практического смысла в подобных телодвижениях. Потому я исходил из того, что это просто недосмотр Dikoy. Потому, собственно, и предлжил ему "задефайнить по-человечески".

954. Dikoy, 14.03.2006 05:40
Dikoy
Нашёл в ДШ к АЦП требования к режиму float:
C < 100pF, R > 10M
А пин атмелки, переключённый на вход, удовлетворит?..

Tahoe
Дык посмотри datasheet, раздел Electrical Characteristics

Вот уже час смотрю - НЕТУ!
В таблице 27-2 (стр 304, мега48/88) есть характеристики 2-wire и фсё... Просопротивление и ёмкость пина в режиме IN я не нашёл...
Понятно, что должно быть на уровне КМОПа, но официальные цифры лучше...
Гугль тоже ничего толкового не даёт - одни догадки юзеров...
Грустно

955. Tahoe, 14.03.2006 10:23
Dikoy
Ну тогда отправь в Атмел-суппорт что-то вроде:

Hello!

I'm using ATmega-48 and some external ADC in my design. In some mode that ADC requered control signal "float", meeting this conditions: C < 100pF, R > 10M. I'm switching corresponded port pin as input, to reach that "float". But there are no info in Mega-48 datasheet about C-input in this state.

Best regards!
Dikoy

Перед отправкой глянь на lingvo.ru, у меня и так с англ. грамматикой не очень, а спросонья и того хуже.


Насчёт Rвхода. Даташит 48-88-168, стр. 290:

I-il Input Leakage Current I/O Pin VCC = 5.5V, pin low (absolute value) - 1 µA
I-ih Input Leakage VCC = 5.5V, pin high 1 µA

Так что 5,5 МОм тебе гарантировали.

Добавление от 14.03.2006 10:40:

Dikoy
Ну ты и пишешь. Доменя только сейчас, случайно допёрло. Так у тебя АЦП сидит на I2C что ли ? И этот "float" ни что иное, как ОК... Вот откуда требования к ёмкости...
Это ж другая песня будет. Там же есть:
Rp Value of Pull-up resistor
...

Добавление от 14.03.2006 10:41:

И ёмкость там есть:
Ci(1) Capacitance for each I/O Pin 10 pF
(1) Notes: 1. In ATmega48/88/168, this parameter is characterized and not 100% tested.

Добавление от 14.03.2006 10:42:

См. стр.294, документ 2545D–AVR–07/04 "ATmega48/V ATmega88/V ATmega168/V Preliminary"

956. LazyCamel, 14.03.2006 14:04
цитата:
Tahoe:

Dikoy
Ну ты и пишешь. Доменя только сейчас, случайно допёрло. Так у тебя АЦП сидит на I2C что ли ? И этот "float" ни что иное, как ОК... Вот откуда требования к ёмкости...
Это ж другая песня будет. Там же есть:
Rp Value of Pull-up resistor
...

Надо больше спать Какой i2C, какой ОК ? Он что пулл-ап >10Mom требует ?
Это же обычный переключатель режимов.

ИМХО - обычные 0/1/Z. Просто побоялись написать NC чтобы вывод помехи не натянул и захотели резистор. Я теперь последнее время на УСб тоже мегомные резисторы с даты на питание кидаю.
Чисто на всякий случай.

957. Tahoe, 14.03.2006 15:55
LazyCamel
Это же обычный переключатель режимов.
Вообще я нить потерял. Это про что - "переключатель режимов"?
Берём паузу на:

Dikoy
Интерфейс АЦП какой?

958. Vesel'chak U, 14.03.2006 17:16
Tahoe
Ну например тот же вход в прерывание с использованием глобальных переменных. Если делать не отдельные переменные, а глобальную структуру с указателями, то никакой асм уже имхо ничего не ускорит.
Не поможет. Компилятор всё равно в стек всё пихает, причём в программный.

959. Tahoe, 14.03.2006 18:50
Vesel'chak U
Сделаешь короче, но главное что быстрее работало?

код:
D:\work\projects\!Trash\trash\trash.c
1 #include <ioavr.h>
2
3 typedef struct
4 {
5 volatile char i;
6 volatile char j;
7 } ts;
8

\ In segment NEAR_Z, align 1, keep-with-next
\ 00000000 REQUIRE `?<Segment init: NEAR_Z>`
9 ts global;
\ global:
\ 00000000 DS 2
10

\ In segment CODE, align 2, keep-with-next
11 void main( void )
\ main:
\ ??main_0:
12 {
13 for( ;; )
\ 00000000 CFFF RJMP ??main_0
14 {
15 }
16 }
17
18 #pragma vector=TIMER0_OVF_vect

\ In segment CODE, align 2, keep-with-next
19 __interrupt void Timer0overflowHandler( void )
\ Timer0overflowHandler:
20 {
\ 00000000 93FA ST -Y, R31
\ 00000002 93EA ST -Y, R30
\ 00000004 931A ST -Y, R17
\ 00000006 930A ST -Y, R16
\ 00000008 B71F IN R17, 0x3F
21 ts *g = &global;
22
23 g->i++;
\ 0000000A 9100.... LDS R16, global
\ 0000000E 9503 INC R16
\ 00000010 9300.... STS global, R16
24 g->j--;
\ 00000014 .... LDI R30, LOW(global)
\ 00000016 .... LDI R31, (global) >> 8
\ 00000018 8101 LDD R16, Z+1
\ 0000001A 950A DEC R16
\ 0000001C 8301 STD Z+1, R16
25 }
\ 0000001E BF1F OUT 0x3F, R17
\ 00000020 9109 LD R16, Y+
\ 00000022 9119 LD R17, Y+
\ 00000024 91E9 LD R30, Y+
\ 00000026 91F9 LD R31, Y+
\ 00000028 9518 RETI

\ In segment INTVEC, offset 0x12, root
\ `??INTVEC 18`:
\ 00000012 .... RJMP Timer0overflowHandler


Но что бы безопасно было, что бы не вылавливать потом где что "попортилось".

960. LV, 14.03.2006 20:40
Вопрос.
Есть готовая запрограммированная микросхема (прошивка открыта) PIC10F206.

Задача - растиражировать.
Программатор - от Microchip_а BFMP (подключается к USB) (PICkit 1).
Выяснилось, что он не может "закрыть" прошивку.
Скачали из инета другую версию программы - заработало (та, что на диске в комплекте - эта функция не работала).

2.Оказалось, что считывает, видимо (?), нормально.
Но после записи считанного .hex файла из рабочей микросхемы - новая, или эта же ( с той же ячейкой корректировки генератора), микросхема перестает работать.
Считываем эту прошитую мсх. Хекс файл - такой же, только отличие в предпоследней строке ( изменены с конца 3 байта, первый справа (контрольная сумма ? ) и два байта (конфигурации -? ).
если раньше содержание этих байт соответствовало конфигурации ( СР - отключена и т.д.), то в "новом" байте FFF . И микросхема не работает.
Не встречался кто ли с такой ситуацией?

961. LazyCamel, 14.03.2006 20:46
Я про тексасовский 24-битный сигма-дельта ADC на 105килосемплов со SPI интерфейсом.
У которого некоторые режимы устанавливаются внешними цифровыми входами.

962. Dikoy, 15.03.2006 02:22
Tahoe
Насчёт Rвхода. Даташит 48-88-168, стр. 290:
Это я считал, но там ещё и от частоты зависит ток. Кстати, ёмкость тоже плавает (там есть про неё упоминания). Но, думаю, КМОПовскую спецификацию в 18 пФ и 1 мОм пин по любому удовлетворит...

Интерфейс АЦП какой?
SPI. Указанные конфигуровочные пины просто настраивают режим рабоы АЦП и по умолчанию должны быть скоммутированы при впайке. А мне вот захотелось предусмотреть их программное переключение. Ну ничё, в 0 я полюбому пин смогу бросить, так что даже если не получится запустиль АЦП в режиме максимального разрешения, требуемый мне режим макс. скорости я достигну в любом случае.

Добавление от 15.03.2006 02:32:

LazyCamel
Я про тексасовский 24-битный сигма-дельта ADC на 105килосемплов со SPI интерфейсом.
У которого некоторые режимы устанавливаются внешними цифровыми входами.

Угу, оно:
http://www.ti.com/corp/docs/landing/ads1271/index.htm
Там на даташит есть сылка слева в самом верху.

963. DrAG0n, 15.03.2006 09:03
LV

Некоторые программаторы (Понипрог) могут записывать в последние байты флэша серийный номер прошивки. Если программа надеется читать оттуда какие-то данные - у нее это не получается. Попробуй поискать в конфигуракции программатора.

964. Dismon, 15.03.2006 09:04
Tahoe
Сделаешь короче, но главное что быстрее работало?

Та не вопрос , хоть и самую малость, но покороче и побыстрее :

код:

.even
0000 _timer0_ovf_isr::
0000 8A93 st -y,R24
0002 9A93 st -y,R25
0004 8FB7 in R24,0x3f
0006 8A93 st -y,R24
0008 .dbline -1
0008 .dbline 15
0008 ; #include <iom128v.h>
0008 ; #include <macros.h>
0008 ;
0008 ; typedef struct
0008 ; {
0008 ; volatile char i;
0008 ; volatile char j;
0008 ; } ts;
0008 ;
0008 ; ts global;
0008 ;
0008 ;
0008 ; #pragma interrupt_handler timer0_ovf_isr:17
0008 ; void timer0_ovf_isr(void)
0008 ; {
0008 .dbline 17
0008 ; global.i++;
0008 80910000 lds R24,_global
000C 8F5F subi R24,255 ; addi 1
000E 80930000 sts _global,R24
0012 .dbline 18
0012 ; global.j--;
0012 80910100 lds R24,_global+1
0016 8150 subi R24,1
0018 80930100 sts _global+1,R24
001C .dbline -2
001C L2:
001C 8991 ld R24,y+
001E 8FBF out 0x3f,R24
0020 9991 ld R25,y+
0022 8991 ld R24,y+
0024 .dbline 0 ; func end
0024 1895 reti
0026 .dbend
0026 .dbfunc e main _main fV
.even
0026 _main::
0026 .dbline -1
0026 .dbline 23
0026 ; }
0026 ;
0026 ;
0026 ; void main(void)
0026 ; {
0026 L5:
0026 .dbline 26
0026 ;
0026 ; do
0026 ; {
0026 .dbline 27
0026 L6:
0026 .dbline 27
0026 FFCF xjmp L5
0028 X0:
0028 .dbline -2
0028 L4:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend


Что любопытно, в данном случае имаге крафт поступил разумнее иара, не стал дергать Z регистр без повода. Правда тут есть одно темное место - на кой он R25 сохраняет/восстанавливает, если его не использует? В общем компилятор моей мечты написал бы тоже самое, что и ицц, только без использования R25. Интересно, иар если к элементам структуры обращаться через точку, напишет так как должно, или нет?

965. LV, 15.03.2006 10:25
DrAG0n
Некоторые программаторы (Понипрог) могут записывать в последние байты флэша серийный номер прошивки.

Знаю только, что исходная микросхема была запрограммирована на программаторе, который имел окно с надписью сверху: "Win Pic программатор".
На русском...

Добавление от 15.03.2006 10:29:

DrAG0n
Если программа надеется читать оттуда какие-то данные - у нее это не получается

А откорректировать вручную .hex файл можно?
Могу сообщить две последние строчки файла - то, что списано с действующей микросхемы, и то, что уже из вновь "запрограммированной".

Добавление от 15.03.2006 10:33:

1.
:02400E00EB0FB6
:00000001FF

2.
:02400E00FF0FA2
:00000001FF

---------
DrAG0n,спасибо, что откликнулись

966. Dismon, 15.03.2006 11:12
LV
Dismon, спасибо, что откликнулись

Ммм... А по какому поводу? На что откликнулся-то?

967. LV, 15.03.2006 11:29
Извините, это относилось к DrAG0n

(выше исправил...)

968. Alexandr Iz, 15.03.2006 12:32
Есть такой вопрос.
Толкьо начал ковыряться в CodeVision и ну и в С вообще.
Родился такой вопрос: а как представить Integer в виде 4-х Char ?
я понимаю, что можно сдвигать по 8 бит вправо и (unsigned char), и можно делением на 256, но это просто дико не оптимально.
Наверняка как-то можно сделать с помощью указателей. Как?

969. АСУТПшник, 15.03.2006 13:26
Дык, вроде заводишь указатель на char и присваиваешь ему адрес integer-а. А потом прибавляешь по единичке. Могу ошибиться в синтаксисе, но примерно так:
unsigned char *sub_bute;
sub_bute=(unsigned char*)&integer;
sub_bute* - первый байт (если не путаю последовательность хранения в памяти)
(sub_bute+1)* - второй байт

Кстати в пиках как сделана работа с указателями мне не нравится. Лучше уж завести структуру
код:

typedef union Integer_
{
integer a;
struct{
unsigned char b;
unsigned char c;
unsigned char d;
unsigned char e;
};
}

ps: не верьте мне, я начинающий

970. Tahoe, 15.03.2006 14:14
Alexandr Iz
а как представить Integer в виде 4-х Char ?
Посмотри книжку Карнигана и Ричи, раздел про union. Должно получиться что-то вроде:

unsigned long l;

union
{
unsigned long as_long;
unsigned char as_char[4];
} var;

var.as_char[3] = 0x76;
var.as_char[2] = 0x54;
var.as_char[1] = 0x32;
var.as_char[0] = 0x10;
l = var.as_long;

971. Dismon, 15.03.2006 15:18
Tahoe

Попробуй всеже

цитата:

Dismon
если к элементам структуры обращаться через точку

А то очень интыыресно паанимаешь...

972. Tahoe, 15.03.2006 17:27
Dismon
Ничего не понял.

973. Alexandr Iz, 15.03.2006 18:50
АСУТПшник Tahoe
спасибо, будем пробовать.

974. Zman, 15.03.2006 19:57
LV

почитай внимательно этот документ (http://ww1.microchip.com/downloads/en/devicedoc/41228d.pdf)

на стр. 2 в серой рамке читаем NOTE:

By convention the Configuration Word register is stored at the logical address location of 0xFFF within the hex file generated for the PIC10F200/202/204/206. This logical address location may not reflect the actual physical address for the part itself. It is the responsibility of the programming software to retrieve the Configuration Word register from the logical address within the hex file and translate the
address to the proper physical location when programming.

очень похоже на то, что твой программатор некорректно записывает слово конфигурации, соответственно потом читает его неверно (все единички - значит читается из непрошитой ячейки или вообще с левого адреса)

пробуй на другом программаторе или софт апдейти

975. Dismon, 16.03.2006 08:41
Tahoe
Ничего не понял

Ты здесь Помогите начать работать с микроконтроллерами., #959 (http://forum.ixbt.com/topic.cgi?id=48:1119:959#959) сказал типа попробуй сделать короче и быстрее.

Я здесь Помогите начать работать с микроконтроллерами., #964 (http://forum.ixbt.com/topic.cgi?id=48:1119:964#964) сказал типа не вопрос, вот тебе.

Ну и высказал предположение, что код иара будет лучше, если вместо g->i++ написать global.i++.

976. Tahoe, 16.03.2006 10:54
Dismon
Теперь понял.

Насёт точки. В документе "avr035 Efficient C Coding for AVR", на который я ссылаюс наверное еженедельно, это всё расписано:
When global variables are required they should be collected in structures whenever
appropriate. This makes it possible for the C compiler to address them indirectly. The
following example shows the code generation for global variable versus global
structures.
код:
typedef struct
{
char sec;
}t;

t global /* Declare a global structure*/

char min;

__C_task void main(void)
{
t *time = &global;
// LDI R30,LOW(global) ; Init Z pointer
// LDI R31,(global >> 8) ; Init Z high byte

if (++time->sec == 60)
{
// LDD R16,Z+2 ; Load with displacement
// INC R16; Increment
// STD Z+2,R16 ; Store with displacement
// CPI R16,LOW(60) ; Compare
// BRNE ?0005 ; Branch if not equal
}

if ( ++min == 60)
{
// LDS R16,LWRD(min) ; Load direct from SRAM
// INC R16 ; Increment
// STS LWRD(min),R16 ; Store direct to SRAM
// CPI R16,LOW(60) ; Compare
// BRNE ?0005 ; Branch if not equal
}
}

Добавление от 16.03.2006 11:11:

Не, фигня, не показательно. Короче сделай так.

код:
D:\work\projects\!Trash\trash\trash.c
1 #include <ioavr.h>
2
3 typedef struct
4 {
5 volatile char i;
6 volatile char j;
7 } ts;
8

\ In segment NEAR_Z, align 1, keep-with-next
\ 00000000 REQUIRE `?<Segment init: NEAR_Z>`
9 ts global;
\ global:
\ 00000000 DS 2
10

\ In segment CODE, align 2, keep-with-next
11 void main( void )
\ main:
\ ??main_0:
12 {
13 for( ;; )
\ 00000000 CFFF RJMP ??main_0
14 {
15 }
16 }
17
18 #pragma vector=TIMER0_OVF_vect

\ In segment CODE, align 2, keep-with-next
19 __interrupt void Timer0overflowHandler( void )
\ Timer0overflowHandler:
20 {
\ 00000000 93FA ST -Y, R31
\ 00000002 93EA ST -Y, R30
\ 00000004 931A ST -Y, R17
\ 00000006 930A ST -Y, R16
\ 00000008 B71F IN R17, 0x3F
21 // ts *g = &global;
22
23 global.i++;
\ 0000000A 9100.... LDS R16, global
\ 0000000E 9503 INC R16
\ 00000010 9300.... STS global, R16
24 global.j--;
\ 00000014 .... LDI R30, LOW(global)
\ 00000016 .... LDI R31, (global) >> 8
\ 00000018 8101 LDD R16, Z+1
\ 0000001A 950A DEC R16
\ 0000001C 8301 STD Z+1, R16
25 }
\ 0000001E BF1F OUT 0x3F, R17
\ 00000020 9109 LD R16, Y+
\ 00000022 9119 LD R17, Y+
\ 00000024 91E9 LD R30, Y+
\ 00000026 91F9 LD R31, Y+
\ 00000028 9518 RETI

\ In segment INTVEC, offset 0x12, root
\ `??INTVEC 18`:
\ 00000012 .... RJMP Timer0overflowHandler


И... Опять фигня. То же самое.

Я точно помню, специально как-то раз проверял, через -> было оптимальнее. Но сейчас пофиг... Хотя проверял давно, так что возможно дело в том, что ИАР был "помоложе".

977. LV, 16.03.2006 11:17
Zman
очень похоже на то, что твой программатор некорректно записывает слово конфигурации

Во-первых, он не мой, а "от Microchip"...

Уже выяснили в чем причина:
записывает он правильно (версия ПО к нему, которая шла на диске в комплекте - не ставила защиту, скачанная из инета новая версия ПО - стала ставить защиту).
Записывает правильно исходный файл.
Но если считать из микросхемы записанный ( и не защищенный) файл, но при считывании он правильно считывает файл конфигурации, но заносит его в несуществующий ( в данной микросхеме) адрес... . Естественно, после записи этого файла микросхема не работает...

Направлено письмо майкрочипу...

978. Dismon, 16.03.2006 12:55
Tahoe
Хотя проверял давно, так что возможно дело в том, что ИАР был "помоложе".

Мда. Не ожидал от иара старческого маразма. Ну а если всерьез, получается, что ицц в данном случае умнее. Я думаю, ты согласишься, что
код:

0008 80910000 lds R24,_global
000C 8F5F subi R24,255 ; addi 1
000E 80930000 sts _global,R24
0012 80910100 lds R24,_global+1
0016 8150 subi R24,1
0018 80930100 sts _global+1,R24


лучше чем
код:

\ 0000000A 9100.... LDS R16, global
\ 0000000E 9503 INC R16
\ 00000010 9300.... STS global, R16
\ 00000014 .... LDI R30, LOW(global)
\ 00000016 .... LDI R31, (global) >> 8
\ 00000018 8101 LDD R16, Z+1
\ 0000001A 950A DEC R16
\ 0000001C 8301 STD Z+1, R16

ровно на 2 команды загрузки Z. Кстати, если использовать -> ицц тоже начинает мудрить с Z регистром, и тогда тупит сильнее иара:
код:

0010 ; ts *g = &global;
0010 00E0 ldi R16,<_global
0012 10E0 ldi R17,>_global
0014 .dbline 18
0014 ; g->i++;
0014 F801 movw R30,R16
0016 8081 ldd R24,z+0
0018 8F5F subi R24,255 ; addi 1
001A 8083 std z+0,R24
001C .dbline 19
001C ; g->j--;
001C 3196 adiw R30,1
001E 8081 ldd R24,z+0
0020 8150 subi R24,1
0022 8083 std z+0,R24


Еще бы понять, зафиг ицц R25 сохраняет/восстанавливает...

979. Tahoe, 16.03.2006 14:01
Dismon


LDS Rd, k Load Direct from SRAM Rd ← (k) None 2
SUBI Rd, K Subtract Constant from Register Rd ← Rd - K Z,C,N,V,H 1
STS k, Rr Store Direct to SRAM (k) ← Rr None 2
LDS Rd, k Load Direct from SRAM Rd ← (k) None 2
SUBI Rd, K Subtract Constant from Register Rd ← Rd - K Z,C,N,V,H 1
STS k, Rr Store Direct to SRAM (k) ← Rr None 2


LDS Rd, k Load Direct from SRAM Rd ← (k) None 2
INC Rd Increment Rd ← Rd + 1 Z,N,V 1
STS k, Rr Store Direct to SRAM (k) ← Rr None 2
LDI Rd, K Load Immediate Rd ← K None 1
LDI Rd, K Load Immediate Rd ← K None 1
LDD Rd,Y+q Load Indirect with Displacement Rd ← (Y + q) None 2
DEC Rd Decrement Rd ← Rd − 1 Z,N,V 1
STD Y+q,Rr Store Indirect with Displacement (Y + q) ← Rr None 2

Пока ты в плюсе, на 2 тика.

Теперь давай ближе к реальности, переменных не две, а скажем 5. Понеслась:
код:

D:\work\projects\!Trash\trash\trash.c
1 #include <ioavr.h>
2
3 typedef struct
4 {
5 volatile char i0, i1, i2, i3, i4;
6 } ts;
7

\ In segment NEAR_Z, align 1, keep-with-next
\ 00000000 REQUIRE `?<Segment init: NEAR_Z>`
8 ts global;
\ global:
\ 00000000 DS 5
9

\ In segment CODE, align 2, keep-with-next
10 void main( void )
\ main:
\ ??main_0:
11 {
12 for( ;; )
\ 00000000 CFFF RJMP ??main_0
13 {
14 }
15 }
16
17 #pragma vector=TIMER0_OVF_vect

\ In segment CODE, align 2, keep-with-next
18 __interrupt void Timer0overflowHandler( void )
\ Timer0overflowHandler:
19 {
\ 00000000 93FA ST -Y, R31
\ 00000002 93EA ST -Y, R30
\ 00000004 931A ST -Y, R17
\ 00000006 930A ST -Y, R16
\ 00000008 B71F IN R17, 0x3F
20 ts *g = &global;
21
22 g->i0++;
\ 0000000A 9100.... LDS R16, global
\ 0000000E 9503 INC R16
\ 00000010 9300.... STS global, R16
23 g->i1--;
\ 00000014 .... LDI R30, LOW(global)
\ 00000016 .... LDI R31, (global) >> 8
\ 00000018 8101 LDD R16, Z+1
\ 0000001A 950A DEC R16
\ 0000001C 8301 STD Z+1, R16
24 g->i2++;
\ 0000001E 8102 LDD R16, Z+2
\ 00000020 9503 INC R16
\ 00000022 8302 STD Z+2, R16
25 g->i3--;
\ 00000024 8103 LDD R16, Z+3
\ 00000026 950A DEC R16
\ 00000028 8303 STD Z+3, R16
26 g->i4++;
\ 0000002A 8104 LDD R16, Z+4
\ 0000002C 9503 INC R16
\ 0000002E 8304 STD Z+4, R16
27 }
\ 00000030 BF1F OUT 0x3F, R17
\ 00000032 9109 LD R16, Y+
\ 00000034 9119 LD R17, Y+
\ 00000036 91E9 LD R30, Y+
\ 00000038 91F9 LD R31, Y+
\ 0000003A 9518 RETI

\ In segment INTVEC, offset 0x12, root
\ `??INTVEC 18`:
\ 00000012 .... RJMP Timer0overflowHandler


Добавление от 16.03.2006 14:13:

Еще бы понять, зафиг ицц R25 сохраняет/восстанавливает...
When entering an interrupt routine all registers used in the interrupt routine are pushed
on the Stack.
Поскольку в твоём примере он используется, потому и сохраняется.

980. Dismon, 16.03.2006 15:08
Tahoe
Пока ты в плюсе, на 2 тика.
Локально да. А несколько более глобально надо еще не забыть сравнить
код:

\ 00000000 93FA ST -Y, R31
\ 00000002 93EA ST -Y, R30
\ 00000004 931A ST -Y, R17
\ 00000006 930A ST -Y, R16
\ 00000008 B71F IN R17, 0x3F

и
код:

0000 8A93 st -y,R24
0002 9A93 st -y,R25
0004 8FB7 in R24,0x3f
0006 8A93 st -y,R24

Ну еще естественно восстановление всего этого хозяйства. Так что общее преимущество 2+2+2=6 тиков.

Теперь давай ближе к реальности, переменных не две, а скажем 5. Понеслась:

Да хоть 20. . Разницы для конкретного случая (структура в ОЗУ, поля размерностью байт) нет никакой, почему - понятно из листинга. Просто вместо работы через Z регистр со смещением (каковое кстати может быть всего лишь в диапозоне 0...63, так что в случаее более 64 переменных иар еще некоторое количество тактов проиграет на инкременте Z ) ицц будет брать адрес и прибавлять к нему 1,2...65....ххх.

код:

0000 _timer0_ovf_isr::
0000 8A93 st -y,R24
0002 9A93 st -y,R25
0004 8FB7 in R24,0x3f
0006 8A93 st -y,R24
0008 .dbline -1
0008 .dbline 15
0008 ; #include <iom128v.h>
0008 ; #include <macros.h>
0008 ;
0008 ; typedef struct
0008 ; {
0008 ; volatile char i0, i1, i2, i3, i4;
0008 ; } ts;
0008 ;
0008 ; ts global;
0008 ;
0008 ; #pragma ctask
0008 ;
0008 ; #pragma interrupt_handler timer0_ovf_isr:17
0008 ; void timer0_ovf_isr(void)
0008 ; {
0008 .dbline 16
0008 ; global.i0++;
0008 80910000 lds R24,_global
000C 8F5F subi R24,255 ; addi 1
000E 80930000 sts _global,R24
0012 .dbline 17
0012 ; global.i1--;
0012 80910100 lds R24,_global+1
0016 8150 subi R24,1
0018 80930100 sts _global+1,R24
001C .dbline 18
001C ; global.i2++;
001C 80910200 lds R24,_global+2
0020 8F5F subi R24,255 ; addi 1
0022 80930200 sts _global+2,R24
0026 .dbline 19
0026 ; global.i3--;
0026 80910300 lds R24,_global+3
002A 8150 subi R24,1
002C 80930300 sts _global+3,R24
0030 .dbline 20
0030 ; global.i4++;
0030 80910400 lds R24,_global+4
0034 8F5F subi R24,255 ; addi 1
0036 80930400 sts _global+4,R24
003A .dbline -2
003A L2:
003A 8991 ld R24,y+
003C 8FBF out 0x3f,R24
003E 9991 ld R25,y+
0040 8991 ld R24,y+
0042 .dbline 0 ; func end
0042 1895 reti

When entering an interrupt routine all registers used in the interrupt routine are pushed
on the Stack.
Поскольку в твоём примере он используется, потому и сохраняется.


"При входе в прцедуру прерывания, все регистры, используемые в этой процедуре, будут помещены в стек". Да, само сабой. Но используемые. А я в листинге не нашел R25 вообще, кроме как его сохранения и восстановления. Если ты видишь, где он используется, ткни меня пожалуйста носом в это место.

981. Tahoe, 16.03.2006 15:29
Не знаю. А они, R24/R25, случаем не работают в паре для int? Это хоть как-то объясняло бы.

982. Dismon, 16.03.2006 16:24
Tahoe
А они, R24/R25, случаем не работают в паре для int?

Ну... в проге есть тока char, int там нет. Так что не должны работать в паре - видимо таракнчик компилятора. Ну да багом больше, багом меньше - особо не влияет и ладно. Хотя может черкануть письмецо имагекрафтовцам? Или в 7.х компиляторе попробовать... Я пользую 6.31А, последний, на который есть внятное лекарство

983. Cloven Clown, 18.03.2006 13:09
Здравствуйте!

Недавно начал знакомиться с микроконтроллерами и практически сразу же забрел в тупик: Можно ли организовать в МК PIC и AVR вшитые в код программы (в ПЗУ памяти программ) таблицы с некими данными и, что самое главное, вытаскивать эти данные из "ПЗУ-таблиц" в произвольном порядке? Чтобы более понятно, то стоит задача реализовать на базе МК "виртуальную машину", которая будет выполнять псевдо-команды, расположенные в самом же МК, т.е. есть код "виртуальной машины", который поочередно выбирает из ПЗУ МК псевдо-коды и в соответствии с ними выполняет определенные действия со своими лапками. Объема Перепрограммируемого ПЗУ маловато будет для этих таблиц, поэтому вопрос именно о памяти программ.

На сколько я смог понять, в AVR для этих целей используется (пока непонятно каким образом) инструкция Load Programm Memory, а вот как обстоят дела с PICами? Там вообще память программ 12, 13 и N-разрядная, поэтому трудности вызывает даже само понимание того, как сохранить таблицу байтовых значений в памяти программ.

Подскажите пожалуйста, что я неправильно понимаю, воспринимаю, а так же как обстоят дела по данному вопросу и где в доступной для начинающих форме об этом можно прочитать.
Заранее спасибо!

З.Ы. Я не халявщик. Читаю по теме очень-очень и очень много (включая 50/50-понятные даташиты на английском ), но для данного вопроса ответа не нашел...

984. LazyCamel, 18.03.2006 19:43
Нет ничего хуже чем высшее образование без среднего

Если сильно горит:
http://rapidshare.de/files/14560648/Primenenie_MK_AV…Baranov_.rar.html
avr123.nm.ru

А еще лучше начать курить все три тома товарища Фрунзе до посинения:

http://rapidshare.de/files/12860174/Microcontrollers_Part1.rar.html
http://rapidshare.de/files/13417639/Microcontroller_Part2.rar.html
http://rapidshare.de/files/14977858/MicroControlleri…stotom_3.rar.html

985. Cloven Clown, 18.03.2006 22:10
2 LazyCamel
Спасибо за еще десяток мегов текста Обязательно прочитаю.
Кстати, за "Нет ничего хуже чем высшее образование без среднего" - тоже спасибо! Детей пугать буду

986. Dikoy, 19.03.2006 15:29
Cloven Clown
Забить таблицу констант и всё...

987. Cloven Clown, 19.03.2006 17:16
2 Dikoy:
"Забить таблицу констант и всё..."

Если это возможно, то чуть поподробней - что есть в приложении к МК "таблица констант", как ее "забить" и, самое главное, как к элементам таблицы обращаться?

Еще раз извиняюсь за своё "высшее без среднего", но, блин, никак не могу въехать. С ВМ1 (старая добрая БэКашка) в машинных кодах нормально понимали друг-друга, с Z80 - тоже, да и с х86 (правда на более высоком программном уровне) но ведь там и организация памяти совершенно другая. Там я, грубо говоря, "называю" такую-то область областью данных и спокойно обращаюсь к этой области из любого места программы посредством прямой или косвенной адресации. А с PIC, например, как?

2 LazyCamel:
Еще раз спасибо за книжки, но вот только... В общем, при тщательном просмотре Оглавления книг и глав, по моему усмотрению имеющих отношение к вопросу, ничего полезного (из того, чего бы я уже не знал) обноружено не было... Но всё равно еще раз спасибо!

988. Tahoe, 19.03.2006 17:57
Cloven Clown
Маленький хинт. Попытайся чётко сформулировать, чего ты хочешь добиться. Тебе просто нужен массив указателей или массив значений? Опиши реальную задачу.

P.S. Правильно заданый вопрос - это половина ответа.

989. Cloven Clown, 19.03.2006 18:43
2 Tahoe и All:
Извиняюсь за неумелую постановку. Постараюсь более подробно и реально.

Реально необходим массив значений, но интересует механизмы организации таблиц/массивов в памяти программ МК.

Реальная задача:

Переменные:
СЧЕТЧИК

Код программы:
- Цикл

-- Если Значение в таблице по адресу "Базовый адрес таблицы + СЧЕТЧИК" = 1, то Захватываем мир и Выходим из Цикла. Если Захват не удался, Крутим цикл дальше;

-- Если Значение в таблице по адресу "Базовый адрес таблицы + СЧЕТЧИК" = 2, то Захватываем континент и Выходим из Цикла. Если Захват не удался, Крутим цикл дальше;

-- Если Значение в таблице по адресу "Базовый адрес таблицы + СЧЕТЧИК" = 3, то Захватываем страну и Выходим из Цикла. Если Захват не удался, Крутим цикл дальше;

-- Если Значение в таблице по адресу "Базовый адрес таблицы + СЧЕТЧИК" = 4, то Захватываем психбольницу и Выходим из Цикла. Если Захват не удался, Крутим цикл дальше;

-- Если Значение в таблице по адресу "Базовый адрес таблицы + СЧЕТЧИК" = 5, то Пьем назначенные лекарства и Выходим из цикла.

-- Инкримент СЧЕТЧИКа

- Конец цикла
- Ложимся спать с повторным входом в Цикл на следующий день.
Конец программы

Дальше, имея один общий на всех код, создаем различные модели поведения и стратегии достижения цели путем изменения таблицы/массива значений:
Таблица(массив) значений:
1, 2, 3, 4, 5 или 4, 3, 2, 1, 5 или вообще без "5".

Ну то есть, необходимо создать виртуальную машину, способную выполнять от устройства к устройству меняющуюся последовательность и виды псевдо-команд, которые должны находиться в ПЗУ памяти программ микроконтроллера "марки" PIC или AVR, но никак ни в EEROM или внешнем ЗУ.

Вопрос не в том, что такое массив или как организовать цикл или как что-то захватить (управлять портами) или еще в чем, а именно в том, как создать массив значений в ПЗУ МК и последовательно или в произвольном порядке вытягивать эти самые значения. Т.е. механизмы, команды, "трики" и т.п. для организации сего в данном виде МК. Вот...
Вроде всё так.
Спасибо.

990. Tahoe, 19.03.2006 19:36
Cloven Clown
Чессговоря всё равно не понял, на кой это надо. Ты описал алгоритм, а не реальную задачу.

Касательно реализации, я так сам не делал, но знаю что в Си можно использовать массив указателей на функции. Зводишь переменную cnt, заводишь массив указателей на функцию fp[], ну и используешь cnt для адресации функции захват_вселенной(), захват_галлактики() и т.д. А где будет этот массив располагаться - да пох. Где скажешь, туда компиллер/линкер и сунет.
Применитеьлно к АВРу, имей ввиду, что это Гарвардская архитектура. Т.е. там ПЗУ и ОЗУ на разных шинах висят, а не на одной, как в Неймановской машине.

991. LazyCamel, 19.03.2006 23:50
цитата:
Cloven Clown:
2 LazyCamel:
Еще раз спасибо за книжки, но вот только... В общем, при тщательном просмотре Оглавления книг и глав, по моему усмотрению имеющих отношение к вопросу, ничего полезного (из того, чего бы я уже не знал) обноружено не было... Но всё равно еще раз спасибо!

Вопрос в чем ?
Была задача:
Как записать во флеш AVR что-то что, позволило бы по мере выборки формировать определенные сигналы на ножках.По прочтению инструкця кажеться что это команда LPM.

Отлично делаем запрос например такой
http://www.google.com/search?hs=CCj&hl=ru&cl…%81%D0%BA&lr=

и получаем русское описание команды LPM, например:
http://www.gaw.ru/html.cgi/txt/doc/micros/avr/asm/lpm.htm

Человеку же знакомому с микропроцессорами/микроконтроллерами, не важно с какими, хоть с Z80/х51 не составить после этого труда найти команду :
http://www.gaw.ru/html.cgi/txt/doc/micros/avr/asm/out.htm
которая занмается в частности тем, что записывая определенное число в адрес порта связанного с входами/выходами микроконтроллера управляет состоянием на его ногах.

И именно потому что эти два команды являются для микроконтроллерщиков чем-то вроде "Хылло,ворлд" для Си и вызвало такую удивленную реакцию, по крайней мере у меня, извините. Т.е. возникло ощущение человека не ознакомившегося с азами но сразу ринувшегося на штурм создания "самой лучшей в мире программы", опять таки извините.

Чисто программерский ответ(100% точный, но ИМХО неправильный) на идею вашего "движка" звучал бы примерно так:

ldi r31, high (table)
ldi r30, low (table)
lpm
out PORTx,r0

Но тогда ответы на вопросы "что такое high @ low", как определить адрес "table" и почему вывод идет в PORTx, а не скажем PINx и выкатило бы просто во второе AVR123.NM.RU

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

Я в первой ссылке ИМХО была самая доступная модель работы микроконтроллера на базе АВР.

992. Cloven Clown, 20.03.2006 02:50
Tahoe
Точно, описал алгоритм, а не реальную задачу. Хотя, это скорее не алгоритм, а аллегория на тему реальной задачи Сама же реальная задача описывается абстрактными аппаратно- и программно-независимыми терминами, далекими от тематики данного форума. Инфа в архивах занимает не один CD, а пара предложений вызовет бурю негодования на тему "Зачем тебе это надо", при том, что я и сам задаюсь этим вопросом ежедневно (писано в расчете на твое чувство юмора - про галактики и вселенные мне понравилось, я в примере как-то мелко мыслил )
И конечно спасибо за пояснения и беседу - во многом мне помогло для обретения истины Правда! Спасибо.

LazyCamel
Во-первых, даже и в мыслях не было Вас обидеть. Во-вторых, возможно это прозвучит малоубедительно, но Ваш пример с реальным кодом, который делает (по Вашим же словам) именно то, что мне надо, дал бы мне пинок в абсолютно реальную сторону поиска инфы (по поводу "Ldi" и "Lpm", т.к. все остальное понятно и так), а не в сторону прочтения многотомных "азов", что нисколько не умоляет значения приведенных Вами ссылок. Здесь я не "предъявляю", не "брыкаюсь" и не "остальные не", а просто поясняю свою глупую позицию А за ссылки действительно спасибо! И за пример тоже...

2 All (из тех, кто возможно задастся подобными же вопросами)
В AVRках все понятно (см.выше).
В PICах - чуть запущенней... Таблица значений представляет собой последовательно размещенные команды RETLW (возврат из подпрограммы с загрузкой константы в W) и получение значений из таблицы заключается в вызове через CALL необходимой строки в таблице, что приводит к немедленному возврату из подпрограммы с возвратом значения в аккумуляторе.
В "старших" PICах (похоже, начиная с 18-ых), существуют специальные средства (спец. регистры), с помощью которых можно непосредственно получить данные из памяти программ.
Собственно, это всё что лично мне необходимо было знать.

993. Zman, 20.03.2006 19:33
Cloven Clown:

по поводу пиков с 14-битными словами (все серии 16Fxxx):

- один вариант ты правильно написал, через RETLW H'xx' и ADDWF, PCL организуешь выборку одного байта из таблицы (макс. 255), получается одно слово хранит один байт.

- второй вариант очень экзотический, но при правильной реализации может дать выигрыш в объеме данных в 2 раза! Если в двух словах, то ты можешь записать произвольные данные размером в 14-бит в программную память. Исполняться эти слова конечно не могут, но ты можешь их использовать как данные!. Для этого читаешь из программного флеша слово в 14 бит и интерпретируешь его как тебе нужно. Например у меня таким образом зашифрован текст на английском языке (довольно длинные сообщения), так как ASCII - 7 bit only, то у меня в одном слове хранится ДВА символа: 7+7=14. Очень эффективный метод, когда много текста, правда этот текст получается довольно сложно вытащить

(серии 18F в этом сообщении не касаюсь вообще...)

994. Navir5, 21.03.2006 08:42
Нужен программатор и описание микроконтроллера pic16lf876. Поделитесь, пожалуйста. Вышлите на atemar1@rambler.ru/

995. K_AV, 21.03.2006 10:18
Navir5
Ну и сильна же лень у людей...
http://www.microchip.ru/lit/?mid=1x0, а там выбирай - все сразу или по главам.
Насколько знаю, PIC16F(LF)876 сняты с производства, распродают остатки. Вместо них идут PIC16LF876A, отличающиеся наличием всторенного компаратора и измененной процедурой прошивки. Так что лучше сразу ориентироваться на него. Программно с 876 без "А" он полностью совместим, если не использовать вновь появившиеся ресурсы.

996. Navir5, 21.03.2006 10:34
Большое спасибо за описание. Половина моих проблем теперь решена, осталось только найти схемку не сложного программатора.

997. K_AV, 21.03.2006 17:38
Поиск в Интернете по "программирование PIC" не пробовал?
А в связи с изменениями в 876A отдельно ищи по "программирование PIC16F876A", например, посмотри http://www.microchip.ru/phorum/read.php?f=2&i=82…p;t=82509&v=f

998. Cloven Clown, 22.03.2006 00:23
Zman
Спасибо за доп информацию. Хотя в моем случае хранить необходимо исключительно 8-битные значения, а значит 14 битные слова пользовать можно, но уж под очень мрачным алгоритмом распаковывания битового массива в массив байтовый или работая с двумя массивами - байтовым и дополняющим недостающие разряды (битовым)... Брррр... К тому же лишусь возможности произвольного доступа.
Хотя, на будущее конечно знать не помешает. Если нужна будет более подробная консультация по поводу "более экзотического варианта", то, я надеюсь, ты не будешь против, если я прибегу сюда с криками "Zman! Zmaaaan!!!"

999. Chudik, 22.03.2006 06:11
Cloven Clown
А другие процессоры не рассматривал? С нормальной архитектурой? Почему именно PIC?

1000. Zman, 22.03.2006 18:20
Cloven Clown:

одна голова хорошо, а форум лучше (с)

1001. joptpd, 22.03.2006 19:25
подскажите
вот в усб шнурах стоит какая то байда которая на выходе рс 232 дает
можно как то ето дло приспособить для мигания светодиодами?
причем используя готовый драйвер фтди и не вникая в особености усб
хотел для сувенирной елки со светодиодами к следущему новому году

причем нужен шим
или же нужно будет на еще вешать авр?

1002. Tahoe, 22.03.2006 20:04
joptpd
Для начала разбери и посмотри, что за байда. Если не на FTxxx сделана, то драйвера нужны ей будут свои.

АВР понадобится скорее всего по-любому. Хотя... Если лампочка одна и без ШИМа, то можно и так сварганить.

1003. Cloven Clown, 23.03.2006 01:40
Chudik
А другие процессоры не рассматривал? С нормальной архитектурой? Почему именно PIC?
Поверхностно рассматривал процы нескольких производителей и не только с точки зрения "железа". В итоге остановил свой выбор на продукции Atmel и Microchip по той простой причине, что МК от них в последние годы получили наибольшее распространение (в РФ во всяком случае). Лично для меня это означает, что данные "камни" имеют наиболее оптимальное соотношение "цена/возможности/качество", наиболее продвинутую поддержку со стороны производителя, наиболее доступных спциаллистов и прочее. Теперь, принимая во внимание тот факт, что по отзывам в рунете PICи имеют (по сравнению с теми же AVR) не самую удачную архитектуру, не самую развитую систему команд, не самый хороший показатель производительности (4 клока на команду и не самый эффективный код) и т.д. и т.п., берем за основу именно PIC и... вояем виртуальную (компьютерную) модель того, что нам нужно будет позже получить в "железе" . "Модель" создается на VB (сознательно), полностью программно и аппаратно независимой от конкретного типа МК, но с оглядкой на PIC и расчетом, что если на них можно будет реализовать систему, то и на других проблем не возникнет. Выбор "железа" (если до этого дойдет) будет выполняться не мной. И вот, в процессе моделирования и общего развития системы по захвату галактики (с подачи Tahoe ) выясняется, что некоторые данные придется хранить в памяти программ, а как это делается в тех или иных видах МК (если, о ужас!, вообще делается) я не в курсе Собственно, все как и у других
Кстати, подумал сначала, что все это можно выдать НЕ за оффтопик, а за пример того, как делать не надо, но после раздумий не решился

1004. joptpd, 23.03.2006 01:57
Tahoe
а ты не в курсе для каких телефонов можно взять нужный кабель?
у меня мабилы нет так че я не в курсе
мельком смотрел какой то фтди и там было 8 выводов которые обозначены как сигналы рс232 и апаратным контролем передачи
ето было для радиостанции какой то

1005. Tahoe, 23.03.2006 03:23
joptpd
В телефонных шнурах FT вообще не видел ни разу. Там обычно используется CP2101 / CP2103. По сути - то же самое, что и FT232. Вроде там есть и CTS/RTS сигналы. Скачай даташит, посмотри.

P.S. Этот камень чем прикольный - там кварц не нужен. Синхронизация прям от USB идёт.

1006. Chudik, 23.03.2006 03:25
Cloven Clown
Ничего не понял. Зачем было выбирать процессор, который имеет не самую удачную архитектуру, не самую развитую систему команд, не самый хороший показатель производительности (4 клока на команду и не самый эффективный код) и т.д. и т.п.. Врождённый мазохизм чтоли?

1007. LazyCamel, 23.03.2006 08:02
Chudik

"А мне не надо чтобы плац был чистый, мне надо чтобы вы за@#$лись !"

1008. Chudik, 23.03.2006 09:58
LazyCamel
типа того

1009. Cloven Clown, 23.03.2006 10:46
Chudik
Не могу сказать ничего нового, а просто поясню ранее сказанное, ОК?

1. <"Модель" создается на VB (сознательно), полностью программно и аппаратно независимой от конкретного типа МК ...> - т.е. мне на данный момент, грубо говоря, абсолютно пофик, что будет написано на корпусе МК в реальном железе. Идет разработка концепции, если хочешь, а не реального "железного" устройства (взаимосвязанного комплекса устройств), до воплощения которого в жизнь дело может и не дойти по причинам, являющимся оффтопом на данном форуме. Так чего мне париться с конкретными МК, с тем, как они там читают/пишут EEPROM, ROM, RAM, работают с РОНами, управляют портами, таймерами, компараторами и прочее? Читают/пишут/работают - да и ладно.
Мне нужна, еще раз, программно и аппаратно независимая модель, реализовать которую можно будет практически на любом типе МК, выше некоторого минимума. Вот этим самым "минимумом" как раз и является PIC: <...но с оглядкой на PIC и расчетом, что если на них можно будет реализовать систему, то и на других проблем не возникнет...>. Практически уверен, что на любом из рассматриваемых мной МК можно без проблем реализовать вот такой VB-код из "модели" (VB выбран осознанно! повторяю дабы исключить флейм):
If aromRAD(N) = ramABMCounter Then ramTempABM = (ramTempABM * 2) + 1 Else ramTempABM = (ramTempABM * 2) + 0 [color=green]‘самой простой реализацией может быть установка либо флага переноса и запись в байт АБМ сдвигом через перенос, либо предварительный сдвиг байта АБМ и установка его младшего разряда.[/color]
На каком МК равного с PIC/AVR-класса или классом выше нельзя реализовать данную операцию?
Весь остальной код в "модели" так же является платформо-независимым, но учитывающим специфику как МК в целом, так и наиболее "неудобных" представителей (с учетом выбранного "минимума").
Вопрос о конкретном камне будет решаться не мной, не теперь и не на 100%, что будет решаться вообще.

P.S. Зачем все это нужно неплохо объяснил LazyCamel , а какие преимущества/недостатки такой подход дает - каждый решает для себя сам и наверное НЕ озвучивает их, предварительно заглянув в англо-русский словарь по последнему слову моего ника, где будет написано, что таких как я невозможно разозлить, оскорбить или спровоцировать на недостойные действия - этому мешает красный нос

1010. Zman, 23.03.2006 11:15

Cloven Clown
чота ты так замутил, так замутил... может тут форум не тот ?

1011. Lamer2, 23.03.2006 12:47
Cloven Clow
...каждый решает для себя сам и наверное НЕ озвучивает их..
-а зачем озвучивать общеизвестные истины: -если будет работать на "дерьме", то на "качественных"-тем более.
Но данная тема-ликбез по типу:от простого к сложному, а не о профессиональных методах разработки

1012. bvn123, 23.03.2006 15:31
Здесь книжка по МК AVR: http://www.natahaus.ru/2006/03/03/primenenie_mikroko…y_programmy..html

Здесь один из форумов, на мой взгляд на нем мало посторонних тем:
http://forum.electronix.ru/

Реализация подключения малогабаритного графического ЖК-дисплея по I2C в "Схемотехнике" №2,3,продолжение

Часы или I2C для начала слишком - проще начинать со светодиодов, кнопок:
помигал, подергал интервалы включения-выключения, получилось - значит со средой разработки, программированием, программатором ознакомился.

Ассемблер для начала нагляднее - среда разработки с хорошим симулятором скачивается бесплатно.

Пакет, например, IAR EWB потребует поиска крэка

В любом случае для МК необходимы как ассемблер, так и С - в зависимости от задачи

1013. Cloven Clown, 23.03.2006 23:29
Zman
может тут форум не тот?
Тот, тот... Есть море вопросов по аппаратной стороне дела...

Lamer2
А они первые начали!!! ... и... это... спасибо...

1014. Chudik, 24.03.2006 00:55
Cloven Clown
Тот, тот... Есть море вопросов по аппаратной стороне дела...
Тогда, наверное, лучше открыть новую тему с более подробным описанием своего проекта. Эта тема немножко про другое.

1015. joptpd, 26.03.2006 04:14
нашел тут вот штучку
http://mikrocontroller.cco-ev.de/de_sps/beispiele.php

есть в рунете такая байда как алгоритм билдер
ето типа того
тока тут не логические блоки а как бы виртуальные логические елементы дискретной логики
соединяеш меж собой в схему и все...
вся байда работает в игле

1016. Dismon, 29.03.2006 14:02
Купили тут мне JTAG для AVR, спаяли макетку с мегой128, запустил я это дело, все работает. НО! заработало только после того, как я поником запрограммировал фьюз JTAGEN, в связи с чем вопрос:

Нельзя ли фьзы (в том числе и JTAGEN) программировать через JTAG? Логика подсказывает, что нельзя, и придется ставить в плату 2 разъема - для первичного программирования и для отладки. Но может быть логика ошибается?

1017. m16, 29.03.2006 15:47
Dismon
все фузы кроме JTAGEN , локбиты а так же шить(стирать) кристалл как через ISP прграмматор можно житагом . кроме того изначально JTAGEN запрограммирован

1018. Dismon, 29.03.2006 16:36
m16
все фузы кроме JTAGEN , локбиты а так же шить(стирать) кристалл как через ISP прграмматор можно житагом

А как это все (фузы шить, да прогу как через ISP заливать) сделать в студии 4.12 и выше? Фузы мне студия показала только при нажатии кнопки "Disconnected mode" при подключении:

471x244, 9,6Kb

а при попытке их считать выдало ошибку:

424x470, 18,8Kb


цитата:
кроме того изначально JTAGEN запрограммирован
Ну тут видимо монтажники запаяли заюзаную ранее мегу, хотя вроде должны были новую (впрочем, она и выглядит как новая, после единственной пайки ), потому что там были включены все локбиты, бутовые и внешний кварц, и ее пришлось поником вначале стирать, и только за тем шить фузы.

К сообщению приложены файлы: 1.png, 471x244, 10Кb, 2.png, 424x470, 19Кb

1019. Dismon, 29.03.2006 16:48
ЗЫ: Студия еще кстати ругалась на версию фирмваре:

483x178, 10,3Kb

Но я не рискнул нажать кнопку ОК, т.к. JTAG покупной, х.з. как он всосет обновленную прошивку, хотя во вкладыше написано "является полным аналогом AVR JTAG ICE фирмы Atmel", сайт разработчиков

http://www.mprog.nm.ru/avr

Письмо писать с вопросом пока лень , а гостевая у них кажется не работает (пуста, и я не смог оставить сообщение )

Но и без обновления формваре работает в пошаговом режиме, пуск/останов, бреакпоинты и т.п...

К сообщению приложены файлы: 1.png, 483x178, 10Кb

1020. m16, 29.03.2006 17:02
Dismon
А как это все (фузы шить, да прогу как через ISP заливать) сделать в студии 4.12 и выше? Фузы мне студия показала только при нажатии кнопки "Disconnected mode" при подключении:
только обязательно выйти из дебагера

Но я не рискнул нажать кнопку ОК, т.к. JTAG покупной, х.з. как он всосет обновленную прошивку, хотя во вкладыше написано "является полным аналогом AVR JTAG ICE фирмы Atmel", сайт разработчиков
для обновления firmware вам необходим AVRPROG либо прошить в житаг бутлоадер

1021. Dismon, 30.03.2006 08:30
m16
только обязательно выйти из дебагера

Нельзя ли поподробней? А то я видимо совсем тормоз, не могу ничего добиться. Делаю так:

Выхожу я из дебагера (Stop debugging), жму Tools/AutoConnect, вываливается табличка с фузами, при этом предупреждается "Disconnected mode - open connection dialog for reconnect", есс-но ни пишет, ни читает. Нажимаю "Connect dialog", выскакивает окошко "Select AVR programmer" (его снимок я приводил выше), выбираю JTAG, выскакивает сообщение о старой версии фирмваре, предлагают обновить, нажав "Ок" или отказаться от обновления. Я отказываюсь, на этом все завершается, по прежнему нет доступа (или я просто незнаю куда смотреть) к фузам, нет возможности использовать JTAG как программатор...

1022. m16, 30.03.2006 08:49
всё правильно делаете. имхо обновить firmware нужно . как это сделать я писал. если не avrprog как через бутлоадер обновиться почитайте здесь А кто-нибудь сделал AVR JTAG ICE? (http://forum.ixbt.com/topic.cgi?id=48:2805)

1023. Dismon, 30.03.2006 09:53
m16
как это сделать я писал.

Загвозда в том, что эта хрень покупная, еще на гарантии, и внутрь залезть проблематично. Эту ветку я читал, однако, как я понял, бут чтобы залить надо внешний программатор, через УСБ кабель он не защьется...

В общем похоже единственный реальный способ - найти студию постарее.

1024. m16, 31.03.2006 09:50
Dismon
совсем забыл , чтобы в житаг войти как в программатор небходимо изменить платформу отладки для этого :
Debug->Select Platform and device->AVR Simulator
Connect->JTAG ICE
вот теперь можно шить,стирать проц, играться с фузами и локбитами
Удачи

1025. joptpd, 02.04.2006 21:52
кто скажет
зачем тут светодиоды вместо земли воткнуты во второй порт?
http://www.mcselec.com/index.php?option=com_content&…=92&Itemid=57

1026. Zman, 02.04.2006 23:05
joptpd:

The remaining pin (portb.7) can be used to switch to different messages or change colour.

св-диоды там двух цветные, типа ток в одном направлении - красные, в обратном - зеленые... то есть два диода в противоположном направлении собраны в одном корпусе

1027. Tahoe, 02.04.2006 23:31
joptpd
Потому что там светодиоды - двухцветные.

цитата:
'Portb.7 to pull up resister and momentary switch to gnd.
'This switch can be used to goto a subroutine to change colour or between messages....
'currently not using it with this Application Note.

1028. Chudik, 03.04.2006 03:02
Zman
типа ток в одном направлении - красные, в обратном - зеленые... то есть два диода в противоположном направлении собраны в одном корпусе
А если использовать синхронный 2х канальный "ШИМ", то можно сделать жёлтый цвет. И вообще достаточно плавное изменение цвета от красного к зелёному.

1029. joptpd, 03.04.2006 05:20
аа
я то не читал
надо будет попробовать

кстати по светодиодам
в начале 90х покупал я 3х цветные
цвет там в зависимости от тока менялся
с тех пор вот нигде и не видел такие

они еще существуют или если нет то почему?

1030. Chudik, 03.04.2006 05:36
joptpd
они еще существуют или если нет то почему?
Я не знаю. чуществуют они или нет, но если нет, то это вполне объяснимо - аналоговое управление током светодиода "неудобно". Гораздо проще подключить цифру с 2х сторон и управлять ШИМом.

1031. Dismon, 03.04.2006 09:51
m16
Debug->Select Platform and device->AVR Simulator
Connect->JTAG ICE


Нифига, похоже без обновления прошивки со студией 4.10-4.12 работать в режиме программатора работать не будет. Сделал я вышеперечисленное, при нажатии "Connect" после выбора жтага вываливается обычное предупреждение, что надо фирмварь обновить, я отказываюсь, комп пару секунд думает, затем на очень короткое время (я даже PrintScrееn нажать не успеваю, а может оно не успевает сработать ) появляется какое-то окно, исчезает и на этом все заканчивается. Где-то у меня должна была студия 4.08 валяться, щас буду искать.

ЗЫ: наплевал я на гарантию, разобрал коробочку. Там мега 16, преобразователь USB, и еще какая-то микросхема, маркировку не могу даже сквозь увеличитель различить (спещиально затирали чтоли ). Мега в TQFP корпусе, разьем для подключения программатора отсутствует. Так что видимо, если захочу студию посовременней, придется к выводам меги на проводках подпаивать разьем для подключения программатора, шить бут и далее по ветке про JTAG

1032. joptpd, 07.04.2006 16:49
скажите а почему на асм в начале даные записывают в регистры rxx
а тока потом в служебные
почему нельзя сразу записать напрямую?
например даташит на мегу 16 в разделе тви
там примеры есть

и другой вопрос
буду делать плавающую платформу на 2х сиськах пластиковых с движками + камера
чисто летом погонять в озере

помогите с протоколом
передаем преамбулу в 1 байт из 1 и 0
потом идет байт даных
потом црц

как ее вычислить на сях?

далее декодирование
сигнал с приемника на компаратор
с него по прерыванию определяю по маске какая команда
так?

а как то гда быть если байда мне на пульт будет передавать положение руля и состояние батарей?

скажем для батарей пусть будет 8 градаций на 3 бита
или же мне лучше подключить ацп и гнать сразу 2 байта от туда но отдельно от команд?
с рулем думаю магниторезистор прикрутить тоже на один из каналов ацп

или может есть другие идеи?
готовый код не нужен кроме црц
или хотя бы алгоритм для мк
а я его на компе проработаю

1033. Vesel'chak U, 07.04.2006 23:02
joptpd
передаем преамбулу в 1 байт из 1 и 0
Пройдёт только ежели данные (и контрольная сумма тоже) заведомо никогда не будут иметь такое значение.
А почему код не преобразовать в ASCII? Сразу отпадёт вопрос о правильности приёма (контрольную сумму правда никто не отменял).
Простейший вариант контрольной суммы - сумма по модулю 256 всех отправленных данных.
unsigned char CS, Data, CntCS, NumCS;
CS=0;
for (CntCS=0; CntCS<NumCS; CntCS++)
{
CS+=Data;
}
Это условный вариант, иногда проще не делать отдельный цикл вычисления контрольной суммы, а вычислять по мере передачи данных.

сигнал с приемника на компаратор
Надеюсь, модуляция - ЧМ?

1034. majorPAE, 07.04.2006 23:10
joptpd
Ты со шнурком от мобилки разобрался? Или забросил это дело?

1035. Cloven Clown, 08.04.2006 00:05
joptpd
Есть очень неплохой документик по CRC:
Ross N. Williams "Элементарное руководство по CRC-алгоритмам обнаружения ошибок" на русском (pdf, 36 страниц).

В разделе №8 буквально на пальцах и в применимых к МК условиях, объясняется как это можно сделать (прикрепленный алгоритм из этой доки).
Где брал файл не помню, а по сему, если нужно, могу выслать на e-mail (167Кб в архиве).

К сообщению приложены файлы: 1.jpg, 591x447, 31Кb

1036. Tahoe, 08.04.2006 02:17
Cloven Clown
могу выслать на e-mail
Лучше выкладывать куда-то вроде http://www.rapidshare.de, а сюда постить ссылку.
Выложить думаю стОит, с вопросом все постоянно сталкиваются рано или поздно.

1037. Cloven Clown, 08.04.2006 03:40
Tahoe
Понял. Спасибо.


Документ по CRC-алгоритмам: Ross N.Williams "Элементарное руководство по CRC-алгоритмам обнаружения ошибок" (http://rapidshare.de/files/17454232/CRC.zip.html)

1038. joptpd, 08.04.2006 05:12
majorPAE
да я посмотрел на ебее
шнурок 1 евру а доставка 7-9
причем за каждый следущий кабель по 4
я знаю такую штуку codevarior там какая то мс стоит и имеет 8 выходов и шим вроде есть
пока точно не смотрел еще

Vesel'chak U
А почему код не преобразовать в ASCII?
тогда мне надо будет на каждое устройство по одному байту
регулировка вращения двигателей 2шт
руль 1 шт
батареи 1 байт
1 байт запасной (хочц еще маяк на лампе от вспышки и питание видеокамеры + еще какие нить биты)

Надеюсь, модуляция - ЧМ?
ну хз
есть прикольные такие комплекты трансиверов на 432мгц
тока опять же стоят неприлично для своих размеров
сам пав резонатор в германии можно купить по 10 евров за штуку от 10 штук мин партия
за 10 евров я куплю усб голубой зуб на 100м в который влезет еще сигнал от веб камеры

посему я нарыл вот че
http://vrtp.ru/index.php?showtopic=1793

будет работать где то 60-70мгц
надеюсь там нет никаких станций
а то у нас весь фм забит

http://vrtp.ru/index.php?act=categories&CODE=art…&article=1056
не пойму тока че такое принудительное гашение колебаний?
смысл в чем

народ с вртп делал на 432 мгц на сверхрегенераторах и там все работало как часы

может есть лучше варианты?
вот в тех платах говых на исм диапазон
тамт оже пав стоит ? я искал схемы на них но ниче не нашел кроме даташитов с параметрами

1039. majorPAE, 08.04.2006 09:07
joptpd
Ну у нас они в ларьках тоже минимум 300р... а FT я доставал за $7,5. Так что близко к правде.
Просто Tahoe тебе разумно советовал, я через такой шнурок себе "клон" ICD2 для PIC-ов запустил. Очень удобная и простая штуковина. Если будешь разбираться, лезь на сайты мобильщиков, они их там вдоль и поперек излазили даже с фотками плат и распайкой концов.
У меня вот одна картинка сохранилась. И еще ссылка (http://sx1.oslik.ru/werefox/circuit/cable55.html)

К сообщению приложены файлы: 1.jpg, 451x339, 41Кb

1040. LazyCamel, 08.04.2006 13:42
joptpd

Я бы это.. крайне рекомендовал глянуть куда-нибудь в сторону Атмеловских однокристальных приемопередатчиков в связке с допустим Мега48.
Что-то уровня AT86RF211S ( в розницу в москве 5-6 баксов.)
Мощность в передачу 16дБм, чувствительность приемника -99дБм, что среднепопугайно дает на воде устойчивые дальности порядка километра.
Или если на 2.4 Ггц- то ATR2406 соответственно $2 и 4/-93дБм, что дает где-то метров 70.
Имеют режим оценки уровня приема и если я не глючу, то и тот и другой умеют работать со скачкообразной перестройкой частоты. Чтобы твой девайс не запеленговали и не поставили помеху по каналу управления

Еще из советов - использовать литий-ионные/литий-полимерные батареи, например от телефонов, они мало того что резко легче, так еще имеют дополнительный канал данных, по которому рапортуют о температуре, остаточном заряде и т.д.

Соответсвенно на антенну имеет смысл присобачить яркий СМД светодиод который будет работать трассером.

1041. joptpd, 08.04.2006 14:34
нету у нас етих мс
чем плохо на паре транзисторов
и готовый приемник на какой нить мс из укв?

1042. Xradio, 08.04.2006 15:04
Я - счастливый обладатель 86RF211DK_setup.exe. (софтина для въюза Атмеловского трансивера, любезно предоставленная друзьями из "Фуллкрум") Кому надо, пишите письма.

1043. LazyCamel, 08.04.2006 15:27
joptpd

Странно. Ни за что не поверю про отсутсвие в Берлине дилера Атмел

Почему не два дранзистора ? Потому что будет дико грязный и нестабильный сигнал, из-за того что придется возиться с намоточными вещами, из-за того что придется продумывать модуляцию/демодуляцию и ничего кроме ШИМа по всей видимости не найдется, в конце концов то что ИМХО в результате однокристальники окажуться дешевле чем аналог с таким же сигналом...

Разумеется можно пойти по пути радиоложства, поставить серебренноцинковые аккумуляторы
и просто вдуть пару-тройку ватт в передатчик, 99% этой мощности просто грея воздух.

Но на мой взляд самое главное - то что я примитивно в МК посылаю строчку в УАРТ и забываю про все остальные бяки, и фокус сдвигается в алгоритмы

Xradio
Как насчет выложить на какую-либо рапидшару ?

1044. joptpd, 08.04.2006 16:02
LazyCamel
народ делает радио микрофоны на одном транзисторе и они работают
делали на паре транзисторов и мк 8 каналов
все работало и фотки есть
да те же китайцы делают на 27мгц на одном транзисторе

так почему у меня не будет работать?
http://vrtp.ru/index.php?showtopic=1948
вот например такой

а еще у меня дект модули есть
тока даташитов нет

зы
в берлине ваще ниче нет
атмелы есть но вч нет
во всей германии нет пав резонаторов по нормальной цене

1045. Chudik, 09.04.2006 00:56
вопрос
Для обсуждения твоей проблемы постинги перенесены в На чём сделать обработку видеоданных поближе к реальному времени? (http://forum.ixbt.com/topic.cgi?id=48:5437)

1046. LazyCamel, 09.04.2006 11:09
joptpd

Да будет работать. Только ты мне скажи, ты разницу между ЧМ модуляцией обычного голоса, помехи и искажения в котором наш мозг либо корректирует либо отбрасывает и несколько канальной передачей цифровых данных ощущаешь ?

Схема которую ты предлагаешь уже давно реализована в китайских радиоуправляемых машинках, которых рублей за 300 сейчаз в россии полно в любых магазинчиках.

Но на дальности 20 метров они уже пропускают команды, а на дальности чуть больше просто становятся неуправляемыми. Если же не повезет и рядом окажется вторая такая же машинка - вообще выходит ерунда.

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

1047. Vesel'chak U, 09.04.2006 22:38
joptpd
тогда мне надо будет на каждое устройство по одному байту
И ничего страшного.

Добавление от 09.04.2006 23:49:

Cloven Clown
В 3.14... хомячка... т.е. рапидшару. Так скачать и не смог. Лучше здесь: http://rusdoc.df.ru/material/raznoe/crc.zip
Между прочим, в Яндксе первая же ссылка.

1048. Cloven Clown, 10.04.2006 09:28
Vesel'chak U
Точно, набрав в поисковике "Элементарне руководство crc" сразу нашел доку. А вот набрав "расчет crc", "подсчет crc" и т.п. - кучу всякого разного... что и было в свое время мной прочинано, попытано к пониманию и остановлено на рекомендуемой доке
Знать бы чего искать, а найти не проблема...

1049. Useroff, 11.04.2006 21:39
Вот чего понять не могу... Есть tiny2313, fuses выставлены на использование внешнего резонатора, кристалл на 8 МГц, два конденсатора по 33 pF, запаяно так, как изображено в даташите. Включаю, лезу осциллографом на XTAL1, XTAL2 -- тишина. Но машинка программируется по SPI, и, похоже, работает . Ради интересу запрограммировал CKOUT -- есть частота на выходе, положенные 8 МГц.
Вот думаю, почему же нет частоты на кварце, с fuses чего-то напутал и в итоге работаю с внутренним генератором, или еще чего?

1050. Chudik, 11.04.2006 22:09
Useroff
два конденсатора по 33 pF
не многовато? Какой CL рекомендуется для используемого тобой кварца?

лезу осциллографом на XTAL1, XTAL2 -- тишина.
Каким щупом?

1051. psnsergey, 12.04.2006 12:07
Действительно, шшупать такие вещи надо осторожно, щупом с высоким импедансом. А то генерацию сорвать (или получить, где её не было) - запросто.

1052. вопрос, 12.04.2006 19:33
Здравствуйте, профи микроэлектронного мира!
Я написал программу на С, но она дико тормозит, поэтому хотелось бы получить ускорение за счет аппаратной обработки! Эта программа - игра "крестики-нолики" на доске 100х100 клеточек (и к видео никакого отношения не имеет ), а алгоритм перебирает все возможные варианты исхода игры, и тот вариант, который набрал максимальное количество "возможных" побед и используется! Но уж больно сильно тормозит! Что надо для создания такой ускорялки? Требования для проги: 10кб памяти, ввод-вывод по lpt/com/usb/firewire/хоть чему-то, не много, туда положение карты, обратно координаты ячейки. Предпочтение отдается аппаратному решению, уже распаянному на плате (видел такие на http://avr123.nm.ru/avrpic06.htm), дабы его осталось только перепрошить моим чудо-алгоритмом, и я не имел позможности его поплавить свои 100вт паяльником! Дайте ссылочек, названия чипов и обвязки, необходимой для включения и прошивки сего девайса! Желательно сразу с ценами, но подешевле. Давайте сделаем этот мир лучше, помогая ближнему!

Добавление от 12.04.2006 19:36:

Жаль, что есть такой понятный сайт про контроллеры (http://avr123.nm.ru/), но нету по FPGA и DSP!

1053. LazyCamel, 12.04.2006 20:24
когда коту делать нечего - он яйца лижет

1054. Useroff, 13.04.2006 05:38
Chudik
Ни на один вопрос внятно ответить не смогу Кварц какой-то отчечественный, на 8 МГц, найден в залежах хлама на работе поэтому чего там рекомендовано, неизвестно. Щуп HAMEG HZ 35, так же позаимствован на работе, с родным осциллографом этот щуп нормально себя ведет на частотах до 10 МГц (выше просто не было нужно ).
Осциллограф С1-112, емкость входа 30 pF, сопротивление не помню.

1055. Chudik, 13.04.2006 06:00
Useroff
понятно, ладно.
Ради интересу запрограммировал CKOUT -- есть частота на выходе, положенные 8 МГц.
Вот думаю, почему же нет частоты на кварце, с fuses чего-то напутал и в итоге работаю с внутренним генератором, или еще чего?

Попробуй идти от противного. Отключи кварц и включи питание. Если на выходе получишь то же самое, то работаешь с внутренним генератором. Для более точной проверки подключи кварц на другую частоту и измерь CKOUT.

1056. Useroff, 13.04.2006 20:33
Chudik
Отключи кварц и включи питание.
Ну, в общем, так и сделал. Оказывается, всё работает , а осциллографом моим по высокочастотным цепям надо лазить с оглядкой

1057. Chudik, 13.04.2006 20:49
Useroff
а осциллографом моим по высокочастотным цепям надо лазить с оглядкой
Особенно по ножкам кварцев

1058. joptpd, 23.04.2006 02:52
тупой вопрос
но мож у кого есть 100% рабочая библиотека для жк обычных на хитачевском контролере?
я перепробовал штук 5
ниче не работает
тестил в протеусе
указываю прошивку от кодевижина и все работает
прошивки от винавр не работают

например ета либа file:///G:/WinAVR/avrlib/docs/html/index.html
или http://ulrichradig.de/site/atmel/avr_lcd/zip/AVRtoLC…ourceCodeV1.4.zip

1059. Shinen, 23.04.2006 15:22
joptpd
я перепробовал штук 5
ниче не работает

за то время что ты потратил на попробовать - можно было написать свой.

1060. joptpd, 23.04.2006 15:48
если бы у меня была достаточная квалификация...

1061. NightFinder, 23.04.2006 17:15
Господа! подскажите бегинеру плиз.
Как в 48-й Меге в регистре TIMSK0 установить бит OCIE0A (1-й бит, разрешение прерывания по совпадению А) в ASM-e. Я так понял с помощью команды sts, но где найти адрес??? Руки уже опускаются Заранее благодарен

1062. RWolf, 23.04.2006 17:23
NightFinder
В даташите, конечно.
В самом конце, где адреса регистров.

1063. Chudik, 23.04.2006 19:23
NightFinder
но где найти адрес???
А что в ассемблере нет предопределённых имён регистров?

1064. Таное, 23.04.2006 22:44
NightFinder
Ты б открыл любой пример с Атмеловского сайта. Там любой .asm файл начинается строчкой типа:
.include "8515def.inc"

1065. NightFinder, 23.04.2006 23:27
Chudik
Дело в следующем.
Регистр имеет имя TIMSK0. Бит который нужно установить в единицу OCIE0A (первый по счету, начиная с 0 есессно). Работать с этим регистром как в контроллере АТ90S2313 не получается, там расклад такой (пример для 2313):

.include "2313def.inc"
.
.
.def Temp=R16
.
.
ldi Temp,0b01000000 ;разрешить прерывание компаратора
out TIMSK,Temp
.
.
работает без проблем...
но, в Mega48 это не работает, там в файле m48def.inc написано:

[color=green]; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions[/color]
.
.
.equ TIMSK0 = 0x6e ; MEMORY MAPPED
.
.
То есть вывод такой in и out тут не катят...
Специальный тенкс to Chudik в этот праздничный день!

1066. Chudik, 24.04.2006 00:53
NightFinder
в этот праздничный день!

in и out тут не катят...
Ну так у тебя же написано, что находится в карте памяти. Значит и обращаться к этим регистрам надо как к памяти. Что-то типа LD - я не знаю синтаксиса атмеговского ассемблера.

1067. Shinen, 24.04.2006 02:03
joptpd
если бы у меня была достаточная квалификация...
а откуда она появится если ничего не делать а брать готовое ?

1068. Таное, 24.04.2006 02:10
NightFinder
цитата (datasheet Rev. 2545D–AVR–07/04, стр. 328):
4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used. When addressing I/O Registers as data space using LD and ST instructions, 0x20 must be added to these addresses. The ATmega48/88/168 is a complex microcontroller with more peripheral units than can be supported within the 64 location reserved in Opcode for the IN and OUT instructions. For the Extended I/O space from 0x60 - 0xFF in SRAM, only the ST/STS/STD and LD/LDS/LDD instructions can be used.

Добавление от 24.04.2006 02:23:

Вообще немного смешно получается. Я в жизни ни одной строчки на асме сам не написал, но про это знаю. А тут, выходит, человек берётся писать на асме и даже бегло не смотрит доки...

P.S.
Это не персонально, а возвращаясь к теме ASM vs С.

1069. NightFinder, 24.04.2006 12:17
Всё, господа, получилось! Спасибо огромное!

Рабочий пример: установка OCIE0A в TIMSK0 для ATmega48

ldi Temp,0b00000010 ;разрешить прерывание компаратора
sts 0x8e, Temp ;0x6E+0x20=0x8E

Только я 0x20 пытался и раньше прибавить, но вот что-то не получалось...
ну да бог с ним... буду дальше разбираться

1070. Chudik, 24.04.2006 18:48
NightFinder
А что-нибудь типа

ldi TIMSK0, 0b00000010

не работает?

1071. Useroff, 24.04.2006 21:00
Хочу заставить tiny2313 управлять обыкновенным компьютерным вентилятором. Первая мысль - ШИМ, но более опытные товарищи охладили мой пыл, напомнив, что движок вентилятора питается переменкой от встроенного преобразователя, и управлять им можно только изменением напряжения. Вторая мысль - внешний ЦАП, но она не кажется мне сильно удачной. Может, есть способы обойтись тем, что есть в tiny, c минимальной обвязкой?

1072. LazyCamel, 24.04.2006 21:55
Плюньте более опытным товарищам в район лица

После чего по адресу http://atmel.com/dyn/resources/prod_documents/doc8005.pdf
заберите аппноту с говорящим названием
AVR442: PC Fan Control using ATtiny13, которая
This application note describes the operation of 12 volt DC cooling fans typically used to supply cooling air to electronic equipment, and controlling them with the ATtiny13.

1073. Useroff, 25.04.2006 15:27
LazyCamel
Гм. Плевать повременим . Апнота, конечно, полезная, спасибо, но мне хочется использовать самый стандартный вентилятор, а не делать из него смарт-фан . Ну, то есть, взял пропеллер, ткнул в разьём, обороты кнопочками поправил, ну он и закрутился. Этот надоел -- взял другой.

1074. joptpd, 25.04.2006 18:59
LazyCamel
Но на дальности 20 метров они уже пропускают команды, а на дальности чуть больше просто становятся неуправляемыми. Если же не повезет и рядом окажется вторая такая же машинка - вообще выходит ерунда.
у меня не многоканальная а одно
в две стороны
получил-подтвердил
мс приемника будет иметь выход настройки и я от туда буду брать напряжение на ацп
так же будет мониторинг батарей
я просто ето не описывал тут
да и мощность не 10мвт а 100 и при такой мощности с использованием чм не должно быть особых помех

1075. LazyCamel, 25.04.2006 19:51
Useroff
Я надеюсь вы нашли в 12В вентиляторе схему встроенного преобразователя, генерирующего переменку ? О которой вам там много говорили старшие товарищи ?

ЗЫ:
На практике технология контроля вращения известная как Asus Q-fan представляет собой обычный ШИМ на частоте 32.5 кГц с заполнением в диапазоне 50%-100%. Собственной индуктивности обмоток вполне хватает чтобы его сгладить.

1076. Flano, 25.04.2006 20:51
Господа
Помогите плиз с первой работой с 8051.
Нужной добавить свои строчки в обработчик прерывания таймера/счётчика.
Если можно пример в мнемокодах асм51 со всеми директивами. Пусть свои строчки ХХХХХ
Спасибо

1077. Chudik, 26.04.2006 00:55
Flano
добавить свои строчки в обработчик прерывания таймера/счётчика.
Не понял проблему. Нужно, значит добавляй. Посмотри, где у тебя заканчивается исходный обработчик прерывания (обычно перед тем, как восстанавливаются данные из стека) и напиши тот код, который тебе нужен.

К этой теме 30.04.2006 19:22 mChudik подклеил тему "USI как UART, кто юзал ап307 подскажите асмом " (автор: Jelsay)

1079. Jelsay, 30.04.2006 11:15
сабж собственно на ATtiny26

1080. Shinen, 30.04.2006 20:31
Jelsay
сабж собственно на ATtiny26

че-то не очень понял вопроса. че такое ап307 ? и что именно асмом подсказать?

Добавление от 30.04.2006 20:51:

на вот тебе на затравку бутблок работающий с терминалкой.
http://amycoding.redline.ru/main2/sources/bootblock_1kb.asm
он для меги8 но понять смысл как работать с портом будет понятно.

1081. Jelsay, 01.05.2006 06:51
Shinen - спасибо за исходник, но у меня проблемма немного иного рода: у меня есть ATtiny26 там нет UART, а есть USI

в апноуте avr307.pdf (в котором atmel пишет как можно из USI сделать полудуплексный UART) сам чёрт ногу сломит - в принципе разберусь конечно, но времени жалко - поэтому то и спросил мож кто поделиться исходником (лучше на асме)

1082. Shinen, 01.05.2006 07:19
Jelsay
аа.... ну да .. я забыл что там обрезок. Но думаю за час можно с нуля неспеша разобраться и написать.

1083. AlexG, 01.05.2006 08:55
Я использовал USI в качестве UART по AN307 на C - при передаче периодически (часто) проскакивали ошибки, видимо код из AN307 не уживается с другими прерываниями (у меня были еще 1-2 таймера). На прием тоже должно не очень надежно работать, т.к. никаких трех выборок на бит как в нормально UART не делается. Доводить до ума не пробовал, мне оно нужно было только чтоб отладить другую программу, может быть и можно заставить нормально работать.

1084. Shinen, 01.05.2006 13:30
если все так плохо, то проще сделать программный UART, если скорость не большая то вполне решаемо без особых ресурсозатрат.

1085. pwl, 01.05.2006 17:42
А подскажите как лучше запитать attiny13 от батарейки? Сейчас собрал некий девайс запитанный от одной AA батарейки через MAX756CPA (1.5В->5В). Все хорошо, только есть одна неприятность: сам контроллер в standby потрабляет около 1-2 мкА, а весь девайс вместе (с MAX-ом) - 0.4 мА. Есть ли способ лучше? (про MSP420 я знаю, вопрос именно про tiny).

1086. Таное, 01.05.2006 18:40
pwl
Вариантов не много. Или ищи импульсник с PWM/PFM ( PFM как раз снижает частоту при уменьшении потребления, например TPS62040 ), или поднимай напряжение. Tiny13, само собой, у тебя TINY13V? Которая от 1,8Вольт. Она будет работать уже от двух аккумуляторов, проверено.

Добавление от 01.05.2006 18:46:

Про USI в Tiny26. Я когда-то делал UART на нём, всё нормально работало на 115200 ( выше делал, но не вспомню что получилось ). Переворот бит для UART делал таблично. Насчёт прерываний от таймера - ну если торчать в прерывании вечность, то не только USI начнёт сбоить.

1087. Jelsay, 01.05.2006 19:44
Таное - исходник у вас случайно не завалялся?

1088. Таное, 01.05.2006 20:09
Jelsay
Скорее всего нет, у меня есть папка trash ( мусор ), в которой я всякими экспериментами занимаюсь. Я её периодически чищу, а те эксперименты были давно.

А в чём вообще сложность-то? Имхо проблема не в USI, а в том, что бы прозрачно представлять себе, как работает UART. Когда я не поленился и разобрался, всё тут же пошло как по маслу.

1089. Jelsay, 01.05.2006 20:58
Таное - c UART проблем нет, по совету Shinen я уже написал его програмно на симуляторе (протеус+AT90S2313+vterm) - чуть более полсотни байт вышло - и работает нормально, а вот с реальным USI на железным ATtiny26 затык пока вышел - железка у меня на работе - поэтому завтра приду на работу и ещё попробую денёк повозиться - если не получиться использую software uart - тем более что скорости у меня детские - 4800 можно даже.. но обидно будет

жаль что Proteus не поддерживает 26-й, а VMLAB скачать сейчас домой скачать нереально..

1090. Pavel Berezin, 04.05.2006 11:52
подскажите плиз, в тему USI/UART ... А не попадалось кому пример алгоритма, чтобы заставить последовательный порт АВРки читать данные по K-line протоколу (это который для диагностики авто применяется)? Там скорость 10400 бод, но насчёт формата сигнала точно не уверен, помоему 8-бит без старт/стопов.

К этой теме 05.05.2006 21:07 mChudik подклеил тему "Помогите понять как организовать цикл на асемблере для микроконтроллера 16C54" (автор: leon id)

1092. leon id, 05.05.2006 20:33
Основная часть программы написана, ловится на входе сигнал, если тот который нужно то выдается серия импульсов.
3 импулься [задержка] 2 импульса [задержка] 1импульс
переходим к ловли следующих значений.
Т.вот немогу понять как организовать эту часть программы где вот так с затуханием выдаются импульсы. Подскажите примеры с разными вариантами циклов, может разберусь ...
Вот.
Цикл чтото вроде:
CTD EQU 0x03
;тут ... прога
;.....
;цикл:

MOVWF CTD
M2
DECFSZ CTD
GOTO M2
____________________
BSF PORTA, 0 ;импульс
BСF PORTA, 0 ;сброс импульса

как всё свести - непойму

1093. Zman, 06.05.2006 01:35
leon id

он тебе там нужен, этот цикл ?
код:

Pulse
bsf porta,0
bcf porta,0
ret

Delay1
; put some delay here
ret

Do321
call Pulse
call Pulse
call Pulse
call Delay1
call Pulse
call Pulse
call Delay1
call Pulse
ret

1094. avr123.nm.ru, 06.05.2006 01:45
Добавил в курс две задачи http://avr123.nm.ru/avrpic06.htm

6 часть 2 - обмен данными с ПК по USART MK

и задача 11 - Что такое ШИМ (PWM) сигнал. Как аппаратно сделать ШИМ. Как сделать ЦАП спомощью ШИМ и отфильтровать сигнал. Программа к задаче написана в компиляторе Си CodeVisionAVR, симуляция выполнена в VMLAB. Файлы прилагаются.

интересный скриншот симуляции 2 аппаратных ШИМ в МК ATmega16 к Задаче 11 курса (http://avr123.nm.ru/z11/pwm.png)

1095. Xradio, 14.05.2006 09:52
Товарищи. почему-то не работает процедура из даташита ATmega8
код:

EEPROM_write: ; Wait for completion of previous write
sbic EECR,EEWE
rjmp EEPROM_write
; Set up address (r18:r17) in address register
out EEARH, r18
out EEARL, r17
; Write data (r16) to data register
out EEDR,r16
; Write logical one to EEMWE
sbi EECR,EEMWE
; Start eeprom write by setting EEWE
sbi EECR,EEWE
ret
EEPROM_read: ; Wait for completion of previous write
sbic EECR,EEWE
rjmp EEPROM_read
; Set up address (r18:r17) in address register
out EEARH, r18
out EEARL, r17
; Start eeprom read by writing EERE
sbi EECR,EERE
; Read data from data register
in r16,EEDR
ret

Адреса гружу начиная от нуля. Бутлоадер не использую. Прерывания на всякий случай запрещаю... тактовая - RС = 1 MHz
Есть ли какие-то особенности Меги? (на 2313 - всё было без проблем)

Добавление от 14.05.2006 11:13:

Извиняюсь, всё прекрасно работает! (данные неправильно готовил к записи)
А осложнение было из за "Поньки 2000"... что-то там коряво с EEPROM обошлись, я уж не говорю про "птички" фьюзов (инверсия!) Все же надо нормальный программатор спаять!

1096. Таное, 14.05.2006 12:35
Xradio
Все же надо нормальный программатор спаять!
"Уж сколько раз твердили миру ..., да только всё не в прок." (с)
AVReal (http://www.ln.com.ua/~real/avreal)

1097. DrAG0n, 15.05.2006 12:33
да это почти то же самое. Я вот тут на днях собрал аналог STK-500 на ATMEGA8 - ссылка где-то здесь проскакивала, если надо - повторю.
Иногда проглючивает и версия прошивка 2.4 (

Добавление от 15.05.2006 12:35:

AVRStudio 4.0 SP1 требует 2.7, предлагает обновить, но, естественно, не может; VMLAB работает, но красные круглешочки есть), но мне кажется, что это и убдобнн, и скорость (объективно) выше.

1098. DrAG0n, 16.05.2006 20:18
Написал я программу на GNU C++. Еле-еле влезла в МЕГУ8. Теперь компилирую на ICC AVR 7 - говорит, что 70% занято. Да еще не использовал оптимизатор и компрессор.... Парням из GNU есть над чем поработать. Но я, видимо, все равно на нем останусь. Переписывать все несоответствия долго, да и сознание непиратскости программы отдельно радует.

Добавление от 16.05.2006 21:17:

мда... узнал, что и в AVR-GCC есть оптимизатор на 25% ужал код. Правда, он работать перестал - у меня короткие задержки NOPами в цикле...

1099. joptpd, 16.05.2006 22:53
DrAG0n
, он работать перестал
да и сознание непиратскости программы отдельно радует.

одним словом опенсцорс рулит
а я то придурок все думаю
чего ж у меня ни один код драйвера жк индикатора не работает
а оно воно че ...
зато не пиратское

1100. DrAG0n, 17.05.2006 07:23
у меня как раз ЖК индикатор работал. Но я потом на всякий случай откалибровал задержку уже в оптимизированном виде. Не работал DS18B20 - вот ему как раз тайминги надо более-менее точно выставлять. Вчера за полчаса с этим справился.
Программа теперь 2800 слов (вместо 4050) занимает. И работает )
Отлаживать в VMLAB иногда можно только в ассемблере - вусмерть заоптимизированные функции в COFF не получаются

1101. Jelsay, 17.05.2006 07:59
Рисуйте на Форте (Forth) - разумный кампромисс между Си и Асмом )

1102. DrAG0n, 17.05.2006 12:17
автоперевод с транслита:
Не... Я С лублу... Пишу на нем, наверное, лучше, чем по-русски ртанслитом Как-то (в 2000) сдал на мастерьа с 6-м резултатом по России (Brainbench/Tekmetrics)

1103. Zhmak, 26.05.2006 02:44
Сделал грубый набросок программатора для at90s2313 (см.вложение). На базе того, что приведено на сайте AVReal (http://ln.com.ua/~real/avreal/adapters.html) . Только без коннектора под разные платы с контроллерами. Правильно ли я подключил линию программной генерации тактового сигнала к XTAL1 ? Просто ниразу не видел то, что находится по ту сторону приведенного на сайте адаптера к STK200\300. Или все же лучше приделать кварц с двумя конденсаторами на землю для обоих ног XTAL?

К сообщению приложены файлы: 1.gif, 800x587, 14Кb

1104. Tahoe, 26.05.2006 03:18
Zhmak
Правильно, ибо XTAL1 это вход.
Только не лоханись, для программной генерации надо в Авриле ставить частоту генерации "0".

1105. Jelsay, 26.05.2006 13:51
Очень простой и хороший программатор в Algorithm Builder:
три диода кд521-х и семь резисторов по 0.125 - весь программатор без проблем влезает в коробочку 9-пинового разьёма для СОМ-порта. Если сигналы в кабеле чередовать с землёй то программатор тянет свыше метра, что вполне достаточно для комфортной работы.

Проблемы с загрузкой из самого Algorithm Builder-а (2 кб ограничение) обходяться написанием своего маленького загрузчика.

К сообщению приложены файлы: 1.jpg, 588x329, 28Кb

1106. vitalyb, 26.05.2006 18:47
Господа, может знает кто или есть нормальный даташит... подскажите, как стирать Flash EPROM в Winbond W78E5x?
Перерыл кучу даташитов - есть только как программировать (и то далеко не во всех), а по стиранию только на каких выводах что должно быть, но не указан ни порядок, ни продолжительнось импульсов... а 14 вольтами и убить можно )
Спасибо.

1107. Dismon, 27.05.2006 12:27
А не занимался ли кто программной реализацией RS-485?

1108. Xradio, 27.05.2006 13:09
Почему-то не могу прочитать-записать AT90S2343. Кварц вешал на 3.58MHz. - молчит. Собрал внешний осц. на том же кварце, подал на XTAL1. результат тот-же - "дивайс не обнаружен".
В чем может быть пробляма?

1109. VBKesha, 27.05.2006 13:59
Xradio
Если ты про AVReal то лучше тактировать от LPT порта, от кварца у меня тоже не работало а от порта проблем не возникало.

1110. Tahoe, 27.05.2006 16:25
Xradio
Встань осцилом, да посмотри, идёт ли вообще от проца ответ по MOSI или нет. Ещё может фьюз SPIEN быть сброшен.
The AT90S/LS2343 has two Fuse bits, SPIEN and RCEN.
• When the SPIEN Fuse is programmed (“0”), Serial Program and Data Downloading is enabled. Default value is programmed (“0”). This bit is not accessible in the Low-Voltage Serial Programming mode.
По последней фразе. Если ты до этого хоть раз шил этот камень, то можешь забить на этот фьюз. А вот если ни разу ещё не получалось, то может его кто-то другой установил.

Ты небось из Эпсоновского кртриджа этот Атмел выдрал? Тогда наверное не получится в low-voltage.

VBKesha
Лично у меня Аврил работает всегда., что с внешним тактированием, что с внутренним.

1111. Xradio, 27.05.2006 16:45
Да... пришлось AVReal заюзать. Tahoe
Конкретно понадобилось тактировать от LPT через STK адаптер. Кристалл почему-то продается с выключенным RC. хотя с кварцем он, 2343, вообще не работает.
Сочинил такой пакетник...
avreal32 +90S2343 -p1 -as -o0 -%% -e -w file.hex -v -fRCEN=ON

1112. K_AV, 27.05.2006 21:20
Dismon
RS-485 не имеет собственной "логической" части, описывает только аппаратную (формирование и параметры "физических" сигналов в линии). В большинстве случаев в МК его используют так же, как RS-232, только формирователь сигнала для линии ставят не MAX232 (или аналоги), а ADM485 (или аналоги).

1113. Zhmak, 28.05.2006 02:32
Реально ли реализовать работу с 3-wire интерфейсом термометра DS1620 для AT90S2313?
Как я понял, из штатных портов контроллера присутствует только UART. Так что поддержка I2C или 3Wire может быть реализована только программно.

Судя по даташиту (http://www.gaw.ru/pdf/Dallas_Sem/sensor/DS1620.pdf) , в DS1620 используется сигналы:
RST (инв), CLK, DQ (двунапр). Для управления термометром используется однобайтовая команда с последующей записью или чтением данных).

Меня интересует только прием показаний термометра по запросу и начальная установка регистра управления.
Для этого нужно: установить бит CPU (команда 0Сh потом в регистр конфигурации 02h), запустить термометр командой EE, потом с секундным интервалом читать температуру командой AA, возвращающей 9битное значение (или все-таки 16 бит, из которых только 9 используются?)

Реализацию интерфейса вижу такой:
Изначально пины порта в след состоянии rst=0, clk=1, dq = неважно.
Перед началом передачи rst устанавливается в 1, следующей командой clk устанавливается в ноль, далее устанавливаю состояние dq. Когда бит установлен, прогоняю пару-тройку пустых тактов(надо еще посчитать, сколько именно). Потом устанавливаю 1 для clk и жду несколько тактов. Потом опять сбрасываю clk и устанавливаю состояние dq. По окончанию сеанса привожу пины в исходное состояние.

После посылки командного байта либо продолжаю писать данные (управляю устройством), либо меняю DDR для пина порта, подключенного к dq и читаю два байта. Причем первым байтом следует младший байт слова, а потом старший (верно я понял LSB First замечание?)

Будет ли работать такая эмуляция 3wire? Или стоит обратить внимание на DS1621 с SPI. Хоть у 2313 нет нативного SPI, но эмуляция на асме имеется.

Может у кого есть готовая реализация 3Wire для 2313 на асме?

1114. Dismon, 28.05.2006 18:04
K_AV
Я знаю это все. Собственно я несколько ммм... обобщенно и торопливо высказался. Попробую подробнее. Суть: есть простое устойство, которое подключается к линии RS-485. В его основе 8ми ногий микроконтроллер (Tiny13 скажем для примера). У него нет аппаратного модуля UART. Следовательно его надо эмулировать программно (что не проблема, девайс практически ничего более делать не будет ), данные посылать в драйвер (max483,485 и т.д., точная марка не суть. ). Так вот вопрос должен звучать так:

Можно ли выкинуть сей драйвер, если длина линии до 50 м, скорость ну... 2000 примерно, скорее даже меньше, линию А ткнуть в выход програмного уарта, линию В - к соседнему пину, по А слать данные, по В соответственно инверсию данных. (Наверно таки подключить подтяжки к плюсу и земле, хотя вызывают большие сомнения нагрузочные способности пинов мк, на конце линии поставить согласующий резистор). Приемник с другой стороны линии драйвером будет оснащен. К линии подключать до 20 простых устройств, которые 99,9% времени слушают линию, и отзываются байтом-двумя, если распознают свой адрес в посылке.

Зачем это надо? Для экономии средств . Таки драйверы стоят около 1$, за который при серийном производстве любой капиталист удавится.

Вот и спрашиваю, нет ли у кого такого опыта. Фактически я бы и сам провел опыты, еслибы не одно но. Я сейчас на сесии, она продлится до 10 числа, так что возможности поковырять микроконтроллер нету. А интересно сейчас.

1115. Tahoe, 28.05.2006 19:35
Dismon
Ты, по ходу, не понимаешь сути RS-485. Там как раз вся идея в том, что бы уйти от передачи данных с помощью _напряжения_, а передавать данные _током_. В противоположность - RS-232, где данные передаются _уровнями напряжения_. Т.е. ты по сути собираешься сделать ухудшеный вариант RS-232. Что бы примерно оценить дальность и помехозащищённость, возьми простой провод и посмотри, на каком расстоянии и на какой скорости ты свяжешь два устройства с помощью RS-232. Ну и подели хотя бы на два, получишь расстояние по твоей идее. Но это пол дела, вот когда помехи наведутся на линию, RS-232 сольёт ещё быстрее.

А как шлются данные, ну там скорость, стоп- и старт-биты - в данном случае дело десятое.

1116. K_AV, 28.05.2006 22:58
Dismon
"на конце линии поставить согласующий резистор" Номинал его представляешь? насколько он "понравится" выходам МК?
"Приемник с другой стороны линии драйвером будет оснащен" Ну так для начала: раз устройства должны и различать свой адрес, и передавать данные, то все они должны быть и приемниками, и передатчиками. Т.е. электрически (не логически) равноценными устройствами. Я так тебя понимаю, что один из них занимается опросом, и он-то "драйвером будет оснащен"? Ему повезло. А как понравятся уровни его выходных сигналов портам опрашиваемых МК (в твоем включении)?
А нафига тебе передавать информацию прямую и инверсную, если ты принимать ее собираешься не дифференциальным усилителем, а логическими входами? Как будешь принимать решение "0"/"1", если при воздействии помех и на прямом, и на инверсном входах будешь иметь в какие-то моменты времени одинаковый логический уровень? А что будет, если в результате действия помех и недостаточной нагрузочной способности выходов МК на входах уровни перестанут быть логическими, будут "болтаться" в районе порогового напряжения (то ли "0", то ли "1")?
Короче, разработкой интерфейсов занимались люди, которые свои "сесии" сдали давно и успешно. Хочешь всех убедить, что они были не правы, а ты готов и способен их уличить в излишних сложностях?
Tahoe
"Ты, по ходу, не понимаешь сути RS-485. Там как раз вся идея в том, что бы уйти от передачи данных с помощью _напряжения_, а передавать данные _током_." Немного дополню. Вторая идея - передача сигнала в дифференциальном виде.

1117. Jelsay, 29.05.2006 06:28
по RS-485 информации в интернете просто - море!

диф.пара, полудеплекс, 1200 метров макс, мах скорость не помню что-то около 12Мб/сек - обычно ставишь макс сотку из-за СОМ порта.
протоколы лучше взять готовые - MODBUS, PROFBUS и т.п.

1118. Dismon, 29.05.2006 14:31
K_AV

Номинал его представляешь? насколько он "понравится" выходам МК?

процитирую себя:
вызывают большие сомнения нагрузочные способности пинов мк,

"Приемник с другой стороны линии драйвером будет оснащен" Ну так для начала: раз

Не верно выразился - не приемник, а комутатор.

А нафига тебе передавать информацию прямую и инверсную
Имитация дифференциальной линии.

Как будешь принимать решение "0"/"1", если при воздействии помех и на прямом, и на инверсном входах будешь иметь в какие-то моменты времени одинаковый логический уровень?
Так же как и драйвер, вычитая В из А.


которые свои "сесии" сдали давно и успешно. Хочешь всех убедить, что они были не правы, а ты готов и способен их уличить в излишних сложностях?



Я знаю как правильно строить линии связи с RS-485. Я согласен с изобретателями сего интерфейса во всем. И не говорил, что там лишние сложности. Зачем тогда вся эта возня? Снова процитирую себя:

Для экономии средств

Когда девайс стоит 2$, а из них половина - стоимость драйвера, сам собой возникает вопрос, а нельзяли этот драйвер выкинуть, и эмулировать его работу с помощью микроконтроллера?

ЗЫ: кстати на выходы мк в принципе можно повесить транзисторы.

1119. Tahoe, 29.05.2006 16:13
K_AV
Теперь видишь, я правильно не стал на этом этапе про дифференциальность заикаться.

Dismon
Я так и не понял, как ты ТОК собрался снимать?

Когда девайс стоит 2$, а из них половина - стоимость драйвера
А в светодиодном табло 90% стоимости - светодиоды. И чё теерь, эмулировать работу светодиодов микроконтроллером?

Добавление от 29.05.2006 16:17:

Dismon
Что б совсем понятно было утрирую: в RS485 при передаче "0" напряжение на линии - 1Вольт, при передаче "1" ТОЖЕ 1Вольт. Так понятно?

1120. Dismon, 29.05.2006 19:10
Tahoe


И чё теерь, эмулировать работу светодиодов микроконтроллером?

Светящихся микроконтроллеров пока в продаже не видел.


Что б совсем понятно было утрирую: в RS485 при передаче "0" напряжение на линии - 1Вольт, при передаче "1" ТОЖЕ 1Вольт.

Да ну? Видимо я не совсем тебя понимаю, но:
цитата:

Чувствительность приемника может быть разной, но гарантированный пороговый диапазон распознавания сигнала производители микросхем приемопередатчиков пишут в документации. Обычно эти пороги составляют ± 200 мВ. То есть, когда UAB > +200 мВ - приемник определяет "1", когда UAB < -200 мВ - приемник определяет "0".
Фактически, подключая к АЦП эти 2 линии и меряя на каждой из них напряжение (13 мкс на одно измерение для 10 бит, если не совсем склероз), с учетом низкой скорости 2000 получаем время передачи одного бита 1/2000 = 500 мкс. Вагон времени для переключения канала АЦП. Можно даже пару-другую усреднений сделать. Ну а потом из А вычесть В и смотреть по разнице - 0 на линии или 1.

Кстати говоря,

Tahoe
[/i]напряжение на линии - 1Вольт[/i]

1 вольт онросительно чего? А относительно В? относительно земли? В относительно А? Или относительно фазы луны ?

Добавление от 29.05.2006 19:21:

ЗЫ: В общем как я понял никто подобной фигней не страдал. Чтож, как приеду домой с сесии сам малость поковыряюсь.

1121. Tahoe, 29.05.2006 22:43
Dismon
Так, начнём с азов. Ты точно понимаешь, чем ТОК отличается от НАПРЯЖЕНИЯ?

Твой АЦП будет измерять НАПРЯЖЕНИЕ. А сигнал кодирован ТОКОМ. Поскольку закон Ома никто не отменял, то да, действительно, изменение ТОКА вызовет некий в данном случае ПОБОЧНЫЙ ЭФФЕКТ, а именно, изменение НАПРЯЖЕНИЯ. Надеюсь не надо объяснять, почему не надо работать на ПОБОЧНОМ ЭФФЕКТЕ и чем это всё закончится?

1122. Zman, 30.05.2006 03:22
Dismon
Tahoe
вы вот спорите, народ, хотя каждый прав по своему

в теории использовать неспециализированные микрухи можно, и это будет работать... Возьмите хотя бы адаптеры Игоря Чешко. То есть принципиально вопрос решаем, но ставить его надо по другому: насколько надежно и как долго это будет работать. Потом сопоставить затраты на ремонт + время и на нормальные микрухи изначально .

Скажем так "для дома, для семьи" я бы еще согласился это использовать, но если ты Dismon собираешься это заложить в серию и ставить клиентам, я бы хорошо подумал... где у тебя будет использоваться этот 485 ? если в боевых условиях (улица, дальние расстояния итд), а не в масштабе одной комнаты, то у тебя скорее всего будет куча проблем и без этого... а так - подключать голые входы на длинную линию... это все ходьба по минному полю... тебе все равно придется ставить на входы какую-то минимальную защиту, иначе пробьет входы как нефиг делать после пары подключений на ходу, косяков с питанием или первой грозы... ты не забыл, что нельзя подавать входные напряжения на ноги МК, без питания ? как будешь решать вопрос об одновременном подключении питания на всех девайсах, а потом на подключение линии ? (это если по уму делать)...


Tahoe
"доцент! ты конечно вор авторитетный" , но с токовой петлей 4..20мА не путаешь случайно ? , RS-485 - differential voltage signalling, то есть на приемнике измеряется именно разность напряжений между двумя сигнальными проводами, но никак не ток...

цитата навскидку:

The RS485 signals are floating and each signal is transmitted over a Sig+ line and a Sig- line. The RS485 receiver compares the voltage difference between both lines, instead of the absolute voltage level on a signal line.

1123. Tahoe, 30.05.2006 04:13
Zman
но с токовой петлей 4..20мА не путаешь случайно ?
Лоханулся я. Как с первого сообщения втемяшил в голову, что речь про current-loop, так и... Блин, в который раз убеждаюсь, лучше не делать ничего в "фоновом режиме". Наверное старость приближается.


Dismon
Извиняй. Забей на мои посты выше.

1124. 'Vlad', 30.05.2006 06:36
Xradio
цитата:
Да... пришлось AVReal заюзать.
Конкретно понадобилось тактировать от LPT через STK адаптер. Кристалл почему-то продается с выключенным RC. хотя с кварцем он, 2343, вообще не работает.
Сочинил такой пакетник...
avreal32 +90S2343 -p1 -as -o0 -%% -e -w file.hex -v -fRCEN=ON
AVReal - рулез. Конечно, без GUI может кому-то и не очень удобно работать (хотя такой сторонний все же имеется), но разобраться и слепить пакетник совсем не сложно. Как-то привык, вполне устраивает.

А с упомянутым зверем у меня была история. Вместо 2313 по недосмотру 2343 положили, а я толком не проверил, а когда проверил содержимое кулечка, то обнаружил не совсем то, но уже было поздно - брал-то не в своем городе. Конечно, 2313 потом еще прикупил, а 2343 сначала не знал куда приткнуть, а потом решил цифровую шкалу к Ишиму-003 слепить. Так он теперь и стоит там, а генератор 10МГц - внешний.

Добавление от 30.05.2006 06:41:

Tahoe

цитата:
Наверное старость приближается.
Самый удобный способ объяснения своих глюков.

1125. Tahoe, 30.05.2006 07:18
'Vlad'
Самый удобный способ объяснения своих глюков.
Дык я ж не отмазываюсь, я ж пытаюсь объяснить. Хотя бы самому себе, пусть и прилюдно.

1126. 'Vlad', 30.05.2006 07:54
Tahoe
Дык я ж не отмазываюсь, я ж пытаюсь объяснить. Хотя бы самому себе, пусть и прилюдно.
Вот и я о том же, почесывая свой полулысый череп, уже есть для себя оправдание своих же промашек.

1127. Xradio, 30.05.2006 15:10
Подскажите, как сделать чтобы AVRStudio4 не дописывал 0 в конец строки .db

1128. Dismon, 30.05.2006 16:13
Tahoe
Извиняй. Забей на мои посты выше.

А разве не заметно было, что я на них забивал?


Zman
это все ходьба по минному полю...

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

1129. Zman, 31.05.2006 03:12
Dismon

принципиально и практически давно все реализовано до нас
кликни на ссылку IgorPlug-USB внизу страницы здесь (http://www.cesko.host.sk/)

1130. Xradio, 01.06.2006 18:07
Конкретно ощущаю себя в пж с Two-wire Serial Interface ATmega8. при попытках чтения им AT24С256)... Что ж так грустно-то с этим бодрейтом в даташите?
Помогите с TWI Bit Rate Register – TWBR? У меня 8 MHz. RC. Что в него записать?

(С TWBR все легко, нашел в исходниках. А вот с именно последовательным чтением EEPROM - засада )

Добавление от 01.06.2006 18:37:

А с добавленным линкером студии нулем в конце data byts .db_____ так и не справился... пришлось его фильтровать. Но звук *.wav прекрасно работает с помощью PWM TC2.
ldi r16, 0b01111001
out TCCR2, r16
;затем цикле:
...
out OCR2, r17 ;r17 - байт из таблицы .db звука (фразы)
rcall tau ; timer sampling frequency
;если не конец "звука", то "лупсоунд"
На PB3 MOSI/OC2 Mega8 будет ШИМ ~~40kHz, который можно подать на затвор MOSFET в стоке которого динамик на +. А лучше - активный фильтр со срезом 10 kHz. и амплифайер
( PB3 надо подтягтвать внешним резистором к +Vcc!)

1131. Zhmak, 02.06.2006 00:14
Насколько сказывается дробный UBRR при работе с rs232? У меня кварц на 10МГц к 2313 подвешен, с такой частотой UBRR целым не получить. Планирую использовать порт для подачи команд из терминала контроллеру. Битовая скорость 9600. Поток данных ничтожен, так что по идее бяка маловероятна. Но малоли...

Добавление от 02.06.2006 12:06:

И еще, есть у кого готовый пример настройки таймера для ШИМ для at90s2313. Читая документацию совсем запутался

1132. Zman, 02.06.2006 19:06
Zhmak
принято считать, что реальный битрейт должен быть в пределах +/- 3% от номинального, при таком условии ошибок не возникает. Выше этого - уже возможны варианты...
если хочешь получить идеальные частоты - используй кварцы на 3.6864 Мгц или кратные ему

1133. Xradio, 03.06.2006 12:13
Никак не получается выполнить алгоритм последовательного чтения внешней EEPROM с помощью TWI ATmega. Может быть у кого завалялся кусок асма именно для Sequential Read?
Типа такого http://www.captain.at/electronic-atmega-eeprom.php
но асм?
http://avr-asm.tripod.com/twi8.html
не нагляден...

1134. Dismon, 03.06.2006 16:39
Xradio
Типа такого http://www.captain.at/electronic-atmega-eeprom.php
но асм?


А зачем асм, если есть С? .

ЗЫ: В крайнем случае, если без асма никак, возьми компилятор, набей сию прогу да посмотри листинг.

1135. joptpd, 03.06.2006 17:03
скажите че с прогой не так?
протеус ее как то криво симулирует и в железе еще не сделал до конца

код:
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char h=0, m=0, s=0;
#define HOUR !(PINB & 0x10)
#define MINUTES !(PIND & 0x20)
#define TOGGLE_INT !(PIND & 0x40)
//#define START_INT TIMSK|=_BV(TOIE1);
//#define STOP_INT TIMSK&=~(_BV(TOIE1));

#define INT TIMSK^=_BV(TOIE1);



void init(void);

int main(void){

init();

while(1){





//PORTD|=h;
//PORTB|=m;
}
}

ISR(TIMER0_OVF0_vect){

if(TOGGLE_INT) INT // старт/стоп прерываний

if(MINUTES) m++;
// else m=0;

if(HOUR ) h++;
// else h=0;

TCNT0=0x64; //100ms

}

ISR(TIMER1_OVF1_vect){

s++;
if(s==60){
s=0;
m++;
}

if(m==60){
m=0;
h++;
}

if(h==24){
s=0;
m=0;
h=0;
}

TCNT1H=0xC2;
TCNT1L=0xF7;

PORTB=m;
PORTD=h;
PORTB^=(1<<7);

}

void init(void){

DDRB=0xFF;
PORTB=0x00;

PORTD=0x00;
DDRD=0x0F;

TCNT1H=0xC2; // 1sec by 1mhz
TCNT1L=0xF7;

TCCR1A=0x00;
TCCR1B=0x03; // prescaller 64

TCCR0=0x03; //prescaller 64
TCNT0=0x64; // 10ms

TIFR=0x00;

TIMSK=0x02; // enable TIMER0 overflow interrupt
// GIMSK=0x00; // all other interrupt sources are disabled


sei(); // enable global interrupts

}


короче ето такие часы двоичные
3я кнопка запускает и останавливает таймер1
таймер0 для опроса кнопок и установки времени

секундный светодиод не мигает если еще в порт выводить остальное

и че надо сделать чеб в авр студио оно работало в реальном времени?
там кварц стоит 4мгц а я хз как его поменять
и прерывания не работают или работают но очень медлено

1136. Zhmak, 05.06.2006 02:42
Пишу прогу под 2313 на асме
что-то я никак не могу найти мнемонику для перехода по Z флагу (перейти если ноль).
Пока пользуюсь кривой конструкцией вида:
tst tmp1_r
breq somewhere

Неужели нет более красивого варианта в виде команды brz ?

Добавление от 05.06.2006 03:00:

И еще вопрос по команде SUBI
В одной программе встретил строчку:
SUBI регистр, -константа

Тоесть вычитаем отрицательное, получаем сложение. Но почему в описании, найденном неоднократно в инете ничего не сказано, про то, что это операция над операторами со знаком? Я чего-то недопонял. Получается, что оба числа семибитовые со знаком? Или только второй оператор со знаком?

1137. 'Vlad', 05.06.2006 03:28
Zhmak

Флаг (в частности - Z) устанавливается по результату выполнения какой-либо команды, влияющей на этот флаг.
Поэтому проверить число на ноль - совершить операцию проверки (TST tmp1_r; AND tmp1_r, tmp1_r; OR tmp1_r, tmp1_r и т.д.), после чего команда условного перехода по нулю может воспользоваться полученным флагом Z. А как иначе?
Правда, еще есть команда пропуска по сравнению регистров - CPSE tmp1_r, tmp2_r, но тогда в регистр tmp2_r нужно предварительно записать ноль. Для RISC-контроллеров уже и это - жирно.

А что должна совершить гипотетическая команда BRZ ?

1138. Zhmak, 05.06.2006 03:38
'Vlad'
Команда должа совершить переход по флагу Z.

В моем случае участок кода цикла с уменьшением одного из регистров:

metka: dec tmp1_r
tst tmp1_r
bneq somewhere
...
rjmp metka
тоесть имеем три команды(операцию над регистром, сравнение с нулемб переход по равенству), вместо двух (операция, переход, если Z).

Просто давным-давно баловался простыми программками на asm для Z80, там такой оператор был и назывался JP Z, адрес

1139. 'Vlad', 05.06.2006 04:00
Zhmak
А зачем дополнительная проверка на ноль, если DEC tmp1_r устанавливает флаг Z в случае, если содержимое tmp1_r становится равным нулю? Вторая команда - абсолютно лишняя.

Внимательно изучи набор команд и влияния результата их выполнения на флаги. Думаю, тогда недоразумения такого рода не будут возникать.

1140. Zhmak, 05.06.2006 04:17
'Vlad'
Причем тут влияние команд на флаги? Я же спрашиваю про влияние флагов на команду перехода. Мне показалось нелогичным проверка на ноль и переход по равенству, поэтому и закралось сомнение в отстутствии команды перехода по Z у AVR.

Нашел вот такой список команд для AVR (http://www.gaw.ru/html.cgi/txt/doc/micros/avr/asm/start.htm) . Вупор не вижу команды перехода по нулю!

Добавление от 05.06.2006 04:24:

Все! Понял!

цитата:
Команда BREQ - Перейти если равно
Условный относительный переход. Тестируется бит флага нулевого значения (Z) регистра статуса и, если бит установлен, выполняется переход относительно состояния счетчика программ.

1141. 'Vlad', 05.06.2006 04:51
Zhmak
цитата:
Причем тут влияние команд на флаги? Я же спрашиваю про влияние флагов на команду перехода.
Внимательно вчитайся в написанное и найди нелогичность суждения.

цитата:
Нашел вот такой список команд для AVR. Вупор не вижу команды перехода по нулю!
Видимо, нужно смотреть внимательно, а не "вупор".

Найди команду BREQ и внимательно прочти, проверка состояния какого флага определяет ее выполнение, а потом посмотри, какие флаги устанавливает/снимает команда DEC. Если внимательно разберешься, то станет понятно, что произойдет, если после очередного декрементирования содержимого регистра оно станет равным нулю:
код:

loop:
...
dec tmp1_r
breq next
rjmp loop
...
next:
...


Хотя можна и так:
код:

loop:
...
dec tmp1_r
brne loop
next:
...

если next: располагается непосредственно за циклом.

1142. Xradio, 05.06.2006 07:56
Dismon
А зачем асм, если есть С?
Если бы в Си писали не по-птичьи, то... Я его понимаю, но сам никак не могу насмелиться. Да и эти сплошные инклюды... которые черт знает где лежат...
вот и скачешь по окнам, пока глаза в разные стороны не начнут смотреть.
А EEPROMку победил тупо... в лоб, не используя TWI. Причем пришлось применить полное адресное чтение: старт врайт, аск, адрес, адрес, стоп, репстарт реад, аск, реад, ноаск, стоп. И так с каждым байтом... Однако и так нормально читается 11 кHz. PCM звук.

1143. 'Vlad', 05.06.2006 09:44
Xradio
цитата:
Если бы в Си писали не по-птичьи, то... Я его понимаю, но сам никак не могу насмелиться.
Ага, я тоже шарахался от него, потом попробовал, вроде как получается. Но, определенное недоверие еще осталось - аассемблерный листинг проверяю. Вдруг какие грабли. Правда, пока только свои собственные обнаруживал . В случае, если что не нравится - ассемблерная вставка в критических местах.
Кстати, по поводу инклюдов, когда начинаешь проверять длинный ассемблерный код, глаза в конце концов занимают то же положение . А когда еще и макросов натычешь...

1144. RWolf, 05.06.2006 10:12
цитата:
Zhmak:
Тоесть вычитаем отрицательное, получаем сложение. Но почему в описании, найденном неоднократно в инете ничего не сказано, про то, что это операция над операторами со знаком? Я чего-то недопонял. Получается, что оба числа семибитовые со знаком? Или только второй оператор со знаком?

Дополнительный код тем и хорош, что не делает разницы между арифметикой со знаком и без такового.
Школьный курс информатики, кажется.

1145. Xradio, 05.06.2006 16:21
Возможно кому-то и пригодится этот Basic для создания готовых таблиц .DB для микроконтроллера.

код:

CLS
B$ = ".db "
z$ = ","

OPEN "sound.bin" FOR INPUT AS #1
OPEN "sound.asm" FOR OUTPUT AS #2
DO WHILE NOT EOF(1)
n = n + 1
a = a + 1
s$ = INPUT$(1, #1)
IF ASC(s$) = 255 THEN s$ = CHR$(254) ' Это заменяет FFh на Eh. (Я использую FFh как признак конца таблицы файла.)
PRINT HEX$(a), HEX$(ASC(s$))
PRINT #(2), ASC(s$); z$;
IF n = 16 THEN GOTO ent
lo: LOOP
GOTO end_p
ent: PRINT #(2),
PRINT #(2), B$;
n = 0
GOTO lo
end_p: CLOSE #1
CLOSE #2
END

Добавление от 05.06.2006 16:31:

Да, забыл... исходный файл "sound.bin", в случае звука PCM 8-bit, предварительно изготавливается из файла *.wav путем обрезания заголовка и... конца в любом т. редакторе или FAR. Но в МК влезет совсем немного. Если применить внешнюю **ROM, то...

1146. Zhmak, 06.06.2006 02:49
Вопрос по эмулятору в AVR Studio и UART
Во время паузы трассировки устанавливаю бит RXC и очищаю UDRE, пишу в UDR значение. Следующимходом трассировки вызывается обработчик прерывания URXCaddr.
Но почему сбрасывается в ноль UDR?
Тоесть к моменту наступления инструкции in tmp1_r,UDR в UDR хранится ноль. Но, если непосредственно перед этой инструкцией вручную занести в регистр UDR какое-нибудь значение, то оно нормально присваивается инструкцией в tmp1_r.

1147. Zhmak, 07.06.2006 01:48
Еще вопрос по AVR Studio 4
Можно как-нибудь настроить AVR симулятор, чтобы он очищал содержимое DATA (SRAM) после компиляции проекта. А то набивается мусора всякого со временем

RWolf
Не знал, что там допкод используется. Спасибо.

'Vlad'
с регистрами-то я знаком. Просто долго не мог понять, что именно breq скачет от Z флага. Меня сбила EQ часть имени(эквивалент, равенство. Ну не подумал я, что при сравнении значения вычитаются друг из друга и дают ноль, в случае равенства) . Вот если бы она называлась BRZ... Впрочем, что-то меня опять понесло

1148. Chudik, 07.06.2006 03:00
Xradio
Возможно кому-то и пригодится этот Basic для создания готовых таблиц .DB для микроконтроллера.
А чего бы на С не написать?

1149. 'Vlad', 07.06.2006 05:15
Zhmak
Ну, что поделаешь, какую мнемонику придумали, такую придумали, подкопаться можно ко всему, почти ко всему. Например - MOV и LDI. Нет, чтобы - MVI. Но, тут уж придумавшие - хозяева-баре...

1150. DrAG0n, 07.06.2006 06:14
Читал тут недавно описалово к AD7706. Увидел пример программы на C для моторолловских HC. И обнаружил, что название регистров для SPI совершенно одинаково. И ножки портов (DDR, PORT, (PIN?)) тоже управляются одинаково. Что там еще одинакового есть?

1151. Dismon, 07.06.2006 10:12
'Vlad'
когда начинаешь проверять длинный ассемблерный код, глаза в конце концов занимают то же положение

Только еще пальцы устают, которыми pgup и pgdown жмешь.

1152. VBKesha, 19.06.2006 23:14
Может и странный вопрос но как реализовывать циклы задержки(AVR). Самое простое что лезет в голову это прау вложеных циклов, но както некрасиво. Второе что пришло в голову использовать таймер и усыплять контроллер при переполнении таймера он ведь проснётся и уйдёт в прерывание. Или я велосипед изобретаю и всё уже придумано?

1153. Chudik, 19.06.2006 23:30
VBKesha
Самое простое что лезет в голову это прау вложеных циклов, но както некрасиво. Второе что пришло в голову использовать таймер и усыплять контроллер при переполнении таймера он ведь проснётся и уйдёт в прерывание.
Оба этих решения стандартны и некрасивы. Так обычно всегда и делают. Иногда ещё комбинируют, если есь "системный" таймер: период обращения таймера обычно известен, в прерывании инкрементируют какой-либо счётчик, а при необходимости задержки сохраняют текущее значение этого счётчика и ждут пока он изменится на заданное количество юнитов.

Я в одном из дизайнов делал callback. Т.е. через заданное время вызывал нужную мне короткую функцию.

1154. LazyCamel, 20.06.2006 10:24
VBKesha

Я на прерывание таймера вешал взведение флажка, а в основном цикле его контролировавал, но у меня к джиттеру особенных требований не было, главное чтобы было "не раньше, чем установлено"

1155. Donetsk, 22.06.2006 13:20
Расскажите где в этой программе - измерение с АЦП т.е. сколько раз измеряется значение суммируется и где потом делится?
;
код:
; ИЗМЕРИТЕЛЬ НАПРЯЖЕНИЯ 0-50 В (0,1 В).
; ИЗМЕРИТЕЛЬ ТОКА ДО 10 А (10 мА).
; С РАЗДЕЛЬНЫМ ВКЛЮЧЕНИЕМ УСТАНОВОК ЗАЩИТЫ
; ПО ТОКУ И НАПРЯЖЕНИЮ ДО 5,12 В(А).
; ДЛЯ БЛОКОВ ПИТАНИЯ. ИНДИКАЦИЯ - 8 РАЗР. СВ. ДИОДОВ С ОК.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = AUMZUV.ASM
; ВЕРСИЯ: 16-08-04.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.70.40.
;
#INCLUDE <P16F873.INC>
__CONFIG 3F31H
;====================================================
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 4,0 MГц.
;====================================================
; ПОРТ С - ВЫХОД КАТОДОВ.
; ПОРТ B - ВЫХОД СЕГМЕНТОВ.
; RA0 - АНАЛОГОВЫЙ ВХОД 1 НАПРЯЖЕНИЯ.
; RA1 - АНАЛОГОВЫЙ ВХОД 2 ИЗМЕРЕНИЯ ТОКА.
; RA2 - УПРАВЛЕНИЕ.
; RA4 - ВХОД КНОПКИ "УСТАНОВКА".
; RA5 - ВХОД КНОПКИ "РАЗРЯД".
;=========================================
; РЕГИСТРЫ РСН.
;=========================================
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H ;OPTION (RP0=1).
PC EQU 02H ;СЧЕТЧИК КОМАНД.
STATUS EQU 03H ;РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H ;РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA EQU 05H ;ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H ;ПОРТ В ВВОДА/ВЫВОДА.
PORTC EQU 07H ;ПОРТ С ВВОДА/ВЫВОДА.
TRISA EQU 85H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H ;ПОРТ В ВВОДА/ВЫВОДА.
TRISC EQU 87H ;ПОРТ С ВВОДА/ВЫВОДА.
INTCON EQU 0BH ;РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
PIE1 EQU 8CH ;РЕГИСТР РАЗРЕШЕНИЯ ПЕРЕФЕРИЙНЫХ ПРЕРЫВАНИЙ.
ADRESH EQU 1EH ;СТАРШИЙ БАЙТ АЦП.
ADRESL EQU 9EH ;МЛАДШИЙ БАЙТ АЦП.
ADCON0 EQU 1FH ;РЕГИСТР УПРАВЛЕНИЯ АЦП.
ADCON1 EQU 9FH ;РЕГИСТР УПРАВЛЕНИЯ ВХОДАМИ "АDP".
EEDATA EQU 10CH ;РЕГИСТРЫ ЗАПИСИ/СЧИТЫВАНИЯ.
EEADR EQU 10DH ;
EEDATH EQU 10EH ;
EEADRH EQU 10FH ;
EECON1 EQU 18CH ;
;===========================================
; ОПРЕДЕЛЕНИЕ РОН.
;===========================================
TEKH EQU 20H ;ДВОИЧНОЕ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ
TEKL EQU 21H ;НАПРЯЖЕНИЯ ИЛИ ТОКА.
SEG EQU 22H ;РЕГИСТР СЕГМЕНТОВ.
CEK EQU 23H ;ВРЕМЯ ПАУЗЫ.
WTEMP EQU 24H ;ВРЕМЕННЫЙ.
TEMP EQU 25H ;ВРЕМЕННЫЙ.
FLAG EQU 26H ;РЕГИСТР ФЛАГОВ.
ANOD2 EQU 27H ;ДВОИЧНОЕ ЗНАЧЕНИЕ КАТОДА.
STEMP EQU 28H ;ВРЕМЕННЫЙ.
FTEMP EQU 29H ;ВРЕМЕННЫЙ.
DEA EQU 2AH ;РЕГИСТРЫ ПЕРЕКОДИРОВКИ 2 -> 2_10.
COA EQU 2BH ;
EDA EQU 2CH ;
UEDI EQU 30H ;РЕГИСТРЫ ИНДИКАЦИИ НАПРЯЖЕНИЯ, 0.
UDEI EQU 31H ;1.
UCOI EQU 32H ;2.
IEDI EQU 33H ;РЕГИСТРЫ ИНДИКАЦИИ ТОКА, 0,
IDEI EQU 34H ;1.
ICOI EQU 35H ;2.
TUI EQU 36H ;РЕГИСТР ИНДИКАЦИИ БУКВЫ ТОКА.
ANOD EQU 37H ;ПОЗИЦИОННОЕ ЗНАЧЕНИЕ КАТОДА.
ZPT EQU 38H ;ЗАПЯТОЙ.
COU EQU 39H ;СЧЕТЧИК ПЕРЕКОДИРОВКИ.
R0 EQU 3AH ;ВРЕМЕННЫЕ ДЛЯ
R1 EQU 3BH ;ПЕРЕКОДИРОВКИ (2_10 -> 2)
TEMPL EQU 3CH ;
TEMPH EQU 3DH ;
EDY EQU 42H ;РЕГИСТРЫ
DEY EQU 43H ;УСТАНОВКИ ЗАЩИТЫ
COY EQU 44H ;ПО ТОКУ.
YCTL EQU 45H ;ДВОИЧНОЕ ЗНАЧЕНИЕ УСТАНОВОК
YCTH EQU 46H ;МЛАДШИЙ И СТАРШИЙ РЕГИСТР.
EDYU EQU 47H ;РЕГИСТРЫ
DEYU EQU 48H ;УСТАНОВКИ ЗАЩИТЫ
COYU EQU 49H ;ПО .
YCTLU EQU 4AH ;ДВОИЧНОЕ ЗНАЧЕНИЕ УСТАНОВОК
YCTHU EQU 4BH ;МЛАДШИЙ И СТАРШИЙ РЕГИСТР.
ZPTI EQU 4CH ;ИНДИКАЦИИ ЗАПЯТОЙ ТОКА.
COUN EQU 4EH ;СЧЕТЧИК ЦИКЛОВ ИЗМЕРЕНИЯ.
TUU EQU 4FH ;РЕГИСТР ИНДИКАЦИИ БУКВЫ НАПРЯЖЕНИЯ.
ZPTU EQU 50H ;ЗАПЯТАЯ ПО НАПРЯЖЕНИЮ.
FLAG1 EQU 51H ;ФЛАГ ВКЛЮЧЕНИЯ ЗАЩИТЫ.
ZTI EQU 52H ;РЕГИСТР ВКЛЮЧЕНИЯ ЗАЩИТЫ ПО ТОКУ ПРИ РАБОТЕ.
ZTU EQU 53H ;РЕГИСТР ВКЛЮЧЕНИЯ ЗАЩИТЫ ПО НАПРЯЖЕНИЮ ПРИ РАБОТЕ.
ZYTI EQU 54H ;РЕГИСТР ВКЛЮЧЕНИЯ ЗАЩИТЫ ПО ТОКУ ПРИ УСТАНОВКЕ.
ZYTU EQU 55H ;РЕГИСТР ВКЛЮЧЕНИЯ ЗАЩИТЫ ПО НАПРЯЖЕНИЮ ПРИ УСТАНОВКЕ.
;=================================
; ОПРЕДЕЛЕНИЕ БИТОВ РЕГИСТРА FLAG.
;=================================
; 0->ИНДИКАЦИЯ: 1-НАПРЯЖЕНИЕ, 0-ТОК.
; 2->ВЫХОД ВЫКЛЮЧЕН.
; 3->НАЖАТА КНОПКА УСТАНОВКИ.
; 4->НАЖАТА КНОПКА ВЫБОРА РАЗРЯДА.
; 5->1-РАБОТА, 0-УСТАНОВКА.
; 6->0,5 СЕКУНД НАПРЯЖЕНИЯ.
; 7->0,5 СЕКУНД ТОКА.
;==================================
; ОПРЕДЕЛЕНИЕ БИТОВ РЕГИСТРА FLAG1.
;==================================
; 0->ВЫКЛЮЧЕНИЯ ЗАЩИТЫ ПО ТОКУ. 1=ВЫКЛЮЧЕНО.
; 1->ВЫКЛЮЧЕНИЯ ЗАЩИТЫ ПО НАПРЯЖЕНИЮ. 1=ВЫКЛЮЧЕНО.
;==================================
; 1. ПУСК
;=======================
ORG 0
GOTO INIT
ORG 4
GOTO PRER
;=======================================
; 2. ТАБЛИЦА СЕГМЕНТОВ ДЛЯ ОБЩЕГО КАТОДА.
;=======================================
SEGDATA ;7, 6, 5, 4, 3, 2, 1, 0.
ADDWF PCL,F ;H, G, F, E, D, C, B, A.
; КАТОД АНОД
RETLW B'00111111' ; 0 B'11000000'
RETLW B'00000110' ; 1 B'11111001'
RETLW B'01011011' ; 2 B'10100100'
RETLW B'01001111' ; 3 B'10110000'
RETLW B'01100110' ; 4 B'10011001'
RETLW B'01101101' ; 5 B'10010010'
RETLW B'01111101' ; 6 B'10000010'
RETLW B'00000111' ; 7 B'11111000'
RETLW B'01111111' ; 8 B'10000000'
RETLW B'01101111' ; 9 B'10010000'
RETLW B'00011100' ; 10 u НИЖНЕЕ, С ЗАЩИТОЙ.
RETLW B'00000100' ; 11 i НИЖНЕЕ, С ЗАЩИТОЙ.
RETLW B'01101110' ; 12 У
RETLW B'00000010' ; 13 i ВЕРХНЕЕ, БЕЗ ЗАЩИТЫ.
RETLW B'01100010' ; 14 u ВЕРХНЕЕ, БЕЗ ЗАЩИТЫ.
RETLW 0 ; 15 ПУСТО.
;==========================================
; 3. ПЕРЕВОД ДЕСЯТКОВ В 2 КОД.
;==========================================
EDUNI
ADDWF PCL,1
RETLW .0
RETLW .10
RETLW .20
RETLW .30
RETLW .40
RETLW .50
RETLW .60
RETLW .70
RETLW .80
RETLW .90
;============================
; 4. ВЫБОР РАЗРЯДА УСТАНОВКИ.
;============================
YCT
BTFSS PORTA,4 ;ПОКА КНОПКА НАЖАТА,
RETURN ;ВЫБОРА НЕТ.
BCF FLAG,3 ;СБРОСИМ ФЛАГ УСТАНОВКИ.
BTFSS FLAG,5 ;ЕСЛИ БЫЛА РАБОТА,
GOTO BYCT ;
CLRF ZPT ;ТО УСТАНОВИМ ЗАПЯТУЮ В 0 РАЗРЯД
BCF FLAG,5 ;И СБРОСИМ ФЛАГ РАБОТЫ (УСТАНОВКА).
BCF PORTA,2 ;ПРИ УСТАНОВКЕ НАГРУЗКА ВЫКЛЮЧАЕТСЯ.
BSF FLAG,2 ;УСТАНОВИМ ФЛАГ ВЫКЛЮЧЕННОЙ НАГРУЗКИ.
MOVFW ZYTI ;ИНДИКАЦИЯ БУКВЫ
MOVWF TUI ;У ПРИ УСТАНОВКЕ.
MOVFW ZYTU ;
MOVWF TUU ;
CALL Y_I ;ВЕРНЕМСЯ ДО ПОВТОРНОГО НАЖАТИЯ КНОПКИ.
GOTO Y_U ;
BYCT
MOVFW ZPT ;ГДЕ ЗАПЯТАЯ, ТОТ РАЗРЯД И УСТАНАВЛИВАЕМ.
ADDWF PC,1 ;
GOTO YCT0 ;
GOTO YCT1 ;
GOTO YCT2 ;
GOTO YCT3 ;
GOTO YCT4 ;
GOTO YCT5 ;
GOTO YCT6 ;
GOTO YCT7 ;
;==============================
; 5. ИНДИКАЦИЯ.
;==============================
IND
MOVLW .254 ;УСТАНАВЛИВАЕМ НУЛЕВОЙ РАЗРЯД В
MOVWF ANOD ;ПОЗИЦИОННОЕ ЗНАЧЕНИЕ КАТОДА.
CLRF ANOD2 ;ОБНУЛИМ ДВОИЧНОЕ ЗНАЧЕНИЕ АНОДА (КАТОДА).
IND0
MOVFW ZPT ;ЗАПЯТУЮ ПО ТОКУ
MOVWF ZPTI ;В РЕГИСТР ИНДИКАЦИИ.
BCF FLAG,0 ;СБРОСИМ ФЛАГ ИНДИКАЦИИ НАПРЯЖЕНИЯ.
MOVFW IEDI ;ЗАГРУЖАЕМ РЕГИСТР ИНДИКАЦИИ.
CALL INDZ ;ПРОИНДИЦИРУЕМ.
CALL ZDEM ;ПАУЗА.
IND1
MOVFW IDEI ;ВСЕ ОСТАЛЬНЫЕ РАЗРЯДЫ-
CALL INDZ ;АНАЛОГИЧНО НУЛЕВОМУ.
CALL ZDEM ;ПАУЗА.
IND2
MOVFW ICOI ;
CALL INDZ ;
CALL ZDEM ;ПАУЗА.
IND3
MOVFW TUI ;ИНДИКАЦИЯ СИМВОЛА ТОКА - i.
CALL INDZ ;
CALL ZDEM ;ПАУЗА.
IND4
BTFSS FLAG,5 ;
GOTO $+3 ;
MOVFW ZPTU ;ЗАПЯТАЯ ПО НАПРЯЖЕНИЮ
MOVWF ZPTI ;В РЕГИСТР ИНДИКАЦИИ.
MOVFW UEDI ;ЗАГРУЖАЕМ РЕГИСТР ИНДИКАЦИИ.
CALL INDZ ;ПРОИНДИЦИРУЕМ.
CALL ZDEM ;ПАУЗА.
IND5
MOVFW UDEI ;
CALL INDZ ;ИНДИКАЦИЯ.
CALL ZDEM ;ПАУЗА.
IND6
MOVFW UCOI ;
CALL INDZ ;
CALL ZDEM ;ПАУЗА.
IND7
MOVFW TUU ;ИНДИКАЦИЯ СИМВОЛА НАПРЯЖЕНИЯ - u.
CALL INDZ ;
CALL KHO ;
CALL ZDEM ;ПАУЗА.
GOTO IND ;НА ИНДИКАЦИЮ НУЛЕВОГО РАЗРЯДА.
INDZ
CALL SEGDATA ;ОПРЕДЕЛИМ СЕМИСЕГМЕНТНОЕ ЗНАЧЕНИЕ.
MOVWF SEG ;ЗАПИШЕМ ЕГО В РЕГИСТР.
MOVFW ZPTI ;СРАВНИМ РАЗРЯД ЗАПЯТОЙ
SUBWF ANOD2,0 ;С РАЗРЯДОМ ИНДИКАЦИИ.
SKPNZ ;ЕСЛИ ОНИ НЕ СОВПАДАЮТ, ТО ПРОПУСТИМ УСТАНОВКУ.
BSF SEG,7 ;ВКЛЮЧИМ СЕГМЕНТ ЗАПЯТОЙ.
BCF INTCON,7;
MOVFW SEG ;ПЕРЕПИШЕМ ЗНАЧЕНИЕ
MOVWF PORTB ;В ПОРТ B.
MOVFW ANOD ;ВКЛЮЧИМ РАЗРЯД.
MOVWF PORTC ;В ПОРТ С.
BSF INTCON,7;
BSF STATUS,0;НУЛЕВОЙ РАЗРЯД -1, ЧТОБЫ В КАТОД ЗАПИСАЛАСЬ 1.
RLF ANOD,1 ;СДВИНЕМ НОЛЬ НА РАЗРЯД ВЛЕВО.
INCF ANOD2,1 ;УВЕЛИЧИМ ДВОИЧНОЕ ЗНАЧЕНИЕ АНОДА (КАТОДА).
RETURN ;ВЕРНЕМСЯ.
ZDEM
MOVLW .10 ;ПАУЗА = 10 ЦИКЛАМ ПРОВЕРКИ ТОКА
MOVWF COUN ;И НАПРЯЖЕНИЯ.
CALL ADPI ;ПРОВЕРИМ ТОК.
BSF FLAG,0 ;УСТАНОВИМ ФЛАГ ИНДИКАЦИИ НАПРЯЖЕНИЯ.
CALL ADPU ;ПРОВЕРИМ НАПРЯЖЕНИЕ.
BCF FLAG,0 ;СБРОСИМ ФЛАГ ИНДИКАЦИИ НАПРЯЖЕНИЯ.
DECFSZ COUN,1 ;
GOTO $-5 ;ПОВТОРИМ.
RETURN ;
;===================================================
; 6. АЦП - ПРЕОБРАЗОВАНИЯ (ИЗМЕРЕНИЕ ВХОДНЫХ ВЕЛИЧИН).
;===================================================
ADPI
BTFSS FLAG,5 ;ИЗМЕРЕНИЯ ТОКА НЕТ, ЕСЛИ
RETURN ;ИДЕТ УСТАНОВКА.
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1. ВКЛЮЧАЕМ ВХОД ТОКА.
MOVLW B'10000100' ;RA0, RA1 - ВХОДЫ ПОРТА "А" АНАЛОГОВЫЕ.
MOVWF ADCON1^80H ;
BCF STATUS,5 ;БАНК 0.
MOVLW B'11001001' ;СИНХРОНИЗАЦИЯ ОТ RC
MOVWF ADCON0 ;ГЕНЕРАТОРА, ВХОД 1, ВКЛЮЧЕНИЕ АЦП (YBX).
CALL ZAD ;ПАУЗА.
BCF INTCON,7 ;ЗАПРЕТ ПРЕРЫВАНИЯ.
BSF ADCON0,2 ;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ.
BTFSC ADCON0,2 ;ОЖИДАЕМ ЗАВЕРШЕНИЯ
GOTO $-1 ;ПРЕОБРАЗОВАНИЯ.
MOVFW ADRESH ;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ
MOVWF TEKH ;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР.
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1.
MOVLW 21 ;
MOVWF FSR ;ПО КОСВЕННОЙ АДРЕСАЦИИ
MOVFW ADRESL ;ЗАПИСЬ МЛ. РЕГИСТРА АЦП
MOVWF INDF ;В РЕГИСТР TEKL.
BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0.
BSF INTCON,7 ;РАЗРЕШАЕМ ПРЕРЫВАНИЯ.
BTFSS FLAG1,0 ;ЕСЛИ ЗАЩИТА ВЫКЛЮЧЕНА, ТО СРАВНЕНИЯ НЕТ.
CALL COMPA ;СРАВНИМ С УСТАНОВКОЙ.
BTFSS FLAG,7 ;ЕСЛИ 0,5 СЕКУНД НЕ ПРОШЛО,
RETURN ;ТО НАПРЯЖЕНИЕ НЕ ИНДИЦИРУЕТСЯ.
GOTO BINDEC ;ПЕРЕКОДИРУЕМ В 2_10 КОД.
ADPU
BTFSS FLAG,5 ;ИЗМЕРЕНИЯ НАПРЯЖЕНИЯ НЕТ, ЕСЛИ
RETURN ;ИДЕТ УСТАНОВКА.
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1. ВКЛЮЧАЕМ ВХОД НАПРЯЖЕНИЯ.
MOVLW B'10000100' ;ПРАВОЕ ВЫРАВНИВАНИЕ.
MOVWF ADCON1^80H ;0,1 ВХОДЫ ПОРТА "А" АНАЛОГОВЫЕ.
BCF STATUS,5 ;БАНК 0.
MOVLW B'11000001' ;СИНХРОНИЗАЦИЯ ОТ RC
MOVWF ADCON0 ;ГЕНЕРАТОРА, ВХОД 0, ВКЛЮЧЕНИЕ АЦП (YBX).
CALL ZAD ;ПАУЗА.
BCF INTCON,7 ;ЗАПРЕТ ПРЕРЫВАНИЯ.
BSF ADCON0,2 ;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ.
BTFSC ADCON0,2 ;ОЖИДАЕМ ЗАВЕРШЕНИЯ
GOTO $-1 ;ПРЕОБРАЗОВАНИЯ.
MOVFW ADRESH ;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ
MOVWF TEKH ;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР.
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1.
MOVLW 21 ;
MOVWF FSR ;ПО КОСВЕННОЙ АДРЕСАЦИИ
MOVFW ADRESL ;ЗАПИСЬ МЛ. РЕГИСТРА АЦП
MOVWF INDF ;В РЕГИСТР TEKL.
BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0.
BSF INTCON,7 ;РАЗРЕШАЕМ ПРЕРЫВАНИЯ.
BTFSS FLAG1,1 ;ЕСЛИ ЗАЩИТА ВЫКЛЮЧЕНА, ТО СРАВНЕНИЯ НЕТ.
CALL COMPU ;СРАВНИМ С УСТАНОВКОЙ.
BTFSS FLAG,6 ;ЕСЛИ 0,5 СЕКУНД НЕ ПРОШЛО,
RETURN ;ТО НАПРЯЖЕНИЕ НЕ ИНДИЦИРУЕТСЯ.
GOTO BINDEC ;ПЕРЕКОДИРУЕМ В 2_10 КОД.
ZAD
MOVLW .5 ;ЗАДЕРЖКА 20 МКС
ADDLW -1 ;ДЛЯ ЗАРЯДА КОНДЕНСАТОРА УВХ.
BTFSS STATUS,2 ;
GOTO $-2 ;ПОВТОРИМ.
RETURN ;
;===========================
; 7. СРАВНЕНИЕ С УСТАНОВКОЙ.
;===========================
COMPA
MOVFW YCTH ;УСТАНОВКА МИНУС
SUBWF TEKH,0 ;ИЗМЕРЕНИЕ,
BTFSS STATUS,2;ЕСЛИ РАВЕНСТВО,
GOTO VUKL ;
BCF STATUS,0;ТО ВЫХОД НЕ ВЫКЛЮЧАЕТСЯ.
MOVFW YCTL ;УСТАНОВКА МИНУС
SUBWF TEKL,0 ;ИЗМЕРЕНИЕ,
BTFSC STATUS,0;ЕСЛИ РАВЕНСТВО,
GOTO VUKL ;ТО ВЫХОД ВЫКЛЮЧАЕТСЯ.
RETURN
VUKL
BTFSC FLAG,2 ;ЕСЛИ ВЫХОД УЖЕ ВЫКЛЮЧЕН,
RETURN ;СРАВНЕНИЙ НЕТ.
BTFSS STATUS,0;ЕСЛИ БИТ ПЕРЕНОСА = 0,
BSF PORTA,2 ;ВКЛЮЧИМ ВЫХОД.
BTFSS STATUS,0;ЕСЛИ БИТ ПЕРЕНОСА = 1,
RETURN
BCF PORTA,2 ;ВЫКЛЮЧИМ ВЫХОД.
BSF FLAG,2 ;СРАВНЕНИЙ НЕТ.
RETURN
COMPU
MOVFW YCTHU ;УСТАНОВКА МИНУС
SUBWF TEKH,0 ;ИЗМЕРЕНИЕ,
BTFSS STATUS,2;ЕСЛИ РАВЕНСТВО,
GOTO VUKL ;
BCF STATUS,0;ТО ВЫХОД НЕ ВЫКЛЮЧАЕТСЯ.
MOVFW YCTLU ;УСТАНОВКА МИНУС
SUBWF TEKL,0 ;ИЗМЕРЕНИЕ,
BTFSC STATUS,0;ЕСЛИ РАВЕНСТВО,
GOTO VUKL ;ТО ВЫХОД ВЫКЛЮЧАЕТСЯ.
RETURN
;===============================================================
; 8. ПЕРЕКОДИРОВКА ИЗ 16-И РАЗРЯДНОГО 2-ГО В 5- РАЗРЯДНОЕ 2-10-Е.
; АЛГОРИТМ ПЕРЕКОДИРОВКИ ОСНОВЫВАЕТСЯ НА ПРИБАВЛЕНИИ 3 В МЛАДШИЙ
; И СТАРШИЙ ПОЛУБАЙТЫ. ЕСЛИ РЕЗУЛЬТАТ СПЕРЕНОСОМ 1 В 3 РАЗРЯД (10=7+3), ТО ЗАПИСЫВАЕМ
; НОВОЕ ЗНАЧЕНИЕ В РЕГИСТР. ВЫПОЛНЯЕМ 16 РАЗ СДВИГАЯ БИТЫ РЕГИСТРОВ.
;===============================================================
BINDEC
MOVLW .16 ;ЗАПИШЕМ ЧИСЛО СДВИГОВ
MOVWF COU ;В СЧЕТЧИК.
BIDE
BCF STATUS,0 ;ОБНУЛИМ БИТ "С".
RLF TEKL,1 ;СДВИНЕМ ПЕРЕКОДИРУЕМОЕ
RLF TEKH,1 ;ЧИСЛО, ПЕРЕМЕЩАЯ ЕГО СТАРШИЙ БИТ
RLF EDA,1 ;В МЛАДШИЙ БИТ РЕГИСТРОВ
RLF DEA,1 ;РЕЗУЛЬТАТА.
DECFSZ COU,1 ;ЗАФИКСИРУЕМ СДВИГ В СЧЕТЧИКЕ.
GOTO RASDEC ;ПРОВЕРИМ ПОЛУБАЙТЫ НА СЕМЕРКУ.
BTFSC FLAG,0 ;ЕСЛИ СЧЕТЧИК ПУСТ, ЗАПОЛНИМ РЕГИСТРЫ ИНДИКАЦИИ
GOTO MESTOU ;НАПРЯЖЕНИЯ ИЛИ
GOTO MESTOI ;ТОКА.
RASDEC
MOVLW EDA ;ЗАПИШЕМ АДРЕС РЕГИСТРА
MOVWF FSR ;В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
CALL BCD ;ПРОВЕРИМ ЗНАЧЕНИЕ РЕГИСТРА НА 7.
MOVLW DEA ;АНАЛОГИЧНЫЕ ОПЕРАЦИИ ПРОДЕЛАЕМ
MOVWF FSR ;С ДРУГИМИ РЕГИСТРАМИ.
CALL BCD ;
GOTO BIDE ;ПОЙДЕМ ПОВТОРЯТЬ СДВИГ.
BCD
MOVLW 3 ;0000 0011
ADDWF 0,0 ;ПРИБАВИМ 3 К РЕГИСТРУ И РЕЗУЛЬТАТ
MOVWF TEMP ;ЗАПИШЕМ ВО ВРЕМЕННЫЙ РЕГИСТР.
BTFSC TEMP,3 ;ПРОВЕРИМ 3 БИТ И, ЕСЛИ ОН РАВЕН НУЛЮ,
MOVWF 0 ;ПРОПУСКАЕМ ЗАПИСЬ РЕЗУЛЬТАТА В РЕГИСТР.
MOVLW 30 ;48=0011 0000
ADDWF 0,0 ;ПРИБАВИМ 3 К СТАРШЕМУ ПОЛУБАЙТУ РЕГИСТРА И РЕЗУЛЬТАТ
MOVWF TEMP ;ЗАПИШЕМ ВО ВРЕМЕННЫЙ РЕГИСТР.
BTFSC TEMP,7 ;ЕСЛИ БИТ ЕДИНИЧНЫЙ,
MOVWF 0 ;ТО ЗАПИШЕМ НОВОЕ ЗНАЧЕНИЕ В РЕГИСТР.
RETURN ;ВЕРНЕМСЯ ДЛЯ ЗАГРУЗКИ НОВОГО ЗНАЧЕНИЯ РЕГИСТРА.
;===============================================================
; 9. ИЗВЛЕКАЕМ ПОЛУБАЙТЫ ИЗ РЕГИСТРОВ СЧЕТА В РЕГИСТРЫ ИНДИКАЦИИ.
;===============================================================
MESTOU
BTFSS FLAG,6 ;ЕСЛИ 0,5 СЕК НЕ ПРОШЛО,
RETURN ;ТО ВЕРНЕМСЯ.
MOVLW B'00001111';ИЗВЛЕКАЕМ ПОЛУБАЙТЫ
ANDWF DEA,0 ;В РЕГИСТРЫ ИНДИКАЦИИ
MOVWF UCOI ;НАПРЯЖЕНИЯ.
MOVLW B'11110000';
ANDWF EDA,0 ;
MOVWF UDEI ;
SWAPF UDEI,1 ;
MOVLW B'00001111';
ANDWF EDA,0 ;
MOVWF UEDI ;
CLRF EDA ;
CLRF DEA ;
CLRF COA ;
BCF FLAG,6 ;СБРОСИМ ФЛАГ 0,5 СЕК.
RETURN ;
MESTOI
BTFSS FLAG,7 ;ЕСЛИ 0,5 СЕК НЕ ПРОШЛО,
RETURN ;ТО ВЕРНЕМСЯ.
MOVLW B'00001111';ИЗВЛЕКАЕМ ПОЛУБАЙТЫ
ANDWF DEA,0 ;В РЕГИСТРЫ ИНДИКАЦИИ
MOVWF ICOI ;ТОКА.
MOVLW B'11110000';
ANDWF EDA,0 ;
MOVWF IDEI ;
SWAPF IDEI,1 ;
MOVLW B'00001111';
ANDWF EDA,0 ;
MOVWF IEDI ;
CLRF EDA ;
CLRF DEA ;
CLRF COA ;
BCF FLAG,7 ;СБРОСИМ ФЛАГ 0,5 СЕК.
RETURN ;
;================================================================
; 10. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
;================================================================
PRER
MOVWF WTEMP ;СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS ;STATUS,
MOVWF STEMP ;
MOVFW FSR ;FSR.
MOVWF FTEMP ;
BCF STATUS,6;
BCF STATUS,5;
INCF CEK,1 ;ДЕЛИТЕЛЬ НА 10.
MOVLW .8 ;ЧИСЛО РАВНО ДЕСЯТЫМ СЕКУНД.
SUBWF CEK,0 ;ДЛЯ ПЕРЕЗАПИСИ В РЕГ. ИНДИКАЦИИ.
BTFSS STATUS,2;ЕСЛИ РАВНО 10,
GOTO REPER ;
CLRF CEK ;ОБНУЛИМ.
BSF FLAG,6 ;ПРОШЛО 0,5 СЕК.
BSF FLAG,7 ;ПРОШЛО 0,5 СЕК.
REPER ;ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
MOVFW STEMP ;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS ;STATUS,
MOVFW FTEMP ;
MOVWF FSR ;FSR,
MOVFW WTEMP ;W.
BCF INTCON,2;СБРАСЫВАЕМ ФЛАГ ПРЕРЫВАНИЯ ОТ TMR0.
RETFIE ;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
;======================
; 11. ИНИЦИАЛИЗАЦИЯ.
;======================
INIT
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 1.
MOVLW B'00000111' ;
MOVWF OPTION_REG^80H ;ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=256 =...111.
MOVLW B'10100000' ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ ОТ TMR0.
MOVWF INTCON ;
CLRF PIE1^80H ;ЗАПРЕЩЕНЫ ВСЕ ПЕРИФЕРИЙНЫЕ ПРЕРЫВАНИЯ.
CLRF PIE2^80H
MOVLW B'00111011' ;RA0, RA1 - АНАЛОГОВЫЕ ВХОДЫ.
MOVWF TRISA^80H ;
CLRF TRISB^80H ;ВСЕ - ВЫХОДЫ СЕГМЕНТОВ.
CLRF TRISC^80H ;ВЫХОДЫ УПРАВЛЕНИЯ АНОДАМИ.
BCF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 0.
CLRF PORTB ;
CLRF T1CON ;ТАЙМЕР 1 ОТКЛЮЧЕН.
CLRF T2CON ;ТАЙМЕР 2 ОТКЛЮЧЕН.
CLRF FLAG ;ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ.
CLRF UEDI
CLRF UDEI
CLRF UCOI
CLRF IEDI
CLRF IDEI
CLRF ICOI
CLRF FLAG1
CALL AKT ;ВЫБОРКА ИЗ ПАМЯТИ УСТАНОВОК.
MOVLW .12 ;БУКВА У
MOVWF TUI ;В РЕГИСТРЫ ИНДИКАЦИИ ТОКА И
MOVWF TUU ;НАПРЯЖЕНИЯ,
MOVWF ZYTI ;УСТАНОВКИ ТОКА
MOVWF ZYTU ;И НАПРЯЖЕНИЯ.
MOVLW .11 ;БУКВА ВНИЗУ.
MOVWF ZTI ;
MOVLW .10 ;БУКВА ВНИЗУ.
MOVWF ZTU ;
CLRF CEK
CLRF ZPT
CLRF ZPTU
GOTO IND ;НА ИНДИКАЦИЮ.
;================================
; 12. УСТАНОВКА ЗНАЧЕНИЙ РАЗРЯДОВ.
;================================
YCT0
INCF EDY,1 ;РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 ;
SUBWF EDY,0 ;
BTFSC STATUS,0;ЕСЛИ РАВНО,
CLRF EDY ;ОБНУЛИМ.
BSF STATUS,6;БАНК 2.
CLRF EEADR ;НУЛЕВОЙ АДРЕС.
BCF STATUS,6;БАНК 0.
MOVLW EDY ;АДРЕС ПЕРВОЙ ЗАПИСИ В EEDATA.
MOVWF TEMP ;ВО ВРЕМЕННЫЙ РЕГИСТР.
CALL ZAPIS ;СОХРАНИМ УСТАНОВКУ.
GOTO PERE ;НА ПЕРЕКОДИРОВКУ.
YCT1
INCF DEY,1 ;РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 ;
SUBWF DEY,0 ;
BTFSC STATUS,0;
CLRF DEY ;ОБНУЛИМ.
BSF STATUS,6;БАНК 2.
MOVLW .1 ;
MOVWF EEADR ;НУЛЕВОЙ АДРЕС.
BCF STATUS,6;БАНК 0.
MOVLW DEY ;АДРЕС ПЕРВОЙ ЗАПИСИ В EEDATA.
MOVWF TEMP ;ВО ВРЕМЕННЫЙ РЕГИСТР.
CALL ZAPIS ;СОХРАНИМ УСТАНОВКУ.
GOTO PERE ;НА ПЕРЕКОДИРОВКУ.
YCT2
INCF COY,1 ;РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 ;
SUBWF COY,0 ;
BTFSC STATUS,0;
CLRF COY ;ОБНУЛИМ.
BSF STATUS,6;БАНК 2.
MOVLW 2 ;
MOVWF EEADR ;АДРЕС.
BCF STATUS,6;БАНК 0.
MOVLW COY ;АДРЕС ЗАПИСИ В EEDATA.
MOVWF TEMP ;ВО ВРЕМЕННЫЙ РЕГИСТР.
CALL ZAPIS ;СОХРАНИМ УСТАНОВКУ.
GOTO PERE ;НА ПЕРЕКОДИРОВКУ.
YCT3
BTFSC FLAG1,0 ;ЕСЛИ ЗАЩИТА БЫЛА ВЫКЛЮЧЕНА,
GOTO $+7 ;ПОЙДЕМ ВКЛЮЧАТЬ.
BSF FLAG1,0 ;ИНАЧЕ - ВЫКЛЮЧИМ ЗАЩИТУ.
MOVLW .13 ;БУКВА СВЕРХУ.
MOVWF ZTI ;
MOVLW .15 ;У - ВЫКЛЮЧЕНА.
MOVWF ZYTI ;
GOTO YCI ;ПЕРЕЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
BCF FLAG1,0 ;ВКЛЮЧИМ ЗАЩИТУ.
MOVLW .11 ;БУКВА ВНИЗУ.
MOVWF ZTI ;
MOVLW .12 ;У - ВКЛЮЧЕНА.
MOVWF ZYTI ;
GOTO YCI ;ПЕРЕЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
YCT4
INCF EDYU,1 ;РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 ;
SUBWF EDYU,0 ;
BTFSC STATUS,0;
CLRF EDYU ;ОБНУЛИМ.
BSF STATUS,6;БАНК 2.
MOVLW 5 ;
MOVWF EEADR ;АДРЕС.
BCF STATUS,6;БАНК 0.
MOVLW EDYU ;АДРЕС ЗАПИСИ В EEDATA.
MOVWF TEMP ;ВО ВРЕМЕННЫЙ РЕГИСТР.
CALL ZAPIS ;СОХРАНИМ УСТАНОВКУ.
GOTO PEREU ;НА ПЕРЕКОДИРОВКУ.
YCT5
INCF DEYU,1 ;РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 ;
SUBWF DEYU,0 ;
BTFSC STATUS,0;
CLRF DEYU ;ОБНУЛИМ.
BSF STATUS,6;БАНК 2.
MOVLW 6 ;
MOVWF EEADR ;АДРЕС.
BCF STATUS,6;БАНК 0.
MOVLW DEYU ;АДРЕС ЗАПИСИ В EEDATA.
MOVWF TEMP ;ВО ВРЕМЕННЫЙ РЕГИСТР.
CALL ZAPIS ;СОХРАНИМ УСТАНОВКУ.
GOTO PEREU ;НА ПЕРЕКОДИРОВКУ.
YCT6
INCF COYU,1 ;РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 5.
MOVLW .5 ;
SUBWF COYU,0 ;
BTFSC STATUS,0;
CLRF COYU ;ОБНУЛИМ.
BSF STATUS,6;БАНК 2.
MOVLW 7 ;
MOVWF EEADR ;АДРЕС.
BCF STATUS,6;БАНК 0.
MOVLW COYU ;АДРЕС ЗАПИСИ В EEDATA.
MOVWF TEMP ;ВО ВРЕМЕННЫЙ РЕГИСТР.
CALL ZAPIS ;СОХРАНИМ УСТАНОВКУ.
GOTO PEREU ;НА ПЕРЕКОДИРОВКУ.
YCT7
BTFSC FLAG1,1 ;ЕСЛИ ЗАЩИТА БЫЛА ВЫКЛЮЧЕНА,
GOTO $+7 ;ПОЙДЕМ ВКЛЮЧАТЬ.
BSF FLAG1,1 ;ИНАЧЕ - ВЫКЛЮЧИМ ЗАЩИТУ.
MOVLW .14 ;БУКВА СВЕРХУ.
MOVWF ZTU ;
MOVLW .15 ;У - ВЫКЛЮЧЕНА.
MOVWF ZYTU ;
GOTO YCI ;В РЕГИСТРЫ ИНДИКАЦИИ.
BCF FLAG1,1 ;ВКЛЮЧИМ ЗАЩИТУ.
MOVLW .10 ;БУКВА ВНИЗУ.
MOVWF ZTU ;
MOVLW .12 ;У - ВКЛЮЧЕНА.
MOVWF ZYTU ;
YCI
MOVFW ZYTI ;ИНДИКАЦИЯ БУКВЫ
MOVWF TUI ;У ПРИ ИНДИКАЦИИ ТОКА
MOVFW ZYTU ;
MOVWF TUU ;И НАПРЯЖЕНИЯ.
RETURN ;
;========================================================
; 13. ПЕРЕВОД 3 РАЗРЯДОВ 2_10 В 16 РАЗРЯДОВ ДВОИЧНОГО.
;========================================================
PERE
CLRF YCTH ;ОЧИСТИМ ДВОИЧНЫЕ РЕГИСТРЫ.
CLRF YCTL ;
MOVFW DEY ;ПЕРЕКОДИРУЕМ ДЕСЯТКИ.
CALL EDUNI ;
ADDWF YCTL,1 ;ПРИБАВИМ В МЛАДШИЙ РЕГИСТР.
MOVFW EDY ;ПРИБАВИМ ЕДИНИЦЫ.
ADDWF YCTL,1 ;
TSTF COY ;ЕСЛИ СОТНИ РАВНЫ НУЛЮ,
BZ $+9 ;ТО ПЕРЕКОДИРОВКИ НЕТ.
MOVFW COY ;ИНАЧЕ ПРИБАВЛЯЕМ
MOVWF TEMP ;В МЛАДШИЙ РЕГИСТР
MOVLW .100 ;ЧИСЛО СОТЕН,
ADDWF YCTL,1 ;РАВНЫХ ЧИСЛУ В РЕГИСТРЕ СОТЕН.
BTFSC STATUS,0;ЕСЛИ ПЕРЕПОЛНЕНИЕ,
INCF YCTH,1 ;ТО ИНКРЕМЕНТИРУЕМ СТАРШИЙ РЕГИСТР.
DECFSZ TEMP,1 ;ЕСЛИ ЕЩЕ НЕ НОЛЬ,
GOTO $-5 ;ПОВТОРИМ.
BSF STATUS,6;БАНК 2.
MOVLW 3 ;
MOVWF EEADR ;АДРЕС ЗАПИСИ МЛ. РЕГИСТРА.
BCF STATUS,6;БАНК 0.
MOVLW YCTL ;АДРЕС ЗАПИСИ В EEDATA.
MOVWF TEMP ;ВО ВРЕМЕННЫЙ РЕГИСТР.
CALL ZAPIS ;ЗАПИШЕМ В ПАМЯТЬ.
BSF STATUS,6;БАНК 2.
MOVLW 4 ;
MOVWF EEADR ;АДРЕС ЗАПИСИ СТ. РЕГИСТРА.
BCF STATUS,6;БАНК 0.
MOVLW YCTH ;АДРЕ