igor-kochet 0 21 ноября, 2011 Опубликовано 21 ноября, 2011 (изменено) · Жалоба Подскажите, как в 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 Изменено 21 ноября, 2011 пользователем Игорь Кочет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksimp 0 25 ноября, 2011 Опубликовано 25 ноября, 2011 · Жалоба TMR1H:TMR1L=T_next; Такого присваивания в языке C нет. Здесь получилось что TMR1H определилась как метка для оператора goto, а присваивание только TMR1L=T_next; TMR1L=T_next; TMR1H=T_next>>8; Да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Araxnid 0 3 декабря, 2011 Опубликовано 3 декабря, 2011 (изменено) · Жалоба Уже во всем разобрался, пичаль с смыслом команд, использовал лоад вместо sts и наоборот =\ Изменено 3 декабря, 2011 пользователем Araxnid Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladimir_Sn 0 17 января, 2012 Опубликовано 17 января, 2012 · Жалоба Здравствуйте! Посмотрите пожалуйста пид регулятор. Написал его на микоС, этот язык только начал осваивать, раньше асм использовал. Пишу для 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. //**************************************************************************** Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nick60 0 21 января, 2012 Опубликовано 21 января, 2012 · Жалоба Доброго времени суток. Не знаю куда постучаться, начну отсюда, а там куда вывезет ... Начал что-то делать с AVR-ами, у меня их целых (пока) 2 шт. tiny2313 и mega8, одна mega8 сгорела не выдержав directly подключения светодиодного индикатора, теперь - только через ограничивающие резисторы. Повторил несколько чужих конструкций, на стенде, громко сказал :), и в реале. Пора начать делать что-то своё. Вопросов несколько : 1.Как подружиться с AVR Studio 4.18.716 и WinAVR-20100110, не смог скомпилировать ни одного проекта - ошибка make: *** [termom8.o] Error -1073741819 когда есть синтаксические ошибки, всё выдает адекватно, а когда всё исправишь - ошибка. Работаю под WinXP, SET переменные установлены правильно, имена файлов/каталогов - 8.3 2.В CodeVisionAVR (пока работаю в нем) есть "волшебник", который делает базовую программу и инициализирует всё! на МК, а есть ли необходимость в такой инициализации, ведь МК как-то настроен "по-молчанию", достаточно только скорректировать то, что нужно для определенной работы, делал тестовый секундомер, настроил входы/выходы для индикатора и таймер для прерывания и работало. Меньше строк программы - меньше ошибок исправлять :) Вот собственно вопрос - где-нибудь есть сводная информация как настроен МК "по-молчанию", т.е. с завода или после полного стирания ? Некоторые настройки сбивают fuses, когда разбирался с чужим проектом, семь потов сошло :( Пока почерпнул только, что порты настроены на вход с отключенными подтягивающими резисторами, хотя тоже не уверен, потому как есть общее управление всеми резисторами сразу, внутренний генератор работает на 8MHz с делением на 8, т.е 1MHz - эти настройки и повторяет "волшебник" Что там с таймерами и прерываниями ещё "не въехал". С английским дружу через словарь, в документации много всего, а выудить нужное пока не смог. Сейчас есть желание сделать на tiny2313 многоточечный термометр (на DS18B20) с выводом на многострочный LCD, подобные конструкции есть, но они расходуют практически всю программную память МК, а мне нужно еще дополнить функциональности, потому нужно максимально оптимизировать программу, переходить на mega8 не хочется, 8 ножек даром болтаться будут :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksimp 0 26 января, 2012 Опубликовано 26 января, 2012 · Жалоба но они расходуют практически всю программную память МК, а мне нужно еще дополнить функциональности, потому нужно максимально оптимизировать программу, переходить на mega8 не хочется, 8 ножек даром болтаться будут :) Возьмите mega8 и не обращайте внимание на то что ноги даром болтаются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 27 января, 2012 Опубликовано 27 января, 2012 · Жалоба "Значения по умолчанию" возникают в контроллере каждый раз после сигнала RESET. Эти состояния всегда описываются в документации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxiMuz 0 8 февраля, 2012 Опубликовано 8 февраля, 2012 · Жалоба Вот собственно вопрос - где-нибудь есть сводная информация как настроен МК "по-молчанию", т.е. с завода или после полного стирания ? после сигнала сброс регистры МК переходят в начальное состояние которое вы можете узнать прочитав соответствующий раздел описания МК внизу под названием регистра(любого) и описания его битов есть строка Initial value. Тоже самое fuse bits описывается в графе Default value. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nick60 0 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба Я так понял, что систематизированной информации по предустановленому состоянию МК ни у кого нет. Ладно, будем копошиться в документации дальше самостоятельно. Эксперименты изучения МК и его программирования продолжаются ... :) Удачи всем! C AVRStudio 4 подружился, оказалось, что дома и на работе у меня установлено что-то, что ломает компилятор. Потому на компьютере сделал виртуальную машину с помошью VMWare, поставил чистую XP от MS в пробном режиме, установил AVRStudio 4 и все работает. Почему не работало - копать не буду, потому как времени жалко и можно попасть на ситуацию, что нужный и полезный для работы софт окажется виновником нестыковки. Так что, выход есть и Слава Богу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба Я так понял, что систематизированной информации по предустановленому состоянию МК ни у кого нет. Даташит. Систематезированнее некуда. Это во-первых. А во-вторых - лучше не полагаться на на значения по-умолчанию, а прописывать явно все регистры используемой периферии. В большинстве случаем это даже дает меньший код, чем наложение масок по "ИЛИ" и "И". C AVRStudio 4 подружился, оказалось, что дома и на работе у меня установлено что-то, что ломает компилятор.Телепатируем: "ломает компилятор" - при попытке компиляции make ругается на команды в makefile. Версия: установлен один из проектов Борланда, поэтому при компиляции вызывается его make.exe, который совершенно несовместим по формату makefile c GNU make. Диагонстика: Start->Programs->Acessories->Command line prompt, в командной строке ввести make --version, убедиться, что вызывается make от Борланда. Когда надоест виртуальная машина - поставьте в path путь к WinAVR/utils на первое место, т.е. до пути к Борланду. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxiMuz 0 4 марта, 2012 Опубликовано 4 марта, 2012 · Жалоба C AVRStudio 4 подружился, оказалось, что дома и на работе у меня установлено что-то, что ломает компилятор. У меня ни дома ни на работе ни на др.компах небыло проблем с AVRStudio , и Борланд у меня какоето время стоял. У вас ХР стоят ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex-sh 0 7 марта, 2012 Опубликовано 7 марта, 2012 · Жалоба Люди, помогите пожалуйста. У меня скоро ГОСы. И в вопросах присутствуют задания по программированию микроконтроллеров PIC на Ассемблере. Может кто-нибудь сможет помочь. Задания такие: 1) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую функцию логического И регистров 20h и 21h, и вызов подпрограммы PRG1, если результат равен нулю. 2) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую логическую функцию исключающего ИЛИ портов А и В и вывод результата в порт С, если он не равен нулю. 3) Составить алгоритм и программу на языке Ассемблер для МП типа PIC16C55, реализующую множественное ветвление программы по условию установки в единицу бит 0-3 регистра 20h, с приоритетом от младшего разряда к старшему. 4) Составить алгоритм и программу на языке Ассемблер, реализующую временную задержку t= 10 мкс. для МП типа PIC16C55 при тактовой частоте f = 20МГц. Я понимаю что все задания будет в лом писать. Но хотя бы одно. Заранее спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cosmojam 0 7 марта, 2012 Опубликовано 7 марта, 2012 (изменено) · Жалоба Люди, помогите пожалуйста. У меня скоро ГОСы. И в вопросах присутствуют задания по программированию микроконтроллеров 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 Изменено 7 марта, 2012 пользователем Cosmojam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sewakosmo 0 7 апреля, 2012 Опубликовано 7 апреля, 2012 · Жалоба Здравствуйте. Недавно начал изучать 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); Но наверное это глупо и нецелесообразно. Подскажите, как это можно реализовать на таймерах мк, и насколько большая погрешность у внутреннего генератора мк. Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 7 апреля, 2012 Опубликовано 7 апреля, 2012 · Жалоба Но наверное это глупо и нецелесообразно. Да. Нецелесообразно. #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) { } } насколько большая погрешность у внутреннего генератора мк. Навеное единицы процентов. Смотрите в datasheet. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться