AVR краткий курс начинающим "с нуля" - avr123.nm.ru - обновлен.
Версия для печати

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

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

avr123.nm.ru, 03.03.2006 02:10
Я сделал новую версию краткого курса avr123.nm.ru для начинающих
осваивать МК AVR ATmega.

Большое внимание уделил разъяснению что такое МК и как
он общается с внешним миром.

Жду вопросов по курсу и по МК. Постараюсь ответить.

Добавление от 03.03.2006 08:55:

Кастати вы можете скачать курс одним файлом!

и FAQ тоже.

Но он-лайн всегда свеже!

1. Pyku_He_oTTyda, 03.03.2006 09:15
Я понимаю, что за всем не успеть, но свежий ICC (7.03) уже ругается на "putchar" в третьей задаче.
А качать старый как то не хочется. Будет изменение по этому поводу и когда?

З.Ы. А так очень полезные уроки! Спасибо огромное!

2. Chudik, 03.03.2006 11:32
avr123.nm.ru
Когда будет краткий курс по ARM?

3. avr123.nm.ru, 03.03.2006 12:37
Не буду обещать чтоб не обманывать, но сам я щас увлекся САМомо от Atmel - курс надеюсь будет.

а пока начните с caxapa.ru там есть все для старта.

Добавление от 04.03.2006 02:48:

Обновил страницу-рассказ о малой толике языка Си достаточной для МК

http://avr123.nm.ru/05.htm

4. Djudik, 06.03.2006 10:31
Во блин! бывает же так. Вчера прочитал половину, сделал 3 задачи и в симуляторе уже запустил проги на МК, потом сам еще поменял в них кое что и все работает как хочу.

Спасибо за курс. Коротко и по существу.

5. avr123.nm.ru, 07.03.2006 08:13
Да бывает и так.

6. USER, 07.03.2006 19:40
avr123.nm.ru
http://avr123.nm.ru/mkkurs01.htm

- Установленый в директорию по умолчанию (C:\ICC) компилятор ImageCraft

http://avr123.nm.ru/www.imagecraft.com/

7. avr123.nm.ru, 08.03.2006 02:26
Спасибо! со временем поменяю. Но линк понятен.

========

Кстати курс можно не читать а послушать !

с помощию программ читалок текстов !

Например -

Говорилка
http://www.vector-ski.ru/vecs/govorilka/index.htm

или Digalo
http://www.digalo.com/

Мне понравилось.

8. joptpd, 08.03.2006 09:21
тогда может быть тебе лучше будет сделать видео курс
например как работать с отладчиком
есть такие проги которые могут писать с екрана
причем размер файла там совсем небольшой и нет искажений как мпег4
например camtasia

9. GVAR, 08.03.2006 09:28
а для того чтоб читать этот курс и начать работать с микроконтроллерами , предварительно каков необходим минимальный багаж знаний?
что надо выучить - двоичную систему а далее.........................

10. avr123.nm.ru, 08.03.2006 11:07
цитата ("joptpd"):

тогда может быть тебе лучше будет сделать видео курс

Да так сделана страничка проектов одного китайца в америке, очень наглядно.

Но я пока только аудио курс планирую на DVD + архив 3 Гб накопленого мной по теме МК и электроники.

цитата ("GVAR"):

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

Нужны знания как применять обычные микросхемы и электронику, а МК просто программируемая микруха.

Еще нужно понимать что делаешь.

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

11. Dimonij, 08.03.2006 23:37
С сайта автора темы прошел по ссылкам, нарыл паскаль для пиков, счастлив безмерно (ну привык я к паскалю) avr123.nm.ru - респект и уважуха!!!

14. Andrius, 11.03.2006 20:55
avr123.nm.ru
В Язык Си для МК, в подразделе Структура программы на языке Си написано:
цитата:
Иногда п.6 это прототипы функций, а сами функции описываются полностью в п.8
Но этого самого, восьмого пункта, в документе нет вообще.

15. avr123.nm.ru, 12.03.2006 05:34
Дак если пунктом 6 появляются прототипы функций, то сами функции (которые щас пунктом 6 идут) перемещаются в пункт 8.

так как я не пишу прототипы (они не обязательны, а просто удобны в больших программах) то у меня всего 7 пунктов и 8 соответственно нет !

==

всеравно: Спасибо за внимательность и фидбэк.

==


USB программатор для AVR - сделан на ATmega8 - довольно простой

http://www.fischl.de/usbasp/

16. Djudik, 13.03.2006 10:47
Я сделал его, работает прекрасно на ATmega16 и 128

17. avr123.nm.ru, 13.03.2006 10:51
цитата ("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 };





=======

цитата ("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 }


Чёт не впечатляет после этого КодВижн.

==============

Странное какое-то сравнение!

IAR'у дали :

DDRB |= ( 1 << 4 ); - этот сдвиг уже сам препроцессор сделает !

а CVAVR'у дали :

DDRB |= ( 1 << PINB.1 );


Этож разные вещи !

========

Я вообще против сравнения кода, я за выбор компиялтора
по удобсту для каждого конкретного юзера.

========

А если уж сравнивать то на проектах не меньше 50% флаши МК - при меньших это лишено смысла.

Какая мне разница какой будет занят объем памяти 5% или 20% - ведь в этом случае очевидно МК выбран по колич. ног или по его "железу".

А особо скоросные участки полюбому принято на АСМе вставлять либо частоту поднимать.

18. Dikoy, 13.03.2006 16:08
avr123.nm.ru
Ну... Ты меня и Tahoe перепутал малёхо...
А во вторых, когда вижну дали DDRB |= ( 1 << 4 ); , он вообще одну строчку сгенерил, SBI

19. Dimonij, 13.03.2006 22:22
Проживающие в Кировском районе Петербурга могли сегодня вечером слышать радостный рев носорога - это был я наваял на паскале простенькую прогу цифрового 2-х порогового компаратора, засунул в пик - все с первой попытки завелось давно такого удовольствия не получал! платку отладочную дольше паял, чем писал прогу. аж сам офигел! хоссподи, как я щастлив, что не надо самому больше регистровые банки переключать! (программатор - понипрог, в варианте пик-онли)

20. spliner, 13.03.2006 22:29
Dimonij. Ну так осталось дать ссылку по-явнее на Паскалевский компилер для PIC-ков..
И.. Это - смотрим на название темы.. И для AVR-ов.

21. Dimonij, 14.03.2006 08:31
spliner

Ну так осталось дать ссыку по-явнее на Паскалевский компилер для PIC-ков..
И.. Это - смотрим на название темы.. И для AVR-ов.

не вопрос: http://www.mikroelektronika.co.yu/english/download/ ну и сцылки на сайте автора темы изучаем очень внимательно

22. Alexandr Iz, 14.03.2006 13:31
avr123.nm.ru
Шикарный курс! Граматно написано.
Давно на него смотрел всё, порывался перейти на C с асма...
Вчера-таки перешёл

Только не нравятся мне встроенные в CodeVision библиотеки для работы со стандартными устройствами типа lcd, rtc, i2c. При переходе на другой компилятор, как быть с библиотеками?
Такое ощущение, что проще и нагляднее самому написать.

23. avr123.nm.ru, 14.03.2006 15:39
цитата:
Dikoy:
avr123.nm.ru
Ну... Ты меня и Tahoe перепутал малёхо...
А во вторых, когда вижну дали DDRB |= ( 1 << 4 ); , он вообще одну строчку сгенерил, SBI

Извини что перепутал.

А я за CVAVR (уже более 3-х лет на нем пишу) и заступался
сообщая что разный код взяли для сравнения с IAR.

24. Tahoe, 14.03.2006 16:18
avr123.nm.ru
Ты не понял. Либо твой любимый CV, судя по приведённому фрагменту, забыл rjmp сгенерить, либо не весь код был приведён.
Помогите начать работать с микроконтроллерами., #943 (http://forum.ixbt.com/topic.cgi?id=48:1119:943#943)

А насчёт "некорректного сравнения" - по-моему уже давно понятно, почему произошла ошибка.

25. Dikoy, 15.03.2006 18:09
Tahoe
Вопрос стоял не в rjmp, а в sbi, вот я и не стал приводить весь код. Вот полный цикл:
код:

;>>> 122 while (1)
_0x3:
;>>> 123 {
;>>> 124 // Place your code here
;>>> 125 DDRB |= ( 1 << 4 );
SBI 0x4,4
;>>> 126 };
RJMP _0x3
;>>> 127 }


Могу весь листинг выложить

26. plant, 03.04.2006 08:22
[b]avr123.nm.ru [/b
Счетчик Т1 ATMEGA8 не формирует прерывание по захвату, если захват инициирован сигналом
компаратора.Все дело симулируется в Протеусе. В чем я ошибаюсь?

27. DrAG0n, 03.04.2006 09:02
автоперевод с транслита:
Что-то сайт перестал работать... Открыwается странитса неwмаил.ру...

28. avr123.nm.ru, 18.04.2006 11:58
Сделал заголовок определения всех битов
для Mega8 -16 -32 -64 -128

для компилятора CodeVisionAVR только !

http://forums.airbase.ru/index.php?action=dlattach;t…888.0;attach=8380

В Компиляторах ICC, WinAVR и IAR определение номеров
всех битов прописаны в заголовочных файлах для каждого МК.

=================================================
Включение этого файла позволяет использовать
примеры на Си из ДатаШита МК - это очень удобно.

Можно просто и удобно создавать маски сразу на несколь
бит используя названия бит по ДШ а не их номера.

например так:

if ((UCSRA & ((1<<FE) | (1<<PE) | (1<<OVR)))==0)
{
Этот код будет выполнятся если данные приняты
на USART без ошибок детектируемых "железом".
};

=================================================

Сделан файл на основании заголовков
компилятора ICC по ДШ на 2004/12/19

Поместите m8_128.h в папку CVAVR\inc

И используйте после стандартного
заголовочного файла для используемеого МК:

#include <mega16.h>

#include <m8_128.h>

=================================================
Об ошибках сообщите E-mail me to mail.ru for bbigmak

29. avr123.nm.ru, 25.06.2006 00:15
Чтобы убрать пестроту оформления курса зайдите в меню обозревателя : Сервис -> свойства обозревателя -> общие -> оформление и активируйте 3 верхних чекбокса. Подтвердите изменения. Теперь пестроты не будет.

Кстати многие ресурсы интернет смотрятся интереснее в таком режиме !

===========

24-06-2006 я обновил и архив RAR с курсом для скачивания. 1.9 Мб

30. K_AV, 25.06.2006 11:13
avr123.nm.ru
"Чтобы убрать пестроту оформления курса" нужно переоформить курс. У меня, например, твои советы по "обозревателю" не пройдут, т.к. не IE, нужные изменения делаются иначе. Но, как уже писали, пестрота неприятна, но она - не главное, на содержание не влияет.

31. Qwertty, 25.06.2006 17:13
Сравнение компиляторов - http://www.atmanecl.net/EnglishSite/CCCE.htm
Как ни странно CV оказывается лучше чем IAR, WinAVR и др. Там два теста, условия равные для всех!!!

32. DrAG0n, 25.06.2006 17:35
там даже оптимизацию не включили.... судя по всему. Чисто дефолтовые установки.

33. avr123.nm.ru, 25.06.2006 18:03
Ссылка на этот тест есть конечно в курсе.

Я думаю мой любимый CVAVR создает код раза в 2 больше чем IAR или WinGCC - но люблю я его за удобство работы !

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

34. Qwertty, 25.06.2006 18:37
DrAG0n
Все там есть. По крайней мере для WinAvr и CV. Другие не проверял, но там не идиоты сидят и ИМХО знают как сравнить.

35. avr123.nm.ru, 25.06.2006 19:39
На электрониксе обсуждали этот тест и у них получились такие размеры: на IAR по моему 110 у GCC с ключем -O2 130 а вот CVAVR выдал примерно 240.

Только я не очень им доверяю потому что просил опубликовать настройки и .hex - но не дождался.

36. Qwertty, 25.06.2006 20:08
цитата:
avr123.nm.ru:
На электрониксе обсуждали этот тест и у них получились такие размеры: на IAR по моему 110 у GCC с ключем -O2 130 а вот CVAVR выдал примерно 240.

Только я не очень им доверяю потому что просил опубликовать настройки и .hex - но не дождался.

Какой из двух?

Те кто делал этот тест выпускают IDE для GCC, причем платную. Зачем им приводить такой тест, в котором GCC явно проигрывает CV? Видимо от избытка честности Если бы включение оптимизации изменило бы итоговые результаты, то в табличке были бы совсем другие цифры. В общем пользуйтесь CV - совсем не плохой компилятор, правда с отладкой внутрисхемной у него туго. А Протеус очень поздно поддерживает новые кристаллы, так что он не панацея.

37. avr123.nm.ru, 25.06.2006 21:08
но ведь можно задуматься ПОЧЕМУ поздно ? Я думаю просто это не требуется потому что большинство сидят на "провереных" мегах и МК других семейств.

это конечно ИМХО.

Добавление от 25.06.2006 21:15:

=======

Зато в PROTEUS есть уникальные модели! IDE HDD карты памяти MMC CD CF прямой конект к РЕАЛЬНЫМ ! COM и LPT портам.

38. Donetsk, 29.06.2006 18:53
а как можно одним махом скачать самоучитель?
честно говоря так читать невозможно - больно пёстро!

39. avr123.nm.ru, 29.06.2006 23:56
как убрать пестроту написано на заглавной и на первой страницах курса.

линк на скачку всего курса (1.9 Мб примерно) в верхней части первой страницы avr123.nm.ru/01.htm

40. joptpd, 30.06.2006 08:18
а кто выпускает иде для гцц?
атман авр?
больше ничего нет да и атман етот тоже какая то поделка студентов
надо нечто простое как протеус и мощное как авр студия
вмлаб тупой и кривой
пока соединиш там то уже и писать код лень
жк там тормозит конкретно

41. avr123.nm.ru, 30.06.2006 11:03
Зачем вы так плохо о чужом труде ! некрасиво...

Тем более VMLAB бесплатный, и ИМХО вовсе не кривой а очень удобный.

Атман кстати имеет мастер начального кода - очень хороший.

42. joptpd, 30.06.2006 17:08
avr123.nm.ru
Зачем вы так плохо о чужом труде ! некрасиво...
почему бы не покритиковать?

КОГДА СОФТ СПЕЛЫЙ, ЕГО КАЖДАЯ СВИНЬЯ ПОЮЗАЕТ (ц)

вмлаб платный
VMLAB needs a License File, (extension .LIC) to obtain full functionality, otherwise, the simulation will show a time limitation (max 50K CPU cycles), in the following cases:

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

библиотек для работы с жк и прочими стандартными штуками не сделают
генератора кода нет
жиденький редактор
тупой мейкфайл

ун разве ето может претендовать на инструмент разработки?
вон чего тока стоит конфигуратор железа от иар
правда я там тож не нашел либ для индикаторов

43. avr123.nm.ru, 30.06.2006 20:27
цитата:
joptpd:
avr123.nm.ru
Зачем вы так плохо о чужом труде ! некрасиво...
вмлаб платный

VMLAB needs a License File, (extension .LIC) to obtain full functionality, otherwise, the simulation will show a time limitation (max 50K CPU cycles), in the following cases:

====
а вы в курсе что американцы давеча на луну высадились !?

==== PS - читайте свежие новости ! http://amctools.com/

цитата:
joptpd:
чего тока стоит конфигуратор железа от иар
правда я там тож не нашел либ для индикаторов [/q]

====
юзайте CVAVR у него все есть: avr123.nm.ru/z1.htm

44. joptpd, 01.07.2006 08:55
CVAVR он же вроде большой код генерит
или как там щас дело обстоит с оптимизацией?

45. avr123.nm.ru, 01.07.2006 10:08
Да по разному на разных примерах. Где больше чем IAR в 2 раза а где и меньше.

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

46. mamochka, 03.08.2006 22:32
Читателям курса сообщаю что в библиотеке книг для скачивания и чтения появилась книга:

Программирование на языке С для AVR и PIC микроконтроллеров. Шпак Ю.А.
МК-Пресс, Киев, 2006, 400стр. ил.

Мне понравилась.

Кроме того рекомендую обратить внимание на книгу:

Евстифеев А.В.
Микроконтроллеры AVR семейства Classic фирмы Atmel.
III-е издание, стереотипное
Москва, Додэка-XXI, 2006, 228 стр.

47. Mosfet, 04.08.2006 00:09
Здравствуйте!
Столкнулся с проблемой программирования "фузов" , в ATMega88 с помощью JTAG ICE mk-II.
Конфигурационные биты вроде бы записываются, но при попытке верификации выдается сообщение о проблеме с частотой SPI (должна быть 1/4 от тактовой). Записаноое и прочитанное значения конфигурационных байтов не совпадают. Мало того, если прочесть значения фузов несколько раз подряд, то прочитанные значения, в большинстве случаев, оказываются разными. Неисправность микроконтроллера маловероятна, так как при работе с двумя МК проблема имела место в обеих случаях, а отладка по Debug-WIRE и программирование FLASH происходили нормально.
Изминения частоты в меню "Board" результатов не дали. Попытки программирования "фузов" предпринимальсь после переведения МК в режим программирования по SPI. Подскажите, пожалуйста, в чём может быть причина?
Заранее благодарен.
С уважением Виктор г. Киев. mossfet@yandex.ru

48. smr, 04.08.2006 00:21
mamochka
где эта библиотека?

49. Chudik, 04.08.2006 00:39
smr
где эта библиотека?
А ты зайди на сайт, прошерсти всё и где-нибудь в углу найдёшь

50. mamochka, 04.08.2006 00:45
цитата:
smr:
mamochka
где эта библиотека?


на заглавной странице курса линк :

цитата:
- Книги по AVR и электронике вообще <- ЧИТАТЬ !!!

и еще на каждой странице курса.

адрес курса в названии этого топика.

Добавление от 04.08.2006 00:48:

цитата:
Chudik:
smr
где эта библиотека?
А ты зайди на сайт, прошерсти всё и где-нибудь в углу найдёшь

нет, достаточно зайти на сайт, выбрать меню "правка" -> "найти на этой странице" или Ctrl + F и ввести искомое слово.

В данном случае слово: "книг"

В других браузерах есть аналогичные функции.

51. kirich, 04.08.2006 00:49
mamochka
А не проще было дать линк на книгу, типа ввв.авр123\даунлоад\книга.зип ?

Добавление от 04.08.2006 00:55:

mamochka
на заглавной странице курса линк :
А зачем заходить на заглавную страницу, если книги не на АВР123, а на lord-n.narod.ru
А, понятно, так люди просто скачали бы книгу, а так еще предлагается бесплатная игра, найди линк на книгу.

Добавление от 04.08.2006 01:01:

Ждал, ждал, пока на народе откроется страничка со ссылкой на книгу, так и не дождался.
Если кому интересно, то я решил выложить прямые линки на эту книгу.

http://slil.ru/22955074
http://rapidshare.de/files/27144815/000947.rar.html
http://rapidshare.de/files/16654264/CCS_PCWH_3.249_a…regfiles.rar.html - компилятор CCS-PICC для изучения

52. mamochka, 04.08.2006 01:05
цитата:
kirich:
mamochka
А не проще было дать линк на книгу, типа ввв.авр123\даунлоад\книга.зип ?

я в курсе авторские права не нарушаю, у меня ни чего не хранится.

цитата:
kirich: Если кому интересно, то я решил выложить прямые линки на эту книгу.

я думаю что правила форума запрещают выкладывать такие линки.

Добавление от 04.08.2006 01:08:

===
из правил форума:

... и всего прочего, что попадает под действие УК РФ.

Особо обращаем внимание, что запрещены обсуждения нелицензионного программного обеспечения (т.н. warez'а), поиск и

помещение ссылок на него.

53. kirich, 04.08.2006 01:11
mamochka
я думаю
А не надо думать, можно просто прочитать правила.
Я что то не помню, что есть запрет на выкладывание ссылок на рапидшаре и слил.ру, если бы был запрет, то ссылка исказилась бы.

54. mamochka, 04.08.2006 01:15
цитата:
Mosfet:
Здравствуйте!
Столкнулся с проблемой программирования "фузов" , в ATMega88 с помощью JTAG ICE mk-II.

Я не работал с этим МК и инструментом, я программирую "5-ю проводками" или AVR-ISP из компилятора CVAVR.

Советую задать ваш вопрос еще и в конфе:
http://telesys.ru/wwwboards/mcontrol/index.shtml

В ожидании ответа перепроверте соединения и настройки ПО.

55. kirich, 04.08.2006 01:15
mamochka
нет, достаточно зайти на сайт, выбрать меню "правка" -> "найти на этой странице" или Ctrl + F и ввести искомое слово.
Нда, я попробовал, советую ради интереса попробовать сделать это остальным, смена оформления страничек это детский лепет, тут самая натуральная пошаговая стратегия - найди нужную книгу.

Описываю.
Попадаем на сайт авр123, потом находим в тексте линк на библиотеку, там открываем рубрику Книги и софт с Walla.com, упс, книги там нет (о том что на Украине скорость связи с народом часто не более 400 байт\сек я вообще сначала молчал), решил сходить по линку - Климатическая техника, литература, информация, софт, остальные линки вообще не по теме, аналогично, поиск по фамилии автора - Шпак, ничего не дал.
Зато я побывал на АВР123, lord-n.narod.ru, Walla.com и Lib.ru.
Прикольная экскурсия по просторам рунета.

56. mamochka, 04.08.2006 01:23
цитата:
kirich:
mamochka
нет, достаточно зайти на сайт, выбрать меню "правка" -> "найти на этой странице" или Ctrl + F и ввести искомое слово.

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

я щас попробовал и указаный линк первым находится.

Добавление от 04.08.2006 01:24:

цитата:
kirich:
Я что то не помню, что есть запрет

это модератор пусть решает.

57. kirich, 04.08.2006 01:31
mamochka
это модератор пусть решает.
Насколько я знаю, линки которые я выложил, ничему не противоречат, а вот вырезка из правил -однако считается нарушением, если Вы умышленно даёте ссылку на свой ресурс (домашнюю страничку), на котором такой информации нет которая явно противоречит в данном случае.

58. mamochka, 04.08.2006 01:46
цитата:
kirich:
а вот вырезка из правил -однако считается нарушением, если Вы умышленно даёте ссылку на свой ресурс (домашнюю страничку), на котором такой информации нет которая явно противоречит в данном случае.

я ссылку на ресурс не давал !!! у вас глюки наверно.

почитайте внимательно (написано 03.08.2006 22:32)

Где там ссылка ?

59. kirich, 04.08.2006 01:51
mamochka
Где там ссылка ?
А название темы не ссылка?
avr123.nm.ru: AVR краткий курс начинающим "с нуля" - avr123.nm.ru - обновлен.
Или ты думаешь что человек прочитавший о появлении книги в данной теме пойдет на рамблер.ру?

P.S.Извини, но я сам являюсь модератором, в 16 разделах, на внутрисетевом форуме, более 1000 участников и просто так не цепляюсь

60. mamochka, 04.08.2006 01:54
цитата:
kirich:
Описываю.
Попадаем на сайт авр123, потом находим в тексте линк на библиотеку, там открываем рубрику Книги и софт с Walla.com, упс, книги там нет

ВРИТЕ дальше.

книга там (по линку "Книги и софт с Walla.com") есть:

цитата:
Шпак Ю.А.
Программирование на языке С для AVR и PIC микроконтроллеров.
МК-Пресс, Киев, 2006, 400стр. ил.
часть.1 объём файла - 5'222'400 byte
часть.2 объём файла - 4'111'996 byte

и КОНЕЧНО находится по слову "шпак"

=======
В том что LordN сделал и добавил на СВОЮ страницу подборку по климатич технике моей вины УВЫ нет.

61. kirich, 04.08.2006 02:04
mamochka
и КОНЕЧНО находится по слову "шпак"
Еще раз, ради интереса загрузил вышесказанную страничку, ввел слово Шпак, а в ответ тишина.
Просмотрел глазами, тоже самое.
Есть, конечно вариант что у меня страничка не подгрузилась полностью, но она даже при нажатии - обновить, не загружается полностью, потому я и написал выше, что надо давать прямой линк, а не водить как Иван Сусанин.

62. mamochka, 04.08.2006 02:17
прямые линки на .rar с "народа" не скачаются !!!

Опять говорите не зная предмета!

63. kirich, 04.08.2006 02:19
mamochka
прямые линки на .rar с "народа" не скачаются !!!
Естественно, но они выкинут на страницу для скачивания, с которой можно загрузить файл.

Опять говорите не зная предмета!
Опять ошибка, как раз знаю.

64. smr, 04.08.2006 02:20
kirich
ты думаешь что человек прочитавший о появлении книги в данной теме пойдет на рамблер.ру - я, кстати, примерно так и поступил. Поскольку "сходи на сайт и поищи там ссылочку на другой сайт, на котором, где-то глубоко внутри зарыта ссылка на интересующий материал" - банальное неуважение своего посетителя.

65. Chudik, 04.08.2006 02:35
mamochka
я щас попробовал и указаный линк первым находится.
Какой? Находится ссылка не на рекомендуемую книгу, а на некий сайт, на котором первым делом высвечивается счётчик кликов. На сайте, в свою очередь тоже нет никакой ссылки на книгу. Только на какие-то другие сайты.


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

66. mamochka, 04.08.2006 02:59
цитата:
Chudik:
mamochka
я щас попробовал и указаный линк первым находится.
Какой?

вот этот:

цитата:

- Книги по AVR и электронике вообще <- ЧИТАТЬ !!!


Это линк на сайт
lord-n.narod.ru/index.html
на котором размещена библиотека с книгами.

В этой библиотеке появились книги о которых я сообщил.

цитата:
Chudik: на некий сайт, на котором первым делом высвечивается счётчик кликов.

У этого сайта есть хозяин и он решает что там размещать.

цитата:
Chudik: На сайте, в свою очередь тоже нет никакой ссылки на книгу.
Только на какие-то другие сайты.

не пойму вам то зачем ВРАТЬ ?

На сайте lord-n.narod.ru есть ссылка на эту книгу.

Вот она:
http://lord-n.narod.ru/walla.html#ShpakCforAVRiPIC

И ссылки там на другие СТРАНИЦЫ этого сайта, а не на другие сайты
http://lord-n.narod.ru/walla.html


цитата:
Chudik: обсуждаемый сайт поместить в чёрный список, как систему, рассчитанную на наращивание счётчиков посещений.

Браво !

67. Chudik, 04.08.2006 03:15
mamochka
У этого сайта есть хозяин и он решает что там размещать.
Безусловно. Но потакать наращиванию счётчиков двух сайтов за счёт форума я не хочу. И это моё право, как координатора форума, за порядок на котором я отвечаю.

Так и будем хвастаться своими правами.

Кроме того, указанная "библиотека" на narod.ru мало того, что имеет скорость загрузки единицы байт в сек, так ещё и страница до конца не качается вследствие этого. А на том огрызке, который скачался ссылку на книгу Шпака нет.

На сайте lord-n.narod.ru есть ссылка на эту книгу.
Вот она:
http://lord-n.narod.ru/walla.html#ShpakCforAVRiPIC


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

Браво !
Вы сами добивались этого в течение долгого времени.

68. Steve461, 04.08.2006 09:32
Chudik
Кроме того, указанная "библиотека" на narod.ru мало того, что имеет скорость загрузки единицы байт в сек, так ещё и страница до конца не качается вследствие этого. А на том огрызке, который скачался ссылку на книгу Шпака нет.

Скорей всего жто следствие "иностранности" Вашей прокси. На Россию и СНГ отдается нормально.

69. Chudik, 04.08.2006 09:41
Steve461
Скорей всего жто следствие "иностранности" Вашей прокси. На Россию и СНГ отдается нормально.
Возможно. Но исходный постулат о том, что надо пройти по цепочке, это не отменяет.

70. mamochka, 04.08.2006 10:30
цитата:
Chudik:
Кроме того, указанная "библиотека" на narod.ru мало того, что имеет скорость загрузки единицы байт в сек, так ещё и страница до конца не качается вследствие этого. А на том огрызке, который скачался ссылку на книгу Шпака нет.

Я то тут ПРИЧЕМ ??? это претензии к narod.ru

у меня качается нормально, быстро.

71. kirich, 04.08.2006 12:29
Steve461
На Россию и СНГ отдается нормально.
У многих, кого я знаю, связь с народом 400 байт\сек. (это не утрирование, и при скачивании флешгетом, и при серфинге).

mamochka
Я то тут ПРИЧЕМ ???
Непричем.

у меня качается нормально, быстро.
Ну вот и выложил бы нормальный линк, если у тебя открывается быстро, а не заставлял народ продираться сквозь дебри страничек, да еще и со счетчиками посещений.
цитата из правил - особенно, если на сайте есть рекламные баннеры и/или счётчики; т.е. если просьба явно служит для рекламных целей.

72. mamochka, 04.08.2006 12:44
цитата:
kirich:
особенно, если на сайте есть рекламные баннеры и/или счётчики; т.е. если

просьба

явно служит для рекламных целей
.
я не просил ни чего.

73. psnsergey, 04.08.2006 13:39
mamochka
я не просил ни чего.
Не верь, не бойся, не проси.

74. mamochka, 11.08.2006 13:40
вот такую схему можно использовать для усиления тока управления затвором мощного полевика.

На переходах Б-Э будет падать до 0.8 вольт по модулю. Резистор 20 - 68 Ом.

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

75. psnsergey, 11.08.2006 14:44
mamochka
А закон Ома у тебя на сайте есть?

76. pavlov, 11.08.2006 14:51
mamochka
вот такую схему можно использовать для усиления тока управления затвором мощного полевика.

На переходах Б-Э будет падать до 0.8 вольт по модулю. Резистор 20 - 68 Ом.
К сообщению приложены файлы: 1.gif


простите, но это все для пионеров

77. Xradio, 11.08.2006 15:17
mamochka
Резистор бы с эмиттеров на базы... или между затвором-истоком последующего узла.
(Чтобы затвор не болтался в некотором окне)

78. mamochka, 11.08.2006 15:21
цитата:
psnsergey:
А закон Ома у тебя на сайте есть? [/off]

есть /soglasie.htm там и Кирхгоф цитируется и курс ОТЦ в наличии ...

79. Chudik, 12.08.2006 20:27
mamochka
Кстати, вот пример, как можно и, имхо, нужно оформлять обучалки для новичков
http://www.radiokot.ru/start/mcu_fpga/avr/

Добавление от 12.08.2006 20:31:

Там же и про Протеус - http://www.radiokot.ru/start/soft/proteus/
Меньше, чем у тебя - буквально одна страничка. Но сделана она очень грамотно.

80. mamochka, 12.08.2006 21:23
цитата:
Chudik:
mamochka
Кстати, вот пример, как можно и, имхо, нужно оформлять обучалки для новичков
http://www.radiokot.ru/start/mcu_fpga/avr/


Там же и про Протеус - http://www.radiokot.ru/start/soft/proteus/

Меньше, чем у тебя - буквально одна страничка.
Но сделана она очень грамотно.

отлично! 1 страничка и все понятно ... сел и поехал !

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

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

81. Iwashka, 12.08.2006 21:50
Есть предложение!!!
При заходе в палату №48 (на страницу 48) есть актуальные темы:

new: Локальный вход в архив
new: К вопросу о замечаниях за грамотность
new: Список полезных ссылок
new: Хочу всё знать. Научите меня электронике и работе с микроконтроллерами…
new: О СУТИ ДАННОГО ФОРУМА

Давайте добавим еще одну:
Обучающие курсы по электронике.

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

82. Chudik, 12.08.2006 22:26
Вообще-то есть Список полезных ссылок. Но если кто-то соберёт в одной теме такой список исключительно по обучающим курсам и темам, то добавлю ещё объявление.
В неё же можно будет поставить ссылку и на
"Хочу всё знать. Научите меня электронике и работе с микроконтроллерами…"

83. mamochka, 12.08.2006 22:52
Iwashka
не очень приятно заходя на форум попадать на разборки

да вроде "разборки" затихли уже.

84. Iwashka, 12.08.2006 22:54
Chudik
Вообще-то есть Список полезных ссылок
Он очень большой и разносторонний, пока найдешь что надо..... Именно поэтому и ссылки в нем начали повторяться.
А здесь конкретно-тематический.

85. Xradio, 14.08.2006 18:13
А Микрочип не дремлет, молодцы! http://www.promelec.ru/news/200508103.html?200508

86. LV, 14.08.2006 18:59
новость 2005 (пятого) года...

87. mamochka, 14.08.2006 19:07
pic это здорово! http://www.piclist.com

88. STAVBORG, 16.08.2006 02:41
Народ подскажите как можно самым простым способом сэмулировать работу прого для AT90S2313,
знаю что у него нет USI, могу взять ATtiny 2313, но где взять софт для PC чтоб вывел содержимое SRAM?

89. mamochka, 16.08.2006 03:04
STAVBORG
Народ подскажите как можно самым простым способом сэмулировать работу прого для AT90S2313

рекомендую PROTEUS
PROTEUS - Краткий Курс - Самоучитель (http://forum.ixbt.com/topic.cgi?id=48:5709)

берете подходящий пример и правите "под себя"

90. Chudik, 16.08.2006 03:17
Ура, mamochka, сунул свою ссылку в тему

91. Steve461, 16.08.2006 11:06
STAVBORG
Народ подскажите как можно самым простым способом сэмулировать работу прого для AT90S2313,

А что, AVR Studio от самой Atmel уже отменяли?

92. mamochka, 16.08.2006 11:33
Steve461
А что, AVR Studio от самой Atmel уже отменяли?

Только не это !

ИМХО - уж лучше VMLAB размером 4 Mb и скучей возможностей.

93. Steve461, 16.08.2006 13:14
mamochka
Только не это !

И в чем же проблемы у "великого и могучего"?

94. mamochka, 16.08.2006 13:38
Steve461
И в чем же проблемы у "великого и могучего"?

У него нет проблем, как и у любой программы. Проблемы возникают у пользователей.

95. Steven Deathman, 16.08.2006 14:18
mamochka
Естессно есть проблемы со студией, но связаны в основном с моделированием SPI и некоторых похожих хреней. А в остальном - вперед и с песней.

96. Steve461, 16.08.2006 16:15

mamochka
У него нет проблем, как и у любой программы. Проблемы возникают у пользователей.

Очень странное изречение особенно в свете заданного STAVBORG-ом вопроса. А для того, чтобы сделать одну печатную плату Вы порекомендуете LPKF дома завести? Или единственная цель была снова упомятуть шпингалеты?

Стандартные средства разработки от Атмела -- вполне работоспособны.

97. mamochka, 16.08.2006 16:38
Нет ну кому легче скачать 45 Mb скачать чем 4 то конечно Студия!

Кому не нужен виртуальный многоканальный осцилограф тому однозначно Студия!

Если мешают кнопки, светодиоды и прочий отладочный хлам то только Студия !

Добавление от 16.08.2006 16:41:

Steve461
И в чем же проблемы у "великого и могучего"?

это не вы спросили ?

mamochka
У него нет проблем, как и у любой программы. Проблемы возникают у пользователей.

Очень странное изречение особенно в свете заданного STAVBORG-ом вопроса.


причем здесь чейто вопрос если я отвечал на ваш ?

Или единственная цель была снова упомятуть шпингалеты?

люблю умных людей.

98. Steve461, 16.08.2006 16:55
mamochka
Нет ну кому легче скачать 45 Mb скачать чем 4 то конечно Студия!

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

Не в кнопках и светодиодах счатье, а в нормальном интерфейсе, который у Студии - весьма и весьма.

Вы прекрасно знаете, что первично отвечали не на мой вопрос.
Я рад, что Вы любите людей, которые Вас окружают.

99. Chudik, 16.08.2006 19:03
На самом деле всё зависит от того, что именно надо проемулировать. Если чисто программу, то Студия безусловно будет лучше. А если чип с обвеской, то, скорее всего, Протеус.
Если бы Протеус имел бы некий интерфейс для получения данных от эмуляторов разных производителей - цены бы ему не было.
Впрочем... если он умеет читать файл, открытый другой программой на запись, то такой интерфейс вполне может дать возможность совместной работы с эмуляторами. Софт от TI для эмуляции открывает входные и выходные файлы, связанные с портами или памятью. Т.е. при записи данных в память или порт эмулятор пишет эти данные в файл.

100. mamochka, 16.08.2006 19:32
Steve461
mamochka
Нет ну кому легче скачать 45 Mb скачать чем 4 то конечно Студия!

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


Ну не всех же заклинило на ворованые программы.

А некоторые еще и слово VMLAB от PROTEUS могут отличить.

Я рекомендую VMLAB - он бесплатный.

Добавление от 16.08.2006 19:58:

Chudik
На самом деле всё зависит от того, что именно надо проемулировать. Если чисто программу, то

Студия безусловно будет лучше.


чем ? да еще "безусловно" ?

101. Chudik, 16.08.2006 20:12
mamochka
чем ? да еще "безусловно" ?
Тем, что не надо изучать новую программу, новый интерфейс, новые возможности. Студия - это рабочий инструмент с редактором, компилятором, линкером, отладчиком, в котором уже работаешь вне зависимости ни от чего.

102. mamochka, 16.08.2006 20:59
речь то шла о вопросе конкретного человека который НИ С ЧЕМ еще не работал !

уж если тратить время ему на изучение то ИМХО на изучения того что имеет больше возможностей и меньший размер для скачивания.

VMLAB в 11 раз меньше студии

а PROTEUS почти в 2 - - зато в нем можно и схемы рисовать и симулировать не только несколько МК но и плату развести потом. Да еще посмотреть 200 примеров ! Для неопытного человека это очень хорошее подспорье.

Кстати демо протеуса и БЕЗ ВОРОВСТВА скачивается с офф. сайта на 30 дней полностью рабочая только без сохранения проекта, естественно исходники програм сохраняются.

Добавление от 16.08.2006 21:09:

Chudik
Если бы Протеус имел бы некий интерфейс для получения данных от эмуляторов разных производителей - цены бы ему не было.

он и имеет.

PROTEUS и читает из файлов и пишет в файлы, и главное

ТОЛЬКО PROTEUS может в реалтайме работать с нстоящими COM и LPT портами ПК !!!

С реальным сетевым контроллером.

Просто люди не знают всех возможностей программы и при этом пытаются сравнивать.

103. LazyCamel, 17.08.2006 09:07
цитата:
mamochka:
речь то шла о вопросе конкретного человека который НИ С ЧЕМ еще не работал !
.....
а PROTEUS почти в 2 - - зато в нем можно и схемы рисовать и симулировать не только несколько МК но и плату развести потом. Да еще посмотреть 200 примеров ! Для неопытного человека это очень хорошее подспорье.
...
Просто люди не знают всех возможностей программы и при этом пытаются сравнивать.

LOL А это ничего что в протеусе модель именно AT90S2313 багованая и конкретно глючит в симуляции ?
Там вообще корректно эмулируются модели только с меги8 начиная, ИМХО

104. Donetsk, 17.08.2006 09:16
а где протеус можно скачать?

105. mamochka, 17.08.2006 09:30
Линки на заглавной странице того чему посвещена эта тема. Как пользоваться программой в похожей, известной теме.

Добавление от 17.08.2006 09:34:

Chudik
LazyCamel
А это ничего что в протеусе модель именно AT90S2313 багованая и конкретно глючит в симуляции ?

Chudik, это флуд ?

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

106. Chudik, 17.08.2006 09:37
mamochka
Нет, это константация факта, заданная ироническим способом.

107. mamochka, 17.08.2006 09:54
т.е. вы считаете "AT90S2313 багованая и конкретно глючит в симуляции" фактом ?

я считаю что факт это например: "в моделе ATmega16 не правильно работают выводы PC7 и PC6"

108. LazyCamel, 17.08.2006 10:52
mamochka

Не контролируется переполнения стека в том числе. Точнее он - не переполняется. Это то что я нашел сам.
Версия 6.7SP3.

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

С Мегой8 у меня такого не было ни разу.

ЗЫ: В связи с тем что слез на Мегу48 - Протеус лежит на полочке. Студией и VMlab продолжаю пользоваться. Симуляцию аналога теперь предпочитаю делать в Протеле.

109. mamochka, 17.08.2006 11:20
LazyCamel
Не контролируется переполнения стека в том числе. Точнее он - не переполняется.

Это то что я нашел сам.


т.е. конкретный недостаток модели

(которая и называетя МОДЕЛЬ потому что она модель и не может быть 100% копией прибора)

вы называете "AT90S2313 багованая и конкретно глючит в симуляции"

Если найдете время приведите пример проги для переполнения стека и я просимулирую в протеус.

LazyCamel
Версия 6.7SP3

дак в 5-й версии еще больше багов наверно было ...

щас модная 6.9sp4

В Студии новой тоже много багов поправлено по сравнению со старыми - это не значит что Студия плохая программа.

110. LazyCamel, 17.08.2006 11:59
цитата:
mamochka:

т.е. конкретный недостаток модели

(которая и называетя МОДЕЛЬ потому что она модель и не может быть 100% копией прибора)

вы называете "AT90S2313 багованая и конкретно глючит в симуляции"

Извините, передергивать я умею не хуже вашего, поэтому не стоит меня кошмарить на ровном месте.

Я писал дословно - "А это ничего что в протеусе модель именно AT90S2313 багованая и конкретно глючит в симуляции ?"

Не надо читать того, что не было написано. ок ?

111. mamochka, 17.08.2006 12:08
LazyCamel
Я писал дословно - "А это ничего что в протеусе модель именно AT90S2313 багованая и конкретно глючит в симуляции ?"

т.е. вы считаете что в вышем вопросе не содержится утверждения что "AT90S2313 багованая и конкретно глючит в симуляции" ?

но по-руски это именно вопрос с утверждением некоего факта.

112. Xradio, 17.08.2006 15:19
http://gallery.embedders.org/index.php?detail=avr12*…p;show_only_new=0
Хороший человек хороший табак курит...

113. mamochka, 18.08.2006 13:59
Maxim-ic.com посмешили от души ! Вчера звонят от московских дисрибов - пришли компоненты которые вы заказывали! уже 17 августа. А заказывал я аж 17 апреля. Клоуны.

И это при том что на ti.com можно заказать за раз 8 изделий по 5 штук включая ВСЕ msp430 !!! и получить не позже недели на дом.

На analog.com урезали до 6 штук в месяц но конечно регистрироваться сколько угодно можно и тоже присылают не позднее 2 недель с Филипин.

в FAQ курса я описал процедуры заказа - они очень просты и этот сервис очень удобен для макетирования.

ИМХО - Но только не MAXIM ! хотя компоненты у них великолепные.

114. Xradio, 18.08.2006 14:19
mamochka
можно заказать за раз 8 изделий по 5 штук включая ВСЕ msp430 !!! и получить не позже недели на дом.
И это все "фри сэмпл"? Что-то я не верю уже - раньше пробовал, ничего не приходило. Кроме писем на инглише... "зачем Вам?, что Вы собираетесь производить, какие коммерческие объёмы?" и т.п.

115. mamochka, 18.08.2006 14:29
Xradio
Что-то я не верю уже

это дело добровольное. темболее mamochke верить тут не принято. я потому и написал это в FAQ - ведь надо правильно обосновать заказ а не писать @мол видел схему в инте хочу спаять пришлите самый крутой msp430xxxxЭ. я не говорю что вы так писали! я просто рассуждаю на тему.

116. slava2004, 18.08.2006 14:57
Про TI не знаю, не пробывал, но Аналоговые Девицы шлют подарки исправно

117. Xradio, 18.08.2006 18:49
Я слышал про таких "коллекционеров" в нашем городе, да и в сети Рунета их немало. Что тут скажешь? - чудаки... Но изрядно подпортившие адрес: "Russia". И валяются у них без дела, не то что не нужные им, а и вообще - никак им непонятные, но именитые маркировкой "паучки". Которых, возможно, не досталось заинтересованным адресатам.
Лично я, изучив документацию, оценив свои ресурсы и окончательно определившись с выбором, заказываю дивайсы у реселлеров, и за деньги...

118. Iwashka, 18.08.2006 22:23
Xradio
Лично я, изучив документацию, оценив свои ресурсы и окончательно определившись с выбором, заказываю дивайсы у реселлеров, и за деньги
Я уже писал как-то, что заказываю только то, что нужно. И далеко не всегда что можно заказать за ФРИ.
Но если что-то идет как фри сэмпл, то не брезгую. Почему бы не взять, если они предлагают, а мне надо?
Я так думаю, что каждый заказчик у них в базе зарегистрирован и тем, кто заказывает за деньги, а потом вдруг и фри, то фри они высылают исправно. Ни разу не отказали. Правда я заказываю не более 2-х раз в год. Но все равно как-то уверен, что пришлют. Ни разу не ошибся.

119. mamochka, 19.08.2006 11:16
Фэйрчайлд высылает образцы только тем кто что-то у них уже покупал, хоть дешовенькое даже.

120. Xradio, 19.08.2006 12:31
mamochka
Давай потолкуем о возникшей ситуации с гонением отовсюду твоего курса "АVR для начала"? Сам-то как к этому относишься? Лично я остался в полном недоумении и при неприятных мыслях. На "хоботе" забанили ссылку... Если ты добивался именно этого, хотябы так - скандально, но сделать трудное дело - безвозмездно научить дураков в стране дураков, то зачем вообще писал БУКВАРЬ и самоотверженно продвигаешь?
Не доказала ли текущая позиция "один против всех!" лишь одно, прожитое всеми, включая тебя... Что наукам и знаниям люди учатся самостоятельно. И лишь те достигают их, кто искренне хочет? Остальных, ни метлой, ни железным кулаком не загонишь в "светлое будущее"... ни за какие коврижки Proteusов и а*р123нм.ру.
С этой бедой Ты один не справишься... И вот, в этом спектре... совсем непонятны ёрзания "крутейших" на абсолютно полезном, но уникально бессмыссленном твоём КУРСЕ.

Борис.

121. mamochka, 19.08.2006 13:14
я еще раз повторю - я написал курс чтоб помочь людям которые хотят начать работать с МК.

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

Я отвечаю на вопросы таким способом который считаю наиболее правильным - где можно подробно прочитать о том что спрашивают при этом я на 100% уверен в том что я сам написал у себя в курсе.

Я считаю что если спрашивают: "сколько будет 5 умножить на 6" то не стоит отвечать 30, а нужно дать линк на таблицу умножения. Спрашивающий сам решит посмотреть там ТОЛЬКО ответ или сохранить ее и выучить.

122. Iwashka, 19.08.2006 13:19
Xradio
на абсолютно полезном, но уникально бессмыссленном твоём КУРСЕ.

Мне понятки сподвижки mamochka.
Он хочет в легкой и понятной форме донести до всех жаждущих общие понятия и порядок программирования МК. Его курс расчитан для начинающих, об этом в нем так и написано.
Все дело в том, что работать с МК довольно легко, по крайней мере на любительском уровне, где не нужны сложные вычисления (гирлянды, кодовые замки, игрушки и. т.п.) и многие любители, понимая это, ищут подобные курсы. Не заканчивать же для этого ВУЗ или изучать английский для того, чтобы почитать документацию.
Лично я уважаю как подобные порывы, так и людей, занимающимся таким делом. Они никому не вредят, и несут людям информацию и знания. Каждый берет то, что ему надо. Иногда мне кажется, что некоторые профи ревнуют. Наверное боятся конкуренции. Ведь подобные курсы читают люди увлеченные и я бы сказал, одержимые. Они обычно быстро продвигаются в этом направлении наступая на пятки профи.

Что касается:
о возникшей ситуации с гонением отовсюду твоего курса "АVR для начала
То если посмотреть внимательно, мы увидим, что вначале на рекламу этого курса никто не реагировал, но потом эта реклама стала появляться с завидной регулярностью и это стало раздражать. Даже меня, относящегося с уважением к людям, занимающимся подобной деятельностью.
Дополнительную бурю эмоций вызвало оформление этого курса, который похож не на обучающий, а на развлекательный. Не серьезно.
При этом весьма объективные замечания автору встречались в штыки.
Ему не раз предлагалось сделать и в строгом техническом стиле и дать ссылку на оба типа курсов, но вместо этого, он предлагает лезть в настройки IE.

В общем мне кажется, что многих раздражает назойливость и упрямство mamochka.
А так, по другим вопросам, он дает интересные и полезные советы. В общем, если не считать конфликта из-за курса, то общение с mamochka по ряду вопросов считаю и полезным и интересным.

123. mamochka, 19.08.2006 13:26
Iwashka
общение с mamochka по некоторым вопросам бывает и полезным и интересным.

Уря-а-а-а !!!

124. Iwashka, 19.08.2006 13:34
mamochka
Твой ответ опередил меня, пока я писал, ты ответил.

Я тебе (ничего, что я на "ТЫ"?, а то многим не нравится) уже предлагал сделать курс в формате pdf.
В колонтитулах укажи свое имя и ссылку на сайт. Колонтитулы, это текст, находящийся вверху или внизу каждой страницы на уровне номера страницы.
Кстати, я еще в 90-х делал перевод документации на PIC, который потом оказался на компакт диске ТЕЛЕСИСТЕМ. Там у меня были колонтитулы с ФИО и майлом. Так я года 4 получал письма. И с вопросами и с кусками программ сопровождаемыми вопросом: "А почему это не работает?"
Понимаешь, далеко не все имеют возможность сидеть в инете. Некоторые имеют доступ только через клубы. Для них важнее скачать, распечатать и изучать. А ты им этой возможности не представляешь. И это при том, что стараешься донести его до всех. Не понятна мне здесь твоя тактика.

mamochka
Я поправил формулировку:
общение с mamochka по некоторым вопросам бывает и полезным и интересным

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

125. Xradio, 19.08.2006 13:46
mamochka
Уря-а-а-а !!!
А всё же?
Ответишь?

126. mamochka, 19.08.2006 14:12
Xradio
А всё же? Ответишь?

я ж ответил вам - вот пост: 19.08.2006 13:14

127. Iwashka, 19.08.2006 14:34
mamochka
Я отвечаю на вопросы таким способом который считаю наиболее правильным

И мнение других как я понимаю тебе безразлично.
Конкретное предложение, реально помогающее начинающим я внес (о pdf).
Больше добавить мне нечего.

128. mamochka, 19.08.2006 14:35
Iwashka
1) уже предлагал сделать курс в формате pdf.

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

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


1) У меня есть "пдф фэктори" но ПДФ пока не сделал.

2) я на КАЖДОЙ странице курса советую сохранить курс на ПК чтобы иметь возможность ОФФ-лайн искать поиском виндоус то что нужно в курсе! И на 1-й и последней страницах даны КРУПНО линки для скачивания курса одним архивом RAR. На 1-й в самом верху в разделе "как работать с курсом" Напечатать тоже можно из браузера - кликните по принтеру на верху или в меню файл печать и можно на принтер а можно в "формат майкрософт имэйджин". Можно выделить мышкой все что нужно напечатать и напечатать "только выделеное".

Добавление от 19.08.2006 14:38:

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

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

129. Iwashka, 19.08.2006 14:39
mamochka
И на 1-й и последней страницах даны КРУПНО линки для скачивания курса одним архивом RAR. На 1-й в самом верху в разделе "как работать с курсом" Напечатать тоже можно из браузера - кликните по принтеру на верху или в меню файл печать и можно на принтер

И все будет также пестро?

130. mamochka, 19.08.2006 15:48
Iwashka
И все будет также пестро?

на чб принтере нет!

131. Iwashka, 19.08.2006 16:01
mamochka
на чб принтере нет!

Ясно. Серо-черно. Все, что цветное, будет серым.
И Ты согласен, чтобы в итоге твой труд так выглядел?

132. mamochka, 19.08.2006 16:02
Ну естественно мне он нравится! я ж его добровольны выложил.

133. kirich, 19.08.2006 16:57
У меня постоянно ощущение, что mamochka-и много, т.е. он везде, и в тему и не в тему, кругом, куда ни глянь.

134. smr, 19.08.2006 19:14
mamochka
Ну естественно мне он нравится! - то, что ты пишешь лично мне показалось полезным и интересным, но стиль изложения, в частности "многоцветность" и полный хаос на страницах во многих случаях просто оттолкнет. Твой сайт было бы неплохо "причесать" по части изложения материала, убрать дублирующийся материал, а оставшемуся придать более строгий стиль.

135. STAVBORG, 19.08.2006 19:28
Народ спасибо за бурное обсуждение!!!
Но с самого начала вопрос был про ЭЭЭЭмуляляцию, то есть про софт + железо, которые
позволили хотябы изредка мониторить SRAM контроллера.
А вы обсудили СИИИмулирование, то есть я может и придираюсь к приставке но вопрос был о другом.
Лично я щас работаю с VMLABом под его же ASMом и компайлю и симулирую. И все было отлично, пока раз
за разом не стали появляться прошивки которые отлично работают на симуляторе, но контроллер после
заливки просто неадкватно висит. Постоянно менять текст и переливать софт в ожидании пока нарвешься
на BUG грузно, вот я и занялся вопросом реализации простейшего "ICEааа".Всех кто чем то подобным занимался
прошу напишите на stasgost@inbox.ru.
Повторю что в принципе меня интересует чип 2313, Tiny или 90S(если для него это возможно).

136. K_AV, 19.08.2006 19:31
Xradio
Бли-и-и-н. Тут (и в соседних ветках) уж несколько раз предлагали закончить разборки, а ты опять...
(прочий оффтоп я тут вытер. Хватит уж, наверное. Все равно без толку, похоже).

Iwashka у него же есть "весь курс - одним архивом" для тех, кто не может сидеть "on-line". Так что "твой" PDF - это просто еще один вариант. И на мой взгляд архив - лучше.

137. STAVBORG, 19.08.2006 19:39
Кстати о PROTEUSе. Скачал Demку с офиц сайта , потом с kazus.ru более старые и уже крякнутые версии и
почему-то все проги при попытке запустить симулятор пишут одно и тоже "error opening netlist LISAXXXX. "
не помню расширения файла; ХХХХ - номер для каждого проекта свой. Может кто-то и знает в чем может быть дело.

138. mamochka, 19.08.2006 19:59
STAVBORG
я щас работаю с VMLABом под его же ASMом и компайлю и симулирую. И все было отлично, пока раз
за разом не стали появляться прошивки которые отлично работают на симуляторе, но контроллер после
заливки просто неадкватно висит.


дело может быть в железе. посимулируйте hex в астудио или proteus - если там будет нормально работать то точно у вас что-то с железом.

если не трудно дайте глючный hex и схему.


одно и тоже "error opening netlist LISAXXXX. "
не помню расширения файла;


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

139. Chudik, 19.08.2006 20:01
STAVBORG
Давай мы не будем здесь обсуждать проблемы запуска крякнутых версий. Не принято, знаешь ли.

140. STAVBORG, 19.08.2006 20:04
Шью с помощью STK200 - сделал буферок с LPT. прога - плавное изменение частоты где-то с 1 Гц до 1 кГц
файл .asm вышлю вечером.

141. mamochka, 19.08.2006 20:29
и hex !

142. chuchxe, 11.09.2006 13:04
цитата:
STAVBORG:
Народ подскажите как можно самым простым способом сэмулировать работу прого для AT90S2313

Самое простое это использовать VMLAB.

143. olegboroda, 11.09.2006 15:20
цитата (kirich):
У меня постоянно ощущение, что mamochka-и много, т.е. он везде, и в тему и не в тему, кругом, куда ни глянь.
По TV "1+1" показывали "МАТРИЦУ", то когда агент Смит размножался (самокопировался), я mamochka (или AVR ОдинДваТри. чего-то там) вспомнил...
Когда его забанили, я резко выступал в его защиту. Но когда он превратился в вирус, то...

144. chuchxe, 18.09.2006 00:06
Внизу первой страницы курса: forum.ixbt.com/topic.cgi?id=48:5298
добавлена удобная система поиска аналогов отечественных и импортных транззисторов микросхем и диодов, а так же сводные таблицы с краткими параметрами.

Идеально для подбора замены в схемах.

145. Rebbe, 11.12.2006 19:02
Подскажите как адаптировать прошивку для 90s2313 для использования с тини2313 ?

146. Xradio, 11.12.2006 22:20
Наверное понадобится исходник. Вернее его коррекция с созданием нового дампа прошивки.
В аппнотах AVR озвучены отличия.

147. Abakt, 16.01.2007 16:18
Начал изучать курс. Пока делаю виртульно в симуляторе. В основном все ясно - спасибо.

Но у вас написано что таймеры в некоторых АВР могут считать до 64 Мгц - я не могу понять откуда вы это взяли ? я читал даташиты и там написано что таймеры считают максимум с частотой такта, а он вроде 24 МГц максимальный для АВР ? я не прав ?

148. Pyku_He_oTTyda, 16.01.2007 17:51
Можно тактировать от встроенного PLL генератора на 64 МГц (в некоторых есть)

149. Abakt, 16.01.2007 19:08
Да на атмеле нашел про новые ATtiny261 ATtiney461 ATtiny861 - таймеры до 64 MHz!

An internal 8-MHz RC oscillator and an on-chip PLL in these three 20-pin TinyAVR flash-microcontroller devices provides a 10-bit timer/counter at 64 MHz. The timer/counter includes three independent PWM generators and programmable dead times.
www.atmel.com

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

150. MaxVovk, 17.01.2007 04:10
Не совсем в тему, но полезно.
Пожег случайно старый заслуженный AVRISP. Народ посоветовал новый AVRDragon. Купил, штука прелестная - ISP и JTAG в оном флаконе, правда до 32kB.
Рекомендую. Ко всему прочему штука в 1.5 раза дешевле российской копии JTAGа, ну и фирменная отладка - эт фирменная отладка .

151. Abakt, 19.01.2007 19:03
MaxVovk
AVRDragon. Купил, штука прелестная - ISP и JTAG в оном флаконе, правда до 32kB.

а где купили и почем ?

152. 'Vlad', 20.01.2007 06:30
Abakt - Новая инкарнация mamochka и иже с ним?

153. Dikoy, 21.01.2007 05:25
smr
в частности "многоцветность" и полный хаос на страницах во многих случаях просто оттолкнет.
Меня лично бесит только отсутствие навигации... Зачем навязывать последовательность таким образом?.. В онлайне читать невозможно - хрен вернёшься на давно пройденную страницу, надо заново всё листать... В итоге читал исключительно в архиве.
А пестрота мне, например, побоку. Хоть и выглядит несколько эээ... Чудновато

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

'Vlad'
Новая инкарнация mamochka и иже с ним?
Посмотрим по количеству ссылок на 123

154. MaxVovk, 21.01.2007 13:14
Abakt
Купил в Терраэлектроника. Вообще ехал за жтагом олимексовским, но сходу запал на дракона, и не ошибся. Стоил ~1900р.
А энергию mamochka да в нужных бы целях... Например написать курс для АРМа. Только не такую аляпистую, а систематизированную, желательно с открытой для добавления базой знаний...

155. Abakt, 21.01.2007 14:02
Dikoy
Меня лично бесит только отсутствие навигации...

строителя автопилота это не может не волновать !

156. Chudik, 24.01.2007 21:45
'Vlad'
Abakt - Новая инкарнация mamochka и иже с ним?
По адресу вроде бы не он... Хотя не исключено.
Последняя инкарнация была в виде реббе (или как-то так)

157. Abakt, 28.01.2007 20:49
Chudik
вот пример, как можно и, имхо, нужно оформлять обучалки для новичков
http://www.radiokot.ru/start/mcu_fpga/avr/


Да, классная обучалка ! Если новичок попробует собрать
http://www.radiokot.ru/start/mcu_fpga/avr/05/ то долго он будет пытаться прошить AVR ...

Сплошные технические ошибки по всем материалам сайта.

158. Chudik, 28.01.2007 21:18
Abakt
Сплошные технические ошибки
Я про оформление вообще-то. Думаю, авторы сайта будут благодарны за указание на ошибки.

159. Tahoe, 28.01.2007 21:25
Abakt
Сплошные технические ошибки по всем материалам сайта.
А это имеет хоть какое-то отношение к:
вот пример, как можно и, имхо, нужно оформлять обучалки для новичков
???

160. An_private, 28.01.2007 21:41
Abakt
Если новичок попробует собрать
http://www.radiokot.ru/start/mcu_fpga/avr/05/ то долго он будет пытаться прошить AVR

Э. Почему? Вроде нет там на схеме никаких ошибок.

161. Abakt, 28.01.2007 21:56
подтяжка ресета 300 ом и светодиоды повешены на линии програмирования - грамотно!
Особенно при свободе других ног.

162. An_private, 28.01.2007 22:06
Abakt
подтяжка ресета 300 ом и светодиоды повешены на линии програмирования - грамотно
Ну и что? Да, жестковато, но работать будет. В байт-бластере стоит 74hc244, у нее выходной ток порядка 30 мА, а 300 Ом при 5В это 16 мА. Так что вполне работоспособно.

163. Abakt, 28.01.2007 22:17
An_private
Так что вполне работоспособно.

В учебном материале нужно писать не так что может работать а так как правильно.

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

Или правильно как в AVR040 и AVR042 написано ?

Добавление от 28.01.2007 22:18:

И вешать светодиоды на линии программирования тоже правильно ?
в AVR040 и AVR042 по этому поводу тоже есть информация.

164. An_private, 28.01.2007 22:27
Abakt
Хм. Вроде как речь шла:
Если новичок попробует собрать
http://www.radiokot.ru/start/mcu_fpga/avr/05/ то долго он будет пытаться прошить AVR

Как выясняется прошивка работать будет, то есть результат достигнут.
А дальше человеку все равно надо будет массированно читать даташиты и аппликухи, так что разберется.
Схема неоптимальна? Да. Но для первой задачи вполне допустима.
Впрочем, по-моему, пошел сильный оффтоп. Стиль "кота" мне лично понравился. С удовольствием прочитал его несколько уроков. На AVR123 заставить себя прочитать не смог ни одного - просто в этой бесконечной каше найти полезную информацию нереально. Хотя буквально на днях разбирался с работой с LCD и такой урок там есть. В результате предпочел изучать даташит на контроллер.

165. slog2, 28.01.2007 22:34
An_private

Схема неоптимальна? Да. Но для первой задачи вполне допустима.
По моему у нее слишком много шансов стать генераторм глюков. Для первой задачи это тем более не допустимо.
А AVR123 это точно, каша, не читается.

166. Abakt, 29.01.2007 00:44
An_private
На AVR123 заставить себя прочитать не смог ни одного

В результате предпочел изучать даташит на контроллер.


ИМХО - прекрасный результат для курса: заставить человека читать даташит.

167. Tahoe, 29.01.2007 00:58
Abakt
А тебе обязательно надо "любой ценой оправдаться"?

168. Abakt, 29.01.2007 01:17
Qwertty
Все там есть. По крайней мере для WinAvr и CV

Для WinAVR маловато - очень хороший компилятор. Есть только начало работы в конце страницы 4 и оформление прерываний на странице 3. Хорошо бы и примеры были для WinAVR.

169. gouver, 29.01.2007 17:49
Прочитал курс и проделал упражнения до 8-го. Все работает. Я правда делал на макетке Олимекс а не в симуляторе. Спасибо автору все понятно. Но есть вопрос по мастеру CVAVR.

При создании программы он предлагает разместить глобальные переменные после описания обработчиков прерывания - вот так:

#include <90s8535.h>

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here

}

// Declare your global variables here

void main(void)
{

а в курсе на странице 5a.htm указана структура программы и там вначале объявляются глобальные переменные в пункте 4. А затем в пункте 5 описываются обработчики прерывания.

Как все же правильно - как мастер CVAVR делает или как у в курсе написано ?

170. slog2, 29.01.2007 18:03
gouver
Переменная должна быть определена до ее использования. Ну а дальше сам можешь решить где им быть. По моему правильнее до программы.

171. gouver, 29.01.2007 19:25
да и в курсе написано на странице "Си для МК" pid.by.ru/05a.htm - "Перед использованием переменной в Си её необходимо объявить, т.е. указать компилятору какой тип данных она может хранить и как она называется."

Почему мастер так поступает не ясно. Возможно ошибка. Я написал автору CVAVR - попросил исправить.

172. Abakt, 18.02.2007 10:23
новый CodeVision 1.25.3 можно скачать
http://www.roboforum.ru/viewtopic.htm?p=11560

Добавление от 18.02.2007 10:25:

slog2
По моему правильнее до программы.

до функции.

173. Sony_Sony, 05.03.2007 13:32
вот нашел: roboforum.ru/viewtopic.htm?t=2215

Proteus 7.1 вешел. можно скачать демо версию. в ней нет сохранения проекта или изменений.

174. An_private, 05.03.2007 13:42
очередная реинкарнация? честно говоря уже задолбал. модераторы, забаньте его наконец...

175. NITRONIX, 05.03.2007 14:27
Sony_Sony вот нашел: roboforum.ru/viewtopic.htm?t=2215
Да неужели! Случайно? Я лично тебе искренне верю!

An_private очередная реинкарнация?
Угадал! Посмотри сюда http://www.pro-radio.ru/controllers/3648/

176. Tahoe, 05.03.2007 15:11
An_private
Да ладно тебе. Я понимаю, что ранее он уже оскомину набил, своей навязчивостью. Но тут-то, его локальная тема. Пока он в её рамках держится, по мне, так пусть хоть тыщу постов напишет "123 - рулез".
К тому же, имхо, у него достаточно полезного есть ( ну или было было, давно смотрел ). Другой вопрос, что он от этого полезного сам же и отталкивает. Точнее отталкивал. Вроде сейчас поспокойнее.

177. psnsergey, 05.03.2007 15:43
Tahoe
О, с повышением!

178. An_private, 05.03.2007 15:54
psnsergey
О, с повышением!
сперва увидел повышение количества банов с 1 на 2 - подумал "ничего себе повышение" Потом уже понял о чем речь

179. Tahoe, 05.03.2007 16:41
psnsergey
На само деле имхо зря меня повысили. Мне до тебя или до spliner - как до луны.

An_private
Да я спокойно отношусь, как к тем, так и к другим "повышениям".

180. psnsergey, 06.03.2007 12:09
Tahoe
Мне до тебя или до spliner - как до луны.
Ой, не прибедняйся.

181. Alexander3, 06.03.2007 15:41
Жаль, в малочитаемой ветке. Сейчас бы комплекс неполноценности в манию величия перековали. Имхо.

182. Sony_Sony, 07.03.2007 15:06
MultiSim 10.0 - поддерживает симуляцию МК и излечен !

http://kazus.ru/forum/topics/6534.html

184. Sony_Sony, 10.03.2007 11:59
300 Mb. Не советую вам скачивать все пакеты. Я уверен - что дисассемблировать вам трудно будет - там все равно много ручной работы.

Давайте ваш проект с прошивкой и я попробую в PROTEUS запустить его.

Добавление от 10.03.2007 12:00:

Какая цель дизассемблирования у вас ???

187. Sony_Sony, 11.03.2007 12:01
КРОКОДИЛ
Хотел попросить кого нибудь из опытных програмистов переписать программу на более легкодоставаемый и более легкопрограмируемый современный камень.

Короче - если проект вас устраивает и вы сможете купить микросхемы то вот вам программатор для этого контроллера - http://arvresearch.nm.ru/lptboom/index.dhtml

190. Tahoe, 12.03.2007 03:19
КРОКОДИЛ
Кстати что обозначает - equ ?-в учебнике почемуто так и не нашел
Сокращ. от equal (http://www.lingvo.ru/lingvo/Translate.asp?LingvoAction=translate&Ln=1&words=%26%23101%3B%26%23113%3B%26%23117%3B%26%2397%3B%26%23108%3B&DoNotSave=0&text=equal&LangPara=1&B1=%CF%E5%F0%E5%E2%EE%E4)

192. Tahoe, 12.03.2007 07:11
КРОКОДИЛ
А что тут объяснять? Вроде после перевода всё и так стало ясно. Вместо загадочного "18h" далее в тексте будет использоваться более понятное "Digit0".

Согласись, что какое-нить LED=ON понятнее, чем 0x1482=22h.

193. Sony_Sony, 12.03.2007 09:05
КРОКОДИЛ
что обозначает - equ


Digit0 equ 18h

Значит "подстановка" - везде далее в тексе програмы "Digit0" написаное программистом будет заменено на число "18h" при ассемблировании.

195. Sony_Sony, 13.03.2007 09:22
В калькуляторе виндоус переключитесь в инженерный вид, выбирете 16-ричный режим и введите - 16A8 - затем переключитесь в десятичный и посмотрите.

МК то 8-ми битный - он оперирует байтами. Поэтому с большими числами приходится работать по-байтно.

Поэтому для начинающего удобней на Си писать - там обычные арифметические операции допустимы и с очень большими числами.

196. An_private, 13.03.2007 10:52
КРОКОДИЛ
Простыни принято засовывать в тег code. Тогда они не отображаются полностью и не теряют форматирования.

197. Sony_Sony, 13.03.2007 10:53
Делать нужно так - загоняешь исходник в среду разработки - MPLAB с microchip.ru например и добиваешься безошибочного ассемблирования ЭТОГО исходника.

Потом проверяешь в PROTEUS что он работает - выдает на ногах диаграмы похожие на те что в даташите на синтезатор.

=========

ТОЛЬКО ПОСЛЕ ЭТОГО - можно приступать к модификации.


Вам нужно попросить кого-то занимающегося ПИК'ами - т.е. у кого MPLAB стоит на ПК и кому это просто сделать - вам вышлют уже проект который ассемблится и вот его можно уже проверять в ПРОТЕУСе и модифицировать.

PROTEUS тоже может ассемблировать такой исходник но могут быть нюансы, так как он наверняка написан в MPLAB.

Добавление от 13.03.2007 11:34:

MPLAB

http://www.microchip.com/stellent/idcplg?IdcService=…019469&part=S

W007002

Вот я начал лабудень MPLAB IDE v7.50 Full Zipped Installation - 39 Мб качать ...
http://ww1.microchip.com/downloads/en/DeviceDoc/MP750.zip

вот эти документы инструкции советую скачать тоже:

MPLAB IDE User's Guide

MPLAB IDE Quick Chart

MPLAB IDE Quick Start Guide - "быстрый старт" типа ...

Добавление от 13.03.2007 11:43:

===

ДШ на синтезатор http://pdf1.alldatasheet.com/datasheet-pdf/view/4120…NYO/LM7001JM.html

199. An_private, 13.03.2007 12:11
КРОКОДИЛ
Они туда полностью не влазиют
Что значит не влазят? В начале ставишь code, в конце /code и все. Тогда вместо всей простыни у тебя будет отображаться только окно, в котором будет весь текст.

201. Sony_Sony, 13.03.2007 12:29
КРОКОДИЛ
-нужно чтоб хоть один раз кто нибудь расказал как это делается

Да качаю я ... качаю ...

203. Sony_Sony, 13.03.2007 13:14
Скачал MPLAB 7.50 сделал - все нормально сассемблилось.

Вонинги только о переключении банков - просто чтоб внимание уделить.

Щас попробую в PROTEUS запихнуть.

вот архив с проектом - http://slil.ru/24071301

Добавление от 13.03.2007 14:22:

==========

http://www.pology.zp.ua/har/7001_ctrl.html

204. An_private, 13.03.2007 14:44
КРОКОДИЛ
На прошлой странице nicname давал мне декомпилированную прошивку и она ролностью не поместилась
Так там около 1000 строк.

206. Sony_Sony, 13.03.2007 15:13
в архиве все.

208. nicname, 14.03.2007 07:45
КРОКОДИЛ
Проверь почту ~ 1Мбайт(+ ReAVR)!
Только тебе это не подойдёт - у тебя ведь камень ...89...51 ??? Проглядел я однако , извини ....

209. An_private, 14.03.2007 10:28
КРОКОДИЛ
константы достаточно изменить только в "шапке" программы? или за ними нужно гонятся по всей программе?
Там, где они объявлены. Они для этого и придуманы - чтобы не искать в тексте программы вхождения нужного числа, а один раз объявить в начале и все.

210. nicname, 14.03.2007 11:33
Не , по-моему его почти вручную надо дизассемблировать ....

Добавление от 14.03.2007 11:49:

цитата:
nicname:
КРОКОДИЛ
Проверь почту ~ 1Мбайт(+ ReAVR)!
Только тебе это не подойдёт - у тебя ведь камень ...89...51 ??? Проглядел я однако , извини ....
Sony_Sony
Ты уж определись , для какого-этого твоя ветка - многостаночник , блин ....

212. Sony_Sony, 14.03.2007 15:19
КРОКОДИЛ
А можешь на каком то конкретном примере обьяснить как большие числа распределяются на байты???

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

Ну и в сети полно книг по информатике и программированию.

214. Sony_Sony, 15.03.2007 08:41
Главное вежливо...

216. Sony_Sony, 16.03.2007 08:30
Побайтное отображение есть - если значть что такое байт - вот он там cvavr.nm.ru/05.htm расписан - "Различные представления числа"

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

217. K_AV, 16.03.2007 10:40
КРОКОДИЛ
Для начала забудь про байты. Есть число, которое нужно представить в двоичной системе счисления. Чем больше число - тем больше двоичных разрядов понадобится. Т.е. кол-во этих разрядов может быть любым - по потребности.
Теперь вернемся к МК. 8-разрядные МК могут оперировать с байтами (группами по 8 бит, упорядоченно записываемых от младших к старшим). Т.е. запись "твоего" числа дробится на группы по 8 бит, начиная от младших разрядов. Если кол-во бит не кратно 8 - число дополняется нулями в старших разрядах (они ведь значение числа не изменят? а правило группировки ровно по 8 бит выполнится). Вот ты и получил многобайтную запись своего исходного числа. В памяти это число размещается как несколько байт, записываемых подряд. При работе с этим числом ты должен заранее знать, из какого кол-ва байт оно состоит, и брать все эти байты одновременно и в нужной последовательности.
В твоем примере "0x16A8" - это два байта, записанных подряд "16" и "A8" (т.е. число 16-разрядное двоичное). И рассматривать их нужно вместе. 0x16A8 = 5800. В Виндовом калькуляторе (в инженерном представлении) действительно удобно переводить числа из одной системы счисления в другую.
Хочешь пример - пожалуйста: 147512 = 0h02.40.38 = B00000010.01000000.00111000
Точки я поставил условно по границам байт. Подчеркнутые нули как раз "дополнительные", введенные для выравнивания записи числа по байтам. "Незначащие" левые нули обычно не пишутся (в "калькуляторе" в том числе не отображаются).
Так понятно?

218. Sony_Sony, 16.03.2007 13:31
K_AV
упорядоченно записываемых от младших к старшим).

наоборот - мы же с лева на право пишем и читаем.

Добавление от 16.03.2007 13:33:

K_AV
два байта, записанных подряд "16" и "A8"

Что эти байты означают в десятичной и двоичной системе смотрите там - cvavr.nm.ru/05.htm - по таблице "Различные представления числа"

219. K_AV, 16.03.2007 14:34
Sony_Sony (или "Мамочка", кажется, был одно время)
Мне объяснять "Что эти байты означают в десятичной и двоичной системе смотрите там..." не нужно, я в курсе. И я на твой сайт не пойду все равно (аллергия).
Насчет "мы же с лева на право пишем и читаем" - У тебя была (да и есть еще) возможность объяснить КРОКОДИЛ то, что ему нужно - так, как ты хочешь. Он пока не удовлетворен тобой - я пишу так, как считаю нужным.

221. Бэтмэн, 16.03.2007 14:58
0b01010101 - двоичное
128 - десятичное
$48 или 0x48 - шестнадцатеричное

223. Tahoe, 16.03.2007 16:13
КРОКОДИЛ
И сразу, пока не привык, забудь такое понятие "байт". Есть понятие "слово". А уж скольких разрядное слово - дело десятое. Тот факт, что "байт" и "8-ми разрядное слово" одинаковы, ничего не меняет. Даже в 8-ми битных контроллерах используются 16-ти разрядные слова.

Не, я спрашивал могут ли в тексте исходника оказатся десятичные числа?
Да запросто. И не только "могут", но и оказываются. Компилятору вообще пофиг, какой именно системой счисления ты пользуешься. С его точки зрения "15" и "0xF" это одно и то же число. Как удобнее тебе, так и пиши.

Но вообще резковато ты к Sony_Sony.

Вот имхо лучший калькулятор ( см. вложение ).

К сообщению приложены файлы: 1.png

224. K_AV, 16.03.2007 16:30
КРОКОДИЛ
Обычно в тексте программы численные значения ты можешь писать в любой из форм (двоичной, восьмеричной, шестнадцатиричной, десятичной). Для того, чтобы компилятор не ошибся - эти формы различаются синтаксисом написания (его-то тебе Бэтмэн и привел). Некоторые компиляторы накладывают ограничения (например, "восьмеричная форма записи не применяется") - надо смотреть описание конкретного компилятора.

225. Sony_Sony, 16.03.2007 23:19
КРОКОДИЛ
я спрашивал могут ли в тексте исходника оказатся десятичные числа? в смысле до точки с запятой? в коментариях понятно любые могут быть числа, а вот в самой программе?

по линку выше, прямо над "таблицей различного представления чисел" написано:

Числа В компиляторе можно записывать в виде указанном в его Help'е !
Раздел - константы - Constants.
например - Целые числа могут быть записаны :


и примеры записи различных чисел.

КРОКОДИЛ
учебник не дает на это однозначного ответа

поэтому я и рекомендовал cvavr.nm.ru/05.htm - дело в том что однозначно может ответить только хелп компилятора или ассемблера и примеры к нему - ведь у того кто его делал могут быть свои взгляды на то что можно и нельзя.

Добавление от 16.03.2007 23:21:

K_AV
я пишу так, как считаю нужным.

я тоже

227. Sony_Sony, 17.03.2007 04:18
Вот так:
movwf Divisor_low ; 145,000/0,0125 = 11600 = 0x2D50

Возможно да. Но могут быть нарушения в работе в виде выхода за расчетный диапазон таймеров МК например. Индикатор тоже не извстно что будет показывать.

Отлаживать надо.

А автор не отвечает вАААбче ? Он мог бы прикинуть что будет.

229. Sony_Sony, 17.03.2007 04:20
КРОКОДИЛ
Ну не могу я это читать -у меня сразу раздвоение личности начинается а иногда и развосьмирение!

Я просто таблицу посмотреть предлагал - там все используемые представления байта нарисованы.

А читать то не зачем - вы ж с ПИК-ом занимаетесь.

Добавление от 17.03.2007 04:22:

КРОКОДИЛ
Правда я не совсем понял к чему относится 0х28 Или здесь еще нужно будет чтото менять в тексте программы?

movlw 0x28 ;
movwf DF ;

Это записывает число 0x28 в DF - смотрите что это ? наверно "дивижен фактор"

231. Sony_Sony, 17.03.2007 04:30
Вы все же качните книги Майка предко - там АСМ для ПИК на русском. С вашим упорством 33 инструкции ПИКа вы в миг освоите. Книги там - http://www.roboforum.ru/viewforum.htm?f=19

И делайте как Сталин с Лениным - пометки на полях вашего РАСПЕЧАТОНОГО исходника. Что значит и откуда ккуда идет.

Добавление от 17.03.2007 04:31:

КРОКОДИЛ
авторы синтезаторов ведут себя довольно странно если не сказать больше! Так как будто они изобрели лучи смерти или чтото наподобие

Ну да им все равно спасибо за труд и публикацию для повторения.

233. Tahoe, 17.03.2007 08:04
КРОКОДИЛ
для меня сейчас самое главное научится переписывать исходники
Научиться разбираться в чужих исходниках, это [условно] "высший пилотаж". Свои писАть гораздо проще. Хоть понимаешь, что делаешь.

Насчёт Асм vs Си, тут даже думать нефиг. Си, конечно. Насчёт ПИК vs AVR, особенно с учётом писАния на Си, однозначно AVR. Если есть предубеждение против Атмела, можно ещё и MSP430 глянуть. Хотя по мне, так про его "батарейность/маложрущесть" больше по инерции кричат. Особенно в свете выхода последних АВРов, с индексом "Р".

И ещё. Хоть у Атмела и похожи цифирки, AT89, АТ90, АТ91, но сами камни отличаются принципиально. Это абсолютно разные семейства. Копаться с допотопными АТ89 смысла имхо вообще никакого нет. Это мало чем будет отличаться от копания с PIC-ом.

234. K_AV, 17.03.2007 09:49
КРОКОДИЛ
"Тоесть это будет выглядеть вот так:
movlw 0x2D ;коэффициент деления частоты при передаче
movwf Divisor_low ;145,000/0,0125=11600=0x2D50
movlw 0x50 ;
movwf Divisor_high ;"

Не совсем. В значении 0x2D50 старший байт "2D", младший байт "50".
Ты при внесении их в программу поменял их местами. Сравни с исходным текстом - что на что ты меняешь.
Должно быть, видимо, так:
movlw 0x50 ;коэффициент деления частоты при передаче
movwf Divisor_low ;145,000/0,0125=11600=0x2D50
movlw 0x2D ;
movwf Divisor_high ;

236. K_AV, 17.03.2007 10:59
КРОКОДИЛ
Байты в многобайтном числе должны располагаться по порядку, младшие - правее. Менять местами нельзя , непонятно, почему ты это делаешь. Принципиально не важно, где и в каком порядке ты хранишь отдельные байты многобайтного числа. Перед использованием этого числа "в целом" ты обязан составить байты в правильном порядке (вне зависимости от того, в каком порядке они до этого где-то лежали).
В "твоем" примере просто "говорящие" имена переменных. Divisor_Low - это явно младший байт делителя, Divisor_High - старший. Соответственно, и раскладывать туда нужно "свои" значения в соответствии с назначением: младший байт "50" - на предусмотренное для него место в Divisor_Low, старший "2D" - соответственно в Divisor_High. Посмотри в исходной программе (там так и сделано), и сравни со своей.

Дополнение по более раннему вопросу:
"Правда я не совсем понял к чему относится 0х28 Или здесь еще нужно будет чтото менять в последующем тексте программы?"
В начале текста программы сделано определение "DF equ 2dh ;смещение (f-44,000 мГц)".
Если ты это смещение менять не собираешься - то и значение менять не надо.

237. Sony_Sony, 17.03.2007 11:17
K_AV
младшие - правее. Менять местами нельзя , непонятно, почему ты это делаешь.

Дак вы ж написал ему порядок как "считаете нужным" а не так как есть - вот он и запутался.

Вот вы писали:

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

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

КРОКОДИЛ
Да есть у меня эта таблица давно уже распечатанная.

Вот и посмотрите в таблице поле - "два в степени равной номеру бита"

Видите... чем левее тем "значимей" т.е. "старше" или "выше"

Запомните: Мы пишем с лева на право и сверху в низ - т.е. легко запомнить - от High к Low

239. K_AV, 17.03.2007 13:49
КРОКОДИЛ
Проверь свой почтовый ящик (указанный в инфо). Причесал немного оформление исходного текста программы, добавил немного комментариев - думаю, тебе легче разбираться будет, где что искать. Извини, на большее времени нет, с работой завал.
Закинь мне в почту схему, будет время - еще посмотрю поподробнее.

Да, судя по этому "Byt3 equ 0xA0 ;Управляющий байт LM7001 (FM, шаг 25 кГц)", в синтезатор засылается константа, определяющая в том числе и шаг частоты. Не меняя ее, ты можешь себе в своей схеме изменять что угодно, но реально шаг частоты е поменяется, ты просто отображать будешь не то, что на самом деле.

240. Sony_Sony, 17.03.2007 15:23
КРОКОДИЛ
А как АТ90С1200 -этот вроде не сильно древний?

супер и экстра древнийший.

Минимум это ATmega8 а лучше ATmega16 - их и PROTEUS и VMLAB поддерживают - проще отлаживать будет.

Добавление от 17.03.2007 15:37:

КРОКОДИЛ
в учебнике пишут что нужно избегать чисел больше 255 во избежание переполнения регистра, -или я опять полез не в тему?

в 8-ми битный регистр влезают числа от 0 до 255 - это 1 байт. Если в регистр записвать числоа больше байта то в него попадет только младший байт числа - т.к. биты с 7 до 0.

На cvavr.nm.ru/03.htm - огромный красный заголовок "Регистры МК" и все расписарено по-пунктикам.

242. Tahoe, 17.03.2007 17:23
КРОКОДИЛ
А как АТ90С1200 -этот вроде не сильно древний?
Как собсно камень - древний. Но принадлежит он к семейству "из посвежее", т.е. он всё же AVR. А ядро какое было, такое осталось. Другое дело, что в камнях посвежее и памяти побольше, и периферия поинтереснее, да и возможности лучше. Согласись, лучше взять камень, работающий в диапазоне питания 1,8 - 5 Вольт, чем просто 5-ти вольтовый. Имеющий встроеный генератор и потому запускающийся вообще без обвеса, чем камень, которому непременно нужен кварц. Ну и т.п.
Но для первых опытов вполне сгодится и 90S1200, поскольку всё равно остаёшься в рамках одного семейства ( AVR ). Единственное, что скорее всего цена будет на него заоблачная, именно потому что старый. Посмотри для начала на ATtiny2313. Это современный "родственник" 90S1200. Ну либо как Sony_Sony рекомендовал, Мега8/Мега16.

244. Dikoy, 17.03.2007 18:05
КРОКОДИЛ
Правда хороший сайт с точки зрения что ссылок много -типа что и где можно стащить
Ещё бы навигацию ему...

Tahoe
Копаться с допотопными АТ89 смысла имхо вообще никакого нет.
Да ещё и с параллельной загрузкой

А как АТ90С1200 -этот вроде не сильно древний?
Двевний и глюкной

в учебнике пишут что нужно избегать чисел больше 255 во избежание переполнения регистра, -или я опять полез не в тему?
Рависит от разрядности регистра. Она равна числу бит, которые в него влезают. Не влезшие старшие отсекаются. По этому, например, если ты совершаешь оперецию умножения с двумя 8 битными регистрами, то результат желательно копировать в 16 битный рег, т.к. он может стать больше, чем 8 бит.
Например, 125*202=25250=0х62A2 то бишь 2 байта
В Си, когда ты определяешь тип переменной, например, как int (2 байта) то под переменную резервируется это поле и далее ты можешь не волноваться.
Хотя в хорошем Си, если честно, тип вообще пофиг - компилятор сам растягивает прменную, если фиксит в программе вероятность превышения указанного лимита.

245. Tahoe, 17.03.2007 18:56
КРОКОДИЛ
вот только где бы еще раработки на них найти
Да всё предельно просто. Сначала покупаешь AVR в DIP-корпусе, что бы удобнее макетировать было. Подаёшь на него питание ( удобно от USB взять, 5 Вольт ), вешаешь на ноги питания конденсатор 0,1 мкФ. Собираешь супер-сложный программатор, состоящий из 5-ти проводков на LPT . Вот и всё. Вешаешь светодиод и пару дней играешься с ним. После этого начнёшь задавать вопросы, типа "а как прицепить LCD", "как обслужить кнопки" и "как управлять синтезатором". Собсно вот и вся твоя задача. После этого сможешь взять вообще любой синтезатор, какой захочешь. Да и LCD тоже.
Имхо через месяц ты спокойно напишешь свой синтезатор. А месяц пролетит быстро, ты и ахнуть не успеешь.

Кстати, покопайся тут: http://www.telesys.ru/electronics/projects.php?do=all для обретения уверенности.
Вот, например, для тренировки собери: http://www.telesys.ru/electronics/projects.php?do=p060 Можешь выкинуть кварц, если камень возьмёшь современный, а транзисторы заменить на биполярники. А научиться выплёвывать данные в COM-порт компа имхо будет полезно.

Добавление от 17.03.2007 18:59:

Кстати, по обозначениям. Хотя семейство и называлось раньше AT90, сейчас таких названий нет. Есть ATtiny ( эти попроще ) и ATmega ( эти понавороченнее ). Т.е. если увидишь в названии АТ90, это значит что камень, в лучщем случае, 2-3 летней давности. Ну за некоторыми исключениемя, которые тебя сейчас не интересуют. Короче, на АТ90 не смотри. Ищи ATmega или ATtiny.

246. Sony_Sony, 17.03.2007 19:31
Tahoe
Сначала покупаешь AVR в DIP-корпусе, что бы удобнее макетировать было. Подаёшь на него питание ( удобно от USB взять, 5 Вольт ), вешаешь на ноги питания конденсатор 0,1 мкФ.

Вот схема - cvavr.nm.ru/z7.htm - микросхему памяти подключать не обязательно


Tahoe
Собираешь супер-сложный программатор, состоящий из 5-ти проводков на LPT

Вот схема и описание - cvavr.nm.ru/07.htm


Tahoe
После этого начнёшь задавать вопросы, типа "а как прицепить LCD", "как обслужить кнопки"

Ответы на них в упражнениях на - cvavr.nm.ru/06.htm и в примерах к компилятору.

Добавление от 17.03.2007 19:37:

Tahoe
собери: http://www.telesys.ru/electronics/projects.php?do=p060 Можешь выкинуть кварц, если камень возьмёшь современный, а транзисторы заменить на биполярники. А научиться выплёвывать данные в COM-порт компа имхо будет полезно.

НЕ СОВЕТУЮ ! без кварца пытаться делать связь с ПК ! нагимороетесь всласть... Делайте ПРАВИЛЬНО - вто так - cvavr.nm.ru/z5.htm или как в статье.

247. Tahoe, 17.03.2007 20:31
Sony_Sony
НЕ СОВЕТУЮ ! без кварца пытаться делать связь с ПК ! нагимороетесь всласть...
Вообще никаких проблем. Допустимая погрешность UART довольно большая, а встроеный RC-генератор довольно стабильный. Там только одна потенциальная проблема, начальная калибровка генератора.

248. Sony_Sony, 17.03.2007 20:38
Tahoe
Там только одна потенциальная проблема, начальная калибровка генератора.

Я уверен что новичку легче кварц поставить чем решить эту "одну проблему".

249. An_private, 17.03.2007 20:42
Tahoe
Вообще никаких проблем. Допустимая погрешность UART довольно большая, а встроеный RC-генератор довольно стабильный
+1 Никаких проблем

Там только одна потенциальная проблема, начальная калибровка генератора.
Обычно она изначально сделана достаточно качественно, так что и не требуется.

250. Sony_Sony, 17.03.2007 21:01
An_private
Обычно она изначально сделана достаточно качественно, так что и не требуется.

Это вы сами придумали ?

251. Tahoe, 17.03.2007 22:07
Sony_Sony
Я уверен что новичку легче кварц поставить чем решить эту "одну проблему".
Согласен. Однако это же справедливо и для кварца. Его надо купить ( что б был при этом нормальный и исправный, про перепутать с керамикой я не говорю, керамика ещё лучше заведётся, но можно ошибиться с частотой ), обвесить ёмкостями, что б он завёлся. Ещё надо не лохануться с фьюзами ( думаю ты и сам знаешь, что это один из "любимых" вопросов новичков ). Так что потенциальных проблем с кварцем имхо не меньше, как минимум. А то и больше.
И ещё такой момент. Как показываетм практика, больше половины, а то и три четверти задач не требуют кварца. Ну и бонус за это - меньше стоимость, экономится место на плате.

Добавление от 17.03.2007 22:11:

КРОКОДИЛ
Кстати, рекомендую глянуть: Макетки, кто чем пользуется?, #7 (http://forum.ixbt.com/topic.cgi?id=48:5591:7#7)

252. Sony_Sony, 17.03.2007 22:19
Tahoe
Согласен.

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


Tahoe, давай по примеру ВВП отделим мух от котлет !

Я говорил про ПРЕЛЕСТЬ кварца ИСКЛЮЧИТЕЛЬНО при свзяи с ПК - как самый простой способ обеспечить правильную скорость передачи !!!

Естетсвенно если нет необходимости синхронизации со сторонним устройством то можно иногда и без кварца обойтись.

Чтоб светодиодом помигать наверняка не нужен.

Добавление от 17.03.2007 22:21:

Tahoe
Ну и бонус за это - меньше стоимость, экономится место на плате.

Это для профи. Любителям это ИМХО совсем не важно.

253. An_private, 17.03.2007 23:16
Sony_Sony
Это вы сами придумали ?
Хамло. Неплохо бы не только научиться раскрашивать странички в разные цвета, но и читать даташиты по английски. Он не зря называется Internal Calibrated Oscillator. По опыту работы с тини2313 десяток чипов прекрасно работал с RS232 от внутреннего RC генератора без перекалибровки.

254. Tahoe, 17.03.2007 23:35
Sony_Sony
Tahoe, давай по примеру ВВП отделим мух от котлет !
Давай отделим. Твоя ошибка в том, что считаешь конечной целью обеспечить правильную скорость передачи (с). А я беру за конечную цель сделать работоспособное устройство, которое, каким бы простейшим оно ни было, заработает. Имхо гораздо лучше, когда устройство запустилось но не работает какой-то кусок ( в нашем случае всё сведётся к поправке OSCCAL ), чем когда устройство вообще не запускается и надо шаманить с паялом, гадать кварц это виноват, или фьюзы, или кривые настройки линкера.

В общем, как всегда, если где-то прибавилось, значит где-то убавилось. Кварц хоть и гарантирует стабильность частоты, но за это надо заплатить.

Это для профи. Любителям это ИМХО совсем не важно.
Важно, только по другим причинам. Ну например, типа, "в нашей глуши кварц на такую частоту не найти"... Кстати, это довольно серьёзный довод. А научившись работать от встроеного RC, потом можно научиться его стабилизировать, например по часовому кварцу, которых на каждом углу как грязи. При этом частоту ты имеешь любую, какую захочешь.

Да и вообще, имхо лучше сразу привыкать к хорошему.

255. Sony_Sony, 18.03.2007 00:25
An_private
Хамло.

Но комент !

An_private
Неплохо бы не только научиться раскрашивать странички в разные цвета, но и читать даташиты по английски. Он не зря называется Internal Calibrated Oscillator.

Угу ! Калиброваный +- 3 %

А еще у микрух по цене от 0 до 40 баксов обычно пишут "ло кост"

На заборе тоже написано... однако это все же ПРОСТО забор.

256. An_private, 18.03.2007 00:27
Sony_Sony
Калиброваный +- 3 %
Для RS232 этого более чем достаточно.

257. Sony_Sony, 18.03.2007 00:28
Tahoe
Да и вообще, имхо лучше сразу привыкать к хорошему.

Однако в большинстве пром устройств МК стоят либо с кварцами либо с керамикой ... я конечно про те с которыми дело имел.

========
Можно посмотреть 100 проектов на телесистемах. Или схемы их серийных устройств. Или 300 с лишним проектов на "аврфрексе"

и вы увидите что в 90% устройств будут кварцы или керамика - "ло кост"

Добавление от 18.03.2007 00:35:

An_private

Sony_Sony
Калиброваный +- 3 %

Для RS232 этого более чем достаточно.


Угу... а CVAVR идиот конечно создавал !

Ведь в его мастере кода ошибка в скорости USART более 1% отображается красным цветом - т.е. предупреждает о возможных проблемах.

258. An_private, 18.03.2007 00:45
Sony_Sony
Угу... а CVAVR идиот конечно создавал
Понятия не имею - кто его создавал. А вот даташит прочитать бы не помешало. Для 8-ми битного слова и режима нормальной скорости допустимое отклонение +4.58/- 4.54%

259. Sony_Sony, 18.03.2007 00:53
Вы ваааабЧе понимаете об чем речь ?

Мы говорим о связи с ПК !!!

В даташите на ПК вы знаете какая ошибка допустима ? Чтоб ПК мог НАДЕЖНО понять что ему МК гутарит.

260. An_private, 18.03.2007 00:58
Sony_Sony
Вы ваааабЧе понимаете об чем речь ?
Я? Да. А Вы?

В даташите на ПК вы знаете какая ошибка допустима ? Чтоб ПК мог НАДЕЖНО понять что ему МК гутарит.
Можно посмотреть. Не меньшая, чем у AVR - это точно.

261. Sony_Sony, 18.03.2007 01:00
An_private
Не меньшая, чем у AVR - это точно.

А почему ж AVR так плох - получается что у него меньше чем у ПК.

262. Tahoe, 18.03.2007 01:08
Sony_Sony
Можно посмотреть 100 проектов на телесистемах. Или схемы их серийных устройств. Или 300 с лишним проектов на "аврфрексе" и вы увидите что в 90% устройств будут кварцы или керамика - "ло кост"
Угу. Именно так и будет. А теперь прими во внимание, что большинство этих проектов либо столетней давности, когда со встроеным RC-генератором контроллеров было раз-два (-три ) и обчёлся, разве что в MSP он с незапамятных времён. Либо проекты эти сделаны людьми, не то что бы начинающими... Нет, конечно. Но многие либо не знают толком про его возможности, либо по принципу "сделано - не трожь". Т.е. как ставили кварцы/керамику, так и ставят везде. Не заморачиваясь "лишними" фичами. Это из той же оперы, что и вешание внешнего BOD, при наличии встроеного в камень. Так что все эти проекты - не показатель.

А касательно погрешности UART, так её несложно самоу прикинуть. На самом деле погрешность эта зависит от того, во сколько раз приёмник делает оверсэмрлинг ( т.е. сколько набежит на бит ) и кол-ва бит в кадре. Обычно оверсэмплинг в 16 раз, длина кадра: старт + 8 данных + стоп. Итого 10, ну пусть даже 12 бит. Вот и прикидывай, на сколько реально допустим разбег частот, откуда вообще ноги растут у этих %%.

Добавление от 18.03.2007 01:14:

Стоп, лоханулся я. От кол-ва бит это вообще не зависит. Только от оверсэмплинга. Тогда допустИм уход частоты до половины 1/16. Т.е. в раойне половины 6,25% всё вертится.

Добавление от 18.03.2007 01:18:

А для оверсэмплинга в 8 раз всё ещё "слаще". 1/8 это 12,5%. Делим на 2 получаем 6,25%. Хотя надо ещё учитывать особенности реализации самого UART, так что Атмеловцы ещё чуток уменьшили этот предел. Что понятно, они же должны _гарантировать_ работу и плюс, знают логику работы своего UART.

Добавление от 18.03.2007 01:18:

Кстати, а с комповыми тоже всё понятно. Качаем даташит на легендарную 16550...

263. An_private, 18.03.2007 01:20
цитата из аппнота от philips

There is no exact limit on how much frequency error is tolerable,
since this depends on the devices communicating, the baud rates,
precise frequencies used by both devices, etc. However, a rule of
thumb may be used that the communication is likely to work if the
frequency is off by less than 5%.
This somewhat arbitrary number
was arrived at as follows: for a ten-bit serial code (one start, 8 data
bits, one stop), a 10% data rate error will put the receiver off by
about plus or minus one bit time at the end of one data frame. A one
bit-time error seems rather excessive if one wants fairly reliable
communications. So, consider using half of that value (5%) as a rule
of thumb.

Достаточно? Или еще будем выдумывать?

265. An_private, 18.03.2007 01:59
КРОКОДИЛ
А где можно взять толковый учебник по СИ
В качестве справочника использую это - http://www.citforum.ru/programming/c/dir.shtml

267. Tahoe, 18.03.2007 02:02
КРОКОДИЛ
А где можно взять толковый учебник по СИ
Я учился по "Керниган и Ричи" ( Kernighan & Ritchi ). Это классика, от создателей Си. В обиходе её называют K&R.
http://www.google.com/search?client=opera&rls=en…tf-8&oe=utf-8

268. Sappa, 18.03.2007 02:07
цитата:
Sony_Sony:
Угу ! Калиброваный +- 3 %

У разных контроллеров, согласно даташитам, по разному.

ATtiny12: At 5V and 25°C, the pre-programmed calibration byte gives a frequency within ± 1% of the nominal frequency.

ATtiny2313: At 3V and 25°C, this calibration gives a frequency within ± 10% of the nominal frequency. Using calibration methods as described in application notes available at www.atmel.com/avr it is possible to achieve ±
2% accuracy at any given VCC and Temperature.

269. Sony_Sony, 18.03.2007 02:10
An_private
This somewhat arbitrary number
was arrived at as follows: for a ten-bit serial code (one start, 8 data
bits, one stop), a 10% data rate error will put the receiver off by
about plus or minus one bit time at the end of one data frame. A one
bit-time error seems rather excessive if one wants fairly reliable
communications. So, consider using half of that value (5%) as a rule
of thumb.

Достаточно? Или еще будем выдумывать?


Блиннн ... Если бы вы хоть чуть чуть верхнюю головку напрягли ... Да где там !

Расчет по аглицки сделан из расчета ОДНОГО семпла на бит !!!

А AVR делает 3 сэмпла на бит ! Соответственно 5 разделите на 3 и получите 1.7%

========

С.М. Рюмик - написавший известные курсы по микроконтроллерам конечно же тоже ИДИОТ ???

Ведь какую галиматью написал:

http://forum.radiospec.ru/index.php?s=8d1e5b114e3c05…ic=5544&st=20

"Приемлемой для практики считается погрешность менее 0, 5%.

В диалазоне отклонений 0, 5... 3% еще имеется захват частоты, но уменьшается помехоустойчивость."

======

Ну а вы, An_private, конечно же ПРАВЫ !

Добавление от 18.03.2007 02:12:

An_private
В качестве справочника использую это - http://www.citforum.ru/programming/c/dir.shtml

Вас же просил человек - "на время забыть об cvavr.nm.ru"

... а вы даете ему то что на странице - cvavr.nm.ru/05a.htm - находится

270. Tahoe, 18.03.2007 02:12
КРОКОДИЛ
поэтому нужно абсолютно точно знать какой нужен контроллер
http://www.efind.ru/icsearch/?search=ATmega8L-8P
Это слегка устаревший, но один из самых популярных. Символ "Р" на конце означает DIP-корпус. Символ "L", что может работать от 3.3 В.
Посмотри ещё ATMEGA48V-10P. "V" означает, что может работать от 1,8 Вольт.
Верхняя граница у всех AVR-ов до 5 Вольт.

272. Tahoe, 18.03.2007 02:17
Sony_Sony
А AVR делает 3 сэмпла на бит !
Поделись, откуда инфа такая?

273. Sony_Sony, 18.03.2007 02:18
КРОКОДИЛ
поэтому нужно абсолютно точно знать какой нужен контроллер

ATmega16 и кварцы 7, 3728 11,0592 14,7456 МГц с конденсаторами 22 пФ

Вам нужно сделать схему и заказать компоненты, а в ожидании делать прогу и отлаживать пока на VMLAB или PROTEUS

274. Tahoe, 18.03.2007 02:23
А, ты про это:

Добавление от 18.03.2007 02:25:

Дык в пределах чуть меньше пол-бита можно спокойно иметь разбег.

К сообщению приложены файлы: 1.png

276. Sony_Sony, 18.03.2007 02:33
Tahoe

Sony_Sony
А AVR делает 3 сэмпла на бит !


Поделись, откуда инфа такая?


Дак по старинке ... из даташита родимого. Я то его действительно ЧИТАЛ !


The decision of the logic level of the received bit is taken by doing a majority voting of
the logic value to the three samples in the center of the received bit.

The center samples
are emphasized on the figure by having the sample number inside boxes. The majority
voting process is done as follows: If two or all three samples have high levels, the
received bit is registered to be a logic 1. If two or all three samples have low levels, the
received bit is registered to be a logic 0. This majority voting process acts as a low pass
filter for the incoming signal on the RxD pin.

Добавление от 18.03.2007 02:35:

КРОКОДИЛ
Блин, что за банеров ты там навешал??? -меня туда Касперский не пускает!

это nm.ru пихает.

==============
Советую AVAST.com - гораздо приятней и касперского и нортона.

277. An_private, 18.03.2007 02:35
Sony_Sony
Блиннн ...
Повторюсь. Хамло.

А AVR делает 3 сэмпла на бит ! Соответственно 5 разделите на 3 и получите 1.7%
Вообще-то AVR делает 16 семплов на бит. На той же странице есть формула расчета допустимого отклонения. Ни о каких 1.7 % речь не идет.
здесь был неправильный подсчет - слишком хорошо подумал об AVR

В диалазоне отклонений 0, 5... 3% еще имеется захват частоты, но уменьшается помехоустойчивость
Разумеется. Чем больше отклонение, тем ниже помехоустойчивость. Но в бытовых условиях на коротких линиях это не имеет ровно никакого значения - ошибок и так 0.

Ну а вы, An_private, конечно же ПРАВЫ
ну наконец-то

а вы даете ему то что на странице - cvavr.nm.ru/05a.htm - находится
понятия не имею - что на этой свалке находится

Все, мне надоело. Заниматься ликбезом, тем более таких одиозных личностей нарываясь на хамства - на фиг. В игнор.

279. Sony_Sony, 18.03.2007 02:41
Tahoe
Дык в пределах чуть меньше пол-бита можно спокойно иметь разбег.

Ты действительно считаешь что новичку можно советовать работать (сэмплить) на фронтах и спадах импульсов (если предположить что сэмпл 1 и разбежка пол-бита) ???

Ты считаешь что это надежная связь будет ???

Мдя... добрые советы.

Похоже CVAVR и правда идиоты делают. Кстати в ICC мастре тоже так считает - наверно и там идиоты окопались. Во засада




An_private
Все, мне надоело. Заниматься ликбезом

Помогать новичкам дело не простое - хлопотное и не благодарное. Редко кто спасибо скажет.

281. Tahoe, 18.03.2007 03:51
КРОКОДИЛ
А можно немного подробней на тему синхронизации с часовым кварцем?
О, тебе это будет "близко" и "знакомо". Всё то же самое, что и у тебя в трансиверах, та же PLL по сути.
Имеешь стабильную низкую частоту ( 32768 Гц ). Имеешь нестабильную высокую частоту ( около 8 Мгц ). Имеешь регистр OSCCAL, с помощью которого можно подстраивать эту "нестабильную" частоту. Остаётся только "поделить" и "сравнить". А результат "сравнения", это в твоих терминах ни что иное, как "выход фазового детектора". С помощью коего ты и будешь подстраивать "нестабильную" частоту.
Собсно ничем не отличается от твоих синтезаторов, просто реализация не напряжениями, а числами. Остальное всё абсолютно то же - шаг перестройки, джиттер...


Sony_Sony
Ты считаешь что это надежная связь будет ???
Ну а как ещё мне считать, если работает уже не один год. И не только у меня.

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

Давай посчитаем. Допустим оверсэмплинг х16, фрейм 10 бит. На сколько тиков может убежать частота на последнем бите? Согласно вышеприложенному рисунку на -6/+7. Сколько всего тиков? 16 * 10 бит = 160 тиков.
6 / 160 * 100 = 3,75%
7 / 160 * 100 = 4,375%

Это без учёта того, как поведёт себя сэмплер, если попадёт на 110 вместо 111. Но по-уму он должен работать мажоритарно, так что наш +/- плавно превращается в -7/+8. Итого:
7 / 160 * 100 = 4,375%
8 / 160 * 100 = 5%

У An_private что-то близкое было...

Кстати, на предыдущей странице я кое-где фигню написал, кажись. Так всегда бывает, когда в голове 2-3 задачи вертятся.

282. Dikoy, 18.03.2007 03:54
КРОКОДИЛ
А где можно взять толковый учебник по СИ если на время забыть об cvavr.nm.ru?
Купи в магазине простой учебник по Си для средней школы Только по обычному Си, а не по билдерам всяким. Обычно это брошюрка страниц на 50.

283. Tahoe, 18.03.2007 03:55
Sony_Sony
Да, ещё, с RC-генератором тоже не всё так просто. Атмел ради стабильности в некоторые камни их несколько штук пихал, по одному на каждый диапазон.
А насчёт калиброванности, в смысле абсолютной, так вроде где-то пробегало, что раньше их на 5Вольт калибровали, сейчас на 3,3 Вольта.

285. Tahoe, 18.03.2007 04:05
Sony_Sony
О, насчёт мажоритарности я прав оказался. В твоей же ссылке выше, на даташит, прям так и написано.

287. Tahoe, 18.03.2007 04:17
КРОКОДИЛ
А какие микросхеммы синтезаторов лучше применить -в смысле из современных?
Я в ВЧ полный ноль. Последний раз, лет 6-8 назад программили какие-то Моторолы и NEC-и. Но это давно было, к тому же NEC имхо хрен где купишь. Хотя Моторолы наверное ещё продаются. Погляди тут, какой у них ассортимент нонче, эти люди в ВЧ знают толк: www.elcotech.ru
По мне, так все эти синтезаторы одинаковые: SPI-образная шина, 1-2 регистра, бит по 10-20. Самое муторное имхо делители посчитать аккуратно, да всякие swallow counters.

А вообще нонче вроде всё DDS-ом норовят сделать. Простой синтезатор уже "не модно".

Добавление от 18.03.2007 04:22:

КРОКОДИЛ
Блин еще тогда нужно было взятся програмирование изучать.
Фигня, ещё не вечер.

289. An_private, 18.03.2007 10:05
Tahoe
так вроде где-то пробегало, что раньше их на 5Вольт калибровали, сейчас на 3,3 Вольта
В даташитах Но учитывая, что у tiny2313 при изменении напряжения от 1,8 до 5,5 В частота RC меняется меньше, чем на 0.5%, можно на это не обращать внимания.

290. Dikoy, 19.03.2007 04:02
КРОКОДИЛ
Соглашусь с двойной соней - если не хочешь проблем, ставь кварц. Внутренний RC тоже неплох, особенно если температура и питание практически не меняются, но с ним таки надо помучаться и почитать ДШ... Нефиг сразу это делать, потом сам разберёшься, если серийник будешь делать или с ограничением по массе прибор. А пока поставь кварцик и два кондёра по 22 пика. И будет тебе ЩАСТЬЕ.

Все у нас уже не купишь!
Если для прототипа, можно самплом заказать. Мотор охотно шлёт.

291. КРОКОДИЛ, 19.03.2007 04:24
Dikoy
если не хочешь проблем, ставь кварц
В синтезаторе в любом случае кварц стоять будет, а для мигалки не столь важно

Добавление от 19.03.2007 04:28:

Dikoy
Если для прототипа, можно самплом заказать. Мотор охотно шлёт
Да если б еще знать что заказывать -отстал я немножко от современных деталей -уже 8 лет сижу на ремонте антиквариата причем все время одно и тоже!

292. Dikoy, 19.03.2007 08:04
КРОКОДИЛ
В синтезаторе в любом случае кварц стоять будет, а для мигалки не столь важно
Вопрос в работе интерфаков, то бишь интерфейсов. Их частоты должны быть завязаны
Если ты связываешь два МК, можно тактировать их от одной частоты и тогда пофиг вся её нестабильность. А вот для связи с ПК лучше поставить кварц, чтобы голова уж точно не болела.

Да если б еще знать что заказывать -отстал я немножко от современных деталей
Це не ко мне... Я в синтезаторах вообще не шарю... Попробуй поискать форумы радиосвязи и спросить там, наверняка подскажут. На том же сайте журнала радио есть такой форум
Если подберёшь, заказать не проблема - насколько знаю, фрискейл в украину самплы шлёт.

293. Sony_Sony, 19.03.2007 09:14
Dikoy
знаю, фрискейл в украину самплы шлёт.

И очень активно !

Добавление от 19.03.2007 09:35:

=============

Пример: Часовой кварц на ATmega8 и внутренний RC генератор.

В проекте Телесистем - 132 часы на ATmega8 и индикаторы 7segLED

http://telesys.ru/electronics/projects.php?do=p132

10 будильников на каждый день недели.
Отсрочка сигнала, если будильник не отключить срабатывает примерно через 5 мин.
8 будильников на отдельную ножку мк, вкл\откл нагрузки.

Два датчика температуры DS18B20. (дома и на улице)

Таймер 99 часов.

Яркость индикатора настраивается для дневного и ночного времени.
Изменяемый параметр плавно меняет яркость, как в АОН.

При пропадании 220 вольт потребление от батарей 40 микроампер.
Будильник срабатывает при любом режиме питания.

294. КРОКОДИЛ, 19.03.2007 15:19
Dikoy
На том же сайте журнала радио есть такой форум
Так у них же АТ89 -САМАЯ суперсовременная микра!

295. Sony_Sony, 19.03.2007 15:52
цитата:
КРОКОДИЛ:
Dikoy
На том же сайте журнала радио есть такой форум

Так у них же АТ89 -САМАЯ суперсовременная микра!

Они бывают и суперсовременными - kurs8051.narod.ru
но к АТ892051 -4051 -51 это не относится - эти настоящие мамонты.

296. Tahoe, 19.03.2007 21:12
Dikoy
особенно если температура и питание практически не меняются
А вот скажи, например, у тебя много где "питание меняется" в девайсах с МК?
Ну а касательно температуры, с трудом себе представляю начинающего, который макетирует свой МК, сидя перед компом и испытывая перепады температуры от -20 до +80.


КРОКОДИЛ
Так у них же АТ89 -САМАЯ суперсовременная микра!
Дык тебя туда отправили не про МК, а про синтезаторы поспрашать. А уж чем там они этим синтезаторам ножки дёргают, дело десятое. Чем научились 10 лет назад, тем и дёргают.

А у тебя задача - названия синтезаторов из них "вытрясти".

297. КРОКОДИЛ, 20.03.2007 02:49
Tahoe
А у тебя задача - названия синтезаторов из них "вытрясти".
На Радио вообще ничего не нашел-шибко убогий у них форум Просмотрел несколько форумов, вроде LMX2326 не шибко старая, но в Донецке их нет, в Запорожье тоже -придется опять в Киеве заказывать

298. Dikoy, 20.03.2007 03:29
КРОКОДИЛ
LMX2326
Кто её сделал?
Закажи семпл! Не шлют в украину - через любую соседнюю страну, куда шлют. В ветке про семплы всё разжёвано.
Сам бы сейчас на фрискейл залез, но с их тяжеленным сайтом мой мобильник просто умрёт

299. КРОКОДИЛ, 20.03.2007 03:38
Sony_Sony
Пример: Часовой кварц на ATmega8 и внутренний RC генератор
Часы меня не интересуют абсолутно! Можешь действительно конкретно помочь? Нужно написать шаблон исходника для синтезатора на Си. Так чтобы туда можно было вписывать дискретные частоты, ну и естественно с подробными пояснениями. Вобщем камень -какая нибудь простенькая и недорогая AVRка, синтезатор - LMX2326, переключатель на 8 фиксированных положений -можно меньше, дисплей и клавиатура полностью отсутствуют, разнос между приемом и передачей 10,7Мгц если можно прицепить еще переключение на 21,4Мгц -то это будет вообще прекрасно, должна быть возможность вписывать частоты кратные 12,5Кгц. Алгоритм работы простенький - камень опрашивает переключатель и выдает команду LMXу выдать одну из 8 прописаных в исходнике частот, при нажатии кнопки "передача" частота увеличивается на 10,7Мгц. Диапазон вписываемых частот от 144 до 172Мгц.

Добавление от 20.03.2007 03:49:

Dikoy
Закажи семпл!
Что такое семпл? Перелопачивать целую ветку просто физически нет времени! -Вместо того чтобы спать я сижу за компом а утром работа - если удастся поспать пару часов то очень повезет!

Кто её сделал?
Вроде как Семикондутор - есть такая фирма? или я чегото напутал? Вообще то у меня очень плохо с английским -вообще никак -поэтому даже не представляю как я буду заказывать.

300. Sony_Sony, 20.03.2007 07:02
КРОКОДИЛ
синтезатор - LMX2326

Ты определись какой синтезатор будет. "Нэйшенел семи" вряд ли что-то бесплатно пришлет.

======
Вот этот синтезатор подойдет наверно
http://focus.ti.com/docs/prod/folders/print/trf3750.html

от 100 до 2400 МГц

заказ бесплатно "Request Free Samples"

Даташит - http://focus.ti.com/lit/ds/symlink/trf3750.pdf


У них и микроконтроллеры бесплатные msp430 и источники питания и море компонентов (о заказе в соседней ветке)

======

Короче определись какие компоненты у тебя будут. Мегу16 купишь ?

Добавление от 20.03.2007 07:28:

КРОКОДИЛ
синтезатор - LMX2326

А какая рабочая частот у этого синтезатора ? Или вы от балды лепите ?

301. Dikoy, 20.03.2007 10:05
КРОКОДИЛ
Что такое семпл?
Это когда ты от лица конторы (любой) заказываешь микру и она тебе приходит по почте абсолютно бесплатно И быстро. У фрискейла, он же моторолла, в россию - 2 недели. Ti присылает за 5-7 дней с момента заказа.

Вроде как Семикондутор
Семикондуктор по англицки - полупроводник

Напиши ТЗ по-конкретней, с напряжениями питания и т.д. Попробую помочь.

Добавление от 20.03.2007 10:18:

КРОКОДИЛ
разнос между приемом и передачей 10,7Мгц если можно прицепить еще переключение на 21,4Мгц -то это будет вообще прекрасно, должна быть возможность вписывать частоты кратные 12,5Кгц.
Это целиком от синтезатора зависит. МК ему любое число выдаст, главное, чтобы синтезатор мог его воспроизвести.

Алгоритм работы простенький - камень опрашивает переключатель и выдает команду LMXу выдать одну из 8 прописаных в исходнике частот, при нажатии кнопки "передача" частота увеличивается на 10,7Мгц. Диапазон вписываемых частот от 144 до 172Мгц.
То есть прописано 8 частот, но кнопой можно ещё увеличивать с шагом 10,7?
Уменьшать надо?

Тебе сюда пойдёт любая мега - 48, 8, 88, 16 и т.п. Купи любую, какая будет в продаже. Мне лично 48 больше всего нравится Дешевле не придумаешь и всё есть.
Полное название для дипового корпуса: ATmega48 24PI

Добавление от 20.03.2007 10:31:

КРОКОДИЛ
Кстати, в плане развития и изучения АВР: Полезные ссылки, #357 (http://forum.ixbt.com/topic.cgi?id=48:231:357#357)
Перевод даташиты на ATmega128. Фишка в том, что все АВР устроены почти одинаково. Может отличаться структура регистров, их количество и названия, но в целом архитектура одинакова. Если плохо знаешь английский - находишь в этой даташите, например, SPI порт. Изучаешь, как работает. Потом сверяешь регистры с ДШ на свой контроллер, находишь пару отличий, учитываешь их и работаешь.

302. Sappa, 20.03.2007 12:25
А я бы не стад брать PLL синетезатор для этой цели. Ведь что есть PLL синтезатор? Это делитель с переменным коэффициентом, кварцованный опорник и фазовый детектор. Вся эта конструкция управляет ГУНом который надо будет еще сконструировать и обеспечить чистый сигнал с него... По моему DDS гораздо удобнее. Ежели очень критично по шумам и паразиткам, то серия AD995* если менее критично, то AD985* от Analog Devices.

303. Sony_Sony, 20.03.2007 12:44
Dikoy
Мне лично 48 больше всего нравится Дешевле не придумаешь и всё есть.
Полное название для дипового корпуса: ATmega48 24PI


И симуляторами PROTEUS и VMLAB не поддерживается...

Зато дешево! И "секса" вдоволь поимеешь - когда опыта нет так класно в железе отлаживать аш жуть !

304. An_private, 20.03.2007 12:52
Sony_Sony
когда опыта нет так класно в железе отлаживать
Хм. Ни разу в жизни не пользовался симулятором. С самого начала только в железе. И ничего - работает как-то

305. Sony_Sony, 20.03.2007 14:35
Дак большинство людей на земле сотовым телефоном не пользуются и ни чего живут...

Это не смертельно вовсе, просто сотовый телефон это удобно.

Тоже и симуляторы - в них нет необходимости - они просто удобны тем что не позволяют спалить то что КРОКОДИЛу так трудно достать.

Добавление от 20.03.2007 14:36:

An_private
Ни разу в жизни не пользовался симулятором.

Уверен что вы врете.

306. Tahoe, 20.03.2007 14:41
An_private
Хм. Ни разу в жизни не пользовался симулятором.
+1.
Применительно к AVR, разумеется. Хотя я вот сейчас и для ARM-а не особо симулирую. Периферия, всё, что аппаратно-зависимое - только живьём.
А для остального есть BCB55, оно же Борландовский компиллер. А уж про специализированные вещи я вообще молчу. Один знакомый вообще "жил" в Матлабе.


КРОКОДИЛ
Кстати, ты бы скачал пока IAR-овский компиллер, что ли. Тебе нужен тот, который EWAVR. Собсно это и есть "та программа", в которой пишешь исходник, а на выходе получаешь прошивку для камня. В народе именуемая "компилятор". Это не единственный компилер для AVR, но рекомендую его. Я в итоге сейчас пользуюсь им и для AVR, и для ARM, и для MSP430.

Добавление от 20.03.2007 14:47:

Sony_Sony
они просто удобны тем что не позволяют спалить то что КРОКОДИЛу так трудно достать.
А ты хоть раз хоть один вывод в Меге смог спалить? Я так и не смог. Если не в курсе, попробуй замкнуть ногу на землю и выставить её в 1. И посмотри, какой ток потечёт.

Единственное, что имхо можно сделать с AVR-ом, так это отключить ногу RESET или ISP через SPI. Но даже это всё равно не убивает сам камень.

307. An_private, 20.03.2007 14:58
Sony_Sony
Уверен что вы врете
В третий раз - хамло.

Tahoe
А ты хоть раз хоть один вывод в Меге смог спалить? Я так и не смог
+1 Единственный "убитый" камень - дал спаять макетку неопытному человеку и где-то был плохой контакт. Судя по всему при прошивке фьюзов прошла ошибка и запретилось программирование через SPI. Параллельный программатор делать было лень, так что до сих пор валяется...

308. Sony_Sony, 20.03.2007 15:00
А палить не нужно. Достаточно почитать стоны в форумах о кучках МК у новичков с отключеным режимом ISP.

Я потому и советую мегу16 взять что там не так просто отключить RESET как в более мелких и дешовых AVR-ках.

Добавление от 20.03.2007 15:06:

An_private
Sony_Sony
Уверен что вы врете

В третий раз - хамло.


Вы плохов ладеете руским похоже.

Я не назвал вас вруном ! и не утверждал что вы врете.
Я лишь написал от том что уверен в чем-то, т.е. высказал моё отношение к вашему заявлению.

309. An_private, 20.03.2007 15:09
Sony_Sony
т.е. высказал моё отношение к вашему заявлению
А я свое отношение к Вам

310. Dikoy, 20.03.2007 15:33
Tahoe
А ты хоть раз хоть один вывод в Меге смог спалить?
+2
Один раз студень перепутал полярность. Мега8 разогрелась как кипятильник но... Выжила и её ещё долго потом мучали

Sony_Sony
И симуляторами PROTEUS и VMLAB не поддерживается...
Та я напишу ему ту прошивку Только пусть ТЗ даст и синтезатор подберёт.
А симулятором и я не пользовался... Когда начинал - не знал что это такое, а сейчас и не нужен...
Как-то у меня с самого начала с ворк-бенчем не сложилось и я на них всех забил...

311. Sony_Sony, 20.03.2007 16:41
КРОКОДИЛ ! делайте выводы.

312. КРОКОДИЛ, 21.03.2007 03:00
Dikoy
но с их тяжеленным сайтом мой мобильник просто умрёт
Я сейчас тоже по сотовому в нете лазию, подписка нА спутнике закончилась.
Напиши ТЗ по-конкретней, с напряжениями питания и т.д. Попробую помочь.
Да сейчас пробил микры по Киевской фирме, лучше поставить синтезатор LMX 2316 вместо LMX2326, - больше по бюджету подходит , ATmega48 24PI - у нас к сожалению не продают, -лучше какую нибудь ATtiny2313 -или что нибудь наподобие - малобюджетное - в дип корпусе всего 1$ стоит! Семпл это конечно хорошо когда для себя делаешь или эксперементируешь, а если девайс всетаки пойдет в серию, то о Семпле можно забыть -все придется покупать -а менять базовую кнструкцию только изза того что невозможно купить какую нибудь микру дело очень хлопотное. Напряжение питания в принципе не играет рояля так как трансиверы будут устанавливатся в автомобилях, -вобщем любое напряжение ниже 12вольт, эконмичность шибко большая тоже не требуется.
То есть прописано 8 частот, но кнопой можно ещё увеличивать с шагом 10,7?
Уменьшать надо?

Ну частоты заранее не известны поэтому будут прописаватся для каждого трансивера индивидуально в районе от 144мгц до 172мгц, вобщем когда трансивер стоит на дежурном приеме то синтезатор должен выдавать частоту на 10,7 мегагерца выше или ниже той которая прописана, а когда нажимаешь кнопку передачи то частота должна изменится и четко соответствовать прописанной. Выше или ниже -промежуток не имеет значения -трансиверу пофиг! Но есть еще трансиверы с промежутком в 21,4 мегагерца поэтому нужно предусмотреть возможность менять промежуток, но если это сильно сложно то ненужно -пока рулит и так. А кратность 12,5 килогерц нужна потому что уже многие службы работают по новой сетке частот, пример -165,4625 -ПОЭТОМУ приходится переделывать трансиверы на которых такая кратность не предусмотренна. Раньше сетка частот шла с шагом 25Кгц.
Перевод даташиты на ATmega128.
Скачал, буду разбиратся
Может отличаться структура регистров,
Вот с ними родимыми у меня какраз полная непонятка -голова дырявая -то регистры выпадают то команды

Добавление от 21.03.2007 04:40:

Sappa
По моему DDS гораздо удобнее.
Это слишком круто -я ведь не собираюсь DXов отлавливать -никчему это все, а для диспетчерской связи пойдет и на PLL Все равно ЧМдетектор шумит.

Добавление от 21.03.2007 05:12:

Sony_Sony
Ты определись какой синтезатор будет
Уже определился -LMX-2316.
"Нэйшенел семи" вряд ли что-то бесплатно пришлет.
Все равно покупать придется, я на бесплатный сыр сильно не надеюсь.
А какая рабочая частот у этого синтезатора ?
До 2,8Ггц!
Или вы от балды лепите ?
Ну частоту я даже на английском прочитать могу
Мегу16 купишь ?
Дорогие они у нас!
Вот этот синтезатор подойдет наверно
Ну да! =16$ в Киеве! -ты очень добрый!
Существует ли какойнибудь простенький компилятор для Си типа MPASM а то я с PROTEUS и VMLAB так и не смог разобратся
КРОКОДИЛ ! делайте выводы.
Дык некогда мне выводы делать -в голове сплошная каша из програмирования - чем дальше залезаю тем непонятней!

313. Xradio, 21.03.2007 05:53
КРОКОДИЛ
Большинство PLL синтезаторов имеют последовательную загрузку данных. И нет ничего сложного сформировать такую последовательность с помощью любого микроконтроллера. Эта задача, можно сказать, из разряда простейших. Типа, как светодиодом помигать. Однако я знаю людей, которые имея колоссальнейший опыт в радиоэлектронике, и ноль в МК, хитрожутко прошивали ПЗУ и хитрым же адресным счетчиком выдавали из неё нужный сериал-код для синтезатора. А времени на создание такой, графической... прошивки ушло бы больше, чем для написания нормального контроллера со всеми присущими ему функциями. Но страх перед МК...
В общем, начинай с изучения протокола загрузки выбранного LMX... лучше выпиши сразу нужные тебе числа всех коэфф., вернее их крайние значения. Затем выбери подходящий МК с учетом того, что для PLL понадобится максимум 4 порта (DATA, SCK, LE и контроль захвата - очень полезно) Остальные ноги МК надо посчитать для клавиатуры, дисплея... и т. д.
С выводом из МК слов управления в последовательном виде тебе помогут, или я отправлю кусочки кода для AVR (но через 2 недели)

Добавление от 21.03.2007 06:06:

An_private
- Ни разу в жизни не пользовался симулятором.
Sony_Sony
- Уверен что вы врете.

очевидно Мамочка имел в виду онанизм.

314. Sony_Sony, 21.03.2007 10:00
КРОКОДИЛ
какую нибудь ATtiny2313 -или что нибудь наподобие - малобюджетное - в дип корпусе всего 1$ стоит!

а если девайс всетаки пойдет в серию,


В серию другое дело ... Я мегу16 конечно для любительства советовал.

Добавление от 21.03.2007 10:02:

КРОКОДИЛ
Существует ли какойнибудь простенький компилятор для Си

Самый простой компилятор ИМХО - CVAVR

315. Dikoy, 21.03.2007 11:17
КРОКОДИЛ
лучше какую нибудь ATtiny2313 -или что нибудь наподобие - малобюджетное - в дип корпусе всего 1$ стоит!
Тинька пойдёт. Главное, чтобы был SPI порт для звязи с синтезатором, а он есть у всех АВР.

а если девайс всетаки пойдет в серию, то о Семпле можно забыть
А это зависит от того, кто серию быдет делать - если заказчик, то это его проблемы

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

Вот с ними родимыми у меня какраз полная непонятка -голова дырявая -то регистры выпадают то команды
С кодевижном это большого значения не имеет. Он сам разберётся, что там да и как. Другой вопрос, что те режимы, которые есть в 128 меге могут отсутствовать в тиньке не смотря на одинаковый порт или ШИМ

Уже определился -LMX-2316.
Посмотрю вечером ДШ, прикину.

Xradio
С выводом из МК слов управления в последовательном виде тебе помогут
Для кодевижна: spi(0)=data;

Sony_Sony
А что у нас нынче есть типа МАХ232, только на 2 линии и дешёвое? А то давно я RS232 не трогал...

Добавление от 21.03.2007 12:05:

КРОКОДИЛ
Вот это видел?
http://www.cqham.ru/S2006.htm
http://pro-radio.ru/simulators/1505/

316. Sony_Sony, 21.03.2007 12:22
Dikoy
Главное, чтобы был SPI порт для звязи с синтезатором, а он есть у всех АВР.

Нет. Не у всех.

Добавление от 21.03.2007 12:38:

Dikoy
Вот это видел?
http://www.cqham.ru/S2006.htm


Да я уж когдААА про Денисова гутарил ...

Добавление от 21.03.2007 12:41:

Dikoy
это зависит от того, кто серию будет делать

ИМХО очевидно никто

Добавление от 21.03.2007 12:47:

Dikoy
А что у нас нынче есть типа МАХ232, только на 2 линии и дешёвое? А то давно я RS232 не трогал...

Извини не подскажу. Я на Ti.com назаказывал аналогов max32xx

Я в устройство не ставлю "максы" - предпочитаю шнурок с максом. Компик то один а девайсов много

Добавление от 21.03.2007 12:54:

Вот можно прикинуть:
http://efind.ru/icsearch/?search=rs-232&stock=instock

317. КРОКОДИЛ, 21.03.2007 17:02
Xradio
Но страх перед МК...
Да не боюсь я его -просто для доходчивого изучения нужно все бросить, и заниматся только контроллерами а такой роскоши я себе позволить не могу.

Добавление от 21.03.2007 17:09:

Sony_Sony
Самый простой компилятор ИМХО - CVAVR
Да, есть у меня на винте весь твой сайт с большинством сопутствующих програм 130мегабайт всего. Просто разобратся нужно Сейчас посмотрел -CVAVR даже уже установленный есть!

Добавление от 21.03.2007 17:11:

Tahoe
Кстати, ты бы скачал пока IAR-овский компиллер, что ли. Тебе нужен тот, который EWAVR. Собсно это и есть "та программа", в которой пишешь исходник, а на выходе получаешь прошивку для камня. В народе именуемая "компилятор". Это не единственный компилер для AVR, но рекомендую его. Я в итоге сейчас пользуюсь им и для AVR, и для ARM, и для MSP430
А ссылочку можно -где скачать?

Добавление от 21.03.2007 17:18:

Dikoy
А это зависит от того, кто серию быдет делать
Дык я и буду делать
По сему, если смена оперативно не нужна, проще сделать интерфак к компу. Так устроит?
Оперативность вообще не нужна, -достаточно будет заливки с компа или чегонибудь припаять.

318. Sony_Sony, 21.03.2007 17:19
КРОКОДИЛ
А ссылочку можно -где скачать?

iar.com

Добавление от 21.03.2007 17:22:

93 Мб (при том что CVAVR 2,3 Mb всего со встроеным программатором)

Лечить советую - iarunicrk.exe (ищи в rambler.ru) - он для всех ИАР-ов.

319. КРОКОДИЛ, 21.03.2007 17:27
Dikoy
Вот это видел?
http://www.cqham.ru/S2006.htm

Да, видел - не подходит -руская микросхема которая даже гугелем не выгугливается -тоесть найти ее я не смогу, а АТ-89 я даже прошить не смогу, и конструкция для сериии сложновата, а больше половины наворотов и нафиг не нужны, и опять же исходника они не дают Короче это у них латентный бизьнес

Добавление от 21.03.2007 17:29:

Sony_Sony
93 Мб
Не сейчас мне такие обьемы не по силам

Добавление от 21.03.2007 17:33:

Xradio
или я отправлю кусочки кода для AVR (но через 2 недели)
Ждем-с

Добавление от 22.03.2007 01:26:

Dikoy
Да еще одну фичу забыл - кварец желательно использовать на 10,245Мгц.

Добавление от 22.03.2007 03:41:

Dikoy
Я тут может пропаду дня на два~три -закончился счет на GPRS Но все остается в силе.

320. Dikoy, 22.03.2007 08:13
КРОКОДИЛ
Да еще одну фичу забыл - кварец желательно использовать на 10,245Мгц.
Для МК в смысле?..

Sony_Sony
Лечить советую - iarunicrk.exe (ищи в rambler.ru) - он для всех ИАР-ов.
А вижон ему даже лечить не потребуется - в тиньке всего 2 кб

321. Sony_Sony, 22.03.2007 10:10
Нет. CVAVR надо качать полный. в Демке не все фичи мастера кода доступны.

322. Dikoy, 22.03.2007 10:26
Sony_Sony
в Демке не все фичи мастера кода доступны.
Например?..

323. Xradio, 22.03.2007 10:43
Dikoy
кварец желательно использовать на 10,245Мгц.
Для МК в смысле?..

Эта частота применяется в приемнике для второго преобразования в 455 kHz. (10700 - 10245) Чтобы сэкономить резонаторы разумно взять её с MC3361(57) (однокристалльный приёмник) для внешнего тактирования микроконтроллера. Я так и делал, поскольку для экономии тока в сканере процессор полностью Sleepил в статическом режиме (когда все настроено и проиндицировано) кста, помех приему (поражёнок от МК) тоже радикально меньше.

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

КРОКОДИЛ
Рекомендую все же начать с мигания светодиодом с помощью собственноручно написанной программки. Без этого этапа смело можешь забить на всё остальное с применением МК.

324. Sony_Sony, 22.03.2007 13:47
Dikoy
Sony_Sony
в Демке не все фичи мастера кода доступны.
Например?..


Нельзя настроить USART с прерываниями. Нельзя настроить использование многих приборов DS

Добавление от 22.03.2007 13:48:

Xradio
КРОКОДИЛ
Рекомендую все же начать с мигания светодиодом с помощью собственноручно написанной программки. Без этого этапа смело можешь забить на всё остальное с применением МК.


Вот помощь как это сделать - proavr.narod.ru/z1.htm

325. Dikoy, 22.03.2007 21:07
Sony_Sony
Нельзя настроить USART с прерываниями.
Скорости выше 151200 там и не в демке не настроишь - ручками надо. То же и с прерываниями - можно и ручками, компилятор пропустит. Но ему, конкретно, оно не надо.

326. Pyku_He_oTTyda, 22.03.2007 21:43
А как такой кусочек "красиво" написать?
код:

void read_key(void)
{
if(PINA==0xFE)
{
up_press=1;
}
else
{
up_press=0;
};

if(PINA==0xFD)
{
down_press=1;
}
else
{
down_press=0;
};

if(PINA==0xFB)
{
left_press=1;
}
else
{
left_press=0;
};

if(PINA==0xF7)
{
right_press=1;
}
else
{
right_press=0;
};

if(PINA==0xEF)
{
mode_press=1;
}
else
{
mode_press=0;
};

if(PINA==0xDF)
{
set_press=1;
}
else
{
set_press=0;
};
}

327. Qwertty, 22.03.2007 22:16
Тут бы не о красоте думать, а для начала ошибки исправить С существующим алгоритмом переменная key_press не работает.

328. Pyku_He_oTTyda, 22.03.2007 22:21
Qwertty
да, я заметил, только поправить не успел Был один кусок, вставлял по копи-пасте и упустил...
Счас поправлю

329. Sony_Sony, 22.03.2007 22:50
Dikoy
Sony_Sony
Нельзя настроить USART с прерываниями.

Скорости выше 151200 там и не в демке не настроишь - ручками надо.


Dikoy, я уважаю как строителя автопилота для БПЛА

Но какого черта вы засир...е мозги новичкам каким то БРЕДОМ !!!

Не знаете мастер кода CVAVR - дак зачем ЧУШЬ писать ???


код:

// 14.7456 МГц

#include <mega8.h>

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 921600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x00;

Dikoy
Sony_Sony
Нельзя настроить USART с прерываниями.

То же и с прерываниями - можно и ручками, компилятор пропустит.


Руками можно написать все что угодно ...

Речь о мастере начального кода шла - полезном инструменте для НАЧИНАЮЩИХ !!!

Добавление от 22.03.2007 22:54:

цитата:
Pyku_He_oTTyda:
А как такой кусочек "красиво" написать?

Вот "Си для МК" - proavr.narod.ru/05.htm

цитата:
switch(){}; - оператор множественного выбора

далее подробности ...

PS а что на электрониксе не спросили ? Вас название этого топика не смущает ?

330. Pyku_He_oTTyda, 22.03.2007 23:04
И там спросил Название не причем, топик в данное время активный, вот в чем дело.
цитата:
switch(){}; - оператор множественного выбора
мне не подходит, так как в зависимости от продолжительности нажатия на кнопку меняется выдаваемая команда, также в зависимости от продолжительности нажатия выдается или нет команда (третья по счету на кнопку) при отпускании кнопки

331. An_private, 22.03.2007 23:08
Pyku_He_oTTyda
А как такой кусочек "красиво" написать?
Не понял - зачем так сложно то? Переменные left_press и т.д - это что? Как объявлены? И зачем?
Почему не сохранять просто значение порта, а потом по банальному and (точнее or, так как у тебя активный уровень 0) проверять конкретные биты.

332. Pyku_He_oTTyda, 22.03.2007 23:20
обьявлены как bit.
Вот и спросил, как красивее

333. Xradio, 22.03.2007 23:22
Sony_Sony
Вот помощь как это сделать - proavr.narod.ru/z1.htm
Тот же курс, но вид сбоку? Вид, надо сказать, устрашающий! И дело не только в твоём "фирменном" оформлении (при скроллинге странички в голову приходит мысль, что это в хлам укуренный наркоман пишет письмо такому же), а в том, что пример твой с портом и таймером наверняка отпугнёт потенциальных учеников... Из простейшего примерчика ты раздул бог невесть какую страшилку на час внимательного чтения или... Слушай, мамочка, ты клеем случайно не баловался в детстве? "мультики"... комиксы... то как зверь она завоет, то...
Первая программка для незнакомых с Си должна быть на ассме (с расшифровкой его аббревиатур) и состоять из двух-пяти строчек. А для знакомых с Си... тоже на ассме, и на Си рядышком. Для незнакомых ни с электроникой ни с языками и программированием, и вообще незнакомых, но искренне желающих познакомиться: тоже, так не преподают. IMHO, Курс должен заинтриговать заглянувшего его почитать с первых же предложений. Мол, смотрите как это просто! Бац-бац, простенький заливщик (понька какая-нить - пять проводков) контроллер за 50-60 р... Припаяли, залили? Видите, как интересно это мигает? А вот, теперь и начнем учиться это, и гораздо более красивое, делать сами. А в качестве демонстрашки я бы сделал восемь светодиодов для развертки какого-нибудь слова. Помнишь, была такая схемка на рассыпухе в каком-то журнале - слово КИНО рисовала? Ученик наверняка сильно захочет своё имя так изобразить. 100% - сделает, и// понеслось.

334. Qwertty, 22.03.2007 23:32
Pyku_He_oTTyda
Ну примерно так:
код:

// Хороший стиль - задефайнить выводы, потом легко править
// в исходнике желательно избавиться от "конкретных" значений
// Кстати касается и PINA, но мне править уже лень
// кнопка вверх
#define key_up 0
// кнопка вниз
#define key_down 1

// Сюда вставить то, что мне было лень набивать.

// кнопка установки
#define key_set 5



// собственно функция
void read_key(void)
{
key_press=0;
up_press=0;
down_press=0;

// Сюда вставить то, что мне было лень набивать.

set_press=0;



if (PINA&(1<<key_up)==0)
{
up_press=1;
key_press=1;
}
if (PINA&(1<<key_down)==0)
{
down_press=1;
key_press=1;
}

// Сюда вставить то, что мне было лень набивать.

if (PINA&(1<<key_set)==0)
{
set_press=1;
key_press=1;
}
}

Нажатие нескольких кнопок тоже определиться - в этом отличие.
Функцию вообще-то лучше сделать возвращающей значение key_press.
Можно применить switch, но код вырастет из-за приведения типов к int. Хотя написано будет красивее...
Но все это тоже неправильно , я просто переписал исходный код, не меняя алгоритма опроса. А ведь главное как раз алгоритм. У кнопок есть дурацкая особенность дребезг, с ним НУЖНО бороться. Так что тут еще есть над чем работать
И мне непонятно зачем на каждую кнопку по переменной. Достаточно в одном байте хранить все кнопки сразу. Все равно в обработчике будут снова условия if (up_press==1)... А ведь можно в обработчике сделать if ((key&(1<<key_set))... так будет короче и быстрее.

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

335. Sony_Sony, 22.03.2007 23:34
Xradio
Курс должен заинтриговать заглянувшего его почитать с первых же предложений. Мол,

смотрите как это просто! Бац-бац,

простенький заливщик (понька какая-нить - пять проводков) контроллер за 50-60 р...
Припаяли, залили? Видите, как интересно это мигает?



Дак посмотрите внимательно ! ТАК именно и сделано !

proavr.narod.ru

даже 60 руб не нужно...

Шаг 1, Шаг 2 и так далее.

Вы просто не читали с начала.

z1.htm - это практическое упражнение 1 уже ПОСЛЕ теоретического курса !

336. An_private, 22.03.2007 23:39
Qwertty
И мне непонятно зачем на каждую кнопку по переменной. Достаточно в одном байте хранить все кнопки сразу. Все равно в обработчике будут снова условия
вот и я о том же

337. Pyku_He_oTTyda, 22.03.2007 23:47
Пока оставил так, спать хочу...
код:

oid read_key(void)
{
if(PINA==0xFE)
{
up_press=1;
}
else
{
up_press=0;
};

if(PINA==0xFD)
{
down_press=1;
}
else
{
down_press=0;
};

if(PINA==0xFB)
{
left_press=1;
}
else
{
left_press=0;
};

if(PINA==0xF7)
{
right_press=1;
}
else
{
right_press=0;
};

if(PINA==0xEF)
{
mode_press=1;
}
else
{
mode_press=0;
};

if(PINA==0xDF)
{
set_press=1;
}
else
{
set_press=0;
};

if((up_press==1)||(down_press==1)||(left_press==1)||(right_press==1)||(mode_press==1)||(set_press==1))
{
key_press = 1;
}
else
{
key_press = 0;
};

}



mode_press=1; и т.д. определил как bit, так что в один регистр влезли. Кнопки опрашиваю каждые 64 мс, по первому нажатию пошла команда, если кнопку держим, то через 408 мс другая и т.д. через 408мс. если прошло 408 мс, то тогда реагирует и на отпускание третьей командой, за такое время любой дребезг успокоится

338. An_private, 23.03.2007 00:03
Pyku_He_oTTyda
Пока оставил так, спать хочу
ужас какой...
первая часть вообще никакого смысла не имеет - ты получаешь PINA, то есть байт, за каким-то чертом длинными длинными ифами из него собираешь новый байт с изменением порядка битов. Зачем?
это вообще жуть
if((up_press==1)||(down_press==1)||(left_press==1)||(right_press==1)||(mode_press==1)||(set_press==1))
на хрена? не проще ли?
set_press = ((~PINA & 0x3F) == 0)
хотя вообще эти битовые переменные не нужны вообще - куда проще просто сохранить PINA в unsigned char и дальше любые необходимые действия делать с сохраненным значением - без разбора на биты

339. Tahoe, 23.03.2007 02:52
Sony_Sony
Речь о мастере начального кода шла - полезном инструменте для НАЧИНАЮЩИХ !!!
Во-во. Расплата за пользование "мастера" наступает мгновенно. Я вот про это:
UCSRB=0x18;
Офигительно грамотно. СтОит ли удивляться после этого, что народ так и продолжает потом писАть. Вместо нормального и понятного:
UCSRB = ( 1 << RXEN ) | ( 1 << TXEN );

340. КРОКОДИЛ, 23.03.2007 04:33
Dikoy
Да еще одну фичу забыл - кварец желательно использовать на 10,245Мгц.
Для МК в смысле?..

Ну да -это нужная частота в трансивере.

Добавление от 23.03.2007 04:41:

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

Добавление от 23.03.2007 04:55:

Dikoy
Ну что получится на LMX-2316 сделать кратность 12,5кгц? Сейчас нужно решить вопрос с окончательной конструкцией а когда первый синт пойдет в сборку, засяду уже конкретно за изучение, -даю слово что даже сайт Sony_Sony прочитаю полностью!

341. Xradio, 23.03.2007 07:59
Sony_Sony
Дак посмотрите внимательно ! ТАК именно и сделано ! Значит молодец. Но, поверь, хоть у меня и заторможенное психическое развитие - ЗПР, но даже и такая подача материала не помогла бы освоить контроллер. Хотя, что-то в твоей методике есть - ночью приснились красные большие буквы...
КРОКОДИЛ
Ну не до мигалок мне сейчас -нужно конкретно решить какая будет конструкция синтезатора, какие микросхемы, заказать их, и показать наличие хотябы одного рабочего синтезатора, - а уж потом можно делать и мигалки и свистелки и визжалки, а если делать в обратном порядке -то скорее всего мигать мне уже ничем не придется!
Тут ты неправ. Управляемый микроконтроллером UHF PLL cинтезатор на специализированной микросхеме получается в 100% случаев умеющего это делать. Если ты взялся учиться на такой задаче, то огребешься множеством проблем... Это уже видно хотя бы из:

Ну что получится на LMX-2316 сделать кратность 12,5кгц?

Неужели ты даже документацию не прочитал? Там же все "русским" языком написано... частота опорного кварца делится до частоты сравнения (ref.) фазового детектора, она же и будет численно равна минимальному шагу перестройки.
Если ты затеял что-то произвести на свет и не для баловства, а для рынка, но сам не сном не духом в том предмете, то лучше найми профессионала. А сам, чтобы время даром не терять начинай с мигания светодиодом. Если в электронике не новичок, то я гарантирую: через неделю ты абсолютно уверенно примешься за любую задачу, включая управление синтезатором.
Кстати сказать, я почему-то начал изучать (тогда еще МК51 с внешней памятью программ) сразу в задаче замены процессора в UHF трансивере Icom с "морским" диапазоном частот. Сильно хотелось его переделать на радиолюбительскую "двойку". И успешно! Через месяц у меня был супер-пупер аппарат с дисплеем на АЛС314 вместо родного ЖКИ, двумя типами сканера (до 64 каналов в памяти и поискового - с возможностью пропуска каналов с помехой, запись найденных в память, удалением ненужных - это все "редактор", возможностью работы на разнесенных частотах и т.д.) Причем, для этого пришлось снять протокол обмена штатного PLL с помощью самодельного "LPT анализатора", вычислить по эпюрам все его нюансы. Далее, сделать опять же свой эмулятор ПЗУ (тогда флэш контроллеров не было) и всё это соединить в одной задаче. А сейчас? любой даташит - пожалуйста, внутрисхемный отладчик, симулятор - нате, спросить кого - как двабайта. Красота! Так что, смелее надо жить.

342. Dikoy, 23.03.2007 09:17
Sony_Sony
Не знаете мастер кода CVAVR - дак зачем ЧУШЬ писать ???
Во-1 спокойнее, а то примкну к секте 123ненависников вместе с An_private.
Во-2, см фото (мега 8, кварц твой). У меня вижон 1.24.6. Леченый. До этого был 1.23 нелеченый. Ни в одном UART выще 115200 не ставился - вписывал к. делителя вручную.

Руками можно написать все что угодно ...
Я это к тому, что компилятор вижона пропускает даже то, что запрещено лицензией, не говоря про то, чего нету в визарде.

КРОКОДИЛ
Ну да -это нужная частота в трансивере.
Тогда 48 мега сподручнее - у неё можно настроить выход частоты на лапку. То есть будет КМОП выход тактовой частоты.

Ну что получится на LMX-2316 сделать кратность 12,5кгц?
Вчера не успел посмотреть, сейчас почитаю.

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

343. Sony_Sony, 23.03.2007 09:39
Dikoy
Ни в одном UART выще 115200 не ставился - вписывал к. делителя вручную.

В окне мастера указаны некоторые стандартные чатоты - вы можете вписать в ОКНО МАСТЕРА ЛЮБУЮ нужную скорость !

Коэф. делителей мастер рассчитает автоматически как в примере кода что я дал выше !!!

Добавление от 23.03.2007 09:41:

Dikoy
Sony_Sony
спокойнее, а то примкну к секте 123ненависников вместе с An_private.


Вот, вот... Пусть мой ответ плохой - НО КУРС то тут при чём ?!

Я ответил так потому что мне очень не нравится когда новичка вводят в заблуждение. При этом в начале ответа написал - "я вас уважаю".

Вы ж не спросили - "как в мастере CVAVR выставить произвольную частоту UART"
а просто заявили что он не позволяет и все !

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

Добавление от 23.03.2007 09:55:

Dikoy
Sony_Sony
Руками можно написать все что угодно ...

Я это к тому, что компилятор вижона пропускает даже то, что запрещено лицензией, не говоря про то, чего нету в визарде.



Это конечно так, но я изначально писал именно про МАСТЕР кода.

Вот напоминаю:

Sony_Sony
Dikoy
Sony_Sony
в Демке не все фичи мастера кода доступны.

Например?..


Речь шла ИМЕННО о функциях мастера !

344. Бэтмэн, 23.03.2007 10:25
AVR в очередной раз поставил меня в тупик...
Имеется ATtiny2313. Загоняю в неё байты с компа по USART, байты вывожу на индикатор. UDR читаю не по прерыванию, а просто перед циклом индикации.
Однако, на индикаторе вижу нечто необъяснимое: при выводе нового числа в UART, оно появляется на индикаторе на какое-то мгновение (имхо на период цикла индикации), а затем устанавливется опять старое (!!!) и держися до тех пор, пока я не введу ещё одно число.
Т.е. имеет место появление введёного числа с откатом назад.
Что чёрт возьми, происходит? Какой-то странный буфер, что-ли мне всю малину портит?
Как вообще работает этот уарт? Я то думал, что если загнать в уарт число, оно так и будет там висеть (в UDR), пока его не заменит следующее. Или оно теряется при чтении UDR?

345. Sony_Sony, 23.03.2007 10:38
Бэтмэн
Как вообще работает этот уарт?

Советую использовать буфер примеа по примеру - proavr.narod.ru/z5.htm

Создать его можно автоматически мастером кода CVAVR. Взять полный CVAVR можно на сером фоне на заглавной страничке указаного сайта.

346. Dikoy, 23.03.2007 10:56
Sony_Sony
Вы ж не спросили - "как в мастере CVAVR выставить произвольную частоту UART"
а просто заявили что он не позволяет и все !

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

347. An_private, 23.03.2007 11:13
Бэтмэн
Я то думал, что если загнать в уарт число, оно так и будет там висеть (в UDR), пока его не заменит следующее. Или оно теряется при чтении UDR?
Теряется. UDR можно читать только один раз и только при установленном флаге RXC (receive complete)

348. Dikoy, 23.03.2007 13:02
КРОКОДИЛ
Вопщем, ща тоже на работе запар, по этому пробежался по дш бегло.
Насколько понял, данные заливаются во внутренний 21 разрядный рагистр по MICROWIRE интерфейсу. Передача начинается со старшего бита. Как только лапка LE переходит в "1", данные из этого регистра перегружаются в один из трёх регистров внутри микры. В какой именно - зависит от состояния битов С1 и С2, это два старщих бита в слове. Регистры R, N, F соответственно на 14, 18 и 18 бит. Описаны они в табличках на стр. 7-9 и ещё, кратенько, 15-17. Советую сначала прочитать как раз 15-17 стр, а потом уже сначала.

Регистр R програмирует опорный делитель. Биты 1-14 содержат коэффициент деления (таблица 1.1.1), биты 15-18 ставятся в ноль.
Регистр N состоит из 5 бит добавочного счётчика А и 13 бит счётчика В, ещё есть девятнадцатый бит GO, он отвечает за режим "быстрого захвата" (стр. 11).
Частота VCO расчитывается по формуле из 1.2.3 (стр 8) с учётом значений этих регистров. То есть по ней же, можно расчитать значения на нужную частоту.
F регистр позволяет управлять разными функциями микры - усыплять её, менять полярность фазового детектора... Короче, от состояния битов в слове зависят все эти фичи. Стр. 9, таблички.

Я только одного не понял - если там MICROWIRE, адрес синтезаора по умолчанию нулевой, или в микровире вообще нету адреса?..

Короче, прошивку для МК я тебе помогу сделать, и даже ПО для компа для заливки сетки частот и т.д. Но в алгоритме придётся самому разбираться... То есть назначение каждого резистра, что они дают и на что вляют, по каким формулам считаются. У меня просто нет времени, да и в синтезаторах я нихрена не понимаю

Добавление от 23.03.2007 13:06:

Ps: www.translate.ru

349. Xradio, 23.03.2007 13:20
Dikoy
MICROWIRE это не 1-WIRE. Но посторонние данные можно просто не защелкивать. так и делал: линии data & clk параллельно работали на дисплей с последовательной загрузкой.

350. КРОКОДИЛ, 24.03.2007 03:20
Xradio
Неужели ты даже документацию не прочитал?
Там же все "русским" языком написано..
И где это даташиты на руском языке???!
частота опорного кварца делится до частоты сравнения (ref.) фазового детектора, она же и будет численно равна минимальному шагу перестройки.
Ну да! -я раньше тоже так думал, но в документации на LM7001J конкретно написан шаг с которым она может работать, и шага 12,5Кгц там нет.
то лучше найми профессионала

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

Добавление от 24.03.2007 03:38:

Dikoy
Тогда 48 мега сподручнее - у неё можно настроить выход частоты на лапку
Нет их у нас даже в Киеве А детали я получаю вот здесь http://www.imrad.com.ua На лапку не обязательно. А если пересчет не получается на кварц 10,245 сделать то можно на любой только какой нибудь стандартный.

Добавление от 24.03.2007 03:49:

Dikoy
Короче, прошивку для МК я тебе помогу сделать, и даже ПО для компа для заливки сетки частот и т.д. Но в алгоритме придётся самому разбираться...
Разберусь конечно -куда я денусь .............с подводной лодки то
Ps: www.translate.ru
Да чтото уменя ПДФ файлы не переводятся не онлайн переводчиком не штатными промтом и сократом Сейчас вот перевожу -сначала копирую и вставляю в Ворд а потом сохраняю как веб страницу, а потом перевожу, опять копирую, опять вставляю в Ворд и вручную переношу картинки -геморой тот еще!

351. Tahoe, 24.03.2007 04:36
КРОКОДИЛ
но в документации на LM7001J конкретно написан шаг с которым она может работать, и шага 12,5Кгц там нет
Сейчас глянул. Да, так и есть. Это потому, что там уже за тебя выбрали n-значений опорного счётчика. А тебе позволяют лишь выбрать какое-то одно из этих значений.
Но вообще-то этот камень имеет статус discontinued product ( что-то типа нашего "снят с производства" ). На кой он тебе вообще нужен? А в обсуждавшейся выше LMX2316 таких извратов нет. Какой хошь шаг, такой и ставь.

Хотя если очень "хоцца", можно попробовать и с твоей LM7001J поиграть. Вместо 7,2 МГц попробовать втулить ей кварц с другим номиналом. Но надо смотреть внимательно даташит, може там какие эффекты побочные вылезут ( помимо ограничения в "скорострельности", само собой ).


Но вообще если хочешь сделать побыстрее, послушай Xradio и убей день-другой на моргалку светодиодную. Что бы потом, посреди большого проекта, со всякими старт-апами и сегментами не пришлось разбираться "внезапно".

опять вставляю в Ворд и вручную переношу картинки -геморой тот еще!
Угу. Может проще слова агличкие запомнить? Там их, собсно, сотня-другая от силы наберётся. А "редкие" - лезь на www.lingvo.ru Один-два раза залезешь, потом уже не забудешь.

352. Xradio, 24.03.2007 07:07
КРОКОДИЛ
Tahoe все рассказал про "особенности". Но вообще-то лучше почитать про PLL синтезаторы. У Ридико Леонида Ивановича (здесь бывает) есть замечательно оформленная работа на русском языке в которой очень доходчиво изложены принципы и PLL и DDS. Но у меня в экспедиции нет ссылки на неё.

353. Dikoy, 24.03.2007 08:43
КРОКОДИЛ
сначала копирую и вставляю в Ворд а потом сохраняю как веб страницу, а потом перевожу, опять копирую, опять вставляю в Ворд и вручную переношу картинки -геморой тот еще!
А нафига?
Тебе что, нужен дословный перевод?
Взял блокнотик, и вписывай туда вручную все полезные мысли, что встретишь в ДШ, а для этого достаточно её напрямки в промте перевести, кусками.
Разобрался что куда и на что делит?

354. Sony_Sony, 24.03.2007 09:27
Xradio
Tahoe

лучше почитать про PLL синтезаторы. У Ридико Леонида Ивановича (здесь бывает) есть замечательно оформленная работа на русском языке в которой очень доходчиво изложены принципы и PLL и DDS.

Но у меня в экспедиции нет ссылки на неё.


Ссылки ОЧЕВИДНО находятся в кратком курсе как и почти всё необходимое начинающему.

Смотрите - proavr.narod.ru/01.htm поиск Ctrl+F "Ридико"

Добавление от 24.03.2007 09:33:

КРОКОДИЛ
Я чегото не вьезжаю - чем мигалки лучше синтезаторов???

Проще ИМХО.

Добавление от 24.03.2007 09:43:

Dikoy
Взял блокнотик, и вписывай туда вручную все полезные мысли


Вот я так и советовал - именно записывать на бумагу - это улучшает запоминание.

355. Xradio, 24.03.2007 12:15
Sony_Sony
именно записывать на бумагу - это улучшает запоминание
И не просто на листочки, а в "Рабочая тетрадь №1 такого-то (Крококодила)". И обязательно аккуратным почерком и чертежами с внятным стилем квинтэссенций. Тетрадь, как ничто другое стимулирует творческий процесс и организует. Кроме того, "рукописи не горят" в отличие от компьютеров...

Добавление от 24.03.2007 12:38:

КРОКОДИЛ
Я чегото не вьезжаю -чем мигалки лучше синтезаторов???
Вообще-то именно мигалку (чтобы глазами видеть мигание) написать совсем даже непросто с первого раза... Первое, что делают все в первый раз - просто зажигают светодиод, второе что делают - гасят его изменив код. А вот уже третье - начинают думать над циклом с задержкой времени. Как правило, через n минут светодиод мигает у бывалых в старых МК, и через n часов у впервые помазанных в эту религию табака и кофе до первых петухов.

356. Sony_Sony, 24.03.2007 13:32
Вот вспоможение в написании мигалки - proavr.narod.ru/z1.htm

Мигалку написать - значит научится управлять ножками МК и делать паузы.

С этими навками уже можно програмно реализовать последовательную передачу данных в синтезатор по рисункам-диаграммам в ДатаШите синтезатора.

357. An_private, 24.03.2007 18:03
Xradio
Как правило, через n минут светодиод мигает у бывалых в старых МК, и через n часов у впервые помазанных в эту религию табака и кофе до первых петухов
Угу. Со мной в одной комнате сидит человек, который насмотревшись на меня тоже решил AVR освоить Ну дал я ему книжку, дал чипы и все нужное Сложнее всего оказалось объяснить - что такое прерывания и как сделать так, чтобы отсчитав N прерываний светодиод зажегся, а еще после N - погас В понятие программирования по событиям начинающим врубиться трудно...

358. Sony_Sony, 24.03.2007 20:20
An_private
всего оказалось объяснить - что такое прерывания

Пусть почитает - proavr.narod.ru/03.htm

359. An_private, 24.03.2007 21:24
Sony_Sony
Пусть почитает
я не настолько садист - лучше сам объясню

360. Sony_Sony, 24.03.2007 21:32
An_private
Sony_Sony
Пусть почитает
я не настолько садист - лучше сам объясню


Дак вы вроде уже пробовали ...

An_private
Сложнее всего оказалось объяснить - что такое прерывания

361. Xradio, 24.03.2007 22:33
/Работа МК - шевелить, дергать ножками./
/т.е. программа работающая в МК буквально "дергает" его ногами в нужные моменты времени. /
И в таком духе весь длиннющий лубок с жирными кляксами - "скаска-раскраска"...
Ладно с этим, но зачем столько лишнего материала начинающему? - я сразу же споткнулся о тягомотнейшее описание сопротивления дергающихся ножек. Времена фронтов? зачем они начинающему?
\По отдельности рулить прерываниями сложней
это ДШ надо читать ... \ - Как и про все остальное, столь потешно излагаемое тобой, Автор...
В общем, жутчайший экзерсис из образных "дерганий ножками", фирменных аббревиатур регистров (почему нерасшифрованных?) и множества лишних деталей
котлет. А искренне жаль, что это и не букварь и не справочник. Впрочем, IMHO.

Добавление от 24.03.2007 23:38:

Вообще-то "справочник", тут я погорячился - куча полезных ссылок на первой странице. Только за это - респект! Их бы и локализовать как-то в спецраздел, а то ить"Yahoo" поневоле видеть вынуждаешь.

362. Sony_Sony, 24.03.2007 23:53
Xradio
фирменных аббревиатур регистров (почему нерасшифрованных?)

Наверно вы не внимаетельно читали. Вот цитата со страницы /03.htm

цитата:
Регистры МК имеют индивидуальные, уникальные адреса и наименования которые обычно образуются из их полного названия в ДШ (DS, DataSheet).

Полное название регистра соответствует назначению регистра.

Например:
полное название регистра - Watchdog Timer Control Register
сокращенное название – WDTCR
назначение регистра - управление сторожевым таймером

Добавление от 24.03.2007 23:56:

Xradio
Времена фронтов? зачем они начинающему?

А где это ?

Добавление от 24.03.2007 23:57:

Xradio
я сразу же споткнулся о тягомотнейшее описание сопротивления дергающихся ножек.

О чем речь вообще ? не понимаю ЧТО ВЫ ЧИТАЛИ ?

Добавление от 24.03.2007 23:59:

Xradio
куча полезных ссылок на первой странице.


Там на всех страницах подвалы богатые - этож национальная привычка, все в подвал складывать... в ЗАКРОМА !

363. Xradio, 25.03.2007 00:42
Sony_Sony
ЧТО ВЫ ЧИТАЛИ proavr.narod.ru/03.htm
Может быть я и перегнул с "тягомотнейшим", но всему свое место и время. Зачем отвлекаться на устройство деталей в главном виде "модели для сборки"?
Про "лишнее" и "оформление": Возможно, что негатив восприятия возникает после привычного для глаз классического стиля оформления корпоративных документов или строгой технической литературы. Здесь же открывается какой-то импрессионизм, символизм, кубизм и прочийизм. . Допустим, на первый раз кто-то и асилил "заглавные буквы", но ведь он же (если конечно крепок нервами) и второй и третий раз будет перечитывать нужные места, а там ВНИМАНИЕ!, НЕ ЗАБУДЬ!, Я ТЕБЯ УМОЛЯЮ!!!
В общем, вот такое мнение моё.

364. Dikoy, 25.03.2007 00:46
Sony_Sony
именно записывать на бумагу - это улучшает запоминание.
Да нафига там запоминание? Просто проще, чем долбить в ворд и т.п. Можно плюсики и восклицательные знаки ставить повсеместно, маркером выделять особо важные мысли... Короче, при проектировке такого "резюме" бывает достаточно, чтобы не наделать ляпов. А полноценный перевод ДШ... Разьве что с целью выложить у себя на сайте в помошь будущим поколениям. Себе это нафиг не нужно.

365. Sony_Sony, 25.03.2007 11:33
Xradio
вот такое мнение моё.

Я уважаю право людей иметь свое мнение.

Добавление от 25.03.2007 11:35:

Dikoy
А полноценный перевод ДШ... Разьве что с целью выложить у себя на сайте в помошь будущим поколениям. Себе это нафиг не нужно.

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

366. КРОКОДИЛ, 25.03.2007 11:57
Tahoe
Хотя если очень "хоцца", можно попробовать и с твоей LM7001J поиграть. Вместо 7,2 МГц попробовать втулить ей кварц с другим номиналом. Но надо смотреть внимательно даташит, може там какие эффекты побочные вылезут ( помимо ограничения в "скорострельности", само собой ).
Не ненужно с ней играть она все равно нужные частоты не потянет -у нее ограничение по быстродействию в 130МГЦ. Кое как до 144 еще со скрипом дотягивает но не более.
Может проще слова агличкие запомнить?
Да вот както неполучается
Dikoy
Разобрался что куда и на что делит?
Нет пока, -болею третий день.
Sony_Sony
Смотрите - proavr.narod.ru/01.htm поиск Ctrl+F "Ридико"
А можешь сюда ссылку кинуть? -У меня сечас скорость 2килобита в секунду -неделю искать буду!
Взял блокнотик, и вписывай туда вручную все полезные мысли,
А если не возникает полезных мыслей?

367. Sony_Sony, 25.03.2007 12:42
КРОКОДИЛ
А если не возникает полезных мыслей?

Записывай чужие относящиеся к делу - лучше запомнишь и "под рукой" будут.

368. КРОКОДИЛ, 25.03.2007 16:10
Xradio
Sony_Sony
Смотрите - proavr.narod.ru/01.htm поиск Ctrl+F "Ридико"
Дык там ничего нет про PLL, а все про DDS

369. Xradio, 25.03.2007 16:34
КРОКОДИЛ
Вот, нашлось гуглом за 0,43 секунды. Может быть и не так подробно, но для ознакомления - вполне.

370. Sony_Sony, 25.03.2007 16:34
КРОКОДИЛ
Sony_Sony
Смотрите - proavr.narod.ru/01.htm поиск Ctrl+F "Ридико"
Дык там ничего нет про PLL, а все про DDS


Вы поражаете меня своей ВНИМАТЕЛЬНОСТЬЮ !!!

Либо у меня интернет другой либо в начале статьи все же рассказан принцип PLL с картинкой.

371. Xradio, 25.03.2007 16:43
И вот еще:
http://nscrus.ru/files/kit0106_p50.pdf
(260 Кб.)
Ты тоже на GPRS сидишь? Иногда траффик здорово падает, наверное из за количества занятых каналов. Как бы сделать монитор GSM сети из старенькой мобилы? - просто чтобы видеть загрузку своей соты.

372. КРОКОДИЛ, 25.03.2007 21:56
b]Xradio[/b]
Ты тоже на GPRS сидишь?
У меня был аснхронный интернет через спутник -исходный трафик по GPRS а входящий по спутниковой тарелке -так можно было сайты целиком закачивать, а сейчас подписка на спутнике закончилась и работаю чисто на GPRS/
Как бы сделать монитор GSM сети из старенькой мобилы? - просто чтобы видеть загрузку своей соты.
Вроде он по обычному протоколу цифровой связи работает АХ-25 -такойже как в любительской цифре, а в мобиле разобратся не смог, хотел привлечь к этому делу товарища -ремонтера мобильников, но он только головой качает и говорит что ничего не получится. А вообще неплохо было бы иметь КГБешную программу для контроля GSM - потому что чисто аппаратными средствами здесь не обойтись.

Добавление от 25.03.2007 22:00:

Xradio
Вот, нашлось гуглом за 0,43 секунды.
Где?

373. Xradio, 25.03.2007 22:11
КРОКОДИЛ
Где?
О как... ссылку то не вставил
http://ru3ga.qrz.ru/UZLY/dds.htm

374. КРОКОДИЛ, 26.03.2007 04:02
Sony_Sony
Вы поражаете меня своей ВНИМАТЕЛЬНОСТЬЮ !!!
Ну да, ну да!

375. КРОКОДИЛ, 26.03.2007 04:17
Xradio
Сегодня наконецто получил из Киева дисплеи и AT90S1200, сделал програматор см.рис. и попробовал програмировать ICprogом , програматор в софте выставил как JDM84, - вроде нормально и заливается прошивка и читается, вот только биты защиты почемуто не работают При заливке прошивки устанавливаю галочки на оба бита, а потом микросхема свободно читается и после считывания галочки исчезают! -почему так происходит?

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

376. Xradio, 26.03.2007 07:42
КРОКОДИЛ
Питание на контроллер лучше брать от внешнего источника или от того, который и будет питать устройство в дальнейшем. Тогда ты можешь полновесно обвязать контроллер всей планирующейся периферией. Т.е. писать программу можно сразу в готовом дивайсе, поэтапно "усугубляя" код. Залил нех - смотришь, что творит твоя железка.
С битами защиты - не знаю, не пользовался ICprog.

377. КРОКОДИЛ, 26.03.2007 08:02
Xradio А какую прогу можно еще применить под эту схему програматора?
Где можно найти даташиты на руские микросхеммы? И где можно подобрать на них импортные аналоги?

378. Sony_Sony, 26.03.2007 08:11
КРОКОДИЛ
програматор в софте выставил как JDM84

Он ИМХО для PIC

379. Xradio, 26.03.2007 08:35
КРОКОДИЛ
А какую прогу можно еще применить под эту схему програматора?
Этой схемой лучше не пользоваться. Примени буферизованный интерфейс, например, типа STK-200
Он позволяет полностью отключаться от контроллера переводом в Hi-Z своих линий, твоя же схема будет висеть на ногах контроллера все время. Т.е., если там приходит 12 вольт с COМ порта и ограничивается стабилитроном до 5.6, то ты не сможешь использовать этот Пин как полноценный вход. А как выход он будет пересиливать эту единичку. вопщем - че попало.
А STK-200 работает из AVReal, Ponyprog, AVRisp, Kanda. И вообще, "классика" для LPT порта. У автора этой темы есть все ссылки и материалы.

380. Sony_Sony, 26.03.2007 11:12
КРОКОДИЛ, почему вы не слушаете то что вам советуют ?

381. КРОКОДИЛ, 26.03.2007 22:40
Xradio
твоя же схема будет висеть на ногах контроллера все время. Т.е., если там приходит 12 вольт с COМ порта и ограничивается стабилитроном до 5.6, то ты не сможешь использовать этот Пин как полноценный вход. А как выход он будет пересиливать эту единичку. вопщем - че попало.
Дык мне то нужно всего навсего залить уже готовую отработанную прошивку в два камня -и никаких эксперементов. STK-200 собирать сейчас нет ни времени ни возможностей, А Ponyprog на моем компе почемуто не работает.

382. Sony_Sony, 26.03.2007 23:00
КРОКОДИЛ
STK-200 собирать сейчас нет ни времени ни возможностей,

Ага ... 5 проводков тоже подключить времени нет ?

384. КРОКОДИЛ, 27.03.2007 00:46
Sony_Sony
Ага ... 5 проводков тоже подключить времени нет ?
Ну вопервых у меня нет в наличии сейчас разьема под паралельный порт, а во вторых тот програматор что я собрал тоже отлично работает -так зачем чтото мудрить изза двух камней? Только не могу понять почему биты зашиты не включаются. Сейчас разобрался с Пони прогом -заработал он всетаки, а эта схема какраз под него расчитанна, но биты защиты все равно не включаются

Добавление от 27.03.2007 01:02:

Xradio
Может тогда уже и синтезатор готовый,
Синтезаторы уже собранные лежат, но это для другого дела -на шестиметровый диапазон. -просто нашел подходящую разработку с подходящей прошивкой
и сам трансивер тебе "нарисовать" с топологией платы и прочими тонкостями?
Это будет вставлятся в уже готовые промышленные кварцканальные трансиверы типа ЛЕН-В вместо кварцев и умножителей! Так что ирония здесь не уместна типа Гарные однако хлопцы... "оранжевое небо, оранжевое море... оранжево живут" А вообще то оранжевые уже в серо/голубых перекрасились!
Ты хотя бы синтезатор к LPT прицепил, да повозился с ним... Глядишь, оптимизма бы поубавилось:
Дык зачем его цеплять то если он отлично работает? Другое дело ГУН разогнать на 30мегагерц перекрытия -придется повозится.
1995г... За форматирование не ручаюсь
Спасибо!

Добавление от 27.03.2007 01:10:

Xradio
А камень какой?

Добавление от 27.03.2007 01:21:

Sony_Sony
КРОКОДИЛ, почему вы не слушаете то что вам советуют ?
Да потомучто запутался я уже окончательно! Во всяких Кодэвиженах, ВМЛабах, Протеусах, iccv7avr -и Т.Д. и Т.П. -Я ведь не Кай Юлий Цезарь -у меня ведь всего одна голова а не три, как у Змея Горыныча и руки всего две а не восемь как у осьминога!

Добавление от 27.03.2007 05:16:

Xradio
Ты хотя бы синтезатор к LPT прицепил, да повозился с ним...
А схема подключения? Программа?

385. Xradio, 27.03.2007 07:45
КРОКОДИЛ
А камень какой?
Хороший вопрос... Intel 80С32, кажется, с ПЗУ 573РФ2... Процессор отпаял с какого-то древнего винчестера. Сейчас наверное подойдет какой-нибудь из AT89... Этим приемничком в виде макетки дома баловался, но однажды (а, может быть и периодически) его кот обоссал. Пришлось утилизировать. Диапазон VFO гетеродина получается легко.

А схема подключения? Программа? синтезатор к LPT?
- Справочник с распиновкой LPT и описание его регистров. Программа? хм-м... бэйсик, паскаль, си, кобол, алгол, фортран, ...

386. Sony_Sony, 27.03.2007 08:29
КРОКОДИЛ
Sony_Sony
КРОКОДИЛ, почему вы не слушаете то что вам советуют ?
Да потомучто запутался я уже окончательно! Во всяких Кодэвиженах, ВМЛабах, Протеусах, iccv7avr -и Т.Д. и Т.П. -Я ведь не Кай Юлий Цезарь


Поэтому и есть страница /07.htm - "как и чем прошить МК" - там ни какой путаницы - только CVAVR.

Добавление от 27.03.2007 08:31:

Xradio
- Справочник с распиновкой LPT и описание его регистров.

Как обычно - все ечть в низу страниц /z4.htm /z5.htm

Программа?

Указана на странице /z4.htm

Сайт Ковтуна - valery-us4leh.narod.ru/main.html

387. Xradio, 27.03.2007 08:44
Сайт Ковтуна... О, господи, вы случаем не братья? Вот скажи мне, как это читать?
http://valery-us4leh.narod.ru/dlpt.html
Зрение у вас что-ли другое? инопланетяне... А материал интересный, молодцы!

Добавление от 27.03.2007 08:58:

КРОКОДИЛ Думаешь наверное, что я глумлюсь? Ничуть! не более твоего "вынь да положь"
или Мамочки Сони: "Нате!".
"Ищущий да обрящет".

388. КРОКОДИЛ, 27.03.2007 14:10
Xradio
Думаешь наверное, что я глумлюсь? Ничуть!
Да нет вовсе не думаю, просто ты разговариваешь со мной как с человеком который хоть чтото понимает в програмированиии -возьми то, сделай это, помигай лампочками, поддключи к порту, а мне вовсе непонятно как она сволочь без лошадей всетаки едет! Дело не в моей тупости или наглости а в том что я абсолютно не знаю английского и что самое страшное не могу его запоминать. А для новичка согласись запомнить нужно очень много,- слишком большой обьем непонятной информации. Вот например совет помигать светодиодами - Я позавчера пытался откомпилировать готовый исходник, просидел почти двое суток над Кодевиженом и ВМлабом но так и не смог в них разобратся. Зашел на сайт Sony_Sony а там вообще глаза разбегаются в разные стороны -сосредоточится не возможно, и то что знал до этого с головы повылетало! Впрочем особой нужды компилировать этот исходник не было, так как автор дал и НЕХ файл но всеже я пытался разобраться для себя

389. Xradio, 27.03.2007 14:23
КРОКОДИЛ
"Лиха беда - начало". Это самое важное, что ты уже начал знакомиться с предметом. Главное - не бросить задел, испугавшись или разочаровавшись. Всё замигает! Ещё. Всё же не стремись спрашивать у кого-то, если что-то не получается "в лёгкую". Как правило, не получается - от недостатка знаний в этом предмете. А их и не даст никто если сам не возьмешь.

390. An_private, 27.03.2007 14:26
КРОКОДИЛ
а там вообще глаза разбегаются в разные стороны -сосредоточится не возможно, и то что знал до этого с головы повылетало
отличное описание дизайна

391. КРОКОДИЛ, 27.03.2007 14:36
Sony_Sony
Поэтому и есть страница /07.htm - "как и чем прошить МК" - там ни какой путаницы - только CVAVR.
А навести порядок у себя на сайте не пробовал? - слишком много "воды" на страницах, дело даже не в пестроте, а в том что в учебном тексте слишком много посторонних предметов, чтобы распечатать хотябы одну твою страничку уходит целая пачка бумаги, а смысловой нагрузки очень мало! Сделай учебный текст отдельно, закачки на отдельной страничке, для ссылок тоже отдельная страничка, и страничка новостей... Будет порядок на сайте люди сами туда будут заходить и не нужно будет туда никого пихать силой.

392. Xradio, 27.03.2007 14:43
КРОКОДИЛ
А трассировщиком кодевижна пробовал тот исходник прощелкать?

393. КРОКОДИЛ, 27.03.2007 14:53
Xradio
Ну вопервых я незнаю что такое трасировщик и что он делает, а во вторых в нем нет нужной микросхеммы, поэтому взялся за ВМлаб но тоже не смог разобратся, я даже не понял на каком языке исходник. -Сейчас попробую вставить.
код:
;Программа для синтезатора к рст."ЛЁН"
; версия от 02.11.2003 г
; для случая, если частота гетеродина приёмника больше частоты передачи
; шаг сетки 5 кГц, диапазон 20000-65535 кГц.

.include "1200def.inc"
.def number = r10
.def ind_l = r11
.def ind_m = r12
.def ind_h = r13
.def if_l = r14
.def if_h = r15
.def fl_l = r16
.def fl_h =r17
.def work_l =r18
.def work_h =r19
.def temp =r20
.def temp1 =r21
.def loop = r22
.def flagtx =r23
.def glob = r24
.def mult_l = r25
.def mult_h = r26
.def fm_h = r27
.def fm_l = r28
.def temp16_l = r29
.def temp16_h = r30
.def dat_s= r31

;PORTb
.equ DN =0
.equ UP =1
.equ SCAN=2
.equ MEM1=3
.equ MEM2=4
.equ MEM3=5
.equ SAVE=6

;PORTd
.equ TX =0
.equ SQL =1
.equ DATA =2
.equ CL =3
.equ CE =4
.equ SK = 5
.equ DI = 6


.cseg
.org 0

ldi temp, 0xFF
out PORTB,temp ;порт B на ввод
clr temp
out DDRB,temp
ldi temp, 0b10000011
out PORTD, temp
ldi temp,0B01111100
out DDRD,temp ;порт D на выход, кроме двух крайних разрядов SQL, TX
clr number
clr flagtx
ldi temp, 0x50
rcall pause_ro

;**************************
;**************************
ldi temp, fmin ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, fmin + 1
rcall EERead
mov fl_l, temp
ldi temp, fmax ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, fmax + 1
rcall EERead
mov fm_l, temp
ldi temp, if_freq ;загружаем частоту ПЧ
rcall EERead
mov if_h, temp
ldi temp, if_freq + 1
rcall EERead
mov if_l, temp
ldi temp,ch1 ; загружаем значение из первой ячейки памяти в рабочую
rcall EERead
mov work_h, temp
ldi temp, ch1 +1
rcall EERead
mov work_l, temp


;***********************
;ручной ввод параметров
;***********************
sbis PINB,MEM1
rjmp vvodmin

sbis PINB,MEM2
rjmp vvodmax

sbis PINB,MEM3
rjmp vvodif
rjmp initial

vvodmin:sbis PINB,MEM1
rjmp vvodmin
mov work_l, fl_l
mov work_h, fl_h
ldi fl_l, 0xA0 ;минимальное значение частоты - 20 мГц
ldi fl_h, 0x0F
ldi fm_l, 0x33 ;максимальное - 65535 кГц
ldi fm_h, 0x33
ldi temp, 0x01
mov number, temp
rjmp vision

vvodmax:sbis PINB,MEM2
rjmp vvodmax
mov work_l, fm_l
mov work_h, fm_h
ldi fl_l, 0xA0
ldi fl_h, 0x0F
ldi fm_l, 0x33
ldi fm_h, 0x33
ldi temp, 0x02
mov number, temp
rjmp vision

vvodif:sbis PINB,MEM3
rjmp vvodif
mov work_l, if_l
mov work_h, if_h
ldi fl_l, 0x50 ; минимальное значение частоты - 400 кГц
clr fl_h
ldi fm_l, 0x30 ; максимальное значение - 22000 кГц
ldi fm_h, 0x11
ldi temp, 0x03
mov number, temp


vision:rcall display


askkeys:ldi temp, 0x02
rcall pause_ro

sbis PINB,UP
rjmp up_rout1

sbis PINB,DN
rjmp dn_rout1

sbis PINB,MEM1
rjmp savemin

sbis PINB,MEM2
rjmp savemax

sbis PINB,MEM3
rjmp saveif
rjmp askkeys


up_rout1:sbis PINB,UP
rjmp up_rout1
ldi temp, 0x01
clc
add work_l, temp ; увеличить на 1 значение в рабочей ячейке
clr temp
adc work_h, temp ; если был перенос, увеличиваем на 1 старший разряд
cp fm_h, work_h ; достгло ло значение старшего разряда макс?
brne vision ; нет-выход
cp work_l, fm_l ; если да, проверяем младший разряд
brlo vision
mov work_h, fl_h ; дошло до конца - загружаем рабочую ячейку мин.
mov work_l, fl_l ; значением
rjmp vision

dn_rout1:sbis PINB,DN ; ждём отпускания кнопки
rjmp dn_rout1
clr temp
clc
subi work_l, 0x01 ;уменьшаем на 1 младший байт
sbc work_h, temp ; если был перенос, уменьшаем старший байт
cp work_h, fl_h; дошло до конца?
brne vision ; нет
cp fl_l, work_l ; дошло до конца?
brlo vision ; нет
mov work_h, fm_h ;если дошло, переписываем в рабочую ячейку
mov work_l, fm_l ;максимальное значение
rjmp vision

savemin:sbic PINB, MEM1 ;если кнопку ещё удерживают,
rjmp vision
sbic PINB, SAVE ;проверяем, нажата ли РЕП
rjmp savemin ; если РЕП отпущена, возврат
neotp1:sbis PINB, SAVE ; ждём, пока отпустят РЕП
rjmp neotp1
ldi temp, fmin ; записываем в память данные
mov temp1, work_h
rcall EEwrite
ldi temp, fmin+1
mov temp1, work_l
rcall EEwrite
vozv_1:sbis PINB, MEM1 ; когда отпущена МЕМ1, выход
rjmp vozv_1
rjmp vision


savemax:sbic PINB, MEM2 ;если кнопку ещё удерживают,
rjmp vision
sbic PINB, SAVE ;проверяем, нажата ли РЕП
rjmp savemax ; если РЕП отпущена, возврат
neotp2:sbis PINB, SAVE ; ждём, пока отпустят РЕП
rjmp neotp2
ldi temp, fmax ; записываем в память данные
mov temp1, work_h
rcall EEwrite
ldi temp, fmax+1
mov temp1, work_l
rcall EEwrite
vozv_2:sbis PINB, MEM2 ; когда отпущена МЕМ1, выход
rjmp vozv_2
rjmp vision

saveif:sbic PINB, MEM3 ;если кнопку ещё удерживают,
rjmp vision
sbic PINB, SAVE ;проверяем, нажата ли РЕП
rjmp savemax ; если РЕП отпущена, возврат
neotp3:sbis PINB, SAVE ; ждём, пока отпустят РЕП
rjmp neotp3
ldi temp, if_freq ; записываем в память данные
mov temp1, work_h
rcall EEwrite
ldi temp, if_freq+1
mov temp1, work_l
rcall EEwrite
vozv_3:sbis PINB, MEM3 ; когда отпущена МЕМ1, выход
rjmp vozv_3
rjmp vision


initial:
rcall display
rcall syntez
;***Опрос клавиш**********************
bigloop:ldi temp, 0x02
rcall pause_ro

sbis PINB,UP
rjmp up_rout

sbis PINB,DN
rjmp dn_rout

sbis PIND,TX
rjmp tx_rout

sbis PINB,SCAN
rjmp scan_rout


sbis PINB,MEM1
rjmp mem1_r

sbis PINB,MEM2
rjmp mem2_r

sbis PINB,MEM3
rjmp mem3_r


rjmp bigloop

;***Обработка опроса клавиш ************************

up_rout:sbis PINB,UP
rjmp up_rout
clr temp
clc
ldi temp, 0x01
add work_l, temp ; увеличить на 1 значение в рабочей ячейке
clr temp
adc work_h, temp ; если был перенос, увеличиваем на 1 старший разряд
cp fm_h, work_h ; достгло ло значение старшего разряда макс?
brne initial ; нет-выход
cp work_l, fm_l ; если да, проверяем младший разряд
brlo initial
mov work_h, fl_h ; дошло до конца - загружаем рабочую ячейку мин.
mov work_l, fl_l ; значением
rjmp initial

dn_rout:sbis PINB,DN ; ждём отпускания кнопки
rjmp dn_rout
clr temp
clc
subi work_l, 0x01 ;уменьшаем на 1 младший байт
sbc work_h, temp ; если был перенос, уменьшаем старший байт
cp work_h, fl_h ; дошло до конца?
brne initial ; нет
cp fl_l, work_l ; дошло до конца?
brlo initial ; нет
mov work_h, fm_h ;если дошло, переписываем в рабочую ячейку
mov work_l, fm_l ;максимальное значение
rjmp initial


tx_rout:ldi flagtx,0x01 ;устанавливаем флаг передачи в 1
ldi temp, 0x0B
mov number, temp
rcall display
rcall syntez ;выдаём в синтезатор
return: sbis PIND,TX ;ждём, пока отпустят кнопку
rjmp return
clr flagtx ;если кнопка отпущена, сбрасываем флаг
clr number
rjmp initial


scan_rout:
sbis PINB,SCAN ;ждём, пока отпустят кнопку
rjmp scan_rout
scan_up:clc
ldi temp,0x01
add work_l, temp ;увеличиваем
clr temp
adc work_h, temp ; если был перенос, увеличиваем на 1 старший разряд
cp fm_h, work_h ; достгло ло значение старшего разряда макс?
brne end3 ; нет-выход
cp work_l, fm_l ; если да, проверяем младший разряд
brlo end3
mov work_h, fl_h ; дошло до конца - загружаем рабочую ячейку мин.
mov work_l, fl_l ; значением
brne end3

end3:rcall display
rcall syntez
ldi temp,0x04 ;задержка , определяет скорость сканирования
rcall pause_ro



nachopr:sbic PINB, SCAN ;если нажата SCAN, TX, UP, DN - выход из режима сканирования
rjmp key1
voz1:sbis PINB, SCAN
rjmp voz1
rjmp bigloop
key1:sbic PIND, TX
rjmp key2
voz2:sbis PIND, TX
rjmp voz2
rjmp bigloop
key2:sbic PINB, UP
rjmp key3
voz3:sbis PINB, UP
rjmp voz3
rjmp bigloop
key3:sbic PINB, DN
rjmp key4
voz4:sbis PINB, DN
rjmp voz4
rjmp bigloop
key4:sbic PIND, SQL ;если не нажата ни одна кнопка,
rjmp scan_up ; продолжаем сканирование

ldi glob,0x40 ;подпрограмма обработки, если нажата SQL, ГЛОБ - задержка
oprotp:sbic PINB, SCAN ; если нажата SCAN, TX, UP, DN - выход из режима сканирования
rjmp key11
voz11:sbis PINB, SCAN
rjmp voz11
rjmp bigloop
key11:sbic PIND, TX
rjmp key21
voz21:sbis PIND, TX
rjmp voz21
rjmp bigloop
key21:sbic PINB, UP
rjmp key31
voz31:sbis PINB, UP
rjmp voz31
rjmp bigloop
key31:sbic PINB, DN
rjmp key41
voz41:sbis PINB, DN
rjmp voz41
rjmp bigloop
key41:sbis PIND, SQL ; если SQL всё ещё нажата,
rjmp oprotp ; ждём, пока что-нибудь нажмётся
ldi temp,0x04 ; если SQL отпущена, формируем паузу в сканировании
rcall pause_ro
dec glob ; пауза, пока не сбросится ГЛОБ
brne oprotp
rjmp scan_up ; продолжаем сканирование
;*****************************
;работа с ячейками памяти
;****************************

mem1_r:sbic PINB, MEM1 ;если кнопку ещё удерживают,
rjmp readm1
sbic PINB, SAVE ;проверяем, нажата ли SAVE
rjmp mem1_r ; если РЕП отпущена, возврат
neotpus1:sbis PINB, SAVE ; ждём, пока отпустят SAVE
rjmp neotpus1
ldi temp, ch1 ; записываем в память данные
mov temp1, work_h
rcall EEwrite
ldi temp, ch1+1
mov temp1, work_l
rcall EEwrite
vozv1: sbis PINB, MEM1 ; когда отпущена МЕМ1, выход
rjmp vozv1
rjmp bigloop
readm1:ldi temp,ch1 ;чтение данных из памяти
rcall EEread
mov work_h, temp
ldi temp, ch1+1
rcall EEread
mov work_l, temp
rjmp initial

mem2_r:sbic PINB, MEM2
rjmp readm2
sbic PINB, SAVE
rjmp mem2_r
neotpus2:sbis PINB, SAVE
rjmp neotpus2
ldi temp, ch2
mov temp1, work_h
rcall EEwrite
ldi temp, ch2+1
mov temp1, work_l
rcall EEwrite
vozv2: sbis PINB, MEM2
rjmp vozv2
rjmp bigloop
readm2:ldi temp,ch2
rcall EEread
mov work_h, temp
ldi temp, ch2+1
rcall EEread
mov work_l, temp
rjmp initial

mem3_r:sbic PINB, MEM3
rjmp readm3
sbic PINB, SAVE
rjmp mem3_r
neotpus3:sbis PINB, SAVE
rjmp neotpus3
ldi temp, ch3
mov temp1, work_h
rcall EEwrite
ldi temp, ch3+1
mov temp1, work_l
rcall EEwrite
vozv3: sbis PINB, MEM3
rjmp vozv3
rjmp bigloop
readm3:ldi temp,ch3
rcall EEread
mov work_h, temp
ldi temp, ch3+1
rcall EEread
mov work_l, temp
rjmp initial

;******отображение на дисплее******************


;************ преобразование коэфф.деления в частоту для вывода на индикатор**************
display:clr mult_l
clr mult_h
ldi temp, 0x05
cycle: add mult_l, work_l
adc mult_h, work_h
dec temp
brne cycle
ldi temp16_l, 0x10 ;определяем количество десятков тысяч
ldi temp16_h, 0x27
rcall decdig
cpi temp, 0x00
brne nextdig1
ldi temp, 0x0A
nextdig1:mov ind_h, temp
ldi temp16_l, 0xE8 ;определяем количество тысяч
ldi temp16_h, 0x03
rcall decdig
cpi temp, 0x00
brne nextdig2
ldi temp, 0x0A
nextdig2:mov ind_m, temp
swap ind_m
ldi temp16_l, 0x64 ;определяем количество сотен
clr temp16_h
rcall decdig
cpi temp, 0x00
brne nextdig3
ldi temp, 0x0A
nextdig3:add ind_m, temp
ldi temp16_l, 0x0A ; определяемколичество десятков
clr temp16_h
rcall decdig
cpi temp, 0x00
brne nextdig4
ldi temp, 0x0A
nextdig4:mov ind_l, temp ; в конце операции в ячейках инд содержится
swap ind_l ;десятичное значение рабочей частоты
;mov temp,mult_l
cpi mult_l,0x00 ;нули заменены на А - для вывода на индикатор.
brne enddig
ldi mult_l,0x0A
enddig:add ind_l, mult_l



mov temp, number
no_tx:rcall vyvdig
rcall vyvdig
clr temp
rcall vyvdig
rcall vyvdig
mov temp, ind_h
rcall vyvdig
rcall vyvdig
mov temp, ind_m
rcall vyvdig
rcall vyvdig
mov temp, ind_l
rcall vyvdig
rcall vyvdig
ret

;*****ВВод информации в синтезатор******************
syntez: ;ret ;технологический возврат
mov mult_l, work_l ; в противном случае прибавляем
mov mult_h, work_h
cpi flagtx,0x00
brne nosum ;если установлен флаг, не прибавляем ПЧ
ldi dat_s,0b11100100;0xA4
add mult_l,if_l ;добавляем ПЧ, если надо
adc mult_h,if_h
rjmp sum
nosum:ldi dat_s,0b11100010;0xA2
sum:cbi PORTD,DATA
sbi PORTD,CE ;разрешение записи
ldi loop, 0x08
mov temp,mult_l
loop2:ror temp
brcs h_l
cbi PORTD, DATA
rjmp sync
h_l:sbi PORTD, DATA
sync:rcall pulse
dec loop
brne loop2


ldi loop, 0x08
mov temp, mult_h
loop3:ror temp
brcs h_l1
cbi PORTD, DATA
rjmp sync1
h_l1:sbi PORTD, DATA
sync1:rcall pulse
dec loop
brne loop3



ldi loop, 0x08
mov temp, dat_s
loop21:ror temp
brcs h_l2
cbi PORTD, DATA
rjmp sync2
h_l2:sbi PORTD, DATA
sync2:rcall pulse
dec loop
brne loop21
cbi PORTD, DATA ;CE
cbi PORTD, CE
ret




;***вывод цифры на индикатор***
vyvdig: ; ret ;технологический возврат
ldi loop,0x04
byte_c:rol temp
brcs h_level
cbi PORTD,DI
rjmp synhro
h_level:sbi PORTD,DI
synhro:sbi PORTD,SK
ldi temp1, 0x10;
rcall zaderzh
cbi PORTD,SK
ldi temp1, 0x20
rcall zaderzh
dec loop
brne byte_c
ldi temp1, 0x40
rcall zaderzh
cbi PORTD, DI ;SK
ret
;*************************
; Запись в ЕЕПРОМ
;**************************
EEwrite: sbic EECR, EEWE
rjmp EEwrite
out EEAR, temp
out EEDR, temp1
sbi EECR, EEWE
ret
;***********************
; Чтение из памяти
;***********************
EEread: sbic EECR,EEWE
rjmp EERead
out EEAR,temp
sbi EECR,EERE
in temp,EEDR
ret
;*********************
; пауза
;*********************
pause_ro: ; ret ;технологический возврат
ldi temp1, 0xFF
retu1:ldi loop, 0xFF
retu2:dec loop
brne retu2
dec temp1
brne retu1
dec temp
brne pause_ro
ret
;*********************
; синхроимпульс
;*********************
pulse:sbi PORTD, CL
ldi temp1,0x1F
zad1:dec temp1
brne zad1
cbi PORTD, CL
ldi temp1,0x1F
zad2:dec temp1
brne zad2
ret

zaderzh: ;ret ;технологический возврат
dec temp1
brne zaderzh
ret
;**********************************************
;подпрограмма пересчёта НЕХ- десятичное число
;**********************************************
decdig:ldi temp,-1
minus:sub mult_l, temp16_l
sbc mult_h, temp16_h
inc temp
brsh minus
add mult_l, temp16_l
adc mult_h, temp16_h
ret


.eseg
.org 0

fmin:
.db 0x2C, 0x88 ;0x0F, 0xA0 ;20000/5=4000
fmax:
.db 0x2c, 0xEC ;0x33, 0x33 ;65535/5=13107
if_freq:
.db 0x08, 0x5C ;10700/5=2140
ch1:
.db 0x2C, 0x88
ch2:
.db 0x2C, 0x88
ch3:
.db 0x2C, 0x88
;ch4:
;.db 0x33, 0x32

.db "(c)Temerev2003.20_65_step5"


394. Dikoy, 27.03.2007 16:22
КРОКОДИЛ
просидел почти двое суток над Кодевиженом и ВМлабом но так и не смог в них разобратся.
Я ж те говорил, что напишу прошивку. Ты разберись с синтезатиором - нафига там те делители и что в них надо писать. Я ж не знаю как он работает! Битные посылки сформироватьт могу, но надо же знать, на что они влияют в самом синтезаторе.
С помошью промтап можно и без знания английского разобраться. У меня знакомый французский учил и ничё, переводит...

395. Sony_Sony, 27.03.2007 16:30
Dikoy
КРОКОДИЛ
просидел почти двое суток над Кодевиженом и ВМлабом но так и не смог в них разобратся.


Ты делал пример с заглавной страницы proavr.narod.ru ? Что конкретно не получилось ?

Добавление от 27.03.2007 16:49:

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

Вот почитайте, я начал делать задачу по синтезатору lmx2316 и програмной
реализации последовательной передачи данных.

av r1 2 3 .n m. ru/z 1 2.h tm

В синтезатор нужно загонять по 21 биту начиная со старшего.
В задаче описан расчет чисел деления частоты.

396. Xradio, 27.03.2007 17:00
КРОКОДИЛ
Сейчас попробую вставить
Это ассемблер - самый простой язык из всех языков. Его лучше в AVRstudio "вставить". И по шажкам посмотри как работает программа и меняет все внутренности микроконтроллера. Многое сразу поймешь.

397. Sony_Sony, 27.03.2007 17:02
Xradio
Многое сразу поймешь.

Сумлеваюсь.

398. КРОКОДИЛ, 27.03.2007 17:07
Dikoy
Ты разберись с синтезатиором -
Да вот пытаюсь.
Я ж не знаю как он работает!
Вобщем приметно так: частота кварца делится неизменяемым коофициентом деления до шага сравнения -в нашем случае до 12,5 килогерца, а частота ГУНа делится делителем с переменным коофициентом деления тоже до частоты сравнения тоесть 12,5кгц. Пример:170Мгц разделить на 0,0125мгц=13600, а если нам нужна частота 170,0125мгц то коофицент деления будет уже 13601 и так далее. Обе частоты, деленная от кварца и деленная от ГУНа поступают на систему сравнения частоты и фазы. А что нужно писать незнаю

Добавление от 27.03.2007 17:13:

Xradio
Его лучше в AVRstudio "вставить".
Хорошо -ночью скачаю попробую.

399. Sony_Sony, 27.03.2007 17:14
lmx2316 - последовательная передачи данных. начало
av r1 2 3 .n m. ru/z 1 2.h tm

400. Xradio, 27.03.2007 17:22
КРОКОДИЛ
ночью скачаю попробую
Я уже проверил, работает. Будут вопросы - задавай.

401. КРОКОДИЛ, 27.03.2007 18:06
Dikoy
С помошью промтап можно и без знания английского разобраться
Так он на программах кнопки не переводит, есть у меня хорошая програмка специально для кнопок Babylon6 но она поработала несколько дней и начала просить денег -сволочь такая.
Xradio
Будут вопросы - задавай.
Хорошо.

402. Xradio, 27.03.2007 19:11
Sony_Sony
imho неудачно выбрал пример с частотой сравнения 1.25 кГц. Синтезатор имеет очень важный параметр - время установления частоты. Дело в том, что процесс этот имеет колебательный характер и жестко связан с временем петлевого фильтра ФАПЧ. Чем ниже частота сравнения, и больше постоянная времени, тем дольше будет устанавливаться частота VFO. Поэтому, если назначение твоего синтезатора - FM связь, то такой мелкий шаг не нужен, поскольку разнос между каналами не может быть меньше 12.5 kHz. Его и выбери в расчетах - всё будет ближе к реальным задачам, да и примерчик упростится для расчетов (1,2,3,... 31)
Еще насчет неизменного твоего стиля: "Постарайтесь четко понять что означают эти интервалы и обозначения". Кому надо, тот поймет с одного взгляда на диаграмму, а людям никогда не видившим осциллограф, что Защёлка, что Прищепка - монописуально... Они читать это не будут

403. Sony_Sony, 27.03.2007 19:43
Xradio
такой мелкий шаг не нужен, поскольку разнос между каналами не может быть меньше 12.5 kHz.

Научи как в lmx2316 сделать частоту сравнения 12.5 kHz при частоте такта 10245 КГц ?

КРОКОДИЛ
до частоты сравнения тоесть 12,5кгц. Пример:170Мгц разделить на 0,0125мгц=13600, а если нам нужна частота 170,0125мгц то коофицент деления будет уже 13601 и так далее

А то что ты просил - 10245 КГц как поделить чтоб получить 12,5кгц ???

404. Dikoy, 27.03.2007 21:34
Sony_Sony
В синтезатор нужно загонять по 21 биту начиная со старшего.
Дык про это я ещё на прошлой странице писал
Меня интересовало, какой из 3 регистров на что (физически) влияет. У крокодила то затык был в прицеплении МК и написании прошивки, вот я и предложил ему помощь в этом, если он объяснит, какие значения в эти регистры надо писать. Точнее - что эти значения в итоге дают.

Xradio
Это ассемблер - самый простой язык из всех языков.
Подразумевающий знание всех регистров, битов и т.д.
Не знаю, сколько времени надо на замигивание светодиода на асме с полным отсутствием познаний в программировании, но много

405. Sony_Sony, 27.03.2007 22:04
Dikoy
Sony_Sony
В синтезатор нужно загонять по 21 биту начиная со старшего.
Дык про это я ещё на прошлой странице писал



Я отдута и списал !

406. Xradio, 27.03.2007 23:03
Sony_Sony
Не делится целочисленно? Значит и не надо. Если это "Лен", насколько я помню, у них вообще одно преобразование, 455 кГц нет. А опорный кварц для синтезатора вообще-то должен быть очень точный и термостатированный. TCXO - модуль. Как-то сложилась традиция применять их на частоту 12800 кГц.

407. Sony_Sony, 27.03.2007 23:09
Я делаю не по традиции а по ТехЗаданию ! А оно от КРОКОДИЛА поступило несколько страниц назад и там указана желательная чатота такта 10245 КГц.

Добавление от 27.03.2007 23:16:

Xradio
ассемблер - самый простой язык из всех языков.

Мне Си кажется проще и удобней.

Вот пример - мигалка светодиодами PORTB на IAR

код:

// Include I/O definition file

#include <ioavr>
#include <intrinsics>

int main( void )
{
unsigned char led;

PORTB = 0xFF; // вписать единицы во все биты Порт_В

led = 1; // начинаем с LED0 на PB0

DDRB = 0xFF; // Сделать все выводы PORTB выходоами

while(1) // бесконечный цикл
{
PORTB = ~led; // инвертировать LED так как светодиоды загораются при "0" на ножке

led <<= 1; // Следующий светодиод - делаем сдвиг влево на 1 бит

if (!led)
led = 1; // если led перешла с 255 в 0 то снова LED0

__delay_cycles(500000); // Пауза 500 000 тактов процессора

}
}

408. Xradio, 27.03.2007 23:46
Sony_Sony
Мне Си кажется проще и удобней
Дело вкуса, и времени. Конечно быстрее писать на Си, кто ж спорит? Но судя по вот такому заявлению:
Dikoy
Не знаю, сколько времени надо на замигивание светодиода на асме с полным отсутствием познаний в программировании, но много
ситуация уже близка к катастрофической...
Если Сишник не владеет ассемблером, не знает как на самом деле работает камень... то огребаться и огребаться конфам тупейшими затыками горе-программистов-железячников...

409. Sony_Sony, 27.03.2007 23:47
ИМХО - проблема в том что читать не желают.

410. Xradio, 28.03.2007 00:01
Sony_Sony
читать не желают
А ты не предполагаешь, что делая добро людям, на самом деле наносишь вред?
Попробую объяснить вышезаявленное.
Если человека кормить только мягкой, уже пережёванной пищей, отрыжками так с-зть, то он не сможет есть настоящее мясо. А тем более сам охотиться на это мясо... И зубы у него выпадут. Останеться только глотка и ж... в тщедушном тельце

Добавление от 28.03.2007 00:06:

Так чта... уподобляясь Минздраву, можешь поместить это в качестве эпиграфа на шапку своего сайта.

411. КРОКОДИЛ, 28.03.2007 00:07
Sony_Sony
А то что ты просил - 10245 КГц как поделить чтоб получить 12,5кгц ???
Ну я позже оговорил что если не получится то можно в принципе ставить любой кварц на усиотрение програмиста, просто мне в трансивере придется ставить еще один кварц. Но можно применить и кварц на 10,250 -тогда кофицент будет 820, а сменить фильтры ПЧ это не проблема.

412. An_private, 28.03.2007 00:08
Xradio
А ты не предполагаешь, что делая добро людям, на самом деле наносишь вред?
зато хорошо развивает психическую устойчивость и умение пользоваться поиском - без этого на его страничке делать нечего

413. Xradio, 28.03.2007 00:12
КРОКОДИЛ
а сменить фильтры ПЧ это не проблема
Еще какая проблема!

414. КРОКОДИЛ, 28.03.2007 00:14
Xradio
Не делится целочисленно? Значит и не надо. Если это "Лен", насколько я помню, у них вообще одно преобразование, 455 кГц нет. А опорный кварц для синтезатора вообще-то должен быть очень точный и термостатированный. TCXO - модуль. Как-то сложилась традиция применять их на частоту 12800 кГц.
Не тот синтезатор который проэктирует ('Dikoy') будет ставится далеко не на ЛЕНы а на более современные трансиверы. А на ЛЕНы будет ставится синт исходник которого я сегодня приводил

Добавление от 28.03.2007 00:17:

Xradio
Еще какая проблема
У нас фильтры есть на рынке любые -даже заказывать не нужно А перекрутить 5кгц глядя на экран характериографа вообще мелочи.

415. Xradio, 28.03.2007 00:19
КРОКОДИЛ
который проэктирует ('Dikoy')
А чего его проЭктировать? У тебя же есть уже исходник с достаточными комментариями чтобы применить в любом трансивере. Чуть подредактировать. А в дальнейшем ты и сам допишешь всякие "навороты"

416. КРОКОДИЛ, 28.03.2007 00:19
Sony_Sony
ИМХО - проблема в том что читать не желают.
Так сделай читабельный сайт -я тебе уже говорил -мухи отдельно, варенье отдельно, и котлеты тоже -тогда посетителей будет море.

417. Xradio, 28.03.2007 00:21
КРОКОДИЛ
А перекрутить 5кгц глядя на экран характериографа вообще мелочи.
Что-то я престал тебя понимать... Колись, какой стаж в радиотехнике?

418. КРОКОДИЛ, 28.03.2007 00:27
Xradio
А чего его проЭктировать? У тебя же есть уже исходник с достаточными комментариями чтобы применить в любом трансивере. Чуть подредактировать. А в дальнейшем ты и сам допишешь всякие "навороты"
Так тамже микросхема не та -там стоит LM7001 -какраз только для ЛЬНОВ. Да и снята она уже с производства. И камень АТ90 -тоже мне эго рассоветовали здесь применять, а навороты мне не нужны -наоборот я буду их на ЛЕНы без дисплеев ставить -тоесть задавать один канал памяти и все, а дисплей и клавиатуру нафиг! - иначе потом головной боли не избежать!

Добавление от 28.03.2007 00:28:

Xradio
Что-то я престал тебя понимать... Колись, какой стаж в радиотехнике?
30лет.

419. Xradio, 28.03.2007 00:30
КРОКОДИЛ
30лет
Я так и думал что серьезный, но объясни тогда, как влегкую "перекрутить" кварцевый фильтр.

Добавление от 28.03.2007 00:35:

КРОКОДИЛ
тамже микросхема не та -там стоит LM7001
Там есть главное - алгоритм, и он на ассемблере. Распечатай описание команд AVR, положи перед глазами и читай текст программы. Нет ничего проще!

420. Dikoy, 28.03.2007 00:40
Xradio
Если Сишник не владеет ассемблером,
Владеет, но не пользуется уже лет 5... Разьве что для вылавливания ляпов компилятора когда счёт идёт на байты ПЗУ.

не знает как на самом деле работает камень
А вот нафига мне писать sbi, если можно написать portB1.1`; что монопенисуально, но намного понятней?
Про вычисления вообще молчу.
А опасения мои были связаны не с миганием самим светодиодом, а настройками портов и всех потрохов. В том же вижне это можно сделать вообще не зная, что такое регистр. В асме не прокатит...

421. Sony_Sony, 28.03.2007 00:46
Xradio
Если человека кормить только мягкой, уже пережёванной пищей

А почему ТОЛЬКО ? Курс это первые шаги.

Добавление от 28.03.2007 00:48:

Xradio
уподобляясь Минздраву, можешь поместить это в качестве эпиграфа на шапку своего сайта.

Дык !!! У меня и так в САМОМ начале написано:

самые первые шаги ...

422. КРОКОДИЛ, 28.03.2007 00:53
Xradio
Я так и думал что серьезный, но объясни тогда, как влегкую "перекрутить" кварцевый фильтр.
Добавление от 28.03.2007 00:35:

Так зачем же фильтр крутить то? Я же писал -фильтры на базаре любые! - если в синте будет кварц 10,250 то ставим на вторую ПЧ соответственно фильтр на 450кгц и слегонца подстраиваем соответствующие контура, а коллеги и не подстраивают -все равно работает в пределах халам/балам.

423. Sony_Sony, 28.03.2007 00:53
КРОКОДИЛ
Sony_Sony
ИМХО - проблема в том что читать не желают.

Так сделай читабельный сайт


Господи !

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

424. Xradio, 28.03.2007 00:55
Dikoy
нафига мне писать sbi, если можно написать portB1.1`;
set bit - понятно даже дураку, а ' - это что?
Си требует серьезного периода освоения "птичьих" условностей и символов с запоминанием их.
Ассм требует только одного - листочка распечатки команд. При прочих равных.
И хорошо что ты знаешь ассм, поэтому ты легко работаешь из высокоуровнего. А представь, что ты не знаешь как на самом деле процессор делит или умножает число на 2.
А на самом деле таких много. Скажешь - "и нафиг не надо знать сдвиг байта влево-вправо, написал закорючку - получил результат". А вот теперь и оцени: кто напишет последовательный вывод числа быстрее начинающий ассмщик или начинающий крокодил на Си.

425. Sony_Sony, 28.03.2007 00:55
Dikoy
когда счёт идёт на байты ПЗУ.

Советую сразу удвоить ресурсы железа.

426. Xradio, 28.03.2007 00:57
Sony_Sony
Курс это первые шаги Ну, тогда за то, чтобы сильных орлов тебе вскормить!

427. Sony_Sony, 28.03.2007 00:57
Xradio
Dikoy
нафига мне писать sbi, если можно написать portB1.1`;
set bit - понятно даже дураку, а ' - это что?


Наверно имелось ввиду - PORTB.1 = 1;

428. КРОКОДИЛ, 28.03.2007 00:59
Dikoy
Не знаю, сколько времени надо на замигивание светодиода на асме с полным отсутствием познаний в программировании, но много
Так отож! Ну что так и не прояснилось ничего с регистрами? Я честное слово ничего в этом даташите понять не могу даже с переводчиком!

429. Sony_Sony, 28.03.2007 01:00
Xradio
А представь, что ты не знаешь как на самом деле процессор делит или умножает число на 2.

Скажешь - "и нафиг не надо знать сдвиг байта влево-вправо, написал закорючку - получил результат".


CVAVR деление или умножение на степень двойки сам сдвигами сделает.

Надеюсь и другие компилеры тоже.

430. Xradio, 28.03.2007 01:00
КРОКОДИЛ
на вторую ПЧ соответственно фильтр на 450кгц
ФСС на контурах? Что это за трансивер ты делаешь?

431. Sony_Sony, 28.03.2007 01:03
КРОКОДИЛ
Я честное слово ничего в этом даташите понять не могу даже с переводчиком!

Я ж написал как рассчитывать коэффициенты, а как они расположены в 21 битных числах в даташите картинками показано. Что переводить ?

432. КРОКОДИЛ, 28.03.2007 01:04
Sony_Sony
Господи !

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

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

433. Sony_Sony, 28.03.2007 01:05
КРОКОДИЛ
Dikoy
Не знаю, сколько времени надо на замигивание светодиода на асме с полным отсутствием познаний в программировании, но много

Так отож!


Дак попробуй пока разобрать пример на Си выше - мигание светодиодами. только не говори ни чего не понял, а пиши ЧТО КОНКРЕТНО не понятно. Си для МК на стр. /05.htm

434. Xradio, 28.03.2007 01:06
Sony_Sony
CVAVR деление или умножение на степень двойки сам сдвигами сделает.
Еще бы по другому...
я о том, что Си не дает программисту некоторых очень важных знаний железа.

435. КРОКОДИЛ, 28.03.2007 01:06
Sony_Sony
Я ж написал как рассчитывать коэффициенты, а как они расположены в 21 битных числах в даташите картинками показано. Что переводить ?
Я еще не успел глянуть -яж писал у меня интернет гунявый.

436. Sony_Sony, 28.03.2007 01:12
Xradio
я о том, что Си не дает программисту некоторых очень важных знаний железа.

Вы не подумайте что я спорю с вами. Я просто свое мнение высказываю.

Думаю знания о железе дает даташит. А Си и АСМ это просто язык записи и чтения регистров и операций над числами.

437. КРОКОДИЛ, 28.03.2007 01:14
Sony_Sony
а пиши ЧТО КОНКРЕТНО не понятно. Си для МК на стр. /05.htm
Ну вопервых в кодевижене нет нужной мне микросхеммы -AT90S1200, во вторых не получается изначально создавать проект не в кодевижене не в ВМлабе не в МПлабе -я тебе уже про это писал. И если хочешь оьяснить то объясняй здесь.

Добавление от 28.03.2007 01:18:

Xradio
ФСС на контурах? Что это за трансивер ты делаешь?
Блин, да нет же -на обычном керамическом фильтре, а крутить нужно контур второго смесителя.

438. Xradio, 28.03.2007 01:28
КРОКОДИЛ
а крутить нужно контур второго смесителя
Слушай, не обижайся только... Брось ты это дело, пока не наделал глупостей в виде непотребной техники. Почитай лучше литературу, поизучай схемы, попрограммируй чего-нить... Узнай, что такое "контур второго смесителя" на самом деле. А я спать пойду.

439. КРОКОДИЛ, 28.03.2007 01:31
Xradio
Я уже проверил, работает. Будут вопросы - задавай.
Нашел у себя на диске АВРстудию -3.21 установил. Не получается изначально загнать туда исходник чтобы он откомпилился.
Там есть главное - алгоритм, и он на ассемблере. Распечатай описание команд AVR, положи перед глазами и читай текст программы. Нет ничего проще!
Мне мнОгое непонятно -что такое побитное ИЛИ, что такое вообще ИЛИ или просто И

Добавление от 28.03.2007 01:35:

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

440. Sony_Sony, 28.03.2007 01:48
КРОКОДИЛ
что такое побитное ИЛИ, что такое вообще ИЛИ или просто И

Логические операции и побитные, поразрядные операции на proavr.narod.ru/05.htm

441. Xradio, 28.03.2007 01:48
Открываешь новый проект, называешь как тебе надо, выбираешь проц и симулятор где спрашивают железо для программирования. В появившееся пустое окно уже с именем, которое ввел, копируешь исходник.
нажимаешь F7.
В пути где создал проект появятся "продукты" творчества. В том исходнике ошибок нет, поэтому получишь сразу добро.
Далее войди в меню Debug и запускай пошаговый трассировщик, F11 кажется. Топчи кнопарь и наслаждайся. В окне слева у тебя будут все внутренности камня. Только границу вправа сдвинь, чтобы видеть биты. Туда можешь сам ставить птички если программа требует обслуживание внешнего мира - кнопок например. А в длинных циклах задержек (запаришься топтать) подкорректируй заполнение регистров пересчета (птичками) или вообще, закомментируй эти задержки. Автор проги кстати оставил там закомментированные "технологические возвраты" - сразу на метках. Вот их раскомментируй. В общем посиди, покумекай. - ингтересно - жуть. черт, уже неделю по три часа сплю.

442. Sony_Sony, 28.03.2007 01:50
КРОКОДИЛ
не получается изначально создавать проект не в кодевижене

Вот пример - proavr.narod.ru/z3.htm

На каком КОНКРЕТНО этапе не получается и ЧТО ?

443. Xradio, 28.03.2007 01:56
КРОКОДИЛ
А трансиверов я за свою жизнь перекрутил тысячи!
Понимаю, но все же серьезные разработчики не допускают несущую не по центру полосы прозрачности фильтра на FM, и не подстраивают туда контур квадратурного детектора...

444. КРОКОДИЛ, 28.03.2007 01:58
Sony_Sony
Вот пример - proavr.narod.ru/z3.htm

На каком КОНКРЕТНО этапе не получается и ЧТО ?

Вернее получается создать пустой проэкт но не получается ничего с ним сделать! Щас пойду попробую сделать как Xradio обьяснил может получится.

445. КРОКОДИЛ, 28.03.2007 02:11
Xradio
С самого начала: Допустим мы вместо кварца 10,245 поставили 10,250 -соответственно вторая ПЧ ИЗМЕНИЛАСЬ и стала не 455кгц а 450кгц ,-поэтому вместо фильтра второй пч на 455кгц ставим фильтр купленный на базаре на 450 кгц. А в современных однокристальных приемниках и крутить нечего см. рис. -достаточно только поменять фильтр F3 на 450 килогерц. А я еще меняю катушку L5 тоже на керамический резонатор и подстраиваю конденсатором -так технологичней.

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

446. Xradio, 28.03.2007 02:28
КРОКОДИЛ
И точно! вспомнил. Есть такие фильтры на 450 кГц., редкость в продаже, но есть. В некоторых панасониках на 900 мег применялись.
Но. 465 - советских времен, 455 - буржуйская масса, и 450 - специально для именно такого случая экономии кварцев в радиомодуле. И всё. Не любые на базаре, как ты говоришь. Есть разумеется и на другие близкие частоты, но на них расчитывать вряд ли стоит.
Если вместо контура керамический фазосдвигатель будешь ставить, то его тоже надо на 450 - именно из тех же блочков от панасов, ну или "если так богат ваш базар" кондеем ты его не подстроишь нормально - частотная линейность характеристики испортится и звук будет плохим.

447. КРОКОДИЛ, 28.03.2007 02:51
Xradio
кондеем ты его не подстроишь нормально
НЕ ставлю именно на 450 килогерц -у нас их действительно много и самое главное никому не нужны, а кондер подбирается по максиуму громкости.

Добавление от 28.03.2007 02:54:

Блин опять у меня не получается вставить исходник в окно проэкта!

Добавление от 28.03.2007 03:10:

ПРИ попытке компилировать выдает - File access error

Добавление от 28.03.2007 06:05:

Xradio
Можешь описать более подробно процедуру открывания и вставки? Може я чего нибудь не так делаю? А может у меня слишком старая версия? Может нужно скачать новую?

448. Xradio, 28.03.2007 06:15
КРОКОДИЛ
Куда уж подробней? Лучше ты опиши последовательность действий и что на экране. Или студентку ли какую (не обязательно электроника) попроси помочь.

Добавление от 28.03.2007 06:35:

КРОКОДИЛ
по максиуму громкости Как-то непонятно там делаете... На прямом участке ветви характеристики частота - напряжение не может быть места "максимальной громкости", если только не меняется крутизна (добротность) Настраивать этот узел надо так: встаем осциллографом на выход частотного детектора, видим шум. Подстройкой контура добиваемся его симетричности. Подаем на вход приемника, или 1 ПЧ, немодулированную точную несущую, убеждаемся что линия (по постоянному току) с исчезнувшим шумом располагается точно по оси бывшей шумовой. Меняем частоту генератора на +2.5 -2.5 кГц. Измеряем пропорциональное отклонение луча осциллографа вверх и вниз. Должно быть примерно одинаковое. Включаем модуляцию 3-5 кГц. - синусоида на выходе должна быть красивой.

449. КРОКОДИЛ, 28.03.2007 06:40
Xradio
Или студентку ли какую (не обязательно электроника) попроси помочь.
А лучше штук пять студенток! Вопшем создаю проект пустой пототом открваю пустой файл, копирую туда исходник, нажимаю на асеемблер и выскакивает табличка с надписями File access error -может гдето надо было галочку поставить или расширение какое нить? Дело в том что у меня с МПлабом точно такая фигня была -исходник на РИК не компилился -дык я его потом отдельно MPASMом откомпилил.

450. no_name, 28.03.2007 06:41
Нужна помощь, в VMLabe 3.12 не выставляется флаг ICF3 в ETIFR, при этом когда приходит фронт текущее значение таймера 3 заносится в регистры ICR3L и ICR3H.
В AVR Studio вроде все работает (если ручками выставить 1 в бит PIND #3 )
В чем может быть дело?

ETIFR не только не заполняется (всегда 0х00), но также не хочет читаться, Хотя в АВР студии все читается.

Код:
lds Temp_1, ETIFR
sbrs Temp_1,5
rjmp k0

451. КРОКОДИЛ, 28.03.2007 06:49
Xradio
если только не меняется крутизна (добротность
Дык кондер и нужен чтоб снизить немножко добротность, - а то слишкоМ круто получается!

452. Xradio, 28.03.2007 07:29
КРОКОДИЛ
Вопшем создаю проект пустой пототом открваю пустой файл, копирую туда исходник,
как ты пустой файл открываешь?
При создании нового проекта Студия сама откроет тебе рабочее окно для написания этого проекта. В него и копируешь текст исходника.

Добавление от 28.03.2007 07:34:

В магазине радиодеталей спроси диск Atmel, возможно дадут, поскольку их бесплатно рассылают всем желающим. Там Студия посвежее. Хотя, для твоего 90S1200, должно быть в самой ранней.

Добавление от 28.03.2007 07:45:

Отладочная среда MPLAB предназначена для создания и отладки программ для PIC контроллеров фирмы MICROCHIP.
Крокодил, ты прикалываешься что ли?

453. Sony_Sony, 28.03.2007 08:42
КРОКОДИЛ
File access error

"Ошибка доступа к файлу" - какого-то файла не хватает.

454. КРОКОДИЛ, 28.03.2007 09:01
Xradio
Отладочная среда MPLAB предназначена для создания и отладки программ для PIC контроллеров фирмы MICROCHIP.
Крокодил, ты прикалываешься что ли?

Дык а я чего писал?
КРОКОДИЛ
Дело в том что у меня с МПлабом точно такая фигня была -исходник на РИК не компилился -дык я его потом отдельно MPASMом откомпилил.
С добрым утром!
При создании нового проекта Студия сама откроет тебе рабочее окно для написания этого проекта. В него и копируешь текст исходника.
В файл именно проекта ничего нельзя скопировать, а в пустое окно ASM файла можно -вот туда я и копировал исходник -он не компилится, тогда я его ADD к проекту -он пристегивается но опять не компилится. Ладно, ночью скачаю самую последнюю версию, а там видно будет.

455. Xradio, 28.03.2007 09:07
КРОКОДИЛ РИК - ? PIC
-он не компилится как ты это делаешь?

456. КРОКОДИЛ, 28.03.2007 09:21
Xradio
как ты это делаешь?
Ну клавиша F7 или бульд алль и в проекте "ассембле" нажимаю, - все пошел я спать -впереди тяжёлый трудовой день.

457. Sony_Sony, 28.03.2007 09:24
КРОКОДИЛ
Ладно, ночью скачаю самую последнюю версию

Ужас ! 50 или более мегабайт качать когда есть VMLAB 4 Мб и поддерживает 1200.

В курсе написано - открой проект пример в ВМЛАВ - проверь что он компилится, а потом подмени ему исходник на свой ! И укажи свой процесор.

458. КРОКОДИЛ, 28.03.2007 09:27
Во, точно так и сделаю! Правда я хотел посмотреть как кишки у процессора шевелятся но видно не судьба!

459. Sony_Sony, 28.03.2007 09:35
КРОКОДИЛ
я хотел посмотреть как кишки у процессора шевелятся но видно не судьба!

Да ни фига ты курс вАААщене читал !!!

Потому что в САМОМ начале заглавной страницы написано что

VMLAB это симулятор для AVR !

Т.е. VMLAB специально для просмотра КИШКОВ !!!

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

Добавление от 28.03.2007 09:37:

Вы самую первую картинку не видели чтоль ???

av r1 23.n m.r u/im g/11_full.png

На ней куcочка "кишков" не видно ?

460. Dikoy, 28.03.2007 12:28
Xradio
и нафиг не надо знать сдвиг байта влево-вправо, написал закорючку - получил результат
вот именно Взял понятную ТЕКСТОВУЮ функцию из библиотеки и вывел. Причём все флаги и т.д. проверит функция. На ассме надо писать всё вручную.

кто напишет последовательный вывод числа быстрее начинающий ассмщик или начинающий крокодил на Си.
Я ассм выучил последним, после паскаля и Си. И никогда себя по этому поводу не чувствовал неполноценным И сейчас меня никто не заставит писать на асме - только если код (кусок кода) где надо сделать быстро и именно то, что надо.

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

Наверно имелось ввиду - PORTB.1 = 1;
Нэа, имелась ввиду инверсия.

CVAVR деление или умножение на степень двойки сам сдвигами сделает.
Вот именно! Даже примитивные компиляторы генерят очень неплохой код! И сваять его можно за час с использованием книжки на 40 страниц - шлольного учебника по Си. А сколько на ассме долбить придётся?...

461. Sony_Sony, 28.03.2007 12:36
Dikoy
Ещё и микро спейс исполнения поставить, на всякий случай...

Сдуру бывает и лингам ломают ...

462. Dikoy, 28.03.2007 12:43
Xradio
я о том, что Си не дает программисту некоторых очень важных знаний железа.
А так ли они нужны начинающему?

КРОКОДИЛ
Может в русских папках дело?
Попробуй прект скинуть на диск, в корень, в англоназванную папку, чтоб русского в адресе небыло.

463. КРОКОДИЛ, 28.03.2007 21:45
Sony_Sony
В курсе написано - открой проект пример в ВМЛАВ - проверь что он компилится, а потом подмени ему исходник на свой ! И укажи свой процесор.
Щас вспомнил -я с самого начала так и делал -возле каждой строчки исходника появляется красный восклицательный знак и в отдельной табличке куча матюков! Исходник для АТ90 на асемблере то написан! Или ВМлаб и асемблер поддерживает?

Добавление от 28.03.2007 21:59:

Dikoy
Может в русских папках дело?
Нет,- эту фичу с русскими папками я хорошо знаю, и поэтому все папки ложу непосредственно на диск С: и обзываю английскими буквами. Причем готовый проэкт я могу открыть любой, а если бкру исходник из этого же проэкта отдельно то не могу его потом вставить так чтобы он откомпилировался. -Видно как то не так вставляю.

464. Sony_Sony, 28.03.2007 22:06
КРОКОДИЛ
возле каждой строчки исходника появляется красный восклицательный знак и в отдельной табличке куча матюков!

Наверно ты исходник воткнул в файл проекта .prj

Или ВМлаб и асемблер поддерживает?

Конечно ассемблер.

Добавление от 28.03.2007 22:10:

КРОКОДИЛ,

А сколько тебе еще МЕСЯЦЕВ (или лет... ) требуется чтоб заглянуть таки
в папку примеров C:\VMLAB\AVR_demo и увидеть МНОЖЕСТВО файлов с расширением .ASM
и понять что это !очевидно! исходники на асме ...

465. Xradio, 28.03.2007 22:21
Ну, прямо подвох какой-то. Очень странно. Обычно люди с таким опытом в электронике обладают недюженной настырностью... И неуспокаиваются, если должно работать, у всех работает, а у него не неработает, пока не победят.

466. Sony_Sony, 28.03.2007 22:28
Xradio
Обычно люди с таким опытом в электронике

30 лет !

467. Xradio, 28.03.2007 23:06
Sony_Sony Как и у меня, если отсчет вести от первой самостоятельно спроЭктированной, изготовленной и заработавшей "мигалки".

468. Dikoy, 28.03.2007 23:59
Sony_Sony
Слухай, не помнишь на память, у АТ45 линии SPI в Z встают, когда она не выбрана?
Что-то в дш подтверждения найти не могу...
И ещё - у тебя говорилось, что есть под них файловая система. Можешь на мыло слить? Ведь наверняка есть в казиматах

Добавление от 29.03.2007 00:02:

А, нашёл наконец:
The CS pin must remain low during the loading of the
opcode, the address bits, and the reading of data. When
the end of a page in main memory is reached during a main
memory page read, the device will continue reading at the
beginning of the same page. A low-to-high transition on the
CS pin will terminate the read operation and tri-state the
SO pin.
Глубоко запрятали, передасты...

469. КРОКОДИЛ, 29.03.2007 01:42
Sony_Sony
Наверно ты исходник воткнул в файл проекта .prj

Xradio

Ну, прямо подвох какой-то. Очень странно.

Блин, меня сбивало с толку то, что в окне с расширением .НЕХ появляется шаблон .ASMовского файла -непорядок! -как это обьяснить? Потом плюнул на все и выкинул из .НЕХовского окна все кишки, а вместо них вставил свой исходник, нажал на кнопку и сразу все откомпилилось! Правда выскочило несколько матюков -чтото насчет векторов А в исходной папке сразу появился .НЕХфайл с прошивкой для програматора! Сравнил с авторским .НЕХом -все точно совпадает! Правда появился еще загадочный файл LIS -непонятно что с ним делать? А эмуляцию так и несмог включить -сразу не получилось.

470. Sony_Sony, 29.03.2007 10:40
КРОКОДИЛ
А эмуляцию так и несмог включить - сразу не получилось.

Ты пойми ! по такому сообщению помочь не возможно !

Пиши конкретно ЧТО не работало, что произошло, что было в окне "меседжис" (шаг 2 пункт 4)

ШАГ 3 на заглавной странице курса ты читал ? У тебя это ?

Добавление от 29.03.2007 10:45:

Dikoy
есть под них файловая система. Можешь на мыло слить?

отправил на nm1456t01

Добавление от 29.03.2007 10:47:

КРОКОДИЛ
Правда появился еще загадочный файл LIS -непонятно что с ним делать?

Надо добавить к нему окончание ТИНГ. Это подробности процесса ассемблирования.

Добавление от 29.03.2007 10:51:

======

Подробно о симуляции в VMLAB написано в задаче-упражнении 3 - /z3.htm

471. КРОКОДИЛ, 29.03.2007 11:00
Sony_Sony
Пиши конкретно ЧТО не работало, что произошло, что было в окне "меседжис" (шаг 2 пункт 4)
Светофор не загорелся! "Линия 691: ошибка Синтаксиса"

Добавление от 29.03.2007 11:15:

Sony_Sony
Надо добавить к нему окончание ТИНГ. Это подробности процесса ассемблирования.
Куда именно добавить? И что такое ТИНГ?- подробней можно?

Добавление от 29.03.2007 11:51:

Sony_Sony
Еще одна надпись -Вектор ПЕРЕНАБОРА должен содержать RJMP инструкцию

472. Бэтмэн, 29.03.2007 13:37
Сони шутит. Он листинг имеет в виду...

473. Dikoy, 29.03.2007 14:30
Sony_Sony
отправил на nm1456t01
Странно... Письмо 2 метра весит, а прикреплённого нет ничего... Ящик не переполнен...
Можешь переслать на nm1456t01рамблер.ру? Что-то в последнее время с мейла не доходят вложения...

КРОКОДИЛ
И что такое ТИНГ?- подробней можно?
Си - компиляторы сначала транслируют Си код в ассемблер, а потом уже этот ассм перегоняют в НЕХ. Вот в файле лис сидит тот самый асмовый код.
В коде-вижне он так и называется *.asm Причём автоматически закоментирован - открой и увидишь во что на асме превращаются твои Сишные строчки Очень удобно, особенно когда немного знаешь ассм.

Добавление от 29.03.2007 14:34:

Sony_Sony
Сейчас сам переслал на рамблер, там аттач кажет. Видимо, глюки яндекса.
Уже скачал, спасибо!

474. Sony_Sony, 29.03.2007 17:12
КРОКОДИЛ
Sony_Sony
Надо добавить к нему окончание ТИНГ. Это подробности процесса ассемблирования.

Куда именно добавить? И что такое ТИНГ?- подробней можно?


Ты спрашивал что такое LIS - я ответил добавть ТИНГ

Неужто не очевидно LIS + ТИНГ будет ЛИСТИНГ. А что он содержит я уже выше объяснил.

Добавление от 29.03.2007 17:16:

КРОКОДИЛ
Sony_Sony
Пиши конкретно ЧТО не работало, что произошло, что было в окне "меседжис" (шаг 2 пункт 4)
Светофор не загорелся! "Линия 691: ошибка Синтаксиса"


Похоже клещами нужно вытаскивать информацию

Строка 691 это в святом писании ? Или в папке WINDOWS ?

Вы полагаете у всех читающих имеется эта строка ???

Давно бы уж архив со своим проектом прицепил бы !!!

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

Dikoy
открой и увидишь во что на асме превращаются твои Сишные строчки

У него исходник на АСМ-е !

475. Dikoy, 29.03.2007 17:36
Sony_Sony
У него исходник на АСМ-е !
Знаю, я как пример сказал

476. Sony_Sony, 29.03.2007 19:20
Добавил по синтезатору LMX2316 на - av r 1 2 3.n m.r u/ z 1 2.h tm

477. КРОКОДИЛ, 30.03.2007 00:20
Sony_Sony
Неужто не очевидно LIS + ТИНГ будет ЛИСТИНГ.
Ддак я чё -дешифровальшик чтоли! -Ребусы разгадывать!
Строка 691 это в святом писании ? Или в папке WINDOWS ?
Это сообщение появлялось в окошке Messages программы VMLAB при компилировании исходника Сейчас не возникает, а вместо него Interrupt vector at address $0003 it is safer to contain RETI or RJMP, RESET vector must contain a RJMP instruction
и светофор не загорается!
Давно бы уж архив со своим проектом прицепил бы !!!
На этой конфе кроме рисунков больше ничего не прицепишь.

478. Xradio, 30.03.2007 01:05
Xradio
Ну, прямо подвох какой-то.
некто Подвох уже близко.

479. КРОКОДИЛ, 30.03.2007 01:07
Подвох подкрался незаметно...............Xradio
Точно,точно!

480. Sony_Sony, 30.03.2007 02:00
КРОКОДИЛ
На этой конфе кроме рисунков больше ничего не прицепишь.

и ни каких идей ??? какие есть сайты для обмена файлами ...

481. КРОКОДИЛ, 30.03.2007 02:44
Sony_Sony
какие есть сайты для обмена файлами ...
Незнаю где эти сайты, не доводилось ни скем обмениваться, -у меня интернет всего полгода............

482. Sony_Sony, 30.03.2007 03:02
поиск GOOGLE.com запрос: "выложить файл"

slil.ru webfile.ru

========

или открыл бесплатное мыло на mail.ru прицепил архив и
отправил письмо самому себе в этот же ящих и выложил мыло и пароль.

483. КРОКОДИЛ, 30.03.2007 03:50
Sony_Sony
Вот выложил здесь -http://slil.ru/24157825

484. Sony_Sony, 30.03.2007 05:46
1. зачем в проект VMLAB вы вписали 2 исходника АСМ ???

.PROGRAM "my_idea.asm" "sint.asm"

Достаточно одного: .PROGRAM "my_idea.asm"

2. VMLAB сообщает

* my_idea.asm, line 26: Register already defined by the .DEF directive

вот на эти строки

.def temp16_h = r30
.def dat_s= r31

===========================

Как перевести ???

"Register already defined by the .DEF directive"

ТАК КАК НАПИСАНО НА ПЕРВОЙ странице курса !!!

translate.ru дает ВЕЛИКОЛЕПНЫЙ перевод

"Регистр, уже определенный в соответствии с .DEF директивой"

======= значит r30 и r31 у вас уже определены (использованы) ранее.

Выше этого места нет ни r30 ни r31 - а есть только тескт заголовочного файла:
C:\VMLAB\include\1200def.inc

Смотрим его текст - в конце

.def ZL =r30
.def ZH =r31

значит мы не можем их использовать.

Я не силен в АСМе и не знаю как хитро поменять текст проги - так как всего 6 регситров образуют 3 виртуальных 16 битных регистра.

В тексте проги не видно ZL ZH и возможно их можно закрыть ;

Помогут любители АСМа наверняка.

485. Xradio, 30.03.2007 06:31
В AVR Studio "моя идея. асм" ругается только на путь C:\VMLAB\include\1200def.inc, а sint.asm работает без ошибок.
Один и тот же регистр можно продефайнить (обозвать) сколько угодно много раз любыми словами. Студия лишь обнаружит это и оповестит предупреждением, но ошибки не будет.

486. Sony_Sony, 30.03.2007 07:12
VMLAB тоже не ошибку дает а предупреждение. Обозвать можно много раз но данные же могут порушится если разные переменные будут использовать один регистр не контролируемо. Я написал что в проге не видно использования двух зет и возможно можно закомментировать их или оставить как есть.


\\\\\\\\\\\\\\\\\\\\


А у меня на Си в CVAVR и VMLAB уже данные передаются в синтезатор. .ru/12.htm

И файлы для CVAVR и VMLAB выложил на страничке.

Картинка симуляции очень красивая ИМХО

http://www.roboforum.ru/files/z12.png (1024x768, 119,3Kb)


487. КРОКОДИЛ, 30.03.2007 09:35
Xradio
В AVR Studio "моя идея.
Sony_Sony
VMLAB тоже не ошибку дает а предупреждение
Так симуляция, работает или нет???
1. зачем в проект VMLAB вы вписали 2 исходника АСМ ???
Не, я посто два раза подряд проэкт создавал.......кажется......

Добавление от 30.03.2007 10:08:

Xradio
Сейчас засунул VMLABовский проект в AVRстудию -заработал наконецто! Правда работает только пошагаво, доходит почти до самого низа и там зацикливается А где кишки процессора посмотреть так и не нашел -видно у меня сильно старая версия и там это не предусмотренно!

Добавление от 30.03.2007 10:45:

Sony_Sony
Почему на твоем сайте странички перестали сохранятся?

488. Sony_Sony, 30.03.2007 11:08
КРОКОДИЛ
Почему на твоем сайте странички перестали сохранятся?

Не знаю. Что-то в твоем браузере. Вот архив со страницей 12 - http://webfile.ru/1361784

489. КРОКОДИЛ, 30.03.2007 11:10
Sony_Sony
Вот архив со страницей 12
СПАСИБО!

490. Sony_Sony, 30.03.2007 11:19
Теперь нужно определить чем выбирать частоты и какие. Может многопозиционный вращающийся переключатель ?

Добавление от 30.03.2007 11:27:

КРОКОДИЛ
засунул VMLABовский проект в AVRстудию -заработал наконецто! Правда работает только пошагаво, доходит почти до самого низа и там зацикливается А где кишки процессора посмотреть

Работа со студий кратко описана внизу стр /04.htm

Возьмите прошивку .hex из студии и симулируйте его в VMLAB.

Выложите архив проекта из студии.

Добавление от 30.03.2007 16:25:

\\\\\\\\\

Отладил функцию отправки 21 бита в LMX2316 - разместил более симметрично импульсы - для красивости.

Измерены временные интервалы.

Задача там - /12.htm и там http://webfile.ru/1362173

Картинка симуляции: http://www.roboforum.ru/files/z12.png

491. Dikoy, 30.03.2007 16:43
Sony_Sony
Может многопозиционный вращающийся переключатель ?
По деньгам одинаково с кнопкой и кучкой светодиодов...
Загрузку сетки сделать с компа, через UART.

492. Sony_Sony, 30.03.2007 16:47
Дык яжышь жду что ЗАКЗЧИК пожелает !

493. КРОКОДИЛ, 31.03.2007 02:16
Sony_Sony
Dikoy

Теперь нужно определить чем выбирать частоты и какие. Может многопозиционный вращающийся переключатель ?
Дык яжышь жду что ЗАКЗЧИК пожелает !
Не, если для меня то должен быть фиксированный переключатель на 8 положений, а частоты должны заливатся с компа от 144 до 172Мгц. - правда я незнаю кто такой UART А если чисто для радиолюбительского применения то тогда дисплей клавиатура и валкодер.

494. Sony_Sony, 31.03.2007 02:24
КРОКОДИЛ
я незнаю кто такой UART

Вот такой как описан в /z4.htm и примеры в /z5.htm

495. КРОКОДИЛ, 31.03.2007 03:33
Sony_Sony
Возьмите прошивку .hex из студии и симулируйте его в VMLAB.
.hex -нехочет сволочь симулироватся, если просто открыть ее в BMlabe то все кнопки получаются неактивными, и светофор не зажигается, а если скопировать в окно .hex то выскакивает куча ругательств, и красных восклицательных знаков.

Добавление от 31.03.2007 03:38:

Sony_Sony
Выложите архив проекта из студии.
Вот выложил -http://slil.ru/24162888

496. Sony_Sony, 31.03.2007 09:55
КРОКОДИЛ
.hex -нехочет сволочь симулироватся, если просто открыть ее в BMlabe то все кнопки получаются неактивными, и светофор не зажигается

Как в файле проекта VMLAB вы включали симуляцию по одному только .hex

\\\\\\

Я не знаю что вам СТУДИЯ написала, но на сделаный ей ХЕКс VMLAB говорит тоже что и говорил про исходник :

"RESET vector must contain a RJMP instruction" - это ошибка исходника и соответственно прошивки. Поэтому нет готовности к сумуляции.

Добавление от 31.03.2007 11:33:

/////////////

В рекомендованой в курсе конференции

http://telesys.ru/wwwboards/mcontrol/index.shtml

мне помогили за 40 минут - "черная лошадь" подсказала - исходник .asm нужно модифицировать так:


.cseg
.org 0

; ====== добавка ===============
reset:
rjmp start

start:
; ====== добавка закончена =====


ldi temp, 0xFF
out PORTB,temp ;порт B на ввод


\\\\\\\\\\

Так в VMLAB ассемблируется без ошибок, но теперь возникает проблема с .OBJ файлом.

==========

Короче я очень рад что несколько лет уже использую Си ... Чего и всем рекомендую.

Добавление от 31.03.2007 11:46:

\\\\\\\\\\\\

У меня уже волосы дыбом встают !!!

Блинннннн !

Поставил СТУДИЮ новую 73 МЕГАБАЙТА !

Она выдала: "The contents of the objectfile exceeds the maximum program memory of the device"

Error loading object file _1200_studio\1200.obj

Что по-русски Размер прогши больше чем объем памяти at90s1200

Добавление от 31.03.2007 12:20:

/////////////


Короче поставил at90s2313 и вроде заработало. Вот проекта под VMLAB - avr2313_lm7001.rar

http://slil.ru/24163286

В начале проги невыносимо долгая паузв - симулировать нужно терпеливо.

либо временно этот кусок:


;*********************
; пауза
;*********************
pause_ro: ; ret ;технологический возврат
ldi temp1, 0xFF
retu1:ldi loop, 0xFF
retu2 ec loop
brne retu2
dec temp1
brne retu1
dec temp
brne pause_ro
ret

сделать так:


;*********************
; пауза
;*********************
pause_ro: ;
ret ;технологический возврат

ldi temp1, 0xFF
retu1:ldi loop, 0xFF
retu2 ec loop
brne retu2
dec temp1
brne retu1
dec temp
brne pause_ro
ret

497. КРОКОДИЛ, 31.03.2007 12:34
Sony_Sony
Как в файле проекта VMLAB вы включали симуляцию по одному только .hex
Ну указание такое же было! -взять .hex из студии всунуть в VMLAB и включить, -не включилось.............
Я не знаю что вам СТУДИЯ написала, но на сделаный ей ХЕКс VMLAB говорит тоже что и говорил про исходник :
Студия ничего не писала, в ней молча работают что ,hex, что ,asm и еще какойто файл из VMLABовского архива -без всяких возмущений!
У меня уже волосы дыбом встают !!!
У меня они уже давно дыбом стоят, -с тех пор как начал разбиратся с разными симуляторами
но на сделаный ей ХЕКс VMLAB говорит тоже что и говорил про исходник :

"RESET vector must contain a RJMP instruction" - это ошибка исходника и соответственно прошивки. Поэтому нет готовности к сумуляции.

Ну так естественно -.HEXы то одинаковые!

Добавление от 31.03.2007 12:43:

Sony_Sony
сделать так:

либо временно этот кусок
сделать так:
Ничего не понял -здесь только ret на одну строчку сместился?

Добавление от 31.03.2007 12:46:

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

498. Sony_Sony, 31.03.2007 12:49
Оказывается програ больше размера памяти всего на 1 слово - т.е. на 1 инструкцию. Я подсократил 1 инструкцию в большой паузе и все заработала для at90s1200

Вот проекта под VMLAB - avr1200_lm7001.rar http://slil.ru/24163375



Теперь нужно подключить кнопки по схемме (щас прога крутится бесконечно в опросе кнопок) и по инструкции к проекту и проверить что начнется вывод данных на индикатор - его выводы я вывел в осциллограф VMLAB.

Затем добавить в осциллограф сигналы ног управления синтезатором - PD2, PD3, PD4

И посмотреть диаграмки.

Когда все будет ОК можно будет править прогу под свои частоты.



....................


Офигеть скоко я времени потратил и народ на телесистемах напрег чуток.


КРОКОДИЛ, вот так УПОРНО нужно искать баги ! Иначе не получится каменный цветок...

Добавление от 31.03.2007 12:50:

/////////////

КРОКОДИЛ
Ну указание такое же было! -взять .hex из студии всунуть в VMLAB и включить, -не включилось.............

А там есть РУБИЛЬНИК которым включать ???

Я вас и спрашиваю КАК вы включили его в файл проекта

БУКВАМИ КАКИМИ ???

Добавление от 31.03.2007 12:52:

КРОКОДИЛ
Ничего не понял -здесь только ret на одну строчку сместился?


Я думал что вы хоть какую то книжку про АСМ уже почитали и ЗНАЕТЕ УЖЕ

что ; означает - дальше комментарий не влияющий на программу.

Добавление от 31.03.2007 12:56:

КРОКОДИЛ
из Асма в СИ

и наоборот?



В курсе ясно написано что КОМПИЛЯТОР как раз и преобразует прогу
на Си в АСМ который находится в файле ЛИСТИНГЕ !

Добавление от 31.03.2007 12:57:

КРОКОДИЛ
ret на одну строчку сместился?

Он был "комментарием" а после выхода из тени знака ;
стал ИСПОЛНЯЕМОЙ КОММАНДОЙ программы.

499. КРОКОДИЛ, 31.03.2007 13:23
Sony_Sony
Я подсократил 1 инструкцию в большой паузе и все заработала для at90s1200
А в железе то будет работать?
А там есть РУБИЛЬНИК которым включать ???
Не. -не нашёл!
БУКВАМИ КАКИМИ ???
Дык незнаю я как его включать, -в этом то и заморчка была с самого начала, -я немог запустить не один эмулятор, а потом по твоему совету стал копировать прямо в окно.......
В курсе ясно написано что КОМПИЛЯТОР как раз и преобразует прогу
на Си в АСМ который находится в файле ЛИСТИНГЕ !

А наоборот?
Я думал что вы хоть какую то книжку про АСМ уже почитали и ЗНАЕТЕ УЖЕ

что ; означает - дальше комментарий не влияющий на программу.

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

500. Sony_Sony, 31.03.2007 13:25
КРОКОДИЛ
Дык незнаю я как его включать

как в примере в VMLAB под названием 3rdparty.prj

Добавление от 31.03.2007 13:32:

КРОКОДИЛ
по твоему совету стал копировать прямо в окно.......

и в какое же окно ты скопировал .hex ???

501. Xradio, 01.04.2007 01:06
Sony_Sony
Оказывается програ больше размера памяти всего на 1 слово - т.е. на 1 инструкцию.
Очень странно.
Исходник р-станции Лён прекрасно работает в АВРстудии версии 4.08

Building project...
AVRASM: AVR macro assembler version 1.74 (Dec 16 2003 11:49:32)
Copyright (C) 1995-2003 ATMEL Corporation
Creating 'C:\Program Files\Atmel\AVR Tools\AvrStudio4\work\1.eep'
Creating 'C:\Program Files\Atmel\AVR Tools\AvrStudio4\work\1.hex'
Creating 'C:\Program Files\Atmel\AVR Tools\AvrStudio4\work\1.obj'
Assembling 'C:\Program Files\Atmel\AVR Tools\AvrStudio4\work\1.asm'
Including 'C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\1200def.inc'
C:\Program Files\Atmel\AVR Tools\AvrStudio4\work\1.asm(27) : warning : Register already defined by the .DEF directive
C:\Program Files\Atmel\AVR Tools\AvrStudio4\work\1.asm(28) : warning : Register already defined by the .DEF directive
Program memory usage:
Code : 512 words
Constants (dw/db): 0 words
Unused : 0 words
Total : 512 words
Assembly complete with no errors.

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

502. КРОКОДИЛ, 01.04.2007 01:20
Sony_Sony
и в какое же окно ты скопировал .hex ???
Ну так в окно с названием .НЕХ и скопировал..............

503. Sony_Sony, 01.04.2007 01:40
дак нема там такого окна.

Добавление от 01.04.2007 01:41:

Xradio
Исходник р-станции Лён прекрасно работает в АВРстудии версии 4.08

Дак давай проект студии с асмом и хексом в архиве.

504. КРОКОДИЛ, 01.04.2007 01:57
Ну какже нет? -Code. Target file: my_idea.hex

Добавление от 01.04.2007 01:59:

Xradio
Исходник р-станции Лён прекрасно работает в АВРстудии версии 4.08
Проет Sony_Sony работает както подругому

Добавление от 01.04.2007 09:09:

Xradio
Не знаешь чио за микросхемма КР117СП42?? - В жизни не доводилось с такой хренью сталкиватся. Перелопатил все справочники и ничего не нашел! По схеме трехногое существо один вывод идет на питание, второй на землю а третий на ножку RES процессора, -по логике вещей должна быть кренкой, но на сколько вольт? и нафиг она там вообще нужна???

505. Tosha_443, 01.04.2007 09:59
КРОКОДИЛ
на ножку RES процессора
если RES=RESET, то это супервизор.

506. Xradio, 01.04.2007 12:21
КРОКОДИЛ
чио за микросхемма КР117СП42??
Ты ошибся с названием, это КР1171СП42. Супервайзер.
Ищется вот таким образом:
http://www.google.ru/search?hl=ru&newwindow=1&am…%81%D0%BA&lr=

Добавление от 01.04.2007 12:25:

Sony_Sony
Дак давай проект студии с асмом и хексом в архиве
Исходник Крокодила где-то выше, AVR Studio на атмел.ру
Зачем людей баламутишь?

507. Dikoy, 01.04.2007 12:43
КРОКОДИЛ
правда я незнаю кто такой UART
Это СОМ порт, только с ТТЛ уровнями сигналов (а не +-12 вольт, как у СОМ).
Вот, посмотри как сделано:
http://dikoy44.narod.ru/projects/vkr11.htm
Если выкинуть USB преобразователь и чуть переделать программу для ПК как раз и получим то, что тебе нужно - подключение к СОМ порту и заливку сетки частот.

508. КРОКОДИЛ, 01.04.2007 13:00
Xradio
Ты ошибся с названием
Точно ошибся,
Супервайзер
А без него можно как нить обойтись - просмотрел подобные схеммы там вместо супервизора стоит светодиод и резистор на землю, -можно ли так сделать? и какие должны быть критерии?


Dikoy
Если выкинуть USB преобразователь и чуть переделать программу для ПК как раз и получим то, что тебе нужно - подключение к СОМ порту и заливку сетки частот.
Это хорошо! Ну как продвигаются дела с прошивкой? - а то Sony_Sony пишет под мегу16, а мне нужно под Атину - она в четыре раза дешевле, а сам я еще долго буду путатся в командах,даташитах,регистрах, и особенно в симуляторах!

509. Xradio, 01.04.2007 16:03
КРОКОДИЛ
вместо супервизора стоит светодиод и резистор на землю
Не знаю зачем так делают: От +5 отнимают 2 вольта на светодиоде. Тем самым повышают чувствительность входа Reset к провалам питающего напряжения. Если в твоем устройстве будет нормальный стабилизатор +5 вольт, то достаточно после заливки проги перемкнуть у AVR
Reset и +5в. (1 и 20) ноги для 90S1200, 90S2313... У них на борту есть встроенный формирователь сброса при подаче питания. Ведь "висячий" ресет может подвергннутся всяческим наводкам и утечкам по флюсу, что иногда осложняет жизнь.

Добавление от 01.04.2007 16:14:

КРОКОДИЛ
особенно в симуляторах!
Скачай (возьми у кого-нибудь в Мариуполе) нормальную AVR Studio, и удели ей хотя бы малость усердия. Нажимай всё, смотри что делает и показывает. А порядок встраивания в твой изначально пустой прожект чужого ассемблерного исходника и действиям при трассировке я описал выше. Там все очень просто. "Божья коровка" весьма облегчает работу и освоение АВР.

510. КРОКОДИЛ, 01.04.2007 16:36
Xradio
Reset и +5в. (1 и 20) ноги для 90S1200, 90S2313... У них на борту есть встроенный формирователь сброса при подаче питания. Ведь "висячий" ресет может подвергннутся всяческим наводкам и утечкам по флюсу, что иногда осложняет жизнь.
Понял, спасибо!
Скачай (возьми у кого-нибудь в Мариуполе) нормальную AVR Studio,
Да, -так и сделаю, а то у меня версия 3,21 -взял с диска еще 1999 года -она наверно еще под виндовс 3,1 расчитанна!

511. Sony_Sony, 01.04.2007 19:06
Xradio
Sony_Sony
Дак давай проект студии с асмом и хексом в архиве
Исходник Крокодила где-то выше, AVR Studio на атмел.ру

Зачем людей баламутишь?


Я не баламучу а прошу тебя дать то что у тебя работает.

Добавление от 01.04.2007 19:07:

КРОКОДИЛ
вместо супервизора стоит светодиод и резистор на землю, -можно ли так сделать?

Конечно можно.

512. Бэтмэн, 02.04.2007 09:13
КРОКОДИЛ
вместо супервизора стоит светодиод и резистор на землю, -можно ли так сделать?
Sony_Sony:
Конечно можно.

Поганки тоже можно есть, только отравишся.
Обычно ставят резюк (килоомы) в питание и кондёр (микрофарады) в землю.

513. Sony_Sony, 02.04.2007 09:59
Бэтмэн
Обычно ставят резюк (килоомы) в питание и кондёр (микрофарады) в землю.

А это бесполезно говорить. Я даже рисунок указывал со схемой. А показать это как 100 раз сказать.

Все равно не помогает.

514. Pyku_He_oTTyda, 02.04.2007 11:06
меня устраивает 47к на плюс 5 вольт, на землю 0,1 мкф

515. Dikoy, 02.04.2007 13:21
КРОКОДИЛ
Ну как продвигаются дела с прошивкой?
Когда узнаю алгоритм написание займёт 3 часа А узнавать мне сейчас вобще некогда - все выходные с паялом Так что ждём Sony_Sony, что он там намудрит, потом будем сдирать

А без него можно как нить обойтись
По моей ссылке есть детальое описание супервайзера.
Обычно ставят RC цепь, резюк 10-50к к плюсу, 0,1 мкФ к земле. Вполне достаточно и программатору не мешает. Но можно и посто на + кинуть. Только программатор ты уже не подключишь

516. Sony_Sony, 02.04.2007 14:00
Велосипед изобретать по-прежнему модно, только обязательно классический.

517. КРОКОДИЛ, 03.04.2007 03:25
Dikoy
Но можно и посто на + кинуть. Только программатор ты уже не подключишь
Так и сделал- все равно камень вытаскиваю и сую в програматор.
Так что ждём Sony_Sony, что он там намудрит, потом будем сдирать
Подождем! А я пока на шестиметровых синтезаторах потренируюсь тоесть на кошечках!

Добавление от 03.04.2007 03:29:

Бэтмэн
Поганки тоже можно есть, только отравишся.
Поганки тоже полезная вещь, -особенно если тещщу накормить!

Добавление от 03.04.2007 13:09:

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

Добавление от 03.04.2007 16:18:

Sony_Sony
Вот проекта под VMLAB - avr1200_lm7001.rar http://slil.ru/24163375
КРОКОДИЛ, вот так УПОРНО нужно искать баги ! Иначе не получится каменный цветок...
Чтойто не работает твоя программа ваабче! Стер авторскую программу и залил твою -дисплей вообще никак не реагирует на включение синтезатора, нажатие кнопок тоже никак не отображается на дисплее.

518. Dikoy, 03.04.2007 23:50
КРОКОДИЛ
которые при дальнейшем нажатии кнопок изменяются без всякой логической последовательности.
Может ЖК без поддержки русского?

519. КРОКОДИЛ, 04.04.2007 03:48
Dikoy
Может ЖК без поддержки русского?
Не, там буквенных надписей вообще не должно быть! Вот разработка http://www.cqham.ru/allband.htm, если б дело было в ЖК то при нажатии кнопок ВВЕРХ и ВНИЗ надписи на экране подчинялись бы хоть какойто логике. Сначала думал что камень глючной,- залил второй, -тоже самое, скорее всего глюк гдето в участке программы который отвечает за индикацию.

520. Tahoe, 04.04.2007 06:17
КРОКОДИЛ
Если ЖКИ в меру "стандартный", который с 4 или 8 битной шиной, то попробуй для проверки кварц в МК поставить, частотою раза в 2-4 поменьше. Если ЖКИ при этом заработает хотя бы через раз, или раз на десятый, то дело в скорострельности конкретного ЖКИ контроллера. Эта хохма известная.

521. Pyku_He_oTTyda, 04.04.2007 07:24
может в фузах ошиблись, и МК работает не от кварца, а от внутреннего RC по умолчанию.
З.Ы. правда не видел схемы и не знаю что за камень

522. Sony_Sony, 04.04.2007 09:11
КРОКОДИЛ
Чтойто не работает твоя программа ваабче!

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

Я не писал что проверил ее работу.

Я написал выше что при запуске она крутится в цикле ожидания нажатия кнопок. Кнопки в симуляторе я не подключал.

Добавление от 04.04.2007 09:14:

Dikoy
КРОКОДИЛ
при дальнейшем нажатии кнопок изменяются без всякой логической последовательности.


Возможно пауза которую я закоментировал (отключил) для отладки используется в тайминге LCD

523. Xradio, 04.04.2007 11:07
КРОКОДИЛ
Сейчас включил один из синтезаторов в который сунул камень с авторской прошивкой, -при попытке нажимать кнопки на дисплее отображается непонятные букво цифровые надписи
"Один из синтезаторов" ?
Программа контроллера пишется конкретно под какую-либо принципиальную схему. Здесь важно всё и до "мелочей" - тип индикатора.
Наверное придется тебе опубликовать схему и прошивку её микроконтроллера, если сам Не ХОЧЕШЬ (уверен) разобраться.
P.S. я добрался до дома. Но обещанный исходник для синтезатора на AVR, думаю, бесполезно тебе давать. Всё одно - лишь усугубит. Все основные методы управления сериал-синтезатором и прочие кнопки-х..пки уже здесь изложены с помощью автора твоего исходника и Sony-sony. "Терпение и труд всё перетрут!"

524. КРОКОДИЛ, 04.04.2007 11:57
Tahoe
Если ЖКИ в меру "стандартный",
Разобрался с дисплем -все заработал.
Sony_Sony
Возможно пауза которую я закоментировал (отключил) для отладки используется в тайминге LCD
Да, с этой программой что ты дал при включении синтезатора на дисплее ничего не отображается кроме часов Отображение информации начинается только после нажатия кнопок, а с авторской прошивкой начинает показывать сразу, -но все равно даже авторская программа какаято глючная.

Добавление от 04.04.2007 12:06:

Xradio
"Один из синтезаторов" ?
Я же раньше писал что собрал их 2 абсолютно одинаковых!
Здесь важно всё и до "мелочей" - тип индикатора.
Индикатор WM-1611-62C но вообще то он уже заработал.
Наверное придется тебе опубликовать схему и прошивку её микроконтроллера, если сам Не ХОЧЕШЬ (уверен) разобраться.
Схемма и прошивка здесь,http://www.cqham.ru/allband.htm хотя ранее я исходник уже выкладывал.

Добавление от 04.04.2007 12:17:

Сейчас столкнулся с тем что при шаге 5кгц просто физически невозможно выставить верхнюю и нижнюю границы диапазона с нуля, потому как с таким мелким шагом всю ночь сидел и нажимал кнопки, хотел уже кота Барсика приспособить к этому делу! И все равно после установки границ они тут же сбились и верхняя оказалась по частоте ниже чем нижняя. Тоесть опять нужно несколько часов подряд щелкать кнопками и неизвестно чем это закончится Попробовал с компа границы записать в еепром- получилось, но опять после нескольких нажатий кнопок все сбилось


Xradio
изложены с помощью автора твоего исходника и Sony-sony
Так глюки и у автора,и у Sony-sony

Добавление от 04.04.2007 14:25:

Блин, ну никак не удается выставить вменяемые границы, -все время сбиваются!

525. Xradio, 04.04.2007 16:49
КРОКОДИЛ
Сейчас столкнулся с тем что при шаге 5кгц просто физически невозможно выставить верхнюю и нижнюю границы диапазона с нуля, потому как с таким мелким шагом всю ночь сидел и нажимал кнопки, хотел уже кота Барсика приспособить к этому делу! И все равно после установки границ они тут же сбились и верхняя оказалась по частоте ниже чем нижняя. Тоесть опять нужно несколько часов подряд щелкать кнопками и неизвестно чем это закончится Попробовал с компа границы записать в еепром- получилось, но опять после нескольких нажатий кнопок все сбилось

- Ну, что тебе ответить? На ум приходит только одно: - Делай сам. ВСЁ! Делай сам... И да воздастся тебе по трудам. И не манна чЮдесная, а твёрдая ПОЧВА.

526. КРОКОДИЛ, 04.04.2007 18:24
Xradio
И да воздастся тебе по трудам. И не манна чЮдесная, а твёрдая ПОЧВА.
Пааанятно!

Добавление от 04.04.2007 18:29:

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

527. Sony_Sony, 04.04.2007 19:41
Надо смотреть не используется ли НУЛЕВАЯ ячейка eeprom. Запись в eeprom занимает примерно 8600 тактов процессора.

528. КРОКОДИЛ, 05.04.2007 05:25
Sony_Sony
Надо смотреть не используется ли НУЛЕВАЯ ячейка eeprom.
А ,если используется, то что?

529. Sony_Sony, 05.04.2007 08:36
Не использовать ее - как рекомендует производитель и делает CVAVR.

530. КРОКОДИЛ, 05.04.2007 19:34
Sony_Sony
А как опредилить используется нулевая ячейка или нет? Перевел даташит на AT90S1200 но так ничего и не понял с этими ячейками

531. Sony_Sony, 05.04.2007 20:05
В симуляторе посмотреть. Или разобраться в тексте программы.

532. КРОКОДИЛ, 05.04.2007 22:23
В тексте доконца разобраттся неудалось, попробую на симуляторе.

Добавление от 06.04.2007 03:28:

Sony_Sony
Запустил программу в симуляторе. но так ничего и не понял, - вроде чтото записанно в нулевой ячейке

533. Sony_Sony, 06.04.2007 03:30
Ты бы название симулятора писал !

Внеси в симуляторе в 0 ячейку какое либо число и смотри не изменится ли онопрограммой.

534. КРОКОДИЛ, 06.04.2007 05:39
Sony_Sony
Ты бы название симулятора писал !
VMLAB, а ячейки смотрел в окошке EEPROM.
Внеси в симуляторе в 0 ячейку какое либо число и смотри не изменится ли онопрограммой.
Обнулил все ячейки и запустил симуляцию, ничего не меняется.

535. Sony_Sony, 06.04.2007 08:34
Дак ты кнопки подключил в симуляторе ? Я ж писал что иначе прога крутится в цикле опроса кнопок.

536. КРОКОДИЛ, 06.04.2007 16:11
Я незнаю как их включать

537. Sony_Sony, 06.04.2007 16:15
Пример подключения кнопок в VMLAB на странице курса /03.htm
в файлах для симуляции и изучения механизма прерываний.

538. КРОКОДИЛ, 06.04.2007 16:32
Sony_Sony
Понял, -ночью посмотрю.

539. Sony_Sony, 06.04.2007 17:08
Советую на бумажке написать расположение кнопок в VMLAB чтоб не путаться при отладке.

540. Dikoy, 07.04.2007 01:08
Sony_Sony
У меня к тебе вопрос, как к эксперту по CVAVR

Вот в ДШ к меге128 (как и остальных АВР) описан модуль TWI, SCL = PD0, SDA = PD1. Даже в самой ДШ описаны биты порта D, которыми подтяжки дёргать сподручнее и в какой последовательности записывать эти самые биты.
Однако CVAVR на вкладке I2C позволяет установить любую лапу любого порта под линии SCL и SDA. Почему так? В чём фишка?
Мне, собственно, надо подцепить DS1621 к 128 меге, но вот уж очень нужны мне INT0 и INT1! А они, гады, как раз с SCL/SDA совмещены... Вот и думаю, как бы мне термометр с этих лап убрать, чтобы и им пользоваться, и прерываниями. Причём - раздельно

Добавление от 07.04.2007 01:16:

А, кажись понял - вкладка I2C генерит программный I2C, не имеющий ничего общего с аппаратным TWI
Тогда такой вопрос - есть опыт использования програмного I2C? Насколько он шустро работает? Грузит ли процессор? Насколько чётко работает?
Только не отправляй в VMLAB - посимулировать и посчитать ещё успею Пока интересен практический опыт.

541. Sony_Sony, 07.04.2007 04:24
Dikoy
CVAVR на вкладке I2C позволяет установить любую лапу любого порта под линии SCL и SDA. Почему так? В чём фишка?

Было несколько стр. назад

Dikoy
понял - вкладка I2C генерит программный I2C, не имеющий ничего общего с аппаратным TWI

Точно. Аппаратный TWI - в мастере CVAVR это вкладка "2 wire".

опыт использования програмного I2C? Насколько он шустро работает? Грузит ли процессор? Насколько чётко работает?

Использовал в 2004. "Работает как часы". Есть в примерах CVAVR для LM75 по-моему.

Програмный конечно грузит процессор "по-полной".

Проблема одна - частота всего 40 КГц получается.
Я находил в листинге АСМ эту "дебильную" паузу

код:

__i2c_delay2l:
dec r22
brne __i2c_delay2l
ret

и сам ее убирал

код:

__i2c_delay2l:

ret


Потом асемблил уже АСМ. не удобно.

Частоту на клоке мерил как раз в VMLAB.

Вот архив с моим примером и логом: slil.ru/24197332

Я i2c больше не использовал для памяти так как заюзал at45db161 - это в 60 раз больше памяти за те же деньги и быстрей - пример в задаче 7.

542. no_name, 07.04.2007 08:14
Sony_Sony
Не использовать ее - как рекомендует производитель и делает CVAVR.

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

Спасибо

543. Sony_Sony, 07.04.2007 10:49
Откройте даташит at90s1200 и смотрите в конце раздел "ошибки" - errata

544. Dikoy, 07.04.2007 13:29
Sony_Sony
Аппаратный TWI - в мастере CVAVR это вкладка "2 wire".
А родные примеры с DS1621 и т.д. работают через аппаратный TWI? Просто выбор из настроек есть только на вкладке I2C...

Я находил в листинге АСМ эту "дебильную" паузу
и сам ее убирал
Работало?

Я i2c больше не использовал для памяти
Мне не для памяти а для DS1621/1624. Память у меня как раз db161. Висит на одной линии с АЦП

Зы: ещё глупый вопрос: INT-ы друг на дружку никак не влияют? Вот включил я, например, INT4, а остальные выключены. Прерывание у меня будет работать только по PE4, а изменения на остальных портах с INT пофиг?
Это я вычитал про старшинство прерываний...

545. Sony_Sony, 07.04.2007 14:02
Dikoy
А родные примеры с DS1621 и т.д. работают через аппаратный TWI? Просто выбор из настроек есть только на вкладке I2C...

Если есть возможность выбора на какие ноги цеплять - значит это программный i2c.

TWI выеден на конкретные ноги МК.

Dikoy
Sony_Sony
эту "дебильную" паузу
и сам ее убирал

Работало?


Работало быстро. Но ИМХО так не удобно делать - каджый раз править АСМ.

Не пойму какого черта в мастере нет опции установки частоты i2c.
Я тогда, еще года 2 назад, писал автору про это.

Dikoy
INT-ы друг на дружку никак не влияют? Вот включил я, например, INT4, а остальные выключены. Прерывание у меня будет работать только по PE4, а изменения на остальных портах с INT пофиг?

Это я вычитал про старшинство прерываний...


Да пофиг.

Очень советую прочитать короткий мой опус про прерывания в Меге на стр. /03.htm

Считаю что объяснено хорошо и точно.

Добавление от 07.04.2007 14:03:

Dikoy
ещё глупый вопрос

Я думаю это нормальные вопросы.

ИМХО - лучше спрашивать чем как "рыба об лед" ...

546. no_name, 07.04.2007 18:03
Sony_Sony
Откройте даташит at90s1200 и смотрите в конце раздел "ошибки" - errata

Я почему то подумал, что это рекомендация для всех АВР-ов у меня под рукой два даташита один для М8, другой для М162 там вроде такого нет.

547. Sony_Sony, 07.04.2007 18:08
Пасхальный подарок от Ридико Л.И. - TTF шрифт для LCD

telesys.ru/wwwboards/mcontrol/1638/messages/58804.shtml

Как использовать LCD можно прочитать на странице - proavr.narod.ru/z5.htm

================

no_name
Я почему то подумал, что это рекомендация для всех АВР-ов

Я рекомендую для всех AVR не использовать 0 ячейку EEPROM.
Так делает компилятор CVAVR, возможно и другие.

548. no_name, 07.04.2007 19:25
Sony_Sony
Я рекомендую для всех AVR не использовать 0 ячейку EEPROM.
Так делает компилятор CVAVR, возможно и другие.


Почему? Личные предпочтения?
У меня лежит уже готовая программа в которой пишется в 0 ячейку. Возвращаться не охота, но вы посеяли зерно сомненья.

549. Pyku_He_oTTyda, 07.04.2007 21:44
Sony_Sony
а как собственно подключить в mege8 потенциометр к ADC6 и 7. Корпус TQFP cоответственно

550. Sony_Sony, 07.04.2007 22:03
no_name
вы посеяли зерно сомненья.

Всё подвергай сомнению !


Pyku_He_oTTyda
как собственно подключить в mege8 потенциометр к ADC6 и 7.

Извини я не понял... наверно 2 потенциометра (переменника) раз 2 ноги АЦП ?

Тогда их на землю и на AREF а "движки" к PC6 и PC7 (исправил на порт_С).

551. Pyku_He_oTTyda, 07.04.2007 22:12
опечатка, к любому.
Возьмем конкретно - к ACD7.
концы потенциометра понятно куда, как обозначить подключение ползунка?
З.Ы, нет в меге 8 порта А. эти два канала выведены отдельно, вот собственно и возник вопрос

552. Sony_Sony, 07.04.2007 22:35
Pyku_He_oTTyda
нет в меге 8 порта А

Ну пускай порт_С

Pyku_He_oTTyda
как обозначить подключение ползунка?

Чето я совсем отупел. Что значит обозначить ?

в VMLAB чтоль ??? тогда пример в папке:
C:\VMLAB\tutorial\STEP05.PRJ

Вот строка:
Vslider SGEN VSS SLIDER_1(0 5)

Подробней в Help.

Или я не о том опять ?

553. Pyku_He_oTTyda, 07.04.2007 22:44
не о том... в портС входят АДС0...АДС5. АДС6 и АДС7 выведены отдельными ногами

554. Sony_Sony, 07.04.2007 22:45
Да я уже посмотрел рисунок в даташите. Какая вам разница как раскидан порт. Подключайте куда надо да и всё.

555. Dikoy, 08.04.2007 00:55
Sony_Sony
Очень советую прочитать короткий мой опус про прерывания в Меге на стр. /03.htm
Ещё под Новый Год читал, когда круиз-контроль мастерил. Но одно дело 2313, и совсем другое 128 мега... В ней уж больно много всего и это всё так хитро завязано...

556. Tahoe, 08.04.2007 01:50
Dikoy
В ней уж больно много всего и это всё так хитро завязано...
Фигня. Ты наверное не копал Атмеловский ARM, с его AIC. Хотя и там, в ощем-то, вполне можно разобраться.

557. Pyku_He_oTTyda, 08.04.2007 08:33
цитата:
Sony_Sony:
Да я уже посмотрел рисунок в даташите. Какая вам разница как раскидан порт. Подключайте куда надо да и всё.

проехали...
теперь я не удивляюсь, почему столько страниц в этой теме.
Не проще сказать: - Я не знаю, как подключить, чем писать сообщения вокруг да около?
Вот я например незнаю, и не стесняюсь спросить

558. Sony_Sony, 08.04.2007 09:58
А почему нельзя подключить к ногам PC6 PC7 ? Вы объясните хоть.

Добавление от 08.04.2007 09:59:

Pyku_He_oTTyda
я например незнаю, и не стесняюсь спросить

Правильно. А я отвечаю так как знаю и тоже не стесняюсь как видите.

559. Pyku_He_oTTyda, 08.04.2007 10:56
Потому что PC6 - RESET, PC7 - нет как таковой.
АДС6 и АДС7 выведены на отдельные ноги, как из прописать куда назначить движок слайдера, ума не приложу

560. Sony_Sony, 08.04.2007 11:09
Вот сгенерировал новый проект в VMLAB и в файле проекта перечисляются все точки МК к кторым можно подключать что либо.

; Micro nodes: RESET, AREF, PB0-PB7, PC0-PC6, PD0-PD7, ACO, TIM1OVF, ADC6, ADC7
; Define here the hardware around the micro
; ------------------------------------------------------------

т.е. выводы так и названы ADC6 и ADC7

Добавление от 08.04.2007 11:17:

Вот строка для подключения движка первого переменника в панели управления к ADC6 :

V1 ADC6 VSS SLIDER_1(0 5)

вместо 5 нужно поставить напряжение на AREF

561. КРОКОДИЛ, 09.04.2007 03:53
Sony_Sony
А можно ли что нибудь в программе написать чтоб биты защиты включались?

562. Sony_Sony, 09.04.2007 07:25
Для AVR по-моему нет. Защиту фьюзами нужно ставить в програматоре.

563. Pyku_He_oTTyda, 09.04.2007 08:41
Sony_Sony
Спасибо! Дома попробую.
Да, действительно работает)

564. Xradio, 10.04.2007 21:00
Sony_Sony
Не пойму какого черта в мастере нет опции установки частоты i2c.
Я тогда, еще года 2 назад, писал автору про это.

И что ответил автор i2C?
Протокол подразумевает стык различных, и самых разнородных, и2ц совместимых. Да и адресация предполагается только внешняя у большинства простеньких (это к странному вопросу ДикОго) Аппаратный модуль i2C в Мегах хорош, дюже красиво нарисован, но мне быстрее получилось плюнуть на него и сделать i2C программно по даташиту дивайса памяти

565. КРОКОДИЛ, 14.04.2007 02:36
Sony_Sony
Можешь толком расказать как переделать программу с AT2313 на ат AT90S1200???
код:



.include "2313def.inc"
.def data = r0
.def if_l = r1
.def if_h= r2
.def ind_l = r3
.def ind_m = r4
.def ind_h = r5
.def ind_sl= r6
.def ind_sh= r7
.def fl_l = r8
.def fl_h =r9
.def fm_h = r10
.def fm_l = r11
.def del_h = r12
.def del_l = r13
.def flag_reg = r16
.def loop = r17
.def work_l =r18
.def work_h =r19
.def temp =r20
.def temp1 =r21
.def glob = r22
.def mult_l =r23
.def mult_m = r24
.def mult_h = r25
.def temp16_l = r26
.def temp16_m = r27
.def temp16_h = r28



;PORTb

.equ TX_IN = 0; Вход, 1-приём, 0 - передача
.equ A0 = 2 ; Выход, управление индикаторм
.equ WR1 = 3 ; Выход, запись в индикатор
.equ DB3 = 4 ; Выход, данные на индикатор/ вход SCAN
.equ DB2 = 5 ; Выход, данные на индикатор/ вход MEM
.equ DB1 = 6 ; Выход, данные на индикатор/ вход DN
.equ DB0 = 7 ; Выход, данные на индикатор/ вход UP

;PORTD
.equ DAT=0 ; выход
.equ CL =1 ; выход
.equ CE = 2 ; выход
.equ TXOUT = 5 ; выход
.equ SCAN = 6 ; Вход, прекращение сканирования



.equ s_out = 0x60
.equ stack = 0x66


.equ flag_tx = 0
.equ flag_rep = 1


.cseg
.org 0

reset:
;***************************************************
;********установка стека****************************
;***************************************************
ldi temp, RAMEND
out SPL, temp

;****************************************************
;***************настройка портов********************
;***************************************************

ldi temp, 0b11110011;
out PORTB, temp
ldi temp, 0b00001100;
out DDRB, temp ;
ldi temp, 0b11111000;
out PORTD, temp
ldi temp, 0b00000111
out DDRD, temp ;




;***************************************************************
;********инициализация индикатора*******************************
;***************************************************************


;+++++++++разблокировка шины индикатора++++++++++++++
cbi PORTB, A0
ldi temp, 0x0F
mov data, temp
rcall lcdout ;выставляем адрес равным F
sbi PORTB, A0
ser temp
mov data, temp
rcall lcdout ;прописываем "1"
rcall lcdout

clr temp
rcall cln_sout
clr flag_reg






;**************************
;начальная загрузка частотных границ и ПЧ из ЕЕПРОМ
;**************************

ldi temp, fmin ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, fmin + 1
rcall EERead
mov fl_l, temp
ldi temp, fmax ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, fmax + 1
rcall EERead
mov fm_l, temp



ldi temp, if_freq ;загружаем частоту ПЧ
rcall EERead
mov if_h, temp
ldi temp, if_freq + 1
rcall EERead
mov if_l, temp
ldi temp,ch0 ; загружаем значение из первой ячейки памяти в рабочую
rcall EERead
mov work_h, temp
ldi temp, ch0 +1
rcall EERead
mov work_l, temp


initial:

rcall display
rcall syntez
;***************************************
;***Опрос клавиш**********************
;*************************************

bigloop:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_rout

sbis PINB, DB1
rcall DN_rout

sbis PINB, TX_IN
rcall tx_rout

sbis PINB, DB2
rjmp serv

sbis PINB, DB3
rjmp sc_rout

rjmp bigloop



;***************************************************
;*********увеличение частоты************************
;***************************************************

UP_rout:
ldi temp, 0x01
rcall pause_ro
sbis PINB, DB0 ;ждём отпускания кнопки
rjmp UP_rout
ldi temp, 0x01
clc
add work_l, temp ;увеличиваем на 1
clr temp ;значение рабочего регистра
adc work_h, temp
cp fm_h, work_h
brne endup
cp fm_l, work_l
brsh endup
mov work_l, fl_l ;если значение достигло максимума,
mov work_h, fl_h ; записываем минимальное значение
endup:rcall display
rcall syntez
ret

;****************************************************
;*********понижение частоты**************************
;****************************************************

DN_rout:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB1 ;хдём отпускания кнопки
rjmp DN_rout
clr temp
clc
subi work_l, 0x01 ;уменьшаем на 1 содержимое
sbc work_h, temp ;рабочего регистра
cp work_h, fl_h
brne enddn
cp work_l, fl_l
brsh enddn

mov work_l, fm_l ;если значение достигло минимума
mov work_h, fm_h ;записываем максимальное значение
enddn:rcall display
rcall syntez
ret






;*****************************************
;********режим сканирования***************
;*****************************************

sc_rout: ldi temp, sc_min ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, sc_min + 1
rcall EERead
mov fl_l, temp
ldi temp, sc_max ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, sc_max + 1
rcall EERead
mov fm_l, temp



ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sc_rout
ldi temp, 0xDC
sts(s_out), temp
ldi temp, 0x70
sts(s_out+1), temp
scan_up:ldi temp, 0x01
clc
add work_l, temp ;увеличиваем на 1 значение регистра
clr temp
adc work_h, temp
mov mult_l, fm_l
mov mult_h, fm_h
sub mult_l, work_l
sbc mult_h, work_h
brsh otobr
mov work_l, fl_l ;если дошло до конца
mov work_h, fl_h ;записываем мин. значение
otobr: rcall display
rcall syntez
ldi temp, 0x04 ;пауза
rcall pause_ro
sbic PINB, DB3 ;если нажата SCAN
rjmp key2
voz1:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3
rjmp voz1
rjmp end_sc
key2: sbic PINB, TX_IN
rjmp key3
voz2:ldi temp,0x01
rcall pause_ro
sbis PINB, TX_IN
rjmp voz2
rjmp end_sc



;выход из режима сканирования
key3:sbic PIND, SCAN ;если нет несущей,
rjmp scan_up ;продолжаем сканирование

ldi glob,0x80 ;эта пауза определяет время задержки сканирования
oprotp:sbic PINB, DB3 ; после появления несущей
rjmp key11
voz11:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;если нажата одна из кнопок TX, scan,UP,DN
rjmp voz11 ;прекращаем сканирование
rjmp end_sc
key11:sbic PINB, TX_IN
rjmp key21
voz21:ldi temp, 0x01
rcall pause_ro
sbis PINB, TX_IN
rjmp voz21
rjmp end_sc


key21:sbis PIND, SCAN ; если несущая всё ещё есть,
rjmp oprotp ;ждём нажатия какой-нибудь кнопки
ldi temp,0x01 ; если несущая пропала,
rcall pause_ro ;формируем паузу
dec glob ; пока не обнулится GLOB
brne oprotp
rjmp scan_up ; продолжаем сканирование
end_sc:ldi temp, fmin ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, fmin + 1
rcall EERead
mov fl_l, temp
ldi temp, fmax ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, fmax + 1
rcall EERead
mov fm_l, temp

clr temp
sts(s_out),temp
sts(s_out+1),temp

rjmp initial


;*****************************************************
;*************Передача********************************
;*****************************************************
tx_rout: sbi PORTD, TXOUT
ldi temp, 0x78
sts(s_out), temp
sbr flag_reg, 0b00000001
rcall display
rcall syntez



return: sbis PINB, TX_IN
rjmp return
cbr flag_reg, 0b00000001

clr temp
sts(s_out), temp


cbi PORTD, TXOUT

rcall display
rcall syntez

ret




;****************************************************************
;* *
;* *
;* *
;* *
;***********сервисный режим, установка стартовой частоты*********
;* *
;* *
;* *
;* *
;****************************************************************

serv:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp serv


ldi temp, 0xE8 ;выводим надпись CH0
sts(s_out), temp ;
ldi temp, 0x3E ;
sts(s_out+1), temp
ldi temp, 0xEE
sts(s_out+2), temp


rcall display

srvloop:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rjmp minf

sbis PINB, DB3
rjmp ch_sav

rjmp srvloop

;***************************************************
;*********увеличение частоты************************
;***************************************************

UP_srv:
ldi temp, 0x01
rcall pause_ro
sbis PINB, DB0 ;ждём отпускания кнопки
rjmp UP_srv
ldi temp, 0x01
clc
add work_l, temp ;увеличиваем на 1
clr temp ;значение рабочего регистра
adc work_h, temp
cp fm_h, work_h
brne endup3
cp fm_l, work_l
brsh endup3
mov work_l, fl_l ;если значение достигло максимума,
mov work_h, fl_h ; записываем минимальное значение
endup3:rcall display
ret

;****************************************************
;*********понижение частоты**************************
;****************************************************

DN_srv:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB1 ;хдём отпускания кнопки
rjmp DN_srv
clr temp
clc
subi work_l, 0x01 ;уменьшаем на 1 содержимое
sbc work_h, temp ;рабочего регистра
cp work_h, fl_h
brne enddn3
cp work_l, fl_l
brsh enddn3

mov work_l, fm_l ;если значение достигло минимума
mov work_h, fm_h ;записываем максимальное значение
enddn3:rcall display
ret


;***********запись стартовой частоты


ch_sav:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp ch_sav
ldi temp, ch0

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, ch0+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset

;*****************************************
;*****установка минимальной границы*******
;*****************************************


minf:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp minf
mov work_l,fl_l
mov work_h, fl_h
ldi temp, 0xD0 ;минимально возможная частота
mov fl_l, temp ;
ldi temp, 0x07 ;50 МГц
mov fl_h, temp ;


ldi temp, 0x68 ; "Lo"
sts(s_out), temp
ldi temp, 0x74
sts(s_out+1), temp
clr temp
sts(s_out+2), temp


rcall display

srvloop1:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rcall maxf

sbis PINB, DB3
rjmp sav_min

rjmp srvloop1


;***********запись минимальной границы**************


sav_min:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_min
ldi temp, fmin

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, fmin+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset

;*************************************************
;*******установка максимальной границы************
;*************************************************

maxf:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp maxf
mov work_l,fm_l
mov work_h, fm_h
ldi temp, 0x40 ;максимально возможная частота
mov fm_l, temp ;
ldi temp, 0x1F ;200 МГц
mov fm_h, temp ;


ldi temp, 0x3E ; "Hi"
sts(s_out), temp
ldi temp, 0x04
sts(s_out+1), temp
clr temp
sts(s_out+2), temp


rcall display

srvloop2:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rjmp min_sc

sbis PINB, DB3
rjmp sav_max

rjmp srvloop2


;***********запись максимального значения**************


sav_max:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_min
ldi temp, fmax

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, fmax+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset

;****************************************************
;****установка минимальной частоты сканирования******
;****************************************************

min_sc:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp min_sc


ldi temp, sc_min ;загружаем из памяти минимальную границу
rcall EERead
mov work_h, temp
ldi temp, sc_min + 1
rcall EERead
mov work_l, temp
ldi temp, sc_max ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, sc_max + 1
rcall EERead
mov fm_l, temp
ldi temp, 0xD0 ;минимально возможная частота
mov fl_l, temp ;
ldi temp, 0x07 ;50 МГц
mov fl_h, temp ;

ldi temp, 0xDC ; "ScL"
sts(s_out), temp
ldi temp, 0x70
sts(s_out+1), temp
ldi temp, 0x68
sts(s_out+2), temp

rcall display

srvloop3:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rjmp max_sc

sbis PINB, DB3
rjmp sav_minsc

rjmp srvloop3


;***********запись мин значения сканирования


sav_minsc:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_minsc
ldi temp, sc_min

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, sc_min+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset



;****************************************************
;*****установка максимальной частоты сканирования****
;****************************************************


max_sc:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp max_sc


ldi temp, sc_min ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, sc_min + 1
rcall EERead
mov fl_l, temp
ldi temp, sc_max ; загружаем максимальную границу
rcall EERead
mov work_h, temp
ldi temp, sc_max + 1
rcall EERead
mov work_l, temp
ldi temp, 0x40 ; максимально возможная частота
mov fm_l, temp ;
ldi temp, 0x1F ; 200 МГц
mov fm_h, temp ;

ldi temp, 0xDC ;"ScH"
sts(s_out), temp
ldi temp, 0x70
sts(s_out+1), temp
ldi temp, 0x3E
sts(s_out+2), temp

rcall display

srvloop4:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rjmp ifsav

sbis PINB, DB3
rjmp sav_maxsc

rjmp srvloop4


;***********запись максимального значения сканирования


sav_maxsc:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_maxsc
ldi temp, sc_max

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, sc_max+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset

;******************************************************
;**********Установка ПЧ********************************
;******************************************************

ifsav:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp ifsav


ldi temp, if_freq ;загружаем из памяти минимальную границу
rcall EERead
mov work_h, temp
ldi temp, if_freq + 1
rcall EERead
mov work_l, temp

ldi temp, 0x04
mov fm_h, temp
ldi temp, 0xB0
mov fm_l, temp

ldi temp, 0x14
mov fl_l, temp
clr fl_h

ldi temp, 0x06
sts(s_out), temp
ldi temp, 0xB8
sts(s_out+1), temp
clr temp
sts(s_out+2), temp

rcall display

srvloop5:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rjmp endsrv

sbis PINB, DB3
rjmp sav_if

rjmp srvloop5

;***********запись ПЧ


sav_if:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_if
ldi temp, if_freq

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, if_freq+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset



;************конец сервисного режима*****************

endsrv:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp endsrv
rjmp reset




;*****************************************************
;***отображение информации на дисплее
;******************************************************


display:;ret ; технологический возврат

ldi temp, 0b00000011;настраиваем порт на вывод данных
out PORTB, temp
ldi temp, 0b11111100;
out DDRB, temp ;

;************ преобразование частоты из 16-ричного вида в десятичный**************

clr mult_l
clr mult_m
clr mult_h
clr temp1
ldi temp, 0x19

sum:add mult_l, work_l ;умножаем на 25
adc mult_m, work_h
adc mult_h, temp1
dec temp
brne sum

ldi temp16_l, 0xA0 ;определяем кол-во сотен МГЦ
ldi temp16_m, 0x86
ldi temp16_h, 0x01
rcall decdig
mov ind_h, temp
swap ind_h
ldi temp16_l, 0x10 ;определяем количество десятков тысяч
ldi temp16_m, 0x27
clr temp16_h
rcall decdig
add ind_h, temp

ldi temp16_l, 0xE8 ;определяем количество тысяч
ldi temp16_m, 0x03
rcall decdig
mov ind_m, temp
swap ind_m
ldi temp16_l, 0x64 ;определяем количество сотен
clr temp16_m
rcall decdig
add ind_m, temp
ldi temp16_l, 0x0A ; определяе мколичество десятков
clr temp16_m
rcall decdig
mov ind_l, temp ; в конце операции в ячейках инд содержится
swap ind_l
add ind_l, mult_l


;*************************************************************
;********************вывод на дисплей*************************
;*************************************************************
enddig: ;ret ;технологический возврат
clr data
cbi PORTB, A0
rcall lcdout ;заносим в индикатор адрес начальной ячейки
sbi PORTB, A0
lds data, (s_out); 0-й символ
rcall lcdout
rcall lcdout
lds data, (s_out+1); 1-й символ
rcall lcdout
rcall lcdout
lds data, (s_out+2); 2-й символ
rcall lcdout
rcall lcdout
lds data, (s_out+3); 3-й символ
rcall lcdout
rcall lcdout
mov temp, ind_h ;4-й
cbr temp, 0x0F
swap temp
rcall decod
rcall lcdout
rcall lcdout
mov temp, ind_h ;5-й
cbr temp, 0xF0
rcall decod
rcall lcdout
rcall lcdout
mov temp, ind_m ;6-й
cbr temp, 0x0F
swap temp
rcall decod
inc data
rcall lcdout
rcall lcdout
mov temp, ind_m ;7-й
cbr temp, 0xF0
rcall decod
rcall lcdout
rcall lcdout
mov temp, ind_l ;8-й
cbr temp, 0x0F
swap temp
rcall decod
rcall lcdout
rcall lcdout
mov temp, ind_l;9-й
cbr temp, 0xF0
rcall decod
rcall lcdout
rcall lcdout


ldi temp, 0b11110011;на ввод данных
out PORTB, temp
ldi temp, 0b00001100;
out DDRB, temp ;
ret

;***************************************************
;*****ВВод информации в синтезатор******************
;***************************************************
syntez: ; ret ;технологический возврат
;mult_h=S, R2,R1 ,R0, TB, B2, B1, B0
mov mult_l, work_l ; множимое - текущее значение частоты
mov mult_m, work_h
sbrc flag_reg, flag_tx; sbic PINB, TX_IN
rjmp no_minus
ldi mult_h, 0xA2
sub mult_l,if_l;отнимаем ПЧ
sbc mult_m,if_h
rjmp vyv_s
no_minus:
ldi mult_h, 0xA4

vyv_s: cbi PORTD,DAT
sbi PORTD,CE ;

ldi loop, 0x08
mov temp,mult_l
loop2:ror temp ;вывод первого байта данных D0...D7
brcs h_l
cbi PORTD, DAT
rjmp sync
h_l:sbi PORTD, DAT
sync:rcall pulse
dec loop
brne loop2


ldi loop, 0x08
mov temp, mult_m
loop3:ror temp ; вывод второго байта данных D8...D15
brcs h_l1
cbi PORTD, DAT
rjmp sync1
h_l1:sbi PORTD, DAT
sync1:rcall pulse
dec loop
brne loop3



ldi loop, 0x08
mov temp, mult_h
loop21:ror temp ; вывод третьего байта
brcs h_l2
cbi PORTD, DAT
rjmp sync2
h_l2:sbi PORTD, DAT
sync2:rcall pulse
dec loop
brne loop21
cbi PORTD, DAT ;CE
cbi PORTD, CE
ret

;***вывод цифры на индикатор***
lcdout: ;ret ;технологический возврат


rol data
brcs h_lev0
cbi PORTB,DB3
rjmp nxt_a
h_lev0:sbi PORTB,DB3
nxt_a: rol data
brcs h_lev1
cbi PORTB,DB2
rjmp nxt_b
h_lev1:sbi PORTB,DB2
nxt_b:rol data
brcs h_lev2
cbi PORTB,DB1
rjmp nxt_c
h_lev2:sbi PORTB,DB1
nxt_c: rol data
brcs h_lev3
cbi PORTB,DB0
rjmp nxt_d
h_lev3:sbi PORTB,DB0
nxt_d:sbi PORTB,WR1
rcall long
cbi PORTB,WR1
rcall long
ret
;*************************
; Запись в ЕЕПРОМ
;**************************
EEwrite: sbic EECR, EEWE
rjmp EEwrite
out EEAR, temp
out EEDR, temp1
sbi EECR, EEMWE
sbi EECR, EEWE
ret
;***********************
; Чтение из памяти
;***********************
EEread: sbic EECR,EEWE
rjmp EERead
out EEAR,temp
sbi EECR,EERE
in temp,EEDR
ret
;*********************
; пауза
;*********************
pause_ro: ;ret ;технологический возврат
ser temp1
retu1:ser loop
retu2:dec loop
brne retu2
dec temp1
brne retu1
dec temp
brne pause_ro
ret


long:
;ret ; технологический возврат
ldi temp1, 0x05 ; (20)
retlong:dec temp1
brne retlong
ret
;**********************************************
;подпрограмма пересчёта НЕХ- десятичное число
;**********************************************
decdig:ldi temp,-1
minus:sub mult_l, temp16_l
sbc mult_m, temp16_m
sbc mult_h, temp16_h
inc temp
brsh minus
add mult_l, temp16_l
adc mult_m, temp16_m
adc mult_h, temp16_h
ret
;***********************************************
;*******перекодировка цифра - код***************
;***********************************************

decod:clr temp1
ldi ZH, high(DIG*2)
ldi ZL, low(DIG*2)
add ZL, temp
adc ZH, temp1
lpm
ret


;вывод на экран сообщения "SAVE"

outsym: ldi temp, 0b00000011;настраиваем порт на вывод данных
out PORTB, temp
ldi temp, 0b11111100;
out DDRB, temp ;
clr data
cbi PORTB, A0
rcall lcdout ;заносим в индикатор адрес начальной ячейки
sbi PORTB, A0
clr data
rcall lcdout
rcall lcdout
clr data
rcall lcdout
rcall lcdout
clr data
rcall lcdout
rcall lcdout
ldi temp, 0xDC
mov data, temp
rcall lcdout
rcall lcdout
ldi temp, 0xBE
mov data, temp
rcall lcdout
rcall lcdout
ldi temp, 0x6E
mov data, temp
rcall lcdout
rcall lcdout
ldi temp, 0xF8
mov data, temp
rcall lcdout
rcall lcdout
ldi temp, 0x76
mov data, temp
rcall lcdout
rcall lcdout
clr data
rcall lcdout
rcall lcdout
clr data
rcall lcdout
rcall lcdout

ldi temp, 0x20
rcall pause_ro

ldi temp, 0b11111111;на ввод данных
out PORTB, temp
ldi temp, 0b00000000;
out DDRB, temp ;

ret
;*****очистить знакоместа*********
cln_sout:clr temp
sts(s_out), temp
sts(s_out+1), temp
sts(s_out+2), temp
sts(s_out+3), temp
ret





;*********************
; синхроимпульс
;*********************
pulse:;ret ;technologic return
sbi PORTD, CL
ldi temp1,0x1F
zad1:dec temp1
brne zad1
cbi PORTD, CL
ldi temp1,0x1F
zad2:dec temp1
brne zad2
ret

DIG:.db 0xEE, 0x06, 0xF2, 0xD6, 0x1E, 0xDC, 0xFC, 0x86, 0xFE, 0xDE ;0...9

.eseg
.org 0

; - ячейки памяти

ch0:
.db 0x16, 0xBC

fmin:
.db 0x16, 0x80 ;минимальная частота 144000/25 кГц
;здесь можно записать другое значение нижнего предела частоты
fmax:
.db 0x16, 0xD0 ;максимальная частота 146000/25 кГц
;здесь можно записать другое значение нижнего предела частоты


sc_min:
.db 0x16, 0xA8 ; - минимальная частота сканирования

sc_max:
.db 0x16, 0xC8 ; - максимальная частота сканирования

if_freq:
.db 0x01, 0xAC ; - частота ПЧ 10700/25 кГц

;при других границах перестройки синтезатора не забудьте занести
;в ячейки памяти нужные значения частоты в пределах min<F<max



.db "(c)Temerev29082006"



566. Dikoy, 14.04.2007 03:43
КРОКОДИЛ
Ну ты завернул! Пол кода перекраивать надо для того, чтобы переделать его на более устаревший контроллер!
Давно бы уже 2313 купил. Их же как грязи!!!

567. КРОКОДИЛ, 15.04.2007 02:12
Dikoy
Давно бы уже 2313 купил. Их же как грязи!!!
У нас их нет! А из Киева долго ждать,- AT90S1200 я ждал целых три недели и сейчас кроме них и PICов ничего нет в наличии, а эта схемка с исходником попалась только вчера. Конечно закажу 2313,-просто нетерпится чтото конкретное сделать

568. Sony_Sony, 15.04.2007 09:39
КРОКОДИЛ
Конечно закажу 2313

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

МЕГА8 это минимум.

569. КРОКОДИЛ, 16.04.2007 05:03
Sony_Sony
МЕГА8 это минимум
Дык на МЕГА8 прошивка не подойтет все равно
Опять раритеты заказываешь снятые с производства
Так какие в разработках даны такие и заказываю. Сегодня по счастливому стечению обстоятельств удалось купить на базаре несколько штук ATTINY2313-20SI, к сожалению в ДИП корпусе найти не удалось А прошивку расчитанную на AT90S2313 можно залить в ATTINY2313-20SI? или тоже нужно переписывать? И как их приспособить на стандартную макетку?

570. Sony_Sony, 16.04.2007 08:58
Где линк на проект откуда исходник ?

КРОКОДИЛ
как их приспособить на стандартную макетку?

Если опыт 30 лет то думаю плату сделать и припаять не проблема.
Плату удобно делать так - proavr.narod.ru/06.htm

А прошивку расчитанную на AT90S2313 можно залить в ATTINY2313-20SI? или тоже нужно переписывать?

Надо проверить по апноуту совместимости

"AVR091: Replacing AT90S2313 by ATtiny2313 (11 pages, revision A, updated 10/03)
This application note is a guide to help current AT90S2313 users convert existing designs to ATtiny2313."

Обычно подходят проги либо с минимумом переделок.

Апноуты там внизу: proavr.narod.ru/07.htm

удалось купить на базаре несколько штук ATTINY2313-20SI

Будь внимателен в программировании ! там ошибка в дш по частоте с завода и т.п. - подробно описано на стр. proavr.narod.ru/07.htm

571. КРОКОДИЛ, 17.04.2007 03:44
Sony_Sony
Где линк на проект откуда исходник ?
К сожалению это проект из нашего Украинского журнала "Радиохобби" 5номер за 2006 год -я сначала нашел на ихнем сервере архив с исходником и хексом а потом так и не смог найти в инете самого журнала, похоже они начисто отсутствуют в сети Пришлось просить в эфире радиолюбителя из соседнего городка чтобы он распечатал и выслал мне странички с синтезатором.
Если опыт 30 лет то думаю плату сделать и припаять не проблема.
Не доводилось мне раньше микросхемы в разных корпусах на макетке стыковать, а разрабатывать и делать платы до того как девайс пройдет испытания тоже не очень хочется.
Плату удобно делать так - proavr.narod.ru/06.htm
Щас посмотрю.
Надо проверить по апноуту совместимости
Попробую разобратся, хотя врядли На какомто форуме читал что нужно включить какойто мастер совместимости и тогда ATTINY2313 будет думать что она AT90S1200! Только непонятно где эту совместимость включать???

Добавление от 17.04.2007 05:32:

Sony_Sony
Апноуты там внизу: proavr.narod.ru/07.htm
Посмотрел апноут и не совсем понял почему в таблице 3 для AT90S1200 ножки c 12 по 19 не подписаны? В этой схемме синтезатора ножки 14,15,16,17,18,19 используются для вывода на дисплей МТ-10Т7, а паралельно к ножкам 16,17,18,19 еще подключенна и клавиатура.

Добавление от 17.04.2007 05:37:

Sony_Sony
Будь внимателен в программировании
Я так понял что фьюзы вобще тогать не надо? Как стоят по умолчанию так и програмировать? Мне собственно под кварц 7,2мгц нужно.

572. Sony_Sony, 17.04.2007 07:22
КРОКОДИЛ
и тогда ATTINY2313 будет думать что она AT90S1200!

Посмотрел апноут и не совсем понял почему в таблице 3 для AT90S1200 ножки

ЗАБУДЬ наконец AT90S1200 !!!

Тебе совместимость с AT90S2313 НУЖНА !!!

573. КРОКОДИЛ, 18.04.2007 01:55
Sony_Sony
ЗАБУДЬ наконец AT90S1200 !!!
Ой извиняюсь -просто перепутал навание микросхемы, вобщем вопрос звучит так:.............и тогда ATTINY2313 будет думать что она AT90S2313!............. Посмотрел апноут и не совсем понял почему в таблице 3 для AT90S2313 ножки c 12 по 19 не подписаны? В этой схемме синтезатора ножки 14,15,16,17,18,19 используются для вывода на дисплей МТ-10Т7, а паралельно к ножкам 16,17,18,19 еще подключенна и клавиатура из четырех кнопок на минусовой провод.


574. Sony_Sony, 18.04.2007 12:04
Исходник для AT90S2313 положи на slil.ru

Добавление от 18.04.2007 12:04:

и схему !

575. КРОКОДИЛ, 19.04.2007 02:39
Sony_Sony
Исходник для AT90S2313 положи на slil.ru
Положил -http://slil.ru/24257810
и схему !
А схему положить не могу -так как не имею ни сканера не цифрового фотоапарата, да и пропечатанна она плохо, -журналы Радиохобби вообще страдают невнятным изображением. Вобщем попытаюсь расказать на пальцах: ножка2-pd0 процесора идет на ножку 5-data синетезатора lm7001, ножка3-pd1 на 4-CL, вывод6-pd2 на 3-СЕ, ножка19-pb7 идет на 7-db0 ножку индикатора MT10T7, 18-рb6 на 6-db1, 17-pb5 на 5-db2, 16-pb4 на 4-db3, 15-pb3 на3-WR, 14-pb2 на 1-A0, еще паралельно ножкам 16,17,18,19 подключены кнопки skanout, next, dn, up. К 12-pb0 подходит 0/TX, K 11-PD6 через транзистор +5в/stopskan, K 9-PD5 идет QRX+5/TX.

576. Sony_Sony, 19.04.2007 07:51
КРОКОДИЛ
попытаюсь расказать на пальцах:

Это значит "Схема в формате VMLAB"

Добавление от 19.04.2007 08:19:

КРОКОДИЛ
так и не смог найти в инете самого журнала, похоже они начисто отсутствуют в сети

Похоже ты не искал толкаом. Во всяком случае в GOOGLE.com не заглядывал.

А на каждой странице курса написано - Ищите то что нужно в ГУГЛЕ !!!

=================

http://rapidshare.com/files/1950347/___05.2006.rar (5310 KB).

Журналы Радиохобби - МНОГО - скачать:
http://www.nowa.cc/showthread.php?t=30214

577. Angelo, 19.04.2007 20:33
Маленький вопросик, какое будет реальное разрешение АЦП в меге48/88 при требуемой частоте выбрки сигнала 50КГц ???

578. slog2, 19.04.2007 20:53
Angelo
RTFM (FM - это http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf)

579. Xradio, 19.04.2007 20:59
Angelo
Поразрядно-кодирующий:
Сколько компенсирующих гирь сможет поставить продавец на весы обладая определенным фактором быстродействия?
Интегрирующий:
Сколько воды успеет налить и вычерпать водовоз за определенное рабочее время?
Параллельного кодирования:
Сколько "в лоб" солдат потребуется для штурма?
АЦП на борту микроконтроллера:
Читал-читал pdf... и скоко разрядов в АЦП - так и не понял...
Ещ` есть метод статистического аддитивного умножения разрядности: радикально теряем время - получаем повышение точности (разрядности).

580. Angelo, 19.04.2007 21:13
стока букв, нет бы по делу 2 цифры сразу написать....

581. Dikoy, 19.04.2007 23:19
Angelo
Зависит от ИОНа. Реально 8 бит держит без дрожания. 10 могут и подрагивать.
Вообще, в 48/88 АЦП заметно лучше, чем в 8/16, это личный опыт.

582. Angelo, 19.04.2007 23:39
Dikoy

Спасибо!, 7..8 бит на 50К выборок вполне достаточно, но строчка в даташите, в таблице параметров АЦП:"Input Bandwidth 38.5 kHz" заставила начать копать в пиках....

583. Xradio, 20.04.2007 00:46
Angelo
:..."Input Bandwidth 38.5 kHz" заставила начать копать в пиках....
Это полезно... "копать". Иначе никак не посмешит: Dikoy
Реально 8 бит держит без дрожания. 10 могут и подрагивать.

584. КРОКОДИЛ, 20.04.2007 03:02
Sony_Sony
Во всяком случае в GOOGLE.com не заглядывал.
Заглядывал.....просто просмотреть все до конца что нарыл гуголь нехватило трафика , а еще был на какомто архиве где есть абсолютно все журналы.....кроме радиохобби
http://rapidshare.com/files/1950347/___05.2006.rar (5310 KB).
Журналы Радиохобби - МНОГО - скачать:
http://www.nowa.cc/showthread.php?t=30214

Спасибо!
Это значит "Схема в формате VMLAB"
Так а что всетаки делать с прошивкой? И еще вопрос -на твоем сайте описан програматор типа пять проводков только не под ЛПТ порт а под СОМ порт -интересно он работает из под Кодэвижена или нет??? Да еще читал на твоем сайте про програмирование фьюзов но так ничего и не понял, -незнаю или я такой тупой или ты так заумно пишешь, -ты пойми что для человека который никогда с этим делом не сталкивался очень трудно понять что значат незнакомые символы Вобщем я не смог разобратся где в програматоре кодэвижена нужно поставить галочки на фьюзах чтоб запрограмировать ATtiny2313 под работу с кварцем? И еще не понятно частоту в програматоре нужно выставлять ту с которой будет работать каменнь -тоесть 7,2мгц? или какуюто другую?

585. Sony_Sony, 20.04.2007 10:11
КРОКОДИЛ
И еще не понятно частоту в програматоре нужно выставлять ту с которой будет работать каменнь -тоесть 7,2мгц? или какуюто другую?

В програматоре своя частота. Просто фьюзы нужно установить так что МК мог работать с той частотой какая тебе нужна и с кварцем например.

Я как могу написал там.

Посмотри в нигах тогда. Линк на библиотеку прямо в
начале заглавной страницы курса теперь есть.

Прошивку нужно проверить по апноуту AVR091 прямо
по пунктам различий МК там перечисленным.

Пока времени нет у меня.

Добавление от 20.04.2007 10:15:

КРОКОДИЛ
я не смог разобратся где в програматоре кодэвижена нужно поставить галочки на фьюзах

На стр. 07 картинка имеется ведь. Вот там галочки ставятся.

а под СОМ порт -интересно он работает из под Кодэвижена или нет???

Не могу сказать точно - я не пробовал с CVAVR. Там указан сайт автора по-моему и там есть програмка для него. PonyProg с таким работает.

Добавление от 20.04.2007 10:36:

STC
Лучший учитель по AVR - нормальные книжки на русском, статьи из журналов, + datasheet-ы и APP-ноуты.

Именно это написано на странице 1 курса - /01.htm

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

586. КРОКОДИЛ, 21.04.2007 02:34
Sony_Sony
PonyProg с таким работает.
В меню PonyProg нет ATTINY2313 , а есть только в CVAVR.
На стр. 07 картинка имеется ведь. Вот там галочки ставятся.
Там не совсем понятно . Откликнулся автор синтезатора и прислал полностью переделанную под ATTINY2313 прграмму с подробными комментариями и даже с фотографией програматора -тоесть с расположением галочек на фузах -вот теперь можно разбиратся что к чему!

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

Sony_Sony
А когда будет продолжение 12 страницы?

587. Xradio, 21.04.2007 09:49
КРОКОДИЛ
В меню PonyProg нет ATTINY2313

Version 2.06f Beta Mar 5 2005
В этой есть.

588. Sony_Sony, 21.04.2007 10:40
КРОКОДИЛ
Откликнулся автор синтезатора

Это самое верное !

КРОКОДИЛ
В меню PonyProg нет ATTINY2313

Используй в работе свежие версии программ !

Но и старые не удаляй из СЕМЕЙНОГО архива - могут пригодится.

589. КРОКОДИЛ, 22.04.2007 02:04
Xradio
Version 2.06f Beta Mar 5 2005
В этой есть.

Спасибо!
Sony_SonyВот смотри как автор доходчиво обьяснил на счет нулевых ячеек:
цитата:
В листинге программы содержимое ЕЕПРОМ записывается с нулевой ячейки.
Если хотите сдвинуть информацию,
самыми первыми можно в листинге записать ненужные данные, напр:
..eseg
..org 0
noused:
..db 0x00,0x00 ; (эта инфо запишется в ячейки 00 и 01)
fmin:
.db 0x16, 0x80 ;минимальная частота 144000/25 кГц
.........
Буквально два слова и все понятно!

590. Sony_Sony, 22.04.2007 11:20
Здорово ! Сразу видно - АВТОР !

591. КРОКОДИЛ, 25.04.2007 02:11
Sony_Sony
А когда будет продолжение 12 страницы???

592. Sony_Sony, 25.04.2007 02:39
хз

593. КРОКОДИЛ, 25.04.2007 03:16

Суперконкретный ответ!

594. КРОКОДИЛ, 02.05.2007 15:16
Sony_Sony
А почему при компиляции твоих проектов с 12 страницы не появляется файл листинга???

595. Sony_Sony, 02.05.2007 16:55
Компиляция в CVAVR полагаю... ИМХО - не могёт такого быть. По-моему в свойствах проекта даже при желании нельзя отключить генерацию листинга. Пошукайте файлы .lst и .asm

596. КРОКОДИЛ, 03.05.2007 06:10
Sony_Sony
Компиляция в CVAVR полагаю...
Не, я на VMLABе компиляю..........
Пошукайте файлы .lst и .asm
A нэту! -Я хотел твою программу для LMX2316 на асемблере прожевать -на нем я хоть чучуть понимаю, но не нашел листинга!

597. Sony_Sony, 03.05.2007 06:19
Мистика !

598. КРОКОДИЛ, 03.05.2007 06:23
Sony_Sony
Мистика !
Ну скачай со своего сайта последний архив и прокомпиляй -увидишь.

599. Sony_Sony, 03.05.2007 06:25
Ну вот тебе пример из задачи откомпиленый с листингом - http://slil.ru/24323040

Поставь CVAVR заново. Листинг ВСЕГДА он делает если компилирует. Даже когда компиляция неудачна и с ошибками. В листинге ошибки и смотрят.

Добавление от 03.05.2007 06:27:

КРОКОДИЛ
Sony_Sony
Мистика !
Ну скачай со своего сайта последний архив и прокомпиляй -увидишь.


Я так и сделал.

От меня зависит лишь содержание файла исходника .с

Даже если там оставить main() только - все равно появится листинг.

Покомпиль примеры к компилятору.

600. КРОКОДИЛ, 03.05.2007 06:41
Sony_Sony
Ну вот тебе пример из задачи откомпиленый с листингом - http://slil.ru/24323040
Ну это уже совсем другое дело!
От меня зависит лишь содержание файла исходника .с

Даже если там оставить main() только - все равно появится листинг.

Не ну в архиве на 12 странице листинга нет и при компиляции он не появляется!

601. Sony_Sony, 03.05.2007 12:04
Ты читать умеешь ??? Я разве писал что в архиве задачи есть листинг ???

Листинг делает компилятор. Причем разные версии могут делать разный листинг.

602. КРОКОДИЛ, 04.05.2007 03:58
Sony_Sony
Я разве писал что в архиве задачи есть листинг ???
Так а почему он при компиляции этой задачи не появляетя??? Тоесть отрываешь проэкт, нажимаещь компиляцию,- компилируется а листинга нет!

603. Sony_Sony, 04.05.2007 05:00
Я не знаю.

Я выше писал - попробуйте покомпилить примеры CVAVR.

604. КРОКОДИЛ, 04.05.2007 05:31
Sony_Sony
Я выше писал - попробуйте покомпилить примеры CVAVR.
Будет время попробую. Дело в том что при компиляции дугих проэктов листинг появляется всегда, а при компиляции этого нет!

605. Sony_Sony, 04.05.2007 10:16
Невезет так не везет ! У меня появляется.

Попроси третье лицо протестировать.

606. КРОКОДИЛ, 04.05.2007 17:19
Sony_Sony
Попроси третье лицо протестировать.
Да ладно -вопрос не принципиальный, теперь у меня есть листинг с асемблером -буду разбиратся. Еще раз перечитал на твоем сайте про логическое И и ИЛИ - опять ничего не понял -можешь толком описать вплоть до каждой единички и нолика -так чтоб было понятно. На титульной странице ты пишешь: "Чайникам от чайника" Но слово "чайник" подразумевает абсолютное незнание предмета, а твои обяснения рулят как "Кофейникам от самовара"

607. Sony_Sony, 04.05.2007 17:44
У меня в курсе на стр. proavr.narod.ru/05.htm написано:


"ИЛИ" - только 0 и 0 дают 0

"И" - только 1 и 1 дают 1


========= ЧТО НЕ ПОНЯТНО ??? ==========

Пиши НА БУМАГЕ два байта в двоичном виде (Таблица "Различные представления числа" там же /05.htm) друг на другом и

пользуясь этими правилами пиши под ними результат.

У меня там /05.htm и примеры есть.


КРОКОДИЛ
твои обяснения рулят как "Кофейникам от самовара"

Я готов порадоваться более понятному объяснению чем мое:

"ИЛИ" - только 0 и 0 дают 0

"И" - только 1 и 1 дают 1

608. Dikoy, 05.05.2007 03:55
КРОКОДИЛ
N "или" - это N выключателей, соединённых паралельно. Лампочка загорается при замыкании (установки 1 на входе) любого из них.

N "и" - то же самое, только тумблеры последовательно. Чтобы лампочка загорелась, надо замкнуть (установить на входах 1) их всех.

609. КРОКОДИЛ, 05.05.2007 04:13
Dikoy
Так понятней, но непонятно зачем такие сложности и в каких случаях они используются?

610. Dikoy, 05.05.2007 05:52
КРОКОДИЛ
но непонятно зачем такие сложности и в каких случаях они используются?
Операции чтоли?
В быту - как и те ключи, можно задавать аглоритмы включения, апример, сигналки при срабатывании групп датчиков.

В жизни - это надо двоичную математику рыть. Не советую сразу этим заниматься

611. psnsergey, 05.05.2007 07:26
КРОКОДИЛ
И - говорим на выход "Да", если и первый вход сказал "да", и второй, и третий...
ИЛИ - говорим на выход "Да", если или первый вход сказал "да", или второй, или третий...

Отсюда нетрудно сделать вывод двух формул де Моргана:

Первая: если ИЛИ = 0, то ВСЕ входные сигналы схемы = 0 (и только тогда), а значит, проинвертировав их (получатся единицы) и подав на схему И, получим 1 (только если ВСЕ входа = 0). Иными словами,
а ИЛИ б = НЕ((НЕ а) И (НЕ б))

Вторая: если И = 1, то ВСЕ входные сигналы схемы = 1 (и только тогда), а значит, проинвертировав их (получатся нули) и подав на схему ИЛИ, получим 0 (только если ВСЕ входа = 1). Иными словами,
а И б = НЕ((НЕ а) ИЛИ (НЕ б))

Проще говоря, в отрицательной логике (если за "да" принимать не 1, а 0) схема И - это ИЛИ, а схема ИЛИ - это И. Понимание такового факта здорово помогает жить и работать. Можно сказать, что формулы де Моргана нераздельны с самим понятием операций И и ИЛИ, их надо запоминать вместе.

Например, надо получить функцию ИЛИ, а в наличии только И. Нет проблем: ставим элемент И, снабжаем входы ("нырок" в отрицательную логику, где "наш" И - это ИЛИ) и выход (всплытие "обратно" в "нашу" логику) инверторами - и наслаждаемся, даже не думая.

Ещё пример:

схема ИЛИ выдаёт 0 только если И первый, И второй, И третий входа = 0.
схема И выдаёт 0, только если ИЛИ первый, ИЛИ второй, ИЛИ третий входа = 0.

612. Kosta_GG, 05.05.2007 13:11
Меня учили так :
И - операция "умножения", если хоть один из множителей равен нулю, то произведение равно нулю. Стало быть чтобы произведение было равно единице, нужно чтоб все множители были единицы.
ИЛИ - операция "сложения", если хоть одно слагаемое НЕ ноль, то и сумма будет НЕ ноль. Чтобы сумма была нулем, необходимо чтобы все слагаемые были нули.

613. КРОКОДИЛ, 05.05.2007 16:22
psnsergey
схема ИЛИ выдаёт 0 только если И первый, И второй, И третий входа = 0.
схема И выдаёт 0, только если ИЛИ первый, ИЛИ второй, ИЛИ третий входа = 0.

Класс -сразу во все начал вьезжать!
Kosta_GG
Меня учили так :
И - операция "умножения", если хоть один из множителей равен нулю, то произведение равно нулю. Стало быть чтобы произведение было равно единице, нужно чтоб все множители были единицы.

В принципе тоже самое что сказал psnsergey только более непонятно для человека который незнает о чем идет речь

Добавление от 05.05.2007 16:56:

Sony_Sony
У тебя нигде в казематах не завалялось руского даташита на ATtiny2313?

614. Dikoy, 06.05.2007 00:39
Не думаю, что он существует.
Кроме того, потроха меги 128 и тиньки, в принципе, одинаковы. При использовании кодевижна вообще не должно возникнуть проблем...

615. КРОКОДИЛ, 06.05.2007 01:49
Dikoy
Кроме того, потроха меги 128 и тиньки, в принципе, одинаковы
Тоесть можно писать прогу под мегу128, а потом спокойно ее заливать в ATtiyny2313? А кодевижен работает с асемблером?

616. Dikoy, 06.05.2007 04:16
КРОКОДИЛ
Тоесть можно писать прогу под мегу128, а потом спокойно ее заливать в ATtiyny2313?
Нет. Можно посмотреть в ДШ к меге устройство модулей, которые есть в тиньке. например, UART, SPI и т.п. Разобраться в их работе. Потом сверить устройство с тинькой - скорее всего пары бит или возможностей, обрисованых в меге, в тиньке не будет. В остальном всё совпадёт. Сверив, используем эти модули в своей проге.

Всё остальное - математика и т.д. - это забота Си компилятора. Он сам распихает по регистрам.

То есть, при использовании Си тебе надо только знать, как работают те аппаратные модули, которые ты собираешься использовать, чтобы правильно их использовать. Остальные коде-вижн отключит по умолчанию сам. Вычисления и т.д. ты пишешь в тексте программы обычными мат. операторами, вместо чисел используя переменные языка. А переменная - это ни что иное, как регистр где-то в памяти МК. Где, тебя не колышет. Си сам их распределил и работает с ними.

Если пишешь на ассме - тогда сложнее, придётся ВСЁ делать вручную. Тут действительно придётся штудировать весь даташит на конкретную железку... Оно тебе надо?

Учебник по Си для средней школы (а больше для МК не надо), это 40 страниц книжки мелкого формата.... Меньше школьного реферата по объёму...

А кодевижен работает с асемблером?
Любой Си компилятор позволяет делать ассемблерные вставки в тело программы. Причём длина вставок неограничена - хоть всю прогу напиши. Только опять же, зачем?

Вставляют так:

#asm
//твои асмовые творения
#endasm

И всё. При компиляции твой асмовый код вклеется между откомпилеными Си кодами до и после твоего творения.

Почему ты так упорно не хочешь изучить Си? Он же проще! Да, там больше операторов чем в асме, но
1 - они все тебе сразу и не понадобятся, а вот асмовые команды скорее всего используются все сразу.
2 - они в итоге избавят тебя от кучи проблем и головной боли.

Добавление от 06.05.2007 06:24:

КРОКОДИЛ
Слухай, посмотрел я прогу 12 задачи и не знаю, какие вопросы там вообще могут быть?
Всё разжёвано и реализовано... Тебе в основной проге достаточно только дописать формулы вычисления data_hi, data_mid, data_low, которые описаны в тексте задачи, да получить от компа свои частоты.

Получив частоты, сохраняешь в еепром.

Далее, подсчитываешь значения регистров R, N и т.д., загоняешь их в буфер в памяти (так понятней и наглядней), потом этот буфер нарезаешь на 3 части (3 восьмибитных числа) и тупо передаёшь в синтезатор.
Вот, накропал для регистра R. Для остальных аналогично.

код:
 
void data_bufferiz (void) {

unsigned long int BUFFER; // Создали в памяти переменную (регистр, если угодно) аж 32 бита длиной

unsigned int RegR=8196; // Создали переменную 16 бит длиной и сразу записали туда значение 8196

//подготовка регистра R.
BUFFER = 0; //обнуляем буфер полностью.
BUFFER += (RegR*4);
/*присвоили буферу значение 32784, то есть число 8196 сдвинутое на два бита. В двоичной математике умножение на число
кратное двойке приводит к сдвигу на какое-то число разрядов. Умножение на 4 это сдвиг на 2, умножение на 16 - на 4 бита и т.д.
Это нужно для того, чтобы два младших бита - а это биты адреса регистра внутри интезатора - стали равны нулю
и наше число 8196 скопировалось именно в регистр N внутри синтезатора */

// Теперь, когда в буфере нужная нам структура, раскрошим BUFFER на 3 части по 8 бит дабы передать их через сонину функцию

data_low = BUFFER;
/* Т.к. data_low типа char, то есть 8 бит, то при присвоении переменной бОльшей длины ей присваивается лишь
младшие 8 бит числа BUFFER, в котором 32 бита.
Старшие 24 бита просто обрезаются.*/
data_mid = (BUFFER >> 8);
/* Тут то же самое, только перед присвоением мы сдвинули биты в числе BUFFER на 8 вниз.
То есть младшие 8 бит BUFFER, присвоенные в предыдушем пункте, ушли в небытие, а их заменили те 8 бит, что были над ними*/
data_hi = (BUFFER >> 16);
/* То же, только сдвиг на 16 бит

Теперь в переменных data_hi, data_mid, data_low сидят нужные байты и их можно передать в синтезатор*/

}


Кстати, напомни, что ты хотел залить с компа? То есть, какие частоты (каналы), сколько их и т.д. Сколько полей ввода и для каких чилез должно иметь ПО. Короче, как ты её видишь. Я напишу ПО на делфи и процедурку на CV, её потом подклеим к программе из задачи и всё... А то вдруг что изменилось с того момента, как я последний раз это спрашивал.

617. Pyku_He_oTTyda, 06.05.2007 10:51
КРОКОДИЛ
куда отправить? у меня есть в смысле на 90S2313

618. Sony_Sony, 06.05.2007 20:18
slil.ru

619. Pyku_He_oTTyda, 06.05.2007 20:28
http://cp.people.overclockers.ru/cgi-bin/dl.pl?id=22…=AT90S2313rus.pdf

620. Xradio, 06.05.2007 20:50
Dikoy
Почему ты так упорно не хочешь изучить Си? Он же проще!
"С" надо изучать. Ассемблер тоже.
deleted
Иначе говоря... Язык ассемблера не является собственно языком... Это мнемоника команд микроконтроллера! - Это базовая суть любой СИСТЕМЫ. Владеющий ей - Хозяин!
В отличии от тебя, Dikoy , к СО ЖА ЛЕ НИ Ю...!!! Как, впрочем, и многих других здесь халявщиков...

621. КРОКОДИЛ, 07.05.2007 02:50
Xradio
Случайно не помнишь рецепт травилки на основе медного купороса и соли, а то я уже не помню сколько чего сыпать . А хлорное железо закончилось.

Добавление от 07.05.2007 02:52:

Pyku_He_oTTyda
у меня есть в смысле на 90S2313
Спасибо большое! Здорово помог!

Добавление от 07.05.2007 03:11:

Dikoy
Оно тебе надо?
Почему ты так упорно не хочешь изучить Си? Он же проще!
Я не то что нехочу, просто начал с асма так как все радиолюбительские програмы написаны на асемблере -вот я и пытаюсь в них разобраться - пока безуспешно. И пришёл к выводу что действительно лучше взять все и написать заново чем разбираться в чужих дебрях. А так в принципе для меня разницы нет что изучать. Почитал мемуары Sony_Sony -да Си проще асемблера, особено привлекательно то что в качестве команд используются обычные математические знаки,- меньше путаницы. Просто учебник по асемблеру у меня есть уже распечатанный и когда выдается свободная минута я в него заглядываю, Си я сейчас распечатать не могу так как накрылся принтер а сидеть все время за компом мне никто не позволит , да и неудобно на компе изучать .

Добавление от 07.05.2007 04:35:

Dikoy
Далее, подсчитываешь значения регистров R, N и т.д., загоняешь их в буфер в памяти (так понятней и наглядней), потом этот буфер нарезаешь на 3 части (3 восьмибитных числа) и тупо передаёшь в синтезатор.
Вот, накропал для регистра R. Для остальных аналогично.

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

Кстати, напомни, что ты хотел залить с компа?
Вобщем синтезатор должен иметь переключатель на 8 фиксированных положений - не кнопки а именно переключатель -тоесть один из контактов все время замкнут. Соответственно каждому из восьми контактов должен соответствовать свой частотный канал с заранее неизвестной частотой которая должна заливатся с компа. Я раньше писал что промежуточная частота должна быть 10,7мгц или 21,4мгц -а сейчас подумал что лучше сделать запись отдельно частоты для приема и для передачи. - Тоесть в строчку ПО для каждого канала вписываем два значения, пример -TXD =160,4625мгц ..........RXD =149,7625 Всего 8 таких строчек.Ну и естественно возможность не только записывать но и считывать частоты. Соответственно на камне должна быть ножка переключающая прием/передачу. Вписываемые частоты должны быть кратны 12,5 килогерцам. Я раньше писал что границы диапазона длжны быть от 144 до 172мгц но неплохо бы было растянуть диапазон до 470мгц -тоесть чтоб он стал универсальным, потому что сейчас потихоньку намечается тендэнция перехода на СВЧ -но если это сильно заморочно то тогда ненужно. За кварец на 10.245мгц -забудь -посчитай под какой нибудь стандартный кварец,- лучше всего 4,5мгц. Я не сильно наглею???

622. Dikoy, 07.05.2007 06:29
Xradio
Язык ассемблера не является собственно языком... Это мнемоника команд микроконтроллера! - Это базовая суть любой СИСТЕМЫ. Владеющий ей - Хозяин!
Тогда начинай с объяснения КРОКОДИЛу смысла И, ИЛИ и регистров. Сдвигов и т.п. рассыпушных терминов. А то интересно получается - товаришь в логике не шарит, время его жмёт, но некоторые упорно садят его на ассм
Ты б тогда хоть алгоритм-билдер ему порекомендовал, чтоли...

В отличии от тебя, Dikoy , к СО ЖА ЛЕ НИ Ю...!!!
Я владею ассмом. Ещё я умею менять накладки на диске сцепления. Заклёпки загонять. Цилиндры в машине ремонтировать. Но почему-то предпочитаю покупать диски и цилиндры в сборе новые.

Я не доказываю проигрыш асма. Я исхожу из реалий - изучение МК за короткий срок. И тут CVAVR без конкурентов.

Добавление от 07.05.2007 07:04:

КРОКОДИЛ
Я не до такой степени еще вник в програмирование чтоб так запросто соединять куски програм.
Ну в моём куске то разобрался?
На неделе попобую написать прогу.

623. Pyku_He_oTTyda, 07.05.2007 07:34
Две ложки купороса и четыре ложки соли на пол-литра , дать настоятся и травить в горячем растворе

624. КРОКОДИЛ, 07.05.2007 12:31
Pyku_He_oTTyda
Понял, спасибо!
Dikoy
Ну в моём куске то разобрался?
Не совсем еще, -тут блин дергают меня по работе в разные стороны- не дают сосредоточится Я чтото пропустил что это за цифра 8196, кто такой char и что значит rjmp и rjmp forever?? - в компиляторе вычитал.

Добавление от 07.05.2007 12:34:

Dikoy
На неделе попобую написать прогу.
Так что можно LMXы заказывать?!

625. Sony_Sony, 07.05.2007 20:18
КРОКОДИЛ
Sony_Sony насчет И и ИЛИ -смотрю на пример и ничего не могу понять -не совпадает с обьяснением

Я несколько раз УЖЕ говорил тебе -

ПИСАТЬ НА БУМАГЕ НАДО !!! В СПЕЦИАЛЬНОЙ ТЕТРАДКЕ !!! КАК В ШКОЛЕ !!!

В уме будешь прикидывать когда понимать начнешь !

=========================

Вот пример со страницы 5 курса.

====================

10010 | 1001111 // "ИЛИ" - только 0 и 0 дают 0
// англ. название OR
1011111 // это результат

// только биты_5 в обоих числах были нули

====================

Решение:

запишем оба числа с которыми производится операция ИЛИ - "столбиком" как в школе - т.е. друг над другом.

0010010
1001111


Теперь берем бит_0 в каждом числе и применяем правило ("ИЛИ" - только 0 и 0 дают 0) записываем результат. Это 0 1 значит по правилу результат 1

Тоже делаем со следующими битами. Получаем:

1011111

Такой же ответ и в примере указан.

==========================

РЕШАЙ НА БУМАГЕ !!!

626. КРОКОДИЛ, 08.05.2007 03:05
Да я ж уже писал, что незнал про нулевой бит -поэтому сбило с толку пояснение только биты_5 в обоих числах были нули - если считать как я считал то пятые биты не получаются нулями. Так что хоть пиши хоть не пиши -все равно ничего не получалось Да и сейчас не очень понятно -где ты взял эти числа и куда нужно девать результат?
Sony_Sony
РЕШАЙ НА БУМАГЕ !!!
Слушаюсь и повинуюсь! А можно в исходник на асемблере вставлять вставки на Си??? Если можно то как???

Sony_Sony
На какой странице у тебя "Шапка" программы описывается?

627. Sony_Sony, 08.05.2007 06:28
КРОКОДИЛ
Да я ж уже писал, что незнал про нулевой бит -поэтому сбило с толку пояснение только биты_5 в обоих числах были нули - если считать как я считал то пятые биты не получаются нулями.

Я СТО раз тебе уже писал что таблица различных представлений числа все на той же странице /05.htm уже года 3 лежит !!!

КРОКОДИЛ
Да и сейчас не очень понятно -где ты взял эти числа

В голове ессно... ПРОСТО ПРИМЕР ! Любые два числа. Возьми любые пары да потренируйся. Результат сюда.

КРОКОДИЛ
и куда нужно девать результат?

НИКУДА !!! Считать компилятор будет. Вместо пары чисел он будет "видеть" и использовать результат.

КРОКОДИЛ
А можно в исходник на асемблере вставлять вставки на Си???

НихьТ


КРОКОДИЛ
Sony_Sony
На какой странице у тебя "Шапка" программы описывается?



Все на той же странице /05.htm "Си для МК"

========================================

Кроме моего непонятно написаного курса ЕСТЬ КНИГИ !!!

628. Dikoy, 08.05.2007 07:21
Sony_Sony
Кроме моего непонятно написаного курса ЕСТЬ КНИГИ !!!
Вот и я ему уж сколько талдычу - купи ШКОЛЬНЫЙ УЧЕБНИК ПО СИ!!! Не хочет человек...
Вот сейчас открыл бы и сразу увидел, что char, это объявление переменной типа char, то есть 8 бит длиной...


КРОКОДИЛ
Я чтото пропустил что это за цифра 8196
Читай в задаче 12 курса
Вообще, я всё больше убеждаюсь, что ты ВООБЩЕ не смотришь, что тебе написали и не сравниваешь это с кодами. Ибо если б ты это делал, то уже давно бы сам написал прошивку, а не спрашивал, что такое char...
Записи unsigned long int и unsigned int , я так понимаю, вопросов не вызывают?

Так что можно LMXы заказывать?!
А эт я не знаю! Теоретически, работать они будут. Числа мы в их регистры загоним (когда нибудь), а вот КАК они будут работать, это большой ХЗ, тут я те не помошник

Pyku_He_oTTyda
Слухай, что-то твоя ДШ у меня не качается упорно Не можешь на мыло скинуть? (в инфо)

629. Pyku_He_oTTyda, 08.05.2007 07:47
Dikoy
отмылил все руские, что были 2313,1200,2323

630. Sony_Sony, 08.05.2007 08:27
Антиквар !

Добавление от 08.05.2007 08:29:

Dikoy
я всё больше убеждаюсь, что ты ВООБЩЕ не смотришь, что тебе написали

Очевидно.

631. Pyku_He_oTTyda, 08.05.2007 08:41
Sony_Sony
не качай

632. Dikoy, 08.05.2007 12:04
Pyku_He_oTTyda
Ща на свой сайт выкину, от туда должно у всех качаться...

Sony_Sony
Ты когда-нибудь AT45D161 с питанием 5 вольт юзал? Как впечатления?

Добавление от 08.05.2007 12:27:

Во:
www.dikoy44.narod.ru/russianAVR/AT90S1200rus.pdf

www.dikoy44.narod.ru/russianAVR/AT90S2313rus.pdf

www.dikoy44.narod.ru/russianAVR/AT90S2323rus.pdf

633. Sony_Sony, 08.05.2007 12:37
Sony_Sony
Ты когда-нибудь AT45D161 с питанием 5 вольт юзал? Как впечатления?



Я AT45DB161 использовал в задаче 7 /z7.htm - до сих пор работает Апноут AVR335

634. КРОКОДИЛ, 08.05.2007 14:16
Dikoy
Вот и я ему уж сколько талдычу - купи ШКОЛЬНЫЙ УЧЕБНИК ПО СИ!!!
Куплю конечно, но пока не попадается -у нас все книжные магазины под ликероводочные переделали
Вообще, я всё больше убеждаюсь, что ты ВООБЩЕ не смотришь, что тебе написали и не сравниваешь это с кодами. Ибо если б ты это делал, то уже давно бы сам написал прошивку, а не спрашивал, что такое char...
Ну нехватает у меня мозгов на все сразу
а вот КАК они будут работать, это большой ХЗ,
А чего бы им не работать? если все правильно написано?

Добавление от 08.05.2007 14:26:

Sony_Sony
я всё больше убеждаюсь, что ты ВООБЩЕ не смотришь, что тебе написали

Очевидно.

Почему не смотрю -смотрю-просто до меня туго доходит это все. Ты что когда учился открыл учебник и сразу все понял? сразу все запомнил? и небыло никаких вопросов???!

Добавление от 08.05.2007 20:20:

Sony_Sony
Ладно проехали......... Давай все по порядку. -Вот допустим собрался я написать программу, отрыл кодевижен, -передо мной пустое окно, что я должен делать дальше? Как мне создать проэкт?

635. Dikoy, 09.05.2007 09:41
КРОКОДИЛ
Как мне создать проэкт?
Ща он тебя отправит на первую страницу курса и будет прав...

636. Sony_Sony, 09.05.2007 11:53
КРОКОДИЛ
Вот допустим собрался я написать программу, отрыл кодевижен, -передо мной пустое окно, что я должен делать дальше? Как мне создать проэкт?

Это задача-упражнение 3 - proavr.narod.ru/z3.htm - CVAVR по шагам и VMLAB.

Но курс рассчитан на чтение с начала.

Например язык Си для МК и структура программы это страницы /05.htm и /05a.htm

Механизм прерваний в AVR - страница /03.htm

Устройство AVR - страница /02.htm

Добавление от 09.05.2007 11:54:

====

Желаьтельно читать и делать на АВР 123 нм ру

Добавление от 09.05.2007 11:58:

Dikoy
Ща он тебя отправит на первую страницу курса

Верно. Там есть содержание курса.

А на странице 6 /06.htm перечень упражнений-задач.

637. КРОКОДИЛ, 09.05.2007 16:26
Dikoy
Ща он тебя отправит на первую страницу курса и будет прав...
Так пусть блин навигацию по курсу сделает или хотябы переключатель страничек, а то чтобы вернутся с седьмой страницы на третью целый геморой получается

638. Sony_Sony, 09.05.2007 16:44
Да какой геморой !!! Всего-то в адресе страницы в браузере 7 на 3 заменить и "ентер" нажать.

Сегодня день победы - надеюсь вы победите.

639. КРОКОДИЛ, 09.05.2007 18:32
Sony_Sony
Это задача-упражнение 3 - proavr.narod.ru/z3.htm - CVAVR по шагам и VMLAB
цитата:
Частота тактирования 1 МГц нас устраивает и МК поставляется с завода именно с такой частотой внутреннего генератора (подробнее в ДШ: "System Clock and Clock Options" и на стр. 2 курса), т.е. не нужно будет изменять фьюзы и не нужен будет внешний кварц с конденсаторами.
Ну вопервых меня неустраивает внутренняя частота 1мгц, а нужен внешний кварец на 4,5мгц -как его включить -просто вписать в окошко эту частоту? А что выставлять в окошке Crystal Oscillator Divider???

Добавление от 09.05.2007 19:34:

Промт переводит слово Divider как Сепаратор -это чё такое???

Добавление от 09.05.2007 19:38:

А какие порты лучше выставлять на выход? а какие на вход?

Добавление от 09.05.2007 19:43:

Dikoy
Не, я с этим програмированием 100% в психушку попаду!

640. Sony_Sony, 09.05.2007 19:47
дивайдер - делитель, сепаратор тоже как бы делит что-то на фракции.

Вписать в частоту.

Подумай - если у тебя кварц на Х и тебе нужна частота Х то на сколько нудно делить ?

Выходы и входы нужно назначть в соответствии с вашей схемеой.

641. КРОКОДИЛ, 09.05.2007 20:09
Sony_Sony
Выходы и входы нужно назначть в соответствии с вашей схемеой.
Тоесть ограничений или приоритетов никаких нет?

Добавление от 09.05.2007 20:39:

Dikoy
Я чтото пропустил что это за цифра 8196
Читай в задаче 12 курса

цитата:
В счетчик R (R counter) мы загрузим число на которое нужно поделить опорную частоту - это будет шаг частот которые сможет синтезировать синтезатор.

Если нам нужен шаг 12,5 КГц то поделим 10245 КГц на 12,5 КГц получаем число 819,6 - но дробное значение R нам не подходит. Уменьшим шаг в 10 раз - до 1,25 КГц - теперь в R нам нужно загрузить число 8196. Смотрим в даташит LMX2316 раздел "PROGRAMMABLE REFERENCE DIVIDER" и видим, что диапазон чисел для от 3 до 16383 - значит наш коэффициент деления опорной частоты - 8196 - допустим.

Здесь Sony_Sony считал под кварц 10,245мгц с шагом 1,25кгц. Но условия задачи изменились и нужно под 4,5мгц с шагом 12,5кгц - тоесть делитель будет 360! А как посчитать тактовую частоту самого МК для такой задачи?

642. Sony_Sony, 09.05.2007 20:54
КРОКОДИЛ
Тоесть ограничений или приоритетов никаких нет?


В принципе нет. Но если вам USART нужен то не стоит на его выводы светодиод вешать или ключ.

КРОКОДИЛ
нужно под 4,5мгц с шагом 12,5кгц - тоесть делитель будет 360! А как посчитать тактовую частоту самого МК для такой задачи?

Дак 4.5 и подойдет. Чтоб 1 кварц использовать.

Тыб МК указал уже ...

643. КРОКОДИЛ, 10.05.2007 02:10
Sony_Sony
В принципе нет. Но если вам USART нужен то не стоит на его выводы светодиод вешать или ключ.
Уже конкретней!
Тыб МК указал уже ...
Дык я ж уже указывал ATtiny2313 - других просто нет в наличии, -да и не нужно вроде как, -я думаю ресурсов должно хватить

Добавление от 10.05.2007 02:28:

Sony_Sony
Вот смотри пересчитал кусочек который давал Dikoy

код:
void data_bufferiz (void) {

unsigned long int BUFFER; //

unsigned int RegR=360; //
//подготовка регистра R.
BUFFER = 0; //обнуляем буфер полностью.
BUFFER += (RegR*4) ; 1440
data_low = BUFFER
data_mid = (BUFFER >> 8)
data_hi = (BUFFER >> 16)


}

Далее, подсчитываешь значения регистров R, N и т.д., загоняешь их в буфер в памяти (так понятней и наглядней), потом этот буфер нарезаешь на 3 части (3 восьмибитных числа) и тупо передаёшь в синтезатор. А сколько всего регистров нужно? Как организовать опрос переключателя? А в ЕЕПРОМ тоже нужно организовывать трехэтажные ячейки типа hi, mid, low? И как это все вместе увязать?

И как организовать восемь ножек на переключатель -просто переключить один порт полностью на вход? Так у ATtiny2313 вроде только один порт восьмибитный -впрочем мне и семи положений должно хватить. Как организовать вытаскивание данных из ЕЕпром, -это нужно специальную подпрограмму писать?

Добавление от 10.05.2007 08:32:

Что обозначают фигурные скобки? -на твоем сайте я ничего про них ненашел

644. Dikoy, 10.05.2007 11:37
Sony_Sony
Я AT45DB161 использовал в задаче 7 /z7.htm - до сих пор работает
Мне по ТЗ нельзя юзать микрохемы в нестандартных режимах. Вот и спрашиваю про пятивольтную.

КРОКОДИЛ
Так пусть блин навигацию по курсу сделает или хотябы переключатель страничек, а то чтобы вернутся с седьмой страницы на третью целый геморой получается
Это да, это всех бесит
Самое смешное, что мест по краям море, всунуть фрейм со ссылками не проблема...

как его включить -просто вписать в окошко эту частоту? А что выставлять в окошке Crystal Oscillator Divider???
Значение частоты кварца нужно компилятору, например, для расчёта задержек. Ввёл ты, к примеру, дадержку на 10 мС ( delay_ms(10); ), вот он и расчитывает, сколько тиков шины надо отсчиать для такой задержки при заданной частоте кварца.
Делитель осцилятора позволяет делить частоту кварцевого генератора в какое-то число раз. Причём включать этот делитель ты можешь из своей программы в процессе работы устройсва. Это полезно, например, для снижния потребления девайса путём снижения его тактовой частоты. Опять же, тактовые частоты всех частей МК выростают из частоты осцилятора. Если тебе надо передать данные по UART на свернизкой скорости (ну мало ли...) а UARTовского делителя не хватает, можно на время передачи снижать частоту всего МК.

Что обозначают фигурные скобки? -на твоем сайте я ничего про них ненашел
Они ограничивают поле действия оператора.
Например, цикл
while (1) { много_разных_операций }
будет крутиться в пределах, ограниченных фигурными скобками.

А какие порты лучше выставлять на выход?
Любые. Причём на вход/выход выставляются не порты, а конкретные лапки. В пределе порта можут быть и входы, и выходы.
Прежде чем выставлять их, убедись, что ты не используешь альтернативную функцию этой лапки. Например, тот же UART при включении занимает лапки Rx\Tx и ему пофиг, что ты там на эти лапки навключал

А как посчитать тактовую частоту самого МК для такой задачи?
любая, на которой UART работет без ошибок. Открываешь ДШ, раздел UART. Там в самом конце раздела табличка, частоты кварцев, скорости UART и ошибки (Error) UART на этих скоростях при данной частоте кварца. Вот выбирай любой кварц где напротив скорости 9600 стоит 0.0%, там много вариантов.

Дак 4.5 и подойдет. Чтоб 1 кварц использовать.
Угу. А как UART будет работать?

А сколько всего регистров нужно?
Три, причём с одним мы уже разобрались

Как организовать опрос переключателя?
Тут вариантов много. Давай сначала с синтезатором закончим.

А в ЕЕПРОМ тоже нужно организовывать трехэтажные ячейки типа hi, mid, low? И как это все вместе увязать?
Можно и длинные, как хочешь.
Чтобы твоя переменная оказалась в епром, нужно при её объявлении перед ней этот епром написать:
eeprom long int koefp;
И всё, 32 бита у тебя уже сидят в епроме
Вытаскивать ничего не надо - просто используешь эту переменную в работе и всё. Когда ты её изменяешь, она перезаписывается в епроме.
Но учитывая, что по UART ты будешь получать восьмибитные значения, то есть коэффициенты будут уже накромсаны, то удобней сразу делать в епроме трёхэтажные значения.

645. Sony_Sony, 10.05.2007 11:47
Dikoy
Sony_Sony
Я AT45DB161 использовал в задаче 7 /z7.htm - до сих пор работает
Мне по ТЗ нельзя юзать микрохемы в нестандартных режимах. Вот и спрашиваю про пятивольтную.


Они разве выпускаются еще ???

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

Dikoy
А как UART будет работать?

нормально будет работать на 4800 7200 или в режиме x2 9600

Добавление от 10.05.2007 12:15:

КРОКОДИЛ
Что обозначают фигурные скобки? -на твоем сайте я ничего про них ненашел

А искал ?

646. КРОКОДИЛ, 10.05.2007 13:50
Dikoy
Сушай я непойму зачем коофицент деления кварца обьявлять как переменную? Скорее всего он должен рулить за константу, ведь именно этот коофицент выдает Эталонную частоту 12,5кгц для петли автозахвата и недолжен менятся никогда и не при каких условиях, а менятся будут только частота приема и частота передачи, но они заранее не известны, -хотя можно в них ради приличия забить края диапазона. А коофицент деления кварца длжен сидеть не в еепроме а быть жестко забитым в пересчете самой программы. Тоесть один раз прописали его и забыли про него.

647. Dikoy, 10.05.2007 14:14
КРОКОДИЛ
Если ты не будешь менять константу в программе, она и не изменится. Логичнее следать её в епроме,ч тобы изменить можно бьыло в любой момент с ПК - вдруг захочется другой шаг и т.д. Зачем умышленно уменьшать возможности прибора?

коофицент деления кварца обьявлять как переменную?
Ты про какрой кварц? Который в МК или который в синтезаторе?

Sony_Sony
или в режиме x2 9600
Вот Х2 при использовании обычного компового СОМ порта я бы не пользовал... Всякие FT232 лопают (и выдают) пакеты устойчиво и Х2 позволяет их устойчиво принимать. а вот сомпровые порты - далеко не все...

648. Sony_Sony, 10.05.2007 14:29
Dikoy
Вот Х2 при использовании обычного компового СОМ порта я бы не пользовал... Всякие FT232 лопают (и выдают) пакеты устойчиво и Х2 позволяет их устойчиво принимать. а вот сомпровые порты - далеко не все...

Какую то чепуху ты пишешь ! режим Х2 существует лишь внутри МК !!! наружу выдача ни как не отличается. СОМ порт ни чего не знает об этом - ему плевать что там внутри МК творится.

649. КРОКОДИЛ, 10.05.2007 14:46
Dikoy
Если ты не будешь менять константу в программе, она и не изменится. Логичнее следать её в епроме,ч тобы изменить можно бьыло в любой момент с ПК - вдруг захочется другой шаг и т.д. Зачем умышленно уменьшать возможности прибора?
Не, шаг 12,5 килогерца является универсальным и менятся не будет, изменение шага применяется только в синтезаторах с клавиатурой и дисплеем -для того чтобы переключать можно было быстрее. А 12,5 это минимальная ширина полосы пропускания УКВ трансиверов, тоесть уменьшать уже некуда, а увеличивать в данном варианте бессмысленно. А ЕЕпром подвержен сбоям если собьется один из частотных каналов то ничего страшного, -есть запасной, а если сбьется шаг то погибнут сразу все каналы. А обьявить его константой я хотел чтобы меньше с ним было возни.
коофицент деления кварца обьявлять как переменную?
Ты про какрой кварц? Который в МК или который в синтезаторе?

Не, кварц должен быть один для тактирования МК- тоесть нужно выбрать какоето значение чтобы оно стыковалось с UART и одновременно было кратно 12,5килогерцам для синтезатора, а в синтезаторе есть свой предделитель для кварца позволяющий подлючать практически любой кварц кратный частоте сравнения и именно на него нужно выдать константу обеспечивающую нужный шаг. Вот схемка с типовым включением кварца см. рис.

Добавление от 10.05.2007 14:59:

Dikoy
А последний проэкт этого автора вообще с тактированием МК от внутреннего LC генератора -я правда незнаю насколько это кузяво? Вот исходник на ASMe

код:
 ;Программа для синтезатора УКВ радиостанции, микросхема LM7001
;частота 144-146 МГц


.include "tn2313def.inc"
.def data = r0
.def if_l = r1
.def if_h= r2
.def ind_l = r3
.def ind_m = r4
.def ind_h = r5
.def ind_sl= r6
.def ind_sh= r7
.def fl_l = r8
.def fl_h =r9
.def fm_h = r10
.def fm_l = r11
.def del_h = r12
.def del_l = r13
.def flag_reg = r16
.def loop = r17
.def work_l =r18
.def work_h =r19
.def temp =r20
.def temp1 =r21
.def glob = r22
.def mult_l =r23
.def mult_m = r24
.def mult_h = r25
.def temp16_l = r26
.def temp16_m = r27
.def temp16_h = r28



;PORTb

.equ TX_IN = 0; Вход, 1-приём, 0 - передача
.equ A0 = 2 ; Выход, управление индикаторм
.equ WR1 = 3 ; Выход, запись в индикатор
.equ DB3 = 4 ; Выход, данные на индикатор/ вход SCAN
.equ DB2 = 5 ; Выход, данные на индикатор/ вход NEXT
.equ DB1 = 6 ; Выход, данные на индикатор/ вход DN
.equ DB0 = 7 ; Выход, данные на индикатор/ вход UP

;PORTD
.equ DAT=0 ; выход
.equ CL =1 ; выход
.equ CE = 2 ; выход
.equ TXOUT = 5 ; выход
.equ SCAN = 6 ; Вход, прекращение сканирования



.equ s_out = 0x60
.equ stack = 0x66


.equ flag_tx = 0
.equ flag_rep = 1


.cseg
.org 0

reset:
;***************************************************
;********установка стека****************************
;***************************************************
ldi temp, RAMEND
out SPL, temp

;****************************************************
;***************настройка портов********************
;***************************************************

ldi temp, 0b11110011;
out PORTB, temp
ldi temp, 0b00001100;
out DDRB, temp ;
ldi temp, 0b11111000;
out PORTD, temp
ldi temp, 0b00000111
out DDRD, temp ;




;***************************************************************
;********инициализация индикатора*******************************
;***************************************************************


;+++++++++разблокировка шины индикатора++++++++++++++
cbi PORTB, A0
ldi temp, 0x0F
mov data, temp
rcall lcdout ;выставляем адрес равным F
sbi PORTB, A0
ser temp
mov data, temp
rcall lcdout ;прописываем "1"
rcall lcdout

clr temp
rcall cln_sout
clr flag_reg
clr ind_sh






;**************************
;начальная загрузка частотных границ и ПЧ из ЕЕПРОМ
;**************************

ldi temp, fmin ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, fmin + 1
rcall EERead
mov fl_l, temp
ldi temp, fmax ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, fmax + 1
rcall EERead
mov fm_l, temp

;***********переход в сервисный режим*************

sbis PINB, DB2 ;если нажата, переход
rjmp min_sc ;в режим установки нижней частоты

;**************************************************

ldi temp, if_freq ;загружаем частоту ПЧ
rcall EERead
mov if_h, temp
ldi temp, if_freq + 1
rcall EERead
mov if_l, temp
ldi temp,ch0 ; загружаем значение из первой ячейки памяти в рабочую
rcall EERead
mov work_h, temp
ldi temp, ch0 +1
rcall EERead
mov work_l, temp



initial:

rcall display
rcall syntez
;***************************************
;***Опрос клавиш**********************
;*************************************

bigloop:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_rout

sbis PINB, DB1
rcall DN_rout

sbis PINB, TX_IN
rcall tx_rout

sbis PINB, DB2
rjmp read_mem

sbis PINB, DB3
rjmp sc_rout

rjmp bigloop



;***************************************************
;*********увеличение частоты************************
;***************************************************

UP_rout:
ldi temp, 0x01
rcall pause_ro
sbis PINB, DB0 ;ждём отпускания кнопки
rjmp UP_rout
ldi temp, 0x01
clc
add work_l, temp ;увеличиваем на 1
clr temp ;значение рабочего регистра
adc work_h, temp
cp fm_h, work_h
brne endup
cp fm_l, work_l
brsh endup
mov work_l, fl_l ;если значение достигло максимума,
mov work_h, fl_h ; записываем минимальное значение
endup:rcall display
rcall syntez
ret

;****************************************************
;*********понижение частоты**************************
;****************************************************

DN_rout:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB1 ;хдём отпускания кнопки
rjmp DN_rout
clr temp
clc
subi work_l, 0x01 ;уменьшаем на 1 содержимое
sbc work_h, temp ;рабочего регистра
cp work_h, fl_h
brne enddn
cp work_l, fl_l
brsh enddn

mov work_l, fm_l ;если значение достигло минимума
mov work_h, fm_h ;записываем максимальное значение
enddn:rcall display
rcall syntez
ret






;*****************************************
;********режим сканирования***************
;*****************************************

sc_rout: ldi temp, sc_min ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, sc_min + 1
rcall EERead
mov fl_l, temp
ldi temp, sc_max ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, sc_max + 1
rcall EERead
mov fm_l, temp



ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sc_rout
ldi temp, 0xDC
sts(s_out), temp
ldi temp, 0x70
sts(s_out+1), temp
scan_up:ldi temp, 0x01
clc
add work_l, temp ;увеличиваем на 1 значение регистра
clr temp
adc work_h, temp
mov mult_l, fm_l
mov mult_h, fm_h
sub mult_l, work_l
sbc mult_h, work_h
brsh otobr
mov work_l, fl_l ;если дошло до конца
mov work_h, fl_h ;записываем мин. значение
otobr: rcall display
rcall syntez
ldi temp, 0x04 ;пауза
rcall pause_ro
sbic PINB, DB3 ;если нажата SCAN
rjmp key2
voz1:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3
rjmp voz1
rjmp end_sc
key2: sbic PINB, TX_IN
rjmp key3
voz2:ldi temp,0x01
rcall pause_ro
sbis PINB, TX_IN
rjmp voz2
rjmp end_sc



;выход из режима сканирования
key3:sbic PIND, SCAN ;если нет несущей,
rjmp scan_up ;продолжаем сканирование

ldi glob,0x80 ;эта пауза определяет время задержки сканирования
oprotp:sbic PINB, DB3 ; после появления несущей
rjmp key11
voz11:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;если нажата одна из кнопок TX, scan,UP,DN
rjmp voz11 ;прекращаем сканирование
rjmp end_sc
key11:sbic PINB, TX_IN
rjmp key21
voz21:ldi temp, 0x01
rcall pause_ro
sbis PINB, TX_IN
rjmp voz21
rjmp end_sc


key21:sbis PIND, SCAN ; если несущая всё ещё есть,
rjmp oprotp ;ждём нажатия какой-нибудь кнопки
ldi temp,0x01 ; если несущая пропала,
rcall pause_ro ;формируем паузу
dec glob ; пока не обнулится GLOB
brne oprotp
rjmp scan_up ; продолжаем сканирование
end_sc:ldi temp, fmin ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, fmin + 1
rcall EERead
mov fl_l, temp
ldi temp, fmax ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, fmax + 1
rcall EERead
mov fm_l, temp

clr temp
sts(s_out),temp
sts(s_out+1),temp

rjmp initial


;*****************************************************
;*************Передача********************************
;*****************************************************
tx_rout: sbi PORTD, TXOUT
ldi temp, 0x78
sts(s_out), temp
sbr flag_reg, 0b00000001
rcall display
rcall syntez



return: sbis PINB, TX_IN
rjmp return
cbr flag_reg, 0b00000001

clr temp
sts(s_out), temp


cbi PORTD, TXOUT

rcall display
rcall syntez

ret


;******************************************************
;************чтение ячеек памяти***********************
;******************************************************
read_mem:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3
rjmp sav_mem
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp read_mem
ldi temp, 0x30
sts(s_out), temp
sts(stack), work_l
sts(stack+1), work_h
init1:
rcall ch_in
ldi temp, ch0
add temp, ind_sh
adc temp, ind_sh
push temp
rcall EERead
mov work_h,temp
pop temp
inc temp
rcall EERead
mov work_l,temp

rcall display
rcall syntez

bigloop1:sbis PINB, DB0; кнопками выбираем номер ячейки
rjmp UP_mem

sbis PINB, DB1
rjmp DN_mem

sbis PINB, DB2
rjmp rep_rout

sbis PINB, DB3
rjmp out_mem

sbis PINB, TX_IN
rcall tx_rout

rjmp bigloop1


;************************************
;увеличение номера ячейки памяти
;************************************

UP_mem:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB0 ;ждём отпускания кнопки
rjmp UP_mem

inc ind_sh ;увеличиваем номер ячейки
ldi temp,0x0A
cp ind_sh, temp
brlo init1 ;если дошло до конца
clr ind_sh ;сбрасываем номер ячейки
rjmp init1

;*************************************
;уменьшение номера ячейки памяти
;*************************************

DN_mem: ldi temp, 0x01
rcall pause_ro
sbis PINB, DB1 ;ждём отпускания кнопки
rjmp DN_mem
dec ind_sh ;уменьшаем номер ячейки
brmi ust_ch
rjmp init1
ust_ch:ldi temp, 0x09
mov ind_sh, temp
rjmp init1

;*******************************************
;выход из режима работы с ячейками памяти
;*******************************************

out_mem:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp out_mem

rcall cln_sout
clr ind_sh
rjmp initial

;********************************************************
;****************режим записи в ячейку*******************
;********************************************************
sav_mem:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3
rjmp sav_mem
ldi temp, 0xF8
sts(s_out), temp

init2: rcall ch_in
rcall display
rcall syntez



bigloop2:sbis PINB, DB0; кнопками выбираем номер ячейки
rjmp UP_ch

sbis PINB, DB1
rjmp DN_ch

sbis PINB, DB2
rjmp out_mem

sbis PINB, DB3
rjmp sav_ch

sbis PINB, TX_IN
rcall tx_rout

rjmp bigloop2

;************************************
;увеличение номера ячейки памяти
;************************************

UP_ch:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB0 ;ждём отпускания кнопки
rjmp UP_ch

inc ind_sh ;увеличиваем номер ячейки
ldi temp,0x0A
cp ind_sh, temp
brlo init2 ;если дошло до конца
clr ind_sh ;сбрасываем номер ячейки
rjmp init2

;*************************************
;уменьшение номера ячейки памяти
;*************************************

DN_ch: ldi temp, 0x01
rcall pause_ro
sbis PINB, DB1 ;ждём отпускания кнопки
rjmp DN_ch
dec ind_sh ;уменьшаем номер ячейки
brmi ust_ch1
rjmp init2
ust_ch1:ldi temp, 0x09
mov ind_sh, temp
rjmp init2

;*****************************************
;запись текущей частоты в выбранную ячейку
;*****************************************

sav_ch:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_ch
ldi temp, ch0
add temp, ind_sh
adc temp, ind_sh
push temp
mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
pop temp
inc temp
mov temp1, work_l
rcall EEwrite
rcall outsym
rcall cln_sout
lds work_l, (stack)
lds work_h, (stack+1)
rjmp initial

;*****************************************************
;*********репитерный режим****************************
;*****************************************************

rep_rout: ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp rep_rout
sbr flag_reg, 0b00000010
clr ind_sh

initr:
clr temp
sts(s_out), temp
ldi temp, 0xBA
sts(s_out+1), temp
mov temp,ind_sh
rcall decod
sts(s_out+2), data

ldi temp, rch0
add temp, ind_sh
adc temp, ind_sh
push temp
rcall EERead
mov work_h,temp
pop temp
inc temp
rcall EERead
mov work_l,temp

rcall display
rcall syntez

bigloopr:sbis PINB, DB0; кнопками выбираем номер ячейки
rjmp UP_mem1

sbis PINB, DB1
rjmp DN_mem1

sbis PINB, DB2
rjmp out_rep

sbis PINB, TX_IN
rcall tx_rout

rjmp bigloopr


;************************************
;увеличение номера ячейки памяти
;************************************

UP_mem1:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB0 ;ждём отпускания кнопки
rjmp UP_mem1

inc ind_sh ;увеличиваем номер ячейки
ldi temp,0x09
cp ind_sh, temp
brlo initr ;если дошло до конца
clr ind_sh ;сбрасываем номер ячейки
rjmp initr

;*************************************
;уменьшение номера ячейки памяти
;*************************************

DN_mem1: ldi temp, 0x01
rcall pause_ro
sbis PINB, DB1 ;ждём отпускания кнопки
rjmp DN_mem1
dec ind_sh ;уменьшаем номер ячейки
brmi ust_rch
rjmp initr
ust_rch:ldi temp, 0x08
mov ind_sh, temp
rjmp initr

;*******************************************
;выход из репитерного режима
;*******************************************

out_rep:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp out_rep
cbr flag_reg, 0b00000010

rcall cln_sout
lds work_l, (stack)
lds work_h, (stack+1)
rjmp initial


;****************************************************************

;***********сервисный режим, установка мин.частоты сканирования**

;****************************************************************


min_sc:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp min_sc


ldi temp, sc_min ;загружаем из памяти минимальную границу
rcall EERead
mov work_h, temp
ldi temp, sc_min + 1
rcall EERead
mov work_l, temp
ldi temp, sc_max ; загружаем максимальную границу
rcall EERead
mov fm_h, temp
ldi temp, sc_max + 1
rcall EERead
mov fm_l, temp
ldi temp, 0xD0 ;минимально возможная частота
mov fl_l, temp ;
ldi temp, 0x07 ;50 МГц
mov fl_h, temp ;

ldi temp, 0xDC ; "ScL"
sts(s_out), temp
ldi temp, 0x70
sts(s_out+1), temp
ldi temp, 0x68
sts(s_out+2), temp

rcall display

srvloop3:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rjmp max_sc

sbis PINB, DB3
rjmp sav_minsc

rjmp srvloop3


;***********запись мин значения сканирования


sav_minsc:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_minsc
ldi temp, sc_min

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, sc_min+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset



;****************************************************
;*****установка максимальной частоты сканирования****
;****************************************************


max_sc:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp max_sc


ldi temp, sc_min ;загружаем из памяти минимальную границу
rcall EERead
mov fl_h, temp
ldi temp, sc_min + 1
rcall EERead
mov fl_l, temp
ldi temp, sc_max ; загружаем максимальную границу
rcall EERead
mov work_h, temp
ldi temp, sc_max + 1
rcall EERead
mov work_l, temp
ldi temp, 0x40 ; максимально возможная частота
mov fm_l, temp ;
ldi temp, 0x1F ; 200 МГц
mov fm_h, temp ;

ldi temp, 0xDC ;"ScH"
sts(s_out), temp
ldi temp, 0x70
sts(s_out+1), temp
ldi temp, 0x3E
sts(s_out+2), temp

rcall display

srvloop4:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rjmp ifsav

sbis PINB, DB3
rjmp sav_maxsc

rjmp srvloop4


;***********запись максимального значения сканирования


sav_maxsc:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_maxsc
ldi temp, sc_max

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, sc_max+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset

;******************************************************
;**********Установка ПЧ********************************
;******************************************************

ifsav:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp ifsav


ldi temp, if_freq ;загружаем из памяти минимальную границу
rcall EERead
mov work_h, temp
ldi temp, if_freq + 1
rcall EERead
mov work_l, temp

ldi temp, 0x04
mov fm_h, temp
ldi temp, 0xB0
mov fm_l, temp

ldi temp, 0x14
mov fl_l, temp
clr fl_h

ldi temp, 0x06
sts(s_out), temp
ldi temp, 0xB8
sts(s_out+1), temp
clr temp
sts(s_out+2), temp

rcall display

srvloop5:sbis PINB, DB0; кнопками изменяем частоту
rcall UP_srv

sbis PINB, DB1
rcall DN_srv

sbis PINB, DB2
rjmp endsrv

sbis PINB, DB3
rjmp sav_if

rjmp srvloop5

;***********запись ПЧ


sav_if:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB3 ;ждём отпускания кнопки
rjmp sav_if
ldi temp, if_freq

mov temp1, work_h
rcall EEwrite ;записываем в память текущую частоту
ldi temp, if_freq+1
mov temp1, work_l
rcall EEwrite
rcall outsym
rjmp reset

;***************************************************
;*********увеличение частоты************************
;***************************************************

UP_srv:
ldi temp, 0x01
rcall pause_ro
sbis PINB, DB0 ;ждём отпускания кнопки
rjmp UP_srv
ldi temp, 0x01
clc
add work_l, temp ;увеличиваем на 1
clr temp ;значение рабочего регистра
adc work_h, temp
cp fm_h, work_h
brne endup3
cp fm_l, work_l
brsh endup3
mov work_l, fl_l ;если значение достигло максимума,
mov work_h, fl_h ; записываем минимальное значение
endup3:rcall display
ret

;****************************************************
;*********понижение частоты**************************
;****************************************************

DN_srv:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB1 ;хдём отпускания кнопки
rjmp DN_srv
clr temp
clc
subi work_l, 0x01 ;уменьшаем на 1 содержимое
sbc work_h, temp ;рабочего регистра
cp work_h, fl_h
brne enddn3
cp work_l, fl_l
brsh enddn3

mov work_l, fm_l ;если значение достигло минимума
mov work_h, fm_h ;записываем максимальное значение
enddn3:rcall display
ret



;************конец сервисного режима*****************

endsrv:ldi temp, 0x01
rcall pause_ro
sbis PINB, DB2 ;ждём отпускания кнопки
rjmp endsrv
rjmp reset




;*****************************************************
;***отображение информации на дисплее
;******************************************************


display:

ldi temp, 0b00000011;настраиваем порт на вывод данных
out PORTB, temp
ldi temp, 0b11111100;
out DDRB, temp ;

;************ преобразование частоты из 16-ричного вида в десятичный**************

clr mult_l
clr mult_m
clr mult_h
clr temp1
ldi temp, 0x19

sum:add mult_l, work_l ;умножаем на 25
adc mult_m, work_h
adc mult_h, temp1
dec temp
brne sum

ldi temp16_l, 0xA0 ;определяем кол-во сотен МГЦ
ldi temp16_m, 0x86
ldi temp16_h, 0x01
rcall decdig
mov ind_h, temp
swap ind_h
ldi temp16_l, 0x10 ;определяем количество десятков тысяч
ldi temp16_m, 0x27
clr temp16_h
rcall decdig
add ind_h, temp

ldi temp16_l, 0xE8 ;определяем количество тысяч
ldi temp16_m, 0x03
rcall decdig
mov ind_m, temp
swap ind_m
ldi temp16_l, 0x64 ;определяем количество сотен
clr temp16_m
rcall decdig
add ind_m, temp
ldi temp16_l, 0x0A ; определяе мколичество десятков
clr temp16_m
rcall decdig
mov ind_l, temp ; в конце операции в ячейках инд содержится
swap ind_l
add ind_l, mult_l


;*************************************************************
;********************вывод на дисплей*************************
;*************************************************************
enddig:
clr data
cbi PORTB, A0
rcall lcdout ;заносим в индикатор адрес начальной ячейки
sbi PORTB, A0
lds data, (s_out); 0-й символ
rcall lcdout
rcall lcdout
lds data, (s_out+1); 1-й символ
rcall lcdout
rcall lcdout
lds data, (s_out+2); 2-й символ
rcall lcdout
rcall lcdout
lds data, (s_out+3); 3-й символ
rcall lcdout
rcall lcdout
mov temp, ind_h ;4-й
cbr temp, 0x0F
swap temp
rcall decod
rcall lcdout
rcall lcdout
mov temp, ind_h ;5-й
cbr temp, 0xF0
rcall decod
rcall lcdout
rcall lcdout
mov temp, ind_m ;6-й
cbr temp, 0x0F
swap temp
rcall decod
inc data
rcall lcdout
rcall lcdout
mov temp, ind_m ;7-й
cbr temp, 0xF0
rcall decod
rcall lcdout
rcall lcdout
mov temp, ind_l ;8-й
cbr temp, 0x0F
swap temp
rcall decod
rcall lcdout
rcall lcdout
mov temp, ind_l;9-й
cbr temp, 0xF0
rcall decod
rcall lcdout
rcall lcdout


ldi temp, 0b11110011;на ввод данных
out PORTB, temp
ldi temp, 0b00001100;
out DDRB, temp ;
ret

;***************************************************
;*****ВВод информации в синтезатор******************
;***************************************************
syntez:
;mult_h=S, R2,R1 ,R0, TB, B2, B1, B0
mov mult_l, work_l ; множимое - текущее значение частоты
mov mult_m, work_h
sbrc flag_reg, flag_tx; sbic PINB, TX_IN
rjmp no_minus
ldi mult_h, 0xA2
sub mult_l,if_l;отнимаем ПЧ
sbc mult_m,if_h
sbrs flag_reg, flag_rep;если включён репитерный режим
rjmp vyv_s ;добавляем 600 кГц
clr temp1 ;для разноса
ldi temp, 0x18
add mult_l, temp
adc mult_m, temp1
rjmp vyv_s
no_minus:
ldi mult_h, 0xA4

vyv_s: cbi PORTD,DAT
sbi PORTD,CE ;

ldi loop, 0x08
mov temp,mult_l
loop2:ror temp ;вывод первого байта данных D0...D7
brcs h_l
cbi PORTD, DAT
rjmp sync
h_l:sbi PORTD, DAT
sync:rcall pulse
dec loop
brne loop2


ldi loop, 0x08
mov temp, mult_m
loop3:ror temp ; вывод второго байта данных D8...D15
brcs h_l1
cbi PORTD, DAT
rjmp sync1
h_l1:sbi PORTD, DAT
sync1:rcall pulse
dec loop
brne loop3



ldi loop, 0x08
mov temp, mult_h
loop21:ror temp ; вывод третьего байта
brcs h_l2
cbi PORTD, DAT
rjmp sync2
h_l2:sbi PORTD, DAT
sync2:rcall pulse
dec loop
brne loop21
cbi PORTD, DAT ;CE
cbi PORTD, CE
ret

;***вывод цифры на индикатор***
lcdout:


rol data
brcs h_lev0
cbi PORTB,DB3
rjmp nxt_a
h_lev0:sbi PORTB,DB3
nxt_a: rol data
brcs h_lev1
cbi PORTB,DB2
rjmp nxt_b
h_lev1:sbi PORTB,DB2
nxt_b:rol data
brcs h_lev2
cbi PORTB,DB1
rjmp nxt_c
h_lev2:sbi PORTB,DB1
nxt_c: rol data
brcs h_lev3
cbi PORTB,DB0
rjmp nxt_d
h_lev3:sbi PORTB,DB0
nxt_d:sbi PORTB,WR1
rcall long
cbi PORTB,WR1
rcall long
ret
;*************************
; Запись в ЕЕПРОМ
;**************************
EEwrite: sbic EECR, EEPE
rjmp EEwrite
out EEAR, temp
out EEDR, temp1
sbi EECR, EEMPE
sbi EECR, EEPE
ret
;***********************
; Чтение из памяти
;***********************
EEread: sbic EECR,EEWE
rjmp EERead
out EEAR,temp
sbi EECR,EERE
in temp,EEDR
ret
;*********************
; пауза
;*********************
pause_ro:
ser temp1
retu1:ser loop
retu2:dec loop
brne retu2
dec temp1
brne retu1
dec temp
brne pause_ro
ret


long:
ldi temp1, 0x05 ; (20)
retlong:dec temp1
brne retlong
ret
;**********************************************
;подпрограмма пересчёта НЕХ- десятичное число
;**********************************************
decdig:ldi temp,-1
minus:sub mult_l, temp16_l
sbc mult_m, temp16_m
sbc mult_h, temp16_h
inc temp
brsh minus
add mult_l, temp16_l
adc mult_m, temp16_m
adc mult_h, temp16_h
ret
;***********************************************
;*******перекодировка цифра - код***************
;***********************************************

decod:clr temp1
ldi ZH, high(DIG*2)
ldi ZL, low(DIG*2)
add ZL, temp
adc ZH, temp1
lpm
ret
;************************************
;**перекодировка номера ячейки памяти в код и размещение в ОЗУ
;**для вывода на индикатор
;************************************

ch_in:
clr temp
rcall decod
sts (s_out+1), data
mov temp,ind_sh
rcall decod
sts (s_out+2), data
ret

;вывод на экран сообщения "SAVE"

outsym: ldi temp, 0b00000011;настраиваем порт на вывод данных
out PORTB, temp
ldi temp, 0b11111100;
out DDRB, temp ;
clr data
cbi PORTB, A0
rcall lcdout ;заносим в индикатор адрес начальной ячейки
sbi PORTB, A0
clr data
rcall lcdout
rcall lcdout
clr data
rcall lcdout
rcall lcdout
clr data
rcall lcdout
rcall lcdout
ldi temp, 0xDC
mov data, temp
rcall lcdout
rcall lcdout
ldi temp, 0xBE
mov data, temp
rcall lcdout
rcall lcdout
ldi temp, 0x6E
mov data, temp
rcall lcdout
rcall lcdout
ldi temp, 0xF8
mov data, temp
rcall lcdout
rcall lcdout
ldi temp, 0x76
mov data, temp
rcall lcdout
rcall lcdout
clr data
rcall lcdout
rcall lcdout
clr data
rcall lcdout
rcall lcdout

ldi temp, 0x20
rcall pause_ro

ldi temp, 0b11111111;на ввод данных
out PORTB, temp
ldi temp, 0b00000000;
out DDRB, temp ;

ret

;*****очистить знакоместа*********
cln_sout:clr temp
sts(s_out), temp
sts(s_out+1), temp
sts(s_out+2), temp
sts(s_out+3), temp
ret

;*********************
; синхроимпульс
;*********************
pulse:;ret ;technologic return
sbi PORTD, CL
ldi temp1,0x1F
zad1:dec temp1
brne zad1
cbi PORTD, CL
ldi temp1,0x1F
zad2:dec temp1
brne zad2
ret

DIG:.db 0xEE, 0x06, 0xF2, 0xD6, 0x1E, 0xDC, 0xFC, 0x86, 0xFE, 0xDE ;0...9

.eseg
.org 0

fmin:
.db 0x16, 0x80 ;минимальная частота 144000/25 кГц
;здесь можно записать другое значение нижнего предела частоты
fmax:
.db 0x16, 0xD0 ;максимальная частота 146000/25 кГц
;здесь можно записать другое значение нижнего предела частоты
if_freq:
.db 0x01, 0xAC ; - частота ПЧ 10700/25 кГц

;при других границах перестройки синтезатора не забудьте занести
;в ячейки памяти нужные значения частоты в пределах min<F<max

sc_min:
.db 0x16, 0xA8 ; - минимальная частота сканирования

sc_max:
.db 0x16, 0xC8 ; - максимальная частота сканирования


; - ячейки памяти

ch0:
.db 0x16, 0xBC
ch1:
.db 0x16, 0xBD
ch2:
.db 0x16, 0xBE
ch3:
.db 0x16, 0xBF
ch4:
.db 0x16, 0xC0
ch5:
.db 0x16, 0xC1
ch6:
.db 0x16, 0xC2
ch7:
.db 0x16, 0xC3
ch8:
.db 0x16, 0xC4
ch9:
.db 0x16, 0xC5


rch0:
.db 0x16, 0xA8
rch1:
.db 0x16, 0xA9
rch2:
.db 0x16, 0xAA
rch3:
.db 0x16, 0xAB
rch4:
.db 0x16, 0xAC
rch5:
.db 0x16, 0xAD
rch6:
.db 0x16, 0xAE
rch7:
.db 0x16, 0xAF
rch8:
.db 0x16, 0xB0

.db "(c)Temerev25012007"



Добавление от 10.05.2007 15:05:

Dikoy
Я кстати так толком и ненашел где у него шаг забит!

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

650. Dikoy, 10.05.2007 15:22
Sony_Sony
режим Х2 существует лишь внутри МК !!!
Квантования приёма 8 раз? Некоторые СОМ порты такую чушь выдают, что МК их не понимает в Х2.

651. Sony_Sony, 10.05.2007 15:31
Дак ты то писал про непонимание КОМ портом !!! Если КОМ на 9600 не понятное для 8-ми опросов на бод выдает то стоит ли использовать такой СОМ ? И является ли он КОМ ?

652. КРОКОДИЛ, 10.05.2007 16:52
Dikoy
Логичнее следать её в епроме
Так может и ЕЕПРОМа нехватить, а вешать внешний нехочется!

653. Dikoy, 10.05.2007 20:39
КРОКОДИЛ
Так может и ЕЕПРОМа нехватить, а вешать внешний нехочется!
Тебе хватит

654. КРОКОДИЛ, 10.05.2007 21:14
Чтото я несоображу -восемь каналов по 32 бита это уже 256 а у tn2313 всего 128

Добавление от 11.05.2007 02:56:

Dikoy
Например, тот же UART при включении занимает лапки Rx\Tx и ему пофиг, что ты там на эти лапки навключал
Так UART использует еще и лапки INT0 и INT1 -на них тоже ничего нельзя вешать? -Тоесть четыре лапки должны выпасть из схемы?

Добавление от 11.05.2007 04:02:

Посмотрел таблицы кварцев для UART они мне все планы ломают - потому что дробные кварцы я буду искать долго и нудно кроме того они не будут совпадать с пересчетом частот синтезатора Може ну его нафиг этот UART -я в принципе могу просто вывести на трансиверах разьёмы для внутрисхемного програмирования и через них заливать коды частотных каналов в ЕЕпром.

655. joptpd, 11.05.2007 11:15
я тут поднимал вопрос о кварцах керамике и внутрених генераторах
дык вот практика показывает нормальную работу тини2313 от встроеного генератора на 8 мгц с делителем 8
т.е. перифирия работает на 1мгц
юарт на 2400 работает без ошибок но на 9600 он не будет от 1мгц
надо бит делителя снять

и для управления лм7001 в мк кварц не нужен
ваще мода какая то пошла на кварцы
ладно еще там дырки просверлить но где взять кондеры по 22пф? да еще смд

656. An_private, 11.05.2007 11:25
КРОКОДИЛ
потому что дробные кварцы я буду искать долго и нудно
с какого? наоборот кварцы для UART есть почти всегда. А вот найти какой-нибудь 27.000 МГц - застрелишься.

657. Dikoy, 11.05.2007 12:05
КРОКОДИЛ
Так UART использует еще и лапки INT0 и INT1 -на них тоже ничего нельзя вешать?
Нет, INT - это прерывания. Ты их можешь е использовать. Для UART необходимы только Rx|Tx.

кроме того они не будут совпадать с пересчетом частот синтезатора
Ты же вроде решил раздельные кварцы на МК и трансивер вешать?..

joptpd
ваще мода какая то пошла на кварцы
Ну да... Ему то, по сути, стабильость частоты нужна только для работы по UART. SPI для связи с трансивером вообще не требователен к стабильности, а больше там стабилизировать то и нечего...

но где взять кондеры по 22пф? да еще смд
Что у вас там в дойчленде за индустрия, если кондёров купить проблема?..

КРОКОДИЛ
Мож тебе правда мозг не любить а запустить МК от внутреннего RC на 8 МГц? 9600 работать будет с терпимой ошибкой, в конце концов сделаем проверку правильности приёма данных...
ЗЫ: Всё, я уезжаю в Тулу, там инета не будет, зато будет делфи Так что со связи исчезаю временно, но прогу напишу.

Добавление от 11.05.2007 12:06:

An_private
наоборот кварцы для UART есть почти всегда. А вот найти какой-нибудь 27.000 МГц - застрелишься.
Даже когда найдёшь, ещё надо умудриться запустить его на этих 27...

658. An_private, 11.05.2007 12:07
Dikoy
Даже когда найдёшь, ещё надо умудриться запустить его на этих 27
так я генераторы готовые покупаю

659. КРОКОДИЛ, 11.05.2007 15:32
joptpd
и для управления лм7001 в мк кварц не нужен
лм7001- это я для примера привел, -а вообще пытаюсь спроэктировать под LMX2316 а она более требовательная к стабильности, тем более при частотах 144...470мгц.

Добавление от 11.05.2007 15:45:


An_private
наоборот кварцы для UART есть почти всегда. А вот найти какой-нибудь 27.000 МГц - застрелишься.
Так не совпадают частоты UART с пересчетом частот синтезатора А кварцы на 27мгц в природе встречаются крайне редко. 27 мегагерц пишут обычно на 9мегагерцовых кварцах с повышенной отдачей на нечетных гармониках. У меня их с десяток есть в наличии- все проверял на частотомере -показывает 9мгц, а на корпусе указана третья механическая гармоника, но может быть и пятая если написанно например 100мгц.

660. Kokosha, 11.05.2007 15:50
КРОКОДИЛ
Так не совпадают частоты UART с пересчетом частот синтезатора

Дак внимательно страницу 23 прочитайте !!!

661. An_private, 11.05.2007 15:55
КРОКОДИЛ
Так не совпадают частоты UART с пересчетом частот синтезатора
с чего?
стандартные частоты - 3.6864, 7.3728, 14.7456 - в любом магазине

662. КРОКОДИЛ, 11.05.2007 16:19
Dikoy
Ты же вроде решил раздельные кварцы на МК и трансивер вешать?..
Ну да, смотри что получается: в трансивере стоит кварц 10,245мгц который нельзя применить для микросхемы синтезатора изза несовпадения пересчета, значит ставим в синтезатор отдельный кварец -допустим на 4,5 мгц, а теперь получается что для МК тоже нужно ставить свой кварц. Тесть уже третий?
Мож тебе правда мозг не любить а запустить МК от внутреннего RC на 8 МГц?
Не доверяю я RC для узкополосых устройств бесподстроечной связи. Запускать устройство в серию с RC непроверив стабильности я не рискну, -хочется жить спокойно! Здесь нестоит забывать что трасиверы будут стоять в автомобилях в том числе и отечественых -тоесть стабильности питания никакой! И перепады температуры от минус 30 до плюс 70градусов! Может сделать чтоб он работал в обычном режиме от кварца, а при перезаписи по UART переключался на встроеный RC, а после перезаписи снова на кварц? А можно так сделать? Или просто поставить кварц на 8 мгц и не сушить мозги? -он вроде совпадает и с синтезатором и с UART. Вечером посмотрю есть ли они на фирме.

663. Kokosha, 11.05.2007 16:26
КРОКОДИЛ
допустим на 4,5 мгц, а теперь получается что для МК тоже нужно ставить свой кварц.

По странице 23 не получается лишнего кварца для МК.

Добавление от 11.05.2007 16:27:

КРОКОДИЛ
просто поставить кварц на 8 мгц и не сушить мозги?

Очевидно нужно перебирать комбинации и смотреть что получается - это и есть конструирование.

664. КРОКОДИЛ, 11.05.2007 16:30
An_private
стандартные частоты - 3.6864, 7.3728, 14.7456 - в любом магазине
Не, мне нужно чтобы кварц был кратен 12,5 килогерцам. А UARTовские не отвечают этому требованию.

665. K_AV, 11.05.2007 16:41
КРОКОДИЛ
"Я кстати так толком и ненашел где у него шаг забит!"
Шаг определяется синтезатором. Режим работы синтезатора задается засылкой в него 3 управляющих байт.
код:
;*************************************************** 
;*****ВВод информации в синтезатор******************
;***************************************************
syntez:
;mult_h=S, R2,R1 ,R0, TB, B2, B1, B0
mov mult_l, work_l ; множимое - текущее значение частоты
mov mult_m, work_h

Вот расписана структура этих 3 байт. Два младших "mult_l", "mult_m" определяют значение внутреннего делителя частоты, старший "mult_h" - все остальное (S, R2, R1, R0, TB, B2, B1, B0), в т.ч. и шаг (опорную частоту) - конкретно для частоты это биты "R2", "R1", "R0" (по даташиту на LM7001).
код:
no_minus:
ldi mult_h, 0xA4

vyv_s: cbi PORTD,DAT

А вот тут байту "mult_h" присвоено значение 0xA4 = b10100100, отсюда "R2 R1 R0" -> "010", т.е. значение частоты (из даташита) 25 кГц.

666. КРОКОДИЛ, 11.05.2007 16:43
Kokosha
Дак внимательно страницу 23 прочитайте !!!
Это насчет чего конкретно? А за что тебя опять забанили?
По странице 23 не получается лишнего кварца для МК.
Имеется в виду шаг 1,25килогерца? Так тогда делители огромные получаются -для частоты 470мгц делитель будет 376000 а вдруг мне понадобится 1200мегагерц? что тогда -опять сушить мозги над новой програмой? Я этого второй раз непереживу!

667. K_AV, 11.05.2007 16:49
КРОКОДИЛ
"Я этого второй раз непереживу!" Так во второй раз будет гораздо легче

668. КРОКОДИЛ, 11.05.2007 16:52
K_AV
А вот тут байту "mult_h" присвоено значение 0xA4 = b10100100, отсюда "R2 R1 R0" -> "010", т.е. значение частоты (из даташита) 25 кГц.
Во как все запутано Сам я не в жись бы не нашел! Спасибо!

Добавление от 11.05.2007 17:00:

K_AV
Так во второй раз будет гораздо легче
Так у меня щас в голове такая каша! -мозги дымятся! Сначала забил себе голову Асемблером, ничего там не успел понять и начал мучить Си И это все при ненормированом рабочем дне, -тоесть 30часов в сутки!

Добавление от 11.05.2007 17:14:

Dikoy
Всё, я уезжаю в Тулу
Надолго?
но прогу напишу
Бум ждать!
Даже когда найдёшь, ещё надо умудриться запустить его на этих 27...
Так а чего здесь умудрятся то? -Обычный кварцевый генератор на одном транзисторе, только в колекторе(стоке) нужно поставить контур настроеный в резонанс на 27мгц -и всего делов. Правда место занимает,- для миниатюрных девайсов не шибко хорошо.

Добавление от 11.05.2007 17:19:

Kokosha
Тебе нигде не попадалась апнота на перeделку с PIC16F84A на PIC16F628?

669. K_AV, 11.05.2007 18:07
КРОКОДИЛ
"Тебе нигде не попадалась апнота на перeделку с PIC16F84A на PIC16F628?"
http://www.microchip.com/stellent/idcplg?IdcService=…E&nodeId=1955 - перечень всех аппнот по переходу от одного контроллера на другой. Требуемое тебе - отсутствует. Видимо, Microchip не считает PIC16F628 прямым наследником (заменителем) PIC16F84A . Так что придется класть рядом два даташита...

670. Kokosha, 11.05.2007 18:32
КРОКОДИЛ
Имеется в виду шаг 1,25килогерца?

имеется ввиду что там написано что UART будет работать НОРМАЛЬНО и при кврце 4.5 МГц

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

и указаны скорости передачи.

671. КРОКОДИЛ, 11.05.2007 19:30
Kokosha
имеется ввиду что там написано что UART будет работать НОРМАЛЬНО и при кврце 4.5 МГц
А, понятно, я ж не спец в этом -поэтому и заморачиваюcь.
K_AV
Требуемое тебе - отсутствует. Видимо, Microchip не считает PIC16F628 прямым наследником (заменителем) PIC16F84A
Блин -невезет так невезет!!!? А можешь толком объяснить чё там менять нужно, это уже отлаженный и рабочий проэкт, вот только PIC16F84A все трудней и дорoже с каждым днем находить. Вот исходник:
код:
;*******************************************************************
;
; TODAC version add servo moteur gestion
; www.todac.com/realisation
;
;*******************************************************************
; PIC_LANC2.ASM
; Read & Control Sony Lanc with a PIC 16F84
; Original routine from David MEED, I added some improvements
;to control a Digital8 portable VTR (or DV) from a 3-CCD shoulder cam :
; use with schematic available on www.digital8.fr.st
;
;*******************************************************************
;
; This routine is the beginning of a routine to read and control a
; sony camera by LANC. LANC is a 9600 baud protocol, so the first
; job is to read the LANC at 9600 baud using a 4mhz clock!
;
; for this we will connect the LANC line directly to portA bit 4
; with a 10K pullup resistor to +5V.
;
; A 4 x 4 multiplexed keypad is connected to port B, with 100 K
; pullups on B 0-3, and 10K in series with each line B4-7.
;
; This is very rough and unpolished. Many mistakes.
;
; -David Meed 96/10/07
; Please feel free to use, modify and distribute to others as
; long as you include a note indicating your sources. I'd love
; to hear about any progress you make.
;*******************************************************************
; Some of the code has been lifted from Microchip's Embedded Control
; Handbook, Application Note AN510: "Implementation of an
; Asynchronous Serial I/O Using PIC 16C5x Microcontrollers"
;*******************************************************************
; Comments to David Meed (dmeed@nbnet.nb.ca) or on CCBBS
; 1994/09/09
;*******************************************************************
;
;
;
; portA, bit1 (RA1) = output : if VTR rec -> 5V ; other -> 0V
; portA, bit0 (RA0) = input : if 5V->VTR REC ; if 0V -> VTR Pause
;
;
;
; -si Byte 4 du lanc = 04 on allume la led portA, bit1
; -si RA0 = 5v -> VTR record
; -si RA0 = 0v -> stop record (pause)
;
;
;
; Nota : when camcorder if powered off by lanc, shorting lanc to
; ground a few ms (by a simple pushbutton) will wake up the camcorder.
;*******************************************************************





;*******************************************************************
; Begin code
;*******************************************************************
;****************** PIC16F84 Register Equates ************************
;
; Standard list of equates for all 16F84 projects
;
;***********************************************************************
;

LIST p=16F84A ; Dйfinition de processeur
#include <p16F84.inc> ; Dйfinitions des constantes

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC

; '__CONFIG' prйcise les paramиtres encodйs dans le processeur au moment de
; la programmation du processeur. Les dйfinitions sont dans le fichier .
; Voici les valeurs et leurs dйfinitions :
; _CP_ON Code protection ON : impossible de relire
; _CP_OFF Code protection OFF
; _PWRTE_ON Timer reset sur power on en service
; _PWRTE_OFF Timer reset hors-service
; _WDT_ON Watch-dog en service
; _WDT_OFF Watch-dog hors service
; _LP_OSC Oscillateur quartz basse vitesse
; _XT_OSC Oscillateur quartz moyenne vitesse
; _HS_OSC Oscillateur quartz grande vitesse
; _RC_OSC Oscillateur а rйseau RC

PIC84 equ 0H ; Define Reset Vectors
;
IND0 equ 00h
RTCC equ 1h
PC equ 2h
STATUS equ 3h ; F3 Reg is STATUS Reg.
FSR equ 4h
;
PORT_A equ 5h
PORTA equ 05h
porta equ 05h
PORT_B equ 6h ; I/O Port Assignments
PORTB equ 06h ; I/O register RB
portb equ 06h
;
;
EEDATA equ 8h ;
EEADR equ 9h ;
PCLATH equ 0AH ;
INTCON equ 0BH ;
;
OPTN equ 80H ;
OPTION_REG equ 81H ;
;
TRISA equ 85h ;
TRISB equ 86h ;
TRISC equ 87h
EECON1 equ 88h ;
EECON2 equ 89h ;
; ***** Dйclarations *****
tempo50u EQU 0x20 ; Variable tempo 50 µs ??????????????????????????????
tempo1ms EQU 0x21 ; Variable tempo 1 ms ??????????????????????????????
tempo100ms EQU 0x22 ; Variable tempo 100 ms
tempo2ms EQU 0x23 ; Variable tempo 2 ms
tempo20ms EQU 0x24 ; Variable tempo 20 ms
boucle1 EQU 0x25 ; Variable pour les boucles de pilotage servo

;
;
;
;***********************************************************************
;
; ; STATUS REG. Bits
CARRY equ 0h ; Carry Bit is Bit.0 of F3
C equ 0h
DCARRY equ 1h
DC equ 1h
Z_bit equ 2h ; Bit 2 of F3 is Zero Bit
Z equ 2h
P_DOWN equ 3h
PD equ 3h
T_OUT equ 4h
TO equ 4h
RP0 equ 5h ;
RP1 equ 6h ;
IRP equ 7h ;
;
GIE equ 7h ;16C84 INTCON register bits
ADIE equ 6h ;16C84 INTCON register bits
RTIE equ 5h ;16C84 INTCON register bits
INTE equ 4h ;16C84 INTCON register bits
RBIE equ 3h ;16C84 INTCON register bits
RTIF equ 2h ;16C84 INTCON register bits
INTF equ 1h ;16C84 INTCON register bits
RBIF equ 0 ;16C84 INTCON register bits
;
_RBPU_ equ 7h ;16C84 OPTION register bits
INTEDG equ 6h ;16C84 OPTION register bits
RTS equ 5h ;16C84 OPTION register bits
RTE equ 4h ;16C84 OPTION register bits
PSA equ 3h ;16C84 OPTION register bits
PS2 equ 2h ;16C84 OPTION register bits
PS1 equ 1h ;16C84 OPTION register bits
PS0 equ 0 ;16C84 OPTION register bits
;
EEIF equ 4h ;16C84 EECON1 register bits
WRERR equ 3h ;16C84 EECON1 register bits
WREN equ 2h ;16C84 EECON1 register bits
WR equ 1h ;16C84 EECON1 register bits
RD equ 0 ;16C84 EECON1 register bits
;
;
Same equ 1h
same equ 1h
w equ 0h
;
LSB equ 0h
lsb equ 0h
MSB equ 7h
msb equ 7h
;
TRUE equ 1h
YES equ 1h
FALSE equ 0h
NO equ 0h
;

#DEFINE SERVO PORTA,2
;*********************************************************************
; MACRO *
;*********************************************************************

SERVOON macro
bsf SERVO
endm

SERVOOFF macro
bcf SERVO
endm

;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************

CBLOCK 0x00C ; dйbut de la zone variables

cmpt1 : 1 ; compteur de boucles 1
cmpt2 : 1 ; compteur de boucles 2
cmpt3 : 1 ; compteur de boucles 3

ENDC ; Fin de la zone

;***********************************************************************
;
; Equates for this program
;
;***********************************************************************
; bits
lanc equ 4h ; bit 4 of port a
lanc_copy equ 3h ; bit 3 of port a
lanc_byte equ 2h ; bit 2 of port a (Debugging output pin)
rec_led equ 1h ; bit 1 of port a (Rec_Led output pin)
rec_input equ 0h ; bit 0 of port a (Rec input pin)
seventh_byte equ 0h ; flag to indicate that this is the 7 of 8 byt
command_waiting equ 1h ; flag to indicate command waiting
command_tx equ 2h ; flag to indicate ready to transmit command
key_pressed equ 3h ; flag to indicate that a key has been pressed
key_repeats equ 4h ; flag to indicate that key repeats
RecOn equ 1h ; flag to indicate that recording is on
; let the keys have priority on the RA0 input

; bytes

counter equ 0ch ; scratch counter
n_bits equ 0dh ; count number of bits for recieve routine
recv_reg equ 0eh ; assemble recieved LANC byte here...
n_bytes equ 0fh ; keep track of which LANC byte we are on (+1)
flag_store equ 10h ; various flags
timer equ 11h ;
com_byte_1 equ 12h ; byte one of the command to be sent
com_byte_2 equ 13h ; byte two " "
com_sent_ctr equ 14h ; Number of fields to send the command in
send_reg equ 15h ; store for byte in transmission
key_temp equ 16h ; Temporary key storage
key_store equ 17h ; Last key pressed was...
key_debounce equ 18h ; Key debounce counter
flag_rec equ 19h ; store flag for recording

; values
command_cam equ 28h ; 1st byte of commands to camera
command_tele equ 00h ; 2nd byte for zoom telephoto slow
command_wide equ 10h ; 2nd byte for zoom wide slow
command_tele2 equ 35h ; 2nd byte for zoom telephoto
command_wide2 equ 37h ; 2nd byte for zoom wide
command_tele3 equ 0Eh ; 2nd byte for zoom telephoto fast
command_wide3 equ 1Eh ; 2nd byte for zoom wide fast
command_close equ 47h ; 2nd byte for focus closer
command_far equ 45h ; 2nd byte for focus farther
command_focus equ 41h ; 2nd byte for manual/autofocus
command_black equ 51h ; 2nd byte for black light (DV)
cam_start equ 27h ; 2nd byte for start recording (DV)
cam_stop equ 29h ; 2nd byte for stop recording (DV)


command_vtr equ 18h ; 1st byte of commands to VTR
command_rec equ 33h ; 2nd byte for cam_rec on/off
command_pause equ 32h ; 2nd byte for pause on/off
command_record equ 3Ah ; 2nd byte for VTR_record
command_power equ 5eh ; 2nd byte for power off
command_stop equ 30h ; 2nd byte for stop
command_photo equ 2Bh ; 2nd byte for recording (DV) ou 39

portAtris equ 11h ; Default for Port A I/O pin assignments
portAtrislanc equ 01h ; Default for Port A i/o when sending Lanc
portBtris equ 0fh ; Default for Port B i/o pin assignments

key_0 equ 0h ; Values returned for key presses
key_1 equ 1h
key_2 equ 2h
key_3 equ 3h
key_4 equ 4h
key_5 equ 5h
key_6 equ 6h
key_7 equ 7h
key_8 equ 8h
key_9 equ 9h
key_A equ 0Ah
key_B equ 0Bh
key_C equ 0Ch
key_D equ 0Dh
key_E equ 0Eh
key_F equ 0Fh
key_none equ 0FFh



;*******************************************************************
; Button on remote Code sent on bytes 1 & 2
; ================ ========================
; (these buttons work in camera mode)
; Zoom tele slow 28 00 (on newest cam only 1996->)
; Zoom wide slow 28 10 (on newest cam only 1996->)
; Zoom tele 28 35 (on all cam. medium speed)
; Zoom wide 28 37 (on all cam. medium speed)
; Zoom tele fast 28 0E (on newest cam only 1996->)
; Zoom wide fast 28 1E (on newest cam only 1996->)
; focus 28 41 (toggle between manual and autofocus)
; focus farther 28 45
; focus closer 28 47
; White balance 28 49 (toggle)
; Shutter 28 61
; White balance reset 28 77
; start/stop rec 18 33
; power on 18 5C (also shorting lanc to ground a few ms)
; power off 18 5E
; edit search - 18 65
; edit search + 18 67
; rec review 18 69
;
; (these buttons work in VTR mode)
; power (or viewfinder) off 18 2A ?
; stop 18 30
; pause 18 32
; play 18 34
; rewind 18 36
; fast forward 18 38
; record 18 3A
; slow 18 46
; power on 18 5C (also shorting lanc to ground a few ms)
; power off 18 5E
; frame advance 18 62
; counter reset 18 8C
; data screen 18 B4
;
;
; Code read on byte 4 VTR status
; =================== ==========
;
; 04 recording
; 32 low-battery
; 62 tape end
;*******************************************************************



;*******************************************************************
; Main
;
;*******************************************************************
; Program starts here
;
ORG 0000 ; Start at 0
;
Start

; on errors, reset all registers from the start...
eror bcf STATUS,RP1 ;
bsf STATUS,RP0 ; Must set RP0 to access page 1

movlw portAtris ; Set PortA pins
movwf TRISA ;

movlw portBtris ; Set PortB pins
movwf TRISB ;
;
; clear /RBPU in OPT_REG to have portB pull-up on,
; avoiding the 4 100K pull-up resistors
; bcf OPTION_REG, _RBPU_
; but 10K serials resistors are too high value. try without.


bcf STATUS,RP0 ; bank 0

movlw .1 ; Preset some of the key scan
movwf key_debounce ; registers

movlw 0ffh
movwf key_store
bsf PORTA,rec_led ; debug
clrf flag_rec

; First we want to synchronize our reception. We do this by waiting
; until the lanc line has been held high for at least 1 word time.
; (1352 us. or more)

sync_up clrf counter ; clear sync counter to 0

sync_loop btfss PORTA,lanc ; Wait for interframe gap
goto sync_up ; This loop takes 6 us, so if the
nop ; counter overflows before
incfsz counter, same ; a transition on the LANC
goto sync_loop ; line, it is the interframe gap..
; (1530 us)
synced clrf n_bytes ; clear byte counter to 0
bcf flag_store,seventh_byte ; byte flag

; Once synchronized we wait for a start bit to show up.

wait_strt btfsc PORTA,lanc ; wait for start bit
goto wait_strt ;

start_bit movlw .15 ; Constant for start bit time (52us)
movwf counter ; set counter
l1 decfsz counter, same ; loop on counter (3us/loop)
goto l1 ;
btfsc PORTA,lanc ; check to be sure the bit is still
; low (make sure this is still a
; start bit.
goto eror ; if not, go start again.

; now we are ready to read bit one..
;bsf porta,lanc_byte ;debug pin output pulse
;bcf porta,lanc_byte
movlw .8 ; 8 bits
movwf n_bits ;

wait_bits movlw .15 ; Wait to start of bit time
; (104us/bit, 52 us/half)
movwf counter ; set counter
l2 decfsz counter, same ; loop on counter (3us/loop)
goto l2 ;

; Now we are ready to decide whether to read or send a
; character in this bit time.
; At this point if we have a command, it is waiting to
; send in Send_reg. Just have to send it one bit at
; a time if the command_tx flag is set


;bsf porta,lanc_byte ;debug pin output pulse
;bcf porta,lanc_byte

send_bit btfss flag_store, command_tx ; ready to send?
goto wait_half
btfss send_reg,lsb
goto send_0

send_1 bcf porta,lanc
bsf STATUS,RP0 ; Must set RP0 to access page 1
movlw portAtrislanc ; Set PortA pins
movwf TRISA ; to allow Lanc to be asserted low
bcf STATUS,RP0 ; Wait for inputs to charge
nop ; Synchronize both branches
goto sent_bit

send_0 bsf porta,lanc
bsf STATUS,RP0 ; Must set RP0 to access page 1
movlw portAtris ; Set PortA pins
movwf TRISA ; to allow Lanc to be pulled high
bcf STATUS,RP0 ; Wait for inputs to charge

nop
nop

sent_bit rrf send_reg,same ; rotate to position next bit
movlw .10 ; allow for time used in sending bit
goto jump_half ; (15us on tx code...)

wait_half movlw .14 ; Wait till centre of bit time
; (52us)
jump_half movwf counter ; set counter
l3 decfsz counter, same ; loop on counter (3us/loop)
goto l3 ;
; now we are ready to read the next bit
read_bits rrf recv_reg,same ;
bcf recv_reg,msb ; clear msb receive register
btfss PORTA,lanc ; test lanc bit
bsf recv_reg,msb ; and set msb if set
; note that we are inverting the bit
; here - +5v becomes 0 and
; +0v becomes 1.
nop ;todac
nop ; todac
;bsf porta,lanc_byte ;debug pin output clignote led
;bcf porta,lanc_byte ; clignote led
decfsz n_bits,same ; continue to read bits until we have
goto wait_bits ; received 8 bits

wait_stop movlw .14 ; Wait to end of bit time
; (104us/bit, 52 us/half)
movwf counter ; set counter
l4 decfsz counter, same ; loop on counter (3us/loop)
goto l4 ;

;bsf porta,lanc_byte ;debug pin output pulse
;bcf porta,lanc_byte
send_stop btfss flag_store, command_tx ; ready to send?
goto wait_half_stop
bsf porta,lanc
bsf STATUS,RP0 ; Must set RP0 to access page 1
movlw portAtris ; Set PortA pins
movwf TRISA ; to allow Lanc to be pulled high
bcf STATUS,RP0 ;
bcf flag_store,command_tx ; Cancel tx,--all sent
movlw .11 ;allow for time used in sending bit
goto jump_half_stop ; (8us on tx code...)

wait_half_stop
movlw .14 ; Wait till centre of bit time
; (52us)
jump_half_stop
movwf counter ; set counter
l5 decfsz counter, same ; loop on counter (3us/loop)
goto l5 ;
; now we are ready to read the next bit
; now we are ready to read the stop bit
read_stop btfss PORTA,lanc ; test lanc bit
goto eror ; if not set we have a framing error
;bsf porta,lanc_byte ;debug pin output
;bcf porta,lanc_byte

; now we have received the whole byte - in recv_reg.

count ; Count is where we set up certain actions, depending on
; which byte of the string we are looking at.
; real pos in lanc sequence is +1 (check_0 is Byte 1)

incf n_bytes,same ; increment Lanc byte counter
decf n_bytes,w ; decrement/move to W
andlw 07h ; mask to prevent overruns on table
addwf PC,same ; Jump into table
goto check_0
goto check_1
goto check_2
goto check_3
goto check_4
goto check_5
goto check_6
goto check_7

;end_count
; goto wait_strt ; Each check_x routine ends with a
; ; direct jump to wait_strt


check_0
;bsf porta,lanc_byte ;debug pin output
;bcf porta,lanc_byte
btfss flag_store,command_waiting ; Is a command waiting
goto end_0 ; to be processed
movf com_byte_2,w ; If so, set it up
movwf send_reg ; and set the
bsf flag_store,command_tx ; command_tx flag

end_0 goto wait_strt ; (end_count)


check_1
end_1 goto wait_strt ; (end_count)


check_2
end_2 goto wait_strt ; (end_count)


check_3
end_3 goto wait_strt ; (end_count)


check_4
; if byte4 = 04 alors on allume la led (portA, pin1 = 1)

movlw .4 ; record
subwf recv_reg,w ; compare et positionne Z si 0
btfsc STATUS,Z ; if Z = 0 -> led on
bsf PORTA,rec_led
btfss STATUS,Z ; if Z = 1 -> led off
bcf PORTA,rec_led

end_4 goto wait_strt ; (end_count)


check_5
end_5 goto wait_strt ; (end_count)


check_6
end_6 goto wait_strt

check_7
clrf n_bytes ; clear byte counter to 0

call Key_Scan ; check if any keys pressed
btfsc flag_store,key_pressed ;
call Command_Decode ; and take action if so...

decfsz com_sent_ctr,same
goto mid_7

movlw 01h ; If command times out
movwf com_sent_ctr
bcf flag_store,command_waiting
bcf flag_store,command_tx
goto end_7


mid_7 movf com_byte_1,w ; set up for next command
movwf send_reg
bsf flag_store,command_waiting
bsf flag_store,command_tx

end_7 goto sync_up ; after last byte, return to top...




;**********************************************************************
; Command_Decode
; Command_Decode takes the value in w and stores
; the appropriate command in com_byte_1 and
; com_byte_2. It sets the command_waiting flag
; and the command_tx flag because the next byte
; needs to have this command transmitted.
; Note that the jump table has to be below 100h
; because it won't work right otherwise...

;**********************************************************************

Command_Decode

movwf key_temp ; store it
andlw 0Fh ; mask w to prevent overrun
addwf PC,same ; and jump into table
goto power_off ; 0 no autorepeat
goto focus_manual ; 1 no autorepeat
goto zoom_wide ; 2 no autorepeat
goto zoom_tele ; 3 no autorepeat
goto posservo ; 4
goto record ; 5 no autorepeat
goto zoom_wide ; 6
goto zoom_tele ; 7
goto photo ; 8 no autorepeat
goto black_light ; 9 no autorepeat
goto zoom_wide_2 ; A
goto zoom_tele_2 ; B
goto focus_close ; C
goto focus_far ; D
goto zoom_wide_3 ; E
goto zoom_tele_3 ; F

zoom_tele
movlw command_cam
movwf com_byte_1
movlw command_tele ; slow
movwf com_byte_2
goto end_command

zoom_wide
movlw command_cam
movwf com_byte_1
movlw command_wide ; slow
movwf com_byte_2
goto end_command

zoom_tele_2
movlw command_cam
movwf com_byte_1
movlw command_tele2
movwf com_byte_2
goto end_command

zoom_wide_2
movlw command_cam
movwf com_byte_1
movlw command_wide2
movwf com_byte_2
goto end_command

zoom_tele_3
movlw command_cam
movwf com_byte_1
movlw command_tele3 ; fast
movwf com_byte_2
goto end_command

zoom_wide_3
movlw command_cam
movwf com_byte_1
movlw command_wide3 ; fast
movwf com_byte_2
goto end_command

focus_close
movlw command_cam
movwf com_byte_1
movlw command_close
movwf com_byte_2
goto end_command

focus_far
movlw command_cam
movwf com_byte_1
movlw command_far
movwf com_byte_2
goto end_command

focus_manual
movlw command_cam
movwf com_byte_1
movlw command_focus
movwf com_byte_2
goto end_command

black_light
movlw command_cam
movwf com_byte_1
movlw command_black
movwf com_byte_2
goto end_command

photo ; photo а verifier et а automatiser passage automatique en mode photo
movlw command_vtr
movwf com_byte_1
movlw command_photo
movwf com_byte_2
goto end_command

power_off
movlw command_vtr
movwf com_byte_1
movlw command_power
movwf com_byte_2
goto end_command

pause
movlw command_vtr
movwf com_byte_1
movlw command_pause
movwf com_byte_2
goto end_command

stop
movlw command_vtr
movwf com_byte_1
movlw command_pause
movwf com_byte_2
goto end_command

record
movlw command_vtr ;а automatiser passage automatique en mode REC
movwf com_byte_1
movlw command_rec
movwf com_byte_2
goto end_command


posservo ; deplacement du servo
bsf PORTA,rec_led

MOVLW D'30' ;
MOVWF boucle1 ;
position1 ; deplacement du servo position 1
SERVOON
call Wait1ms ;tempo 1ms
SERVOOFF
call Wait20ms ;tempo 20ms

DECFSZ boucle1,1 ;
GOTO position1 ;

MOVLW D'1' ;
MOVWF boucle1 ;
pause1 ; pause entre Mouvements
call Wait100ms ;tempo 200ms

DECFSZ boucle1,1 ;
GOTO pause1 ;

MOVLW D'300' ;
MOVWF boucle1 ;
position2 ; deplacement du servo position 1
SERVOON
call Wait2ms ;tempo 2ms
SERVOOFF
call Wait20ms ;tempo 20ms
DECFSZ boucle1,1 ;
GOTO position2 ;

bcf PORTA,rec_led

goto end_command


;***** Attente de 50 µs (exactement, en comptant le temps d'appel)
Wait50us
MOVLW D'13' ; 15 fois
MOVWF tempo50u ; stockage dans la variable tempo50u
T50uboucle
DECFSZ tempo50u,1 ; dйcremente et test
GOTO T50uboucle ; on boucle tant que <>0
RETURN

; Wait 2 ms

Wait2ms
MOVLW D'27' ; Valeur а ajuster pour avoir la bonne tempo 1.5ms
MOVWF tempo2ms ;
T2msboucle
CALL Wait50us
DECFSZ tempo2ms,1 ;
GOTO T2msboucle ;
RETURN

; Wait 1 ms

Wait1ms
MOVLW D'26' ; Valeur а ajuster pour avoir la bonne tempo ?????????????????????
MOVWF tempo1ms ;
T1msboucle
CALL Wait50us
DECFSZ tempo1ms,1 ;
GOTO T1msboucle ;
RETURN

; Wait 2O ms

Wait20ms
MOVLW D'200' ;
MOVWF tempo20ms ;
T20msboucle
CALL Wait50us
DECFSZ tempo20ms,1 ;
GOTO T20msboucle ;
RETURN

MOVLW D'200' ;
MOVWF tempo20ms ;
T20msboucle2
CALL Wait50us
DECFSZ tempo20ms,1 ;
GOTO T20msboucle2 ;
RETURN
; Wait 100 ms
Wait100ms
MOVLW D'5' ;
MOVWF tempo100ms ;
T100msboucle
CALL Wait20ms
DECFSZ tempo100ms,1 ;
GOTO T100msboucle ;


end_command
movlw 04h ;send byte over five fields
movwf com_sent_ctr
return

;**********************************************************************
; Key_Scan
; Key_Scan returns the value of the key pressed in W.
; Key_Pressed flag is set if any key is pressed,
; cleared if no key has been pressed.
; Normally returns one key for each press, but some
; keys autorepeat by returning a key_pressed as
; long as the key is held down.
;**********************************************************************

Key_Scan ; return the value of the key pressed in W.
bcf flag_store,key_pressed ; clear flag

scan_rec_input

btfss flag_rec,RecOn
goto rec_off
goto rec_on


rec_on ; record is actually on

btfsc PORTA,rec_input ; if stop rec is wanted
goto end_rec ; stop rec not wanted, continue...
bcf flag_rec,RecOn ; rec is off by input ra0
movlw key_5 ; I assume that key_5 is stop
movwf key_temp
bsf flag_store,key_pressed ;
goto end_scan

rec_off ; record is actually off

btfss PORTA,rec_input ; if record is wanted
goto end_rec ; record not wanted, continue...
bsf flag_rec,RecOn ; rec is on by input ra0
movlw key_4 ; I assume that key_4 is record
movwf key_temp ;
bsf flag_store,key_pressed ;
goto end_scan

end_rec


scan_1 movlw 0E0h ; Set scan line 1 low
movwf PORTB
nop ; wait for row precharge
nop
comf PORTB,w ; get port b/invert it at the same time
andlw 0fh ; mask low nibble
btfsc STATUS,Z ; and see if any buttons are pressed
goto scan_2

;bsf porta,lanc_byte ;debug pin output
;bcf porta,lanc_byte

movwf key_temp ; store in temp
btfsc key_temp,0 ; Column 0 Pressed
goto key_press_0
btfsc key_temp,1 ;
goto key_press_1
btfsc key_temp,2
goto key_press_2
btfsc key_temp,3
goto key_press_3


scan_2 movlw 0D0h ; Set scan line 2 low
movwf PORTB
nop ; wait for row precharge
nop
comf PORTB,w ; get port b/invert it at the same time
andlw 0fh ; mask low nibble
btfsc STATUS,Z ; and see if any buttons are pressed
goto scan_3

;bsf porta,lanc_byte ;debug pin output
;bcf porta,lanc_byte

movwf key_temp ; store in temp
btfsc key_temp,0 ; Column 0 Pressed
goto key_press_4
btfsc key_temp,1 ;
goto key_press_5
btfsc key_temp,2
goto key_press_6
btfsc key_temp,3
goto key_press_7


scan_3 movlw 0B0h ; Set scan line 3 low
movwf PORTB
nop ; wait for row precharge
nop
comf PORTB,w ; get port b/invert it at the same time
andlw 0fh ; mask low nibble
btfsc STATUS,Z ; and see if any buttons are pressed
goto scan_4

;bsf porta,lanc_byte ;debug pin output
;bcf porta,lanc_byte

movwf key_temp ; store in temp
btfsc key_temp,0 ; Column 0 Pressed
goto key_press_8
btfsc key_temp,1 ;
goto key_press_9
btfsc key_temp,2
goto key_press_A
btfsc key_temp,3
goto key_press_B


scan_4 movlw 070h ; Set scan line 4 low
movwf PORTB
nop ; wait for row precharge
nop
comf PORTB,w ; get port b/invert it at the same time
andlw 0fh ; mask low nibble
btfsc STATUS,Z ; and see if any buttons are pressed
goto scan_done

;bsf porta,lanc_byte ;debug pin output
;bcf porta,lanc_byte

movwf key_temp ; store in temp
btfsc key_temp,0 ; Column 0 Pressed
goto key_press_C
btfsc key_temp,1 ;
goto key_press_D
btfsc key_temp,2
goto key_press_E
btfsc key_temp,3
goto key_press_F


scan_done
bcf flag_store,key_repeats ;if no key pressed, no key to repeat
movlw key_none ; and value for no key is defined
goto debounce

; autorepeat table : if bcf, no autorepeat.

key_press_0
bcf flag_store,key_repeats
movlw key_0
goto debounce

key_press_1
bcf flag_store,key_repeats
movlw key_1
goto debounce

key_press_2
bcf flag_store,key_repeats
movlw key_2
goto debounce

key_press_3
bcf flag_store,key_repeats
movlw key_3
goto debounce

key_press_4
bcf flag_store,key_repeats
movlw key_4
goto debounce

key_press_5
bcf flag_store,key_repeats
movlw key_5
goto debounce

key_press_6
bsf flag_store,key_repeats
movlw key_6
goto debounce

key_press_7
bsf flag_store,key_repeats
movlw key_7
goto debounce

key_press_8
bcf flag_store,key_repeats
movlw key_8
goto debounce

key_press_9
bcf flag_store,key_repeats
movlw key_9
goto debounce

key_press_A
bsf flag_store,key_repeats
movlw key_A
goto debounce

key_press_B
bsf flag_store,key_repeats
movlw key_B
goto debounce

key_press_C
bsf flag_store,key_repeats
movlw key_C
goto debounce

key_press_D
bsf flag_store,key_repeats
movlw key_D
goto debounce

key_press_E
bsf flag_store,key_repeats
movlw key_E
goto debounce

key_press_F
bsf flag_store,key_repeats
movlw key_F
goto debounce

debounce
movwf key_temp ;store key
subwf key_store,w ; compare with old key
btfsc STATUS,Z ; If same then check repeating
goto repeating
; not the same key
decfsz key_debounce ; is it debounced yet?
goto end_scan ; if not then skip it for this time
; debounce time is up, and this is a
; different key, so reset debounce
; and store the new key value.
movlw .3 ; 3 x 16.67ms = 50 ms debounce
movwf key_debounce

movf key_temp,w ; get key and
movwf key_store ; store new key value
sublw key_none ; if it is not key_none then
btfss STATUS,Z ; set the key_pressed flag
bsf flag_store,key_pressed ;
goto end_scan ; and return



repeating btfss flag_store,key_repeats ;if key doesn't repeat
goto end_scan ; then we're done
bsf flag_store,key_pressed ; else set it as newly pressed



end_scan movf key_temp,w ; get key in W
return ; and return



END





Добавление от 12.05.2007 05:48:

Kokosha
http://slil.ru/24355910 -
Вот сгенерировал Кодевиженом "шапку" программы. Можешь посмотреть все ли там правильно? В кодевижене я напрoтив всех битов работающих на вход выставил букву P - я так понимаю что это "подтяжка"? -или я чегото напутал? Нужно ли было включать прерывания для UARTA??? И как теперь расписать на это все регистры? К сожалению сюда исходник протолкнуть неудалось, его зафильтровал робот на какоето дурацкое буквосочетание И еще, -правильно ли я понял из описания на 12 странице что все лапки МК соединяемые с синтезаторм по умолчанию должны быть включены на вход, и только командами из текста программы переключатся на выход?

672. Dikoy, 12.05.2007 11:13
КРОКОДИЛ
Не доверяю я RC для узкополосых устройств бесподстроечной связи. Запускать устройство в серию с RC непроверив стабильности я не рискну
А нафига она тебе в МК то нужна!?!?!? Я ж те объясняю, SPI, по которому МК обращается к синтезатору вообще не чувствителен к частотам, ибо он синхронный. Ты даже можешь прерывать передачу байта в любом месте, а потом когда нибудь продолжить - и ничего не произойдёт.
Самому МК стабильность тоже пофиг. Единственно, где она нужна, это UART. Но им ты будешь пользоваться крайне редко, у него есть своя проверка ошибок, и самое главное - погрешность при кварце 4,5 УКЛАДЫВАЕТСЯ в допуски UАRT. То есть он БУДЕТ РАБОТАТЬ НОРМАЛЬНО.

И перепады температуры от минус 30 до плюс 70градусов!
Ты собрался пользовать UART в -30 в авто? Или дома спокойно зальёшь данные и забьёшь?

а при перезаписи по UART переключался на встроеный RC, а после перезаписи снова на кварц? А можно так сделать?
Можно, но не нужно.

Надолго?
ХЗ, пока по кафе всяким мыкаюсь...

Обычный кварцевый генератор на одном транзисторе, только в колекторе(стоке) нужно поставить контур настроеный в резонанс на 27мгц -и всего делов. Правда место занимает,- для миниатюрных девайсов не шибко хорошо.
Вот именно, что LC генератор был больше всей моей схемы.
Я собирал 4 генератора - два на логике (1533 и 1554 серий) и два на транзисторах. 9 мег было повсеместно. Китайские кварцы

Kokosha
имеется ввиду что там написано что UART будет работать НОРМАЛЬНО и при кврце 4.5 МГц

673. Kokosha, 12.05.2007 11:38
цитата (Dikoy):

цитата (КРОКОДИЛ):

а при перезаписи по UART переключался на встроеный RC, а после перезаписи снова на кварц?
А можно так сделать?

Можно, ... [/i]

КАК ??? Научи !

Добавление от 12.05.2007 11:50:

КРОКОДИЛ
напрoтив всех битов работающих на вход выставил букву P - я так понимаю что это "подтяжка"? -или я чегото напутал?

Нормально.

Нужно ли было включать прерывания для UARTA???

Да. желательно. и буфер для приема создать кодвизадом CVAVR - пример в задаче 5 - proavr.narod.ru/z5.htm

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


И как теперь расписать на это все регистры?

Про регистры я не понял. О каких речь идет ?


-правильно ли я понял из описания на 12 странице что все лапки МК соединяемые с синтезаторм по умолчанию должны быть включены на вход, и только командами из текста программы переключатся на выход?

Нет. Не правилльно что ДОЛЖНЫ - они просто входы при запуске МК.

Правильно - что конфигурирует ножки программа по потребности. Ноги к синтезаторы должны быть ВЫХОДАМИ !

ВЫХОДЫ - передают, управляют. ВХОДЫ - принимаю, подчиняются внешним сигналам.

стр.2 курса "УСТРОЙСТВО МК AVR" - proavr.narod.ru/02.htm

Щас тебе нужно на бумаге написать, нарисовать алгоритм работы твоей програмы - это план по которому ты сможешь добавлять в програму код.

674. K_AV, 12.05.2007 11:54
КРОКОДИЛ
Есть вероятность, что ничего переделывать вообще не придется. У более нового PIC16F628 в основном добавились новые ресурсы, которых не было у PIC16F84, а все "старое" осталось на своих местах и со старыми именами регистров. MICROCHIP это выдает за свое преимущество - такую совместимость "снизу вверх". Но придется все же внимательно пересмотреть. Посмотрю на досуге.
1. Только ведь это вроде не синтезатор уже? 2. Блин, толкаешь меня на чтение смеси английских и французских комментариев Какая из 3 схем на сайте по ссылке в шапке программы - та, к которой эта программа? Там все по-французски, а для меня французский - как для тебя английский.

675. Kokosha, 12.05.2007 11:54
Я тебе советую пока отвлечься от синтезатора и САМОСТОЯТЕЛЬНО написать с нуля программу мигания светодиодом, с периодом например 530 мС и затем добавить в нее прием чего то по UART. Затем добится ее работы в VMLAB - в нем нет тини2313 так что пиши для мега8.

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

676. КРОКОДИЛ, 12.05.2007 12:58
K_AV

Только ведь это вроде не синтезатор уже?
Нет, это пульт управления для видеокамеры работающий по протоколу LANS, -по одному проводку передается более 16 команд. Смысл такой -при работе под водой камера закрывается в герметичный бокс и все оганы управления становятся недоступными, поэтому к ней подключается LANS с герконовой матрицей вместо клавиатуры, которую располагают на задней стене бокса. Схему я использовал вот эту см.рис. только добавил палельно выводу LANS кнопку на общий провод, -она включает камеру. Впрочем я сильно с ней не мудрил -залил программу и все сразу заработало как положено. А покупку деталей я свалил на заказчика -он живет в областном городе, но потом меня черти дернули за язык и я ему ляпнул что можно поставить 628ой и он купил 628мые -вот скоро должен переслать А насчет французкого я тоже в шоке был -долго не мог понять какой язык -поначалу думал что румынский!

Добавление от 12.05.2007 13:10:

Dikoy
главное - погрешность при кварце 4,5 УКЛАДЫВАЕТСЯ в допуски UАRT. То есть он БУДЕТ РАБОТАТЬ НОРМАЛЬНО.
Это хорошо! Значит бум использовать 4,5.

Добавление от 12.05.2007 13:48:

Kokosha
Да. желательно
Блин, а у меня кодевижен отказывается включать прерывания для UARTA, -выскакивает какаято непонятная надпись -чтото насчет комерции.
Про регистры я не понял. О каких речь идет ?
Ну вот - с 12 страницы-

код:
#define DATA_LINE_ON  DDRD.4
#define CLOCK_LINE_ON DDRD.5
#define LE_LINE_ON DDRD.6

#define PAUZA #asm("nop")

Я так понял что DDRD это регистры? Или кодевижен их сам распишет?
Только прогу не на лету выдумывай а проделай работу начная с бумажного алгоритма.
Ну да, если бы я знал алгоритм, то у меня бы небыло целого моря вопросов! A если бы еще знал способы его реализации то сам бы давно нацарапал программу или ты думаешь что мне очень нравится безвылазно сиДеть в тырнете и слепнуть?
Я тебе советую пока отвлечься от синтезатора и САМОСТОЯТЕЛЬНО написать с нуля программу мигания светодиодом, с периодом например 530 мС и затем добавить в нее прием чего то по UART. Затем добится ее работы в VMLAB - в нем нет тини2313 так что пиши для мега8.
Блин я непонимаю, зачем делать бесполезные вещи? Вопросов по светодиодикам будет столькоже а может еще больше А помочь мне они ничем не помогут зато отберут еще месяц времени Чувствуешь какае огромное растояние между мигалкой и синтезатором? Кроме того я просто невоспринимаю информацию не относящуюся непосредственно к проблеме, -ну мозги у меня так устроены А мигающие светодиоды у нас продаются на базаре без всяких контролеров

Добавление от 12.05.2007 13:58:

Kokosha
Дак внимательно страницу 23 прочитайте !!!
23 страница чего? -конфы или даташита? - конфу второй раз читаю и ненахожу Да, а UART обязательно нужно было в исходнике прописывать или достаточно было его включить в кодевижене и все?

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

677. Kokosha, 12.05.2007 14:07
КРОКОДИЛ
а у меня кодевижен отказывается включать прерывания для UARTA, -выскакивает какаято непонятная надпись -чтото насчет комерции.

в курсе же написано - ШАГ 1 "компилятор CodeVisionAVR (2 Мб всего)
Бесплатный DEMO до 2 кб кода, а полный CVAVR ниже на сером фоне. "

Скачай ПОЛНЫЙ !!!

Добавление от 12.05.2007 14:10:

КРОКОДИЛ
Я так понял что DDRD это регистры? Или кодевижен их сам распишет?

Это регистр - его назначение описано в "устройстве АВР" стр. 2

а 4 5 6 это номера битов в этом регистре.

Добавление от 12.05.2007 14:13:

КРОКОДИЛ
а UART обязательно нужно было в исходнике прописывать или достаточно было его включить в кодевижене и все?

Когда ты включаешь UART в МАСТЕРЕ cvavr то код появится в мастере и ты можешь добавить его в текст проги на Си.

678. КРОКОДИЛ, 12.05.2007 14:17
Kokosha
что пиши для мега8.
И где я возьму эту самую мега8 чтобы попробовать, -я их не заказывал, а ждать доставки из Киева или Харькова нужно как минимум 2 недели! А с интерфейсом VMLAB я буду еще месяц разбиратся чтобы просимулировать мигалку.

Добавление от 12.05.2007 14:25:

Kokosha
Скачай ПОЛНЫЙ !!!
Ночью скачаю.
Это регистр - его назначение описано в "устройстве АВР" стр. 2

а 4 5 6 это номера битов в этом регистре.

Я что, на итальянском языке пишу? Я спрашивал -нужно ли расписывать регистры или кодевижен их автоматически расписывает?

679. Kokosha, 12.05.2007 15:14
КРОКОДИЛ
И где я возьму эту самую мега8 чтобы попробовать, -я их не заказывал, а ждать доставки из Киева или Харькова нужно как минимум 2 недели! А с интерфейсом VMLAB я буду еще месяц разбиратся чтобы просимулировать мигалку.

У тебя в голове КАША какая то !!!

Если ты хочешь "в натуре" делать то конечно делай для имеющегося 2313.

А мегу8 я тебе ЯСНО посоветовал для VMLAB и написал ПАЧЕМУ ! Не надо ее покупать и ждать.

=======

Ты уже больше месяца колупаешся.

Значит если бы ты послушал меня ДАВНО и заказал бы меги8 ТОГДА ! то чейчас они уже были бы у тебя на столе.

=======

Щас я советую тебе сделать мигалку светодиодом - ты опять упираешся.

Пройдет еще месяц ... потом еще ....

========

наверно на задачах 10 класса тоже можно учится складывать и вычитать. Однако в школе это делают на задачах именно 1-го класса.

Ты считаешь что учеба в 1-м классе напрасная трата времени ???

680. Pyku_He_oTTyda, 12.05.2007 15:35
КРОКОДИЛ
а где ссылка про LANC была? Очень интересно!

681. КРОКОДИЛ, 12.05.2007 16:33
Pyku_He_oTTyda
Так в исходнике вроде была, посмотри, я по тем ссылкам не лазил. Вечером скину тебе свои. У меня сейчас днем трафик шибко дорогой -1$ за мегабайт. Kokosha
У тебя в голове КАША какая то !!!
Точно! А как ты догадался!
Щас я советую тебе сделать мигалку светодиодом - ты опять упираешся.

Пройдет еще месяц ... потом еще ....

Блин, ну я же не только за компом сижу а еще и работаю, и хозяйственных проблем очень много, и сельскохозяйственных. Да и мигалка мне врядли поможет понять алгоритм написания проги именно для ситезатора. P.S. Тебя наверно мамка с папкой кормят -поэтому у тебя и есть время круглосуточно в сети сидеть? Или тебе деньги платят за то что ты всех отправляешь на свой сайт? А эту ветку создал только для рекламы?
Если ты хочешь "в натуре"
Я привык больше паяльником работать а не симулянтами.

682. Kokosha, 12.05.2007 17:03
КРОКОДИЛ
Я привык больше паяльником работать а не симулянтами.

Вот и припаяй к 2313 светодиод и резистор 560 Ом и заставь его мигать.

А то ты как киса воробьянинов "по-немецки ... ну, это я наю..."

683. КРОКОДИЛ, 12.05.2007 17:34
Kokosha
Вот и припаяй к 2313 светодиод и резистор 560 Ом и заставь его мигать.
Ну попробуй меня убедить что мне это нужно! Блин я тебя спросил: Нужно ли расписывать регистры нарисованые кодевиженом, а ты вместо одного слова -ДА или НЕТ целую страницу занимаешся демагогией. Ты в мой проэкт хоть заглядывал? А вообщето демагогия великая штука, если ей овладеть в совершенстве то всегда можно убедить женщину что мягкий конец лучше твердого.

Добавление от 12.05.2007 17:37:

Kokosha
Пройдет еще месяц ... потом еще ....
И еще год пройдет а я все буду сидеть и мигать............

Добавление от 13.05.2007 02:18:

Pyku_He_oTTyda
http://slil.ru/24359216 Вот держи уже все на руский язык переведено...........вроде как на руский...........

684. Pyku_He_oTTyda, 13.05.2007 10:30
КРОКОДИЛ

Спасибо! Я как раз сейчас ланком занимаюсь
Кстати, с какой моделью соньки пробовали?

685. K_AV, 13.05.2007 12:17
КРОКОДИЛ
Проверь почтовый ящик, указанный в инфо, я сбросил туда скоррктированную программу.

686. КРОКОДИЛ, 13.05.2007 18:32
Pyku_He_oTTyda
Кстати, с какой моделью соньки пробовали?
Ну у меня очень старая антикварная и контуженная сонька Video-8 и половину функций не поддерживает, А у заказчика штук 7 цифровых современных сонек, -какие модели неназнаю, но говорит что все работает отлично, -он обещал еще на панасонниках попробовать но так и неотписался. И смотри эта штуковина на осцилографе не показывает ничего внятного -позтому создается впечатление что она неработает Испытания нужно проводить только в натуре.

687. Pyku_He_oTTyda, 13.05.2007 19:09
цитата:
И смотри эта штуковина на осцилографе не показывает ничего внятного -позтому создается впечатление что она неработает Испытания нужно проводить только в натуре.
само собой, ничего не покажет, так как она отвечает на команды из камеры

688. КРОКОДИЛ, 13.05.2007 19:15
K_AV
Скачал, сейчас пытаюсь разобратся. Большое спасибо!

Добавление от 13.05.2007 21:10:

Pyku_He_oTTyda
Если не секрет - для каких целей будет использоватся LANS?

689. Dikoy, 14.05.2007 00:29
КРОКОДИЛ
Я так понял что DDRD это регистры? Или кодевижен их сам распишет?
Это подмена.
Оператор #define подменяет DDRD.4 на DATA_LINE_ON в коде. Причём подмена чисто для компилятора - он заменяет подмены исходным текстом на ранней стадии компиляции.
Это удобно тем, что написав строку
#define status_sintezatora DDRD.4
Ты в тексте программы можешь писать не if (DDRD.4 == X), a if (status_sintezatora == X) что намного понятней и легче читается.

А соня прав - светодиод, это 10 минут времени и ты сразу увидишь результат. И вообще светодиод в схему включи - будешь его по ходу программы дёргать. Увидишь, в каком месте она глючит

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

Kokosha
КАК ??? Научи !
Фьюзы перепрошивать внешней тинькой. Даже самопрограмирование можно сделать - но не с каждым АВР прокатит...

690. КРОКОДИЛ, 14.05.2007 00:59
Dikoy
А то, что вся процедура 12 задачи по передаче данных твоему синтезатору на этих операторах построена ты не видел?..
Да причем здесь операторы -зделаю принтер -распечатаю и разберусь в операторах без всяких светодиодиков, а так и с ними нихрена не пойму! Тут мне более непонятно другое: структура самой программы, тоесть последовательность действий, вот если бы где нибудь посмотреть программу синтезатора на Си.


Далее, подсчитываешь значения регистров R, N и т.д., загоняешь их в буфер в памяти (так понятней и наглядней), потом этот буфер нарезаешь на 3 части (3 восьмибитных числа) и тупо передаёшь в синтезатор.
Вот, накропал для регистра R. Для остальных аналогично.

Так а какие значения загонять в остальные регистры? Или во все одни и теже? И как обзывать регистры? Или произвольно?

Добавление от 14.05.2007 07:29:

Dikoy
Разобрался я с 12 страницей Сони/Сони, -вот только как и куда ее приткнуть болЬшой вопрос. При попытке ее переделать под тиньку компилятор выдал больше двадцати ошибок.

691. Pyku_He_oTTyda, 14.05.2007 07:31
КРОКОДИЛ
такие же, как и у вашего заказчика (боксирование подводных камер). До этого управление было по ИК порту.
Единственное, что управление сам пишу, с нуля. Просто собираю исходники для информации (интересуют реально действующие команды).

692. КРОКОДИЛ, 14.05.2007 07:42
А я себе хотел соньку на видеонаблюдение участка поставить, а вот сейчас засомневался будет ли работать Lans через 40 метров кабеля? Приедут камни нужно будет попробовать. А начем пишешь на асме или на си, и под какие камни?
Pyku_He_oTTyda
интересуют реально действующие команды Заказчик говорит что абсолютно все кнопки работают.

693. Pyku_He_oTTyda, 14.05.2007 07:48
под АВР на Си. Стендик собран на Мега8535, в устройстве будет жить Мега8.
40 метров - не знаю, вероятнее всего будет, только на таком расстоянии без опторазвязки делать нельзя, а развязать в тупую LANC не получится. У меня для управления по проводу стоит опторазвязанная токовая петля, устройство внутри бокса преобразует внешние команды в команды по протоколу LANC

694. КРОКОДИЛ, 14.05.2007 08:00
Pyku_He_oTTyda
только на таком расстоянии без опторазвязки делать нельзя,
A почему нельзя -в чем грабли?

695. Pyku_He_oTTyda, 14.05.2007 08:27
порт в камере можно попалить, черт ти что на 40 метров кабеля может навестись. Хотя если для себя, то пофиг

696. КРОКОДИЛ, 14.05.2007 08:59
Так я телезелёный кабель на ланк поставлю а емкость кабеля резисторами погашу, лишь бы сигнал от камеры до пульта прошел и обратно.

697. Pyku_He_oTTyda, 14.05.2007 09:41
КРОКОДИЛ
смотря как гасить, LANC выход с открытым коллектором

698. КРОКОДИЛ, 14.05.2007 17:13
Думаю что резистор в полмегаома паралельно RK кабелю больших проблем ланку не создаст а статике будет мешать накапливатся в кабеле, -а ваще это все нужно пробовать.

699. Pyku_He_oTTyda, 14.05.2007 18:43
полмегома конечно не создаст да и скорость в ланке маленькая, 9600 всего

700. КРОКОДИЛ, 14.05.2007 18:52
Pyku_He_oTTyda
в устройстве будет жить Мега8.
A как насчет уровня белого? -предусмотрен он в проекте или нет?

701. Pyku_He_oTTyda, 14.05.2007 22:29
Планируется

702. КРОКОДИЛ, 15.05.2007 05:37
Ктонибудь может обьяснить как в VMLABE пиать на Си? Или его както нужно с кодевиженом интегрировать?

703. joptpd, 15.05.2007 08:08
КРОКОДИЛ
почитал тут тебя
чувак
ты не прав(с)

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

про синтезатор я точно не скажу но управление им ты можеш посмотреть на осцилограме в его даташите
у него есть вход Е который перед отправкой даных ты поднимаеш в 1
дальше идет небольшая пауза
потом тебе нужна функция в которую ты передаеш некую цифру

синтезатор имеет еще 2 входа для клок и даных
принцип такой

начало_цикла;

клок 1
1й_бит_даных
клок0

клок 1
2й_бит_даных
клок0

....

конец_цикла;

вход Е опустить в 0

вот тут тебе пример кода для синтезатора
http://pira.cz/plllcd.htm

сохраняй через правую кнопку мыши а то там глюк какой то и файл не отдает как зип

704. КРОКОДИЛ, 15.05.2007 09:27
joptpd
надо действительно со светодиода начинать
Блин, я даже "шапку" к программе не могу написать, изза того что немогу разобратся что куда вписывать. И с интерфейсом симулятора тоже неразберусь. A по уже готовому проэкту сони/сони помигать диодом конечно можно -вот только что это даст?
вот тут тебе пример кода для синтезатора
Спасибо!

705. joptpd, 15.05.2007 11:50
смотри
файл для си имеет расширение .с

сверху идут #define или #include
в инклюдах подключают заголовки файлов которые связаны с готовыми библиотекаи компилятора
либо если #inclide "dfgfd.h" то етот файл должен лежать в той же папке где и .с файл
в нем определяют константы #define если их много
если 2-5 то все влезет в .с файл

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

в .с файле потом идут сами функции типа

void synth(int ){
тут код функции
}

потом идут глобальные переменые которые будут доступны из любой фунеции
они нужы например для того чебы твой код в обработчике прерывания мог поменять там даные
а основную обработку даных надо делать в главной проге

потом идут обработчики прерываний если ты их используеш

самое главное ето функция main
в ней выполняеца весь код

например

void main(viod){

initports();
initlcd();

ето все один раз выполняеца
потом идет цикл
while();

706. КРОКОДИЛ, 15.05.2007 17:55
joptpd
У меня VMLab начинает матюкатся при попытке написать вот так:
код:
#define CH1  PORTB.0
#define CH2 PORTB.1
#define CH3 PORTB.2
#define CH4 PORTB.3 //ВХОДЫ ОТ ПЕРЕКЛЮЧАТЕЛЯ каналов
#define CH5 PORTB.4
#define CH6 PORTB.5
#define CH7 PORTB.6
#define CH8 PORTB.7
#define TXRX PORTD.2 //ПЕРЕКЛЮЧАТЕЛЬ ПРИЕМ ПЕРЕДАЧА
#define PGUN PORTD.3 //ПЕРЕКЛЮЧАТЕЛЬ ГУНов
#define DATA PORTD.4
#define CLOCK PORTD.5
#define LE PORTD.6

Пишет что это все уже вроде как определенно функцией #define и ругается чтото насчет регистров с первого по тридцать первый. А в кодевижене такая запись прокатывает причем вставленная в любое место Но зато при попытке начать писать програму начинает ругатся на каждую строку А как вообще включить VMLab для работы с СИшными файлами?

707. joptpd, 15.05.2007 19:04
вм лаб ето симулятор
там нет редактора кода для си и нет компилятора

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

#define CH1 PORTB.0
#define CH2 PORTB.1
#define CH3 PORTB.2
#define CH4 PORTB.3 //ВХОДЫ ОТ ПЕРЕКЛЮЧАТЕЛЯ каналов
#define CH5 PORTB.4
#define CH6 PORTB.5
#define CH7 PORTB.6
#define CH8 PORTB.7
#define TXRX PORTD.2 //ПЕРЕКЛЮЧАТЕЛЬ ПРИЕМ ПЕРЕДАЧА
#define PGUN PORTD.3 //ПЕРЕКЛЮЧАТЕЛЬ ГУНов

если ты принимаеш даные из порта то надо использовать регистр PIN
соответствено пишеш CH1 PINB.0

пиши ето все после инклюдов
примерно так

#include <tiny2313.h>
#include <stdio.h>

#define DATA PORTD.4
#define CLOCK PORTD.5
#define LE PORTD.6

тут твои глобальные переменые типа
char UART_RxBuf[2];

###############
потом тут обработчики прерываний

interrupt [USART_RXC] void usart_rx_isr(void)
{

unsigned char tmphead;

tmphead = ( UART_RxHead + 1 ) & 1;
UART_RxHead = tmphead;
UART_RxBuf[tmphead] = UDR;
}
етот код будет срабатывать как только байт будет принять по юарт
тогда главная прога в функции main будет прервана

переменая UART_RxBuf[tmphead у меня глобальная и к ней есть доступ из главной проги а так же любой другой обработчик прерываний может иметь доступ
###########################

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

// Global enable interrupts
#asm("sei")

есть еще выключатели локальные
ето например в регистре UCSRC выставить опеределеные биты в 1
там есть прерывание для тх и для рх отдельно
я вот только выбрал включить рх 1 бит и еще один бит прерывание по рх
открой даташит
найди етот регистр юарта и посмотри биты
выстави в 1 как у меня и переведи бинарное число типа 01001000 в хекс и увидиш 0х06

но для работы с синтезатором тебе не надо никаких прерываний

void main(void)
{

iniports();
initsynth();
initlcd();

while(1){
тут весь твой код обработки нажатий кнопок и посылки в синтезатор
например проверить не нажатали кнопка первого канала
}

закрывающая скобка для функции main
}

дальше кода нет

у тебя наверно возник вопрос
типа как определить нажата ли кнопка?
короче в цифровой технике входы должны быть подключены либо на землю либо на плюс питания через резистор
в нашем случае входы висят на плюсе
когда давиш кнопку то происходит замыкание на землю и весь ток течет не в порт а в землю и на входе порта будет 0

как отловить его?
в цикле while оторый бесконечный пишеш такой код

if(!CH1){
выполнить какой то код
}

как оно работает?
когда кнопка не нажата то на выводе 1
условие if всегда верно если значение НЕ НОЛЬ
при помощи ! мы инвертируем условие

т.е. кнопка не нажата и в порт идет 1
мы ее и инвертируем в 0 и условие не будет выполняца

когда ты нажмеш на кнопку то на порте будет 0
! инвертирует 0 в 1 и тогда условие будет верно и код выполница

когда таких проверок больше 3 то лучше использовать swith case
примерно так

switch (PORTB){
case 0x01: do_some_shit_1();
case 0x02: do_some_shit_2();
case 0x04: do_some_shit_3();
case 0x08: do_some_shit_4();
case 0x10: do_some_shit_5();
case 0x20: do_some_shit_6();
case 0x40: do_some_shit_7();
case 0x80: do_some_shit_8();
default: nothing_to_do();
}

так можно опросить 8 кнопок на одном порту
если ни одна кнопка не нажата то выполница nothing_to_do()
ето условие не обязательно

если тебе надо прервать проверку остальных кнопок после нажатия какой то
то делай так

case 0x01: do_some_shit_1();
break;
после каждого case

короче вот
мог бы написать еще как прикрутить больше кнопок на один порт и проверять их
но будет много сложнее
лучше возьми мегу 16

ах да
внешние резисторы можно не припаивать
их встроили в мк и включаюца они записью единиц в нужные позиции какого то регистра
я не помню его ща
чето с pullup resistors связаное

708. КРОКОДИЛ, 15.05.2007 19:31
joptpd
Спасибо! Щас перевариваю написаное -вечером попробую чего нибудь накропать, -потом отпишусь.
я не помню его ща
чето с pullup resistors связаное

Там в кодевижене напротив каждого бита стоят буковки Т которые можно изменить на P -я так понимаю что Р -это подтяжка -или нет?

709. Pyku_He_oTTyda, 15.05.2007 23:33
да, от слова Pull Up

710. Dikoy, 16.05.2007 02:41
КРОКОДИЛ
Прогу написал:
www.dikoy44.narod.ru/prj.zip

В общем, работает прога так.
Вибираем порт, жмём открыть.
Внизу должно появиться сообщение, что порт открыт успешно. Или не успешно.
Если успешно, радуемся и продолжаем:

Изначально линия RTS порта стоит в 1. Только у СОМа там иверсия, чтоли… В общем, я точно не знаю, какой уровень будет на МК после всех преобразователей. Смотреть надо.
Ещё нюанс – при запуске проги линия RTS может дёрнуться. Это нужно учесть.
Порт настроен как 4800, без чётности и прочей хрени. Стандартно, короче.

Вводим все частоты в поля, жимаем «загрузить». Вводим в герцах, ибо переводить дробные числа из строк в значения это большой гимор в дельфе…
Значения из полей ввода преобразуются к числовому виду (в полях они текстовые). Число типа double, то бишь 4 байта, 32 бита.
Далее, прога проверяет, все ли значения кратны 12,5 кГц. Если да, то продолжаем. если нет – выдаёт ошибку.
Далее, устанавливается низкий уровень на RTS, ждём 100 мС, отправляем в порт число 44. Ждём 200 мС. Проверяем пришедший от МК ответ. Если ответ равен числу 45, RTS возвращается в «1» и сразу начинается передача данных.
Она крошит каждое значение на 4 байта, передаёт их в порт паровозом начиная с младшего. Первым передаётся значение трансфера, за ним ресивера. Построчно, начиная с первой строки.


Приём данных от МК идёт аналогично:
RTS в «0», отправляем код 50. Если МК ответит 51 (на что ему 200 мС), RTS переводится в «1» и прога готова читать данные. Перед передачей в прошивке желательно сделать задержку на пару мС.
Данные принимаются так же – по байту, начиная с младшего. Приняв 4 байта прога их склеивает и выдаёт в окошко.

Ещё есть кнопы Init и Reset. По нажатию первой в порт отсылается число «1», по нажатию второй число «8». Можно использовать, например, для проверки связи – нажал кнопочку, а МК помигал светодиодиком. Оч. удобно.

Признаюсь – прогу не тестировал… Бо лень А учитывая, сколько времени я не работал в дельфе… Могут быть косяки короче.
Передать то данные она передаст, а вот с приёмом.. Я там уже не помню, как те функции правильно юзать… Вроде откомпилировалась без проблем…
Короче, надо соединять два СОМ порта шнурком и тестить её терминалкой.
Написана на делфи7, работает под 98 и ХР, 100%.

711. КРОКОДИЛ, 16.05.2007 03:04
Dikoy
Скачал прогу, спасибо! Вобщем открыл -порт открывает и пишет что контроллер не откликнулся вовремя, -что вполне естественно -так как контроллера то и нету! Щас разбираюсь с Си -попробую сам хоть чегонибудь родить Очень помог joptpd ,а то бы я двойного соню еще страниц двести бы пытал!

Добавление от 16.05.2007 03:11:

Я так понял что нужно еще MAX232 для согласования уровней?

Добавление от 16.05.2007 04:17:

joptpd

код:
USICR=0x00;
ACSR=0x80;
while (1)
{
switch (PORTB){
case 0x01: do_some_shit_1();
break;
case 0x02: do_some_shit_2();
break;
case 0x04: do_some_shit_3();
break;
case 0x08: do_some_shit_4();
break;
case 0x10: do_some_shit_5();
break;
case 0x20: do_some_shit_6();
break;
case 0x40: do_some_shit_7();
break;
case 0x80: do_some_shit_8();
break;
default: nothing_to_do();
}
// Place your code here

};
}

Кодевижен ругается на каждую строчку case и на default: nothing_to_do(); -всего девять ошибок А что в скобках на коце строки нужно писать?

Добавление от 16.05.2007 05:20:

Вроде вьехал -наверно нужно писать чтото типа case 0x1: CH1(0x2D00); или нет?

712. K_AV, 16.05.2007 09:50
Так joptpd тебе не кусок программы написал (а ты повторил), а шаблон (заготовку), который сам по себе не работает. Просто в таком прядке должны выполняться действия в программе. Вместо do_some_shit_1() должен быть вызов какой-то функции (подпрограммы), или цепочка действий, объединенная в единое целое фигурными скобками.
Пока у тебя написано одной строкой do_some_shit_1(), компилятор думает, что это вызов функции. А функции такой он в тексте программы не нашел. Вот и ругается.

713. joptpd, 16.05.2007 10:12
do_some_shit ето твои функции или действия которые надо делать при нажатой кнопке
я всю тему не читал
не в курсе как ты там каналы хочеш использовать

можеш написать функцию отправки частоты в синтезатор и вызывать ее
synth(35765) передавая ей некое число заранее пощитаное на бумажке

смысл работы синтезатора в том че ты ему посылаеш некое целое число 2 байта как минимум
в даташите есть формула и по ней ты вычисляеш ето число

switch (PORTB){

я тут специально ошибку допустил
думал ты заметиш
надо не порт а пин

вот возьмем тот пример который я дал с чешского сайта

функция отправки 2 байт в синтезатор

void PLL_SendW(unsigned int COMM)
{
DATA_OFF;
DLEN_ON;
sint i;
CLK;
for (i=0; i<16; i++)
{
if (COMM & 0x8000) DATA_ON;
else DATA_OFF;
CLK;
COMM <<= 1;
}
DLEN_OFF;
clk(10);
}

как видиш тут есть те самые define макросы про которые тебе уже говорили
DATA_OFF; опускает в 0 линию даных если она была в 1
поднимаем линию Е DLEN_ON; в 1 для начала работы с синтезатором
дальше дергаем линию клок CLK;
согласно даташиту на тот синтезатор надо перед подачей даных дергуть 1 раз клок

дальше идет самое интересное
в цикле передам 2 байта т.е. 16 бит for (i=0; i<16; i++)

if (COMM & 0x8000)
число 80000 в двоичном коде 100000000 00000000
логическая операция &

берем некое число которое идет в синтезатор
например 43673 оно же 10101010 10011001

делаем побитное И
ето значит 1 и 1 будет 1
1 и 0 будет 0
0 и 1 будет 0

пример

10101010 10011001
100000000 00000000
----
100000000 00000000 у нас получилось число 8000

помниш я тебе говорил если в условии if НЕ НОЛЬ то оно верно?
вот оно не ноль
тогда мы выставляем дату в 1 if (COMM & 0x8000) DATA_ON;

если оно было 0 то дату выставляем 0 else DATA_OFF;
каждый переданый бит сопровождаеца дерганьем клока для синхронизации
дергаем снова клок CLK;

теперь еще один важный и интересный момент
COMM <<= 1;

побитный сдвиг влево на 1 место

берем наше число 10101010 10011001
теперь сдвигаем влево на 1 место
01010101 00110010

теперь слева первым у нас стоит 0 а справа на последнем месте всегда будет 0

так мы передали 1 бит
осталось циклу еще 15 раз пройтись и передать все нули или единицы

по сути у тебя вот есть готовая функция для работы с синтезатором

тебе надо только подготовить числа для отправки в ету функцию

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

например вот функция инициализации синтезатора

void InitPLL()
{
clk(20);
PLL_SendW(0xCC00);
//delay(100);
PLL_SendW(0xCC00);
//delay(100);
//PLL_SendW(10700);
//delay(100);

}

как видиш ему сначала надо 20 раз дернуть клок
потом 2 раза послать некое число и тогда он готов к приему даных

а вот макросы
#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_us(1);cbi(PORTD,PD2);}

вот так реализована функция которая шлет 20 раз клок
void clk(unsigned int c)
{
int p;
for (p=0; p<c; p++) CLK;
}

вот и все

714. КРОКОДИЛ, 16.05.2007 14:11
joptpd
не в курсе как ты там каналы хочеш использовать

можеш написать функцию отправки частоты в синтезатор и вызывать ее
synth(35765) передавая ей некое число заранее пощитаное на бумажке

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

715. joptpd, 16.05.2007 14:42
в кодевижине есть функции для работы с епромом
если каналы менять не будеш то сделай вызов функции с готовыми частотами

если будеш работать с епромом то там надо указатель использовать
в хелпе кодевижина есть пример
на одну частоту надо 2 байта

в моем примере тоже можно записать 8 или 10 каналов
посмотри как там сделано

716. КРОКОДИЛ, 16.05.2007 14:53
K_AV
Так joptpd тебе не кусок программы написал (а ты повторил), а шаблон (заготовку), который сам по себе не работает
Да протупил я немного. Просто пока в голове это все нескладывается в целую картинку. Я так понял что нужно создать функцию типа EEREAD и писать примерно так:switch (PINB){
case 0x1: EEREAD(НОМЕР ЯЧЕЙКИ);
А что это за цифры после case -это что тоже для примера или так должно быть?

Добавление от 16.05.2007 14:57:

joptpd
в хелпе кодевижина есть пример
У меня очень плохо с английским.

717. Dikoy, 16.05.2007 15:06
joptpd
можеш написать функцию отправки частоты в синтезатор и вызывать ее
Дык соня ему уже написал всё! Там функция:
код:
 
/* Эта функция загружает в синтезатор 21 бит из трех
глобальных переменных типа unsigned char именуемых:
data_hi, data_mid и data_low.    */
void data_to_synt (void) {
char ctr = 8; /* Локальная переменная счетчик */

/* 
Включаем линии (выводы МК) управляющие синтезатором  
*/

LE_LINE_ON = 1;
LE_LINE = 0;
/* я начал с линии LE так как на ней нужно сделать "0" а паузу после этого автоматически создаст время конфигурации следующих линий */
CLOCK_LINE = 0;
CLOCK_LINE_ON = 1;
/* теперь на линии CLOCK "0" и она является выходом */
DATA_LINE_ON = 1;
/* линию DATA достаточно просто включить - сделать выходом */


/* Цикл вывода data_hi начиная с бита_7 (Это 21-й
бит - самый старший - MSB). Будем делать 8 раз
каждый раз отправляя в синтезатор очередной бит  */
// сейчас ctr равен 8
while (ctr){ // выполнять {в скобках} если ctr не ноль
/* Вывести на DATA 7-й бит data_hi */
DATA_LINE = data_hi & 0b10000000;
/* Мы каждый раз будем выводить 7-й бит, только в следующий раз мы подвинем на это место 6-й бит, затем 5-й и так далее */

/* Пауза гарантировано более 50 nS */
// оказалась ненужна PAUZA

/* Сдвинуть data_hi на 1 позицию в лево */
data_hi <<= 1;
/* это поместит в бит_7 data_hi бит_6 - т.е. тот который
будет передан при следующем выполнении цикла */

/* Уменьшить счетчик оставшихся прогонов цикла на 1 */
ctr --;

CLOCK_LINE = 1; /* Сделать фронт на CLOCK */


CLOCK_LINE = 0; /* Сделать спад на CLOCK */

};

ctr = 8;
/* Снова "взводим" переменную счетчик на 8 прогонов цикла */

/* Вывести data_mid точно так же как data_hi */
while (ctr){
DATA_LINE = data_mid & 0b10000000;

data_mid <<= 1;

ctr --;

CLOCK_LINE = 1;

CLOCK_LINE = 0;

};


ctr = 5; /* Снова "взводим" переменную счетчик
но теперь на 5
так как в data_low всего 5 бит нужно передать */

while (ctr){/* Цикл вывода data_low начиная с бита_7
будем делать ПЯТЬ раз */
/* Вывести на DATA 7-й бит data_low */
DATA_LINE = data_low & 0b10000000;

/* Сдвинуть data_low на 1 позицию в лево */
data_low <<= 1;

/* Уменьшить счетчик оставшихся циклов на 1 */
ctr --;

CLOCK_LINE = 1; /* Сделать фронт на CLOCK */


CLOCK_LINE = 0; /* Сделать спад на CLOCK */

};


/* Отправили 21 бит, теперь нужно сделать "1"
на LE (см. диаграмму выше) */

LE_LINE = 1; /* Вывести "1" на LE */

/*
Передача 21 бита данных в синтезатор окончена  
*/
}



Причём пины задефайнены:
#define DATA_LINE PORTD.4
#define CLOCK_LINE PORTD.5
#define LE_LINE PORTD.6
#define DATA_LINE_ON DDRD.4
#define CLOCK_LINE_ON DDRD.5
#define LE_LINE_ON DDRD.6
То есть перелать под любой МК и распиновку можно моментом, изменив только дефайны.

в кодевижине есть функции для работы с епромом
Да просто создать массив:
#pragma warn-
eeprom long int koefp[16];
#pragma warn+
И всё, пиши в него коеффициенты и читай. Удобно и без вопросов.
Только крокодил сейчас начнёт спрашивать, как работать с массивом, а я его снова отправлю к школьному учебнику по Си, где это написано в разделе "структурированные типы данных"

на одну частоту надо 2 байта
Не, там полная посылка в синтезатор, это 21 бит.

Добавление от 16.05.2007 15:10:

Читать так:

temp=koefp[i]; Где i - номер переменной в массиве от 0 до 16.

Писать аналогично:

koefp[i] = temp;

718. КРОКОДИЛ, 16.05.2007 15:38
Дык соня ему уже написал всё! Там функция:
Так до посылки пока еще дело не дошло
Dikoy
#pragma warn-
eeprom long int koefp[16];
#pragma warn+

Все я окончательно запутался Пойду читать учебник.

719. Бэтмэн, 16.05.2007 17:04
Ужос. Уж не меньше 1,5 месяцев прошло. А воз и ныне там. Ну Вы и садюги, человека с нуля заставлять в Си въезжать. Заставьте его книжку сперва прочитать. У бедного Крокодила уже заворот мозгов похоже...

720. Dikoy, 16.05.2007 18:28
Бэтмэн
Заставьте его книжку сперва прочитать.
Вот ты умный, ты и заставь! Его даже учебник по си не заставишь прочесть... Предыдущий пост глянь - открыл бы учебник и понял, что там написано.

КРОКОДИЛ
#pragma warn- //отключили вонинги (а то компилятор тут матерится, но не по делу)
eeprom long int koefp[16]; //в епроме создали массив на 16 элементов типа лонг инт (32 бита).
#pragma warn+ //снова включили вонинги.

721. КРОКОДИЛ, 16.05.2007 19:27
Dikoy
Дык соня ему уже написал всё! Там функция:
Компилятор выдает 24 ошибки! -или я опять чегото не туда вставил? :spy
код:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.2 Beta1 Standard
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 15.05.2007
Author : DGENA
Company : JJJ
Comments:
Chip type : ATtiny2313
Clock frequency : 4,500000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/
#include <tiny2313.h>
#include <delay.h>
#define CH1 PINB.0; //
#define CH2 PINB.1;//
#define CH3 PINB.2;//
#define CH4 PINB.3;//Входы от переключателя каналов-работают на Вход с подтяжкой
#define CH5 PINB.4; //
#define CH6 PINB.5;//
#define CH7 PINB.6;//
#define CH8 PINB.7;//
#define TXRX PIND.2; //ПЕРЕКЛЮЧАТЕЛЬ ПРИЕМ ПЕРЕДАЧА-работает на вход с подтяжкой
#define PGUN PIND.3; //ПЕРЕКЛЮЧАТЕЛЬ ГУНов работает на выход
#define DATA_LINE PORTD.4;
#define CLOCK_LINE PORTD.5;
#define LE_LINE PORTD.6;
#define DATA_LINE_ON DDRD.4; //
#define CLOCK_LINE_ON DDRD.5; //подключение PLL
#define LE_LINE_ON DDRD.6; //
#define PAUZA #asm("nop");
volatile unsigned char data_hi, data_mid, data_low; //
void data_to_synt (void) {
char ctr = 8;
LE_LINE_ON = 1;
LE_LINE = 0;
CLOCK_LINE = 0;
CLOCK_LINE_ON = 1;//теперь на линии CLOCK "0" и она является выходом
DATA_LINE_ON = 1;
while
(ctr){
DATA_LINE = data_hi & 0b10000000;
data_hi <<= 1;
ctr --;
CLOCK_LINE = 1; /* Сделать фронт на CLOCK */
CLOCK_LINE = 0; /* Сделать спад на CLOCK */
};
ctr = 8; /* Снова "взводим" переменную счетчик на 8 прогонов цикла */
/* Вывести data_mid точно так же как data_hi */
while (ctr){
DATA_LINE = data_mid & 0b10000000;
data_mid <<= 1;
ctr --;
CLOCK_LINE = 1;
CLOCK_LINE = 0;
};
ctr = 5; /* Снова "взводим" переменную счетчик
но теперь на 5
так как в data_low всего 5 бит нужно передать */
while (ctr){/* Цикл вывода data_low начиная с бита_7
будем делать ПЯТЬ раз */
/* Вывести на DATA 7-й бит data_low */
DATA_LINE = data_low & 0b10000000;
/* Сдвинуть data_low на 1 позицию в лево */
data_low <<= 1;
/* Уменьшить счетчик оставшихся циклов на 1 */
ctr --;
OCK_LINE = 1; /* Сделать фронт на CLOCK */
CLOCK_LINE = 0; /* Сделать спад на CLOCK */
};
/* Отправили 21 бит, теперь нужно сделать "1"
на LE (см. диаграмму выше) */
LE_LINE = 1; /* Вывести "1" на LE */

/*
Передача 21 бита данных в синтезатор окончена  
*/
}

void main(void){
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTA=0x00;
DDRA=0x00;
PORTB=0xFF;
DDRB=0x00;
PORTD=0x04;
DDRD=0x00;
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
GIMSK=0x00;
MCUCR=0x00;
TIMSK=0x00;
USICR=0x00;
ACSR=0x80;


722. Apex_t, 16.05.2007 20:20
Dikoy
код:

#pragma warn- //отключили вонинги (а то компилятор тут матерится, но не по делу)
eeprom long int koefp[16]; //в епроме создали массив на 16 элементов типа лонг инт (32 бита).
#pragma warn+ //снова включили вонинги.



Он не ругается а ПРЕДУПРЕЖДАЕТ и именно по делу ! Он сообщает что вы cоздали массив в EEPROM и не присвоили его элементам значения. Т.е. помагает избежать ошибок или недоразумений. "Вонинги" не мешают успешной компиляции.

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

eeprom long int koefp[2]={12,45};

то "Вонингов" не будет.

Добавление от 16.05.2007 20:23:

Бэтмэн
Заставьте его книжку сперва прочитать.

Попробуй.

Добавление от 16.05.2007 20:27:

Dikoy
Короче, надо соединять два СОМ порта шнурком и тестить её терминалкой.
Написана на делфи7, работает под 98 и ХР, 100%.


Советую использовать проги для отладки по COM-порту со страницы proavr.narod.ru/z4.htm

В них можно и скрипто подобие писать почти как на Си.

723. КРОКОДИЛ, 17.05.2007 00:04
ALL. Может ктонибудь толком сказать почему кодевижен по всем выражения типа DATA_LINE = data_mid & 0b10000000; и LE_LINE = 1; , CLOCK_LINE = 0; дает ошибку типа неправильное выражение -ведь они у меня все задефанены? Cначала думал что кодевижен кривой -переустановил -опять тоже самое.

724. Apex_t, 17.05.2007 01:56
Наверно код скопирован с интернет страницы - возможно кодировка символов виновата. Возьмите исходник их архива к задаче или скопируйте обозначения типа DATA_LINE из строчки дефайн и вставьте в текст программы где написано
DATA_LINE = Либо наберите заново с клавиатуры.

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

---

Вот почитать советую:

Микроконтроллеры AVR семейства Mega. Руководство пользователя. Книга 2007

Автор: А.В. Евстифеев Издательство: Додэка-XXI Страниц: 594
ISBN: 978-5-94120-090-0

http://www.roboforum.ru/viewtopic.htm?p=30009#30009

725. КРОКОДИЛ, 17.05.2007 02:43
Apex_t
Наверно код скопирован с интернет страницы - возможно кодировка символов виновата. Возьмите исходник их архива к задаче или скопируйте обозначения типа DATA_LINE из строчки дефайн и вставьте в текст программы где написано
DATA_LINE = Либо наберите заново с клавиатуры.

Я так и делал! Разобрался уже! Оказывается она брыкалась изза того что концовци небыло
код:
while(1){  
data_hi = 0b10101010;
data_mid = 0b10101010;
data_low = 0b10101010;
data_to_synt ();

Тоесть отсутствовали значения выражений, А чего теперь дальше то делать, какую функцию и куда добавлять конкретно? А то я пока разобрался с этими ошибками у меня полное несварение мозгов началось! -целые сутки за компом просидел!
код:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Evaluation
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 16.05.2007
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:


Chip type : ATtiny2313
Clock frequency : 4,500000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/
#include <tiny2313.h>
#define CH1 PINB.0; //
#define CH2 PINB.1;//
#define CH3 PINB.2;//
#define CH4 PINB.3;//Âõîäû îò ïåðåêëþ÷àòåëÿ êàíàëîâ-ðàáîòàþò íà Âõîä ñ ïîäòÿæêîé
#define CH5 PINB.4; //
#define CH6 PINB.5;//
#define CH7 PINB.6;//
#define CH8 PINB.7;//
#define TXRX PIND.2; //ÏÅÐÅÊËÞ×ÀÒÅËÜ ÏÐÈÅÌ ÏÅÐÅÄÀ×À-ðàáîòàåò íà âõîä ñ ïîäòÿæêîé
#define PGUN PIND.3; //ÏÅÐÅÊËÞ×ÀÒÅËÜ ÃÓÍîâ ðàáîòàåò íà âûõîä
#define DATA_LINE PORTD.4
#define CLOCK_LINE PORTD.5
#define LE_LINE PORTD.6
#define DATA_LINE_ON DDRD.4
#define CLOCK_LINE_ON DDRD.5
#define LE_LINE_ON DDRD.6
#define PAUZA #asm("nop")
#define const hag 360
volatile unsigned char data_hi, data_mid, data_low;
void data_to_synt (void) {
char ctr = 8; /* Ëîêàëüíàÿ ïåðåìåííàÿ ñ÷åò÷èê */
LE_LINE_ON = 1;
LE_LINE = 0;
/* ÿ íà÷àë ñ ëèíèè LE òàê êàê íà íåé íóæíî ñäåëàòü "0" à ïàóçó ïîñëå ýòîãî àâòîìàòè÷åñêè ñîçäàñò âðåìÿ êîíôèãóðàöèè ñëåäóþùèõ ëèíèé */
CLOCK_LINE = 0;
CLOCK_LINE_ON = 1;
/* òåïåðü íà ëèíèè CLOCK "0" è îíà ÿâëÿåòñÿ âûõîäîì */
DATA_LINE_ON = 1;
while (ctr){
DATA_LINE = data_hi & 0b10000000;
ctr --;
CLOCK_LINE = 1; /* Ñäåëàòü ôðîíò íà CLOCK */
CLOCK_LINE = 0; /* Ñäåëàòü ñïàä íà CLOCK */
};
ctr = 8;
while (ctr){
DATA_LINE = data_mid & 0b10000000;
data_mid <<= 1;
ctr --;
CLOCK_LINE = 1;
CLOCK_LINE = 0;
};
ctr = 5;
while (ctr){
DATA_LINE = data_low & 0b10000000;
data_low <<= 1;
ctr --;
CLOCK_LINE = 1; /* Ñäåëàòü ôðîíò íà CLOCK */
CLOCK_LINE = 0; /* Ñäåëàòü ñïàä íà CLOCK */
};
LE_LINE = 1; /* Âûâåñòè "1" íà LE */
}
void main(void){
DDRA = 0;
PORTA = 0;
DDRB = 0;
PORTB = 0;
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x42;
while(1){
data_hi = 0b10101010;
data_mid = 0b10101010;
data_low = 0b10101010;
data_to_synt ();
}

}

Вот посмотри я там в дефанах константу обспечивающую шаг задефанил -правильно так будет или нет? И чего дальше делать буфер создавать или чтото другое?

Добавление от 17.05.2007 02:52:

Я правда забыл UART включить в визарде и выходы для портов выставить-не обращай внимания -потом переделаю заново, -мне сейчас главное понять как все друг за друга прицепляется и чего куда и самое главное как переносится именно для синтезаторов! P.S. Правда коментарии на украинском языке получились но понять можно

Добавление от 17.05.2007 03:28:

Apex_t
Вот почитать советую
Скачал, посмотрел - для меня пока это шибко заумная книга. И потом книги дают обще представление, а какогото конкретного случая в них и ненайдешь Мне вот например непонятно как привязать константу шага к той функции что ты написал, и как одновременно передавать в синтезатор и байты определяющие частоту и константу для предделителя кварца определяющего шаг сетки?

726. joptpd, 17.05.2007 09:49
константу смотри в даташите
там будет такая типа таблицы где прописаны номера битов

например вот http://www.peter-geisler.de/datasheet_SAA1057.pdf
открой на странице 4 и 5
там есть буквы всякие и рядом 0 или 1
каждая буква обозначает некий бит который отвечает за какую то функцию

для примера возьмем переключение ам и фм
сделаем дефайн
#define MODE_AM
#defile MODE_FM

теперь идем на страницу 5 и смотрим где там у нас фм
мы видим регистры а и б
регистр а полностью занят под частоту
регистр б для функций

предположим че мы можем посылать регистр б отдельно от а
длина регистра б 16 бит
посему мы берем 2 байта под второй регистр

регистр а имеет на последнем месте 0 а регистр б 1
так синтезатор наврно их различает

теперь смотрим снова где ам фм

1 ето фм 0 ам

#define MODE_AM 0b10000000 00000000 //0x8000
#defile MODE_FM 0b11000000 00000000 //0xc000

теперь сделаем переменую для регистра б
int data_b = 0x0000;

включаем фм
data_b = data_b | MODE_FM;

включаем ам
data_b = data_b & MODE_FM;

вспомни про битовые операции
почитай про них

можно еще круче сделать
#defile TOGGLE_MODE data_b^=1<<14;

теперь при нажатии на кнопку ам\фм ты просто вызываеш дефайн TGGLE_MODE

работает ето так
^ означает xor
есть был 0 то станет 1
если был 1 то станет 0

дальше я двигаю влево до 14 бита
data_b^=1<<14 немного непонятно но оно короче
тоже самое можно записать так data_b= data_b^ (1<<14);

теперь посмотрим дальше
только тут ты уже сам попробуй

дальше идут комбинации битов
например т0 т1 т2 т3
пин 18 являеца тестовым
по нему ты с помощью мк можеш определить был ли захват частоты и приемник настроен или нет
например нужно для автоматической настройки

делаем дефайны
#define MODE_LOCK
бит т3 всегда 0
т2 выбирает опорную частоту 32 или 40кгц и выдает на 18 пине
т1 всегда 0
т0 выход фазового детектора
когда частота захвачена там будет 1
если нет то 0

в табице даны комбинации битов
мы выбрали комбинацию битов такую че выход 18 использовать как индикатор настройки

значит нам надо выставить т-биты так
т3 т2 т1 т0
0 1 0 1

теперь запишем все число полностью нулями
исключая 4 места под ети биты (первый бит слева всегда 1)
#define MODE_LOCK 0b10000000 00000101 // 0x8005

теперь нам перед отправкой в синтезатор применить все биты
т.е. выставить в 1 или 0

тут применяем логическое ИЛИ
т.к. у нас изначально было 0 то при ИЛИ 0 станет 1
а если была уже 1 то она там и будет

data_b = data_b | MODE_LOCK;

ищи в даташите на твой синтезатор какие биты отвечают за делитель и так же делай дефайны или сразу выставляй нужный бит в 1 если делитель не будеш менять

почитай про битовые операции
вот тебе калькулятор который наглядно покажет работу с битовыми операциями
http://slil.ru/24379487

727. K_AV, 17.05.2007 10:26
ну, мамочка в своем духе... даже ссылку на чужой ресурс дал не туда, где ссылки на книги лежат (первый пост ветки), а на свой ответ в той ветке, в котором из всех ссылок осталась одна, зато есть его реклама. IMHO - это уже к доктору.

728. An_private, 17.05.2007 10:40
Chudik, ну забань ты этого м... по IP. Он, по моему, со своим avr123 уже всех достал...

729. K_AV, 17.05.2007 10:51
КРОКОДИЛ
"Скачал, посмотрел - для меня пока это шибко заумная книга. И потом книги дают обще представление, а какогото конкретного случая в них и ненайдешь"
Как раз эта книга вроде неплохая, подробная (и автор для AVR известный). И на русском языке (что для тебя важно).
Просто смирись с мыслью, что вот так, с наскока, целую новую для тебя отрасль (микроконтроллеры) тебе все равно не поднять. Учиться придется, хоть и тяжело. Судя по всему, начальный уровень в этой области полностью нулевой, а потому:
1) Основы цифровой техники (чтобы понимал и разницу между И и ИЛИ, и как засланные в микросхему байты управляют ее работой).
2) Основные понятия о микроконтроллерах вообще (это как раз просто, при наличии пункта 1).
3) Основы программирования (на уровне понятий, безотносительно к конкретному языку) - это тоже в общем немного, но требуется усвоить устойчиво.
4) Учебник по тому же C (но до уровня устойчивого понимания и запоминания).
5) Освоение какой-нибудь одной среды разработки (в ней будет удобно в симуляторе примеры крутить, чтобы разобраться лучше).
При везении в выборе учебника пункты 3 и 4 объединятся.
Заманчиво, конечно, взяв чужое подходящее, по-быстрому начать получать прибыль. Но в этом направлении далеко не уйдешь. При повторении (модификации) чужих разработок ты еще и между разными типами МК и разными языками программирования дергаешься, не имея опыта ни в одной. И все равно потребуются модификации даже того синтезатора, который общими усилиями тебе практически уже дали. А без понимания "шаг вправо/влево - расстрел (веревка/мыло)".

730. КРОКОДИЛ, 17.05.2007 16:35
joptpd
константу смотри в даташите
Для меня даташит на LMX2316 еще боле непонятен чем даташит на MK Особенно то что касается битов микросхемы. А английский для меня все равно что китайский! С даташитом не могу разобратся особенно непонятно почему на таблицах изображено все время различное количество битов, хотя речь шла о 21 битной системе. см рис. За калькулятор спасибо -очень полезная штука
например вот http://www.peter-geisler.de/datasheet_SAA1057.pdf
открой на странице 4 и 5

Не так я ище больше запутаюсь Общюю функцию передачи в синтезатор уже написал соня/соня а вот как и что к ней прикрутить я пока путаюсь Тут мне непонятно как на СИ сделать буфер и т.д.

Добавление от 17.05.2007 17:04:

K_AV
Просто смирись с мыслью, что вот так, с наскока, целую новую для тебя отрасль (микроконтроллеры) тебе все равно не поднять. Учиться придется, хоть и тяжело.
Смирился,и учусь по мере возмостей и умственных способностей, - а они у всех разные- не все рождаются академиками Бросать это дело не собираюсь -все равно рано или поздно разберусь.
(на уровне понятий, безотносительно к конкретному языку
Вот это для меня самое сложное -когда чтото безотносительно чегото -для меня вообще непонятно
) Освоение какой-нибудь одной среды разработки (в ней будет удобно в симуляторе примеры крутить, чтобы разобраться лучше).
Все уже остановился на кодевижене -наиболее понятный для меня компилятор -можно сгенериовать коды и тутже посмотреть что к чему и как.
Как раз эта книга вроде неплохая,
Я же не говорил что книга плохая, - просто для меня пока еще сложноватая, -просто даже при наличии супер умных книг нельзя к кор0ткий срок освоить то что люди прдумывали десятилетиями. И после любой книги все равно остаются вопросы, потом опятьже книги пишутся под определенный уровень читателя...........
по-быстрому начать получать прибыль.
О прибыли в ближайшем обозримом времени речь пока не идет -тут хотябы удержатся на своем месте.

Добавление от 17.05.2007 17:08:

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

Добавление от 17.05.2007 17:16:

joptpd
В этой микросхеме кажется нет ам и фм зато есть режим с пониженным энергопотреблением, -впрочем ни то ни другое мне ненужно



K_AV

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

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

731. joptpd, 17.05.2007 17:23
скачай прогу
National is proud to present this software for programming all of National's RF wireless products. This is the software that can be used to program a PLL via the parallel port of a computer. Aside from this function, it is also a useful tool in addressing questions concerning how to program the part, because it shows the bits that are actually sent. This can also be useful in determining counter values and prescalers.

http://www.national.com/appinfo/wireless/files/codeloader_setup.exe 3мб
она покажет тебе все нужные биты
не забудь только выбрать в меню нужный тебе синтезатор
прога управляет им от лпт порта

по поводу програмирования вообще
тебе тут правильно говорят

я учился методом тыка не имея никаких книжек и не зная английского
был только словарик карманый
начал в 92 году и до сих пор

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

КРОКОДИЛ
Тут мне непонятно как на СИ сделать буфер и т.д.
char buffer[10]
обычный масив

732. КРОКОДИЛ, 17.05.2007 17:31
joptpd
короче не не всем ето дано
Так и я о томже -но все равно нужно стремится!
скачай прогу
Спасибо! -ночью скачаю.
обычный масив
Так а где его назначать? - там где дефайны?

733. An_private, 17.05.2007 17:35
меня уже начинает мучать вопрос - сколько можно мучаться фигней, пытаясь освоить одновременно си, ассемблер, основы цифровой техники, микроконтроллеры pic И avr, а также dds синтезаторы частоты. Я ничего не забыл? Может все-таки как-нибудь по очереди?

734. Dikoy, 17.05.2007 17:44
Apex_t
Он сообщает что вы cоздали массив в EEPROM и не присвоили его элементам значения.
И чего теперь? Хош сказать, не заработает?


КРОКОДИЛ
С даташитом не могу разобратся особенно непонятно почему на таблицах изображено все время различное количество битов, хотя речь шла о 21 битной системе.
21 бит - это посылка. То есть то, что ты передаёшь в синтезатор. А точнее в один из его регистров, которых там 3. Эти 21 бит склеемы из нескольких слов. Например, первые два бита определяют адрес целевого (какой из 3) регистра, куда посылка предназначается. Далее идут ещё биты что либо определяющие.
Твоя задача - вычислить значения этий слов для своих частот, потом в программе склеить их в 21 битную посылку и запульнуть в синтезатор сониной функцией.

Т.к. его функция работает не с 21 битными посылками а с 3*8 бит (три байта), то эту 21 битную посылку придётся ещё порезать на 3 части. Как в моей функции делается

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

An_private
Уже давно остановились на Си, AVR и одном единственном синтезаторе.

735. K_AV, 17.05.2007 17:54
КРОКОДИЛ
Насчет разного количества бит.
В даташите на LMX2316 написано, что в микросхему (во всех случаях) передается 21 бит. Но внутри микросхемы эта информация может распределиться на 3 "получателя": 14-битный регистр делителя опорной частоты (из опорного кварца получишь свой шаг сетки), 18-битный регистр управления частотой выходного сигнала синтезатора (этим делителем ты и будешь выбирать, какая у тебя будет рабочая частота) и 18-битный функциональный регистр (управление всем остальным в работе микросхемы синтезатора). В какой из "получателей" попадет информация, переданная в микросхему - определяется последними (младшими, т.к. передавать данные в микросхему требуется сот старших к младшим) 2 битами этой посылки (C1, C2).
В табл. 1.1.1 расписаны состояния делителя опорной частоты (коэфф.деления от 3 до 16383, коэфф. менее3 запрещены).
18-битный регистр управления выходной частотой разделен на 2 части (управляет 2 счетчиками): 5-разрядный счетчик SWALLOW (я этого термина не знаю, что-то насчет "глотать" ) и 13-разрядный делитель выходной частоты. Таблицы 1.2.1, 1.2.2.
18-разрядный регистр управления - там у отдельных групп и даже отдельных бит своя "область ответственности". Таблицы 1 и 2 в разделе 1.3.
Судя по 1.2.3, 13-разрядный счетчик наращивает частоту более крупными "шагами" (по формуле в п.1.2.3, для вычисления частоты он домножается на коэффициент 32), а 5-разрядный - шажками по "1" (ни на что не домножается), типа "точной подстройки".

736. joptpd, 17.05.2007 17:54
посмотрел даташит
тебе для чего такой синтезатор нужен? для простого приемника уж больно он крут

про 21 бит все верно
2 бита там самые главные
они образуют 4 комбинации
для 3х регистров и еще одна комбинация для чего то там
закрыл уже его

тебе еще надо знать какие опции синтезатора тебе нужны
от них зависят все остальные числа в регистрах

737. K_AV, 17.05.2007 18:08
joptpd
Дык трансивер же (связной приемо-передатчик).

738. КРОКОДИЛ, 17.05.2007 18:18
joptpd
тебе для чего такой синтезатор нужен? для простого приемника уж больно он крут
Не ето для встраивания в устаревшие автомобильные радиостанции, причем диапазоны у них могут быть разными а синтезатор один, сменными будут только ГУНы выполненные в виде отдельных модулей, - ну типа универсальный с прицелом на будущее, а именно эта микросхема взята из соображений большого запаса по частоте, возможности сделать почти любой шаг типа 12,5кгц, ну и естественно как наиболее доступная для меня и с более менее доступной ценой. Хотя я предпочел бы чтонибудь в DIP корпусе, но пойдет и так А вообще еще хочу после синтезатора сделать себе на базе этих микросхем генератор стандартных сигналов до 1500мегагерц - цифровой естественно. ну и частотомер с таким же диапазоном, но это уже после того как разберусь хоть чучуть с програмированием.

Добавление от 17.05.2007 18:38:

An_private

[i]меня уже начинает мучать вопрос - сколько можно мучаться фигней, пытаясь освоить одновременно си, ассемблер, основы цифровой техники, микроконтроллеры pic И avr, а также dds синтезаторы частоты. Я ничего не забыл? Может все-таки как-нибудь по очереди? [/i Грешно смеятся над больным человеком (С.) Дык по очереди не получается -так как в в моем случае МК AVR и PLL по отдельности использоват нельзя. За dds я никогда даже не упоминал и несобираюсь с ними связыватся -это совсем другая тема и меня не интересует. А начал с пиков потому что это было единственное что можно купить в нашем городе и под них было множество схем и готовых програм, ну и вполне естественно с асемблера, а потом меня уже убедили перейти на СИ и AVRы и я вполне с этим согласен. А насчет множествености задач тоже согласен -сильно сбивает с толку, - а по другому не поучаеца

Добавление от 17.05.2007 18:54:

Dikoy
Он сообщает что вы cоздали массив в EEPROM и не присвоили его элементам значения.
И чего теперь? Хош сказать, не заработает?

Так а как тогда обращатся к вполне конкретной ячейке к 5 например если она непронумерована?

K_AV
В даташите на LMX2316 написано,
Щас пока перевариваю написаное
5-разрядный счетчик SWALLOW
Да у меня промт перевел ЛАСТОЧКА а в скобках глотать

Добавление от 17.05.2007 19:56:



joptpd
константу смотри в даташите
Так а где её прописывать и как -там где дефаны или непосредственно в MAIN -посмотри в том коде что я выше давал -правильно или нет? -В книжке както непонятно написано
обычный масив
тот же вопрос -где его писать? И еще -знак логического НЕ -это обычнй восклицательный знак на клавиатуре? -или чтото другое? А еще ненашел на клавиатуре знак разделения выражений -как его набирать то?

739. joptpd, 17.05.2007 23:03
КРОКОДИЛ
А еще ненашел на клавиатуре знак разделения выражений -как его набирать то?
| такой?
я не знаю у меня клавиатура нотыбучная и немецкая
много различий
шифт надо держать

константы есть переменые а есть дефайны
дефайны ето просто для удобочитаемости кода
при компилировании они будут заменены выражениями

константы ето уже неизменяемыпе переменые
обычно строки для вывода на индикактор типа
const или flash char someshit[]="aaa";

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


логический не - обычный восклицательный знак

740. КРОКОДИЛ, 18.05.2007 01:50
K_AV
Так ничего и непонял в даташите -непомог даже переводчик -вобщем вроде понятно а конкретно применительно к делу -темный лес! Зато програма joptpd и калькулятор очень помогли -появились первые проблески

Добавление от 18.05.2007 02:04:

joptpd
Шикарная программа!!! Подкинул бы ты ее на месячишку раньше..............
логический не - обычный восклицательный знак
Это хорошо!
| такой?
Да такой, нашёл уже, заодно пока искал понаходил много новых для себя функций на клавиатуре!

Добавление от 18.05.2007 03:41:

Dikoy
Вот что мне удалось посчитать с помощью программы: считал для кварца 4,5 мгц шаг 12,5 кгц и выходная частота 470мгц. - для регистра R она дает значение 5А0 тоесть 1440 далее делим на четыре и получается наш коофицент деления для кварца =360.....Для регистра N она дает значение 134В81 -здесь немного сложней с первого взгляда ета цифра ни вкакие рамки не влазиет но если её преобразовать в двоичное число и отбросить два старших бита(до1000мгц не изменяются) а потом отбросить еще два младших бита(судя по всему служебные) то получится какраз нужный коофицент деления =37600 обеспечивающий частоту 470мгц при заданом шаге! К сожалению значение регистра F = Е82 не поддается никакому математическому анализу, но и неизменяется при смене частот, следовательно его можно забить как константу и втупую передавать в синтезатор также как и значение регистра R которое тоже нибудет никогда изменятся. А вот с регистром N я даже незнаю что делать - наверно придется делитель частоты вытащенный из еепрома умножать на 4 потом както приклеивать к нему два старших бита и инкрементировать потому что самый младший бит был единичкой. Ну с умножением все понятно, с инкрементом тоже, а вот как приклеить два старших бита??? пока не соображу! Или просто перемножить на чегонибудь???

Добавление от 18.05.2007 03:46:

Кажется добавить нужно 0х100000 -правильно я соображаю или нет?

741. joptpd, 18.05.2007 11:18
у тебя длина должна быть 21 бит
не больше и не меньше
только тебе надо все равно будет переменую в 32 бита т.е. 4 байта long int (3 байтных не бывает если мне не изменяет память)
но цикл фор должен быть от 0 до 20

если тебе надо выставить какие то биты в 1 то делай так
например твоя переменая freq и она 32 бита длиной
причем тольк 21 бит из них полезный

приклеиваем старшие биты (они слева и обозначены msb)
сначала создадим маску

00000000 00011000 00000000 00000000 оно же 0х00180000
потом делаеш так
freq|=0х00180000;

теперь возьми калькулятор и попробуй сделать тоже самое при помощи сдвига влево или вправо
в калькуляторе есть функция OR

могу посоветовать еще один калькулятор http://www.hexelon.com/kalkulator/index_en.php

в настройках ты можеш утащить ненужные кнопки с него
и поставить нужные тебе типа hex bin or xor и все такое
например пишеш bin(00011000) а он тебе показывает либо в десятичном либо в хексе

вверху справа выбери нужную тебе систему счисления

и еще
много производителей вссяких компонентов предлогают софт который может тебе посчитать все необходимые детали
предложить готовые схемы
сгенерировать начальный код или наборы даных

742. Dikoy, 18.05.2007 11:43
КРОКОДИЛ
Так а как тогда обращатся к вполне конкретной ячейке к 5 например если она непронумерована?
Она не не пронумерована, в ней нет начального значения. Т.к. ты их туда будешь писать, в принципе, тебе пофиг. Ну сделай, конечно, правильно, как соня советовал, но на работу это не должно сказаться.
Массив, это в принципе пронумерованная структура. Считай, таблица. Бывает одномерный (в одну строку) или двумерный (таблица). Пользуешь какой удобней.

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

это обычнй восклицательный знак на клавиатуре?
Ага.

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

Добавление от 18.05.2007 12:11:

КРОКОДИЛ
и получается наш коофицент деления для кварца =360
Ты вручную то же самое насчитал?

Для регистра N она дает значение 134В81 -здесь немного сложней с первого взгляда ета цифра ни вкакие рамки не влазиет
Это 3 байта в HEX виде.
100110100101110000001 - 21 бит. Полная посылка. Включая адрес регистра N (10) в заголовке.

с умножением все понятно, с инкрементом тоже, а вот как приклеить два старших бита???
Можно просто сдвинуть в числе биты на два шага. Например, так:
X=(Y << 2); //иксу присвоить значение Y сдвинутое влево на 2 бита
X=(Z >> 6); //...сдвинутое вправо на 6 бит

Вот пример "равномерного размазывания" 12 бит по двум байтам. То есть по 6 битв байте:

код:

// читать старший байт с помощью SPI

spiH=spi(0); // [0][0][0][0][D11][D10][D9][D8]

// читать младший байт с помощью SPI

spiL=spi(0); // [D7][D6][D5][D4][D3][D2][D1][D0]

//Как видно, в первом байте всего 4 значащих бита, а во втором их 8.
//Размазываем по 6 бит в байте:
byteoutL = (spiL & 0x3F); // [0][0][D5][D4][D3][D2][D1][D0]
byteoutH = ((spiH & 0x0F) << 2) | (spiL >> 6); // [0][0][D11][D10][D9][D8][D7][D6]
byteoutH |= 0x80; //Добавление старшего байта, равного единице: [1][0][D11][D10][D9][D8][D7][D6]

Добавление от 18.05.2007 12:13:

КРОКОДИЛ
Во!
Можешь просто считать этим калькулятором значения регистра N для своих частот и прям так их забивать в МК. А в МК пользовать их втупую, ничего не преобразовывая.

Добавление от 18.05.2007 12:24:

То есть, посчитал в калькуляторе значение. например, 134В81. Вставил в виндозий калькулятор, преобразовал к десятичному 1264513. Вставил в мою прогу, залил в МК. В МК создаёшь массив не лонг-инт на 16 элементов, а char на 48 элементов. То есть записываешь в память не склееные, а раскрошеный по 8 бит значения. А потом знай только, давай каждый три значения массива сониной функции:

data_hi = koefp[0];
data_mid = koefp[1];
data_low = koefp[2];

Для второго канала:

data_hi = koefp[3];
data_mid = koefp[4];
data_low = koefp[5];

И так далее.
Решение в лоб, зато времени потратишь заметно меньше.

743. K_AV, 18.05.2007 13:14
КРОКОДИЛ
Как же ты синтезатор применять собираешься, если его описание непонятно...
Что конкретно в даташите не понятно? Просто переводить сплошь все 19 страниц (ладно, 12 - если отбросить электрические характеристики и корпусирование) - многовато получится. Лучше - конкретные места смотреть (а может, и не в непонимании перевода вопрос?).

744. КРОКОДИЛ, 18.05.2007 13:28
joptpd
могу посоветовать еще один калькулятор http://www.hexelon.com/kalkulator/index_en.php
Спасибо -скачаю.
Dikoy
Ты вручную то же самое насчитал?
Ну конечно а какже иначе?
Вот пример "равномерного размазывания" 12 бит по двум байтам. То есть по 6 битв байте:
Щас пытаюсь все это переварить!

Добавление от 18.05.2007 13:35:

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



joptpd

приклеиваем старшие биты (они слева и обозначены msb)
сначала создадим маску

00000000 00011000 00000000 00000000 оно же 0х00180000
потом делаеш так
freq|=0х00180000;

Блин, сбиваешь меня с толку! -целый день сидел пересчитывал и нифига неполучилось, правильно я же изначально посчитал что нужно было прибавить 0х100000, или можно так (37600*4 | 0x100000) +1 какраз получается нужная комбинация битов - 124В81, можешь пересчитать, 37600 -это делитель выданный програмой для частоты 470мгц, откуда ты взял эту маску - 0х00180000??? -наверно опять с чехословацкого синтезатора Я две пачки сигарет скурил пока вьехал в чем дело!

745. КРОКОДИЛ, 19.05.2007 08:01
Dikoy
Вот пример "равномерного размазывания" 12 бит по двум байтам. То есть по 6 битв байте:
Ничё не понял! -пиШешь для меня как для програмиста с двадцатилетним стажем Незабывай что я полный Вот написал буфер
void data_bufferiz (void){
unsigned long int data_hi, data_mid, data_low;
unsigned int REGR=360; //переменная на 32 бита ДЛЯ ПРЕДДЕЛИТЕЛЯ КВАРЦА ШАГ 12,5КГЦ
BUFFER = 0 ; //обнуляем буфер
BUFFER =(REGR*4) ; // =1440 ИЛИ сдвиг на два бита
data_lov = BUFFER ; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid = (BUFFER >> 8); //СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16); СДВИГ НА 16БИТ
unsigned int REGN = QQ; //ПЕРЕМЕННАЯ 32 БИТА
BUFFER = 0 ; //обнуляем буфер
BUFFER = ((REGN*4 | 0x100000)+1); // умножаем на 4 и добавляем маску
data_lov = BUFFER ; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid =(BUFFER >> 8); //СДВИГ НА 8 БИТ
unsigned int REGF = 928; // ПЕРЕДАЧА СЛУЖЕБНЫХ БИТОВ
BUFFER = 0 ; //обнуляем буфер
BUFFER = (REGF*4+2)//=3714 ИЛИ СДВИГ НА ДВА БИТА
data_lov = BUFFER ;
data_mid = (BUFFER >> 8);//СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16);СДВИГ НА 16БИТ
QQ -это неизвестный делитель частоты которая придет потом с уарта. Посмотри все ли там правильно, особено мне непонятно насчет сдвигов больших чисел в регистре N - ничего там не запутается? - вобщем посмотри внимательно, а еще не могу сообразить как состыковать этот буфер с сониной функцией???

Добавление от 19.05.2007 08:16:

Щас персчитал лучше вот так сделать :BUFFER = (REGN*4 | 0x100001);

746. Dikoy, 19.05.2007 18:07
КРОКОДИЛ
Ничё не понял!
Там же нарисовано, как меняется структура байт в квадратных скобочках

byteoutL = (spiL & 0x3F); // [0][0][D5][D4][D3][D2][D1][D0]
Операция И с числом 0x3F очищает старшие два бита (делает их нулями) причём результат копируется в переменную byteoutL, а spiL не меняется. Если мы хотим, чтобы результат остался в spiL, то, логично, пишем:
spiL = (spiL & 0x3F);
Или, ещё проще: spiL &= 0x3F;

byteoutH |= 0x80;
Логическое ИЛИ переменной byteoutH с числом 0x80. Эквивалентно записи
byteoutH = byteoutH | 0x80;
Делает старший бит единицей. Такое же "или" с упоминавшемся 0x3F сделает оба старших бита единицами и т.д.

byteoutH = ((spiH & 0x0F) << 2) | (spiL >> 6); // [0][0][D11][D10][D9][D8][D7][D6]
Результат логического И переменной spiH с числом 0x0F, сдвинутый на два бита влево осуществляет логическое ИЛИ с результатом сдвига spiL вправо на 6 бит. Результат присваивается byteoutH.

Вот и вся любоффь. (с)

Вот написал буфер
Ужос
Сначала пробовал вылелять исправления, потом надоело...

код:

void data_bufferiz (void){
unsigned char data_hi, data_mid, data_low; //переменные ДОЛЖНЫ быть по 8 бит!!!!! Прочитай типы данных наконец!!!!
unsigned long int REGR=360; //переменная на 32 бита ДЛЯ ПРЕДДЕЛИТЕЛЯ КВАРЦА ШАГ 12,5КГЦ
BUFFER = 0 ; //обнуляем буфер
BUFFER =(REGR*4) ; // =1440 ИЛИ сдвиг на два бита
data_low = BUFFER ; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid = (BUFFER >> 8); //СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16); СДВИГ НА 16БИТ

/*А далее у тебя ещё два раза перепризваиваются переменные и ничего не происходит.
Сюда внедряем сонину функцию. */

data_to_synt ();

/*И всё! Т.к. переменные data_hi, data_mid и data_low ГЛОБАЛЬНЫЕ,
то доступны оеи в любом месте программы и в любой функции.
ЛОКАЛЬНЫЕ переменные доступны только в функции, где их объявили.
То есть такая же по названию переменная в другой функции - это уже другая переменная. */

unsigned long int REGN = QQ; //ПЕРЕМЕННАЯ 32 БИТА
BUFFER = 0 ; //обнуляем буфер
BUFFER = (((REGN*4) | 0x100000)+1); // умножаем на 4 и добавляем маску

/*Отделяй логические операции от математических скобками.
Действительно, тут правильней REGN*4 | 0x100001 */

data_low = BUFFER ; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid =(BUFFER >> 8); //СДВИГ НА 8 БИТ

/*А больше сдвигать разьве не надо? Тогда присвой лишним переменным нули (data_hi например),
а то в синтезатор пойдут предыдущие их значения*/
data_to_synt ();


unsigned long int REGF = 928; // ПЕРЕДАЧА СЛУЖЕБНЫХ БИТОВ
BUFFER = 0 ; //обнуляем буфер
BUFFER = (REGF*4+2); //=3714 ИЛИ СДВИГ НА ДВА БИТА
data_low = BUFFER ;
data_mid = (BUFFER >> 8);//СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16);СДВИГ НА 16БИТ

//Опять же, не обнулил неиспользуемые переменные data_***

data_to_synt ();

Добавление от 19.05.2007 18:09:

С выделениями

void data_bufferiz (void){
unsigned char data_hi, data_mid, data_low; //переменные ДОЛЖНЫ быть по 8 бит!!!!! Прочитай типы данных наконец!!!!
unsigned long int REGR=360; //переменная на 32 бита ДЛЯ ПРЕДДЕЛИТЕЛЯ КВАРЦА ШАГ 12,5КГЦ
BUFFER = 0 ; //обнуляем буфер
BUFFER =(REGR*4) ; // =1440 ИЛИ сдвиг на два бита
data_low = BUFFER ; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid = (BUFFER >> 8); //СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16); СДВИГ НА 16БИТ

/*А далее у тебя ещё два раза перепризваиваются переменные и ничего не происходит.
Сюда внедряем сонину функцию. */

data_to_synt ();

/*И всё! Т.к. переменные data_hi, data_mid и data_low ГЛОБАЛЬНЫЕ,
то доступны оеи в любом месте программы и в любой функции.
ЛОКАЛЬНЫЕ переменные доступны только в функции, где их объявили.
То есть такая же по названию переменная в другой функции - это уже другая переменная. */

unsigned long int REGN = QQ; //ПЕРЕМЕННАЯ 32 БИТА
BUFFER = 0 ; //обнуляем буфер
BUFFER = (((REGN*4) | 0x100000)+1); // умножаем на 4 и добавляем маску

/*Отделяй логические операции от математических скобками.
Действительно, тут правильней REGN*4 | 0x100001 */

data_low = BUFFER ; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid =(BUFFER >> 8); //СДВИГ НА 8 БИТ

/*А больше сдвигать разьве не надо? Тогда присвой лишним переменным нули (data_hi например),
а то в синтезатор пойдут предыдущие их значения*/
data_to_synt ();


unsigned long int REGF = 928; // ПЕРЕДАЧА СЛУЖЕБНЫХ БИТОВ
BUFFER = 0 ; //обнуляем буфер
BUFFER = (REGF*4+2); //=3714 ИЛИ СДВИГ НА ДВА БИТА
data_low = BUFFER ;
data_mid = (BUFFER >> 8);//СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16);СДВИГ НА 16БИТ

//Опять же, не обнулил неиспользуемые переменные data_***

data_to_synt ();

747. Apex_t, 19.05.2007 19:11
joptpd

^ означает xor
есть был 0 то станет 1
если был 1 то станет 0


Нет конечно.


КРОКОДИЛ
5-разрядный счетчик SWALLOW
Да у меня промт перевел ЛАСТОЧКА а в скобках глотать


И в задаче 12 не сказано про 5-ти битный счетчик по-русски...

Вот облом-то !


Dikoy
Такое же "или" с упоминавшемся 0x3F сделает оба старших бита единицами

Нет конечно.

748. КРОКОДИЛ, 19.05.2007 19:30
Dikoy
переменные ДОЛЖНЫ быть по 8 бит!!!!!
Так а как записать что они по 8 бит? /*А больше сдвигать разьве не надо? - просто строчка data_hi = (BUFFER >> 16); при копировании потерялась
/*А далее у тебя ещё два раза перепризваиваются переменные и ничего не происходит.
A что должно происходить? Обьясни же хотябы.
Опять же, не обнулил неиспользуемые переменные data_***
А как их обнулять? -просто все по очереди приравнять к нулю типа data_low = 0; а дальше уже писать data_low = BUFFER ;
Сюда внедряем сонину функцию. */

data_to_synt ();

Так что просто дописать ее в конце буфера и все? Не с такими успехами я эту програму буду писать лет 20~30!

Добавление от 19.05.2007 19:36:

Apex_t
Вот облом-то !
А то! Так в даташите же ничего про твою 12 страницу ненаписано! -почему -непорядок!

749. Dikoy, 19.05.2007 19:53
Apex_t
Такое же "или" с упоминавшемся 0x3F сделает оба старших бита единицами
Нет конечно.

Тьфу, блин, ошибся. ИЛИ с числом 0хC0. А ты, как всегда, многословен!

КРОКОДИЛ
Так а как записать что они по 8 бит?
Так посмотри типы переменыых! char - это и есть переменная 8 бит.
int - 16 bit.
long int - 32 бита.
unsigned означает, что переменаая беззнаковая, то есть может быть только положительной. для char это десятичные значения 0..255.
Если написать signed, то переменная станет знаковой. При этом её диапазон уменьшится вдвое, т.к. старший бит отводится на знак. Для char диапазон станет -127...+128 (127 по тому, что ещё есть ноль).

А как их обнулять? -просто все по очереди приравнять к нулю типа data_low = 0; а дальше уже писать
Да, т.к. при этом ты очищаешь их от предыдущих значений.

Так что просто дописать ее в конце буфера и все?
На то она и функция, чтобы написать её один раз в начале программы, а потом тыкать куда хош
Обычно в виде функций оформляют наборы часто используемых действий, чтобы не копировать их 100 раз по всей программе. Кстати, в CVAVR это даже приводит к уменьшению объёма кода.

с такими успехами я эту програму буду писать лет 20~30!
Ничё, тяжело в учении...

КРОКОДИЛ
Так в даташите же ничего про твою 12 страницу ненаписано! -почему -непорядок!
Ить циц! Не подскаживай человеку новое поле боя! Побереги нежных буржуев!

750. КРОКОДИЛ, 19.05.2007 20:04
Dikoy
с такими успехами я эту програму буду писать лет 20~30!
Ничё, тяжело в учении...

Тока она к тому времени мне уже не понадобится .......

Добавление от 19.05.2007 20:11:

Dikoy
Побереги нежных буржуев!
Чё их беречь то! - за то что английский язык выдумали? -повбывав бы гадив! -из рогатки зелёной сливой прям в лоб!

751. Dikoy, 19.05.2007 20:27
КРОКОДИЛ
Тока она к тому времени мне уже не понадобится .......
Да ты уже стелал всё. Тебе рабуты на 2 дня осталось с перекурами...
Я ж говорил - если так сложно вкурить, как считать содержания регистров, тупо загоняй в МК результаты из калькулятора. И нехай пашет

752. КРОКОДИЛ, 19.05.2007 22:28
Dikoy
Да ты уже стелал всё. Тебе рабуты на 2 дня осталось с перекурами...
Я ж говорил - если так сложно вкурить, как считать содержания регистров, тупо загоняй в МК результаты из калькулятора. И нехай пашет

Так с регистрами разобрался уже, еще переключатель писать- непредставляю даже как , еепром, и нужно еще сделать чтобы на передау была одна частота а на прием другая, а USART - вообще темный лес и врядли я смогу склеить это все вместе! -запутаюсь в скобках и всяких while

753. Dikoy, 20.05.2007 00:18
КРОКОДИЛ
еще переключатель писать- непредставляю даже как
Опрашиваешь лапки порта на предмет появления единички. Чтобы отличать, новое это значение или старое, заводишь переменную, где хранишь значение последнего выбранного канала.
Найдя на лапе "1" (или ноль, не суть), проверяешь, изменённое это значение или старое. если старое, идёшь дальше, новое - для подавления дребезга или ожидания, пока юзер провернёт ручку дальше, ждёшь милисекунд 50, снова проверяешь лапу, если она по прежнему в том же уровне, значит ОНО!
Бугага!
Перезаливаем синтезатор
Можно и проще - если у тебя переключатель на одном порту, считывать этот порт целиком и смотреть, какая там цифра. Будут значения кратные двойке, типа 1, 2, 4, 8 и т.д. Главное знать, какое значение какому контакту соответствует - это уже по твоей схеме видно.

Еепром тебе уже расписали - обычные переменные, только в епром. Чё непонятного то?
Как только купишь книжку и прочитаешь страничку про массивы, станет всё понятно.
Например, первая ссылка в гугле:
http://www.opennet.ru/docs/RUS/bogatyrev/gl_2.html
Вторая ссылка, но по двумерным массивам:
http://ipg.h1.ru/lessons/ci/les53.html

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

а USART - вообще темный лес
Ну ты себя и напугал Спишь теперь с фонариком?
Тебе же визард уже все функции UART нагенерил. Знай только, пользуй.
Завтра подробней попробую написать. Сейчас спать...

Добавление от 20.05.2007 00:25:

Вот, вообще по твоей задаче:
http://ipg.h1.ru/lessons/ci/les41.html
http://webdocs.ru/content-137.html

Ну неужели так сложно самому залезть в гугль?

Добавление от 20.05.2007 00:28:

Только на типы данных не очень смотри (char, int, float и т.д.), бо странички писаны для Си для компьютера, а в этом Си типы другие, хоть и называются также, нежели в AVR С. В остальном информация правильная и синтаксис массива в коде-вижне будет таким-же.

754. Apex_t, 20.05.2007 00:47
Dikoy
неужели так сложно самому залезть в гугль?

Этож САМОМУ надо лезть... конечно трудно. Всегда найдутся добрые люди и дадут готовое.

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

И страница "Си для МК AVR" не досягаема ... Беда.

755. Dikoy, 20.05.2007 00:58
Apex_t
И чего ты предлагаешь? Кинуть земноводное? Думаешь это что-нибудь изменит и он полезет по гуглям?
Хорошо хоть так начал разбираться, глядишь, ещё пару недель и допишет
Вообще, начинающие часто не умеют пользоваться поисками (надо же знать, что ишешь). Да и начать с нуля непонятную тему, да ещё вдолбив себе, что это сложно, не просто...

756. КРОКОДИЛ, 20.05.2007 03:11
Apex_t
И страница "Си для МК AVR" не досягаема ... Беда.
Ты хоть сам то его его читаешь? -хоть иногда?
a=4; 
b=7; a = b++; /* Эта строчка на Си означает
Взять значение переменной b присвоить его переменно a затем добавить 1 к переменной b
и сохранить результат в b

Эта сколько ж надо водки сожрать чтоб такое понять???

757. psnsergey, 20.05.2007 08:30
КРОКОДИЛ
Эта сколько ж надо водки сожрать чтоб такое понять???
А что сложного? если написано b++, то переменная и инкрементируется на 1 ПОСЛЕ вычисления выражения справа от знака равенства и присвоения переменной слева от сего знака. Т.е. будет потом a==7, а b==8. Если бы было написано
a = ++b;
то в обоих было бы по 8.

СИ учи СНАЧАЛА. Выдели неделю и учи ТОЛЬКО СИ. Не сразу Москва строилась.

758. КРОКОДИЛ, 20.05.2007 12:15
psnsergey

КРОКОДИЛ
Взять значение переменной b присвоить его переменно
A это как понять??? Чтото я в Си ненашел ниичего про переменное присваивание

759. Apex_t, 20.05.2007 12:17
КРОКОДИЛ
Apex_t
И страница "Си для МК AVR" не досягаема ... Беда.

Ты хоть сам то его его читаешь? -хоть иногда?


Я это знаю, а узнал из книг.

КРОКОДИЛ
Эта сколько ж надо водки сожрать чтоб такое понять???

Водка не поможет наверняка.

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

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

Так в курсе и советуется.

А эти операции описаны чтоб читатель мог понять их в
стретив в примерах других программистов.

760. Dikoy, 20.05.2007 13:50
КРОКОДИЛ
Кстати, кнопу передача/приём подключи лучше к одному из прерываний. Например, INT1 (PD3). Так будет лучше, т.к. позволит в будущем переключаться по прерыванию.


Короче про UART. Визард тебе должен был нагенерить такую настройку

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 4800
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x3A;

В ДШ нарисованы две функии (их в твоей проге нужно объявить до мейн, есно):
код:

void USART_Transmit( unsigned char data )
{
/* Ждать очистки (готовности) выходного буфера.
То есть программа крутится тут, пока UART не станет готов к передаче нового байта*/
while ( !( UCSRA & (1<<UDRE)) );
/* Поместить данные в выходной буфер и передать: */
UDR = data;
}


И всё! Чтобы передать данные просто пишешь:
USART_Transmit( твоя_переменная_типа_char );

Например, хочешь слить в UART свою епром. Тебе нужен цикл, кторый будет отправлять в порт каждый раз новый элемент массива.
И того:
Объявляем переменные (массив уже объявлен и забит в епроме).
код:

/*переменная-счётчик. Будет увеличиваться на 1 при каждом прохождении цикла.
Сразу обнуляем. Хоть это и не очень нужно в данном случае, но пусть будет*/
unsigned char i=0;
for (i=0; i<48; i++) //цикл от 0 до 48 с увеличением i на 1 за проход
{
USART_Transmit( koefp[i] );
}

И всё! В UART будут передаваться элементы массива с индексами i, а i, как мы уже выяснили, будет увеличиваться на 1 при каждом проходе цикла. То есть цикл последовательно сгрузит в UАRT весь массив из епрома.

Теперь про приём. В той же ДШ есть функция приёма:
код:

unsigned char USART_Receive( void )
{
/* Ждём, пока данные придут */
while ( !(UCSRA & (1<<RXC)) )
;
/* Вернуть данные наружу функции */
return UDR;
}


Применяем так:
твоя_переменная_типа_char = USART_Receive();

Одна тонкость - программа будет сидеть тут иждать, пока не придёт данные. Т.к. цикл while крутится, пока верно выражение в его скобках. А там ясно написано: крутиться тут пока данные НЕ пришли (восклицательный знак видим?).

Чтобы этого избежать, делаем проверку IF - ом, т.к. if проверяет только один раз, и если выражение не верно, идёт дальше.
То есть, пишем:
код:

if ( (UCSRA & (1<<RXC)) )
{
//вот сюда попадаем, когда данные пришли в буфер и что-то тут делаем
}

Эта строчка проверяет флажки UARTа именно на предмет ПРИХОДА данных (заметь, восклицательного знака уже нету) и если они пришли, заходим в if и уже там можем что-то принимать функцией USART_Receive(). То есть, если выражение в скобках ИСТИНА, то есть логическая 1 полученаая из логического И бита UCSRA и единички, то есть, грубо говоря, если бит UCSRA (а это флажок прихода данных) установлен.
Например, стоит поначалу, проверить, что пришло - запрос на чтение или запись (смотрим ман к моей проге), отвечаем программе соответственно, а далее уже известным нам способом - в цикле - либо читаем, либо пишем епром


Чтобы все эти функции заработали надо скачать и подключить сонину беблиотеку заголовков m8_128.h с его сайта, т.к. там прописаны абревиатуры для всех битов, которые используются в функциях. Подключать как любой хидер: #include <m8_128.h>

761. Apex_t, 20.05.2007 14:15
Dikoy
Чтобы все эти функции заработали надо скачать и подключить сонину беблиотеку заголовков m8_128.h с его сайта, т.к. там прописаны абревиатуры для всех битов, которые используются в функциях. Подключать как любой хидер: #include <m8_128.h>

Только у него то не МЕГА !!! А мой хидер для мег с 8 до 128 !

Зачем придумывать УЖЕ существующие в CVAVR функции ???

// Standard Input/Output functions
#include <stdio.h>

putchar('R'); // отправить символ R

putchar(temp); // отправить содержимое переменной temp

temp = getchar(); // принять символ в переменную temp

пример - proavr.narod.ru/z5.htm - там и буфер есть.

Добавление от 20.05.2007 14:17:

Dikoy
// USART Baud rate: 4800

Я советую приписывать частоту тактирования для которой сделана настройка.

// USART Baud rate: 4800 при частоте 4500000

762. psnsergey, 20.05.2007 14:19
КРОКОДИЛ
Взять значение переменной b присвоить его переменно
A это как понять???

По некому адресу в памяти (компилятор о нём знает, а для тебя это переменная b) сидит число; команда процессора берёт это число в регистр и пересылает оттуда по адресу в той же памяти (ОЗУ), в котором находилось (переписываемое сейчас "поверх") число, обозначаемое переменная a. Потом процессор берёт регистр, инкрементирует и пересылает обратно по адресу переменной b.

763. Dikoy, 20.05.2007 14:51
Apex_t
Зачем придумывать УЖЕ существующие в CVAVR функции ???
Затем, что:
Dikoy
Одна тонкость - программа будет сидеть тут иждать, пока не придёт данные.
Да и понятней ему так.

Только у него то не МЕГА !!! А мой хидер для мег с 8 до 128 !
Тюфу блин! Запутали вы меня оба У одного мега, у другого тинька...

764. КРОКОДИЛ, 20.05.2007 16:15
Dikoy
Кстати, кнопу передача/приём подключи лучше к одному из прерываний. Например, INT1 (PD3).
Дык в как эту кнопку приписать к програме и выделить ей свои ячейки еепрома?
У одного мега, у другого тинька...
Так а чё теперь делать?
твоя_переменная_типа_char = USART_Receive();
Какая именно переменная? А что писать в сони/сониной функции там где у него тэстовые значение написанны? -что вместо них? -Не так не пойдеть! -Запутали меня окончательно! Давай по порядку - во всем должен быть порядок -а то у меня в голове все свалено в одну кучу! К вечеру попробую написать исходник и выложу а тогда прокоментируешь.Ты ж незабывай что у меня вообще нет опыта в написании програм тем более еще с таким количеством циклов!

Добавление от 20.05.2007 16:19:

КРОКОДИЛ
Кстати, кнопу передача/приём подключи лучше к одному из прерываний. Например
И кроме того к этой кнопке еще будут подключены с десяток ключей в трансивере.

765. Dikoy, 20.05.2007 19:23
КРОКОДИЛ
Дык в как эту кнопку приписать к програме и выделить ей свои ячейки еепрома?
А нафига ей ячейка епрома? По её нажатию трансивер переключается приём/передача, так? То есть, тебе нужно быстренько отработать нажатие и залить регистр трансивера. Вот для этого и нужно прерывание. В принципе, можно и без прерывания, но лучше такую возможность предусмотреть.

А переключателю пофиг. Никто ведь не умрёт, если девайс среагирует на переключение не мгновенно, а через 10 мС
Тем более дребезг надо ещё подавить, то есть задержку ввести.

Какая именно переменная?
ДА ЛЮБАЯ! Хучь элемент массива с выбраным индексом, хучь какая-нить переменная а-ля temp. Не суть. Но фишка в том, что если ты не считаешь UART быстро, то следующее значение затрёт предыдущее. По этому его надо читать сразу по приходу данных.

Так а чё теперь делать?
Да ничего, посмотреть номера битов в регистрах в ДШ, задефайнить их с названиями в функциях и не париться.

А что писать в сони/сониной функции там где у него тэстовые значение написанны? -что вместо них?
Сначала ответь на вопрос - ЗАЧЕМ ты собрался их писать, а потом станет ясно, как.

У тебя два режима работы девайса - загрузка/считывание данных и нормальная работа. Когда ты работаешь, зачем что-то заливать или считывать по UART? У тебя же уже есть проверка if ( (UCSRA & (1<<RXC)) ) которую достаточно делать один раз за проход программы и она не отмимает много времени. И всё! Пока в UART ничего не пришло, твой синтезатор просто работает. А как придёт, так ему переключатель с кнопкой станет пофиг. Наконец, можешь сделать на плате джампер на любой лапе, на землю, проверять его один раз при включении питания - если джампер подключён, входишь в режим программирования (то есть заливки/считывания частот). Если жумпера нет (а ведь ты включишь подтяжку на той лапе и на ней будет устойчивый "1") работаешь как обычно.
Просто надо чуток подумать...

Добавление от 20.05.2007 19:33:

КРОКОДИЛ
И это, схему опубликуй, а то трудно так вот понять что там у тебя...
И совет, как человека, проектировавшего много железок для авто на АВР - ОБЯЗАТЕЛЬНО RC цепь на ресете (10к + 0,1 мкФ) , на каждый контакт переключателя, кнопок и т.д. тоже RC. В принципе, в качестве R можно использовать подтяжку МК, хотя я бы таки всунул резюк килоом на 20... И кондёр на 0,1 ... 0,01 на землю. А то были случаи, что после установки свечей без резистора в бесконтактном зажигании, АВР сбешивался... Любит он на входы помехи ловить.
Вот, посмотри как пример: http://dikoy44.narod.ru/projects/BK_VAZ.htm
Ну и БП с возможностью выдерживать напряжени до 80 вольт. Проще всего поставить какую-нибудь 7805 хорошей фирмы, типа ST, она до 35 вольт по входу выдерживает, а до неё всунуть какой нибудь КТ817Г (аналог - BD237), который до 80-100 вольт держит, и в купе с резюком и стабилитрончиком вольт на 27 собрать параметрический стабилизатор, чтобы открывался до насыщения при напряжениях ниже 27 вольт, но отрабатывал броски выше 27 вольт. Тогда даже если юзер сдёрнет клемму с аккума на работающем двиге, ничего не погорит.

Добавление от 20.05.2007 19:34:

Причём этот стабилизатор на транзисторе нужен даже если ты импульсный БП делаешь.

766. -=mozg=-, 21.05.2007 02:12
Приветствую!
Четвёртвй час бьюсь над проблемой: не запускается кварц ОСРГ-06 на 1024 кГц на восьмой меге. Кварц висит на TOSC1/TOSC2, соответственно должен тактировать второй таймер-счётчик.

Вообще он нужен для прерываний с частотой 100 гц (точность нужна - секунды считаются).

// Timer/Counter 2 initialization
// Clock source: TOSC1 pin
// Clock value: PCK2/1024
// Mode: CTC top=OCR2
// OC2 output: Disconnected
ASSR=0x08;
TCCR2=0x0F;
TCNT2=0x00;
OCR2=0x64;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x80;
В теории - должен делить частоту на 1024, и затем считать её до срабатывания компаратора на 100.
Не считает. Совсем. Прерываний нет.

Попробовал выставить делитель 2 и вставил в процедуру прерываний мигалку (светодиодом). Попробовал через резистор позамыкать ногу кварца с питанием/землёй - работает. Если палец прижать - очень хорошо работает.
Попробовал с фьюзами поиграться. Не помогло, только установка CKOPT в 0 делает схему нечувствительной к пальцу.

Конечно, есть подозрение что кварц от старости йок (15 лет ему почти) - но покупал непользованный, не с разборки. Судя по тому, как его долго искали - последний.

Вразумительных объяснений почему не взял часовой кварц - не имею. Но в запасах его нет, магазины закрыты.

767. КРОКОДИЛ, 21.05.2007 02:44
Dikoy
А нафига ей ячейка епрома?
Так я ж уже обяснял -приемник и передатчик используют разную частоту -соответственно нужно в еепроме делать две группы ячеек и както их переключать -или как?
Ну и БП с возможностью выдерживать напряжени до 80 вольт. Проще всего поставить какую-нибудь 7805 хорошей фирмы, типа ST, она до 35 вольт по входу выдерживает, а до неё всунуть какой нибудь КТ817Г (аналог - BD237),
Естественно! -так и проэктируется.
Сначала ответь на вопрос - ЗАЧЕМ ты собрался их писать, а потом станет ясно, как.
Ну так у него там всем датам циферьки приписаны чтоб на осцилографе красивше было -или просто удалить вcю группу?
И это, схему опубликуй, а то трудно так вот понять что там у тебя...
Так какая схема то? Три лапки от контроллера до синтезатора? -так я такое даже и нерисую никогда.У сони^2 все расписано и у меня в дефайнах.Восемь лапок порта B с подтяжкой на переключатель а ползунок переключателя на общий провод. Прием/передача тоже одна лапка порта D с подтяжкой через кнопку тоже на общий провод и все. Короче неполучается у меня нихрена с программой,даже то что уже готовое вместе слепить не могу

Добавление от 21.05.2007 03:06:

http://slil.ru/24396320 -вот вомпилятор 34 ошибки выдает и предупреждения еще толькоже!

768. Apex_t, 21.05.2007 15:25
КРОКОДИЛ
http://slil.ru/24396320 -вот вомпилятор 34 ошибки выдает

Похоже на строительсво дома без проекта и даже без эскизов. Гора стройматериалов издалека напоминающая дом.

769. K_AV, 21.05.2007 17:38
КРОКОДИЛ
"Так я ж уже обяснял -приемник и передатчик используют разную частоту -соответственно нужно в еепроме делать две группы ячеек и както их переключать -или как?"
Не обязательно. Можно всю работу строить от запомненных частот приема, а при переходе на передачу просто высчитывать частоту передачи из частоты приема, и грузить ее в синтезатор. У тебя же смещение частоты для передачи фиксированное.
Ну напиши ты алгоритм, что в каком порядке и при каких условиях должно в изделии происходить. Как обычно при разработке, многое можно сделать разными способами, и конкретный выбор зависит от "прочих условий". Не видя полной катрины, можно из стороны в сторону долго мотаться и переделывать уже сделанное "по вновь открывшимся обстоятельствам".

770. Dikoy, 21.05.2007 18:06
КРОКОДИЛ
Так я ж уже обяснял -приемник и передатчик используют разную частоту -соответственно нужно в еепроме делать две группы ячеек и както их переключать -или как?
В массиве элементы 1-3, это частота передачи 1 канала. 4-6, приёма 1 канала, 7-9 передачи второго канала и т.д.

Например, ты обнаружил изменение канала (переключатель переключили), считываешь из еапрома 3 переменных на передачу и 3 на приём во временные переменные (например), а далее мониторишь кнопу и по ажатию/отпусканию быстренько заливаешь в синтезатор соответствующие 3 переменные (ктороые и составят 21 бит посылки).

Так какая схема то? Три лапки от контроллера до синтезатора?
Звиняй, но от того, КАКИЕ лапки многое зависит. Работать будет по любому, но можно сделать так, чтобы работало лучше.

Восемь лапок порта B с подтяжкой на переключатель а ползунок переключателя на общий провод.
Ключевая фраза. Значит можно сразу читать весь порт, получится быстрее.

Добавление от 21.05.2007 18:20:

КРОКОДИЛ
Писетц а не программа

Добавление от 21.05.2007 18:23:

Вот пишешь тебе, всё объясняешь, тратишь своё время... А ты как нарочно ВСЁ делаешь наоборот!
Ну какого бабая ты в теле программы пишешь void USART_Transmit( unsigned char data ){/ , то есть ОБЪЯВЛЯЕШЬ функцию, когда я тебе ПО РУССКИ написал как пользоваться функциями UARTа!?!?

Добавление от 21.05.2007 18:24:

Блин, лучше я тебе сам её напишу. Иначе ты ещё два месяца будешь мозг клевать себе и людям.
Может, к вечеру успею, или завтра.

771. КРОКОДИЛ, 21.05.2007 18:54
Dikoy
Звиняй, но от того, КАКИЕ лапки многое зависит. Работать будет по любому, но можно сделать так, чтобы работало лучше.
Ну так как у сони^2 расписано так обычно и подключают.
Ну какого бабая ты в теле программы пишешь void USART_Transmit( unsigned char data ){/ , то есть ОБЪЯВЛЯЕШЬ функцию, когда я тебе ПО РУССКИ написал как пользоваться функциями UARTа!?!?
Ну так это кодевижен нагенерил! Я и слова то такого незнаю - Transmit

772. Apex_t, 21.05.2007 19:01
Dikoy
Блин, лучше я тебе сам её напишу.

Мир не без добрых людей. И это хорошо.

Добавление от 21.05.2007 19:02:

КРОКОДИЛ
Ну так это кодевижен нагенерил!

аЦтояная прога... Однозначно (жирик)

773. КРОКОДИЛ, 21.05.2007 19:18
Apex_t
аЦтояная прога... Однозначно
Блин -откуда ты все знаешь то?

Добавление от 21.05.2007 19:19:

Не иначе как шпиен! -мериканский!

Добавление от 21.05.2007 19:35:

K_AV
Не обязательно. Можно всю работу строить от запомненных частот приема, а при переходе на передачу просто высчитывать частоту передачи из частоты приема, и грузить ее в синтезатор. У тебя же смещение частоты для передачи фиксированное.
Так уже ПО для компьютера написано под две частоты.
можно из стороны в сторону долго мотаться и переделывать уже сделанное "по вновь открывшимся обстоятельствам".
Не, просто цель была сделать программу как можно проще,а получилось наоборот -совсем запутался А какие пересчеты внутри МК будут происходить особо на работе не отражается, лишь бы на выходе было то что нужно! В принципе я могу это все на рассыпных счетчиках за 2 часа соорудить, только вот больно громоздкая гравицапа получается А микросхем/синтезаторов с паралельным програмирование сейчас уже не найти

774. Xradio, 21.05.2007 23:33
-=mozg=-
Попробовал через резистор позамыкать ногу кварца с питанием/землёй - работает. Если палец прижать - очень хорошо работает.
Какие нагрузочные емкости навесил?

775. Dikoy, 22.05.2007 19:02
Apex_t
Мир не без добрых людей. И это хорошо.
Да задолбало просто! Я больше времени потрачу на объяснение того, что он всё равно не сделает, чем тупо взять и написать. Только времени пока нет... Придётся ждать.

776. Iwashka, 22.05.2007 19:15
Смотрю я эта тема прямо как Ленин - живее всех живых!!!
Есть у меня несколько отсканированных книжек по AVR. Все на русском. Есть даже с компактом и примерами.
Все вместе потянет наверное на 200 Мб.
Слить что-ли куда-нибудь или никому уже не надо?

777. КРОКОДИЛ, 22.05.2007 20:29
Iwashka
Все вместе потянет наверное на 200 Мб
Не, 200мегабайт я несмогу скачать, -еслиб чё нибудь конкретнее ближе к моей теме

778. joptpd, 22.05.2007 22:42
Iwashka
залей если не трудно rapidshare.com

779. -=mozg=-, 23.05.2007 00:27
Xradio
Какие нагрузочные емкости навесил?

15 пФ, ещё из школьных запасов. Керамические трубчатые, серые такие. Вроде КТ-1 зовутся, но могу ошибаться.

Да, под словом "работает" имел в виду что прерывания появились (само собой делитель - единица, OCR2 = 4. Иначе замучился бы вручную генерировать). 10 Герцами там и не пахло.
Положение пальца изменяло частоту в широких пределах.

780. КРОКОДИЛ, 23.05.2007 01:23
-=mozg=-
Положение пальца изменяло частоту в широких пределах
Ну так попробуй поставить любой другой кварц и посмотри что будет -похоже твоему пришел капут!

781. Pyku_He_oTTyda, 23.05.2007 19:03
Кстати, почему студия спотыкается на if в этой функции (не ругается, а останавливается, как будто точка останова повешена:

void send(void)
{
unsigned char n=0;
while(n<=7)
{
if(temp&(1<<n))
{LED=1;}
else
{LED=0;}
n++;
}
}

причем, если вместо temp пишу число, проходит без запинки
temp обьявлена как "unsigned char"

782. Apex_t, 23.05.2007 22:30
Опубликуй листинг Си-АСМ и проверь в VMLAB если возможно.

783. -=mozg=-, 23.05.2007 22:30
КРОКОДИЛ
Ну так попробуй поставить любой другой кварц и посмотри что будет -похоже твоему пришел капут!
Вряд ли. Новый он (был). Перегреть такую бандуру очень проблематично.

Заменил его на стандартный 32,768 кГц (ноунейм какой-то, из всей маркировки только буква L перед частотой), подкорректировал таймер. Вроде работает (без емкостей).

В общем, как будет не лень - попробую навесить по стандартной схеме на 155ЛА3 и потестить. Слишком уж у него частота хорошая.

К сообщению приложены файлы: 1.jpg

784. DrAG0n, 23.05.2007 22:32
Переставил я студию - в новой почему-то когда щелкаешь по сообщению об ошибке с указанием строки - на эту строку оно не переходит... Может, что настроить надо?

785. Pyku_He_oTTyda, 23.05.2007 23:36
Apex_t
Завтра, счас с другим куском ковыряюсь, да и спать пора
В VMLAB никак, устройство отвечает на последовательность импульсов, как ее в вмлабе смоделировать - незнаю

786. joptpd, 24.05.2007 00:18
запощу сюда а то лень тему ту искать
http://palmavr.sourceforge.net/cgi-bin/fc.cgi

калькулятор фьюзов для авр на базе атмеловских хмл файлов

787. КРОКОДИЛ, 24.05.2007 01:30
-=mozg=-
Вряд ли. Новый он (был). Перегреть такую бандуру очень проблематично.
Кварцы со временем теряют активность, -речь идет о больших промежутках времени,и очень не любят механических воздействий -тоесть их нельзя бросать на пол!

Добавление от 24.05.2007 01:56:

Apex_t
Вот смотри в твоей функции загрузка данных начинается с data_hi и заканчивается data_low

код:
/* Цикл вывода data_hi начиная с бита_7 (Это 21-й 
бит - самый старший - MSB). Будем делать 8 раз
каждый раз отправляя в синтезатор очередной бит  */
// сейчас ctr равен 8
while (ctr){ // выполнять {в скобках} если ctr не ноль
/* Вывести на DATA 7-й бит data_hi */
DATA_LINE = data_hi & 0b10000000;
/* Мы каждый раз будем выводить 7-й бит, только в следующий раз мы подвинем на это место 6-й бит, затем 5-й и так далее */

/* Пауза гарантировано более 50 nS */
// оказалась ненужна PAUZA

/* Сдвинуть data_hi на 1 позицию в лево */
data_hi <<= 1;
/* это поместит в бит_7 data_hi бит_6 - т.е. тот который
будет передан при следующем выполнении цикла */

/* Уменьшить счетчик оставшихся прогонов цикла на 1 */
ctr --;

CLOCK_LINE = 1; /* Сделать фронт на CLOCK */


CLOCK_LINE = 0; /* Сделать спад на CLOCK */

};

ctr = 8;
/* Снова "взводим" переменную счетчик на 8 прогонов цикла */

/* Вывести data_mid точно так же как data_hi */
while (ctr){
DATA_LINE = data_mid & 0b10000000;

data_mid <<= 1;

ctr --;

CLOCK_LINE = 1;

CLOCK_LINE = 0;

А в функци буферизации нарисованой Dikoy происходит наоборот - начинается с data_low и заканчивается data_hi
код:
// Теперь, когда в буфере нужная нам структура, раскрошим BUFFER на 3 части по 8 бит дабы передать их через сонину функцию

data_low = BUFFER;
/* Т.к. data_low типа char, то есть 8 бит, то при присвоении переменной бОльшей длины ей присваивается лишь
младшие 8 бит числа BUFFER, в котором 32 бита.
Старшие 24 бита просто обрезаются.*/
data_mid = (BUFFER >> 8);
/* Тут то же самое, только перед присвоением мы сдвинули биты в числе BUFFER на 8 вниз.
То есть младшие 8 бит BUFFER, присвоенные в предыдушем пункте, ушли в небытие, а их заменили те 8 бит, что были над ними*/
data_hi = (BUFFER >> 16);
/* То же, только сдвиг на 16 бит

Поскольку эти две функции прямо связаны между собой то возникает вопрос: не будет ли конфликта? И как должно быть правильно? Или пофиг?

788. Apex_t, 24.05.2007 08:56
Все правильно. Просто разберитесь что делается с буфером и что будет в переменных.

Советую буфер назвать маленькими буквами.

789. Xradio, 24.05.2007 09:26
joptpd
калькулятор фьюзов для авр

790. Dikoy, 24.05.2007 14:46
КРОКОДИЛ
А в функци буферизации нарисованой Dikoy происходит наоборот - начинается с data_low и заканчивается data_hi
В моей функции переменным просто присваиваются значения кусков переменной BUFFER. В какой последовательности, это пофиг. Главное, чтобы их потом передать в правильной последовательности.
Вот если бы ты одной переменной последовательно присваивал кусок и сразу передавал, то да. А так пофиг.

791. Apex_t, 24.05.2007 16:23
В Аргусофте в Москве 221-0130 - ATmega8-16pu стоит 32 рубля а ATtiny13 -10su 16 руб в розницу частному лицу. Прикупил по десяточку.

792. КРОКОДИЛ, 24.05.2007 17:20
Dikoy
В какой последовательности, это пофиг.
Да,разобрался -просто сбило с толку то что локальные и глобальные переменные обозваны одинаково,- мoжет их переименовать -на всякий случай? Еще раз переписал буфер - коmпилятор уже ошибок не дает:
код:
void BUFFERIZ(void){
volatile unsigned long int buffer;
volatile unsigned char data_low,data_mid,data_hi;
volatile unsigned int RegR =360,RegN,RegF =32;
buffer = 0;
buffer = (RegR*4);
data_low = 0;
data_low = buffer;
data_mid = 0;
data_mid = (buffer>>8);
data_hi = 0;
data_hi = (buffer>>16);
data_synt();
buffer = 0;
buffer = ((RegN*4)|0x100001);
data_low = 0;
data_low = buffer;
data_mid = 0;
data_mid = (buffer>>8);
data_hi = 0;
data_hi = (buffer>>16);
data_synt();
buffer = 0;
buffer = ((RegF*4)+2);
data_low = 0;
data_low = buffer;
data_mid = 0;
data_mid = (buffer>>8);
data_hi = 0;
data_hi = (buffer>>16);
data_synt();
}

:- так правильно будет? Но почемуто выдает придупреждения -
unreferenced function 'BUFFERIZ' и unreferenced function 'data_synt'- к чему бы это?

Добавление от 24.05.2007 17:24:

Переводится как "неупомянутая функция", -а где ее упоминать то нужно?

Добавление от 24.05.2007 17:40:

Apex_t
16 руб в розницу частному лицу. Прикупил по десяточку.
Везет тебе! Слушай мне вот непонятно выражение в твоей функци DATA_LINE = data_mid & 0b10000000 можешь толком обьяснить? и откуда взялось число 0b10000000 ?

793. Dikoy, 24.05.2007 19:28
КРОКОДИЛ
Что тебе сгенерил алькулятор для R и F регистра?
Всё уже написал, осталось залить эти регистры при включении значениями и всё.

DATA_LINE = data_mid & 0b10000000
На линию выставляется результат логического И data_mid с числом 0b10000000, записаном в двоичной форме.

794. КРОКОДИЛ, 24.05.2007 19:50
Dikoy
Что тебе сгенерил алькулятор для R и F регистра?
Регистр R=0x0005A0
Регистр F=0х000082
с числом 0b10000000, записаном в двоичной форме.
Да,я немогу понять почему было взято именно это число? -чем это обусловленно?

795. Dikoy, 24.05.2007 20:00
КРОКОДИЛ
чем это обусловленно?
Тем, что у него старший бит единичка, а остальные нули.

796. КРОКОДИЛ, 24.05.2007 20:15
Dikoy
Тем, что у него старший бит единичка, а остальные нули.
Не, мне непонятен пересчет,- с какой целью было примененно именно такое выражение?

Добавление от 24.05.2007 20:30:

Dikoy
Если не трудно то впиши в еепром какиенибудь тестовые частоты -чтоб мне было проще разобратся в структуре и сразу же и попробовать - как только приедут LMXы, а то МАХ232 приедут только следующим заказом.

797. slava2004, 24.05.2007 22:23
цитата:
Apex_t:
В Аргусофте в Москве 221-0130 - ATmega8-16pu стоит 32 рубля а ATtiny13 -10su 16 руб в розницу частному лицу. Прикупил по десяточку.
Мамочка, ты путаешься в показаниях- на робофоруме, ты сказал, что купил 20 мег. А что ссылки на курс то нету ? Никак с моей помощью тебя утихомирили ?

ЗЫ Чудик - ты мне бан то, за что прописал ? Из-за защиты мамочки ?

798. -=mozg=-, 24.05.2007 22:41
Вроде работает (без емкостей).
Поторопился я.

Оторвал макетку от программатора - и снова таймер не заводится, или заводится на явно меньшей частоте (раз в 10 примерно). Прижатие пальца частоту немного повышает.
Кварц пока припаян сразу к ногам меги.

...the user can enable internal capacitors on XTAL1 and XTAL2, thereby removing the need
for external capacitors. The Oscillator is optimized for use with a 32.768 kHz watch crys-
tal. Applying an external clock source to TOSC1 is not recommended.
Note: The Timer/Counter Oscillator uses the same type of crystal oscillator as Low-Frequency
Oscillator and the internal capacitors have the same nominal value of 36 pF.
(c) ATMega8 Datasheet

Авотфиг.

799. Xradio, 24.05.2007 22:58
КРОКОДИЛ
"И" с числом 0b10000000, записаном в двоичной форме.
Да,я немогу понять почему было взято именно это число? -чем это обусловленно

Это называется маскирование байта (наложение маски).
После этой операции в числе остается только бит в разряде где была 1. Или нужная тебе часть если единиц несколько.
Знаешь же как криптографы работают? Если передавать только схему дырочек (координаты), вырезать их в листе бумаги и затем наложить его на нужную страницу "Горе от ума", то через дырочки прочтется совершенно секретный текст.


-=mozg=-
Без конденсаторв кварцы на процах не работают! И с маленькими емкостями тоже. Для низкочастотных резонаторов требуются большие кондеи. Часовой кварц не в счет - он с маленькой собственной емкостью, потому что там применяется крутильный тип колебаний. И то, часовому надо порядка 30 пикух. На свой мегагерцовый пробуй ставить в районе 47 - 82, или даже выше.

800. КРОКОДИЛ, 25.05.2007 00:07
Xradio
Это называется маскирование байта (наложение маски).
То что это маска я понял, а непонял из каких соображений он ее наложил,-тоесть что бы он обяснил что она делает в этом куске программы,- дело в том что мы уже написали одну маску в буфере и теперь непонятно нужна ли именно эта маска? и если нужна то именно этим ли числом? Дело в том что соня^2 писал функцию чисто для симулятора из соображений чтоб на осцилографе картинка красивая получилась. А я теперь немогу проследить его ход мыслей А он не отвечает



Dikoy

Вот, посмотри как пример: http://dikoy44.narod.ru/projects/BK_VAZ.htm
Набрался на твоем сайте вирусов! -сейчас уже третий ящик пятидюймовых дискет доедают!

Добавление от 25.05.2007 02:03:

('-=mozg=-')
или заводится на явно меньшей частоте
Прямо фантастика какаято! Кварц не может заводится на частотах ниже частоты св0его паралельного резонанса! Значит у тебя встроенный генератор генерит в обход кварца.

801. Dikoy, 25.05.2007 02:48
КРОКОДИЛ
Если просто, то он таким образом проверяет значние старшего бита переменной data_**. На линию данных выводится результат логического И старшего бита переменной со старшим битом числа (бо остальные биты в нуле). А т.к. с каждым проходом цикла переменная сдвигается на один бит, то в следующий раз старшим будет предыдуший бит и т.д. на линию выводятся все биты переменной.
Читай учебник, 100 раз уже говорил. Там всё это расписано.

802. КРОКОДИЛ, 25.05.2007 04:12
Dikoy
Читай учебник, 100 раз уже говорил. Там всё это расписано.
Я еще до этого не дочитал

803. Apex_t, 25.05.2007 08:38
КРОКОДИЛ
я теперь немогу проследить его ход мыслей А он не отвечает

/* Вывести на DATA 7-й бит data_hi */
DATA_LINE = data_hi & 0b10000000;

1) чему равен 7-й бит в числе 0b10000000 ?

2) что означает &

804. КРОКОДИЛ, 25.05.2007 08:50
Apex_t
что означает &
Для чего проверять значение старшего бита? - чтоб отследить начало посылки? или как?
proavr.narod.ru/05.htm
Блин с тобой как с телефонным автоответчиком разговаривать! -невiрно набраный номер!

805. Dikoy, 25.05.2007 11:27
КРОКОДИЛ
Для чего проверять значение старшего бита?
Для того, чтобы его узнать.
Придумай другой способ вывода байта на линию, если хош. Их несколько.

806. КРОКОДИЛ, 25.05.2007 11:29
Apex_t
чему равен 7-й бит в числе 0b10000000 ?
Ну так только 7-ой бит и проскочит через это выражение а остальные будут нулями,если учесть сдвиги то в итоге 8битная посылка размажется аж на 64 бита и 8 машинных циклов! Итого на дату синтезатора прийдет содержимое data_hi,data_mid и data_low в виде 192 битного монстра занимающего 32 машинных цикла! -или я чегото не так понял???

807. Dikoy, 25.05.2007 11:40
КРОКОДИЛ
Что тебе сгенерил алькулятор для R и F регистра?
Регистр R=0x0005A0
Регистр F=0х000082

Это прям вот то, что в них надо залиить для твоих частот кварцев, шагов и прочАЯ?

808. Xradio, 25.05.2007 11:44
КРОКОДИЛ
Похоже на то, что ты так и не засел за самостоятельное программирование... Вопросы, вопросы, вопросы... Сделай рабочий макет на АВРке и тренируйся. А на все вопросы есть ответы. Все повсюду до такой степени разжевано, что применять микроконтроллеры стало до смешного неинтересно. На грани баловства.

809. Dikoy, 25.05.2007 11:50
КРОКОДИЛ
Ну так только 7-ой бит и проскочит через это выражение а остальные будут нулями,если учесть сдвиги то в итоге 8битная посылка размажется аж на 64 бита и 8 машинных циклов!
Вот нарисуй на двух бумажках побитно число 10000000 и любой произвольный байт, потом двигай этот байт относительно числа и просчитай операцию И между ними. И сразу поймёшь.
И происходит ПОБИТНО, то есть И двух байтов, если у одного из них только один единичный разряд, будет равно И между этим разрядом и байтом напротив него в другом слове.

810. КРОКОДИЛ, 25.05.2007 12:39
Dikoy
потом двигай этот байт относительно числа и просчитай операцию
Я так и сделал Но за этим байтом то остальные паравозиком двигаются,и чтобы пропустить 8битную посылку нужно 8 сдвигов -тоесть 8 машинных циклов. Возьмем например 11111111 и пропустим 8 раз через И 100000000 -
получится: 100000000
010000000
001000000
000100000
000010000
000001000
000000100
000000010
000000001 итого 64 бита.

Добавление от 25.05.2007 12:46:

И чтобы потом поставить все наместо нужно еще сделать ИЛИ -но все равно посылка растянется во времени.

811. sw1972, 25.05.2007 13:26
цитата:
КРОКОДИЛ:
-=mozg=-
Вряд ли. Новый он (был). Перегреть такую бандуру очень проблематично.
Кварцы со временем теряют активность, -речь идет о больших промежутках времени,и очень не любят механических воздействий -тоесть их нельзя бросать на пол!

Существуют ли кварцевые резонаторы, предназначенные для работы в условиях воздействия механических перегрузок(удары, вибрации и т.п.)?

812. Apex_t, 25.05.2007 13:37
Dikoy
Читай учебник, 100 раз уже говорил. Там всё это расписано.

Да он даже комментарии прочитать и ПОНЯТЬ не желает из того же тескста программы что привел вверху этой страницы

код:
  
/* Вывести на DATA 7-й бит data_hi */
DATA_LINE = data_hi & 0b10000000;
/* Мы каждый раз будем выводить 7-й бит, только в следующий раз мы подвинем на это место 6-й бит, затем 5-й и так далее


========



Dikoy
посмотри как пример: http://dikoy44.narod.ru/projects/BK_VAZ.htm

Советую добавить быстрый диод (шоттки или 4148) между С7 и D4.

813. Dikoy, 25.05.2007 15:38
Xradio
Похоже на то, что ты так и не засел за самостоятельное программирование...
Он то засел. Если б он ещё и почитал перед этим, хотябы синтаксис Си, цены бы ему небыло

КРОКОДИЛ
010000000
001000000
000100000
000010000
000001000
000000100
000000010
000000001

Единичка по диагонали на размышления не наводит?

Apex_t
Советую добавить быстрый диод (шоттки или 4148) между С7 и D4.
А смысл? Обратные выбросы прекрасно жрёт стабилитрон и электрический потенциал (заряд) С7, который как раз работает стопором для обратных токов.
Да и дроссель ОЙ какой стопор для любых резких изменений напряжения питания.
Там и так наверчено жуть... Я просто L7805 ставил, без ничего, и годами работало. Но это неправильно для авто, есно.

КРОКОДИЛ
Отправил в мыло.
Сам выложи, а то у меня на слил и народ чёта не заходит...
И ещё. У меня вижон не крякнутый (е захотел крякнутый на бук вставать) и выдаёт ошибку превышения объёма Попробуй на крякнутом откомпилить, что получится?

814. Pyku_He_oTTyda, 25.05.2007 21:44
КРОКОДИЛ
Написал я контроллер, прогнал все функции, которые нашел в описании на LANC, гуляющем по сети. В принципе, те команды, что и в твоей ссылке - работают. Ничего более вкусного не нашел (диафрагмы и баланса белого).
P/S/ камера SONY DCR-SR200E

815. КРОКОДИЛ, 25.05.2007 22:13
Pyku_He_oTTyda
Ничего более вкусного не нашел (диафрагмы и баланса белого).
Так а диафрагма у меня вроде регулировалась через ланс, а вот с балансом белого пряма беда заказчик хочет в следующих приблудах баланс белого А ты смотрел в протоколе,- он там есть?

Добавление от 25.05.2007 22:40:

Dikoy
Отправил в мыло
Нифига себе! Я бы такое еще пять лет писал бы! Особенно долго разбирался бы в расписаривании еепрома В общем откомпилился нормально,только одно замечание,чтото насчет неактивированного еепрома.
Единичка по диагонали на размышления не наводит?
Хочешь сказать что в проэкции на горизонтальную плоскость все равно получится 11111111 -тоесть исходное число какое было такое и осталось -хорошо тогда возвращаемся к вопросу заданому еще три страницы назад -зачем это нужно? - ага кажется я догадался -число осталось неизменным но растянулось во времени в восемь раз! Это нужно чтоб обеспечить необходимые временные промежутки, - правильно я понял? - ну вот типа этого:
/* Пауза гарантировано более 50 nS */
// оказалась ненужна PAUZA
А что скажет на этот счет товарищ Жюков? -тобишь соня/соня?

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

816. Dikoy, 26.05.2007 02:16
КРОКОДИЛ
чтото насчет неактивированного еепрома.
Массив не проинициализирован, про это ещё соня писал. Но массивы обычно создаются в оперативке, а там не надо хранить данные после выключения. ИМХО, инициализировать массив в епроме таким макаром равнозначно его затиранию при каждом включении. Даже в примерах вижна епромовские массивы не инициализируют, а отключают вонинги в этом месте. Так что не парься.

В общем откомпилился нормально
Какой процент флеша кодом занят?
Компиль шифт+F9, он выдаст отчёт полный.

зачем это нужно?
Затем, что незьза сказать компилятору "выведи этот байт на эту лапку". Можно только последовательно разбирать переменную по битику, определять значение этого битика и выставлять лапку в соответствующе битику значение.

А что скажет на этот счет товарищ Жюков? -тобишь соня/соня?
Он же это и написал.
Если пауза небыла нужна на кварце 10 МГц, то на 4,5 и подавно. Я его функцию вообще не трогал.

Это нужно чтоб обеспечить необходимые временные промежутки, - правильно я понял? - ну вот типа этого:
Нет, время там вообще непричём. Представь байт как плёнку с засвечеными/незасвечеными кадрами. Чтбы считать их, надо прокрутить плёнку у окошка, тогда кадры пройдут и ты их увидишь. Вот это он и делает. Переменная 1000000 это и есть то, одно окошко, в 7 бите. А переменную с данными вдоль него прокручивают.

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

Добавление от 26.05.2007 02:27:

КРОКОДИЛ
Обрати внимание, я дефайны чуть изменил. Лапки переназначил. Кнопу перенёс на другую лапу, а на её место RTS линию.

817. КРОКОДИЛ, 26.05.2007 03:29
Dikoy
Обрати внимание, я дефайны чуть изменил. Лапки переназначил. Кнопу перенёс на другую лапу, а на её место RTS линию.
Да я сразу ето усек
Какой процент флеша кодом занят?
Флеша =55,8% а еепрома 37,5. Слушай а локальные переменные для сониной функции то не обьявлены и она будет пользовать глобальные которые пользует буфер -ничего там не перепутается?
Нет, время там вообще непричём
Ну все равно посылка сильно ж растянется во времени? Восемь И прилично растянут, плюс еще сдвиги дадут задержку
Он же это и написал.
Шибко сумневаюсь!
Тут еще возникли сомнения насчет очередности передачи данных,-пойду еще раз даташит попробую почитать -вот уж блин непочеловечески пишут эти даташиты на PLL

Добавление от 26.05.2007 03:36:

А вот еще обьясни такую фигню - еслиб допустим изначально я взял 32битную мегу -то эти пляски со сдвигами в буфере были бы ненужны или все равно пришлось бы двигать?

Добавление от 26.05.2007 03:56:

Блин потерял в недрах компьютера ПО которое ты писал для УАРТА - второй день не могу найти -прошлый раз тоже долго искал -нашел акуратно положил в папочку,переименовал и очень удачно кудато положил! Кинь еще раз ссылочку,а то у тебя на сайте как у сони/сони -возможно попасть только на главную страницу а дальше не влево ни вправо

818. Pyku_He_oTTyda, 26.05.2007 08:23
Переключение ББ есть в командах, и есть сброс ББ.
А какими кнопками у тебя диафрагма регулировалась? По твоей ссылке я их не вижу.

819. КРОКОДИЛ, 26.05.2007 12:23
Так я кнопки не вещал -просто позамыкал проводки одного шлейфа на другой и все.Вообще я этим проэктом всерьез не занимался, -это у меня какбы левачок никак не связанный с основной деятельностью,-поэтому все делалось по сокращенному курсу. В етой программе K_AV нашел ошибку с пересчетом, возможно она и была причиной появления новых команд, и отсутствия какихто других, а исправленную програму я еще не пробовал потому что пока неначем,-тоесть контроллеры еще не приехали,и камеры более менее вменяемой у меня тоже нет. Слушай а как по ангийски это выглядит в смысле баланс белого и его команды? Блин попридумали несколько скоростей для зума -которые как выяслилось под водой нафиг не нужны! А того что нужно какраз и нет

820. K_AV, 26.05.2007 14:21
Pyku_He_oTTyda Ошибка была не с пересчетом. Там генерировалась какая-то задержка, и в однобайтный счетчик грузили число 300 (т.е. реально получалось 44). Я не разбирался глубже, т.к. задача была по-простому переселить на другой типономинал МК.

821. Dikoy, 26.05.2007 21:19
КРОКОДИЛ
Слушай а локальные переменные для сониной функции то не обьявлены и она будет пользовать глобальные которые пользует буфер -ничего там не перепутается?
Дык на то они и глобальные, чтобы ими везьде пользоваться.

Восемь И прилично растянут
Да не будет там восемь И, т.к. И делается параллельно по всему байту.
Пока не почитаешь про логические функции бесполезно что-то объяснять.

еслиб допустим изначально я взял 32битную мегу -то эти пляски со сдвигами в буфере были бы ненужны или все равно пришлось бы двигать?
Даже на пентиуме пришлось бы двигать.

Кинь еще раз ссылочку,
Дык пролистай две страницы этой ветки и найди. У меня уже нет её, но с сайта не удалял.

822. КРОКОДИЛ, 26.05.2007 22:38
Dikoy
Да не будет там восемь И, т.к. И делается параллельно по всему байту.
Ну так там же счетчик заставляет восемь раз сдвигать байты и восемь раз делать И
Дык на то они и глобальные, чтобы ими везьде пользоваться
Это хорошо!

Даже на пентиуме пришлось бы двигать.
Не, у меня Атлон-3000

823. Dikoy, 27.05.2007 02:14
КРОКОДИЛ
Отправил в мыло новую версию. Изменения:
Выбор канала оформлен отдельной функцией (экономим флешку).
Добавлен обработчик кнопки в прерывании.

Теперь всё должно вообще шикарно работать.

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

Добавление от 27.05.2007 02:17:

PS: в кодевижне зайди
прожект/конфигур/С компилер
и переустанови оптмизацию на скорость. У тебя, видимо, на объём стоит.

824. КРОКОДИЛ, 27.05.2007 03:09
Dikoy
Теперь всё должно вообще шикарно работать.
Да теперь бы еще микросхем дождатся бы..........
Отправил в мыло
Ща пойду гляну.
PS: в кодевижне зайди
Это уже завтра,сейчас какраз синтезатор в Воронежский Лен монтирую......
Ну восемь раз и сдвигает. Что в этом криминального?
Криминального ничё, а вот посылка во времени растянется, -видать таким способом временные промежутки для синьтезатора подгоняли всетаки. Здесь же не к PIND обращение а к PORTD. Кстати обьясни популярно в двух словах как на СИ в еепром вручную значения вписывать? -а то я MAX-232 еще не скоро получу. И как этот проэкт в VMLAB засунуть? а то у меня шось не получается.....

825. Pyku_He_oTTyda, 27.05.2007 08:23
КРОКОДИЛ
K_AV
White balance toggle (not if white balance is selected via menu) 0x28, 0x49
White balance reset (not if white balance is selected via menu) 0x28, 0x77
0x28 - cуб-команда, второй - собственно команда.
З.Ы. действительно, куча скоростей зума действительно не нужна

Добавление от 27.05.2007 08:24:

цитата:
K_AV:
Pyku_He_oTTyda Ошибка была не с пересчетом. Там генерировалась какая-то задержка, и в однобайтный счетчик грузили число 300 (т.е. реально получалось 44). Я не разбирался глубже, т.к. задача была по-простому переселить на другой типономинал МК.

а на что преселяли? А то я заблудился в количестве страниц

826. КРОКОДИЛ, 27.05.2007 09:51
Pyku_He_oTTyda
Я кстати прогуглить ланк пытался,вобщем поиск выдал больше милиона страничек,ну вполне естественно больше двух гуголевских страниц просмотреть у меня нехватило силы воли Но даже на них нашел лансы с дисплеями и прочей чебурдой и даже 2004 года проекты, но все почемуто на очень старых камнях типа PIC16C54 -у них что там других микросхем нет?

827. Pyku_He_oTTyda, 27.05.2007 14:52
а мне ничего толкового не попалось, писал с нуля - буду дальше причесывать. Пока для отладки сделал так: через USART гружу команду, нажатием кнопки проверяю ее действие

828. DrAG0n, 27.05.2007 16:31
Про запись в ЕЕПРОМ:

unsigned char read_params(void)
{ // from EEPROM
// Warning! any timeout will cause watchdog ovf!
int i;
flags &= ~FAIL;

for (i = 0; i != NPARAM; i ++)
{
PARAM[i] = eeprom_read_word((uint16_t *)(i*2) + EEPROM_PARAM); // really need *2.

if ((PARAM[i]<minParam[i])||(PARAM[i]<minParam[i]))
// if (!inborders(minParam[i],maxParam[i],PARAM[i]))
{
flags |= FAIL;
break;
}
}

if (flags & FAIL)
{
for (i = 0; i != NPARAM; i ++)
PARAM[i] = dflParam[i];
// store_params();
}

return 1;
}

unsigned char store_params(void)
{ // from EEPROM
// Warning! any timeout will cause watchdog ovf!
int i;

for (i = 0; i <= NPARAM; i ++)
{
if (eeprom_read_word((uint16_t *)(i*2) + EEPROM_PARAM) != PARAM[i]) // write only if we need it.
eeprom_write_word((uint16_t *)(i*2) + EEPROM_PARAM, PARAM[i]); // really need *2.
}
return 1;
}

Добавление от 27.05.2007 16:31:

и в начале еще

#include <avr\eeprom.h>

829. КРОКОДИЛ, 27.05.2007 17:45
Pyku_He_oTTyda
Если будет свободное время то попробую в протоколах разобратся.
DrAG0n
Спасибо!

Добавление от 27.05.2007 19:03:

Dikoy
Вобщем перекомпилил с настройкой на скорость,- старый проект дает 73,6% а новый 65,1%.

830. igor_v, 27.05.2007 23:37
Честно говоря, читаю эту ветку вместо детектива - просто интересно чем дело закончится, если конец вообще будет.

КРОКОДИЛ
Криминального ничё, а вот посылка во времени растянется, -видать таким способом временные промежутки для синьтезатора подгоняли всетаки.

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

В цифровой технике существует два способа обмена данными - параллельный и последовательный.

При параллельном каждый бит даннных передается по своей индивидуальной линии. Сколько бит нужно передавать/принимать - столько и линий данных. Думаю тут все понятно и ничего объяснять не надо. При последовательном - все биты данных могут передаваться/приниматься по одной единственной линии следуя друг за другом, т.е. их сдвигают. Направление сдвига определяется тем, какой бит в последовательности должен передавться/приниматься первым. Если первым должен быть старший бит (самый левый), то сдвигать это все нужно влево (как с LMX2316), если младший (самый правый) - то вправо. Кол-во сдвигов равно кол-ву битов, которые нужно передать или принять (и временные задержки здесь не причем). При прочих равных условиях скорость при параллельном обмене выше, чем при последовательном во столько раз, сколько бит нужно передать/принять, но при этом ровно во столько же раз увеличивается кол-во линий данных.

Например, при параллельном способе, чтобы передать байт данных, нужно 8 ног 8-разрядного порта (для каждого бита своя нога) и одна - две команды (для ассемблера) для выдачи байта данных в порт - получается быстро, но при этом задействуется куча ног для обмена данными как с передающей стороны, так и с принимающей. И плата получится сложная и громоздкая. А если данные передаются по одному порту, а принимаются по другому... А если кол-во разрядов данных не 8, а 16, 32, 64... (посмотрите на материнские платы). При последовательном способе для передачи байта данных достаточно одной линии (data), но при этом передаваемые данные нужно сдвигать 8 раз, т.к. 1 байт - это 8 бит. Причем состояние линии данных должно фиксироваться приемной стороной при каждом сдвиге, для чего по отдельной линии (clock) для каждого бита данных передается свой тактовый импульс (см. описание LMX2316, п. 1.4) - это синхронный режим. Асинхронный пока разжевывать не будем, т.к. в данном случае он нас не интересует.

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

Из всего выше сказанного следует: если бы наш синтезатор (LMX2316) принимал данные параллельно, то кол-во его ног увеличилось бы как минимум на 20, т.к. ему нужно принять 21 бит. Соответственно и контроллеру нужна 21 нога для передачи этих 21 бит. В результате - вместо небольшой платы, на которой две "моськи" с минимальным кол-вом выводов имеем огромную плату с двумя "слонами", и у каждого как минимум по 40 ног, а между ними - 21 линия данных, которые бОльшую часть времени работы устройства нагло отдыхают.

Кстати, USART (Universal Synchronous Asynchronous Receiver Transmitter - универсальный синхронно-асинхронный приемо-передатчик) - это последовательный интерфейс, т.е. тоже байты придется двигать.

831. K_AV, 27.05.2007 23:44
Pyku_He_oTTyda
Мне этот LANC вообще не нужен, просто КРОКОДИЛ попросил помочь работающую программу для PIC16F84 переселить в PIC16F628. Это и оказался LANC (а не обсуждавшийся до того времени синтезатор). Попутно я в ней на указанный ляп наткнулся (компилятор выдал предупреждение; глянул - а это и в исходной программе было).
А вообще та программа в этой ветке - оффтопик (не AVR), отправил КРОКОДИЛ почтой что получилось, ну обещал еще попозже русских комментариев добавить - но что-то сомнения начали брать, что они пригодятся. А впустую кнопки жать - слишком много получается.

832. КРОКОДИЛ, 28.05.2007 02:46
igor_v
В цифровой технике существует два способа обмена данными - параллельный и последовательный.
Понятно! Спасибо за толковое обьяснение -такого редко от кого добьешся. -Вобщем прочитал и все сразу стало ясно -без вопросов.
читаю эту ветку вместо детектива
Детективы тоже иногда полезно читать!
если конец вообще будет
Так уже все -это и есть конец -программа написана Dikoy- за что ему отдельное огромное спасибо! Теперь только осталось дождатся доставки микросхем. Все что было кардинально непонятно в програмировании коллеги мне популярно обьяснили,твой пост поставил последнюю точку над И. Теперь у меня есть уровень знаний необходимый для того чтобы понять о чем пишут в учебниках,- ведь для любого учебника тоже нужен определенный уровень - иначе ничего не поймешь! А дальше уже буду учится сам.- Во всяком случае до следующей зимы никому мозги сушить не буду.P.S. Пока сражался с програмированием на СИ волосы на голове отросли до плеч, и борода выросла как у Карла Маркса!
K_AV
но что-то сомнения начали брать, что они пригодятся
Руские коментарии в програме всегда пригодятся! После опробования синтезатора займусь этим делом всерьез,я ж асемблер не забросил - потихоньку изучаю,- на ночь ложу учебник под подушку! Попозже попробую переписать этот проект под AVR и дописать все необходимые функции.А руские коментарии очень помогают разобратся что к чему!

833. Dikoy, 28.05.2007 16:19
КРОКОДИЛ
и даже 2004 года проекты, но все почемуто на очень старых камнях типа PIC16C54 -у них что там других микросхем нет?
Да просто всё. Китаёзы налаживают у себя производство камней, лицензия на которые истекла у америкосов и те их снимают с производства. Т.к. за пределы страны их не продают (только в виде устройств), то на лицензию им плевать. Камни эти намного дешевле, хоть и идентичны по архитектуре с оригиналом.
Разработчик делает девайс на устаревшем ПИКе, заказ выполняют, есно, в китае, где китаёзы ввинчивают в приборы свои камни. В итоге прибор получается совсем дешёвым.

DrAG0n
Про запись в ЕЕПРОМ:
А зачем ему это? Ему забить бы в массив начальные значения и всё.

КРОКОДИЛ
Просто в фигурных скобказ в месте объявления массива присвой ему начальные значения. Как это сделать расписано в тех ссылках, что я тебе давал на массивы сраницы две назад.

834. КРОКОДИЛ, 28.05.2007 16:48
Dikoy
В итоге прибор получается совсем дешёвым.
Блин, нашел даже програму для ланка на СИ -но неизвестно под какой камень - скорей всего под 51 ядро. Потому что других схем не видел -только на пиках и на 51ых.
китаёзы ввинчивают в приборы свои камни.
Так вроде проекты любительские..............
Просто в фигурных скобказ в месте объявления массива присвой ему начальные значения.
Понял -попробую нарисовать.

835. Pyku_He_oTTyda, 28.05.2007 17:25
цитата:

Блин, нашел даже програму для ланка на СИ -но неизвестно под какой камень
ССЫЛКУ не помните?

836. Dikoy, 29.05.2007 01:19
КРОКОДИЛ
Так вроде проекты любительские..............
Значит ещё проще - чуваки либо не учатся новому, либо выкладывают старые проекты, которые уже не ценны.

837. КРОКОДИЛ, 29.05.2007 02:18
Pyku_He_oTTyda
ССЫЛКУ не помните?
Неа, -склерос воскрес! Вот я сюда выложил там вверху чтото типа протокола а ближе к низу програма http://slil.ru/24431787 Я еще какойто мути нагуглил по этой теме но пока неразбирался бо некогда.

Добавление от 29.05.2007 02:31:

Dikoy
либо выкладывают старые проекты, которые уже не ценны.
Так отож! ЗЫ. Денисов наконЕцто родил синтезатор на восьмой меге http://ra3rbe.r3r.ru/sv2007.htm, раньше когда он публиковал синтезаторы на деталях которые невозможно достать или запрограмировать то хотябы прошивку давал в виде хекса, а когда сделал на доступных деталях то и прошивку не дает! http://www.r3r.ru/modules.php?op=modload&name=ph…p;topic=498&0

838. КРОКОДИЛ, 30.05.2007 18:25
Dikoy
Перечитал еще раз второй и третий том детектива но так и не понял, -убили его в конце? или нет? Вот смотри:
код:
/*
BUFFER = 0 ; //обнуляем буфер
BUFFER = ((REGN*4) | 0x100001); // умножаем на 4 и добавляем маску

data_low = 0; //
data_mid = 0; //ОБНУЛЯЕМ ВСЕ
data_hi = 0; //

data_low = BUFFER; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid =(BUFFER >> 8); //СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16); //СДВИГ НА 16БИТ

data_to_synt (); */

Здесь буферизация регистра N вместе со сдвигами отправленна в коментарии, -тоесть в работе МК не учавствует.
А здесь:
код:
//Теперь заливаем регистр N частотой приёма, на которой стоит переключатель.

//запомнили состояние порта В
swit = PORTB;
/* Теперь устанавливаем синтезатор на исходный канал */

choice_channel();

}






// Declare your global variables here
void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1

здесь тоже абсолютно ничего не происходит.
А вот здесь:
код:
switch (swit) {  //В синтезатор загружаются элементы массива с индексом, равным разности индекса частот приёмнка и n.
//То есть если n==0, в синтезатор грузятся частоты приёмника, а если n==3, частоты передатчика
//т.к. их индексы на 3 меньше, чем у приёмника.
case 255: {data_hi = koefp[5-n];
data_mid = koefp[4-n];
data_low = koefp[3-n];
data_to_synt ();

Данные из еепрома отсылаются прямо в сонину функцию минуя буферизацию и сдвиги на 8 и на 16 И непонятно когда они туда прийдут до регистров R и F? или после них? или посредине?

839. Dikoy, 30.05.2007 20:42
КРОКОДИЛ
Здесь буферизация регистра N вместе со сдвигами отправленна в коментарии,
А нафига нужно заливать частот ыиз головы, когда можно залить те, на которых ручка?

здесь тоже абсолютно ничего не происходит.
Уверен?

Данные из еепрома отсылаются прямо в сонину функцию минуя буферизацию и сдвиги на 8 и на 16
Ну подвигай, если хош. Забавно будет выглядеть сдвиг char на 16 бит...

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

непонятно когда они туда прийдут до регистров R и F? или после них? или посредине?
В R и F даные загружаются один раз при включении питания. А вот N перезаливается при каждом изменении ручки или кнопки TXRX, бо именно он отвечает за частоту.

840. КРОКОДИЛ, 31.05.2007 02:59
http://slil.ru/24442932
- вот загрузил сюда оба проекта, для тех кому интересно.....

Добавление от 31.05.2007 03:31:

Dikoy
так что разбирайса сам как работает, пока есть время. А то врдруг чё изменить понадобится...
Так я какраз и разбираюсь!
А нафига нужно заливать частот ыиз головы, когда можно залить те, на которых ручка?
Я имел в виду что данные на которых ручка вроде как нужно заливать в сонину функцию через буфер со сдвигами и четко между содержимым регистров R и F.........
Ну подвигай, если хош. Забавно будет выглядеть сдвиг char на 16 бит...
Ну так ты же сам придумал буферизацию со сдвигами, регистры R и F сдвигаются а регистр N приходит почемуто в сонину функцию напрямую минуя буфер....
Уверен?
Я имел в виду что регистр N даже не обьявлен, и вовсе не факт что данные из еепрома попадут именно в регистр N синтезатора а не в какой нибудь другой.

В R и F даные загружаются один раз при включении питания. А вот N перезаливается при каждом изменении ручки или кнопки TXRX, бо именно он отвечает за частоту.
Ну так здесь же и нужно чтобы он перезаливался строго между регистрами R и F -или я чегото не так понимаю?
бо именно он отвечает за частоту.
Он отвечает за коофицент деления частоты, а за частоту отвечает сам синтезатор,- тоесть в контролер заливается не частота а соответствующий ей коофициент деления.


Вобщем я мыслю так: - нужно обьявить регистр как unsigned long int REGN, а затем востановить его буферизацию, а данные из еепрома нужно передавать не прямо в сонину функцию а в регистр REGN -тогда он придет на синтезатор в нужной последовательности. Тока я пока не сображу как передать данные из еепрома в етот регистр.

841. Dikoy, 31.05.2007 17:13
КРОКОДИЛ
Я имел в виду что данные на которых ручка вроде как нужно заливать в сонину функцию через буфер со сдвигами и четко между содержимым регистров R и F.........
В сонину функцию должны попасть три переменные по 8 бит. Регистр N (его значение) ты выщитываешь калькулятором, моей прогой с компа заливаешь в МК, при этом значения калькулятора уже дробятся на 3*8 бит. и в таком виде они пишутся в епром (нафига по 10 раз сдвиги делать?). От туда в чистом виде они и берутся.
А N и R регистр присваиваются переменным сразу и дробятся на 3*8 самим МК (для удобства).

Ну так ты же сам придумал буферизацию со сдвигами, регистры R и F сдвигаются а регистр N приходит почемуто в сонину функцию напрямую минуя буфер....
тогда ещё мы хотели слать МК частоты, а он сам должен был формировать буфер. Нонче мы тупо сохраняем в нём значения калькулятора, то есть уже готовые значения регистров.

Я имел в виду что регистр N даже не обьявлен, и вовсе не факт что данные из еепрома попадут именно в регистр N синтезатора а не в какой нибудь другой.
А зачем его объявлять, если его значения, уже покрошеные, сидят в епроме? Бери их от туда, сразу присваивай сониным переменным и всего делов!
Там функция choice_channel();
Всё в ней делается.

Добавление от 31.05.2007 17:22:

КРОКОДИЛ
нужно обьявить регистр как unsigned long int REGN, а затем востановить его буферизацию, а данные из еепрома нужно передавать не прямо в сонину функцию а в регистр REGN -тогда он придет на синтезатор в нужной последовательности. Тока я пока не сображу как передать данные из еепрома в етот регистр.
Во первых, последовательность там пофиг.
Во вотрых, твой алгоритм звучит приметрно так: принять данные с компа, склеить, загнать в 32 битную переменную массива (заняв на 20% больше флеша). Потом их от туда снова вытащить, покрошить, и передать в синтезатор.
Тупизм, согласись
Да и скорость работы аппарата зачем отнимать? Надо ж чтобы шустро на кнопы реагировал!

Добавление от 31.05.2007 17:26:

КРОКОДИЛ
Ещё два совета.
Обвязка у МАХ232 - 4 кондёра (кажется) по 1 мкФ. Поставь лучше керамику, чем электролиты.
Светодиод таки подцепи к свободной лапе МК. Хотя бы место на плате предусмотри. Для отладки пригодится ОЧЕНЬ сильно. Светодиод надо включать между плюсом и лапой через резюк 470 ом.

842. КРОКОДИЛ, 01.06.2007 02:58
Dikoy
А N и R регистр присваиваются переменным сразу и дробятся на 3*8 самим МК (для удобства).
Не, дело в том что с калькулятора от производителя все три регистра идут уже раскрошенными -по 21 биту, тоесть наверно R и F можно тоже не сдвигать?
Ну вобщем нужно дождатся микросхем и попробовать а тогда будет видно.
Если не будет работать будем пинать соню/соню!
моей прогой с компа заливаешь в МК
Тут вот немного накладка с прогой получилась по моей вине, изначально задумывалось так как сделанны проги на фирменных аппаратах -в прогу вписывается частота канала а сама прога делит ее на 12,5кгц а полученный коофицент деления уже заливает в МК, Я тебе толком не обьяснил так как считал что это само собой разумеется И ты сделал только проверку кратности шага. -впрочем для теперишней версии проекта это уже не важно, так как решили заливать уже готовые значения калькулятора, -но прога и их не пропустит так как значения выданные калькулятором не кратны 12,5 потому что калькулятор приклеивает к ним служебные биты. Так что непонятно что теперь делать с заливкой?
Светодиод таки подцепи к свободной лапе МК.
Так что к любой свободной лапке? Его же нужно както в программе прописать? Или нет? А как я увижу его мигания на частоте 4,5мгц ?

Добавление от 01.06.2007 04:21:

Да кстати а куда Сонины хидеры запихивать? Я так понял что в директорию кодевижена? А в какую именно папку?

843. Dikoy, 01.06.2007 14:48
КРОКОДИЛ
прога и их не пропустит так как значения выданные калькулятором не кратны 12,5 потому что калькулятор приклеивает к ним служебные биты.
Ну уберу проверку, всего то делов...

Его же нужно както в программе прописать?
Зачем? Лапу ставишь в "1", он не горит. Ставишь в "0", он горит.

А как я увижу его мигания на частоте 4,5мгц ?
Никак. По этому он и не будет мигать на частоте 4,5мгц.

Я так понял что в директорию кодевижена? А в какую именно папку?
Туда где все хидеры. А нафига? Оно и так работает.

844. КРОКОДИЛ, 01.06.2007 17:41
Dikoy

Туда где все хидеры.
Ага, разобрался.
А нафига?
Ну на всякий случай!
Оно и так работает.
Не, просто следующий проект будет для себя, ну и естественно с наворотами и на более крутом МК -на какой нить Меге. Да кстати можешь обьяснить как отправлять данные из еепрома одновременно в два места? -Допустим в синтезатор и на дисплей? -причем перед передачей на дисплей нужно выполнить с данными еще некоторые логические и математические операции. Ну с синтезатором все понятно -тоесть написал в конце функции data_to_synt (); и все, а как быть с дисплеем, -что дописать ниже lcd_init;? как тогда производить с данными операции? -они ведь никак не обозванны

Добавление от 01.06.2007 17:50:

Да кстати -вот эти дефайны нигде в программе не используются -

код:
#define CH1  PINB.0 //
#define CH2 PINB.1//
#define CH3 PINB.2//
#define CH4 PINB.3//Входы от переключателя каналов-работают на Вход с подтяжкой
#define CH5 PINB.4 //
#define CH6 PINB.5//
#define CH7 PINB.6//
#define CH8 PINB.7//

-тоесть их можно удалить?

845. Dikoy, 01.06.2007 21:10
КРОКОДИЛ
тоесть их можно удалить?
Можно.

на более крутом МК
А зачем?..

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

846. КРОКОДИЛ, 01.06.2007 23:05
Dikoy
Не думаю, что задержка появления информации на дисплее в 10 мС вызовет расстройство у юзера
Конечно нет! Кстати у нас ведь данные из еепрома для передатчика вытаскиваются, -вот сейчас вспомнил что это дело долгое, -какой будет реальная задержка при переключении на передачу, -уложится в полсекунды или нет?
А зачем?..
Затем что это будет прибамбас для себя -тоесть максимально навороченный -многодиапазоннный со сканированием,с дуплексом, с множеством каналов памяти,с клавиатуой, с репитерными каналами и т.д. Кстати еще и с АЦП,- для вывода на дисплей информации о силе принимаемого сигнала, а может даже и с панорамным индикатором -но это пока просто задумка и будет разрабатыватся зимой, а пока учусь! - вот плохо только системный блок под подушку не влазиет Кстати какой посоветуешь МК?

Добавление от 01.06.2007 23:17:

Dikoy
Сначала отправляешь в одно место, потом в другое
Ну это понятно,- а как это выглядит? -можешь пример в пару строчек написать?
Это примерно так?

код:
{
data_hi = koefp[29];
data_mid = koefp[28];
data_low = koefp[27];
data_to_synt ();
lcd_init(16);
}

Но мне перед отправкой на дисплей данные нужно еще обработать, -вот не соображу как к ним обратится?

847. Dikoy, 02.06.2007 01:46
КРОКОДИЛ
уложится в полсекунды или нет?
Ну если все каналы читать раз по 10 подряд, уложится. Один канал уложится в миллисекунду

сейчас вспомнил что это дело долгое,
относительно долгое Если доступ к переменной в ОЗУ, это один тик, то к флешу 80 тиков, кажется... Не помню уже, у разных АВР по разгому. Но всё равно быстро.

Кстати какой посоветуешь МК?
Лучше нечто современное, типа меги48, меги88. Должно и 48 хватить с запасом. Тут у тебя в полтора килобайта прошивка уложилась, а там и 4.
У 88 просто памяти 8 кБ, а так то-же.

вот не соображу как к ним обратится?
Что ты понимаешь под "обратиться к данным"?

848. КРОКОДИЛ, 02.06.2007 02:28
Dikoy
Что ты понимаешь под "обратиться к данным"?
Ну содержимое регистра N -у нас нигде не обьявленно и не обозванно, а мне для отправки на дисплей нужно например сделать так:
(("Содежимое регистра N"/4)& 0x0111110)+0x358; //это пример....
lcd_init(16);
}
- Вот я и несоображу что нужно писать вместо "Содежимое регистра N" ? -ведь я немогу написать какуюто определенную цифру так как она все время будет изменятся в зависимости от номера канала


или так:
(("Содежимое еепрома"/4)& 0x0111110)+0x358;
lcd_init(16);
}
тоже непонятно как это написать?

Dikoy
меги88
А на какой порт лучше всего дисплей вешать?

849. Dikoy, 02.06.2007 04:45
КРОКОДИЛ
А на какой порт лучше всего дисплей вешать?
Монопенисуально. Визард сам тебе сгенерит все линии - попробуй.

Ну содержимое регистра N -у нас нигде не обьявленно и не обозванно, а мне для отправки на дисплей нужно например сделать так:
Чтобы сделать так, нужно получить из епрома значение канала. То есть склеить воедино три байта.

unsigned long int N;
N=koefp[x]+koefp[x+1]*256+koefp[x+2]*65536; //как я уже говорил, умножение аналогично сдвигу.

"х" здесь - номер элемента массива.
Теперь в переменной N копия регистра N синтезатора. Ну а дальше мучай её как хош.

lcd_init(16);
Эта функция инициализирует дисплей, что следует из её названия
Отправлять значение надо ф-й lcd_putsf();
Предварительно выбрав нулевую точку на экране при помощи lcd_gotoxy(,);
В примерах вижна всё написано. Даже с коментами.

850. КРОКОДИЛ, 02.06.2007 05:24
Dikoy
Эта функция инициализирует дисплей, что следует из её названия
Ясно, - путаюсь пока, кстати как это переводится -gotoxy- промт отказался переводить
Даже с коментами
если б на руском...........

Ну а дальше мучай её как хош.
Да уж замучаю.............
Сейчас посмотрел Меги88 в харькове -всего 9,80грн. за 20мегагерцовую , а 10 мегагерцовая почемуто дороже - 14грн.

851. Dikoy, 02.06.2007 17:04
КРОКОДИЛ
gotoxy
go to икс игрек.
В дословном переводе "дуй до икса и игрека"

а 10 мегагерцовая почемуто дороже - 14грн.
Диапазон питания шире.

если б на руском...........
Промт
Однажды в универе мне шеф дал переводить доку с китайского. И перевёл! Хотя ни промтов, ни файнридеров, ни ЭВМ вообще тогда небыло.
Фишка в том, что там была одна матемаимка, и когда стало я ясно, как оно работает, коментарии пришли сами собой.
Выучи Си и коментарии тебе будут ненужны.

852. КРОКОДИЛ, 02.06.2007 19:48
Dikoy
Фишка в том, что там была одна матемаимка, и когда стало я ясно
ЗЫ. А я всегда почемуто думал что програмисты это пришельцы из космоса, -откуда нибудь из созвездия "Черного лебедя"
В дословном переводе "дуй до икса и игрека"
Меня все время сбивают с толку эти импортные словечки с нижними тире.
Слушай а в твоей проге никак нельзя сделать опции Файл ->сохранить как... и соответственно Файл -> открыть- дело в том что это очень полезное дело когда работаешь с блоками цифр которые просто невозможно запомнить.

853. Dikoy, 03.06.2007 20:50
КРОКОДИЛ
Слушай а в твоей проге никак нельзя сделать опции Файл ->сохранить как... и соответственно Файл -> открыть-
Можно, но я уже сильно забыл делфи... Врядли смогу написать сейчавс. Да и влемени до конца июня нет.

854. КРОКОДИЛ, 04.06.2007 04:12
Тогда не ненужно -пойдёть и так,только проверку на кратность убрать и все.

855. Dikoy, 04.06.2007 09:33
Отправил.

856. Apex_t, 04.06.2007 21:36
КРОКОДИЛ
Кстати какой посоветуешь МК ?

Dikoy
Лучше нечто современное, типа меги48, меги88


Блин ! Классная рекомендация !

Нафига спрашивается начинающему мега8 или -16 или -32 которые
поддерживаются симуляторами VMLAB и PROTEUS ...
Зчем тратить время и забивать голову этими "никчемными" програмульками ...

857. Dikoy, 04.06.2007 22:32
Apex_t
Нафига спрашивается начинающему мега8 или -16 или -32 которые
поддерживаются симуляторами VMLAB и PROTEUS ...
Зчем тратить время и забивать голову этими "никчемными" програмульками ...

Для опытов можно и мегу8 иметь, но закладывать в устройство я бы её не стал.

858. КРОКОДИЛ, 05.06.2007 01:41
Dikoy
Отправил.
Получил, но она гдето повредилась по дороге 4 раза скачивал и каждый раз пишет -"Неожиданный конец архива"

Добавление от 05.06.2007 01:47:

Apex_t
поддерживаются симуляторами VMLAB и PROTEUS ...
Так PROTEUS и меня не поддерживает,и я его тоже не поддерживаю.........
Dikoy
Для опытов можно и мегу8 иметь, но закладывать в устройство я бы её не стал.
Мега 16 должна прийти вместе с LMXами -они уже в Донецке так что скоро будут у меня.

859. Dikoy, 05.06.2007 02:30
КРОКОДИЛ
но она гдето повредилась по дороге
Таможня наверное...
Выложил тут: www.dikoy44.narod.ru/V20.zip

Мега 16 должна прийти вместе с LMXами -они уже в Донецке так что скоро будут у меня.
Ну тогда играйся с мегой16. И памяти в ней валом, и периферии. На твою задачу - с головой.
Но если девайс серийный и с последующей долгой продажей и поддержкой, то лучше выбирать 48-88-168. Их точно лет 5 ещё с производства не снимут.

860. КРОКОДИЛ, 05.06.2007 03:16
Dikoy
Выложил тут
Скачал,проверил -все нормально! Спасибо!
Ну тогда играйся с мегой16.
Да пока потренируюсь на кошках........

861. КРОКОДИЛ, 18.06.2007 01:31
Dikoy
А можешь написать пример как пищутся кнопы с электронной фиксацией? Ну допустим нажал я кнопу "сканирование" -побежала частота,отпустил она остановилась, а мне нужно чтоб она бежала все время до тех пор пока я ненажму повторно этуже кнопу или пока не сработает шумоподавитель. Как такое написать?

862. Dikoy, 18.06.2007 09:58
КРОКОДИЛ
Ща некогда...
Примерно так - фиксишь нажалие, потом вилом ждёшь отпускания. Потом крутишь цикл поиска, постоянно мониторя кнопу. Ну и снова - нажатие и отпускание (чтобы помехи за нажатие не принимались).

863. K_AV, 18.06.2007 13:19
Dikoy, КРОКОДИЛ
Позволю себе маленькое уточнение. Много раз наблюдал, как люди в таком интерфейсе путались (когда программа ждет отпускания кнопки). Такой подход проще для программиста, но для пользователя неестественно это. Требуется: "Нажал кнопку - вижу результат". А от помех - как и от дребезга защититься.
Итого - В программе вводим флаг "Сканирование". В каком-то цикле мониторим нажатие кнопки и выполняем шаги сканирования.
Увидел нажатую кнопку - выполнил проверку на дребезг (по избранному алгоритму, например, несколькими повторными чтениями). Если нажатие достоверное - инвертируем флаг "сканирование". В противном случае просто кончаем цикл проверки кнопки (без всяких изменений), переходим к собственно сканированию. Если флаг "сканирование" установлен - выполняем очередной шаг сканирования, если нет - не выполняем, вместо этого оформляем (при необходимости) завершение сканирования (запоминание достигнутого и т.п.). И так далее по кругу.
Я бы, во всяком случае, делал так. Правда, нужно признать, что при таком подходе к нуждам пользователя объем интерфейса запросто может составить половину программы и более. Тут уж разработчику решать, что для него важнее.

Добавление от 18.06.2007 14:18:

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

864. КРОКОДИЛ, 19.06.2007 01:44
Dikoy
Примерно так - фиксишь нажалие, потом вилом ждёшь отпускания. Потом крутишь цикл поиска, постоянно мониторя кнопу. Ну и снова - нажатие и отпускание (чтобы помехи за нажатие не принимались).
Не, несоображу kак!
K_AV
запросто может составить половину программы и более.
Обьём программы ограниченный так как мне неприслали "Мегу" изза того что их небыло на складе в момент отправки, поэтому опять приходится городить все на tiny, а у нее и памяти мало и лапок тоже не совсем хватает, так как будет еще использоватся LCD 2x16.
инвертируем флаг "сканирование"
Я с флагами еще не разобрался
Я бы, во всяком случае, делал так
Ну эта кнопка не такая уж важная и нужна больше для порядка так как проект чисто любительский и некомерческий,поэтому нужно чёнибудь попроще. Вот только не могу сообразить как происходит програмное фиксирование кнопки, -завтра/послезавтра допишу черновик пректа и выложу, тогда уже подскажите что к чему.

865. K_AV, 19.06.2007 14:19
КРОКОДИЛ
Флаг (он же "признак") - это просто отдельный бит (1-битовая переменная), под которым подразумевается какой-то особый смысл. Например, посмотри на байт статуса МК - он весь из таких флагов состоит, за каждым битом отдельный смысл закреплен. И в других регистрах МК такие есть в изобилии. Но это "встроенные" в МК, он ими сам распоряжается большей частью, а ты только смотреть на них можешь (ну, некоторые можешь и изменять). А можно таких флагов себе для удобства поназначать сколько угодно. Самому себе в работе программы "узелок на память". Ты его сам создаешь (присваиваешь имя и подразумеваешь смысл), сам устанавливаешь в "1" или в "0" в соответствии с этим смыслом и реальными событиями. Используются, когда в программе нужно оставить следы каких-то событий, например, прошедших этапов какого-то сложного поэтапного действия.
Если флагов в прогамме много - их можно упаковать в один или несколько байтов (компилятор C сделает это сам) для экономии памяти: 1 байт будет содержать в себе признаки до 8 отдельных событий.

866. SAA, 19.06.2007 14:57
КРОКОДИЛ
С кнопками когда то поступал так, если есть задействованный счетчик который лупит с Гц частотой (скажем 200-300Гц) то выводил это меандр на ногу кнопки, с другой ноги заводил на тактирования другого счетчика, ставил счетчику либо compare либо overflow и ловил прерывание.

Потом как K_AV говорил поднимаешь флаг - нажатие поймано, отрабатываешь его в глобальным цикле while (где в основном 80% спишь, остальное крутишься по прерываниям). Из этого же while хочешь процедурой с огроменным "кейсом", хочешь косвенной адресацией через ijmp/icall(что предпочтительно) ныряешь в обработку поднятого флага.

867. K_AV, 19.06.2007 18:15
КРОКОДИЛ
Если описать процесс твоего сканирования словами:
1. Читаем состояние порта, к которому подключена кнопка "Сканирование" (или как там у вас в программе. Я не в курсе - может, читается состояние всех кнопок оптом, а потом среди них смотрится на получившееся состояние этой кнопки).
2. IF-THEN-ELSE
- если кнопка не нажата - идем на выход из процедуры обработки сканирования (сканирование закончили, не начав).
- если кнопка нажата - начинаем ее снова циклически осматривать, пока (WHILE) не обнаружим, что она наконец отпущена. Т.е. программа крутится на одном месте и ждет. терпеть не могу бесконечных циклов с выходом только по независимому от МК внешнему событию
3. Циклически проверяем состояние той же кнопки. (WHILE)
- если кнопка не нажата - выполняем один цикл поиска (изменяем частоту на 1 шаг, ждем установления частоты, проверяем, что из этого получилось в плане приема сигналов). Возврат на повтор цикла WHILE.
- если кнопка нажата:
-- запоминаем достигнутое значение частоты;
-- запускаем еще один цикл WHILE - ждем, пока кнопка не будет отпущена (точно, как и в п.2). После этого произойдет завершение этого цикла WHILE.
-- завершаем выполнение цикла WHILE, запущенного в п.2.
Собственно все, сканирование завершено.
Ну, еще в процессе изменения частоты нужно проверять, не дошли ли до конца заданного диапазона.

868. КРОКОДИЛ, 20.06.2007 03:22
SAA
если есть задействованный счетчик который лупит с Гц частотой (скажем 200-300Гц)
Не,такого низкочастотного счетчика у меня в системе нет
K_AV
Я не в курсе - может, читается состояние всех кнопок оптом,
не,не так, Вот выкладываю заготовку проекта -правда еще сильно недоработанный.
код:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.2 Beta1 Standard
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : SYNT 144- 174MGZ.
Version : 00000000.1
Date : 17.06.2007
Author : KROKODIL
Company : ROGA i KOPITA
Comments:
Синтезатор LMX2313, двухстрочный дисплей.Кварц 10,245 мгц, сканирование.
Шаг=2,5кгц пч= 10,7~10,695мгц.

Chip type : ATtiny2313
Clock frequency : 10,245000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/

#include <tiny2313.h>


// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm

#include <lcd.h>
#include <delay.h>
#include <stdio.h>


#define LCD_CHARS_LINE 16
#define LCD 2
#define TX_RX PINB.3 //ПЕРЕКЛЮЧАТЕЛЬ ПРИЕМ ПЕРЕДАЧА-работает на вход с подтяжкой
#define KEY_UP PIND.0 // Частота вверх
#define KEY_DOWN PIND.1 // частота вниз
#define KEY_SKAN PIND.2 // сканирование
#define KEY_SAVE PIND.3 // память
#define TX_RX PINB.3 // приём/передача
#define DATA_LINE PORTD.4 //
#define CLOCK_LINE PORTD.5 //
#define LE_LINE PORTD.6 // подключение LMX
#define DATA_LINE_ON DDRD.4 //
#define CLOCK_LINE_ON DDRD.5 //
#define LE_LINE_ON DDRD.6 //

char lcd_buffer[33];
unsigned char data_hi , data_mid , data_low ;
unsigned long int BUFFER=0;
unsigned long int REGR = 0x0005A0; //переменная на 32 бита ДЛЯ ПРЕДДЕЛИТЕЛЯ КВАРЦА ШАГ 12,5КГЦ
unsigned long int REGF = 0x000082; //служебные биты синтезатора
unsigned long int START_BAND ; //начало диапазона
unsigned long int END_BAND ; //конец диапазона
unsigned long int call_channel; //дежурная частота
unsigned int PROMEGUTOK;//промежуточная частота
//значения присвоены еще не всем переменным- еще не посчитал

void data_to_synt (void) {
char ctr = 8; /* Локальная переменная счетчик */
/* 
Включаем линии (выводы МК) управляющие синтезатором  
*/
LE_LINE_ON = 1;
LE_LINE = 0;
/* я начал с линии LE так как на ней нужно сделать "0" а паузу после этого автоматически создаст время конфигурации следующих линий */
CLOCK_LINE = 0;
CLOCK_LINE_ON = 1;
/* теперь на линии CLOCK "0" и она является выходом */
DATA_LINE_ON = 1;
/* линию DATA достаточно просто включить - сделать выходом */
/* Цикл вывода data_hi начиная с бита_7 (Это 21-й
бит - самый старший - MSB). Будем делать 8 раз
каждый раз отправляя в синтезатор очередной бит  */
// сейчас ctr равен 8
while (ctr){ // выполнять {в скобках} если ctr не ноль
/* Вывести на DATA 7-й бит data_hi */
DATA_LINE = data_hi & 0b10000000;
/* Мы каждый раз будем выводить 7-й бит, только в следующий раз мы подвинем на это место 6-й бит, затем 5-й и так далее */
/* Сдвинуть data_hi на 1 позицию в лево */
data_hi <<= 1;
/* это поместит в бит_7 data_hi бит_6 - т.е. тот который
будет передан при следующем выполнении цикла */
/* Уменьшить счетчик оставшихся прогонов цикла на 1 */
ctr --;
CLOCK_LINE = 1; /* Сделать фронт на CLOCK */
CLOCK_LINE = 0; /* Сделать спад на CLOCK */
};
ctr = 8;
/* Снова "взводим" переменную счетчик на 8 прогонов цикла */
/* Вывести data_mid точно так же как data_hi */
while (ctr){
DATA_LINE = data_mid & 0b10000000;
data_mid <<= 1;
ctr --;
CLOCK_LINE = 1;
CLOCK_LINE = 0;
};
ctr = 5; /* Снова "взводим" переменную счетчик
но теперь на 5
так как в data_low всего 5 бит нужно передать */
while (ctr){/* Цикл вывода data_low начиная с бита_7
будем делать ПЯТЬ раз */
/* Вывести на DATA 7-й бит data_low */
DATA_LINE = data_low & 0b10000000;
/* Сдвинуть data_low на 1 позицию в лево */
data_low <<= 1;
/* Уменьшить счетчик оставшихся циклов на 1 */
ctr --;
CLOCK_LINE = 1; /* Сделать фронт на CLOCK */
CLOCK_LINE = 0; /* Сделать спад на CLOCK */
};
/* Отправили 21 бит, теперь нужно сделать "1"
на LE (см. диаграмму выше) */
LE_LINE = 1; /* Вывести "1" на LE */
/*
Передача 21 бита данных в синтезатор окончена  
*/
}

void synt_init (void){
BUFFER = REGR; // Заливаем регистр R

data_low = 0; //
data_mid = 0; //ОБНУЛЯЕМ ВСЕ
data_hi = 0; //

data_low = BUFFER; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid = (BUFFER >> 8); //СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16); //СДВИГ НА 16БИТ

data_to_synt ();

BUFFER = 0;
BUFFER = REGF; //заливаем регистр F
data_low = 0; //
data_mid = 0; //ОБНУЛЯЕМ ВСЕ
data_hi = 0; //

data_low = BUFFER;
data_mid = (BUFFER >> 8);//СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16); //СДВИГ НА 16БИТ

data_to_synt ();
}
void choice_channel (void){
unsigned long int REGN;
unsigned long int ABC;
REGN = call_channel;

ABC= REGN
if(!KEY_DOWN,(ABC!=START_BAND)){ //здесь компилятор выдает почемуто ошибку -missing';'
while (1){
ABC=(REGN + 5);
};
};

if(! KEY_UP,(ABC !=END_BAND)){ // здесь ошибки нет,но янезнаю можно ли в скобках писать сразу несколько условий?
while (1){
ABC =(REGN - 5);// в силу определенных причин изменение частоты должно происходить через 5 щагов.
};
};


if(!KEY_SKAN, (TX_RX=0), (ABC!=END_BAND)){//Функция сканирования-здесь я незнаю как зделать
while(1) //чтоб она не останавливалась после отпускания кнопки?

{
ABC=(REGN + 5);
};
};
if(! TX_RX){ //передача
ABC=(ABC + PROMEGUTOK);//здесь я тоже незнаю можно ли так написать?
};
BUFFER = 0 ; //обнуляем буфер
BUFFER = ((ABC*4) | 0x100001); // умножаем на 4 и добавляем маску

data_low = 0; //
data_mid = 0; //ОБНУЛЯЕМ ВСЕ
data_hi = 0; //

data_low = BUFFER; //РЕЖЕМ БУФЕР НА 3 ЧАCТИ
data_mid =(BUFFER >> 8); //СДВИГ НА 8 БИТ
data_hi = (BUFFER >> 16); //СДВИГ НА 16БИТ

data_to_synt ();



}
void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// 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=P State2=T State1=T State0=T
PORTB=0x08;
DDRB=0x00;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=P State2=P State1=P State0=P
PORTD=0x0F;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
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
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

synt_init ();
// LCD module initialization





while (1)
{
choice_channel(); // Place your code here

} ;
}



кнопки в функции void choice_channel (void){


K_AV
-- завершаем выполнение цикла WHILE, запущенного в п.2.
Не, я так широкомасштабно несоображу, тем более что пока еще плаваю в СИ.
Еслиб пример какой нибудь,- лучше один раз увидеть......
//интересно а можно ли при нехватке лапок задействовать какую нибудь лапку порта А

Добавление от 20.06.2007 03:34:

K_AV
проверяем, что из этого получилось в плане приема сигналов).
Сканирование должно останавливаться либо при повторном нажатии кнопки либо по приходу сигнала от шумоподавителя,-какраз для этого и нехватает лапки чтоб завести сигнал в контролер.

869. SAA, 20.06.2007 07:46
цитата:
КРОКОДИЛ:
SAA
если есть задействованный счетчик который лупит с Гц частотой (скажем 200-300Гц)
Не,такого низкочастотного счетчика у меня в системе нет

Раз нет так заведи его, в AVR как минимум 2 таймера/счетчика

870. КРОКОДИЛ, 20.06.2007 09:13
SAA
Раз нет так заведи его, в AVR как минимум 2 таймера/счетчика

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

871. SAA, 20.06.2007 09:30
цитата:
КРОКОДИЛ:
SAA
Раз нет так заведи его, в AVR как минимум 2 таймера/счетчика

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

Нехватает ног? Тогда часть аппаратного алгоритма ляжет на сам AVR - полоть по тому же таймеру, читая порт кнопки (откуда она будет с "0" или "1"), взводить флаг flPRESS после успешного чтения 10 раз подряд например "1" (если при это 10 раз подряд читается "0" то поступать наоборот flPRESS опускать) и отрабатывать флаг в основном цикле. Если нужен автоповтор нажатия то либо новым счетчиком/таймером, либо программный счетчиком отрабатывать задержку при взведенном flPRESS и взводить flREPEAT (сбрасывать flREPEAT как только flPRESS = 0). При взведенном flAUTOREPEAT этим же счетчиком которым заводили задержку срабатывания автоповтора отмерять интервал повтора и взводить flREPEATPRESS, котрый отрабатывать в основном цикле и сбрасывать сразу же после отработки.

872. Dikoy, 20.06.2007 16:54
K_AV
Много раз наблюдал, как люди в таком интерфейсе путались (когда программа ждет отпускания кнопки).
Чтоб не путались, по нажатию включаем зумер или светодиод.

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

КРОКОДИЛ
В простейшем случае так:
код:

while (1)
{
// вариант с отпусканием

int a=0; //переменная-счётчик
if (PINB.0==0) { //если кнопа нажата...
PORTB.1=0; //включили зумер.
while (PINB.0==0) { a++; }; //пока кнопа нажата увеличиваем а на 1
if (a>1000) { //если по отпускании а больше 1000, то есть нажатие было достаточно долгим,
a=0; //а=0
PORTB.1=1; //зумер выключили
//тут делаем то, что надо
};


};




/*ещу вариант, с нажатием*/

int a=0; //переменная-счётчик
if (PINB.0==0) { //если кнопа нажата...
PORTB.1=0; //включили зумер.

while ((PINB.0==0)&(a<1000)) { a++; }; //пока кнопа нажата "И" а меньше 1000 увеличиваем а на 1
if (a==1000) { //если причиной вылета цикла было достижение значения 1000, то есть кнопку держали достаточно долго
a=0; //а=0
PORTB.1=1; //зумер выключили
//тут делаем то, что надо
};


};



};

Это не сказать, что супер правильно, зато просто.

Добавление от 20.06.2007 17:01:

Но с дребезгом один фиг надо бороться схемотехнически, то есть RC цепочками. По опыту - ни один софтовый метод с RC не сравнится. Так что даже при введении в программу проверки дребезга, RC обязательно!

КРОКОДИЛ
Я ж говорю -на ATtiny2313 ножек нехватит.
Можно извратиться.
Один керамический кондёр и набор резисторов у каждой кнопки. По времени заряда-разряда кондёра через резисторы кнопок различаем эти самые кнопки. Теоретически, на одну лапу можно неограниченное число кноп повесить. Практически... Ну, штук 8 можно.

873. КРОКОДИЛ, 21.06.2007 03:13
Dikoy
Много раз наблюдал, как люди в таком интерфейсе путались (когда программа ждет отпускания кнопки).
Чтоб не путались, по нажатию включаем зумер или светодиод.

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

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

Теоретически, на одну лапу можно неограниченное число кноп повесить. Практически... Ну, штук 8 можно.
С кнопами разберусь как нибудь -може микру другую еще найду,сейчас нужно с програмами разобратся.
В простейшем случае так:
Спасибо! буду разбиратся.
Ты смотрел кнопы которые я написал? Меня интересует кнопа "вверх" и кнопа "вниз" -можно ли для if писать сразу несколько условий в скобках? Компилятор раз пропускает такие записи, раз не пропускает..... Но я думаю что скорей всего компилятор глючит.-в ближайшее время поробую переустановить.

Dikoy

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

874. K_AV, 21.06.2007 15:02
КРОКОДИЛ
Во-первых, по определению:
1.4.4. Оператор if
Формат оператора:
if (выражение) оператор-1; [else оператор-2;]
Выполнение оператора if начинается с вычисления выражения.
Далее выполнение осуществляется по следующей схеме:
- если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.
- если выражение ложно (т.е. равно 0),то выполняется оператор-2.
- если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.

Как видно, выражение в IF должно быть одно.

Во-вторых, есть такая штука в языке C:
1.3.11. Операция последовательного вычисления
Операция последовательного вычисления обозначается запятой (,) и используется для вычисления двух и более выражений там, где по синтаксису допустимо только одно выражение. Эта операция вычисляет два операнда слева направо. При выполнении операции последовательного вычисления, преобразование типов не производится. Операнды могут быть любых типов. Результат операции имеет значения и тип второго операнда. Отметим, что запятая может использоваться также как символ разделитель, поэтому необходимо по контексту различать, запятую, используемую в качестве разделителя или знака операции. Запятая имеет наименьший приоритет в порядке выполнения операций.

Это то, что у тебя в результате под IF() написано. Зачем оно тебе надо - неясно. Если тебе требуется одновременное выполнение этих двух условий (которые в скобках просле IF) - нужно между ними не запятую, а "&". Тогда в скобках будет одно выражение - результат выполнения этого "лог.И", а каждый из операндов для него предварительно вычисляется.

А ошибку компилятор тебе выдавал в твоем примере
код:
 ABC= REGN
if(!KEY_DOWN,(ABC!=START_BAND)){ //здесь компилятор выдает почемуто ошибку -missing';'

не по поводу IF(), а из-за того, что после последней команды перед IF точка с запятой не стоит (вроде как признака конца предыдущей команды не было, а уже вроде новая команда пошла. Компилятор в растерянности...).

Я правильно понял, в чем у тебя была проблема?

дополнительно можно отметить, что написанное у тебя "while(1) {}" - это бесконечно выполняемый цикл, т.к. внутри скобки - константа "1", которая всегда "не 0" и нет причин для прекращения выполнения цикла while.

875. Dikoy, 21.06.2007 15:14
КРОКОДИЛ
при попадании МК под излучение собственного же передатчика все данные в еепроме разрушаются хотя передатчик не шибко то мощный =10ват максимум,причем вся остальная программа не нарушается.
Ну дык либо милитари исполнение (не продадут) либо экран. Делов то

можно ли для if писать сразу несколько условий в скобках?
Можно. Каждое условие даёт ответ ДА (1) или НЕТ (0). Между условиями стоят обычные логические операции И, ИЛИ и т.п. Чтобы if пропустил условия, надо чтобы из логический результат был равен 1 (то есть ДА). Иначе if их не пропускает. Тут можно использовать ещё знак отлицания "!". Т.к. НЕ ДА, или !ДА, это НЕТ и наоборот.
Вот пример из моего кода:
while ((PINB.0==0)&(a<1000)) { a++; }; //пока кнопа нажата "И" а меньше 1000
Если ответ на вопрос, "нажата ли кнопа?" ДА и ответ на вопрос, "мешьше ли 1000 а?" тоже ДА, то их И будет тоже ДА и while будет крутиться.
Если бы там был знак ИЛИ, то цикл крутился при наличиии любого из условий.

876. КРОКОДИЛ, 22.06.2007 02:31
Dikoy
Ну дык либо милитари исполнение
А по подробней можно?
while ((PINB.0==0)&(a<1000))
Понял -значит мне нужно написать вот так:
if((!KEY_DOWN)&(ABC!=START_BAND)){
while (1){
ABC=(REGN + 5);
};
};
или нет? - выражение (!KEY_DOWN) понятно что будет единицей при нажатой кнопке а вот (ABC!=START_BAND) неизвестно чему будет равно Ага вроде понял здесь важна не цифра а результат логической операции -верно или неверно выражение -правильно?

Добавление от 22.06.2007 02:39:

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

Добавление от 22.06.2007 03:00:

K_AV
Зачем оно тебе надо - неясно

if((!KEY_DOWN)&(ABC!=START_BAND)){
while (1){
ABC=(REGN - 5);
};
};
Вобщем здесь смысл такой- понижать частоту пока нажата кнопка KEY_DOWN и пока значение переменной ABC не достигло начала диапазона.
дополнительно можно отметить, что написанное у тебя "while(1) {}" - это бесконечно выполняемый цикл, т.к. внутри скобки - константа "1", которая всегда "не 0" и нет причин для прекращения выполнения цикла while.
Ну так здесь и нужно бесконечно понижать частоту пока нажата кнопка. Или while нельзя ставить оператором для if ?
а из-за того, что после последней команды перед IF точка с запятой не стоит (
ОЙ! Спасибо! -достала меня собственная невнимательность!

Добавление от 22.06.2007 03:11:

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

877. majorPAE, 22.06.2007 08:33
КРОКОДИЛ
Еще один вопрос - как мне закольцевать частоту? Вот я например нажал кнопку KEY_UP и неотпускаю -частота дошла до верхнего предела и остановилась, а мне нужно чтобы она дойдя до верхнего предела перескочила на нижний и снова начала увеличиватся - как это сделать?
Еще один if, на значение частоты...

878. K_AV, 22.06.2007 09:50
КРОКОДИЛ
"милитари исполнение" Многие изделия (в т.ч. микросхемы) выпускаются в нескольких вариантах, одинаковых по функционированию, но разных по стойкости к воздействующим факторам. "Commercial" - обычное, коммерческое, "Industrial" - промышленное (более широкий диапазон температур), "Automoutive" - автомобильное (еще шире температурный диапазон плюс устойчивость к вибрациям), "Military" - военное (дополнительная устойчивость к заданному перечню спецфакторов). Ну еще "Aerospace" бывает - для авиации и космоса. Так вот Dikoy и пишет, что милитари тебе не продадут .
Насчет _твоего_ бесконечного цикла. Для IF условие выполнения проверяется один раз - при входе. Далее запустится твой while(1) {...} и никогда не закончится, будет крутиться бесконечно. Условия выхода из него не предусмотрено. И кнопка внутри while не проверяется. Вместо (1) напиши (!KEY_DOWN), а внутри цикла {...} вставь обновление значения этого самого KEY_DOWN.

Добавление от 22.06.2007 10:07:

"как мне закольцевать частоту?"
majorPAE уже про дополнительный IF написал.
IF (ABC == END_BAND) ABC=START_BAND;

879. Dismon, 22.06.2007 10:47
КРОКОДИЛ
Ну так здесь и нужно бесконечно понижать частоту пока нажата кнопка.

У тебя получится так:
если нажали кнопку, начинается бесконечный цикл, который никогда не завершится. .

то, что тебе нада выглядит примерно так:
код:

while ((!KEY_DOWN)&(ABC!=START_BAND))
{
ABC=(REGN - 5);
};

880. Dikoy, 22.06.2007 20:11
КРОКОДИЛ
верно или неверно выражение -правильно?
Ага. Просто в информатике под ДА принято понимать единицу, под НЕТ - ноль.

881. КРОКОДИЛ, 25.06.2007 02:26
majorPAE
Еще один if, на значение частоты...
Все гениальное всегда просто!


K_AV
а внутри цикла {...}

Dismon
то, что тебе нада выглядит примерно так:
Я тут подумал немного и прокрутил програму на AvrStudio4.12 Вобщем симуляция показала что циклы while на кнопках не нужны так как каждое изменение частоты должно передаватся в синтизатор и на дисплей, а сама функция choice_channel у меня уже включена в глобальный цикл while в void main(void) поэтому достаточно одного изменения частоты за один проход цикла. Kнопки будут выглядеть примерно так:
if((!KEY_DOWN)&(ABC!==START_BAND))
{

delay_ms(20);
ABC+5;
}
if(ABC==START_BAND)
{
ABC==END_BAND;
}
void main(void)
{
synt_init ();
while (1)
{
choice_channel();

} ;
}

Добавление от 25.06.2007 02:43:

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

882. majorPAE, 25.06.2007 16:10
КРОКОДИЛ
Но теперь ваще стало непонятно как написать сканирование,
Сканирование=регулярное нажатие кнопки увеличения частоты на заданный шаг...
Палец на кнопке заменяет событие в МК: переполнение таймера, окончание задержки в N мкСек(мСек, Сек), отсутствие сигнала несущей...

883. Tahoe, 25.06.2007 20:32
КРОКОДИЛ
Не смотрел сначала, но вот тут, видимо, есть косяк:
код:
( (!KEY_DOWN) & (ABC!=START_BAND) )

Вместо "&" напиши "&&". Т.е. что бы это твоё "И" было логическое, а не арифметическое.
Например выражение ( 2 & 4 ) == FALSE. А выражение ( 2 && 4 ) == TRUE. В первом варианте 2 и 4 рассматриваются как числа, а во втором 2 и 4 рассматриваются как "не ноль", т.е. как true.

884. КРОКОДИЛ, 26.06.2007 05:20
Tahoe
Т.е. что бы это твоё "И" было логическое, а не арифметическое.
Спасибо! Понял.



majorPAE
Сканирование=регулярное нажатие кнопки увеличения частоты на заданный шаг...
Не здесь у меня на писано так что кнопку достаточно нажать и удерживать а частота будет расти автоматически с каждым проходом цикла while (1) в мейне.
Тока теперь непонятно как зафиксировать кнопку програмно? тоесть имитировать удержание кнопки, а при повторном ее нажатии выключать сканирование?



Tahoe
Не смотрел сначала, но вот тут, видимо, есть косяк:
( (!KEY_DOWN) & (ABC!=START_BAND) )
Тут я чегото запутался -в выражении (ABC!=START_BAND)при неравенстве цифры буфера цифре начала диапазона результатом выражения будет ноль или единица? В смысле частота должна понижатся только когда результатом обеих выражений будет единица, тоесть при нажатой кнопке и при неравенстве (ABC!==START_BAND)

885. Tahoe, 26.06.2007 06:19
КРОКОДИЛ
Всё просто, на самом деле.

если( истина )
{
// тогда попали сюда
}

Заметь, никаких "1" или "0" нет. Есть "истина" и "ложь". Как это представляется в контроллере - дело десятое.

В твоём случае:
если( ABC != START_BAND )
...

То бишь твоё выражение ABC!=START_BAND есть "истина", когда ABC действительно _не_равно_ START_BAND. А ещё точнее:

( (!KEY_DOWN) && (ABC!=START_BAND) )

если( истина и истина )
...

Т.е. первая истина, это когда твоя KEY_DOWN==ложь ( небось сейчас тихо фигеешь, как ты круто завернул, да? на самом деле вполне нормально ). А вторая истина, когда ABC != START_BAND. И вот когда оба условия "истина", тогда твой if ( ну или while ) срабатывает. А с одним & у тебя получилось бы только одно условие, т.е. только одна "истина".
Т.о. твоё выражение будет срабатывать когда оба условия выполняются, т.е. когда ( КНОПКА_НЕ_НАЖАТА ) И ( ABC НЕ РАВНО НАЧАЛУ ДИАПАЗОНА ).

Когда работаешь с условием, нет никаких "1" или "0". Есть "истина" и "ложь". Если копнуть чуть глубже, то обычно "ложь" это "0", а "истина"... А вот ни фига, это не "1". Это любое число, кроме "0".

Кстати, в итоге приходим к нормальному, человеческому описанию алгоритма. Т.е. "если кнопка не нажата и если *** не в начале диапазона"... А заодно и название человеческое для ABC придумать не помешает.

Добавление от 26.06.2007 06:41:

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

код:

#define SCAN ( 1 << 7 )
#define AUTO ( 1 << 6 )
...
#define CLEAR ( 1 << 0 )


main()
{

while( 2 ) // обрати внимание, это не "2", это "не ноль", хошь можем вместо "2" поставить "9"
{
...
if( KeyPressed( KEY_DOWN ) )
{
State ^= SCAN;
}
...
if( State & SCAN )
{
// do something
}
...
delay_ms( 10 );
}

}

886. КРОКОДИЛ, 27.06.2007 02:37
обрати внимание, это не "2", это "не ноль", хошь можем вместо "2" поставить "9"
Так а как это понять?

887. Tahoe, 27.06.2007 03:25
КРОКОДИЛ
Так а как это понять?
Как "while( истина )".

888. КРОКОДИЛ, 27.06.2007 03:58
Tahoe
( истина )".
Понятно что истина
Непонятно чем конкретно будет отличатся while( 2 ) или while( 9 ) от while( 1 ) ?

Добавление от 27.06.2007 04:03:

#define CLEAR ( 1 << 0 )
А этот изврат для чего?

889. Tahoe, 27.06.2007 04:33
КРОКОДИЛ
Непонятно чем конкретно будет отличатся while( 2 ) или while( 9 ) от while( 1 ) ?
Абсолютно ничем не будут отличаться. Потому я и акцентировал на этом внимание.

#define CLEAR ( 1 << 0 )
А этот изврат для чего?

Собсно как и всё остальное в программировании - для удобства. Пока не вылезаешь за 8 бит, можно, конечно, дефайнить всё как
0x01
0x02
0x04
0x08 и т.д.
Но даже тут удобнее написать тупо:
( 1 << 0 )
( 1 << 1 )
( 1 << 2 )
( 1 << 3 )

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

890. psnsergey, 27.06.2007 11:21
КРОКОДИЛ
Непонятно чем конкретно будет отличатся while( 2 ) или while( 9 ) от while( 1 ) ?
В Си принято, что лог. 0 есть нуль, а лог. 1 - всё, что не нуль - неважно, какое это число, целое или вещественное (с плавающей запятой). Дело в том, что в машинном коде проверка, нуль ли некоторое число, осуществляется быстрее всего - и именно её чаще всего и используют.

891. КРОКОДИЛ, 27.06.2007 11:51
Tahoe
И, кстати, представь, какая развлекуха бывает, когда переменная или порт не 8-ми, а 32-х битный.
Понятно Вот только не могу понять общую логику всей твоей записи - видимо я чегото недоучил
Вот этой:
код:
#define SCAN    ( 1 << 7 )
#define AUTO ( 1 << 6 )
...
#define CLEAR ( 1 << 0 )


main()
{

while( 2 ) // обрати внимание, это не "2", это "не ноль", хошь можем вместо "2" поставить "9"
{
...
if( KeyPressed( KEY_DOWN ) )
{
State ^= SCAN;
}
...
if( State & SCAN )
{
// do something
}
...
delay_ms( 10 );
}

}


Добавление от 27.06.2007 12:03:

psnsergey
В Си принято, что лог. 0 есть нуль, а лог. 1 - всё, что не нуль - неважно
Так я ж поэтому и спрашивал
Кстати тут вопрос возник -можно ли будет применить все это дело в качестве ГКЧ для измерителя АЧХ? Тоесть PLL и MK включенные в режиме быстрого сканирования? A то надоела мне катинка которая гуляет по экрану то влево то вправо!

892. Dikoy, 27.06.2007 15:16
КРОКОДИЛ
#define CLEAR ( 1 << 0 )
А этот изврат для чего?

Бит номер ноль (например, нулевую лапку порта или нулевой бит регистра или переменной) установить в состояние 1.
CLEAR ( 0 << 6 ) - шестой бит в состояние 0 и т.д.

893. КРОКОДИЛ, 28.06.2007 01:40
Dikoy
А это как понять?
State ^= SCAN;

894. Tahoe, 28.06.2007 03:00
КРОКОДИЛ
А это как понять?
Значком "^" обозначается операция XOR ( "исключающее ИЛИ" ). Это из той же серии, что и "&" ( AND ), "|" ( OR ) или "~" ( NO ).

State ^= SCAN;
Это упрощённая запись вот этого:
State = State ^ SCAN;
Т.е. в переменной State каждый раз будет переключаться бит SCAN. Если он сейчас "1", то станет "0". Если "0", то станет "1".

895. SAA, 28.06.2007 07:10
цитата:
Tahoe:
КРОКОДИЛ
А это как понять?
Значком "^" обозначается операция XOR ( "исключающее ИЛИ" ). Это из той же серии, что и "&" ( AND ), "|" ( OR ) или "~" ( NO ).

State ^= SCAN;
Это упрощённая запись вот этого:
State = State ^ SCAN;
Т.е. в переменной State каждый раз будет переключаться бит SCAN. Если он сейчас "1", то станет "0". Если "0", то станет "1".

GCC нормально отрабатывает битовые поля, можно и так сделать:

код:

typedef struct{
unsigned char
SCAN : 1,
b1 : 1,
b2 : 1,
b3 : 1,
b4 : 1,
b5 : 1,
b6 : 1,
b7 : 1;
} sState;

typedef union{
sState f;
signed char val;
} uState;

register uState STATE asm("r16");

STATE.val = CONST_VALUE; // Так можно работать с значением всех битов
STATE.f.SCAN = 1; // Устанавливать бит
STATE.f.SCAN = 0; // Снимать бит
STATE.f.SCAN = !STATE.f.SCAN; // (устраивать триггер) как в случае с XOR

if(STATE.val == valq) // Так что то проверять на равенство всего комплекса бит

if(STATE.f.SCAN) // Так что то проверять на "поднятие" бита-флага

.......................
if(!STATE.f.SCAN) // Так что то проверять на "снятие" бита-флага

.......................

896. КРОКОДИЛ, 28.06.2007 08:50
Tahoe
Значком "^" обозначается операция XOR ( "исключающее ИЛИ" ). Это из той же серии, что и "&" ( AND ), "|" ( OR ) или "~" ( NO ).
ЗЫ.А я прочел "^" как возведение в степень! -потому и ничего не понял

Добавление от 28.06.2007 08:57:

SAA
можно и так сделать:
Спасибо! Буду дальше думать.

897. kirich, 01.07.2007 20:47
Если кто то есть из Харькова, требуется небольшая помощь.
Много раз пытался разобраться с программированием, так в итоге ничего и не вышло.
Есть небольшая задачка, сдвоенный диммер с локальным управлением (никаких ДУ и пр), есть ориентировочный алгоритм управления, могу сделать всю железную часть (микруху в панель либо внутрисхемное программирование), но надо написать программу.

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

Если интересно, то могу тут описать алгоритм управления, может кто то поможет

898. DrAG0n, 02.07.2007 04:52
я такую штуку делал в своем проекте "выключатель света+вентилятора для ванной", ATMEGA8+дискреты, управление от гальв. развязанного геркона, если надо - подскажу.

899. Dikoy, 02.07.2007 13:28
kirich
сдвоенный диммер
А що це?

900. kirich, 03.07.2007 00:10
Dikoy
А що це?
Правильнее все таки было бы назвать строенный.

Полочка над кроватью, на ней смонтировано 3 галогенки.
Возле крайних стоят сдвоенные кнопки (переделанный обычный импортный выключатель, потому возможна регулировка кнопками +\- , и таких получается 2 клавиши).
Одна клавиша регулирует яркость установленной рядом с ней лампы (соотв возле второй крайней лампы такой же выключатель).
Вторая регулирует +\- средней лампы (возле второй крайней лампы стоит такой же, запараллелен с первым), но при включении или начале регулировки, передается управление к крайним лампам.
При включении все лампы начинают светить с одной яркостью.
Либо какая то минимальная, либо такая как у лампы с минимальной яркостью на данный момент.
После этого при помощи второй клавиши (которая запараллелена с другой такой же, расположенной с противоположного края) регулируем синхронно яркость всех 3 ламп.
Если после этого нажать на + или - первой клавиши, то расположенная рядом лампа остается светить как светила, 2 другие выключаются, и после этого управление яркостью этой лампы передается клавише которая установлена рядом с ней. (Но если клавиша была нажата не во время свечения всех ламп, то она только регулирует яркость лампы которая рядом с ней.

Регулировка может быть как по переменке 220 или 12 Вольт (лампы галогенки, транс 50Гц, либо импульсный, который допускает регулировку с симистором на входе), так и по постоянке (импульсный БП, регулировка ШИМ с использованием ключа на полевике).

Т.е. имеем 3 регулятора яркости, 2 из них управляются индивидуально, 1 может управлять всеми тремя нагрузками одновременно.
Решение, либо 3 регулятора с обменом кто кем управляет, либо 1 проц, который всем занимается.

Управление либо режим +\- где клавиша имеет 2 режима, либо 1 контакт, по алгоритму как в К145АП2 (нажал-отпустил, вкл или выкл, пождержал регулировка + или -)

Попробовал нарисовать блок-схему, если что непонятно, пишите.

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

901. Dikoy, 06.07.2007 15:43
КРОКОДИЛ
Ты вот эту микросхемку (http://focus.ti.com/docs/prod/folders/print/tle4275-q1.html) видел?
Параметрический стабилизатор, заточен на питание от бортсети, встроенный супервайзер и стартовый ресет!

902. КРОКОДИЛ, 07.07.2007 02:49
Dikoy
Ты вот эту микросхемку видел?
Не,раньше невидел. Скачал даташит,- интересная штуковина. Очень интересно как она поведет себя в реале? Особенно в советских авто? Меня больше интересует сохранность аппаратуры при переполюсовке или при выходе из строя регулятора напряжения бортсети! -это довольно чАсто происходит.А еще бывает что юзер при работающем двигателе снимает аккумулятор!

Добавление от 07.07.2007 03:10:

Pyku_He_oTTyda
Стукнись ко мне на мыло которое в инфо, а то я тебе писал на мыло через конфу а ответа нет,наверно сервер кривой.

903. Dikoy, 07.07.2007 15:02
КРОКОДИЛ
Очень интересно как она поведет себя в реале?
Да думаю нормально... Поставь резистор ом дцать и стабилитрончик вольт на 27. Хотя там в этой серии много микрух, есть с уже встроенной защитой, но без супервайзера и ресета...

904. Pyku_He_oTTyda, 07.07.2007 17:39
КРОКОДИЛ
Написал

905. КРОКОДИЛ, 08.07.2007 02:37
Dikoy
Да думаю нормально...
Попробую найти на наших Украинских фирмах.
Поставь резистор ом дцать и стабилитрончик вольт на 27.
Не, я ставлю предохранитель а после него два мощных 16вольтовых стабилитрона впаралель с плюса на минус, и еще два мощных диода паралельно стабилитронам -защита от переполюсовки, а потом уже 7805 микру с эмитерным повторителем на КТ819, -шибко громоздко получается но зато надежно, -даже если вся проводка в авто сгорит трансивер живой останется.

906. Dikoy, 09.07.2007 03:44
КРОКОДИЛ
а после него два мощных 16вольтовых стабилитрона впаралель с плюса на минус, и еще два мощных диода паралельно стабилитронам -защита от переполюсовки
Всё это решается одним TVS диодом А эмиттерный повторитель штука хорошая, только транзюк то до 50 вольт вроде, а должОн до 160 держать, чтобы толк был...

907. Большой ЮХ, 10.07.2007 16:09
Доброго дня.
Чтото я совсем залип. Не работает таймер(( остается в цикле тайммера навсегда:
код:

nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\1200def.inc"
.list


.def Temp =r16
.def Mark240 =r17

rjmp Begin;

Timer:
in Temp,TCNT0;
cp Temp, mark240
Brne Timer;
ret;


Begin:
ldi temp, 0b00000101;
out TCCR0, temp;
ldi mark240, 240;


Loop:
sbi PortB, 0;
rcall Timer;

cbi PortB, 0;
rcall Timer;

Rjmp Loop;


908. КРОКОДИЛ, 11.07.2007 01:48
Dikoy
Всё это решается одним TVS диодом
У нас цивилизация еще до этого недошла!
а должОн до 160 держать, чтобы толк был...
Так два мощных стабилитрона перед микросхемой и обрезают выбросы до 16 вольт А два в паралель чтобы ток стабилизации увеличить - чтобы предохранитель вовремя расплавился -тоесть при сильно повышенном напряжении избыточный ток пойдет не через схему а через стабилитроны.

909. Dikoy, 11.07.2007 03:09
КРОКОДИЛ
тоесть при сильно повышенном напряжении избыточный ток пойдет не через схему а через стабилитроны.
А их ёмкость не слишком офигительная? ИМХО от коротких выбросов они совсем не спасут... Тут только индуктор с капацитором...

910. КРОКОДИЛ, 12.07.2007 01:30
Dikoy
Тут только индуктор с капацитором...
С кем? C кем?

911. Dikoy, 12.07.2007 02:35
lc

912. КРОКОДИЛ, 12.07.2007 02:52
Dikoy
Ну дык LC фильтр по питанию в автомобильной технике это само собой разумеется

913. Apex_t, 19.07.2007 17:35
DrAG0n
делал в своем проекте "выключатель света+вентилятора для ванной", ATMEGA8+дискреты, управление от гальв. развязанного геркона


Выложи, если можешь, проект.

914. КРОКОДИЛ, 31.07.2007 00:49
ALL
Есть ли у кого нибудь описание алгоритма работы частотомера на руском языке или пример програмы для него на Си для AVR? Если есть то поделитесь пожалуйста.

915. Dikoy, 31.07.2007 01:42
Смотря чем ты частоту мерить собрался - программно или таймером. Последнее ещё зависит от самого МК.

916. КРОКОДИЛ, 31.07.2007 12:27
Смотря чем ты частоту мерить собрался - программно или таймером. Последнее ещё зависит от самого МК.
А как лучше???
Я хотел придумать чтото типа вот этого - http://www.cqham.ru/trx81_02.htm
но хлопцы уже придумали до меня, хочу только заменить PLL на более высокочастотный - до 2,8гига. Взял у них исходник, а он на асемблере И кусочками -каждая подпрограмма отдельным файлом -короче вообще нифига немогу понять!

917. Dikoy, 31.07.2007 13:45
Счётчиком лучше, но сложнее.

Так спроси у них, в какой подпрограмме идёт обмен с микрой. Какую именно ты хош взять?

918. КРОКОДИЛ, 01.08.2007 02:11
Dikoy
Так спроси у них, в какой подпрограмме идёт обмен с микрой. Какую именно ты хош взять?
Там написанно, но только на асме смысл непонятен
Какую именно ты хош взять?
LMX2326.

919. КРОКОДИЛ, 02.08.2007 03:03
Dikoy
Вот положил сюда архив с прожектом - http://slil.ru/24692833

920. Dikoy, 03.08.2007 04:05
Завтра почитаю.
У меня отпуск с 6-го, по этому сейчас весь на ушах - подбираю хвосты, всё оформляю Некогда...

921. КРОКОДИЛ, 03.08.2007 16:59
Отпуск это хорошо!!! И время выбрал удачное - жара пошла уже на убыль - водка не такая теплая будет

922. Dikoy, 04.08.2007 04:02
КРОКОДИЛ
Это у вас там в приазовье жара... А у нас неделю уже дожди, а поедем мы компашкой в зеленя, за 800 км, на Дон (примерно 400 км восточнее Луганска, но на российской территории). ХЗ какая там погода

Твой архив почитал - ничерта не понятно. Писал любитель, код путаный, коментов нет... Что где происходит и как понять можно. Тока если б он как в Си задефайнил ВСЕ значения. А то он в equ описал от силу половину... Что-нить поменяешь, и ой.
ИМХО проще с нуля написать на Си, чем разбирать ту многоэтажку...

923. КРОКОДИЛ, 04.08.2007 10:43
Dikoy
ИМХО проще с нуля написать на Си, чем разбирать ту многоэтажку...
Так я ж потому про алгоритм и спрашивал, как LMXой управлять я уже знаю а как остальное написать ХЗ. Мой частомер работает только до 230мгц а хотелось бы повыше. А фирменный приборчик который до трех Гиг меряет у нас стоит от 300 до 500$ -не по карману.А тут какраз получил 48мые меги и дисплеи 2х16 -какраз можно и частотомер сваять а вторую строку приспособить чтоб уровень вч сигнала через АЦП показывала ,может к зиме и програму напишу.

924. Dikoy, 04.08.2007 15:56
КРОКОДИЛ
Ну дык спросил бы у них описалово.
Я так понял, частоты до сколько-то там они мериют самим МК. В программе есть инициализация таймера. то есть по первому изменению порогового детектора (идёт прерывание) на входе счётчик запускается, по второму он останавливается и считывается его значение. Дальше математика.
Каким образом через LMX работает я не знаю.

925. КРОКОДИЛ, 05.08.2007 03:52
Dikoy
Каким образом через LMX работает я не знаю.
Они используют только часть LMX просто как внешний делитель частоты, а контролер выдает на него неизменный код который обеспечивает постояннвй не меняющийся коофициент деления, а далее идет самый обычный частотомер.
В программе есть инициализация таймера. то есть по первому изменению порогового детектора (идёт прерывание) на входе счётчик запускается, по второму он останавливается и считывается его значение. Дальше математика.
Так вот это мне и непонятно как програмно организовать?, и методику расчетов тоже незнаю

926. Dikoy, 05.08.2007 21:17
КРОКОДИЛ
Так вот это мне и непонятно как програмно организовать?,
По пенрвому прерыванию (первое или второе определяешь по состоянию флажка) записываешь в таймер число, которое соответствует его настройке. Это и есть старт. По второму прерыванию пишешь 0. Параллельно, из регистра таймера считываешь, сколько он насчитал.
Тут в теме про МК это разжёвано, поищи.

927. КРОКОДИЛ, 06.08.2007 01:33
Dikoy
По второму прерыванию пишешь 0.
Так а прерывания ваще откуда там берутся? или вернее от чего?

928. КРОКОДИЛ, 08.08.2007 02:59
ALL
У меня сегодня кодевижен сошел с ума -при попытке компилировать ране нормально компилировавшийся проект выдает табличку "Error occured during assembly." Что переводится примерно как "Ошибка произошла во время сборки" Потом оказалось что табличка выскакивает при компиляции любого проекта, и даже проектов из примеров самого кодевижена! В навигаторе появляется надпись "Undefined symbol:_main" которая указывает на листинг асемблера и в частности на надпись "RJMP _main".
Переустановка кодевижена абсолутно ничем не помогла.
Какие могут быть причины???

929. Tahoe, 08.08.2007 03:42
КРОКОДИЛ
Какие могут быть причины???
Есть такая штука, называется cstartup. Это маленькая программка, с которой процессор начинает работу. Условно говоря, это один и тот же код, который добавляется в начало каждого твоего проекта. Она выполняет ряд неких стандартных действий (например чистит память, инициализирует переменные) и передаёт управление твоему объектнику. Это всё лирика, просто что б ты понимал, как оно там устроено.
Так вот, этот cstartup передаёт управление... правильно, _main. Это тот самый rjmp, который ты видишь. "Undefined symbol:_main" означает, что у тебя отсутствует модуль _main.

Где там в кодевижн оно меняется, не знаю. А в ИАРе это радиокнопка, на два положения, в свойствах проекта, которая выбирает куда прыгать после cstartup, на "_main" или "application defined". Но думаю ты понял, что примерно искать.

930. КРОКОДИЛ, 08.08.2007 07:54
Tahoe
Но думаю ты понял, что примерно искать.
Да, ща поищу. Еще один вопрос: я тут дописываю синтезатор для любительского трансивера, так вот основная програма заняла примерно 54% флеши,а когда стал дописывать дисплей то столкнулся с непонятным явлением -написал буквально пять строчек и обьем програмы сразу же в полтора раза превысил обьем памяти тиньки! -Это так должно быть? или я чтото неправильно пишу?

931. Pyku_He_oTTyda, 08.08.2007 10:26
Может софтовых задержек напихали?

932. Tahoe, 08.08.2007 16:01
КРОКОДИЛ
написал буквально пять строчек и обьем програмы сразу же в полтора раза превысил обьем памяти тиньки!
Ну дык - "строчки в сутдию".

933. i8080, 08.08.2007 16:48
КРОКОДИЛ
У меня сегодня кодевижен сошел с ума -при попытке компилировать ране нормально компилировавшийся проект..."Undefined symbol:_main"...
Похожий случай: http://www.pro-radio.ru/controllers/4361/

934. КРОКОДИЛ, 09.08.2007 02:42
i8080
У меня эта ссылка почемуто не открывается. ъ
Pyku_He_oTTyda
Tahoe
Ничего я непихал, -взял со стандартного примера в кодевижене.
int temp;
lcd_init(16);
while (1)
{
sprintf(lcd_buffer,"t=%c%i.%u\xdfC",temp/10,temp%10);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(200);
}

Добавление от 09.08.2007 02:45:

Tahoe
Но думаю ты понял, что примерно искать
Ненашел в вижене даже примерно ничего похожего

935. Tahoe, 09.08.2007 03:15
КРОКОДИЛ
1. Декларацию lcd_buffer[] ты не привёл. Соотв., никто не знает, какого размера этот буфер.
2. Есть у меня подозрение одно. Процессоры бывают Неймановской или Гарвардской архитектуры. AVR это Гарвард. Т.е. у него шины адреса и данных раздельные. Соотв. и память флеш и RAM разные. Посмотри, возможно у тебя не флеш-памяти не хватает, а SRAM, которой гораздо меньше, чем флеш. Возможно ты её и зажрал всю своими буферами. Или у тебя именно флеш зажрался?

Добавление от 09.08.2007 03:19:

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

Добавление от 09.08.2007 03:27:

Упс, поспешил я. Наверное вот тут sprintf(lcd_buffer,"t=%c%i.%u\xdfC",temp/10,temp%10); библиотеки жирные подсосались, из-за деления.

936. КРОКОДИЛ, 09.08.2007 03:46
Tahoe
Декларацию lcd_buffer[] ты не привёл
int.
Или у тебя именно флеш зажрался?
Да вобщем 1370 чегото там получилось - наверно байт, а лимит 1024.
библиотеки жирные подсосались, из-за деления.
Да скорее всего так и есть, когда вправлю мозги вижену то перепишу под мегу48 -только с даташитом разберусь.
Кстати что на лапки АЦП нужно вешать? Обычный лестничный делитель?
Так что спрашивай того, кто тебе его насоветовал
А чё -нормальный компилер,мне нравится , -на другой переходить нехочу -потому что буду с новым интерфейсом еще год разбиратся Вообще у него крыша сьехала после того как регистрация кончилась и я его пропатчил по новой -тогда он и стал глючить -даже переустановка непомогла

Добавление от 09.08.2007 04:38:

Урра!!! Вправил мозги кодевижену!!!

937. Tahoe, 09.08.2007 05:54
КРОКОДИЛ
Кстати что на лапки АЦП нужно вешать? Обычный лестничный делитель?
Вход АЦП довольно низкоомный. Так что всё зависит от источника. По-уму, поставь операционник, по схеме повторителя. А в идеале, лучше на этом операционнике ФНЧ сгородить.

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

Да вобщем 1370 чегото там получилось - наверно байт, а лимит 1024.
А ты смотри, что он пишет. CODE-memory или DATA-memory. Но раз у тебя тини, то речь, видимо, о флеш, т.е. CODE-memory.

938. КРОКОДИЛ, 09.08.2007 11:02
Tahoe
По-уму, поставь операционник, по схеме повторителя.
Ну так там пять лапок на 48 меге, я чтото слабо вьезжаю как работают встроенные АЦП контролеров, это как сначала сначала сигнал с операционника на делитель, а с делителя уже на лапки?
Одно из достоинств IAR, кстати.
Так а где его спереть можно?-я в прошлый раз ненашел халявного.
И еще вопрос:- на некоторых схемах лапки контроллера используются одновременно для дисплея и для кнопок,- как это можно реализовать програмно?- а то мне все время лапок нехватает
видимо, о флеш, т.е. CODE-memory
Сейчас вижен заработал,посмотрел -да флеш.

939. Tahoe, 09.08.2007 17:05
КРОКОДИЛ
я чтото слабо вьезжаю как работают встроенные АЦП контролеров, это как сначала сначала сигнал с операционника на делитель, а с делителя уже на лапки?
А с какой тайной целью, ты всё делитель норовишь прикрутить?

Так а где его спереть можно?-я в прошлый раз ненашел халявного.
www.iar.com
А лекарство на ьлйже сахаре посмотреть можно.

на некоторых схемах лапки контроллера используются одновременно для дисплея и для кнопок,- как это можно реализовать програмно?
Да точно так же, как опрос кдавиатурной матрицы, например 4х4. Просто сигнал опроса задействован ещё и для динамической индикации.

940. КРОКОДИЛ, 10.08.2007 02:42
Tahoe
А с какой тайной целью, ты всё делитель норовишь прикрутить?
А х.з.
В седой древности когда я был студентом АЦП работали так- на резисторах делался ступенчатый делитель а к нему уже подключалась микросхема см. рис.
И с тех пор я с АЦП не сталкивался -поэтому и задаю может быть глупые вопросы. Или здесь все уже внутри мк? а пять лапок это пять независимых АЦП? тоесть четыре лапки отключить и только на одну подавать сигнал?
Просто сигнал опроса задействован ещё и для динамической индикации.
А как это выглядит -можешь пример какой нить кинуть?-мне 4х4 ненадо - достаточно будет просто 4 кнопок.

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

941. Tahoe, 10.08.2007 03:28
КРОКОДИЛ
В седой древности когда я был студентом АЦП работали так- на резисторах делался ступенчатый делитель а к нему уже подключалась микросхема см. рис.
То, что ты нарисовал, это скорее походит на "самодельный АЦП на коленке". Тебе эти извраты не нужны, всё давно внутри встроено. Т.е. тебя должны интересовать только нога ARef и нога входа. АЦП, именно как преобразователь, там внутри один, конечно. Но перед ним стоИт аналоговый мультиплексор. Вот на его входы ты и подаёшь сигнал. Входы, в общем случае, довольно низкоомные. Потому, что бы не подсадить сигнал, требуется для согласования поставить буфер ( операционник ).

а пять лапок это пять независимых АЦП?
Выше уже написал, но см. даташит на ТИНИ26 ( у тебя она? ): "Figure 51. Analog to Digital Converter Block Schematic".

А как это выглядит -можешь пример какой нить кинуть?-мне 4х4 ненадо - достаточно будет просто 4 кнопок.
AVR242: 8-bit Microcontroller Multiplexing LED Drive & a 4x4 Keypad (http://www.atmel.com/dyn/resources/prod_documents/doc1231.pdf) и исходники к этой аппликухе (http://www.atmel.com/dyn/resources/prod_documents/Avr242.zip) .

Вообще рекомендую поутюжить вот тут: http://www.atmel.com/dyn/products/app_notes.asp?family_id=607 Там есть ответы на многие вопросы. Причём многие с исходниками/проектами ( в основном под IAR ).

942. КРОКОДИЛ, 10.08.2007 03:52
Tahoe
но см. даташит на ТИНИ26 ( у тебя она? ):
Не я щас мегу48 мучаю -как мартышка и очки! Это я пытался написать прогу на тиньку2313 а туда дисплей не влез! -Решил перейти на мегу, а у нее еще и АЦП есть -решил и его задействовать -короче чем больше возможностей тем больше апетит
Но перед ним стоИт аналоговый мультиплексор. Вот на его входы ты и подаёшь сигнал
Так мне только одна лапка нужна

в основном под IAR
Был я у них на сайте -там нужно регистрироватся- посмотрел сколько там всего на английском заполнять нужно и чуть инфаркт не получил
А какой у него обьем у IAR ?

Добавление от 10.08.2007 04:06:

Tahoe
только нога ARef
Так а что это за нога? -я из даташита так и не понял
И еще непонятно назначение лапки AVCC.

943. Tahoe, 10.08.2007 07:26
КРОКОДИЛ
Так мне только одна лапка нужна
Ну дык и выбирай любую, какую удобнее по разводке. Из числа тех, которые вход АЦП, само собой.

А какой у него обьем у IAR ?
Наверное сейчас мегабайт 50-60.

Был я у них на сайте -там нужно регистрироватся- посмотрел сколько там всего на английском заполнять нужно и чуть инфаркт не получил
А что там смущает? Ты главное почту существующую укажи.

Так а что это за нога? -я из даташита так и не понял И еще непонятно назначение лапки AVCC.
AREF, это нога, на которую подаётся референсное напряжение. Т.е. АЦП будет измерять от 0 Вольт до напряжения на ноге AREF.
AVCC, это отдельная нога питания для аналоговой части АЦП. Что бы можно было запитать АЦП от "чистого" напряжения. Один из простых вариантов, это как в ДШ, просто подать питание с ноги VCC, но через LC-фильтр, т.е. дроссель и конденсатор.

944. КРОКОДИЛ, 10.08.2007 08:16
Tahoe
Ну дык и выбирай любую, какую удобнее по разводке. Из числа тех, которые вход АЦП, само собой.
А остальные отключить в визарде? или неимеет значения?
Наверное сейчас мегабайт 50-60
Это многовато для моего тырнета.
А что там смущает?
Английский язык. Я на Keil целую ночь разбирался в регистрации А они мне теперь постоянно свои новые проспекты высылают -так самое обидное то что ихняя прога так и не понадобилась
Т.е. АЦП будет измерять от 0 Вольт до напряжения на ноге AREF.
Круто! А я даже и незнал про такие тонкости.
Кстати как посоветуешь грамотно распредилить лапки на меге48?
Мне нужно подключить стандартный дисплей 2х16,клавиатуру, PLL и пару светодиов.Уже два дня смотрю на даташит и немогу сообразить как это правильно сделать чтоб ничего немешало друг другу, кварцу и програматору.

945. КРОКОДИЛ, 17.08.2007 03:10
Dikoy
А можешь написать как и какие фузы нужно запрограмировать на меге48 чтоб она работала с кварцевым резонатором?

946. pdk, 17.08.2007 11:39
подскажите где найти пример чтения iButton ( желательно с++)

...уже нашел. У CodeVision есть такой пример и библиотека.

947. Apex_t, 20.08.2007 21:52
Отладить можно в PROTEUS - там есть модели 1-wire

948. Dikoy, 20.08.2007 22:21
КРОКОДИЛ
Ничего я непихал, -взял со стандартного примера в кодевижене.
Дык под той строчкой скрывается туева хуча кода, который компилятор вставляет в твой хекс заместо этой строчки при сборке. Спринтф вообще коварная штука... Памяти хавает немеряно, но зато универсальная до жути.

Ну так там пять лапок на 48 меге, я чтото слабо вьезжаю как работают встроенные АЦП контролеров,
Там всё внутри, и АЦП, и коммутатор (он же мультиплексор). Как только ты в визарде включил АЦП, ножки МК перестают быть цифровыми лапами и становятся аналоговыми входами с размахом от 0 до напряжения на ARef. Туда ты можешь подать напряжение с внешнего ИОНа или напряжение питания. Входной диапазон АЦП будет равен напряжению на входе ARef. Тока посмотри предельные значения по напряжению
Ну и всё. Визард тебе сгенерит единственную функцию, которой ты сможешь считать код (именно код!) с любой из лапок. Потом этот код надо привести к величине (если надо).
Например, к вольтам.
Aref=2,5V. АЦП в восьмибитном режиме, то есть дискретность 256 точек на диапазон.
Значит, 2,5/256=дискретность_в_вольтах.
Эту дискретность умножаешь на считанный тобой код (например, 125) и получаешь входное напряжение в вольтах. Вот и всё.

Добавление от 20.08.2007 22:27:

КРОКОДИЛ
А остальные отключить в визарде? или неимеет значения?
Не, их не отключишь. Если ты АЦП включил, то все лапы заработали на аналоговых вход.
Просто заземли их на аналоговую землю. Чтоб мусор не ловили.
А ещё в природе есть МК у которых чёткой привязки лап нет вообще. Ты сам программно выбираешь какая из внутренних железок на какой лапе будет сидеть
Для разводки ну просто идеал.

А можешь написать как и какие фузы нужно запрограмировать на меге48 чтоб она работала с кварцевым резонатором?
Смотря на какую частоту...

949. КРОКОДИЛ, 21.08.2007 08:04
Dikoy
Памяти хавает немеряно, но зато универсальная до жути.
Эт я уже понял
Визард тебе сгенерит единственную функцию, которой ты сможешь считать код (именно код!) с любой из лапок. Потом этот код надо привести к величине (если надо).
Мне одна лапка нужна, а визард просит 5 буферов -тоесть можно оставить один а остальные выключить?
Как только ты в визарде включил АЦП, ножки МК перестают быть цифровыми лапами и становятся аналоговыми входами
Это плохо -мне опять нехватает лапок, а с кодом клавиатуры 4х4 пока немогу разобратся
Например, к вольтам
Может лучше к миливольтам? -Потому что с вольтами получится куча дробных чисел с которыми не хотелось бы пока связыватся, а вообще хочу перевести показания АЦП в графический вид -тоесть бегущюю дорожку из квадратиков или вертикальных черточек -как на фирменных трансиверах.Тока пока незнаю как это сделать.
И пока вообще еще не разобрался как выводить АЦП на дисплей -в разных примерах все по разному

Смотря на какую частоту...
Ваще хотел на 10МГЦ, но могу пересчитать прогу на другую частоту -можно и на 20МГЦ. А какую нужно выставлять частоту для АЦП в визарде?
А вообще мне много непонятно с лапками. Начал рисовать схему и запутался Вот смотри: на порту В висит кварец и еще будет висеть STK200 -тоесть дисплей вешать нельзя, -соответственно вешам его на порт D, а на остатки порта В нужно както изловчится и повесить кнопы и PLL.-как это грамотно сделать? И нужно ли подлючать хидер <STK LCD>? И как сделать чтобы лапка ресет стала именно ресетом?
Вот такая куча вопросов возникла при переходе на мегу48

950. 676038, 21.08.2007 16:06
КРОКОДИЛ
Я в сврем проекте на порт В (и порт D немного, PB1 ушел для ШИМ регулировки яркости подсветки) меги48 повесил и разъем для программирования (ISP), и ЛСД дисплей - все работает нормально (см. мою схему во вложении).
Выводы дисплея назначены так:
код:

#define LCD_D4 PORTB_Bit3
#define LCD_D5 PORTB_Bit0
#define LCD_D6 PORTD_Bit7
#define LCD_D7 PORTD_Bit6

#define LCD_RS PORTB_Bit5
#define LCD_EN PORTB_Bit4

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

Добавление от 21.08.2007 16:12:

Забыл добавить, что LCD аппарратно настроен только на ввод (вывод R/W подключен к GND)

К сообщению приложены файлы: 1.png

951. Dikoy, 21.08.2007 18:32
КРОКОДИЛ
Ваще хотел на 10МГЦ,
Там важно до 8 МГц или больше

и еще будет висеть STK200 -тоесть дисплей вешать нельзя,
Пачиму? Если девайс расчитан на SPI интерфейс, он поддерживает параллельное полключение с другими. Дисплей тебе ничего не отвечает, только принимает (в большинстве случаев). Максимум при программировании там фигня будет.
Вообще, дисплей куда хош вешай. Не гонись за тем, чтобы всё было на одном порту. МК пофиг, можешь хоть по всем портам свой LCD раскидать
Ресет по умолчанию ресет. Не трогай его. Лапку настрой как In P.

И нужно ли подлючать хидер <STK LCD>?
Да подключи, хуже не будет
Если функций из него не попросят, в хекс он не попадёт.

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

Добавление от 21.08.2007 18:38:

КРОКОДИЛ
Таблица 6 на 27 стр ДШ всё расписано
А в таблице 7 написано как выбрать задержку запуска МК - то есть сколько мс он будет филонить после подачи питания.

952. КРОКОДИЛ, 22.08.2007 08:52
676038
Визард генерит код драйверов для LCD только под целый порт, а вручную я раскидать LCD на два порта я несмогу -мозгов нехватитит
Dikoy
Там важно до 8 МГц или больше
Ну у меня явно больше будет, а как это должно отразится на програмировании фузов?
Вообще, дисплей куда хош вешай
На порт В дисплей повесить наверно неполучится так как на 6 и 7 пинах висит кварцевый резонатор -следовательно дисплей можно вешать только на порт D.
A PLL соответственно пойдет на порт В так как там используется только три лапки. А как быть с клавиатурой непонятно. Хорошую идею подкинул Tahoe -клавиатура 4х4 паралельно с дисплеем -но там исходник на асме и я запутываюсь в нем уже на десятой строчке
Вообще определись, для каких железок тебе нудны аппаратные ресурсы МК. Туда их и подключи. А всё что осталось раскидай по оставшимся лапам как удобно
Так не получается все раскидать -лапок мало
Ресет по умолчанию ресет
Вроде он по даташиту идет как PC6 а ресет это его альтернативное назначение?
Да еще вопрос: как МК усыплять? и как его будить потом?
Таблица 6 на 27 стр ДШ всё расписано
Пойду сражатся с английским языком

953. Tahoe, 22.08.2007 09:34
КРОКОДИЛ
Ну у меня явно больше будет, а как это должно отразится на програмировании фузов?
CKSEL3=1
CKSEL2=1
CKSEL1=1

А CKSEL0 отвечает за размах напряжения генератора. Если low power, то =1. Если full swing, то =0. Что б помех поменьше было, лучше low power, конечно. Но если кварц г*вёный, то фигово работать/запускаться будет.

но там исходник на асме и я запутываюсь в нем уже на десятой строчке
А ты не смотри на исходник. Тебе надо _только_ сам принцип понять. А принцип простой - временнОе разделение. Динамическую индикацию представляешь себе? Тут то же самое, только не на вывод, а на ввод. А поскольку принцип один и тот же, то "общие аноды" используются одновременно и для вывода на индикатор, и для ввода с клавиатуры. Т.е. эту "развёртку" задействовали одновременно для двух задач.

954. КРОКОДИЛ, 22.08.2007 14:04
Tahoe
Ну у меня явно больше будет, а как это должно отразится на програмировании фузов?
CKSEL3=1
CKSEL2=1
CKSEL1=1

Спасибо
Но если кварц г*вёный, то фигово работать/запускаться будет.
Не, кварцы мне на военке делают под заказ, -хорошие
Тебе надо _только_ сам принцип понять
Так вот -с сам прицип то я не могу вьехать
Динамическую индикацию представляешь себе?
Не практически вообще не представляю Я раньше с цифрой дел не имел,-одно дело чёнибудь спаять и залить готовую прошивку, а другое дело самому все ето придумывать
временнОе разделение.
Ну я примерно так и догадывался, но как ето будет выглядеть програмно даже представить немогу.
А как мониторится такая клава? - неужто ifами?

955. Dikoy, 22.08.2007 14:29
КРОКОДИЛ
А как быть с клавиатурой непонятно.
Можно нацеплять по кнопкам клавы весовых резисторов и подцепить к свободному входу АЦП. И ттго, каждая кнопа будет иметь своё выходное (с клавы) напряжение. 16 кнопок на АЦП с разрешением 256 точек, это 16 точке на кнопу. Даже с 5% резюками должно получиться надёжно
И того, клава займёт одну лапку АЦП, которая у тебя и так уже занята.
Поищи тут по форуму, это мысль не раз звучала.

956. КРОКОДИЛ, 22.08.2007 19:07
Dikoy
подцепить к свободному входу АЦП
Круто! Мне на фирменных агрегатах приходилось такое видеть - поначалу долго не мог вьехать как клава по одному микрофонному проводу работает
Тока я еще с обработкой данных с АЦП не разобрался -можешь какой нибудь пример кинуть -как там чего,какие там буфера создавать, и как их на дисплей выводить.

957. Dikoy, 22.08.2007 23:44
КРОКОДИЛ
можешь какой нибудь пример кинуть
Включи АЦП в визарде, он тебе всё включит и сгенерит. А дальше считай, акое напряжение (а точнее двоичный код, чтоб по 10 раз не перегонять значения) будет при замыкании каждой кнопки, вбивай в case и мониторь на здоровье. Про кондёр не забудь на входе, 0,01, чтобы весь мусор не поймать Да и дребезг подавит.

958. КРОКОДИЛ, 23.08.2007 01:36
Dikoy
Включи АЦП в визарде, он тебе всё включит и сгенерит.
Да включил уже давно и сгенерил все, -непонятно как дальше писать то? В примерах вижена MK работают только с внешним АЦП -потому и непонятно как и откуда вытаскивать код для обработки?

959. Dikoy, 24.08.2007 22:53
КРОКОДИЛ
char a,b;
a=read_adc(b); //считать в переменную а значение напряжения на канале b

Вот и всё - в а сидит значение от 0 до 255 напряжения на канале b, где 255=максимуму диапазона=ARef.

960. КРОКОДИЛ, 25.08.2007 02:12
Dikoy
a=read_adc(b); //считать в переменную а значение напряжения на канале b
Во, так бы сразу и сказал - а то я все думал что с этим read_adc делать -куда его засунуть
Тут еще один вопрос нарисовался: перед выводом содержимого регистра на LCD его нужно в десятичный вид переводить? или вижен все сам сделает?

961. Dikoy, 25.08.2007 12:36
КРОКОДИЛ
а то я все думал что с этим read_adc делать -куда его засунуть
Это самая обычная функция, возвращающая одно значение. Таких в твоём синтезаторе было несколько штук, включая функцию чтения UARTа. Если б ты тогда разобрался, сейчас не задавал бы таких вопросов

перед выводом содержимого регистра на LCD его нужно в десятичный вид переводить?
Нужно. Вижн сам ничего не сделает и в лучшем случае выдаст тебе код от 0 до 256.

962. КРОКОДИЛ, 25.08.2007 14:45
Dikoy
Нужно.
A как его переводить в десятиричный код?
Если б ты тогда разобрался,
Всему свое время -у меня же голова не дом советов -потихоньку разбираюсь.
Тут кстати ничего не получается с начальной инициализацией еепрома,сделал так как написано в руководстве, но компилятор на каждую строку выдает missing'('- так и несмог разобраться почему?
код:
eeprom unsigned char koefp[61];
koefp[0]= 0;
koefp[1]=10;
koefp[2] = 11;
koefp[3] = 1;
koefp[4]= 13;
koefp[5] = 14;
koefp[6] = 15;
koefp[7] = 16;
koefp[8] = 17;
koefp[9] = 18;
koefp[10] = 1;
koefp[11] = 20;
koefp[12] = 21;
koefp[13] = 22;
koefp[14] = 25;
koefp[15] = 56;
koefp[16] = 89;
koefp[17] = 99;
koefp[18] = 97;
koefp[19] = 55;
koefp[20] = 99;
koefp[21] = 66;
koefp[22] = 66;
koefp[23] = 98;
koefp[24] = 74;
koefp[25] = 33;
koefp[26] = 55;
koefp[27] = 23;
koefp[28] = 32;
koefp[29] = 21;
koefp[30] = 94;
koefp[31] = 54;
koefp[32] = 48;
koefp[33] = 73;
koefp[34] = 37;
koefp[35] = 83;
koefp[36] = 39;
koefp[37] = 97;
koefp[38] = 56;
koefp[39] = 65;
koefp[40] = 44;
koefp[41] = 51;
koefp[42] = 52;
koefp[43] = 83;
koefp[44] = 19;
koefp[45] = 2;
koefp[46] = 7;
koefp[47] = 3;
koefp[48] = 8;
koefp[49] = 33;
koefp[50] = 44;
koefp[51] = 55;
koefp[52] = 77;
koefp[53] = 88;
koefp[54] = 99;
koefp[55] = 105;
koefp[56] = 109;
koefp[57] = 110;
koefp[58] = 111;
koefp[59] = 112;
koefp[60] = 113;

Добавление от 25.08.2007 15:08:

Dikoy
Нужно. Вижн сам ничего не сделает
Тоесть вот такая фича не прокатит?

код:
if(TX_RX){        //передача
delay_ms(20);
i=0;
REGN+=PROMEGUTOK; //Добавление промежуточной частоты для передатчика.
printf("TX--- %d\n POWER-",REGN*125);
}
else printf("RX--- %d\n S-",REGN+PROMEGUTOK*125);

963. КРОКОДИЛ, 26.08.2007 21:36
Dikoy
А на LCD цифры можно из любой функции выводить? или только из main?

964. Dikoy, 27.08.2007 00:09
КРОКОДИЛ
A как его переводить в десятиричный код?
Математикой.
(ARef/256)*код_с_АЦП
В восмибитном режиме, есно. В десятибитном будет не 256, а 1024.

Всему свое время
Да ты пол года на месте топчешься... Если б советов слушал, в т.ч. и сони (он много чё по делу говорил) уже бы въехал в основы и остальное пошло уже как следствие.

каждую строку выдает missing'('- так и несмог разобраться почему?
Чёта потерял он. Видимо, ход твоей мысли
Без остального кода не скажу. Предполагаю, что ты стал присваивать коэффициенты сразу в месте объявления массива, а не в мейне или иной функции.
А нафига делать 61 операцию присвоения, занимая код и циклы? В объявлении массива, в скобках пишешь {0, 10, 11, 1 ... 112, 113}
И компилятор создаст массив уже с этими числами внутри.

А на LCD цифры можно из любой функции выводить?
Да, главное чтобы она в мейне использовалась.

Добавление от 27.08.2007 00:14:

КРОКОДИЛ
Тоесть вот такая фича не прокатит?
Не скажу, я с printf давно дела не имел.

965. КРОКОДИЛ, 27.08.2007 00:42
Dikoy
Да ты пол года на месте топчешься...
Ну так я ж еще и работаю A когда остается свободная минута перевариваю програмирование.
Математикой.
Это понятно, я спрашивал как сделать чтоб это отображалось на дисплее в десятиричном виде?
Предполагаю, что ты стал присваивать коэффициенты сразу в месте объявления массива,
Ну да.
А нафига делать 61 операцию присвоения, занимая код и циклы?
Ну такой пример инициализации масивов я нашел в учебнике,- потому так и написал.
код:
Пример:

int var[5]; /* 1 */

var[0] = 2; /* 2 */
var[1] = 3 + var[0]; /* 3 */
var[2] = var[0] * var[1]; /* 4 */
var[3] = (var[0] + 4) * var[1]; /* 5 */



В объявлении массива, в скобках пишешь {0, 10, 11, 1 ... 112, 113}
И компилятор создаст массив уже с этими числами внутри.

Попробую Но 61 ячейка в одну строку не влезит.
Не скажу, я с printf давно дела не имел.
Тут смысл чтоб вывести на экран содержимое REGN,но мне непонятно в каком виде оно вылезит в десятиричном или двоичном?

Добавление от 27.08.2007 02:13:

Dikoy
в скобках пишешь {0, 10, 11, 1 ... 112, 113}
Так чтоли?
eeprom unsigned char koefp[61]{10,11,18,21,52,127,132,250,138};
Опять тотже самый missing'(' и uninitialized EEPROM

Добавление от 27.08.2007 02:22:

Dikoy
А еепром обязательно типа char делать? или можно сделать типа long или int?

966. Dikoy, 27.08.2007 02:42
КРОКОДИЛ
но мне непонятно в каком виде оно вылезит в десятиричном или двоичном?
По любому в десятичном (то есть цифра, а не 1100101). Так процессор дисплея устроен.

Ну такой пример инициализации масивов я нашел в учебнике,- потому так и написал.
Ну это общий пример, демонстрирует что ты можешь сделать при объявлении. Для ПК сойдёт, но у МК это отнимет лишнюю память и 61 цикл присвоения... Конечно, если памяти хватает, можно и так. Но это топорно...

Предполагаю, что ты стал присваивать коэффициенты сразу в месте объявления массива,
Ну да.

Сделай в мейне, сразу перед while(1).

Но 61 ячейка в одну строку не влезит.
Сделай в две с разделением энтером... Насколько знаю, компилятор должен вкурить что к чему.

Добавление от 27.08.2007 02:47:

КРОКОДИЛ
А еепром обязательно типа char делать?
Ты еепром не делаешь. Ты создаёшь в еепроме нужную тебе структуру или элемент. А она может быть любого типа

Так чтоли?
eeprom unsigned char koefp[61]{10,11,18,21,52,127,132,250,138};

Хм, озадачил... Синтаксис я подзабыл уже... Ща поищу.

Добавление от 27.08.2007 02:50:

КРОКОДИЛ
Два тычка гуглём
http://ipg.h1.ru/lessons/ci/les54.html

Рассмотрим в качестве примера следующие две инициализации массивов:

int s[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} и
int s{{1, 2, 3}, {4, 5, 6, 7, 8}, {9, 10, 11}}

967. КРОКОДИЛ, 27.08.2007 03:18
Dikoy
Два тычка гуглём
Дык нужно еще ж знать что тыкать........
Рассмотрим в качестве примера следующие две инициализации массивов:

int s[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} и

Да я уже сам вьехал что нужно было приравнять -методом втыка
int s{{1, 2, 3}, {4, 5, 6, 7, 8}, {9, 10, 11}}
А это в вижене не работает
По любому в десятичном (то есть цифра, а не 1100101). Так процессор дисплея устроен.
Я спросил потому что вот такая байда на глаза попалась
код:
;**********************************************
;подпрограмма пересчёта НЕХ- десятичное число
;**********************************************
decdig:ldi temp,-1
minus:sub mult_l, temp16_l
sbc mult_h, temp16_h
inc temp
brsh minus
add mult_l, temp16_l
adc mult_h, temp16_h
ret

Только непонятно нифига

Сделай в две с разделением энтером...
А в конце первой строчки нужно будет точку с запятой ставить?

968. Dikoy, 27.08.2007 13:44
КРОКОДИЛ
потому что вот такая байда на глаза попалась
Дык это АССЕМБЛЕР! Не путай его с Си.
Вот очень старый пример:
"Прострели себе ногу на языке программирования"

C: Вы простреливаете себе ногу.

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

C++: Вы случайно создаете дюжину экземпляров объекта "вы" и всем им простреливаете ногу. Срочная медицинская помощь оказывается невозможной, так как вы не можете разобраться, где настоящие объекты, а где - те, которые только указывают на них и говорят: "А вот - я!".

Паскаль: Транслятор не позволит вам прострелить себе ногу.

И т.д. http://www.gamedev.ru/flame/forum/?id=54360


А в конце первой строчки нужно будет точку с запятой ставить?
Теоретически нет, просто рвёшь её ентером.

Добавление от 27.08.2007 13:53:

c1
;подпрограмма пересчёта НЕХ- десятичное число
Хотя в голове и крутится вариант, зачем это... Так делали для вывода двоички на дисплеи в древней рассыпушной технике. Но в любом случае для Си тебе это не надо. Он сам всё умеет.

969. Tahoe, 27.08.2007 17:12
Dikoy
"Прострели себе ногу на языке программирования"
Я эту мулю не видел раньше.

970. КРОКОДИЛ, 27.08.2007 22:58
Dikoy
Он сам всё умеет.
Это хорошо!
Тут еще один вопрос: я на этой же элементной базе хочу еще написать генератор стандартных сигналов, но поскольку у генератора огромный диапазон перестройки от 100мгц до 2800мгц то интерфейс синтизезатора типа кнопка вниз кнопка вверх здесь не прокатит. Здесь нужно набирать частоту уже непосредственно с клавиатуры -тоесть если нужно набрать частоту допустим 1956мгц то нажимаем единичку,девятку,пятерку и шестерку -естественно что порядок набора тутже отображается на лисплее,а когда набираем последнюю цифру то данные подаются на PLL.
Вот только немогу придумать как это организовать Чёто в голову не приходит никаких умных мыслей У тебя есть какие нить соображения на этот счет?

971. Tahoe, 27.08.2007 23:41
КРОКОДИЛ
Чёто в голову не приходит никаких умных мыслей
Посмотри на командную строку в какой-нить MS-DOS. Там тоже сначала набивают строку в буфер, а потом ентер жмут. А ещё стирают бэкспейсом. Но у тебя всё гораздо проще.
Кстати, можно и парой кнопок up/down обойтись. Если обрабатывать долгое нажатие/залипание кнопки. Т.е. нажал и держишь. Сначала по чуть-чуть приращение, через пару секунд на порядок быстрее и т.д.

972. КРОКОДИЛ, 27.08.2007 23:55
Tahoe
Кстати, можно и парой кнопок up/down обойтись. Если обрабатывать долгое нажатие/залипание кнопки. Т.е. нажал и держишь. Сначала по чуть-чуть приращение, через пару секунд на порядок быстрее и т.д.
Пробовал я такое -для трансивера подходит, а для точного прибора -очень неудобно в работе особенно когда работа срочная Представь сколько придется прыгать при шаге 2,5 килогерца через 1000мгц
Посмотри на командную строку в какой-нить MS-DOS. Там тоже сначала набивают строку в буфер, а потом ентер жмут. А ещё стирают бэкспейсом. Но у тебя всё гораздо проще.
Ну так, я так же и хочу, только не могу придумать как это написать
Или советуешь для начала пару операционных систем написать? Сначала MS-DOS, потом линукс, Виндовс ХР, а потом уже и программу для прибора писать

973. Tahoe, 28.08.2007 00:06
КРОКОДИЛ
Представь сколько придется прыгать при шаге 2,5 килогерца через 1000мгц
Ты не понял. Это первую секунду _удержания_ шаг 2,5кГц. Затем шаг становится 25кГц ( /50/100/500/1000 - по вкусу ). Стандартный приём, в любом трансивере, где нет мех. энкодера.

Или советуешь для начала пару операционных систем написать?
Нет, но ты уж больно резво за всё взялся. Chill out, двигайся постепенно. "Скромность украшает девушку" (с) О.Бендер ( к мадам Грицацуевой ).

974. КРОКОДИЛ, 28.08.2007 00:28
Tahoe
Ты не понял.
Да понял я, -шибко неудобно такой системой пользоватся -часто перепрыгивает нужное место - потом нужно возвращатся -короче спросонья неразрешимая задача, -я ж для себя прибор всетаки делаю а не для дяди "Сэма" А элементная часть и почти вся программа такаяже как и для синтезатора.
ты уж больно резво за всё взялся.
Ну так нужда заставляет - прибор такого уровня стоит космических денег, а нужен для работы еще десять лет назад
двигайся постепенно.
Ну так я постепенно и двигаюсь, только пишу все сразу -так для меня проще, только вот иногда бывают нужны такие языковые конструкции что сразу и несообразишь как написать
Я еще и блок управления для стиралки потихоньку пишу Там пока вопросов не возникает Правда еще с програмным ШИМом нужно будет разобратся..............

975. Tahoe, 28.08.2007 00:45
КРОКОДИЛ
часто перепрыгивает нужное место
Ну дык ускоряться надо не сразу, а постеменно. Имхо 3 градации оптимально. 2,5кГц > средний шаг > крупный шаг. Конкретные значения - по вкусу.
Я пользовался такими трансиверами. Когда всё подобрано оптимально, имхо вполне удобно.

пишу все сразу -так для меня проще
Проще запутаться.

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


еще с програмным ШИМом нужно будет разобратся
А что там разбираться? Если ты пришёл к программному ШИМу, значит ты не совсем верно выбрал процессор.

976. Apex_t, 28.08.2007 00:49
КРОКОДИЛ
Вот только немогу придумать как это организовать Чёто в голову не приходит никаких умных мыслей

И читать книжки или то о чем этот топик ВЛОМ ... Во беда.

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

КРОКОДИЛ
Правда еще с програмным ШИМом нужно будет разобратся...

Задача 8 ведь на японском написана - фиг разберешся.

977. Dikoy, 28.08.2007 02:01
Tahoe
Я эту мулю не видел раньше.
Та ладна! Мы ещё в универе её из лексикона на роботронах печатали...

Нет, но ты уж больно резво за всё взялся.
+1

КРОКОДИЛ
У тебя есть какие нить соображения на этот счет?
Есть, но излагать их тут очень долго. Я бы поискал в сети, таких проектов море. В примерах вижна есть работа с клавой.

Добавление от 28.08.2007 02:06:

Наприер так:
int a=0;
for (4 раза) {
a=(a*10)+read_key; //Где read_key - функция, возвращающая значение нажатой клавиши.
}

Вначале а==0 и значение клавиши тупо ей присвоится. Потом сумма будет умножаться и сдвигадьтся на один разряд.
И того в "а" накопится десятичная цифра частоты.

978. КРОКОДИЛ, 28.08.2007 11:37
Apex_t
Задача 8 ведь на японском написана - фиг разберешся.
Чтото типа того
Я ведь написал что нужно будет разобратся...А не о том что немогу разобратся.

Добавление от 28.08.2007 11:41:

Dikoy
for (4 раза)
А почему именно 4 раза?

Добавление от 28.08.2007 11:56:

Tahoe
Конкретные значения - по вкусу.
Ну я хочу сделать именно так -пусть это будет моей блажью
Проще запутаться.
Не, не запутаюсь Наоборот быстрее мысли развиваются.
значит ты не совсем верно выбрал процессор.
Ну так яж начинающий "процесорщик",выбирать собственно неизчего - вналичии есть только тиньки 2313 и меги 48.
Я пишу только модулями. Параллельно продумывая, как они меж собой и верхом взаимодействовать будут.
Я тоже так пишу, только невсегда получается придумать нужный модуль.

Добавление от 28.08.2007 12:02:

Dikoy
в сети, таких проектов море
Тяжело мне пока разбиратся в чужих проектах -особено в чужих дефайнах и в названиях функций.
А в проектах Apex_t вообще разобратся невозможно
Проще самому написать............

979. Dikoy, 28.08.2007 19:48
КРОКОДИЛ
А почему именно 4 раза?
Ну цифры то 4 в значении частоты. А так хоть 6 раз прокручивай и частоту вводи в герцах.
Главное суть - накопление числа по отдельным клавишам.

980. КРОКОДИЛ, 29.08.2007 00:00
Dikoy
Ну цифры то 4 в значении частоты.
Понятно Тока цифирек восемь будет, например 2385,5625 мгц -тока без запятых -нехочу с дробными цифрами связыватся.
Вначале а==0 и значение клавиши тупо ей присвоится. Потом сумма будет умножаться и сдвигадьтся на один разряд.
Слушай а как этот набор на дисплее отображать? -неужели нажатие каждой клавиши на printf выводить по отдельности? -мне так и в 48меге памяти нехватит

981. Dikoy, 30.08.2007 12:59
КРОКОДИЛ
Слушай а как этот набор на дисплее отображать? -неужели нажатие каждой клавиши на printf выводить по отдельности?
Да. И ничего с памятью не будет - видеопамять сидит в дисплее.
А принтф, если она один раз применена, уже заняла своё место. Дале хоть ты её 20 раз вызывай, места она не займёт.
Это принцип функции. Помнишь, как у меньшился объём твоей проги когда я вывел повторяющиеся оерации функцией, которую уже вызывал нужное количество раз?

982. КРОКОДИЛ, 30.08.2007 13:15
ALL
Написал вот такую фичу,но она както странно ведет себя при симуляции в AvrStudio4
код:
#include <tiny2313.h>
#include <delay.h>
#include<stdio.h>
#define UROVEN_VODI_1 PINB.0
#define UROVEN_VODI_2 PINB.1
#define TEMPERATURA PINB.2
#define VODA_KLAPAN PINB.3
#define DVIGLO_VPRAVO PINB.4
#define DVIGLO_VLEVO PINB.5
#define NAGREVATEL PINB.6
#define POMPA PINB.7

void stirka(void){
char str = 100;
if(!UROVEN_VODI_1)
{
VODA_KLAPAN = 1;
}
else VODA_KLAPAN = 0;
if ( TEMPERATURA && UROVEN_VODI_1){
NAGREVATEL = 1;
}
else NAGREVATEL = 0;

while(str && (!TEMPERATURA)&& UROVEN_VODI_1){
DVIGLO_VPRAVO = 1;
delay_us(5000);
DVIGLO_VPRAVO = 0;
delay_us(5000);
DVIGLO_VLEVO = 1;
delay_us(5000);
DVIGLO_VLEVO =0;
delay_us(5000);
str--;
}
POMPA = 1;
delay_us(200000);
POMPA=0;
}

При симуляции стрелочка доходит до if ( TEMPERATURA && UROVEN_VODI_1){ внаглую пропускает NAGREVATEL = 1; и идет дальше, затем доходит до while(str && (!TEMPERATURA)&& UROVEN_VODI_1){ и пропускает весь цикл не отрабатывая его. Если убать часть условия в котором содержится && -тогда симуляция идет нормально. Где здесь может быть косяк?
И еще вопрос -можно ли делать такие большие delay_us(200000);?

983. Tahoe, 30.08.2007 13:38
КРОКОДИЛ
внаглую пропускает
Скорее всего, проблема в том, что отсутствует модификатор volatile. Т.е. ты работаешь с ногой порта. Компиллер считывает её один раз и дальше считает, что значение всегда равно TRUE. Потому можно соптимизировать и выкинуть кусок, который всё равно никогда не используется. Попробуй так:
volatile char heat;
...
void stirka()
{
heat = TEMPERATURA;
if( heat && ... )
{
}
}

И не бойся, особо, "лишних" переменных. Компиллер соптимизирует. Главное, что бы понятно было.

Кстати, о "понятности".
1. Форматируй текст нормально - читать невозможно, глаза режет. А что хуже, сам же запутаешься в итоге.
2. Не поленись, залезь на lingvo.ru. Тогда увидишь, что "pompa" это "pump", что вместо "temperatura" прекрасно подойдёт "heat". В общем на каждый изврат найдётся кучка коротких английских синонимов. Уровень - level, двигатель - engine ( кстати, сравни с "engineer" ). Кстати, есть стандарт на сокращения. Просто выкидываешь из слова все гласные ( за исключением случая, когда слово начинается на гласную ).
Ещё. Сначала сущность, потом её характеристика. Т.е. сначала water, потом уже её level. Например: water.level, WATER_LEVEL.

Добавление от 30.08.2007 13:44:

И еще вопрос -можно ли делать такие большие delay_us(200000);?
Ну дык посмотри саму delay_us(), раз её код не привёл. Если он delay_us( char ), то макс. 8 бит, т.е. 256. Если она delay_us( unsigned int ), то макс. 16 бит, т.е. 65535. А вообще-то, если загонишь больше, например вместо макс. 65535 втулишь 70000, компиллер должен, как минимум, дать warning в этом месте.

984. КРОКОДИЛ, 30.08.2007 14:10
Tahoe
раз её код не привёл
Посмотрел в хидере - void delay_us(unsigned int n); -тоесть delay_us(200000) не прокатит, но компилер почемуто прдупреждения не дает A можно так написать:
delay_us(65535);
delay_us(65535);
delay_us(65535);
тоесть несколько пауз подряд?
Попробуй так:
Хорошо вечером попробую переписать.
( кстати, сравни с "engineer"
engineer==инженер
Не поленись, залезь на lingvo.ru.
Пойду ликбез по англицкому проходить

985. Tahoe, 30.08.2007 14:34
КРОКОДИЛ
A можно так написать:
Дык а кто ж запретит? Это вопрос удобности.

engineer==инженер
Вот именно. Читай - "моторист". Вот drive/driver благороднее звучит - водить/водитель. А тут - мотор/моторист. Мотористы мы.

986. КРОКОДИЛ, 31.08.2007 01:10
Tahoe
Попробуй так:

volatile char heat;...void stirka(){ heat = TEMPERATURA; if( heat && ... ) { }}

Попробовал нифига не помогает!
Причем
if (!heat )
{
NAGREVATEL = 1;
}
работает а вот
if (heat )
{
NAGREVATEL = 1;
}
нивкакую работать нехочет!
if (!heat && UROVEN_VODI_1)
{
NAGREVATEL = 1;
}
это тоже работать нехочет
Цикл тоже работать нехочет
while(!heat && str && UROVEN_VODI_1 )
{
DVIGLO_VPRAVO = 1;
delay_us(5000);
DVIGLO_VPRAVO = 0;
delay_us(5000);
DVIGLO_VLEVO = 1;
delay_us(5000);
DVIGLO_VLEVO =0;
delay_us(5000);
str--;
}
Если убрать одно условие например вот так:
while(!heat && str )
{
DVIGLO_VPRAVO = 1;
delay_us(5000);
DVIGLO_VPRAVO = 0;
delay_us(5000);
DVIGLO_VLEVO = 1;
delay_us(5000);
DVIGLO_VLEVO =0;
delay_us(5000);
str--;
}
тогда начинает работать! -прямо мистика какаято
Я даже AvrStudio4 переустановил но все осталось по прежнему. Хотя только переустановки наверное мало -нужно было еще реестр почистить.
А может просто нестоит на AvrStudio4 симулировать, -она ведь под асемблер заточена,- может не смогла Си нормально прожевать?

Добавление от 31.08.2007 01:19:

Tahoe
Мотористы мы
Ну моторы тоже разные бывают, мне такие моторы доводилось видеть что оёёй. Особенно от нашего шатла "Бурана" - впечатляет.........

987. Dikoy, 31.08.2007 03:51
КРОКОДИЛ
Написал вот такую фичу,но она както странно ведет себя при симуляции в AvrStudio4
Возможно скажу глупость, но попробуй побитовое И заменить просто И, то бишь вместо && написать &.
Просто вижон вещь в себе... Есть у него некоторые свои особенности...

И еще вопрос -можно ли делать такие большие delay_us(200000);?
Можно. Но лучше использовать delay_ms

Добавление от 31.08.2007 04:03:

КРОКОДИЛ
Если убрать одно условие например вот так:
А ты скобочки попробуй поставить

988. Tahoe, 31.08.2007 09:18
КРОКОДИЛ
а вот if (heat ) { NAGREVATEL = 1; } нивкакую работать нехочет!
1. Логически рассуждаем. Если в в эту ветвь никогда не заходит, то она выкидывается оптимизатором. heat мы объявили как volatile. Значит дело в "NAGREVATEL" и/или его комбинации с heat. Кстати, обзови его HEATER.
2. У тебя хоть какие-нить warnings сыпятся или всё тихо? Если сыпятся, то покажи.

Цикл тоже работать нехочет while(!heat && str && UROVEN_VODI_1 )
...
Если убрать одно условие например вот так: while(!heat && str )

Блин, я думал ты всё же сообразишь, сделать по аналогии. Я про "UROVEN_VODI_1".


P.S.
Когда будешь писать ответ, чуть выше подними глаза. Увидишь там иконку [#]. Не стесняйся, пользуйся.

989. КРОКОДИЛ, 31.08.2007 11:02
Dikoy
И, то бишь вместо && написать &.
Это я в первую очередь попробовал бесполезно!
А ты скобочки попробуй поставить
Пробовал -тоже бесполезно
Просто вижон вещь в себе...
А я больше грешу на студию -дело в том что я пытался в ней создать проект на Си -наглухо отказывается -требует скачать и установить какуюто фичу. А виженоновские проекты эмулирует но не всегда нормально.
Tahoe
Логически рассуждаем. Если в в эту ветвь никогда не заходит,
Если ! heat то заходит -все нормально! А если просто heat без не
то пропускает код Но мне то нужен heat без ! -небуду же я изза этого датчики менять.
ты всё же сообразишь, сделать по аналогии. Я про "UROVEN_VODI_1".
Дык я пытался любым путем заставить работать, поэтому переименовать неуспел
А условие можно выкинуть любое -тогда работает, но в реале я условия выкидывать немогу так как машинка будет крутится без воды или на холодную. Мне кажется здесь дело не в оптимизации...
У тебя хоть какие-нить warnings сыпятся или всё тихо?
Высыпается пара warnings -про неиспользованые функции -те которые я мейне забыл прописать.
Кстати, обзови его HEATER
Может на каждую лапку свою переменную сделать? но мне кажется что бесполезно.
Dikoy
Но лучше использовать delay_ms
А я почемуто думал что us больше чем ms

990. Tahoe, 31.08.2007 11:38
КРОКОДИЛ
Если ! heat то заходит -все нормально! А если просто heat без не то пропускает код
Ну дык ты не меняй условие, в поисках "как работает". А поставь условие "как надо" и выясняй, почему не работает.

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

А я почемуто думал что us больше чем ms
uS > микросекунда ( 0,000 001 Сек. )
mS > миллисекунда ( 0,001 Сек. )
По аналогии сравни миллиметр и микрометр ( микрон ).

991. КРОКОДИЛ, 31.08.2007 11:51
Tahoe
А поставь условие "как надо" и выясняй, почему не работает.
Я наверное лучше сделаю макетку когда будет время и проверю это все в железе, заодно будет возможность светодиодами помигать -потому что не шибко доверяю я этим симуляторам. Синтезатор тоже на VMLAB не работал вабче а в железе работает.
Например в зависимости от t_heat регулируешь heater
Не, там механический датчик -выставляешь на шкале пинтературу и по достижении он просто размыкает контакты.

992. Tahoe, 31.08.2007 14:21
КРОКОДИЛ
Не, там механический датчик -выставляешь на шкале пинтературу и по достижении он просто размыкает контакты.
Ну тогда сам Б-г велел обозвать вход/переменную как "overheat" или "overheat_sensor" ( перегрев/датчик_перегрева).

993. КРОКОДИЛ, 31.08.2007 16:17
Tahoe
Ну тогда сам Б-г велел обозвать вход/переменную как "overheat"
А это поможет?

994. Dikoy, 31.08.2007 16:24
КРОКОДИЛ
Синтезатор тоже на VMLAB не работал вабче а в железе работает.
Это который мы всей кучей писали?

995. Tahoe, 31.08.2007 17:21
КРОКОДИЛ
А это поможет?
Да. Причём очень. Если, конечно, на этом не остановишься и сделаешь понятными все остальные переменные, не будешь пренебрегать форматированием и т.д. Повысится читабельность - меньше времени будешь на месте топтаться.

996. КРОКОДИЛ, 31.08.2007 20:10
Dikoy
Это который мы всей кучей писали?
Не тот который на асме был -Алексея Темерева. А тот который кучей писали я так и несмог в VMLAD загнать хотя пять раз Сонину портянку перечитывал. А в студии он тоже глючил тоже вилы и ифы не отрабатывались -пришлось его два раза вручную переписывать -каждую буковку с клавиатуры набирать -тоже самое что и в начальном варианте тока набранное вручную -тока тогда стал симулироватся

Добавление от 31.08.2007 20:14:

Dikoy
А графическим дисплеем шибко сложно управлять?

Добавление от 31.08.2007 23:22:

Tahoe
не будешь пренебрегать форматированием
А чё у меня с форматированием не так?
А можешь на пальцах расказать как возвращающие функции работают?
А то я чёто их понять не могу Почитал "Руководство полного идиота - язык Си - Богатырев" - тоже несмог вьехать -видать я еще не совсем полный........

997. Tahoe, 01.09.2007 00:55
КРОКОДИЛ
А графическим дисплеем шибко сложно управлять?
"Широко шагаешь - штаны порвёшь." (с)

А чё у меня с форматированием не так?
Сравни форматирование в AVR краткий курс начинающим "с нуля" - avr123.nm.ru - обновлен., #982 (http://forum.ixbt.com/topic.cgi?id=48:5298:982#982) и в след. посте.

А можешь на пальцах расказать как возвращающие функции работают?
Видимо речь про callback. Вообще-то см. выше - "Широко шагаешь - штаны порвёшь." (с) А если всё же неймётся, сегодня на помойке обсуждалось (http://www.telesys.ru/wwwboards/mcontrol/1775/messages/149287.shtml) .

Почитал "Руководство полного идиота - язык Си - Богатырев"
Блин, ну ты и книжки читаешь. Ну есть же K&R. Настольная книга. http://www.google.com/search?hl=ru&client=opera&…%81%D0%BA&lr=
А то опять выйдет, как с компиляторами, симуляторами...

998. Dikoy, 01.09.2007 01:02
КРОКОДИЛ
я так и несмог в VMLAD загнать
Тьфу ё...
Выкинь ты его - дурной это симулятор. Проверяй в железе.

999. КРОКОДИЛ, 01.09.2007 01:53
Dikoy
Выкинь ты его - дурной это симулятор
Дык симуляторы все дурные -единственный в котором смог разобратся это студия и то неславабогу

Tahoe
Настольная книга. http://www.google.com/search?hl=ru&client=opera&…%81%D0%BA&lr=
Блин второй раз её скачиваю -я её в самом начале скачал тогда ничего несмог понять, -щас хоть через раз чтото понимаю

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

Не, я имел в виду типа такого:
код:
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

Чего и куда она возвращает?
А ещё непонятно насчет пауз -ведь частота кварца нигде в программе не указана и не вычисляется, каким образом процесор понимает сколько циклов нужно пропустить чтобы сделать паузу допустим в 20 милисекунд?

1000. Tahoe, 01.09.2007 10:59
КРОКОДИЛ
я её в самом начале скачал тогда ничего несмог понять, -щас хоть через раз чтото понимаю
??? А что там непонятного? Единственное, её надо внимательно читать, скакать по диагонали не прокатит.

Чего и куда она возвращает?
"Чего". ADCW. Собсно, достаточно было посмотреть перевод англ. return (http://www.lingvo.ru/lingvo/Link.asp?Ln=1&CardId=72;65;74;75;72;6e;0;4c;69;6e;67;76;6f;55;6e;69;76;65;72;73;61;6c;20;28;45;6e;2d;52;75;29&ShowBlock=1) .
"Какое оно, это <чего>". См. декларацию функции unsigned int read_adc(unsigned char adc_input).
"Куда". Туда, откуда эту функцию вызвали. Например:
dummy = read_adc( chnl_num );

каким образом процесор понимает сколько циклов нужно пропустить чтобы сделать паузу допустим в 20 милисекунд?
А он и не понимает.

1001. КРОКОДИЛ, 01.09.2007 12:42
Tahoe
"Чего". ADCW. Собсно, достаточно было посмотреть перевод англ. return.
"Какое оно, это <чего>". См. декларацию функции unsigned int read_adc(unsigned char adc_input).
"Куда". Туда, откуда эту функцию вызвали. Например:
dummy = read_adc( chnl_num );

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

1002. Dikoy, 01.09.2007 12:51
c1
unsigned int read_adc(unsigned char adc_input)
Ну и что непонятного? Такая функция возвращает значение. То есть она его вычисляет, а потом его можно присвоить любой переменной. По этому такие функции присваиваются переменным как другие переменные:
а=read_adc(b);

В скобках можно написать условие (одно или несколько). Например, в этом случае условие - номер канала. А можно и не писать. Тогда буду пустые скобки: init_adc();

При обявлении возвращающей функции ты должен указать её тип (как и у обычной переменной, ведь ты её чему-то присваивать будешь) а так ще объявить типы условий, которые в скобках:
unsigned int read_adc(unsigned char adc_input)
Вот, функция типа int, условие типа char;
Чтобы функция в конце вернула переменную А, нужно написать return A; Именно она и будет присваиваться переменной "а" в записи
а=read_adc(b);

А невозвращающие функции не могут быть ничему присвоены. Они просто ставятся в нужном месте программы. Например, delay_ms(a); пример невозвращающей функции, но у неё тоже есть условие

1003. Tahoe, 01.09.2007 13:32
КРОКОДИЛ
Так, Беня! Понимаю, что лениво, что "нет времени, а жрать хоцца" и т.д. Тем не менее, выкидываем пока все эти симуляторы/компиляторы, качаем K&R и вдумчиво курим главу "функции".

Добавление от 01.09.2007 13:37:

А какже он тогда будет паузы делать?
А как получится, так и сделает. Если думал, что он там такты будет высчитывать и т.д., то в Сях такой х***ёй никто не занимается. Это к долбанутым фанам ассемблера.
А вот ежели тебе действительно надо калиброванную задержку получить, пользуй таймер, через прерывание.

1004. КРОКОДИЛ, 01.09.2007 14:14
Dikoy
То есть она его вычисляет, а потом его можно присвоить любой переменной. По этому такие функции присваиваются переменным как другие переменные:
а=read_adc(b);

Во теперь почти все понятно Проблема была в том что компилер сам наделал функций непонятных
Тогда буду пустые скобки: init_adc();
Компилер этого не допускает почемуто.

Добавление от 01.09.2007 14:34:

Dikoy
a=read_adc(b); //считать в переменную а значение напряжения на канале b
Тока я немогу догнать что нужно написать в скобках вместо буквы b ? - сигнал у меня будет приходить на нулевой бит ADC
Или нужно написать:
а=read_adc(adc_input)???
Короче запутался

Добавление от 01.09.2007 14:49:

Tahoe
качаем K&R
Дык скачал уже.
и вдумчиво курим главу "функции".
Я ж по порядку читаю
До функций еще не добрался -застрял на printf -в принципе с самими printf все понятно, а вот на примере с переводом температуры запутался в запятых при выводе на экран
Вообще книга толковая но примеры не совсем удачные для начинающего
А как получится, так и сдел
надо калиброванную задержку получить
Ну калиброванную не надо Но если вместо задуманных 20 минут машина будет отрабатывать одну минуту или пять это тоже непорядок!

1005. Dikoy, 01.09.2007 16:30
КРОКОДИЛ
Вообще книга толковая но примеры не совсем удачные для начинающего
Просто книга по Си ВООБЩЕ, а конкретный компилятор может иметь небольшие отличия или дополнительные функции, введёные в него разработчиком. Посему некоторые функции, которые есть в ПК, в CV отсутствуют и наоборот. Так что не надо зацикливаься, если пример из KR не работат в CV

Тока я немогу догнать что нужно написать в скобках вместо буквы b ?
То и надо: 0, 2, 10, 255, но не более, потомучта b, она же adc_input, при инициализации обозвана как char. Номер канала ты туда вписываешь, цифрой. Это даже логически должно быть понятно

Компилер этого не допускает почемуто.
А ты в скобочках void пишешь при объявлении?

1006. КРОКОДИЛ, 01.09.2007 17:40
Dikoy
А ты в скобочках void пишешь при объявлении?
Дык её компилер сам уже обьявил А если в мейне попробовать написать read_adc() или а =read_adc() то компилер не пропустит -выдаст ошибку.
Номер канала ты туда вписываешь, цифрой. Это даже логически должно быть понятно
Блин -мне непонятно что конкретно мне нужно вписывать??? Запутал меня окончательно -То и надо: 0, 2, 10, 255, -откуда у меня 255 каналов? Если у меня будет работать только нулевой вход АЦП -значит в скобках нужно ноль писать? или как?

1007. CrazyElk, 01.09.2007 18:15
КРОКОДИЛ Значится ТАК. Если действительно хочется понять доподлинно как и куда возвращает функция результаты. Что именно происходить в С при написании a=someFunc(b); то прежде всего до С, asm .... и вдумчиво представляем себе АРХИТЕКТУРУ процессора что он умеет делать. Потом накладываем на это понятия программирования из раздела архитектура программ и модели памяти. Если такие понятия как сегмент данных, куча (heap), стек, сегмент кода перестали казаться китайской грамотой то тут как раз начинаем читать что такое функция как передаются в функцию на конкретном языке данные по значению и по ссылке (слово стек и указатель стека очень нам помогут) чтотакое область видимости и как размещаются статические и стековые данные.

Если грубо для статических переменных и данных (существующих вне контекста функций в том числе и статические переменные члены функции) место для хранения (адреса переменных и данных) забирается из кучи (heap). Каждая такая переменная характеризуется своим адресом в памяти в сегменте данных. С функциями и их данными тесно связанно другое понятие стек. Когда необходимо произвести вызов функции (в том числе и main) место для всех ее локальных переменных, значений ее параметров и итогового результата забирается из стека (и при этом модифицируется положение указателя вершины стека). Вский раз при этом в выделенное место в памяти на стеке копируются значения парметров вызова функции, инициализируются локальные переменные (если таковое в их объявлениях в функции заданно) и выделяется место под возвращаемый результат (для обьемных данных короткие вполне могут возвращатся из функции в регистрах процессора - но когда и для каких типов как делается в стандарте подробно расписанно). Если параметр в функцию передается по ссылке (явно по объявлению или не явно согласно умолчания языка для данного типа - например массивы по умолчанию передаются по ссылке) то этим значением лежащем на стеке служит адрес переменной значение которой передается в вызов по ссылке и внутри функции ты фактически имееш дело с теми областями памяти какие изначально зарезервировано для переменной передаваемой в функцию (а значить в общем случае модифицировать ее значение там), если параметр передается по значению то компилятор выделяет место размером в передаваемые данные и формирует кусок кода который копирует значение передаваемой переменной из того места где она расположена в выделенное на стеке место 1 в 1 - фактически делает временную переменную на стеке копирует значение параметра во временную переменную а внутри функции имеет дело с временной копией, а не с самой передаваемой переменной. Соотвественно зная где расположение вершины стека на момент выполнения операции раскладку по порядку и их размеры параметров, локальных переменных, и возвращаемого значения то используя косвенную адресацию компилятор реализует все операции с переменными внутри функции и сохранение результатов из переменной фигурирующей в return в область стека предназначенную для результата исполнения функции. А сразу после возврата из функции раз точно известно в стеке место где лежит ее результат (его тип размер и т.д.) то никакого труда компилятору не составляет сформировать код распоряжающийся результатом как того требует выражение в котором вызывается функция. Присвоить его переменной (копируя данные из области памяти на стеке в область памяти где расположена переменная) a = read_adc(b); использовать в вызове другой функцию (копируя из одной области стека в другую) myFunc(read_adc(b));, присвоить временной переменной сгенерированной самим компилятором для вычисления сложного выражения состоящего из множества вызовов и кучи математических операций над их результатами (выражение a = read_adc(b)/read_adc(c); компилятор преобразует в нечто типа tmp1 = read_adc(b), tmp2 = read_adc(c), a = tmp1/tmp2) и т.д. и т.п.

Все выше описанное грубо - существует например регистровая передача параметров и возврат результатов, ссылки адреса и т.д. и т.п. так что восприми как иллюстрацию. И самое главное. Если задача программировать на C то доподлинно все это знать вовсе не обязательно. ВСЕ что ДОЛЖНО быть описано в стандарте языка С - и в этом его сила. А как это обеспечить на конкретном процессоре это технические детали реализации. Понимать их полезно но необязательно. Естественно что специфику и ограничения/расширения конкретного используемого компилятора знать необходимо но именно специфику и ограничения, а не все детали реализации.

WBR CrazyElk

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

КРОКОДИЛ Дык её компилер сам уже обьявил - Честное слово копилятор НИЧЕГО не обьявлял. Если эту фукцию обьявил не ты то ее объявили (и реализовали) "добрые люди" поставившие вместе с компилятором еще и БИБЛИОТЕКУ подключенную и используемую в твоем проекте. Они же и определили ЧТО ИМЕННО надо передать в эту функцию толи номер канала толи адрес регистра за каоторым он кроется толи (что там им понравилось то и передать просят). Так что с вопросом что передать если функции без параметров нет это к описанию фукции в библиотеки - тоесть курить документацию на библиотеку в которой read_adc опредлен. Но обычно посколько люди создающие библиотеку совершенно не злобные, то они еще определяют удобные для запоминания константы для общеизвестных ресурсов что то в стиле CHANNEL_0 или там CHANNEL_A и тому подобное. А поскольку что именно надо делать (в какие именно порты писать из какие читать и что именно) зависит от семейства и камня то эти магические константы стоит искать в файле описания процессора .

WBR CrazyElk

1008. КРОКОДИЛ, 01.09.2007 19:51
CrazyElk
Озадачил.............надолго............

1009. Tahoe, 01.09.2007 20:02
CrazyElk
ИМХО рановато ты его так "грузанул". Пусть пока КиР читает. Вполне достаточный уровень абстракции. На данном этапе, ему вполне достаточно знать, что при декларации переменной "где-то выделилась память" (с) КиР. А уж что это за память, как организована, Гарвард или Нейман - путь позже разбирается. Пусть сначала сложение освоит, прежде чем за интегралы браться.

1010. Dikoy, 01.09.2007 20:53
КРОКОДИЛ
А если в мейне попробовать написать read_adc() или а =read_adc() то компилер не пропустит -выдаст ошибку.
Правильно! Патамушта её компилер сам уже обьявил и объявил с условием. Вот она и требует это самое условие! Если условие в объявлении убрать, перестанет требовать. Зато возопит, что переменная adc_input неиспользуется

Если у меня будет работать только нулевой вход АЦП -значит в скобках нужно ноль писать?
Ну дык ЕСНО!

1011. КРОКОДИЛ, 01.09.2007 21:05
Dikoy
Ну дык ЕСНО!
Ну дык я это и хотел услышать!
А ваще блин больше никогда не буду связыватся с контролерами на которые нет руского даташита Если б взял изначально 128мегу то и мороки поменьше было бы!

1012. Dikoy, 02.09.2007 00:27
Не факт.

1013. КРОКОДИЛ, 02.09.2007 08:44
Dikoy
Не факт
С рускими даташитами намного приятней работать -для меня это неопровежимый факт

1014. majorPAE, 02.09.2007 09:11
цитата:
КРОКОДИЛ:
С рускими даташитами намного приятней работать -для меня это неопровежимый факт

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

1015. КРОКОДИЛ, 02.09.2007 10:53
majorPAE
Он-лайн переводчик в руки
Так ПДФки то онлайном не переводятся Если б даташиты были на HTML- тогда другое дело!

1016. majorPAE, 02.09.2007 10:58
КРОКОДИЛ
Так ПДФки то онлайном не переводятся
Еще как переводятся, copy-paste еще никто не отменял...

1017. КРОКОДИЛ, 02.09.2007 11:04
majorPAE
copy-paste еще никто не отменял...
Вот так и мучаюсь -то copy, то paste -пока скопируешь забудешь что хотел! Да и переводит иногда так что только смех один

1018. majorPAE, 02.09.2007 11:43
КРОКОДИЛ
Вот так и мучаюсь
Потерпи чуток, наберется "критическая масса" словарного запаса - дальше гораздо легче пойдет!

1019. Tahoe, 02.09.2007 12:14
majorPAE
наберется "критическая масса" словарного запаса - дальше гораздо легче пойдет!
+1

1020. КРОКОДИЛ, 02.09.2007 13:32
Да терплю уж -куда денешся с подводной лодки!
А пока решил сделать отладочный модуль для програм, с ЖКИ и светодиодами. Приобрёл упаковку светодиодов -вот намигаюсь до потери пульса!

1021. КРОКОДИЛ, 02.09.2007 13:50
Tahoe
Слушай а как вот этой фигнёй управлять? см.рис. -долго переводил даташит но ничего не понял.

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

1022. Dikoy, 02.09.2007 17:28
КРОКОДИЛ
Слушай а как вот этой фигнёй управлять?
А оно тебе надо?

1023. Tahoe, 02.09.2007 18:11
КРОКОДИЛ
>Dikoy
>А оно тебе надо?
+1.

1024. КРОКОДИЛ, 02.09.2007 18:59
Dikoy
Tahoe
>А оно тебе надо?
Интересно! Этот дисплей всего двумя лапками подключается - тоесть экономия ножек на мк. И стоит дешево.

1025. Tahoe, 02.09.2007 21:43
КРОКОДИЛ
экономия ножек на мк
Ты погоди ножки экономить. Сначала с Сями разберись.

1026. КРОКОДИЛ, 03.09.2007 02:28
Tahoe
Сначала с Сями разберись
Разберусь - куда я денусь -сначала прочитаю Кернигана потом Ричи а может наоборот!
Сегодня заходил к товарищу -у него выделенка -скачал IAR 105мегабайт -целый час качали. Завтра установлю на свежую голову попробую разобратся.

Добавление от 03.09.2007 05:37:

Tahoe
Блин, -не удержался установил IAR. Тока ничего в нем понять неполучается -может я не то что нужно скачал? На самой проге написано:IAR Embedded Workbench IDE. А на папке с прогой Embedded Workbench 4.0 Evaluation
Не могу сообразить как в нем проект создавать и как процесор выбирать Можешь вкратце описать как им пользоватcя? -только на руском языке плиз.

1027. Dikoy, 03.09.2007 21:09
КРОКОДИЛ
Там всё ручками надо... Нету тама визарда.

1028. Tahoe, 03.09.2007 23:48
КРОКОДИЛ
1. Там есть папки с тестовыми проектами. Полазий по ним, позапускай проекты, посмотришь что к чему.
2. Вместе с IAR идёт отличная дока, на англ., разумеется. Но достаточно подробная.
3. Dikoy уже сказал, там особо рюшечек нет. На первый взгляд IAR проигрывает тем, которые "с рюшечками". Но когда залезешь глубже, поймёшь, почему все эти хрени с визардами отдыхают.

Насчёт проверить, то или не то. Тебе нужен EWAVR. Для других процессоров - другие названия, например для ARMа зовётся EWARM. А "Embedded Workbench" это касается оболочки.

1029. КРОКОДИЛ, 04.09.2007 01:38
Dikoy
Там всё ручками надо... Нету тама визарда
Так что и вставки на асме не пропускает?
Tahoe
например для ARMа зовётся EWARM
`Все нормально EWAVR скачал

Но когда залезешь глубже,
Так а он что непривязывается к определенному процесору?

1030. Tahoe, 04.09.2007 01:53
КРОКОДИЛ
Так что и вставки на асме не пропускает?
Всё он "пропускает". См. документ "Compiler reference", там всё подробнейшим образом разжёвано. Привыкай к тому, что нормальные продукты имеют нормальное сопровождение. Т.е. можно, конечно, и по форумам полазить/поспрашивать, но хорошая дока уже содержит ответы почти на все вопросы.

Так а он что непривязывается к определенному процесору?
Беня, в этом вся муля! Ты скачал сейчас под AVR, но если приспичит заняться другим процом, просто скачаешь "другой IAR". И попадёшь в ту же самую среду, к которой привык. А список поддерживаемых процессоров ты уже мог видеть, когда выбирал на www.iar.com свой EWAVR. Ба-а-альшой, такой, список.

1031. КРОКОДИЛ, 04.09.2007 02:01
Tahoe
Ба-а-альшой, такой, список.
Не, я имел в виду не все семейсво а определенный процесор из этого семейства, или тут пофиг под чего писать под тиньку 2313 или под мегу168 -тоесть прога этого не учитывает?

1032. Tahoe, 04.09.2007 02:59
КРОКОДИЛ
я имел в виду не все семейсво а определенный процесор из этого семейства
А, в этом смысле. В свойствах проекта выберешь соответствующий камень.
Встаёшь слева на название проекта > правая кнопка > Options > Target.

1033. КРОКОДИЛ, 04.09.2007 12:41
Tahoe
Встаёшь слева на название проекта > правая кнопка > Options > Target.
Спасибо! Потихоньку осваиваю компилер.

1034. Dikoy, 04.09.2007 21:51
Tahoe
Но когда залезешь глубже, поймёшь, почему все эти хрени с визардами отдыхают.
А когда залезешь ещё глубже, поймёшь, что код сгенерённый хренью с визардом тупо копируем в ИАР и нормально им перевариваем
То есть сгенерил шкурку в CV, а далее пишешь уже под иаром.
Слазий плиз в тему по МК

1035. КРОКОДИЛ, 04.09.2007 23:12
Dikoy
То есть сгенерил шкурку в CV, а далее пишешь уже под иаром.
Угу только IAR на все библиотечные функции и переменные сгенеренные CV выдает ошибки что неправильные они и нужно разбиратся что к чему -проще сразу под IARом писать

1036. Dikoy, 04.09.2007 23:35
КРОКОДИЛ
Так я тебе и говорю - шкурку сгенерил и хватит. А функции типа гетчара и путчара такие же, как и в CV, только их надо ручками писать. Берёшь пример из ДШ и вставляешь.
Фишка в том, что регистры обзываются одинаково, синтаксис языка одинаков. Если ИАР и возбранится на что, так там децл совсем поправить.

Вот, лови:

код:

/* GETCHAR.C

The ANSI "getchar" function.

The getchar function reads the character c from the
input-stream pointed to by stream.
The function returns the character read.

$Name: V3_34O V3_34N Spiff7 V3_34M V3_34L V3_34K V3_34J V3_34I V3_34H V3_34G $

Copyright 1986 - 1999 IAR Systems. All rights reserved.
*/


//#include <stdio.h>
#include <iom128.h>

int getchar(void)
{
while (!(UCSR0A & 0x80))
; //wait for character
return((int) UDR0 & 0xFF); //grab character
}

/*
int putchar1(int ch)
{
while (!(UCSR1A & 0x20))
; //wait xmit ready
UDR1 = (unsigned char) ch;
return (ch); //send the character
}
*/




/* PUTCHAR.C

The ANSI "putchar" function.

The putchar function writes the character c to the
output-stream pointed to by stream.
The function returns the character written. If an writing
error occurs the putchar shall return EOF.

$Name: V3_34O V3_34N Spiff7 V3_34M V3_34L V3_34K V3_34J V3_34I V3_34H V3_34G $

Copyright 1986 - 1999 IAR Systems. All rights reserved.
*/


//#include <stdio.h>
#include <iom128.h>

int putchar(int ch)
{
while (!(UCSR0A & 0x20))
; //wait xmit ready
UDR0 = (unsigned char) ch;
return (ch); //send the character
}

/*
int putchar1(int ch)
{
while (!(UCSR1A & 0x20))
; //wait xmit ready
UDR1 = (unsigned char) ch;
return (ch); //send the character
}
*/

1037. КРОКОДИЛ, 05.09.2007 01:57
Dikoy
ИАР и возбранится на что, так там децл совсем поправить.
Незнаю - у меня он забанил функцию АЦП,LCD,delay, и кусочки проекта которые компилятся в кодевижене,здесь выдают по 15 ошибок на 10 строчек , а потом он и свой собственный хидер забанил #include "iom48.h" Короче надоело мне с ним играться - пока буду пользоватся виженом -до зимы а там посмотрим.
синтаксис языка одинаков
Да вроде несовсем -впрочем сейчас некогда разбиратся -я лучше Ричи и Кернигана лишний раз почитаю.............

1038. Tahoe, 05.09.2007 02:48
КРОКОДИЛ
и кусочки проекта которые компилятся в кодевижене,здесь выдают по 15 ошибок на 10 строчек
Угу. И, обычно, устраняются правкой одной строчки по 5 шт. за раз.
Ты читай, что за ошибки/варнинги. Тебе ж компиллер подсказывает, что не так, а не ругается для своего удовольствия.

1039. КРОКОДИЛ, 05.09.2007 10:23
Tahoe
код:
 if(SQL &&(!TX_RX)){
delay_ms(20);
i=1;
delay_us(500);
i=0;
}

Error[Pe018]: expected a ")" C:\mega48\main.c 124

Warning[Pe223]: function "delay_ms" declared implicitly C:\mega48\main.c 125

Fatal Error[Pe035]: #error directive: This file should only be C:\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation\avr\INC\iom48.h 23

1040. Tahoe, 05.09.2007 14:33
КРОКОДИЛ
Error[Pe018]: expected a ")" C:\mega48\main.c 124
Ну дык ёлы-палы, "expected" это "ожидается". Где-то выше по тексту, ты со скобками лоханулся. А аукнулось это на 125-й строке файла C:\mega48\main.c

Warning[Pe223]: function "delay_ms" declared implicitly C:\mega48\main.c 125
Предупреждение, что функция "delay_ms" задекларирована неявно. Т.е. не найден/не видится прототип функции.

Fatal Error[Pe035]: #error directive: This file should only be C:\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation\avr\INC\iom48.h 23
Перевожу. Fatal Error - полная жоп...
На самом деле, директива #error используется в Сях, когда надо прервать компиляцию. Т.е. обычно проверяется какое-то условие и если оно, допустим, выполняется, то компиляция прерывается, если нет, то компилим дальше.

И см. везде последние цифпы, это номер строки, на которой обнаружилась жоп ошибка.

1041. КРОКОДИЛ, 05.09.2007 16:08
Tahoe
Где-то выше по тексту, ты со скобками лоханулся. А аукнулось это на 125-й строке файла C:\mega48\main.c
Не,- специально проверял несколько раз все нормально а скобки он на каждом ифе и какждом виле почемуто просит!
И см. везде последние цифпы, это номер строки, на которой обнаружилась жоп ошибка.
код:
#include "iomacro.h"
#if TID_GUARD(1)
#error This file should only be compiled with iccavr or aavr with processor option -v1
#endif /* TID_GUARD(1) */

/* Include the SFR part if this file has not been included before,
* OR this file is included by the assembler (SFRs must be defined in
* each assembler module). */

Тоесть ошибку он обнаружил в своем собственном хидере
И еще вопрос: какие хидеры пишутся в кавычках -"хидер" а какие так <хидер> ?

1042. Dikoy, 05.09.2007 19:23
КРОКОДИЛ
Warning[Pe223]: function "delay_ms" declared implicitly C:\mega48\main.c 125
Дык delay_ms - это функция библиотеки CV, в иаре она как-то по другому обзывается. Задефайни её в самом начале как иаровскую и не будет ошибки.

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

у меня он забанил функцию АЦП,LCD,delay,
Может регистры не так обзывались, может (и наиболее вероятно) ты вижновские дефайны иару не дал... Смотреть надо.

Добавление от 05.09.2007 19:25:

КРОКОДИЛ
какие хидеры пишутся в кавычках -"хидер" а какие так <хидер> ?
Насколько я знаю, хидеры всегда пишутся в <>, а "", это совсем другая степь

1043. Tahoe, 05.09.2007 19:58
КРОКОДИЛ
специально проверял несколько раз все нормально а скобки он на каждом ифе и какждом виле почемуто просит!
Значит кривость где-то ДО этого возникла.

какие хидеры пишутся в кавычках -"хидер" а какие так <хидер> ?
"хидер" ищется только в текущей папке, а <хидер> ищется во всех папках, прописаных в путях проекта.

1044. КРОКОДИЛ, 05.09.2007 23:00
Dikoy
Задефайни её в самом начале как иаровскую и не будет ошибки
A как её ТАК задефайнить?
Tahoe
а <хидер> ищется во всех папках, прописаных в путях проекта.
Так что все хидеры в папку с проектом слаживать?
Значит кривость где-то ДО этого возникла.
Да вроде нет
код:

#include "stdio.h"
#include "iom48.h"
#include "INAVR.H"
#include "INTRINSICS.H"
#include "ina90.h"
#define ADC_VREF_TYPE 0x00
#define SQL PIND.3
#define KEY_UP PINB.0
#define KEY_DOWN PINB.1
#define SKAN_BAND PINB.2
#define MEMORY PINB.3
#define TX_RX PINB.4
#define FUNC PINB.5
#define DATA_LINE DDRC.1
#define CLOCK_LINE DDRC.2
#define LE_LINE DDRC.3
#define DATA_LINE_ON DDRC.1
#define CLOCK_LINE_ON DDRC.2
#define LE_LINE_ON DDRC.3
#define F_XTAL 10.000000L
unsigned char data_hi , data_mid , data_low ;
unsigned long BUFFER;
unsigned long REGR = 0x0005A0; //ïåðåìåííàÿ íà 32 áèòà ÄËß ÏÐÅÄÄÅËÈÒÅËß ÊÂÀÐÖÀ ØÀÃ 12,5ÊÃÖ
unsigned long REGF = 0x000082; //ñëóæåáíûå áèòû ñèíòåçàòîðà
unsigned long START_BAND = 1678970 ; // {íà÷àëî äèàïàçîíà -10,7)/2,5êãö
unsigned long END_BAND = 1056990; //(êîíåö äèàïàçîíà -10,7)/2,5êãö
unsigned int PROMEGUTOK = 65157;//ïðîìåæóòî÷íàÿ ÷àñòîòà
unsigned long REGN; //ðàáî÷èé ðåãèñòð
unsigned char i;
char a;

#ifndef _LCD_INCLUDED_
#define _LCD_INCLUDED_

#pragma used+

void _lcd_ready(void);
void _lcd_write_data(unsigned char data);
// write a byte to the LCD character generator or display RAM
void lcd_write_byte(unsigned char addr, unsigned char data);
// read a byte from the LCD character generator or display RAM
unsigned char lcd_read_byte(unsigned char addr);
// set the LCD display position x=0..39 y=0..3
void lcd_gotoxy(unsigned char x, unsigned char y);
// clear the LCD
void lcd_clear(void);
void lcd_putchar(char c);
// write the string str located in SRAM to the LCD
void lcd_puts(char *str);
// write the string str located in FLASH to the LCD
void lcd_putsf(char flash *str);
// initialize the LCD controller
unsigned char lcd_init(unsigned char lcd_columns);

#pragma used-
#pragma library lcd.lib

#endif

void data_to_synt (void) {//Ôóíêöèÿ ïåðåäà÷è äàííûõ â ñèíòåçàòîð.
char ctr = 8; /* Ëîêàëüíàÿ ïåðåìåííàÿ ñ÷åò÷èê */
LE_LINE_ON = 1;
LE_LINE = 0;
CLOCK_LINE = 0;
CLOCK_LINE_ON = 1;
DATA_LINE_ON = 1;
while (ctr){ // âûïîëíÿòü {â ñêîáêàõ} åñëè ctr íå íîëü
DATA_LINE = data_hi & 0b10000000;
data_hi <<= 1;
ctr --;
CLOCK_LINE = 1; /* Ñäåëàòü ôðîíò íà CLOCK */
CLOCK_LINE = 0; /* Ñäåëàòü ñïàä íà CLOCK */
};
ctr = 8;
while (ctr){
DATA_LINE = data_mid & 0b10000000;
data_mid <<= 1;
ctr --;
CLOCK_LINE = 1;
CLOCK_LINE = 0;
};
ctr = 5; /* Ñíîâà "âçâîäèì" ïåðåìåííóþ ñ÷åò÷èê*/
while (ctr){/* Öèêë âûâîäà data_low íà÷èíàÿ ñ áèòà_7*/
DATA_LINE = data_low & 0b10000000;
data_low <<= 1;
ctr --;
CLOCK_LINE = 1; /* Ñäåëàòü ôðîíò íà CLOCK */
CLOCK_LINE = 0; /* Ñäåëàòü ñïàä íà CLOCK */
};
LE_LINE = 1; /* Âûâåñòè "1" íà LE */
}

void choice_channel (void){ //Ôóíêöèÿ îïðîñà êíîïîê.

if((!"TX_RX") &&( "KEY_DOWN"))
{
delay_ms(20);
REGN--;
}
if(KEY_UP &&(!TX_RX)){
delay_ms(20);
REGN++;
}
if(REGN > END_BAND){
REGN=START_BAND;
}
if(REGN < START_BAND){
REGN=END_BAND;
}
if(SKAN_BAND &&(!TX_RX) && (! SQL)){ //Ôóíêöèÿ ñêàíèðîâàíèÿ
delay_ms(50);
i++;
}
if(i>1){
i=0;
}
if(i){
REGN ++;
}
if(SQL &&(!TX_RX)){
delay_ms(20);
i=1;
delay_us(500);
i=0;
}
if( TX_RX ){ //ïåðåäà÷à
delay_ms(20);
i=0;
REGN+=PROMEGUTOK; //Äîáàâëåíèå ïðîìåæóòî÷íîé ÷àñòîòû äëÿ ïåðåäàò÷èêà.
printf("TX--- %d\n POWER-",REGN*125);
}
else printf("RX--- %d\n S-",(REGN+PROMEGUTOK)*125);
BUFFER = ((REGN*4) | 0x100001); // óìíîæàåì íà 4 è äîáàâëÿåì ìàñêó
data_low = BUFFER; //ÐÅÆÅÌ ÁÓÔÅÐ ÍÀ 3 ×ÀCÒÈ
data_mid =(BUFFER >> 8); //ÑÄÂÈÃ ÍÀ 8 ÁÈÒ
data_hi = (BUFFER >> 16); //ÑÄÂÈÃ ÍÀ 16ÁÈÒ
data_to_synt ();
delay_ms(200);
}
int main( void )
{
return 0;
}

Паскаль тоже любит скобки повсюду,
Пробовал я их везде напихать- бесполезно.

1045. Dikoy, 05.09.2007 23:31
КРОКОДИЛ
А чё тебя заклинило на переводе кода в иар?.. Жить скучно стало?

1046. КРОКОДИЛ, 05.09.2007 23:36
Dikoy
Жить скучно стало?
Ну да!
Tahoe сказал что IAR -это очень круто -вот я и проверяю- насколько?

1047. Tahoe, 06.09.2007 00:44
КРОКОДИЛ
Так что все хидеры в папку с проектом слаживать?
Наоборот, просто пропиши в проекте пути к ним и всё.

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

Добавление от 06.09.2007 00:46:

КРОКОДИЛ
Tahoe сказал что IAR -это очень круто
Tahoe такого не говорил. Tahoe говорил, что если надо работать, а не баловаться, то есть всего два варианта IAR и GCC. Tahoe больше любит IAR.

1048. КРОКОДИЛ, 06.09.2007 01:56
Tahoe
Посмотри внимательно, в IARе же есть "подсветка" скобок. Пользуйся, не стесняйся
Я ж говорил что буду три года с интерфейсом разбиратся -тяжело мне даются проги на вражеском языке

Добавление от 06.09.2007 02:37:

Не фигня какаято с этими скобками -причем невменяемая

1049. Dikoy, 06.09.2007 02:46
КРОКОДИЛ
Tahoe сказал что IAR -это очень круто -вот я и проверяю- насколько?
Ну это круто, только для того проекта оно тебе нафиг не надо. Бо выч. ресурса валом и памяти треть свободно. Нафига упираться то?..

1050. КРОКОДИЛ, 06.09.2007 03:07
Dikoy
и памяти треть свободно.
Нифига,- то что уже написал 70 процентов памяти занимает а еще писать и писать..........
Нафига упираться то?..
Да мне непонятна фигня с этими скобками -студия ифы и вилы обходила стороной и IAR -туда же

1051. Tahoe, 06.09.2007 04:14
КРОКОДИЛ
Да мне непонятна фигня с этими скобками
А чего непонятного? Где-то, выше ошибки, влезла лишняя скобка. Надо только найти где. Раз речь про хидеры, достаточно сначала "задемить" их все и начать по очереди раскоменчивать, строку за строкой. Тупо и аккуратно, с самого начала. А если будешь всё кучей делать, рано или поздно в любой среде уткнёшься и запаришься.

1052. КРОКОДИЛ, 06.09.2007 13:00
Tahoe
Где-то, выше ошибки, влезла лишняя скобка.
Не, проверял несколько раз, и пробовал кусочками компилилить -по одному ифу отдельно,- таже самая фигня. А вчера скачал Сишный компилер для студии -так ошибок выдал еще больше чем на IARе. Сдается мне, что у меня кампутер дуру гонит, -лицензию на Касперского мне забанили ещё два месяца назад -може налезло на комп какойнибудь фигни -сегодня возьму свежий антивирус и поганяю паразитов.

"задемить"
"раскоменчивать"
А как это по руски звучать будет?

1053. Tahoe, 06.09.2007 14:17
КРОКОДИЛ
А как это по руски звучать будет?
Закоментировать, раскоментировать:

//#include <header4.h>
#include <header3.h>
//#include <header2.h>
//#include <header1.h>

1054. Dikoy, 06.09.2007 16:05
КРОКОДИЛ
70 процентов памяти занимает а еще писать и писать..........
И влезет у тебя всё. Не влезет - поставишь оптимизацию на объём.

1055. КРОКОДИЛ, 06.09.2007 17:54
Dikoy
Не влезет - поставишь оптимизацию на объём.
Да, в принципе хорошая идея -мега48 поддерживает кварцы до 20мегагерц -так что скорости хватит! И кварцев 20мегагерцовых упаковочка имеется.
Tahoe
Закоментировать, раскоментировать:
Понял.

1056. Dikoy, 06.09.2007 19:51
Да она и на 10 МГц ту задачу осилит, даже с оптимизацией на объём.

Чуда не произойдёт... Ну ужмёт ИАР тебе +10%, оно тебя спасёт чтоли? На таких объёмах кода экономия будет незаметна.
Вот если б ты проект килобайт на 10 компилил, то тут таки да!

1057. КРОКОДИЛ, 07.09.2007 01:22
Dikoy
На таких объёмах кода экономия будет незаметна.
Уговорил

1058. КРОКОДИЛ, 20.09.2007 03:49
Dikoy
Почитал тут про частомеры -принцип работы понятен только с таймером непонятно
1)Какой из четырех таймеров нужно использовать?
2)В визарде много непонятных мне настоек для таймеров ,-как их правильно настроить?
3)И еще непонятно как по наполнению таймера останавливать счёт импульсов? -можешь изобразить кусочек кода?

1059. Dikoy, 20.09.2007 18:34
КРОКОДИЛ
1)Какой из четырех таймеров нужно использовать?
Тот, у кого выше азрядность.

,-как их правильно настроить?
Не знаю... Я в таймерах и ШИМах хреново понимаю

Добавление от 21.09.2007 12:13:

КРОКОДИЛ
И еще непонятно как по наполнению таймера останавливать счёт импульсов?
Можно настроить прерывание по переполнению таймера. Таймер крутит по кругу, а в прерывании ты увеличиваешь на 1 переменную при каждом переполнении. В итоге период сигнала будет == максимум таймера, умноженный на переменную, + последнее значение таймера.
Поищи в теме про МК. Мы там под Новый Год как раз обсуждали частотомер для тахометра круиз-контроля.

1060. КРОКОДИЛ, 21.09.2007 20:04
Dikoy
Поищи в теме про МК
Не нашел чтото Нашел там только описание алгоритма работы и все
А как работать с таймерами чёто немогу разобратся

1061. majorPAE, 22.09.2007 08:09
КРОКОДИЛ
А как работать с таймерами чёто немогу разобратся
Так же, как ты работаешь со счетчиками на рассыпухе.
Смысл в том, что таймер - это тот же счетчик. Когда он досчитывает до конца, формируется флаг переполнения и (если ты разрешил прерывания от соответствующего таймера) выполняется прерывание. А таймер в это время продолжает считаь дальше с 0.
Процедура настройки, как правило, заключается в следующем:
1. Установка битов, разрешющих работу соответствующего таймера;
2. Выбирается источник тактов для таймера. Чаще всего по умолчанию это внутренний генератор МК;
3. Выбирается и устанавливается нужный коэффициент предделителя (если он есть ) и предустановка (начальное число, записываемое в таймер);
4. Настраивается прерывание от этого таймера и процедура обработки этого прерывания.
Ну вот собственно и все...

Не нашел чтото
Плохо искал: http://forum.ixbt.com/topic.cgi?id=48:1119-52#1567

1062. КРОКОДИЛ, 23.09.2007 03:21
Dikoy
Сегодня удалось купить мегу8515, -теперь должно памяти хватить и лапок тоже!

Добавление от 23.09.2007 04:45:

majorPAE
4. Настраивается прерывание от этого таймера и процедура обработки этого прерывания.
Вот с этим у меня и запарка, -пытаюсь разобратся.

Не нашел чтото
Плохо искал: Помогите начать работать с микроконтроллерами., #1567 (http://forum.ixbt.com/topic.cgi?id=48:1119:1567#1567)

Так это я читал - только полностью не понял
Щас пытаюсь скурить даташит

Dikoy
Ну а ты тогда написал чёнибудь или нет?

Добавление от 23.09.2007 04:56:

Dikoy
Таймер крутит по кругу, а в прерывании ты увеличиваешь на 1 переменную при каждом переполнении. В итоге период сигнала будет == максимум таймера, умноженный на переменную, + последнее значение таймера.
Может наоборот сделать -по приходу импульсов на вход инкриментировать переменную, а по переполнению таймера останавливать инкримент и выводить переменную на printf, потом её обнулять и опять инкримент до следующего переполнения?

1063. majorPAE, 23.09.2007 10:03
КРОКОДИЛ
Может наоборот сделать -по приходу импульсов на вход инкриментировать переменную, а по переполнению таймера останавливать инкримент и выводить переменную на printf, потом её обнулять и опять инкримент до следующего переполнения?
Плохо еще вкурил ДШ. Так не получится. Импульсы на вход таймера поступают постоянно, как только ты разрешил его работу он начинает считать. Это все, что ты можешь с ним (с таймером) сделать. Ну можно еще предварительно записать в него число, чтоб уменьшить время до переполнения.
Можно, конечно и так, как ты хочешь. Но для этого нужно чтоб программа между прерываниями крутилась в цикле. И желательно постоянном, ни на что "не отвлекаясь", т.е. без проверок и ветвлений. Только при этом почти теряется основной смысл использования прерываний - освобождение процессора на время формирования фиксированоого временного интервала.
Ведь что такое обработчик прерывания: это кусок программы, который располагается по конкретно определенному адресу в памяти программ, так называемому вектору прерывания. Он, вектор,как правило один (хотя может быть и несколько, зависит от "навороченности" МК).
При получении прерывания МК заносит в так называемый стек адрес программной памяти, на котором находился в момент события, вызвавшего прерывание (по сути - оператор в тексте программы ) и начинает выполнять кусок программы расположенный тобой после вектора прерывания. Там обычно ты определяешь: от чего произошло прерывание и выполняешь соответствующие действия. После того как все сделано, МК возвращается туда, откуда его "сдернули" , и продолжает работу. Все просто...

1064. КРОКОДИЛ, 23.09.2007 18:03
majorPAE
Все просто...
Угу. -совсем запутался
Так не получится.
Так, а как тогда правильно написать алгоритм для скоростного частотмера?
У меня мега8515 будет работать с внешним кварцем, -какой именно таймер нужно включить? -а то я совсем заблудился в даташите

1065. majorPAE, 23.09.2007 18:31
КРОКОДИЛ
Угу. -совсем запутался
В чем запутался?
Так, а как тогда правильно написать алгоритм для скоростного частотмера?
Ну, с конкретно "мега8515" эт придется тебе ждать Dikoy. Я эти кристаллы не знаю совсем. По ПИК-у бы расказал...

1066. КРОКОДИЛ, 23.09.2007 19:04
majorPAE
В чем запутался?
Таймеры имеют входы для внешнего сигнала? или нет?
По ПИК-у бы расказал
Забросил я PICи, -применяю их только тогда когда есть готовый проект и нужно его срочно сделать.
С AVR интересней -здесь хоть чтото понять можно

придется тебе ждать Dikoy
Подождем, а я пока апноты пережёвываю...............

1067. shemmer, 23.09.2007 19:06
Здравствуйте
помогите с АЦП на атмеге8
Нужно заставить многократно измерять напряжение на РА0
Если в прерывании делаю вычисление то
результат верно отображается на индикаторе

interrupt [ADC_INT] void adc_isr(void){
Vizm=ADCW;
Vpr = (float) Vizm;
Vpr = Vpr * 0.03128;
Vdec = (int) Vpr;
Vpr = Vpr - (float) Vdec;
Vpr = Vpr * 1000;
Vmili = (int) Vpr;
}

ADCSRA=0b11011111;
ADMUX=0b11000000

Дальше преобразовываю в BCD и вывожу на LED.

Но он делает преобразование 1 раз и останавливается.
Если установить ADFR=1, то в протеусе на индикаторе кракозябры
(может на железе будет нормально?)
Как заставить делать преобразование многократно?

1068. Tahoe, 23.09.2007 21:37
КРОКОДИЛ
Таймеры имеют входы для внешнего сигнала? или нет?
Так, Беня! Таймер - это самый обыкновенный счётчик. Режим "захват" ( capture ) это и есть, когда он тактируется каким-то внешним сигналом. Всё остальное ( и наиболее часто используемое ), это когда используется источник клока внутри МК. Для твоего удобства, тебе предоставляют не один клок, а несколько разных, поделеные на 2, на 4, на 8 и т.д.
Постарайся разделять, вопросы касающиеся железа МК и принципов действия частотомеров. Иначе будет полная каша в голове. Определись, сначала, ЧТО ты хочешь сделать, а потом решишь КАК ты это будешь делать.


shemmer
Как заставить делать преобразование многократно?
Очевидно, что либо запускать многократно ( например по таймеру ), либо использовать free running mode.

ADCSRA=0b11011111;
Тебе за такое уши не обрывали в детстве? Пиши по-человечески, названия битов. а не всякие 10010101.

1069. КРОКОДИЛ, 23.09.2007 22:17
Tahoe
Постарайся разделять, вопросы касающиеся железа МК и принципов действия частотомеров
Я пока не в железо вьехать немогу не в частотомеры
Определись, сначала, ЧТО ты хочешь сделать,
Хочу сделать хороший частомер до 2,8гигагерца, -тоесть контроллер плюс дополнительный счетчик делитеель частоты.
Есть контролеры mega48 и mega8515 - первый более предпочтительней так как в нем есть АЦП -тоесть можно еще вывести на экран показания об амплитуде сигнала -так сделано во вражеских частотмерах.

Режим "захват" ( capture ) это и есть, когда он тактируется каким-то внешним сигналом.
А я этого какраз незнал
Чё посоветуешь -как организовать это безобразие?
И какой таймер и как использовать? Искал в даташите на mega48 сведения о таймерах -у какого сколько бит,но так и не нашел -может где пропустил -портянка слишком длинная
Сейчас пытался разобрать исходник частотомера на асме -ничего не понял, но там еще используется аналоговый компаратор -непонятно для чего?

Добавление от 23.09.2007 22:49:

Нашёл! -104 страница -правда с таким переводом все рано что нибудь понять трудно

цитата:
16 частиц 16-битовая единица Таймера/Прилавка позволяет точный выбор времени выполнения программы (человек случая-
Agement), поколение волны, и сигнал, рассчитывающий измерение. Главные особенности:
Timer/Counter1 с
· Истинный 16-битовый Проект (то есть, Позволяет 16 частиц PWM)
PWM · Две независимых Продукции(выпуска) Сравнивают Единицы
· Удваиваются, Buffered Продукция(выпуск) Сравнивает Регистраторов
· Одна Единица Захвата Входа
· Шум Захвата Входа Canceler
· Ясный Таймер на Сравниваются, состязание(спичка) (Авто Перезаряжает)
· glitch Без, Стадия Правильный Модулятор Ширины Пульса (PWM)
· Переменная PWM Период
· Генератор Частоты
· Внешний Прилавок Случая
· Четыре независимый прерывают Источники (TOV1, OCF1A, OCF1B, и ICF1)
Краткий обзор Большинство регистра и ссылок(рекомендаций) частицы в этой секции написан в общей форме. Более низкий случай
"n" Заменяет номер(число) Таймера/Прилавка, и более низкий случай "x" заменяет Продукцию(выпуск) Com-
Чистите канал единицы. Однако, при использовании регистра или частицы определяет в программе,
Точная форма должна использоваться, то есть, TCNT1 для вызова Timer/Counter1 встречная ценность
И так далее.
Упрощенная диаграмма блока 16-битового Таймера/Прилавка показывается в Числе(фигуре) 41. Для
Фактическое размещение булавок ввода - вывода, обратитесь(отнеситесь) к " Pinout ATmega48/88/168 " на странице 2. CPU acces-
Sible Регистраторы ввода - вывода, включая частицы ввода - вывода и булавки ввода - вывода, показываются в смелом. Устройство-
Определенный Регистр ввода - вывода и местоположения частицы внесены в список в " 16-битовый Регистр Таймера/Прилавка
Описание " на странице 125.
PRTIM1 частица в " Регистр Сокращения Власти(мощи) - PRR " на странице 37 должна быть написана
Ноль, чтобы позволить Timer/Counter1 модуль.

Добавление от 23.09.2007 23:00:

А причем здесь PWM?

1070. Tahoe, 23.09.2007 23:10
КРОКОДИЛ
правда с таким переводом все рано что нибудь понять трудно
Мы выше уже необходимость аглицкого обсуждали. Больше того, тебе Dikoy про качество всех этих "переводов" уже говорил.

Хочу сделать хороший частомер до 2,8гигагерца
Я тебе порекомендую, как врач врачу , сначала сделать _плохой_ частотомер _до 100кГц_. Иначе не сделаешь вообще никакого.

mega48 сведения о таймерах -у какого сколько бит,но так и не нашел
Беня, Вы бредите!
8-bit Timer/Counter0 with PWM
16-bit Timer/Counter1 with PWM
8-bit Timer/Counter2 with PWM and Asynchronous Operation

Ты вообще названия разделов в даташите смотришь?

Добавление от 23.09.2007 23:16:

А причем здесь PWM?
Притом, что каждый такой "простой счётчик" обвешивается кучкой всяких приблуд. Например регистром сравнения, в который можно загрузить какое-нить число и соорудить с его помощью PWM.

1071. КРОКОДИЛ, 23.09.2007 23:25
Tahoe
сначала сделать _плохой_ частотомер _до 100кГц_. Иначе не сделаешь вообще никакого.
Так а какая разница то? -все равно внешний высокоскоростной счетчик применятся будет А уж коофицент деления ему можно практически любой задать в пределах long int......
Лучше что нибудь конкретное скажи -чтоб я мог вылезти из кольца непоняток.........
Ты вообще названия разделов в даташите смотришь?
Так нашёл уже -названия разделов посмотрел

1072. Tahoe, 23.09.2007 23:45
КРОКОДИЛ
Лучше что нибудь конкретное скажи -чтоб я мог вылезти из кольца непоняток.........
Что именно? Разжевать на 5-ти страницах принцип действия частотомера? Я столько "ниасилю". Попробуй сделать как-то так (http://www.google.com/search?q=%D1%87%D0%B0%D1%81%D1%82%D0%BE%D1%82%D0%BE%D0%BC%D0%B5%D1%80+avr&hl=ru&lr=&client=opera&rls=en&hs=GFX&start=10&sa=N) .

1073. Dikoy, 24.09.2007 00:10
КРОКОДИЛ
Сегодня удалось купить мегу8515
Где ты это старьё выкопал?

Ну а ты тогда написал чёнибудь или нет?
Чёнибудь написал... Только уже давно убил.
Чего там думать то? Счётчик тактируется от частоты МК, при желании ты эту частоту можешь поделить предделителем (в визарде настраиваешь). Ну и всё - счётчик считает по кругу. По переполнению можно настроить прерывание, в нём инкрементировать переменную.
Я бы сделал прерывание INT0, настроил на any change (любое изменение). То есть любое изменение уровня на лапе вызывает прерывание. В прерывании определял, "1" или "0" на лапе и исходя из этого запускал или останавливал таймер. Соответственно, при остановке считывал бы значение таймера и переменной-счётчика, опосля чего их обнулял. Есно, у счётчика своё прерывание, но у INT выше приоритет, то есть при одновременном возникновении INT выполнится первым.
Дальше из них считал бы период и далее - частоту.
Вот и весь алгоритм твоего частотомера...

1074. КРОКОДИЛ, 24.09.2007 01:40
Dikoy
Где ты это старьё выкопал?
Где, где -на базаре! - кроме tiny2313,tiny26 и mega8515 ничего больше небыло -Мегу взял потому что у неё лапок много! -в дип корпусе- здоровенная! А радиомагазинов у нас просто нет
По переполнению можно настроить прерывание, в нём инкрементировать переменную.
Чёт опять не вьехал -а чем отмеряются временные промежутки? -вторым таймером чтоли?

Добавление от 24.09.2007 02:03:

И зачем останавливать и запускать таймер по преыванию?
Или ты предлагаешь считаеть количество переполнений таймера за один период входного сигнала? -такой метод пойдёт только для низких частот -Либо контролер очень шустрый нужен...........
Я думал так: таймер крутится непрерывно от кварца и по переполнению создает прерывания, время переполнения допустим 0,1секунда, по прерыванию от таймера останавливается инкримент переменной типа:
unsigned long int _F_;
if( PINB.O){ // на лапку 0 порта В подается измеряемая частота
_F_++;
}
//а дальше вычисляем частоту _F_*=10 и выводим на дисплей.

Но majorPAE это не понравилось, -где здесь скрытые грабли?

Добавление от 24.09.2007 02:22:

Tahoe
Разжевать на 5-ти страницах принцип действия частотомера? Я столько "ниасилю".
Ну почему же сразу на 5-ти? - достаточно будет и на 25-ти
Попробуй сделать как-то так.
Уже два дня рою -пока ничего понятного для себя не нашел -все исходники на асме Типа такого:

код:
;**************************
; Частотометр
;**************************

.include "tn2313def.inc"
.include "EEPROM.asm"
.include "toBCD.asm"
.include "mul10.asm"
.include "BCDtoASCII.asm"
; Частота кварца и период
.set Freq =11059200 ; Частота кварца в Гц
.equ t =1000000000000/Freq
.equ k_div =((Freq/10240)/9)-1
; Описание LCD
.equ PortLCD=PortB
.equ RS =PB2
.equ E =PB0
.equ Data_LCD=1<<PB4 | 1<<PB5 | 1<<PB6 | 1<<PB7
; Описание LMX2306
.equ LE =PB3 ; Выбор устройства 2306
.equ LE_Port =PortB
.equ LE_On =LE_Port-1
.equ Data_LMX=PD0 ; Данные на 2306
.equ Data_Port=PortD
.equ Data_on =Data_Port-1
.equ Clock =PD1 ; Строб на 2306
.equ Clock_Port=PortD
.equ Clock_on =Clock_Port-1
.equ _Div_N = 1<<0
.equ k25 = 0x0184
.equ k100 = 0x0650
.equ k1000 = 0x3E80
.equ for1_1 = Freq/350000
.equ for1_25 = 25*Freq/245760
.equ for1_100= 100*Freq/245760
; Описание памяти
.equ Byte_LCD=0x60
.equ Fr =Byte_LCD+14
.equ Div_N =Fr+3
.equ Dig =Div_N+3
; Входные сигналы
.equ FreqHigh=PD2
.equ calib =PD3
.equ Vrem_Sh =PD4
.equ in_freq =PD5
; Биты регистра RegF
.equ _ovf =0
.equ _k25 =1
.equ _k100 =2
.equ _k1000 =3
.equ _zero =4
.equ _calibr =5

.def Byte_Calibr=r0
.def T_Start0=r2
.def T_Start1=r3
.def T_Stop =r4
.def inCalibr=r5
.def tmp =r16
.def tmp1 =r17
.def regF =r18
.def cnt0 =r19
.def Fval1 =r20
.def Fval2 =r21
.def Fval3 =r22
.def Fval4 =r23

.CSEG
.org 0
rjmp RESET
nop ;rjmp EXT_INT0 ;Внешние прерывание по IRQ0
nop ;rjmp EXT_INT1 ;Внешние прерывание по IRQ1
nop ;rjmp TIM1_CAPT ;Прерывание по таймеру 1
nop ;rjmp TIM1_COMPA ;Прерывание по сравнению таймер 1
rjmp TIM1_OVF ;Прерывание по переполнению таймер 1
nop ;rjmp TIM0_OVF ;Прерывание по переполнению таймер 0
nop ;rjmp USART0_RXC ;
nop ;rjmp USART0_DRE ;
nop ;rjmp USART0_TXC ;
nop ;rjmp ANA_COMP ;Прерывание аналогово компаратора
nop ;rjmp PCINT
nop ;rjmp TIMER1_COMPB
rjmp TIMER0_COMPA
nop ;rjmp TIMER0_COMPB
nop ;rjmp USI_START
nop ;rjmp USI_OVERFLOW
nop ;rjmp EE_READY
nop ;rjmp WDT_OVERFLOW

.org 0x0013

RESET:
ldi tmp, RAMEND ; Настраиваем
out SPL, tmp ; стек.
rcall Timer_Init
rcall LCD_Init_4
rcall Init_LMX2306
ldi tmp, 1<<SE
out MCUCR, tmp
in tmp, PortD
ori tmp, 1<<Vrem_Sh | 1<<calib | 1<<FreqHigh;| 1<<in_freq
out PortD, tmp
clr RegF
EEPROM_Read 0x00, Byte_Calibr
EEPROM_Read 0x7F, tmp
com Byte_Calibr
brne reset1
com Byte_Calibr
reset1:
com Byte_Calibr

main:
rcall Res
sbis PinD, FreqHigh
rjmp l2
sei
rcall PredIzmer
cli
rcall SetK
rcall Res
l2:
sei
rcall Izmer
cli
in Fval1, TCNT1L
in Fval2, TCNT1H
subi Fval3, 101
com Fval3
clr Fval4
sbrc RegF, _calibr
rcall Calibr
MulKx Fval3, Fval2, Fval1, Byte_Calibr
sbrc RegF, _k25
rcall Mul25
FtoBCD Fval4, Fval3, Fval2, Fval1, Dig
sbrc regF, _ovf
rcall Procherk
l1:
rcall for_LCD
rcall LCD
sbic PinD, calib
clr inCalibr
sbis PinD, calib
inc inCalibr
mov tmp, inCalibr
cpi tmp, 2
brne end
sbr RegF, 1<<_calibr
end:
rjmp main

Procherk:
push tmp
push cnt0
push YH
push YL
ldi cnt0, 7
ldi tmp, 0x2D
ldi YH, high(Dig)
ldi YL, low(Dig)
pr1:
st Y+, tmp
dec cnt0
brne pr1
pop YL
pop YH
pop cnt0
pop tmp
ret

SetK:
push r24
push r25
clr RegF
in Fval1, TCNT1L
in Fval2, TCNT1H
ldi r25, High(for1_25)
ldi r24, Low(for1_25)
sub r24, Fval1
sbc r25, Fval2
brcs sk2
sbr RegF, 1<<_k25
ldi YH, High(Div_N)
ldi YL, Low(Div_N)
rcall Div_25
ldi tmp, Div_N
rcall WriteLMX2306
rjmp end_sk
sk2:
ldi r25, High(for1_100)
ldi r24, Low(for1_100)
sub r24, Fval1
sbc r25, Fval2
brcs sk3
sbr RegF, 1<<_k100
ldi YH, High(Div_N)
ldi YL, Low(Div_N)
rcall Div_100
ldi tmp, Div_N
rcall WriteLMX2306
rjmp end_sk
sk3:
sbr RegF, 1<<_k1000
ldi YH, High(Div_N)
ldi YL, Low(Div_N)
rcall Div_1000
ldi tmp, Div_N
rcall WriteLMX2306
end_sk:
pop r25
pop r24
ret

Res:
out TCNT0, T_Stop
out TCNT1H, T_Stop
out TCNT1L, T_Stop
ldi tmp, k_div
out OCR0A, tmp
ldi Fval3, 100
ldi cnt0, 9
sbis PinD, Vrem_Sh
ldi cnt0, 90
ldi tmp, (1<<OCIE0A)|(1<<TOIE1)
out TIMSK, tmp
sbis PinD, FreqHigh
andi regF, (1<<_calibr)
andi regF, (1<<_calibr)|(1<<_k25)|(1<<_k100)|(1<<_k1000)
clt
ret

Mul25:
clr Fval4
Mul5 Fval4, Fval3, Fval2, Fval1
Mul5 Fval4, Fval3, Fval2, Fval1
ret

.include "Izmerenie.asm"
.include "Delay.asm"
.include "LCD4.asm"
.include "Timer.asm"
.include "WriteToLMX2306.asm"
.exit

1075. Tahoe, 24.09.2007 03:58
КРОКОДИЛ
Глянь почту.

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

Выше, где я написал про capture. Я второпях фигню написал, во всяком случае сейчас перечитал и понял, что за заноза у меня сидела в голове. Касательно capture регистра МК, это просто "снимок" состояния таймера, в момент захвата. Вермут всё ещё действует , так что не знаю, насколько понятно я сейчас изъяснился.

Добавление от 24.09.2007 04:15:

Коротко, насчёт того, что е тебе заслал. ЕМНИМС, там подсчитывается кол-во импульсов, за фиксированый интервал времени.

1076. КРОКОДИЛ, 24.09.2007 04:43
Tahoe
так что не знаю, насколько понятно я сейчас изъяснился.
Вроде как понятно -capture запоминает цифры в таймере.

1077. Pyku_He_oTTyda, 28.09.2007 14:30
КРОКОДИЛ
Скинь мне писмецо, я твой адрес потерял. Отправлю что обещал.

1078. КРОКОДИЛ, 29.09.2007 05:18
Pyku_He_oTTyda
Зы. Я сначала письмо тебе написал,а потом только смог попасть сюда и прочитать твой пост, -после того как мобильник пережил третью стирку в стиралке интернет стал здорово глючить -наверно сисадмины виноваты

Добавление от 29.09.2007 05:33:

Tahoe
Dikoy
ALL
Нашел на складе десяток микросхем 1RM7-0002корейского производства -незнаю что это за микра,-наверное ARM?
Системный поиск даташита никчему хорошему непривел Поэтому возникли вопросы:
1)Что за микросхема?
2)Для чего применяется?
3)Где взять на нё даташит?
4)И где про неё можно почитать на руском языке?

1079. Pyku_He_oTTyda, 29.09.2007 17:01
КРОКОДИЛ
Это высшее общение, на уровне подсознания.
З.Ы. На письмо ответил

1080. КРОКОДИЛ, 29.09.2007 20:09
ЗЫ. Я там еще вопросов накидал.......................пару мешков

1081. КРОКОДИЛ, 06.10.2007 10:32
ALL
Долго и вдумчиво переводил даташит на мегу48 но так и несмог понять как мне организовать счет
1)Короче мне нужно считать 16разрядным таймером внешние импульсы, и по захвату 16битным таймером внешнего импульса запускать ещё 8разрядный таймер, а по переполнению 8 разрядного таймера останавливать счет в 16разрядном -как это правильно сделать?
2)В визарде кодевижена сразу включать 8разрядный таймер нельзя так как он должен включатся при захвате 16разрядным таймером внешнего импульса -тоесть програмно- как это сделать я немугу сообразить потому что у него целая куча непонятных настроек
3)Непонятно как остановить 16разрядный таймер?
4)И еще меня неустраивает то что 8разрядный таймер считает до 255, а мне нужен счет до 250, -как можно ограничить предел счета? чтобы переполнение происходило при 250?

1082. Dikoy, 06.10.2007 17:22
КРОКОДИЛ
В визарде кодевижена сразу включать 8разрядный таймер нельзя так как он должен включатся при захвате 16разрядным таймером
Зато можно посмотреть, что визард генерит, когда хочет его запустить

Непонятно как остановить 16разрядный таймер?
Опять же, смотрим, что генерит визард, когда этот таймер стоппед.

И еще меня неустраивает то что 8разрядный таймер считает до 255, а мне нужен счет до 250, -как можно ограничить предел счета? чтобы переполнение происходило при 250?
Записать в таймер число 5. Тогда он начнёт считать с 5 до 255

Подробнее вечером напишу, сейчас некогда...

1083. КРОКОДИЛ, 06.10.2007 23:36
Dikoy
Записать в таймер число 5. Тогда он начнёт считать с 5 до 255
Я ненашел в даташите примера как его вписывать

Добавление от 06.10.2007 23:41:

Напиши какой у тебя контролер -без названия контролера откомпилить неполучается

Добавление от 06.10.2007 23:46:

Ыщё вопрос -как внутренний ИОН включить для АЦП ?

1084. Dikoy, 07.10.2007 22:45
КРОКОДИЛ
Я ненашел в даташите примера как его вписывать
В регистр таймера, котрый ты читаешь, как в любую переменную.

мега8 там

как внутренний ИОН включить для АЦП ?
Ну дык визард напряги:

#define ADC_VREF_TYPE 0xC0
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: Int., cap. on AREF
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
// ADC4: On, ADC5: On
DIDR0=0x00;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x87;

1085. КРОКОДИЛ, 08.10.2007 00:05
Dikoy
Тут еще непонятно -если таймер "стоппед" а прерывания у него установлены на захват фронта, то призойдет ли захват по приходу сигнала или таймер всётаки нужно сначала включить?

1086. Dikoy, 08.10.2007 14:33
Смотря какое прерывание. Если обработчик имеет место быть, то в этом обработчике ты и запускаешь таймер. Если обработчик не предусмотрен (таймер запускается сам) то ты должен его предварительно настроить, а обработчик вызовется при переполнении. Но в АВР такого нету, кажется...
Не силён я в таймерах...

1087. КРОКОДИЛ, 08.10.2007 15:02
Dikoy
Не силён я в таймерах...
А в графических дисплеях силен?
ЗЫ.Скачал хидер и функцию работы графического дисплея 128на64 правда под 51 камень расчитана, теперь сижу разбираюсь -дефайны переделываю -но мне кажется что там чтото не так -посмотри может чёнибудь подскажешь
хидер
код:
extern void WaitM005CReady(void);
extern void SetSegm(void);
extern void OutDataM005CByte(char ch);
extern void tmp_dat(char ch);
extern void RefreshM005CPos(void);
extern void b_L0_Screen_Set_Pos(unsigned char x, unsigned char y);
extern void GotoXY(unsigned char x, unsigned char y);

extern void PutChar(unsigned char ch);
extern void OutTextXY(unsigned char x, unsigned char y, unsigned char *str1);

extern void PutChar_i(char ch);
extern void OutTextXY_i(unsigned char x, unsigned char y, char *str1);

extern void ClrScr(void);
extern void InitScr(void);
extern void PutChar16xy(unsigned char x, unsigned char y, char ch);
extern void OutTextXY16(unsigned char x, unsigned char y, char *str1);


а это сам код
код:
/* -------------------------------------------- */ 
/* Процедуры работы с дисплеем. */
/* -------------------------------------------- */
#include <device.h>

extern code unsigned char font[];

#define L_DATA P0
#define L_DATA_7 P0_7
#define L_DI P1_0
#define L_RW P1_1
#define L_E P1_4
#define L_CS1 P1_5
#define L_CS2 P1_6
#define L_RES P1_7


idata int SCREEN_SEGMENT;
idata int SCREEN_ADDR;
idata int SCREEN_PAGE;

/* -------------------------------------------- */

void l_delay(int count)
{
idata int i;

for(i=0; i<=count; i++) {};
}
/* -------------------------------------------- */

void WaitM005CReady(void)
{
L_E = 0;
L_DI = 0;
L_RW = 1;

L_DATA = L_DATA | 0xff;
l_delay(2);

L_E = 1;
while(L_DATA_7 == 1){};
L_E = 0;
}
/* -------------------------------------------- */

void SetSegm(void)
{
if(SCREEN_SEGMENT == 1)
{
L_CS2 = 1;
L_CS1 = 0;
}
else
{
L_CS2 = 0;
L_CS1 = 1;
};
}

/* -------------------------------------------- */

void OutDataM005CByte(unsigned char ch)
{
WaitM005CReady();

L_DI = 1;
L_RW = 0;

SetSegm();

L_DATA = ch;
l_delay(2);

L_E = 1;
l_delay(1);
L_E = 0;
}
/* -------------------------------------------- */

void tmp_dat(char ch)
{
L_DI = 0;
L_RW = 0;
L_DATA = ch;
l_delay(2);

L_E = 1;
l_delay(1);
L_E = 0;
}
/* -------------------------------------------- */

void RefreshM005CPos(void)
{
SetSegm();
WaitM005CReady();

/* Set collumn */
tmp_dat( (SCREEN_ADDR & 0x3f) | 0x40 );
WaitM005CReady();

/* Set line */
tmp_dat( (SCREEN_PAGE & 0x07) | 0xB8 );
WaitM005CReady();

/* Set lines shift */
tmp_dat( (0x00 & 0x3F) | 0xC0 );
WaitM005CReady();
}
/* -------------------------------------------- */

void b_L0_Screen_Set_Pos(unsigned char x, unsigned char y)
{
/* Set position of current segment driver */

if(x > 0x3f)
{ SCREEN_SEGMENT = 1; }
else
{ SCREEN_SEGMENT = 0; };

SCREEN_ADDR = x & 0x3F;
SCREEN_PAGE = y & 0x07;

RefreshM005CPos();
}
/* -------------------------------------------- */

void GotoXY(unsigned char x, unsigned char y)
{
b_L0_Screen_Set_Pos(8*x,y);
}
/* -------------------------------------------- */

void PutChar(unsigned char ch)
{
idata unsigned char* pch;
idata int i;

if(ch >= 192 && ch <= 223){ch = ch - 64;}
else if(ch >= 224 && ch <= 239){ch = ch - 64;}
else if(ch >= 240){ch = ch - 16;}

pch = (unsigned char*)(&font) + ch*8;

for(i=0; i<=7; i++)
{
OutDataM005CByte(pch[i]);
};

}

/* -------------------------------------------- */

void OutTextXY(unsigned char x, unsigned char y, unsigned char *str1)
{
idata unsigned char i;

i = 0;
while(*(str1+i) != 0x00)
{
GotoXY(x+i,y);
PutChar(*(str1+i));
i++;
};

}
/* -------------------------------------------- */

void PutChar_i(unsigned char ch)
{
idata unsigned char* pch;
idata unsigned char i;

if(ch >= 192 && ch <= 223){ch = ch - 64;}
else if(ch >= 224 && ch <= 239){ch = ch - 64;}
else if(ch >= 240){ch = ch - 16;}

pch = (char*)(&font) + ch*8;

for(i=0; i<=7; i++)
{
OutDataM005CByte(pch[i]^0xff);
};

}

void OutTextXY_i(unsigned char x, unsigned char y, unsigned char *str1)
{
idata unsigned char i;

i = 0;
while(*(str1+i) != 0x00)
{
GotoXY(x+i,y);
PutChar_i(*(str1+i));
i++;
};

}
/* -------------------------------------------- */

void ClrScr(void)
{
code char *nstr = " ";
idata unsigned char i;

for(i=0; i<=7; i++)
{
OutTextXY(0,i,nstr);
};
}
/* -------------------------------------------- */
void InitScr(void)
{

L_RES = 0;
l_delay(10000);
L_RES = 1;
l_delay(10000);
L_RES = 0;
l_delay(10000);
L_RES = 1;


L_DATA = 0xf0;
l_delay(2);
L_E = 0;
L_DI = 0;
L_RW = 1;
L_CS1 = 1;
L_CS2 = 1;
l_delay(4);
L_E = 1;
while(L_DATA_7 == 1){};


L_E = 0;
L_RW = 0;
L_DATA = 0x3f;
l_delay(2);
L_E = 1;
l_delay(4);
L_E = 0;

WaitM005CReady();

l_delay(4000);
ClrScr();

}



1088. Dikoy, 08.10.2007 21:37
КРОКОДИЛ
Неужели под АВР исходник не нашёл?
По моему в апнотах были коды для графики...
что там с компиляцией? Я ж писал - мега8 там. Впрочем, это там и по инклудам видно.

1089. КРОКОДИЛ, 09.10.2007 02:59
Dikoy
Неужели под АВР исходник не нашёл?
Не, под AVR все на асме

Я ж писал - мега8 там.
Не, не писал или письмо недошло -такое часто бывает.
там и по инклудам видно.
Нифига по инклюдам не видно -кроме тактовой частоты процесора 8МГЦ нефига ненашел
Вобщем 15 ошибок и 31 предупреждение, -позже ошибки соскирдую в один файл и пришлю.

Добавление от 09.10.2007 03:45:

Отправил письмо.

1090. PitPit, 10.10.2007 14:09
Спасибо за супер урок!
Подскажите пожалуйста. Хочу подсоеденить к МК ATtiny2313 динамик. Как программно заставить его исполнять звуки разных частот? На языке Си.
Спасибо!

1091. 676038, 10.10.2007 15:59
PitPit
Схема и программа для 2313 которая проигрывает 5 мелодий.
http://pol-sem.narod.ru/muson/muson.htm

1092. BSVi, 13.10.2007 15:54
Ссори, что влажу, но может кто знает.

Хочк сделать макрос в ассемблерном файле, который будет подключаться к сишной проге (компилируется все avr-gcc)

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

#define PWM_CHANNEL(PWM_CH) \
lds r19, PWM_CH+1 \
lds r18, PWM1


Ассемблер ругается на garbage at the end of line.

Как заставить препроцессор обрабатывать выражения типа (PWM_CH+1) из макроса? Кстате, если это выражение только одно в define, то он отрабатывет нормально

Добавление от 13.10.2007 16:31:

Ага, докапался я до того, что дефан все в одну строчку валит. Как сделать перенос строки в дефайне?

1093. sw1972, 13.10.2007 17:52
цитата:
BSVi:
Ссори, что влажу, но может кто знает.

Хочк сделать макрос в ассемблерном файле, который будет подключаться к сишной проге (компилируется все avr-gcc)

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

#define PWM_CHANNEL(PWM_CH) \
lds r19, PWM_CH+1 \
lds r18, PWM1


Ассемблер ругается на garbage at the end of line.

Как заставить препроцессор обрабатывать выражения типа (PWM_CH+1) из макроса? Кстате, если это выражение только одно в define, то он отрабатывет нормально



Добавление от 13.10.2007 16:31:

Ага, докапался я до того, что дефан все в одну строчку валит. Как сделать перенос строки в дефайне?

Вы забыли, скорее всего, добавить фигурные скобки (для макросов это также принято как и для функций).
Попробуйте так:
#define PWM_CHANNEL(PWM_CH) \
{lds r19, PWM_CH+1 \
lds r18, PWM1}

Может, кое-где следует добавить по двоеточию, если необходимо
И ещё, насколько я знаю, в макросах синтаксис не контролируется!
Он контролируется при написании функций.
Поэтому будьте готовы ко всяким неожиданностям при написании макросов.
Я через такое проходил.
Удачи!


URL: http://forum.ixbt.com/topic.cgi?id=48:5298

Время GMT +04. Даты в формате dd.mm.yyyy.
Rambler's Top100