Так очередное свободное время появилось.
Вопрос.
Как лучьше организрвать отдельную работу каждого выхода (те которые могут работать на выход)независимо друг от друга?
[Ответ]
petrd 12:00 14.10.2009
Сообщение от RN3QGA:
Так очередное свободное время появилось.
Вопрос.
Как лучьше организрвать отдельную работу каждого выхода (те которые могут работать на выход)независимо друг от друга?
Для того чтобы работать на вывод (в отличии от ввода), с выходным портом можно работать как с обычным 8-и разрядным регистром, просто для PIC12F629 в этом регистре (GPIO) не будут доступны 3-й, 7-8 биты и биты выводов настроенные на вход.
Код:
TRISIO := 0; // все выводы на выход, кроме GP3, т.к. он всегда вход
GPIO := 1; // лог.1 будет на GP0, остальные 0
GPIO := 2; // лог.1 будет на GP1, остальные 0
GPIO := 0x10; // лог.1 будет на GP4, остальные 0
GPIO := 0x30; // лог.1 будет на GP4 и GP5, остальные 0
Можно завести переменную типа byte и в ней изменять биты, а после изменения всю переменную выводить в GPIO:
Код:
var kk: byte;
kk := 0;
GPIO : = kk; // на всех выводах лог.0
kk.0 := 1; //бит 0 уст в лог.1
GPIO : = kk; //GP0 лог.1, остальные 0
Можно и непосредственно изменять биты GPIO,
Код:
GPIO.4 : = 1; //на GP4 установить лог.1
но это чревато последствиями операции RMW, поэтому так лучше не делать.
[Ответ]
Сообщение от petrd:
теперь этот компилятор может
Цитата:
now you can use Microchip® tools MPLAB®, ICD2®
and ICD3® together with our compiler (refer to Help for detailed explanation)
Доброго времени суток! скачал.
Петр, а по русски...в чем отличие.(хотя Вас наверно достали глупыми вопросами) [Ответ]
_vka 11:03 17.10.2009
Всем доброго времени суток! Случайно наткнулся на эту тему , как раз начал изучать си
компилятор микроси 3 бетка, не могли бы вы выложить пример обработчика прерываний
для 18 пиков INT0 , INT1, TMR0 (16 БИТ) зарание спасибо
[Ответ]
_vka 18:07 17.10.2009
С прерываниями по int,tmr0 разобрался, буду дальше изучать.
[Ответ]
petrd 19:41 17.10.2009
Сообщение от romchik77:
скачал.
Петр, а по русски...в чем отличие.
Раньше пользователи при отладке могли использовать только симулятор встроенный в компилятор или же аппаратный отладчик на базе mikroICD от mikroE, продукты от mikroE никак не интегрировались в среду разработки MPLAB IDE и невозможна была симуляция в Proteus-е. По неоднократным просьбам пользователей команда mikroE включила в компилятор возможность генерации COFF файлов, используя которые теперь можно проводить отладку в среде MPLAB IDE ( как при помощи симулятора MPLAB SIM, так и при помощи программатора-отладчика ICD2 (ICD3)), а как известно в симуляторе MPLAB уже работают таймеры и т.д. Все это можно найти в help-файле.
Про возможность отладки в Протеусе говорить ничего не буду, об этом разработчики нигде не упоминают. А я Протеус не люблю.
P.S. Давно Вас не видно было.
Сообщение от _vka:
С прерываниями по int,tmr0 разобрался, буду дальше изучать.
Ну если что, то спрашивайте, чем можем поможем. И не такие дела заваливали.
Да и лучше скачайте 3.20, все багов поменьше.
[Ответ]
_vka 11:59 18.10.2009
Для начала пока и 3 версии хватит.
Вопрос как реализовать такой алгоритм, одна кнопка, при нажатии увеличивает регистор допустим count, до 255 после стоп . следующее нажатие будет уменьшать этот регистор до 0, да и значения регистра count заносить в TMR0 .
НА асме просто, выставил флаг и вперед.................. а как на си флаги устанавливать пока не соображу.
Зарание спасибо.
P.S. А мне протеус нравится , удобная прога для быстрой проверки и предворительной отладки то что надо.
Но это только мое мнение.
[Ответ]
_vka 16:12 18.10.2009
Код:
while(1) {
Delay_us(20);
for ( i = 0; i < 2; i++ ){
GPIO.F0 = 0; }
if (fl_inc==0)
// if (Button(&GPIO, 5, 1, 0))
{
GPIO.F2 = 1;
count++; }
if (count==255)
{ GPIO.F2=0;
fl_inc=1; }
if (fl_inc==1){
count--; }
if (count==253)
{
fl_inc=0; }
}
}
вот чтото получилось , может это полная ... поправте если что.
[Ответ]
petrd 20:46 18.10.2009
Сообщение от _vka:
Для начала пока и 3 версии хватит.
Вопрос как реализовать такой алгоритм, одна кнопка, при нажатии увеличивает регистор допустим count, до 255 после стоп . следующее нажатие будет уменьшать этот регистор до 0, да и значения регистра count заносить в TMR0 .
НА асме просто, выставил флаг и вперед.................. а как на си флаги устанавливать пока не соображу.
Если честно, то ничего не понятно, ни алгоритм, ни код. А не понятно с самого начала - зачем увеличивать count до 255, а только потом останавливать? Видимо для себя Вы задачу сформулировали полностью, представили алгоритм, а здесь показали только часть своей мысли. Додумывать за Вас как-то тяжеловато, надо-бы поточнее сформулировать.
А вот только понял, что Вы серьезно настроены по ходу программы что-то писать в TMR0, чего настоятельно не рекомендуется делать (мнение не только мое и я с этим согласен). А насчет флагов, то все также как в asm - флаги это же или переменные или биты в них, объявляете переменную-флаг (или с флагами) и снимаете флаг или выставляете. Или я не о том?
[Ответ]
_vka 16:09 19.10.2009
Код:
bit oldstate, fl_in;
unsigned short count;
//************************************
void interrupt()
{ char i;
TMR0 = count;
PORTA.F1 = 1;
Delay_us(20);
for ( i = 0; i < 10; i++ ){ // здесь можно изменить длительность импульса
PORTA.F1 = 0; }
INTCON.T0IF=0;
}
//*********************************
void init(){
CMCON = 0x07;
TRISA = 0x01;
TRISB = 0;
OPTION_REG = 0x06; //
INTCON = 0xE0;//;разрешить прерывание TMR0
PORTA =0;
PORTB =0;
fl_in=0;
count=126;
oldstate=1;
}
//****************************************
void con()
{ if (fl_in==0){
count++;
PORTB = count; }
if (count==178){
fl_in=1; }
if (fl_in==1){
count--;
PORTB = count; }
if (count==126){
fl_in=0; }
}
//*****************************************
void main(){
unsigned short fl_inc,tmp;
init();
while(1) {
if (oldstate && Button(&PORTA, 0, 1, 0)) { // Detect one-to-zero transition
CON(); // inc count
DELAY_MS(100);
}
}
}
//**************************************
СПАСИБО ЗА УЧАСТИЕ! ЭТО МОЯ ПЕРВАЯ ПРОГА НА СИ.
Что эта прога делает? Меняет частоту импульсов от 60 - 100 гц, при нажатии кнопки частота увеличивается пока count не достиг значения 178 (100гц) после уменьшается
пока count не достиг значения 126 (60 гц) все.
( Вы серьезно настроены по ходу программы что-то писать в TMR0, чего настоятельно не рекомендуется делать (мнение не только мое и я с этим согласен) )
Не понял, а почему нельзя? Обьясните пожалуйста чем черевата запись в TMR0
зарание спасибо.
[Ответ]
petrd 21:24 19.10.2009
Сообщение от _vka:
[/CODE]
СПАСИБО ЗА УЧАСТИЕ! ЭТО МОЯ ПЕРВАЯ ПРОГА НА СИ.
Что эта прога делает? Меняет частоту импульсов от 60 - 100 гц, при нажатии кнопки частота увеличивается пока count не достиг значения 178 (100гц) после уменьшается
пока count не достиг значения 126 (60 гц) все.
( Вы серьезно настроены по ходу программы что-то писать в TMR0, чего настоятельно не рекомендуется делать (мнение не только мое и я с этим согласен) )
Не понял, а почему нельзя? Обьясните пожалуйста чем черевата запись в TMR0
зарание спасибо.
Мое мнение - такой код - не вариант. Точнее не код, а путь избранный для решения такой задачи не совсем верный.
1. Задержки в прерывании - это минус, код обработчика прерывания должен быть коротким (опять не мое мнение). В обработчике все должно быть коротким и по делу (обычно принято так).
2. Если Вы решили работать с частотой, то временные отсчеты должны быть точными, а перезапись TMR0 этому никак не способствует. Для таких целей применяют модуль CCP и TMR2, еще у TMR2 есть замечательное свойство как прерывание по совпадению TMR2 и PR2. Если используется PIC18, то имеются два вектора прерываний, а с ними обоими уже вычисление точных отсчетов при Вашем подходе проблематично.
3. Про TMR0:
- после записи в TMR0 в течении 2-х тактов счетчик не увеличивается. Если используется предделитель, то не особо проблема, а если без него, то надо как-то уже компенсировать;
- и главное - при записи в TMR0 предделитель-то обнуляется, а предделитель мы считать, увы, не можем обычными средствами. И что в нем было на момент записи TMR0 нам уже не узнать.
Поэтому если уж так надо, то надо добиваться того, чтобы TMR0 катился и катился без перезаписи.
P.S. Я просто высказал свое мнение. Выбирать все равно Вам.
[Ответ]
Кому интересно программирование на СИ для встраиваемых систем, то вот отличная статья-руководство от tester'a, представленная им на Microchip Masters-2009 http://wiki.pic24.ru/doku.php/osa/ar...without_errors. Думаю будет полезна при работе на Си с МК различных производителей.
[Ответ]
здравствуйте, объясните пожалуйста задачу:
разработать программируемый формирователь широкоимпульсного модулируемого сигнала с использованием таймеров и счетчиков, все это надо сделать на микроконтроллере PIC18.Вот такой должен быть получен сигнал...Скажите что нужно для этой задачи? как понимаю без программатора не получится?Помогите пожалуйста, очень-очень надо!!!
Изображения
Сообщение от magik09:
объясните пожалуйста задачу:
разработать программируемый формирователь широкоимпульсного модулируемого сигнала с использованием таймеров и счетчиков, все это надо сделать на микроконтроллере PIC18.Вот такой должен быть получен сигнал...Скажите что нужно для этой задачи? как понимаю без программатора не получится?Помогите пожалуйста, очень-очень надо!!!
1. Наверное, не "широкоимпульсный", а широтно-импульсный (ШИМ).
2. Очень-очень надо ..... из студентов? Курсовая?
3. Зачем такой извращенный ШИМ, почему бы не использовать стандартные алгоритмы ШИМ или манчестерского кодирования?
4. Если в железе надо, то программатор безусловно нужен.
5. Язык программирования?
[Ответ]
magik09 19:53 10.11.2009
petrd,
1. Да ШИМ, ошибся(
2. да, студент)
3. Не знаю задание такое дали(
4.В железе не обязательно, но хотелось бы и на железе сделать)
5.Язык программирование ассамблер наверное, но ближе VBA но на нем наверное не получится?
Был бы рад если бы помогли хоть чем ни будь))) Хотябы схему действий если не трудно)
[Ответ]
petrd 07:01 11.11.2009
Сообщение от magik09: petrd,
Язык программирование ассамблер наверное, но ближе VBA но на нем наверное не получится?
Был бы рад если бы помогли хоть чем ни будь))) Хотябы схему действий если не трудно)
Указанные времена могут быть люБыми или жестко связаны между собой
[Ответ]
magik09 11:30 12.11.2009
Могут быть любыми, там надо сделать так чтобы можно было изменять этот сигнал...Но для начала надо получит этот сигнал
[Ответ]
petrd 11:54 12.11.2009
Сообщение от magik09:
Могут быть любыми, там надо сделать так чтобы можно было изменять этот сигнал...Но для начала надо получит этот сигнал
Ну так и что Вы предприняли для того, чтобы получить этот сигнал?
Или Вы надеетесь, что кто-то за Вас это сделает, а Вам галочку в зачетку и вперед пиво пить? Не прокатит.
Есть два пути:
1. Сами свой мозг и руки напрягаете и говорите, что у Вас не получается, тогда Вам безвозмездно подсказывают и поправляют.
2. Признаетесь в нежелании этим заниматься и выдвигаете конструктивное коммерческое предложение, типа:
Сообщение от :
Студент сдаст работу, избавив свой чудо-мозг от тренировки.
Второй путь мне не нравится, но выбирать все равно Вам.
[Ответ]
viktor110668 08:09 13.11.2009
напишите пожалуйста коментарии в асм файлах в каждой строчке на русском я расширение на txt поменял,
Изображения