Большой Воронежский Форум
Страница 18 из 43
« Первая < 812131415161718 19202122232428 > Последняя »
»Радиолюбитель>PIC контроллеры. Программаторы и первый проект на PIC
petrd 10:44 25.07.2010

Сообщение от BOURNE:
Так вот, какую программу легче использовать для данной цели : визуал или билдер?

Какой владеете, той и пользуйтесь. [Ответ]
тибет 19:17 27.07.2010
требуется помощь в настройке прибора ТРМ251 — программный ПИД-регулятор ОВЕН
http://www.owen.ru/catalog/72638013 [Ответ]
BOURNE 08:26 05.08.2010
Пришел мне по почте 18f4550, рад , что могу начать осваивать
Почитал даташит и состряпал небольшую программку на асме, которая выводит в порт В бегущий огонек, в симуляции мплаб и в протеусе все работает превосходно, но собрал на макетке в железе, и получилось так,что результат не соответствует ожиданиям

Во-первых, на выводах порта Б логическая единица почему-то 1В, и диоды горят очень блекло. Во-вторых, бегущего огонька- нет
, сначала могут загореться все светодиоды, а потом выключишь-включишь питание, и горит всего один. использую внутренние синхроимпульсы.
У меня предположение, что возможно это происходит из-за того , что я неправильно устанавливаю биты конфигурации для задания этих импульсов. Покажите пожалуйста как правильно записывать конфигурацию для мк и как правильно использовать внутренний синхрогенератор, потому что запутался какой регистр надо использовать osccon или osctune

Код на асм:

;бегущий огонек,модель 2(с таймером_0 и прерыванием)
;порт В-активен,TMR0,внутренний генератор
list p=18f4550
osccon equ 0xfd3
intcon equ 0xff2
intcon2 equ 0xff1
adcon1 equ 0xfc1
tmr0 equ 0xfd6
tmr0l equ 0xfd6
tmr0h equ 0xfd7
t0con equ 0xfd5
status equ 0xfd8
trisb equ 0xf93
portb equ 0xf81
latb equ 0xf8a

org 00
goto start

org 0x000008
goto interrupt

org 0x12
start
movlw b'0110011'
movwf osccon ;конфигурация осциллятора
movlw b'10100000'
movwf intcon ; установка прерывания
bcf intcon2,7 ; pull-up для выводов порта В(но на выводах все -равно 1В)
movlw 0x00
movwf trisb ;порт Б на выход
movlw 0x0f
movwf adcon1 ; выводы digital
movlw b'00000001'
movwf latb ; зажигаю первый светодиод
bcf status,0
movlw b'10000101'
movwf t0con ; установка таймера
clrf tmr0l ; его очистка
loop
nop
goto loop

org 0x0c
interrupt
rlcf latb,1
bcf intcon,2 ; очистка флага прерывания
retfie
end
Буду признателен за помощь
[Ответ]
petrd 08:58 05.08.2010
По приведенному Вами мало чем поможешь.
Osctune Вам сейчас не нужен.
Как установлены биты конфигурации?
Вот это зачем?
Код:
osccon equ 0xfd3
intcon equ 0xff2
intcon2 equ 0xff1
adcon1 equ 0xfc1
tmr0 equ 0xfd6
tmr0l equ 0xfd6
tmr0h equ 0xfd7
t0con equ 0xfd5
status equ 0xfd8
trisb equ 0xf93
portb equ 0xf81
latb equ 0xf8a
Кто научил? Не Корабельников ли? Откуда весь пример? [Ответ]
BOURNE 09:50 05.08.2010
Да, читал самоучитель Корабельникова. Там обычно он так объявлял регистры. Я пробовал не объявлять, но тогда возникали ошибки. Биты конфигурации я выставляю в winpic800 при прошивке:Internal oscillator, XT used by USB, сторожевой таймер выключаю,Oscillator selection- пробовал divided 2, no-divide, cpu system clock-96MHz PLL div 6, галочка напротив USBPLL, VREGEN,ccp2mx,stvren. Писал программу сам, соблюдая некоторые принципы из самоучителя [Ответ]
petrd 11:00 05.08.2010

Сообщение от BOURNE:
Да, читал самоучитель Корабельникова. Там обычно он так объявлял регистры. Я пробовал не объявлять, но тогда возникали ошибки. Биты конфигурации я выставляю в winpic800 при прошивке:Internal oscillator, XT used by USB, сторожевой таймер выключаю,Oscillator selection- пробовал divided 2, no-divide, cpu system clock-96MHz PLL div 6, галочка напротив USBPLL, VREGEN,ccp2mx,stvren. Писал программу сам, соблюдая некоторые принципы из самоучителя

Пусть он и дальше их так объявляет и пользуется своими принципами тоже сам. Все определения регистров уже описаны в MPLAB, их надо только подключить к проекту, например так:
Код:
	#include	<p18f4550.inc>
А биты конфигурации надо указывать в исходном тексте, для этого существует директива CONFIG (все это есть в справке), например:
Код:
    CONFIG  OSC = HS, WDT = OFF, LVP = OFF
Приводите код в порядок. [Ответ]
BOURNE 18:23 05.08.2010
Исправил:
;бегущий огонек,модель 2(с таймером_0 и прерыванием)
;порт В-активен,TMR0,внутренний генератор

LIST P=18F4550
#INCLUDE P18F4550.INC
__CONFIG _CONFIG1L,_PLLDIV_1_1L&_CPUDIV_OSC1_PLL2_1L&_FOSC_ INTOSC_HS_1H&_VREGEN_OFF_2L&_WDT_OFF_2H&_LVP_OFF_4 L


org 00
goto start

org 0x000008
goto interrupt

org 0x12
start

;movlw b'0110011'
;movwf OSCCON
movlw b'10100000'
movwf INTCON
bcf INTCON2,7
movlw 0x00
movwf TRISB
movlw 0x0f
movwf ADCON1
movlw b'00000001'
movwf LATB
bcf STATUS,0
movlw b'10000100'
movwf T0CON
clrf TMR0L
loop
nop
goto loop

org 0x0c
interrupt
rlcf LATB,1
bcf INTCON,2
retfie
end
Конфигурацию записал немного не так как у Вас. Прошил этим контроллер, но все по -прежнему. Неужели без кварца так и не будет работать? [Ответ]
petrd 22:34 05.08.2010

Сообщение от BOURNE:
Конфигурацию записал немного не так как у Вас. Прошил этим контроллер, но все по -прежнему. Неужели без кварца так и не будет работать?

Заработает.
В Вашем коде все в куче:
Код:
__CONFIG _CONFIG1L,_PLLDIV_1_1L&_CPUDIV_OSC1_PLL2_1L&_FOSC_ INTOSC_HS_1H&_VREGEN_OFF_2L&_WDT_OFF_2H&_LVP_OFF_4 L
но ведь некоторые из указанных битов относятся к другим байтам конфигурации, поэтому надо бы чуть по-другому:
Код:
__CONFIG _CONFIG1H,  _FOSC_INTOSC_HS_1H  ;тактирование от внутреннего генератора 
__CONFIG _CONFIG2H,  _WDT_OFF_2H              ; сторожевой таймер отключен
P.S. Используйте для форматирования кода тэги. [Ответ]
BOURNE 12:26 06.08.2010
И я еще не совсем улавливаю разницу между регистром конфигурации config1h и регистром osccon. И там, и там задается частота осциллятора и выбирается какого он типа. Зачем тогда два регистра практически с одинаковыми параметрами?
Я где- то прочитал, что обязательно к контроллеру нужно подключать внешний синхронизатор,тк без него не загрузятся конфигурационные биты, а уже потом контроллер может работать без него в случае, если выбрана внутренняя синхронизация. Это так? Просто я на макетке не подключал кварц.
Код:
;бегущий огонек,модель 2(с таймером_0 и прерыванием)
;порт В-активен,TMR0,внутренний генератор
LIST   P=18F4550
#INCLUDE P18F4550.INC
__CONFIG _CONFIG1L,_PLLDIV_1_1L&_CPUDIV_OSC1_PLL2_1L
__CONFIG _CONFIG1H,_FOSC_INTOSCIO_EC_1H
__CONFIG _CONFIG2L,_VREGEN_OFF_2L
__CONFIG _CONFIG2H,_WDT_OFF_2H
__CONFIG _CONFIG4L,_LVP_OFF_4L
         
org 00
goto start

org 0x000008
goto interrupt

org 0x12
start
	movlw b'11100110'
	movwf OSCCON
        movlw b'10100000'
	movwf INTCON
	;bcf INTCON2,7
	movlw 0x00
	movwf TRISB
	movlw 0x0f
	movwf ADCON1
	movlw b'00000001'
	movwf LATB
	bcf STATUS,0
	movlw b'10000100'
	movwf T0CON
	clrf TMR0L	
loop
    nop
    goto loop

org 0x0c
interrupt
        rlcf LATB,1
	bcf INTCON,2
	retfie
end
[Ответ]
petrd 22:24 06.08.2010

Сообщение от BOURNE:
И я еще не совсем улавливаю разницу между регистром конфигурации config1h и регистром osccon. И там, и там задается частота осциллятора и выбирается какого он типа. Зачем тогда два регистра практически с одинаковыми параметрами?
Я где- то прочитал, что обязательно к контроллеру нужно подключать внешний синхронизатор,тк без него не загрузятся конфигурационные биты, а уже потом контроллер может работать без него в случае, если выбрана внутренняя синхронизация. Это так? Просто я на макетке не подключал кварц.

Код:
__CONFIG _CONFIG1L,_PLLDIV_1_1L&_CPUDIV_OSC1_PLL2_1L
__CONFIG _CONFIG1H,_FOSC_INTOSCIO_EC_1H
__CONFIG _CONFIG2L,_VREGEN_OFF_2L
__CONFIG _CONFIG2H,_WDT_OFF_2H
__CONFIG _CONFIG4L,_LVP_OFF_4L

У PIC18F4550 12 источников тактирования и управление ими достаточно сложное и требует однозначного понимания как оно работатет.
В config1h выбирается (в процессе работы не меняется):
1. В каком режиме будет работать первичный генератор (т.е выводы OSC1 и OSC2).
2. Кто будет тактировать ядро - переферию (модуль USB тактируется отдельно).
3. Как будет тактироваться USB.
4. Управляет частотой первичного (внешние такты или кварц) генератора, а не ВНУТРЕННЕГО.
Регистр osccon - позволяет оперативно по ходу программы переключаться между доступными источниками тактирования ядра и переферии (но не USB), а также он управляет частотой ВНУТРЕННЕГО генератора INTOSC.

Если не использовать USB, то все должно работать и без внешнего кварца (без внешнего кварца или внешних тактов USB работать не будет).
Биты конфигурации при старте не грузятся, они устанавливаются при программировании. При включении контроллер вообще начинает работать от 32 кГц (INTRC), т.к после сброса OSCTUNE = OSCCON = 0x00, и будет работать от него до тех пор пока в OSCCON(<SCS1:SCS0>) не переключите на другой источник тактирования (первичный, внутренний или от генератора TMR1).
P.S. Говорим, говорим, а вывод MCLR подтянут к питанию? [Ответ]
BOURNE 06:16 07.08.2010
Ок. Спасибо за разъяснения. Запустил я эту схемку. Первая моя рабочая программа в железе Теперь с шим начну разбираться. [Ответ]
petrd 09:08 07.08.2010

Сообщение от BOURNE:
Ок. Спасибо за разъяснения. Запустил я эту схемку.

И что было? [Ответ]
BOURNE 09:14 07.08.2010
Оказалось все банально просто: я поставил слишком большое значение делителя для счетчика, поэтому возрастал промежуток между миганиями, и не дождавшись смены лампочки я выключал схему с убеждением , что она не работает. Первый светодиод-то загорался, мне бы подождать ...

Вопрос по ШИМ: если , допустим, нам нужно управлять ДПТ с помощью ШИМ, то можно ли точно установить как определенное значение duty cycle соответствует тому или иному значению скорости вращения ротора; eсли, например, необходимо получить приблизительно 10 об/сек, то как рассчитать duty cycle?
[Ответ]
pt200___dr.ON 21:00 08.08.2010
1) Есть ли тут люди пользовавшиеся dsPIC30Fхххх / PIC24HJ ( удавалось ли кому запустить встроенное АЦП на 1 MSPS)?
2) Может ли ктонибудь дать в аренду отладчик/программатор( вероятно на пару дней) для них?
3) Удавалось ли кому прошить PIC24 JDMом+WinPic800 ?

P.S. а то чтото аврки совсем сильно подорожали [Ответ]
petrd 16:54 11.08.2010

Сообщение от pt200___dr.ON:
2) Может ли ктонибудь дать в аренду отладчик/программатор( вероятно на пару дней) для них?

Если еще актуально, то могу одолжить PICKit2? [Ответ]
Roma4ka 22:24 15.08.2010
помогите с отображениям температуры на 7-Segment,

Сообщение от :
const char SegCode[11] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F ,0x00};
// 0 1 2 3 4 5 6 7 8 9
const char Column[3] = {0x0C,0x0A,0x06};
static char Segment[3] = {0x00,0x00,0x00};


unsigned short counter;
const unsigned short TEMP_RESOLUTION = 12;

unsigned temp;


void interrupt ()
{ unsigned t;
if (INTCON.T0IF)
{
//Scan digits with TMR0
INTCON.T0IF = 0;
RA4_bit;
if (counter ==2)
{
PORTA = Column[counter];
PORTB = Segment[counter];
counter = 0;
} else
{
PORTA = Column[counter];
PORTB = Segment[counter];
counter ++;
}
}

}

void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;

if (temp2write & 0x8000) {
Segment[0] = 0x40;
temp2write = ~temp2write + 1;
} else Segment[0] = 0x00;

temp_whole =temp2write >> RES_SHIFT ;

if (temp_whole/100)
Segment[0] = SegCode[temp_whole/100]; else Segment[0] =0x00;
Segment[1] = SegCode[(temp_whole/10)%10];
Segment[2] = SegCode[temp_whole%10];

if(temp_whole<35){ RA4_bit =1;}else {RA4_bit =0;}


}// Display_Temperature


void InitMain() {

CMCON = 0x07;
TRISA = 0x00;
PORTA = 0x00;
TRISB = 0x00;
PORTB = 0x00;
counter = 0;
OPTION_REG = 0x04; // настройка TMR0, прерывания будут каждые 66,304 ms
INTCON.T0IE=1; // разрешили прерывания по переполнению TMR0
INTCON.GIE=1; // включили механизм прерываний*/
RA4_bit=1;




}//InitMain
void main ()
{ InitMain();
while (1)
{

Ow_Reset(&PORTA,0); // Onewire reset signal
Ow_Write(&PORTA, 0, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 0, 0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA, 0);
Ow_Write(&PORTA, 0, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 0, 0xBE); // Issue command READ_SCRATCHPAD
temp = Ow_Read(&PORTA,0);
temp = (Ow_Read(&PORTA, 0) << 8) + temp;
Display_Temperature(temp);

Delay_ms(100);
}
}


Изображения
[Ответ]
petrd 22:50 15.08.2010

Сообщение от Roma4ka:
помогите с отображениям температуры на 7-Segment

А проблема-то в чем? [Ответ]
Roma4ka 12:01 16.08.2010

Сообщение от petrd:
А проблема-то в чем?

поблема в віводе на порта, надо только 3 бита менять ...а как незнаю, RA1_bit,RA2_bit и RA3_bit [Ответ]
petrd 12:28 16.08.2010

Сообщение от Roma4ka:
поблема в віводе на порта, надо только 3 бита менять ...а как незнаю, RA1_bit,RA2_bit и RA3_bit

Так они у Вас в прерывании и меняются (правда вместе с RA4 - а зачем он вообще нужен?):
Код:
PORTA = Column[counter];
только непонятно для чего в прерывании это:
Код:
RA4_bit;
В чем проблема так и непонятно, четче сформулируйте проблему. [Ответ]
pt200___dr.ON 12:31 16.08.2010
Roma4ka, например так
Код:
PORTA = ( PORTA & ( ~( BIT1|BIT2|BIT3))) | Column[counter];
[Ответ]
petrd 12:37 16.08.2010

Сообщение от BOURNE:
Вопрос по ШИМ: если , допустим, нам нужно управлять ДПТ с помощью ШИМ, то можно ли точно установить как определенное значение duty cycle соответствует тому или иному значению скорости вращения ротора; eсли, например, необходимо получить приблизительно 10 об/сек, то как рассчитать duty cycle?

Для этого надо знать какая у двигателя зависимость - обороты/напряжение - линейная, логарифмическая и т.д. Для линейной зависимости все просто, для нелинейной, наверное, проще через таблицу. [Ответ]
Roma4ka 12:38 16.08.2010
то хотел.....писать обрабочик на RA4_bit; [Ответ]
Roma4ka 12:48 16.08.2010
pt200___dr.ON спасибо
только у меня
Код:
PORTA ^= ( PORTA & ( ~(RA1_bit|RA2_bit|RA3_bit))) | Column[counter];
[Ответ]
pt200___dr.ON 21:41 16.08.2010

Сообщение от Roma4ka:
pt200___dr.ON спасибо
только у меня

Код:
PORTA ^= ( PORTA & ( ~(RA1_bit|RA2_bit|RA3_bit))) | Column[counter];

Чегото круто навернуто
Я имел ввиду
Код:
PORTA = ( PORTA & ( ~0x0E)) | Column[counter];
[Ответ]
Азат 16:20 13.09.2010
Здраствуйте!
1. Собрал термометр подключил к третей ноге реле,напряжение все время скачет т.е. вкл и выкл постоянно.Что я не правильно сделал.
2.Можно ли нарисовать схему как правильно подключить инфракрасный приемник. [Ответ]
petrd 18:19 13.09.2010

Сообщение от Азат:
Здраствуйте!
1. Собрал термометр подключил к третей ноге реле,напряжение все время скачет т.е. вкл и выкл постоянно.Что я не правильно сделал.
2.Можно ли нарисовать схему как правильно подключить инфракрасный приемник.

1. В каком смысле реле подключили? Что прямо к ноге? Без транзистора или драйвера какого? А второй конец реле к чему подключен?
2. Какой приемник? Для чего? [Ответ]
Азат 11:46 14.09.2010
petrd, Да я новичок глупо не ругайтесь сильно.
1.Хотелось бы собрать чтобы что нибудь вкл.с пульта управления.
Т.е поставить кнопку установки где при нажатие с пульта запомниться код1 включения и код2 выключения
При нажатии вкл на дисплее высветиться ВКЛ и включиться реле
При нажатии выкл на дисплее высветиться ВЫКЛ и выключиться реле [Ответ]
Азат 11:47 14.09.2010
petrd, Один к реле а от реле к массе. Подскажите как правильно соединить? [Ответ]
petrd 10:23 15.09.2010

Сообщение от Азат:
petrd, Да я новичок глупо не ругайтесь сильно.
1.Хотелось бы собрать чтобы что нибудь вкл.с пульта управления.
Т.е поставить кнопку установки где при нажатие с пульта запомниться код1 включения и код2 выключения
При нажатии вкл на дисплее высветиться ВКЛ и включиться реле
При нажатии выкл на дисплее высветиться ВЫКЛ и выключиться реле

Схема транзисторного ключа здесь http://www.microchip.su/showthread.php?t=9284. Так как Вы делаете - делать НЕЛЬЗЯ!
При включении реле на ЖКИ и так появляется 1.
А для применения ДУ придется модифицировать программу.
С ключем сначала разберитесь. [Ответ]
Азат 11:04 15.09.2010
petrd, Спасибо мне уже обьяснили куда коллектор куда эмитер и куда базу.Знания растут.В итоге повесл на реле светодиод соответственно то горит,то гаснет.Теперь можно и с ДУ разбираться.Вообще PIC штука интересная.И еще интересует реализация подключения к сом порту т.е чтоб отправлял команды к примеру если светодиод не горит, в сом отправляет не горит,и реализация отпраляю команду в пик через com приходит ответ состояния светодиода. [Ответ]
Страница 18 из 43
« Первая < 812131415161718 19202122232428 > Последняя »
Вверх