Краткий Курс - программирование AVR - часть V

 
1 4 5 6 7 8 12

SAA

втянувшийся

aliens6> 2.Как считать бит из порта (PIN)?

Устройство? Имя сестра, имя!!!? ж-) Вот даташит то и надо читать ж-)

SBIC P, b Skip if Bit in I/O Register Cleared if (P(b)=0) PC ← PC + 2 or 3 None 1 / 2 / 3
SBIS P, b Skip if Bit in I/O Register is Set if (P(b)=1) PC ← PC + 2 or 3 None 1 / 2 / 3

aliens6> 3.Можно ли использовать знак |= дл превращения в 0, когда все единицы?

Это что ассемблер? Если это Си, то это поразрядное или для операндов справа, с операндом слева. Т.е. как при помощи логического сложения получить 0? только если оба операнда = 0.

// A=0, B=0
A |= B,
// A = 0

aliens6> 4.Как считать данные по УСАРТ у

Чиать порт данных приемника-передатчика (он у них один на двоих ж-))

aliens6> 5.Как сдвигать ? с помощью << не получается, или я е правильно пишу, или это вообще не сдвиг. :rolleyes: [»]

сдвигается еще как ж-)

A = B << C // сдвигает B на C разрядов, результат в А

A <<= C // сдвигает A на C разрядов, результат в А


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


Термостату: Что же в курсе для начинающих наше отечественное изделеие AVR Algoritm Builder обойдено вниманием? Предвзятость? ж-)
 

SAA

втянувшийся

KIT.> А смысла действительно невижу... На 3310 например моники мы закупаем по сотне рублей за штуку. Помоему енто дешевле даже чем покупать моник HD44780 и т.д. Да и возможностей у него поболее все-таки графический.
KIT.> ;) [»]

Собственно купил я сие чудо, нашел схему подключения (AT Mega8 + 3310), на VCC и Меги и 3310 подается 3.3В. В магазине продали стабилизатор 1117 но !!! вместо 3.3 индекса зевнули и всучили 3. Вопрос 3310 при 3V будет работать? То что Mega работает я уверен. Но не совсем понимаю почему в схеме у товарища за бугром на мегу подано 3.3 (Какой смысл?).

 

SAA

втянувшийся


+AlS+> Еще вопрос можно ли напрямую соединить две ноги МК одна из которых будет работать как вход, а другая настроена как INT0 (например falling edge - по заднему фронту). [»]

Т.е. обе на вход? Можно. Только вот сдается мне что либо обе нужно будет подтягивать, либо обе не подтягивать.
А зачем??? Задача какая решается при этом?
 

+AlS+

новичок
+AlS+>> Еще вопрос можно ли напрямую соединить две ноги МК одна из которых будет работать как вход, а другая настроена как INT0 (например falling edge - по заднему фронту). [»]
SAA> Т.е. обе на вход? Можно. Только вот сдается мне что либо обе нужно будет подтягивать, либо обе не подтягивать.
SAA> А зачем??? Задача какая решается при этом? [»]

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

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

Так вот по прерыванию INT0 определяю начало импульса, а с другого вывода считываю напряжение. Хотя не знаю, может можно и правильнее эту операцию делать одним выводом INT0, не знаю, с него можно напряжение считывать, если он сконфигурирован для работы по прерыванию и в тодже самое время считывать напряжение с него.

Я вроде написал на Си прогу в MVLAB отэмулировал, вроде все в норме, оствалось в железе проверить. И затем доработать прогу что б реализовать анализ последовательности пачек импульсов (т.е. весь номер).

 

KIT.

новичок
KIT.>> А смысла действительно невижу... На 3310 например моники мы закупаем по сотне рублей за штуку. Помоему енто дешевле даже чем покупать моник HD44780 и т.д. Да и возможностей у него поболее все-таки графический.
KIT.>> ;) [»]
SAA> Собственно купил я сие чудо, нашел схему подключения (AT Mega8 + 3310), на VCC и Меги и 3310 подается 3.3В. В магазине продали стабилизатор 1117 но !!! вместо 3.3 индекса зевнули и всучили 3. Вопрос 3310 при 3V будет работать? То что Mega работает я уверен. Но не совсем понимаю почему в схеме у товарища за бугром на мегу подано 3.3 (Какой смысл?). [»]

Работать будет. У меня работает от 3v просто через резистивный делитель.
Кстати в телефоне он вообще питается от 2.7v и при ентом работает :)
А мегу зачем покупал трехвольтовую? Потом проблемы возникнуть могут при сопряжении с чем нибудь. У меня моник подключен к 5 вольтовой at90s8535-
просто все сигналы на моник через делители. :huh:
 
RU termostat #14.02.2005 11:11
+
-
edit
 

termostat

аксакал

> +AlS+
по прерыванию INT0 определяю начало импульса, а с другого вывода считываю напряжение. может можно и правильнее эту операцию делать одним выводом INT0
 


да. можно считывать с него же.

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


> +AlS+
Я вроде написал на Си прогу...
 


"вроде написал" - это как? типа "все подвергай сомнению" - ну ты философ :-)


////////////////////////////////////////////


> SAA
Термостату: Что же в курсе для начинающих наше отечественное изделеие AVR Algoritm Builder обойдено вниманием? Предвзятость? ж-)
 


у меня КРАТКИЙ курс, в нем много чего нету. Судя по вопрсам в форуме даже краткий не читают целиком.

Ты сам сделай Туториал по "AVR Algoritm Builder" если считаешь его полезным инструментом.
RU termostat #14.02.2005 11:13
+
-
edit
 

termostat

аксакал

> aliens6
Вопросы по курсу:
 


Есть вопросы - это уже не плохо...

> aliens6
1.Почему в первом задании работает таймер, но мы не задавали TIMSK?(т.е. не включили таймер)
 


TIMSK - посмотри ДШ чем управляет этот регистр.

о прерываниях в задаче 03, в задаче 01 само прерывание не используется!

> aliens6
2.Как считать бит из порта (PIN)?
 


Сичтать весь регистр по времени столько же что и 1 бит, поэтому читают обычно регистр.

Возможно тебя интересует как узнать значение нужного бита в регистре?
если номер бита = BIT то можно так:

if (REGISTR && (1<<BIT)) {
        если бит = 1 выполняется код здесь      
                         }
  else {
если бит = 0 выполняется код здесь
       }


Если нужно подождать пока бит станет = 0
// на этой строчке зациклимся пока бит=1
while(REGISTR && (1<<BIT)); 

Если понял то

Задание: измени условия на противоположные.


> aliens6
3.Можно ли использовать знак |= дл превращения в 0, когда все единицы?
 


Если все единицы нужно превратить в 0 то просто обнули регистр
REGISTER = 0;

Если нужно сделать "0" или "1" какойто разряд (= отдельный бит) регистра
то посмотри пару страниц назад или задачу 1 курса.

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


> aliens6
4.Как считать данные по УСАРТ у
 


Грамотно принимать данные с UART не так просто!

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

Тебе будет выдан код на Си.

Используй код генераторы - это очень удобно,
я использую оба и от ImageCraft ICC


> aliens6
5.Как сдвигать ? с помощью << не получается, или я е правильно пишу
 


Наверно не правильно пишешь. примеры выше и почитай это:
http://avr123.nm.ru/c_book.rar
Это сообщение редактировалось 14.02.2005 в 12:37

+AlS+

новичок
termostat> +AlS+
termostat> по прерыванию INT0 определяю начало импульса, а с другого вывода считываю напряжение. может можно и правильнее эту операцию делать одним выводом INT0

termostat> да. можно считывать с него же.
termostat> а поимка INT0 фронта импульса не достаточна для его определения? зачем уровень считывать?

Для определения достаточно, но все дело в том что фронт показывает только наличие импульса. Еще нужно определить его длительность, ну и как вариант я просто смотру наличие уровня 1 каждые 20мс и если длительность больше чем 80мс, значит считается что просто положили трубку телефона.


termostat> +AlS+
termostat> Я вроде написал на Си прогу...
termostat>
termostat> "вроде написал" - это как? типа "все подвергай сомнению" - ну ты философ :-)
termostat> ////////////////////////////////////////////

Пока в железе не заработает буду считать ВРОДЕ. :-) Я ж тока в эмуляторе прогонял.
 

SAA

втянувшийся

KIT.> Работать будет. У меня работает от 3v просто через резистивный делитель.
KIT.> Кстати в телефоне он вообще питается от 2.7v и при ентом работает :)

Этто хорошо ж-) похоже 3.3 выбрано только по питанию схемы в целом, видимо от аккумуляторов.

KIT.> А мегу зачем покупал трехвольтовую? Потом проблемы возникнуть могут при сопряжении с чем нибудь. У меня моник подключен к 5 вольтовой at90s8535-

Ну честно говоря любая аьмелка питается в диапазоне от 3...5 просто при этом нужно уходить на меньшие тактовые. А у меня была мега я ее не покупал, 16PI и меня сильно удивило что она на 16MHz пошла на 3V видимо все же может работать не стабильно.

KIT.> просто все сигналы на моник через делители. :huh: [»]

Вот я и подумал что лучше перебдеть чем недобдеть ж-), вдруг думаю по логическому уровню будет накладка ж-) все таки там в коде пулап на одну из ног ставится.

Если не трудно объясни что значит послыка команды 0x80, 0x40 которые потом орятся с остатком от деления CAHE_SIZE и с целым от деления CAHE_SIZE. Кол-во бит остатка что ли и целых байт для пердачи в Device RAM?
 

SAA

втянувшийся


+AlS+> Дык, я хочу прогу написать для анализорования набора номера в телефонной линии.
+AlS+> Я решил работать по фронту импульса... То есть при появлении фронта каждые 20 мс буду считывать напряжение в линии и тем самым определю наличие одного импульса, затем все повторяется, но и детектор пауз между посылками нужно реализовать.
+AlS+> Так вот по прерыванию INT0 определяю начало импульса, а с другого вывода считываю напряжение. Хотя не знаю, может можно и правильнее эту операцию делать одним выводом INT0, не знаю, с него можно напряжение считывать, если он сконфигурирован для работы по прерыванию и в тодже самое время считывать напряжение с него.


На вскидку несколько решений попроще на мой взгляд:

1. Запускать таймер по офронту. Ловить AIN (на аналоговый вход) с захватом по таймеру, если через 20 мс спад не поймал то амба.
2. Ставить INT0 на фронт, AIN на спад.
3. Просто INT0 на фрон, INT1 на спад если при этом не нужно оценивать амплитуду сигнала.

Не подойдет?
 

SAA

втянувшийся

termostat> у меня КРАТКИЙ курс, в нем много чего нету. Судя по вопрсам в форуме даже краткий не читают целиком.

Ну поступающие предложения рассматриваются я верно понял?

termostat> Ты сам сделай Туториал по "AVR Algoritm Builder" если считаешь его полезным инструментом. [»]

Так он есть в документации от самого AVR Builder (как минимум 2 примера). И программатор там очень неплохой и отладчик почти как JTAG и симулятор, за это и нравится.
 

SAA

втянувшийся


Yuran> Допустим на выводе INT0 висит кнопка на землю. Интерапты разрешены и выставлен режим срабатывания по 0 уровню.
Yuran> DDRD 0b00001100
Yuran> PORTD 0b00001100
А точно по уровню 0? Может все таки по смене уровня с 0 на 1(1 в 0)? А с фронтами работает? Или вообще прерывание не действует?

 
RU termostat #14.02.2005 12:42
+
-
edit
 

termostat

аксакал

SAA> Ну честно говоря любая аьмелка питается в диапазоне от 3...5 просто при этом нужно уходить на меньшие тактовые.
 


не вводи людей в заблуждение !

В таком диапазоне работают c буквой L - см. ДШ

а то что у тебя работало это не значит что это правильное решение. правильно как в ДШ.

SAA

втянувшийся

termostat>
SAA> Ну честно говоря любая аьмелка питается в диапазоне от 3...5 просто при этом нужно уходить на меньшие тактовые.
 

termostat> не вводи людей в заблуждение !

Постараюсь больше этого не делать ;-) . Только по моему это в роадмапе на Atmel было, не в даташите, (имею ввиду падения частоты в зависимости о напряжения питания) и помоему для любого чипа. Причем обосновано, CMOS вентиля иеют именно такой диапазон рабочих напряжений 3...5. Если вспомнить К561 так там при наличии совместимости по TTL было питание в диапазоне от 5...12В.

termostat> В таком диапазоне работают c буквой L - см. ДШ
termostat> а то что у тебя работало это не значит что это правильное решение. правильно как в ДШ. [»]

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

Yuran

опытный

Yuran>> Допустим на выводе INT0 висит кнопка на землю. Интерапты разрешены и выставлен режим срабатывания по 0 уровню.
Yuran>> DDRD 0b00001100
Yuran>> PORTD 0b00001100
SAA> А точно по уровню 0? Может все таки по смене уровня с 0 на 1(1 в 0)? А с фронтами работает? Или вообще прерывание не действует? [»]

Да конечно, zero level. это когда ты пулап на землю вешаеш. Кстати на Меге8 данный механизм работает, поэтому всё же склоняюсь в сторону хардваного бага.
 

SAA

втянувшийся


Yuran> Да конечно, zero level. это когда ты пулап на землю вешаеш. Кстати на Меге8 данный механизм работает, поэтому всё же склоняюсь в сторону хардваного бага. [»]

Угу. А там точно по этим ногам доп. функций не насовано? Может быть пул-ап не подвешивается из за этого? Помню на 4433 порт инверсно работал, точнее я так думал, только из за того что АЦП на этом порту должно было быть обязательно запитано по AVCC и GND, а я AVCC так бросил. Потом понял что я уверено лишь "ноль" щупал, а "единицы" просто не было как я не крутился с пул-апом. У меня под руками datasheet нет глянуть на то что у тебя, домой приду гляну для интереса.
А Errata смотрел?
 
+
-
edit
 

aliens6

новичок
2 Termostat

Мне надо считывать именно один бит порта и если он установлен то делать то-то, типа как команды sbic, sbis в ассемблере

Про УСАРТ:
Т.е. ты имеешь ввиду при начале получении данных писать их в переменную пока не придет сто-бит, а потом уже обрабатывать?
 

KIT.

новичок

SAA> Если не трудно объясни что значит послыка команды 0x80, 0x40 которые потом орятся с остатком от деления CAHE_SIZE и с целым от деления CAHE_SIZE. Кол-во бит остатка что ли и целых байт для пердачи в Device RAM? [»]

ЭЭЭЭ а где енто такое? Чет непомню... Приведи плиз название функции, или код?
 

SAA

втянувшийся

SAA>> Если не трудно объясни что значит послыка команды 0x80, 0x40 которые потом орятся с остатком от деления CAHE_SIZE и с целым от деления CAHE_SIZE. Кол-во бит остатка что ли и целых байт для пердачи в Device RAM? [»]
KIT.> ЭЭЭЭ а где енто такое? Чет непомню... Приведи плиз название функции, или код? [»]

Это не у тебя ;-) Товарищ из за бугра (не помню как его намэ) организовал в ОЗУ меги кеш и с него поливает в контроллер в Device RAM процедурой Update. Но я вроде бы разобрался выкачал даташит на контроллер - 0x80 это посылка номера колонки, а 0x40 посылка номера строки (точнее блока из 8 строк) в контроллер NOKIA для позиционирования последнего на X,Y Device RAM.

Что грустно ;-( не запускается у меня NOKIA в чем дело понять не могу, вообще пусто на экране. Ответь на вопросы:

1. Частота тактирования SPI у тебя 2,000 MHz, при тактовой контроллера 8 MHz, что ты достигаешь путем установки 2X и делителя /8. Почему сразу не CLK/4?
2. Можно выставить меньшее значение тактовой? У меня CLK= 16MHz. Реально я могу только 1 MHz выставить.
3. Какие признаки того что устройство (ЖКИ) внимает посылаемым ей данным?
4. Конденсатор на ЖКИ между 6(земля) и 7 ногой, какой номинал? у меня 4.7 МкФ, полярный (у товарища за бугром биполярный нарисован, на фото полярный установлен емкость 4.7uF). А у тебя?
5. В даташите написано

· Display supply voltage range VLCD to VSS
– 6.0 to 8.5 V with LCD voltage internally generated
(voltage generator enabled)
– 6.0 to 9.0 V with LCD voltage externally supplied
(voltage generator switched-off).

Или я глючю?

6. Извечный русский-народный вопрос что делать? Уж больно с модулем поиграться охото. Надеюсь что я его еще не убил.
 

KIT.

новичок

SAA> 6. Извечный русский-народный вопрос что делать? Уж больно с модулем поиграться охото. Надеюсь что я его еще не убил. [»]

Убить его трудно :) Я пробывал.....

Конденсатор пофиг какой, я снял с телефона 1МК смд.
Совет навскидку замкни вывод ресет на питалово 3в. У него активное состояние 0. Я с ентим сначала накололся. У меня вывод ресет моника вообще не обрабатываеться и без него неплохо работает.

Более расширенно попробую ответить вечером, счас надо на работу бежать ;)
 

KIT.

новичок

SAA> 5. В даташите написано
SAA> · Display supply voltage range VLCD to VSS
SAA> – 6.0 to 8.5 V with LCD voltage internally generated
SAA> (voltage generator enabled)
SAA> – 6.0 to 9.0 V with LCD voltage externally supplied
SAA> (voltage generator switched-off).

Да чуть не забыл когда моник включен напруга на конденсаторе гдето 7в
видимо внутренний преобразователь работает

 

SAA

втянувшийся


KIT.> Да чуть не забыл когда моник включен напруга на конденсаторе гдето 7в
KIT.> видимо внутренний преобразователь работает [»]

А если ни 7В, а к примеру 3В (не уверен что у меня 7В), то какие варианты?

 

SAA

втянувшийся


KIT.> Конденсатор пофиг какой, я снял с телефона 1МК смд.
KIT.> Совет навскидку замкни вывод ресет на питалово 3в. У него активное состояние 0. Я с ентим сначала накололся. У меня вывод ресет моника вообще не обрабатываеться и без него неплохо работает.

Попробую.

KIT.> Более расширенно попробую ответить вечером, счас надо на работу бежать ;) [»]

Тебе не трудно схемку прицепить своего подключения? ж-) Если уж мне совсем не в моготу станет, так я выужу из ящика 8515 (у тебя вроде бы этот чип?) и скопирую все твое без изменений. Сейчас я ковыряюсь через AVR Builder и напрямую влить твой код не могу. Однако соблазн запустить устройство - очень и очень велик ;-)
 

KIT.

новичок
SAA> 1. Частота тактирования SPI у тебя 2,000 MHz, при тактовой контроллера 8 MHz, что ты достигаешь путем установки 2X и делителя /8. Почему сразу не CLK/4?

Признаю чето перемудрил.....просто SPCR=0x50;

SAA> 2. Можно выставить меньшее значение тактовой? У меня CLK= 16MHz. Реально я могу только 1 MHz выставить.

Счас попробывал на разных частотах- работает. Точно пашет на 125.000Кгц
С твоей частотой енто вроде SPCR=0x53;

SAA> 3. Какие признаки того что устройство (ЖКИ) внимает посылаемым ей данным?

Я сначала запускал все енто на VMLAB, подцепив вирт. осцил на порт к которому моник подключен. Все красиво видно..
В железе признак один- моник показывает. Назад то он ничего не выплевывает. Ну и напруга на кондере(8.5в)хотя у меня батарейка садиться в мультиметре мог и соврать :angry:
 

KIT.

новичок
SAA> Тебе не трудно схемку прицепить своего подключения? ж-) Если уж мне совсем не в моготу станет, так я выужу из ящика 8515 (у тебя вроде бы этот чип?) и скопирую все твое без изменений. Сейчас я ковыряюсь через AVR Builder и напрямую влить твой код не могу. Однако соблазн запустить устройство - очень и очень велик ;-) [»]

Схему рисовать лень напишу так:
Моник ------ МК at908535-8pi
1 vcc +3v
2 sck pb7 (sck)
3 sda pb5 (mosi)
4 dc pc7 (просто потому что он у меня свободен)
5 cs pc6 (--||--)ентот тоже можно не использовать просто на землю его посадить
6 gnd ент понятно
7 vo кондер 1мк на землю
8 rst +3v в проге он не используеться, хотя по уму наверное надо бы. Но да и так неплохо пашет. Активное состояние 0, поентому если оставить в воздухе то моник все время сброшен будет))))


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

Все сигналы на моник вот так:

Моник ---*---===------ МК
|
| | 1,5к
|
----
Единственное что не удобно пришлось ряд перемычек поставить чтоб при программировании МК отключать Моник. Иначе резюки мешают.



 
1 4 5 6 7 8 12

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru