реклама на сайте
подробности

 
 
17 страниц V  « < 10 11 12 13 14 > »   
Reply to this topicStart new topic
> Микроконтроллеры для начинающих, AVR, PIC, FUJITSU
Игорь Кочет
сообщение Nov 21 2011, 08:57
Сообщение #166





Группа: Новичок
Сообщений: 1
Регистрация: 21-11-11
Пользователь №: 68 422



Подскажите, как в TMR1 перенести число из int переменной ?

из С в дизасемблере выглядит так :

TMR1H:TMR1L=T_next;

Код
  00E7    0879     MOVF 0x79, W
  00E8    008E     MOVWF 0xe


т.е переносится 1 байт.

UPD. так что ли ?:

TMR1L=T_next;
TMR1H=T_next>>8;


Код
144:                   TMR1L=T_next;
  00E7    0879     MOVF 0x79, W
  00E8    008E     MOVWF 0xe
145:                   TMR1H=T_next>>8;
  00E9    087A     MOVF 0x7a, W
  00EA    008F     MOVWF 0xf


Сообщение отредактировал Игорь Кочет - Nov 21 2011, 08:58
Go to the top of the page
 
+Quote Post
maksimp
сообщение Nov 25 2011, 05:20
Сообщение #167


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(Игорь Кочет @ Nov 21 2011, 12:57) *
TMR1H:TMR1L=T_next;

Такого присваивания в языке C нет.
Здесь получилось что TMR1H определилась как метка для оператора goto, а присваивание только TMR1L=T_next;
Цитата(Игорь Кочет @ Nov 21 2011, 12:57) *
TMR1L=T_next;
TMR1H=T_next>>8;

Да.
Go to the top of the page
 
+Quote Post
Araxnid
сообщение Dec 3 2011, 15:30
Сообщение #168


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 3-11-11
Пользователь №: 68 125



Уже во всем разобрался, пичаль с смыслом команд, использовал лоад вместо sts и наоборот =\

Сообщение отредактировал Araxnid - Dec 3 2011, 17:17
Go to the top of the page
 
+Quote Post
Vladimir_Sn
сообщение Jan 17 2012, 10:04
Сообщение #169





Группа: Новичок
Сообщений: 3
Регистрация: 17-01-12
Пользователь №: 69 612



Здравствуйте!
Посмотрите пожалуйста пид регулятор. Написал его на микоС, этот язык только начал осваивать, раньше асм использовал. Пишу для PIC16877A.
Я думаю с ПИДом может возникнуть много заморочек, прошу откликнуться. Ваши комментарии.
//**************** PID *******************************************************
delta_0 = setpoint - Vout; // vi4islenie o6ibki = zadannoe zna4enie - tekuchee
prop_res = delta_0 * Kp; // proporcion-ya sost-ya = o6ibka * Kp

dif_res = (delta_1 - delta_0) * Kd; // prediduchaya o6ibka - tekuchaya o6ibka
// mnozennoe na Kd eto est' diff-ya sost-ya
delta_1 = delta_0; // teper' tekuchaja o6ibka v sledujuchem
// cikle budet prediduchej o6ibkoj
int_res += Ki * delta_0; // integral'naja sostavlyajuchaya summiruet
// vse o6ibki, mnozennie na koefficient Ki
if (int_res > int_max) // esli integr-ya sost-ya too big, togda ograni4ivaju
int_res = int_max; // ee dal'nej6ij rost na urovne int_max
else if (int_res < int_min) // esli integr-ya sost-ya too small, togda ograni4ivaju
int_res = int_min; // ee dal'nej6ee umen'6enie na urovne int_min

control = int_res + dif_res + prop_res; // control eto upravlyajuchee
// vozdejst-e soderz i,d,p sost-e
if (control > control_max) // esli control too big, togda ograni4ivaju
control = control_max; // ego dal'nej6ij rost na urovne control_max
else if (control < control_min) // esli control too small, togda ograni4ivaju
control = control_min; // ego dal'nej6ee umen'6enie na urovne control_min
// teper' peremenneya control soderzit upravlyajuchee vozdejstvie, kotoroe
// trebuetsya otpravit' v module PWM.
//****************************************************************************
Go to the top of the page
 
+Quote Post
nick60
сообщение Jan 21 2012, 08:43
Сообщение #170





Группа: Новичок
Сообщений: 3
Регистрация: 21-12-11
Из: Крым
Пользователь №: 69 005



Доброго времени суток.
Не знаю куда постучаться, начну отсюда, а там куда вывезет ...
Начал что-то делать с AVR-ами, у меня их целых (пока) 2 шт. tiny2313 и mega8, одна mega8 сгорела не выдержав directly подключения
светодиодного индикатора, теперь - только через ограничивающие резисторы.
Повторил несколько чужих конструкций, на стенде, громко сказал sm.gif, и в реале.
Пора начать делать что-то своё.

Вопросов несколько :
1.Как подружиться с AVR Studio 4.18.716 и WinAVR-20100110, не смог скомпилировать ни одного проекта - ошибка
make: *** [termom8.o] Error -1073741819
когда есть синтаксические ошибки, всё выдает адекватно, а когда всё исправишь - ошибка.
Работаю под WinXP, SET переменные установлены правильно, имена файлов/каталогов - 8.3
2.В CodeVisionAVR (пока работаю в нем) есть "волшебник", который делает базовую программу и инициализирует всё! на МК,
а есть ли необходимость в такой инициализации, ведь МК как-то настроен "по-молчанию", достаточно только скорректировать то,
что нужно для определенной работы, делал тестовый секундомер, настроил входы/выходы для индикатора и таймер для прерывания и
работало. Меньше строк программы - меньше ошибок исправлять sm.gif
Вот собственно вопрос - где-нибудь есть сводная информация как настроен МК "по-молчанию",
т.е. с завода или после полного стирания ?
Некоторые настройки сбивают fuses, когда разбирался с чужим проектом, семь потов сошло sad.gif
Пока почерпнул только, что порты настроены на вход с отключенными подтягивающими резисторами, хотя тоже не уверен, потому как есть
общее управление всеми резисторами сразу, внутренний генератор работает на 8MHz с делением на 8, т.е 1MHz - эти настройки и повторяет
"волшебник"
Что там с таймерами и прерываниями ещё "не въехал".
С английским дружу через словарь, в документации много всего, а выудить нужное пока не смог.

Сейчас есть желание сделать на tiny2313 многоточечный термометр (на DS18B20) с выводом на многострочный LCD, подобные конструкции есть,
но они расходуют практически всю программную память МК, а мне нужно еще дополнить функциональности, потому нужно максимально оптимизировать программу, переходить на mega8 не хочется, 8 ножек даром болтаться будут sm.gif


--------------------
Где она - ИСТИНА в последней инстанции ?
Go to the top of the page
 
+Quote Post
maksimp
сообщение Jan 26 2012, 10:12
Сообщение #171


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(nick60 @ Jan 21 2012, 12:43) *
но они расходуют практически всю программную память МК, а мне нужно еще дополнить функциональности, потому нужно максимально оптимизировать программу, переходить на mega8 не хочется, 8 ножек даром болтаться будут sm.gif

Возьмите mega8 и не обращайте внимание на то что ноги даром болтаются.
Go to the top of the page
 
+Quote Post
редактор
сообщение Jan 27 2012, 05:33
Сообщение #172


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



"Значения по умолчанию" возникают в контроллере каждый раз после сигнала RESET. Эти состояния всегда описываются в документации.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение Feb 8 2012, 12:10
Сообщение #173


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Цитата(nick60 @ Jan 21 2012, 11:43) *
Вот собственно вопрос - где-нибудь есть сводная информация как настроен МК "по-молчанию",
т.е. с завода или после полного стирания ?

после сигнала сброс регистры МК переходят в начальное состояние которое вы можете узнать прочитав соответствующий раздел описания МК внизу под названием регистра(любого) и описания его битов есть строка Initial value. Тоже самое fuse bits описывается в графе Default value.
Go to the top of the page
 
+Quote Post
nick60
сообщение Mar 1 2012, 07:40
Сообщение #174





Группа: Новичок
Сообщений: 3
Регистрация: 21-12-11
Из: Крым
Пользователь №: 69 005



Я так понял, что систематизированной информации по предустановленому состоянию МК ни у кого нет.
Ладно, будем копошиться в документации дальше самостоятельно.
Эксперименты изучения МК и его программирования продолжаются ... sm.gif
Удачи всем!

C AVRStudio 4 подружился, оказалось, что дома и на работе у меня установлено что-то, что ломает компилятор.
Потому на компьютере сделал виртуальную машину с помошью VMWare, поставил чистую XP от MS в пробном режиме, установил AVRStudio 4 и все работает.
Почему не работало - копать не буду, потому как времени жалко и можно попасть на ситуацию, что нужный и полезный для работы софт окажется виновником нестыковки.
Так что, выход есть и Слава Богу.



--------------------
Где она - ИСТИНА в последней инстанции ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 1 2012, 08:25
Сообщение #175


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (nick60 @ Mar 1 2012, 09:40) *
Я так понял, что систематизированной информации по предустановленому состоянию МК ни у кого нет.
Даташит. Систематезированнее некуда. Это во-первых. А во-вторых - лучше не полагаться на на значения по-умолчанию, а прописывать явно все регистры используемой периферии. В большинстве случаем это даже дает меньший код, чем наложение масок по "ИЛИ" и "И".

QUOTE (nick60 @ Mar 1 2012, 09:40) *
C AVRStudio 4 подружился, оказалось, что дома и на работе у меня установлено что-то, что ломает компилятор.
Телепатируем: "ломает компилятор" - при попытке компиляции make ругается на команды в makefile. Версия: установлен один из проектов Борланда, поэтому при компиляции вызывается его make.exe, который совершенно несовместим по формату makefile c GNU make. Диагонстика: Start->Programs->Acessories->Command line prompt, в командной строке ввести make --version, убедиться, что вызывается make от Борланда.

Когда надоест виртуальная машина - поставьте в path путь к WinAVR/utils на первое место, т.е. до пути к Борланду.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение Mar 4 2012, 12:23
Сообщение #176


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Цитата(nick60 @ Mar 1 2012, 10:40) *
C AVRStudio 4 подружился, оказалось, что дома и на работе у меня установлено что-то, что ломает компилятор.

У меня ни дома ни на работе ни на др.компах небыло проблем с AVRStudio , и Борланд у меня какоето время стоял. У вас ХР стоят ?
Go to the top of the page
 
+Quote Post
Alex-sh
сообщение Mar 7 2012, 17:17
Сообщение #177





Группа: Новичок
Сообщений: 2
Регистрация: 6-03-12
Пользователь №: 70 658



Люди, помогите пожалуйста. У меня скоро ГОСы. И в вопросах присутствуют задания по программированию микроконтроллеров PIC на Ассемблере. Может кто-нибудь сможет помочь. Задания такие: 1) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую функцию логического И регистров 20h и 21h, и вызов подпрограммы PRG1, если результат равен нулю. 2) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую логическую функцию исключающего ИЛИ портов А и В и вывод результата в порт С, если он не равен нулю. 3) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую множественное ветвление программы по условию установки в единицу бит 0-3 регистра 20h, с приоритетом от младшего разряда к старшему. 4) Составить алгоритм и программу на языке Ассемблер, реализующую временную задержку t= 10 мкс. для МП типа PIC16C55 при тактовой частоте f = 20МГц. Я понимаю что все задания будет в лом писать. Но хотя бы одно. Заранее спасибо
Go to the top of the page
 
+Quote Post
Cosmojam
сообщение Mar 7 2012, 18:45
Сообщение #178


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Цитата(Alex-sh @ Mar 7 2012, 20:17) *
Люди, помогите пожалуйста. У меня скоро ГОСы. И в вопросах присутствуют задания по программированию микроконтроллеров PIC на Ассемблере. Может кто-нибудь сможет помочь. Задания такие: 1) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую функцию логического И регистров 20h и 21h, и вызов подпрограммы PRG1, если результат равен нулю. 2) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую логическую функцию исключающего ИЛИ портов А и В и вывод результата в порт С, если он не равен нулю. 3) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую множественное ветвление программы по условию установки в единицу бит 0-3 регистра 20h, с приоритетом от младшего разряда к старшему. 4) Составить алгоритм и программу на языке Ассемблер, реализующую временную задержку t= 10 мкс. для МП типа PIC16C55 при тактовой частоте f = 20МГц. Я понимаю что все задания будет в лом писать. Но хотя бы одно. Заранее спасибо

#1
Код
    list        p=16c55    
    #include    <p16c55.inc>
    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

reg1        EQU    0x20
reg2        EQU    0x21

ORG 0x000      
goto main

main  
movf reg1, 0
andwf !!!Чтобы увидеть продолжение отправь смс с текстом "я обещаю никогда не пытаться устроиться на работу по специальности в дипломе" на номер 1234


Сообщение отредактировал Cosmojam - Mar 7 2012, 18:47


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
paperplane
сообщение Apr 7 2012, 07:34
Сообщение #179





Группа: Новичок
Сообщений: 1
Регистрация: 6-04-12
Пользователь №: 71 220



Здравствуйте. Недавно начал изучать AVR, почти сразу понадобилось практическое применение. Вот такой вот таймер для мини-оранжереи:

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

Единственная проблема с кодом, это то, как сделать такие большие задержки. Проще всего думаю пропускать нужное количество тактов за час, то есть если частота мк 1МГц, восемь часов ожидания будут выглядить так:
Код
__delay_cycles(3600000000);
__delay_cycles(3600000000);
__delay_cycles(3600000000);
__delay_cycles(3600000000);
__delay_cycles(3600000000);
__delay_cycles(3600000000);
__delay_cycles(3600000000);
__delay_cycles(3600000000);

Но наверное это глупо и нецелесообразно. Подскажите, как это можно реализовать на таймерах мк, и насколько большая погрешность у внутреннего генератора мк. Заранее спасибо.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 7 2012, 12:05
Сообщение #180


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(paperplane @ Apr 7 2012, 10:34) *
Но наверное это глупо и нецелесообразно.

Да. Нецелесообразно.


Код
#define FREQUENCY 11059200
unsigned short MilliSeconds;
unsigned short Seconds;
unsigned char Hour;
#pragma vector=TIMER0_OVF_vect
__interrupt void timer_1khz_isr(void)
{
    if (++Milliseconds>=1000) {
        Milliseconds=0;
        if (++Seconds>=3600) {
            Hour++;
        }
    }
}
void timer1_init(void)
/*
TIMER1 initialize - prescale:1
WGM: 4) CTC, TOP=OCRnA
desired value: 9996Hz
actual value: 9999,277Hz (0,0%)
*/
{
    TCCR1B = 0x00; //stop
    TCNT1H = 0xFB; //setup
    TCNT1L = 0xAF;
    OCR1AH = 0x04;
    OCR1AL = 0x51;
    OCR1BH = 0x04;
    OCR1BL = 0x51;
    OCR1CH = 0x04;
    OCR1CL = 0x51;
    ICR1H  = 0x04;
    ICR1L  = 0x51;
    TCCR1A = 0x00;
    TCCR1B = 0x09; //start Timer
    TIMSK |= (1 << OCIE1A);
}
int main()
{
    timer1_init();
    __enable_interrupt();
    while (1) {
    }
}

Цитата(paperplane @ Apr 7 2012, 10:34) *
насколько большая погрешность у внутреннего генератора мк.

Навеное единицы процентов. Смотрите в datasheet.
Go to the top of the page
 
+Quote Post

17 страниц V  « < 10 11 12 13 14 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016