»Радиолюбитель>PIC контроллеры. Программаторы и первый проект на PIC
petrd 21:02 09.09.2012
Сообщение от dzer:
Добрый Вам день, уважаемые форумчане.
Прошу Вашей помощи.
post 46-пример, как можно работать с ЖКИ индикатором.
mikro C-компилирует нормально, а mikro C PRO, ни как. Не пойму в чем причина.
Прошу Вашей помощи.
Библиотека LCD в MikroC PRO в части инициализации и предопределенных констант немного изменилась, поэтому для PRO это выглядит так:
Код:
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
char *text = "mikroElektronika";
void main() {
LCD_Cmd(_LCD_CLEAR); // Очистить дисплей
LCD_Cmd(_LCD_CURSOR_OFF); // Кусор выключен
LCD_Out(1,1, text); // Вывести в первую строку слово "mikroElektronika"
Delay_ms(1000); // задержка в 1 сек
LCD_Out(2,6,"mikroE"); // Вывести во вторую строку, начиная с 6-й позиции слово "mikroE"
}
комментарии, post 46, в mikroC PRO.
Спасибо.
[Ответ]
petrd 09:09 10.09.2012
Сообщение от dzer:
комментарии, post 46, в mikroC PRO.
Спасибо.
А что с комментариями? В PRO c комментариями на русском языке все нормально, пишите сколько хотите, проблем нет.
[Ответ]
dzer 10:05 10.09.2012
Все верно если писать самому.
А если смотреть уже написанный, к примеру post 46?
спасибо.
[Ответ]
petrd 11:15 10.09.2012
Сообщение от dzer:
Все верно если писать самому.
А если смотреть уже написанный, к примеру post 46?
спасибо.
Весь текст вижу нормально, копирую, вставляю, редактирую проблемы не понимаю. Картинку прилепите.
[Ответ]
dzer 12:10 10.09.2012
Петр, извиняюсь.
Какая то чертовщина, вроде вместо русских были ?????
А сейчас все нормально.
спасибо.
[Ответ]
Teeen 06:06 05.10.2012
Сообщение от petrd:
Сюда надо низкоомные резисторы в качестве датчиков воткнуть. В DS на L298N показано. А сигнал с резисторов - на компаратор или на АЦП и делай с ним "че хошь"
Здравствуйте petrd!
Смысл понял, ни разу не делал АЦП и не использовал компараторы на PIC. Покажите пожалуйста любой пример кода для подобного анализа. Благодарю! С уважением, Дмитрий.
Сообщение от Teeen:
Здравствуйте petrd!
Смысл понял, ни разу не делал АЦП и не использовал компараторы на PIC. Покажите пожалуйста любой пример кода для подобного анализа. Благодарю! С уважением, Дмитрий.
Да, пойдет.
АЦП в МК штука интересная. Код работы с АЦП в принципе простой, но надо знать сам принцип работы АЦП и особенности его реализации. Есть в АЦП PIC некоторые особенности, которые надо знать.
В PIC контроллерах используется схема АЦП последовательного приближения.
Далее относительно АЦП PIC12F675.
1. Сопротивление нагрузки на входе АЦП не должно быть больше указанного в DS (например, для PIC12F675 - не более 10 кОм), несоблюдение может привести к тому, что показания будут не точными, скачущими и т.д. Меньше можно, больше нельзя.
2. УВХ (устройство выборки и хранения). Накопительный конденсатор УВХ служит для захвата значения входного напряжения и хранения его в процессе преобразования (т.е. при преобразовании конденсатор не разряжается). Отсель вывод - когда нет преобразования конденсатор УВХ подключен к аналоговому входу, когда идет захват и преобразование - отключен от аналогового входа.
3. Tad - время преобразования (одного бита, часто путают с общим временем преобразования), а у нас их 10, итого по DS для преобразования 10 бит надо 11 Tad. Минимальное Tad (опять же по DS) - 1,6 мкс. Итого минимальное время преобразования 10 бит - 11*1.6=17,6 мкс. Это значит, что минимум 17,6 мкс конденсатор УВХ отключен от аналогового входа. Это к тому что за это время напряжение на входе могло сильно измениться и может потребоваться некоторое время пока конденсатор зарядится или разрядится до текущего напряжения на входе. И это время - Tacq.
Здравствуйте Петр! Буду очень презнателен если вы поможите мне. Работаю с мПаскалем имеется PIC12f629 . Подскажите пожалуйста как можно инвертировать вход например : GP1 и как организовать прерывание по этому входу.
[Ответ]
Сообщение от Dima_Jey:
Работаю с мПаскалем имеется PIC12f629 . Подскажите пожалуйста как можно инвертировать вход например : GP1 и как организовать прерывание по этому входу.
Вход нельзя инвертировать, можно инвертировать сигнал на этом входе.
Код:
GPIO.1 := 1- GPIO.1;
Что Вы хотите от GP1? Если прерывание не будет использоваться для вывода из сна, то это плохая идея. Лучше использовать GP2/INT.
[Ответ]
Dima_Jey 09:16 16.11.2012
Я прошу прощения, я только начал изучать М.К. Дело в том, что ик приёмник подаёт положительный сигнал, и отключает его только при наличии сигнала. Можно осмелится вас попросить простой пример использования прерывания по входу (пусть GP2) на паскале.
[Ответ]
petrd 09:39 16.11.2012
Сообщение от Dima_Jey:
Я прошу прощения, я только начал изучать М.К. Дело в том, что ик приёмник подаёт положительный сигнал, и отключает его только при наличии сигнала. Можно осмелится вас попросить простой пример использования прерывания по входу (пусть GP2) на паскале.
Почему Паскаль, а не Си? Ибо помощи мало будет, придется самостоятельно осваивать.
"Дело в том, что ик приёмник подаёт положительный сигнал, и отключает его только при наличии сигнала." Представьте, что вы посторонний человек - понять эту фразу ему по силам будет? И в конце "контрольный в голову" - прерыванием GP2 - как, что, для чего, что от него ожидается?
Излагайте мысли понятно.
[Ответ]
Dima_Jey 09:45 16.11.2012
Я паскаль знаю, давно и неплохо. Всвоё время работал на борланде
[Ответ]
procedure interrupt; // Процыдура прирываний
begin
i:= 1;
end;
begin
GPIO := 00; // инициализировать порты GPIO
CMCON := 7; // отключить компораторы
TRISIO := 0; // все GPIO выходы
TRISIO.GP1 :=1; // GP1 как вход
{ !!!! неизвестный мне код !!!!!! }
i:=0; GPIO.GP2:=0;
while TRUE do
begin
if i=1 then begin
GPIO.GP2:=1; Delay_ms(500); GPIO.GP2:=0;
i:=0;
end;
end;
end.
По нажатию кнопки загорается светодиод, а именно прерывание нужно - потому, что в теле программы будет другой алгоритм.
[Ответ]
Dima_Jey 09:50 16.11.2012
Хочу заметить это приблизительный пример, меня интересует только однит фактор: срабатывание прерывания по нажатию кнопки (приходу положительного сигнала на GP1)
[Ответ]
petrd 14:36 16.11.2012
Сообщение от Dima_Jey:
Хочу заметить это приблизительный пример, меня интересует только однит фактор: срабатывание прерывания по нажатию кнопки (приходу положительного сигнала на GP1)
Повторюсь, не стоит по GP1 прерывание делать. Вариант один - INT.
Код:
procedure interrupt();
begin
if (INTIF_bit <> 0) then
begin
i:=1;
INTIF_bit := 0;
end;
end;
.....
TRISIO2_bit := 1; //вход
INTEDG_bit := 1; //фронт/спад
INTE_bit := 1; //разрешение прерывания INT
GIE_bit := 1; //глобальное разрешение прерываний
........
Да сработало, но только один раз, а потом не реагирует на нажатие. (Нажал первыйраз - светодиод зажёгся и погас как надо, нажал второй раз светодиот не загорается) Немугу понять, что обнулить надо.
[Ответ]
Dima_Jey 15:52 17.11.2012
Всё я разобрался, надо было использовать подтяжку. Спасибо за помощь
[Ответ]
Teeen 10:54 27.11.2012
petrd, здравствуйте!
Давно я не писал на форум...
1). Подскажите пожалуйста, выбрал для дальнейшей работы PIC18F4620, на сайте microchip.com в характеристиках для данного камня указано:
"LCD Module
An integrated LCD driver module, capable of driving 48 segments and 4 commons for LCD display (132 pixels)" - что это означает? В datasheet про это ничего не нашел.
2). Планирую связку PIC18F4620 + LCD16x2(логика +3.3V) - питание и логика на +3.3V - я правильно понимаю, что в программе PICkit 2 нужно сначала будет выставить данное напряжение и только потом программировать, а также программирование будет проходить при выставленном напряжении, а не +5V?
Благодарю за ответы!
[Ответ]
petrd 07:05 28.11.2012
Сообщение от Teeen: petrd, здравствуйте!
Давно я не писал на форум...
1). Подскажите пожалуйста, выбрал для дальнейшей работы PIC18F4620, на сайте microchip.com в характеристиках для данного камня указано:
"LCD Module
An integrated LCD driver module, capable of driving 48 segments and 4 commons for LCD display (132 pixels)" - что это означает? В datasheet про это ничего не нашел.
2). Планирую связку PIC18F4620 + LCD16x2(логика +3.3V) - питание и логика на +3.3V - я правильно понимаю, что в программе PICkit 2 нужно сначала будет выставить данное напряжение и только потом программировать, а также программирование будет проходить при выставленном напряжении, а не +5V?
Благодарю за ответы!
1. Модуль LCD - это железный драйвер непосредственного управления ЖКИ, например, часто используется в брелоках автосигнализаций с ЖКИ, скорее всего Вам он не нужен. Только если Вы решите какой-то ИЖЦ 5-4/8 к нему прицепить.
2. Да.
[Ответ]
enganepe 18:50 29.12.2012
Прошу прощения, может я повторюсь. Как реализовать в MikroC частотомер на Pic? Насколько я понял, необходимо задействовать один из таймеров, например TMR0. Настроить его на прерывания с определенным временным интервалом, возможно так:
OPTION_REG = ??? (что сюда писать, какую величину?),
затем использовать один из портов на вход для подсчета входящих импульсов и в нужный момент (который наступает через определенное число прерываний таймера) вывести результат вычислений (количество вошедших импульсов за промежуток времени, то-бишь в Гц) на LCD. Как все это решить программно, прошу помочь.
Еще, скачал программу для расчетов таймеров PIC Timer Calculator, помогите и с ней разобраться. Всем спасибо! Скоро Новый Год!
[Ответ]
petrd 19:08 29.12.2012
Сообщение от enganepe:
Прошу прощения, может я повторюсь. Как реализовать в MikroC частотомер на Pic? Насколько я понял, необходимо задействовать один из таймеров, например TMR0. Настроить его на прерывания с определенным временным интервалом, возможно так:
OPTION_REG = ??? (что сюда писать, какую величину?),
затем использовать один из портов на вход для подсчета входящих импульсов и в нужный момент (который наступает через определенное число прерываний таймера) вывести результат вычислений (количество вошедших импульсов за промежуток времени, то-бишь в Гц) на LCD. Как все это решить программно, прошу помочь.
Еще, скачал программу для расчетов таймеров PIC Timer Calculator, помогите и с ней разобраться. Всем спасибо! Скоро Новый Год!
Проблема!
Собрал программатор (JDM) по схеме http://radiokot.ru/circuit/digital/pcmod/13/01.gif
Для программирования взял оболочку winpic800
Не пошло
Потом нашел оболочку winpicpgm. Она позволяет автоопределить программатор, "прозвонить" его отдельными сигналами. Странное дело, прозвонка идет, а автоопределение - нет. Т.е. сигналы с порта через программатор к процессору проходят, но программа почему-то не может определить программатор и процессор.
Работу программатора тестером проверял. Сигналы через него идут. Но результат нулевой. Даже снижал скорость передачи данных. Без толку. Вот и думаю. В чем засада...
Может мой путь - тупиковый и есть заведомо рабочие схемы, которые можно собрать и не париться?
ЗЫ по схеме сейчас посмотрел - тот же Экстра пик. С той лишь разницей, что в качестве логического элемента я применил К561ЛА7. Но там все логические сигналы не хуже проходят.
[Ответ]
Globuses 14:47 07.01.2013
Поправка! После плясок с бубном программатор в ICProg стал детектироваться, но не смотря на установку больших задержек при передаче данных, проц не шьется, хотя тестирование подтвердило работоспособность программатора (т.е. сигналы до проца проходят). Что еще проверить надо?
[Ответ]