27.04.2010, 21:39
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Осваиваем PIC24
Приношу свои извинения за молчание .
Пока готовлю материал ,но быстро не получится ...
__________________
Осторожно , злой кот
|
|
|
|
27.04.2010, 21:44
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Осваиваем PIC24
Сообщение от Dtolok
|
вопрос такой по часам - как сохранить значения если отключить устройство? куда прикрутить батарейку?
|
Никуда. Мк в "слип", часы идут в "слипе".
|
|
|
|
27.04.2010, 22:05
|
|
Гражданин KAZUS.RU
Регистрация: 28.11.2007
Адрес: харьков
Сообщений: 850
Сказал спасибо: 339
Сказали Спасибо 43 раз(а) в 23 сообщении(ях)
|
Re: Осваиваем PIC24
realid, это понятно... а вот нельзя отключить порты а питать только АЛУ
|
|
|
|
27.04.2010, 23:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Осваиваем PIC24
Сообщение от realid
|
Никуда. Мк в "слип", часы идут в "слипе".
|
Это они конечно недодумали... причём существенно (((((
Сообщение от Dtolok
|
realid, это понятно... а вот нельзя отключить порты а питать только АЛУ
|
А зачем АЛУ без портов? Ему тогда только спать. А в слипе питать АЛУ нет необходимости.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
Последний раз редактировалось picavr; 27.04.2010 в 23:34.
|
|
|
|
27.04.2010, 23:49
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Осваиваем PIC24
Сообщение от picavr
|
Это они конечно недодумали... причём существенно (((((
|
Да конечно, не дурнее нас.
Всё это уже не раз перетералось, для малоногих XLP - самый раз.
|
|
|
|
28.04.2010, 09:05
|
|
Гражданин KAZUS.RU
Регистрация: 28.11.2007
Адрес: харьков
Сообщений: 850
Сказал спасибо: 339
Сказали Спасибо 43 раз(а) в 23 сообщении(ях)
|
Re: Осваиваем PIC24
прикрутил k pic24fj64ga004 -LCD wh2004a через PMP со стробами управляющих сигналов... так вот нормально не считывает бит занятости LCD кто то сталкивался? как сконфигурировать задержки ?
|
|
|
|
28.04.2010, 10:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Осваиваем PIC24
Сообщение от Dtolok
|
PMP со стробами управляющих сигналов
|
Каких именно? Без схемы подключения LCD к МК сложно что-либо рекомендовать.
Есть ли согласование уровней между МК и LCD?
P.S. Про сигнал E не забыли? Для контроллера ST7066 (LCD wh2004a) он является стробом чтения записи.
Последний раз редактировалось AJScorp; 28.04.2010 в 10:20.
|
|
|
|
28.04.2010, 20:08
|
|
Гражданин KAZUS.RU
Регистрация: 28.11.2007
Адрес: харьков
Сообщений: 850
Сказал спасибо: 339
Сказали Спасибо 43 раз(а) в 23 сообщении(ях)
|
Re: Осваиваем PIC24
да с сигналами все ок! только вот когда добавляю задержку тогда на экран выводятся все символы...
PHP код:
|
sub procedure writeLCD( dim addr , c as byte)
dim flag as bit
while(flag = 1 ) 'wait for PMP to be available
flag = PMMODE.BUSY
wend
PMADDR = addr
PMDATA = c
Delay_us (20) 'вот задержка....
readLCD(LCDCMD)
end sub
'чтение флага занятости порта и LCD
sub function readLCD (dim addr as byte) as byte
dim flag as bit
while(flag = 1) ' wait for PMP to be available
flag = PMMODE.BUSY
wend
PMADDR = addr
result = PMDATA
while(flag = 1) ' wait for PMP to be available
flag = PMMODE.BUSY
wend
while (flag = 1)
flag = PMDATA.B7
result = PMDATA
wend
result = PMDATA
'PMDATA =0
end sub
|
Последний раз редактировалось dosikus; 28.04.2010 в 20:21.
|
|
|
|
28.04.2010, 20:45
|
|
Временная регистрация
Регистрация: 20.06.2007
Сообщений: 70
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
Re: Осваиваем PIC24
Индикатор (WH1602) нормально работает и при 3,3 в, ест-но, надо только с напряжением контрастности выкручиваться. Вот рабочий пример на основе "Полетов на PIC24"
PHP код:
|
#include ‹p24fj64ga004.h›
#include ‹libpic30.h›
#define LCDDATA 1 // RS = 1 - выбор регистра данных
#define LCDCMD 0 // RS = 0 - выбор регистра команд
#define PMDATA PMDIN1
#define LCDbusy() LCDread(LCDCMD)&0x80
#define LCDaddr() LCDread(LCDCMD)&0x7F
#define getLCD() LCDread(LCDDATA)
#define putLCD(d) LCDwrite(LCDDATA, (d))
#define LCDcmd(c) LCDwrite(LCDCMD,(c))
#define LCDhome() LCDwrite(LCDCMD,2) // команда Return Home - курсор устанавливается в первое знакоместо
#define LCDclr() LCDwrite(LCDCMD,1) // команда Clear Display - очистить экран,
#define LCDon() LCDwrite(LCDCMD,0x0c) // команда Display On, курсор выключен
#define LCDsetG(a) LCDwrite(LCDCMD,(a&0x3f)|0x40)
#define LCDsetC(a) LCDwrite(LCDCMD,(a&0x7f)|0x80)
#define TFLY 25000 // 9000 х 16 us = 144 ms
#define DELAY() TMR1=0; while(TMR1‹TFLY)
// Тактовая частота
#define CRISTAL_FREQ 8000000 // частота внутреннего генератора
#define FREQ_CORE (CRISTAL_FREQ*4) // частота работы ядра (с учетом PLL) - 32 МГц
#define Fcyc (FREQ_CORE/2) // частота выполнения инструкций - 16 МГц
// Макрос задержки
#define Delay_ms(n) (n*(Fcyc/1000000)*1000)
//************************************************** **************
// Биты конфигурации
//************************************************** **************
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF );
_CONFIG2(IESO_OFF & FNOSC_FRCPLL & POSCMOD_NONE );
void LCDInit(void){
// инициализация модуля PMP для работы с ЖКИ
PMCON = 0x83BF;
PMMODE = 0x3FF;
PMAEN = 0x0001;
// init TMR1
T1CON=0x8030; // Fosc/2, прескалер 1:256, 16 uS/tick
// Задержка перед инициализацией LCD (время после подачи питания)
TMR1=0;
while(TMR1‹1600); // ожидание 1600x16 = 25,6 mS
// инициализация ЖКИ WH-1602
PMADDR = LCDCMD; // выбор регистра команд
PMDATA = 0x38; // первая команда начальной инициализации
TMR1 = 0; // задержка 4,8 mS
while(TMR1‹300){}
PMADDR = LCDCMD; // выбор регистра команд
PMDATA = 0x38; // вторая команда начальной инициализации
TMR1 = 0; // задержка 128uS
while(TMR1‹8){}
PMADDR = LCDCMD; // выбор регистра команд
PMDATA = 0x38; // третья команда начальной инициализации
TMR1 = 0; // задержка 48 uS
while(TMR1‹3){}
PMADDR = LCDCMD; //
PMDATA = 0x38; // четвертая команда: 8-бит, 2 линии, 5х7 точек
TMR1 = 0; // задержка 48 uS
while(TMR1‹3){}
PMADDR = LCDCMD; //
PMDATA = 0x08; // команда Display Off
TMR1 = 0; // задержка 48 uS
while(TMR1‹3){}
PMADDR = LCDCMD; //
PMDATA = 0x01; // команда Clear Display
TMR1 = 0; // задержка 2,4 mS
while(TMR1‹150){}
PMADDR = LCDCMD; //
PMDATA = 0x06; // команда Entry Mode Set (инкремент позиции курсора, экран не сдвигается)
TMR1 = 0; // задержка 48 uS
while(TMR1‹3){}
} // LCDInit
void LCDInit_1(){
LATB=0;
__delay32(Delay_ms(100));
LATB=1‹‹9|1‹‹8|1‹‹7;
LATB=1‹‹14|1‹‹9|1‹‹8|1‹‹7;
asm("nop;");
LATB=1‹‹9|1‹‹8|1‹‹7;
__delay32(Delay_ms(10));
LATB=1‹‹9|1‹‹8|1‹‹7;
LATB=1‹‹14|1‹‹9|1‹‹8|1‹‹7;
asm("nop");
LATB=1‹‹9|1‹‹8|1‹‹7;
__delay32(Delay_ms(1));
LATB=1‹‹9|1‹‹8|1‹‹7;
LATB=1‹‹14|1‹‹9|1‹‹8|1‹‹7;
asm("nop");
LATB=1‹‹9|1‹‹8|1‹‹7;
__delay32(Delay_ms(1));
LATB=1‹‹9|1‹‹8|1‹‹7;
LATB=1‹‹14|1‹‹9|1‹‹8|1‹‹7;
asm("nop");
LATB=1‹‹9|1‹‹8|1‹‹7;
__delay32(Delay_ms(1));
LATB=1‹‹9;
LATB=1‹‹14|1‹‹9;
asm("nop");
LATB=1‹‹9;
__delay32(Delay_ms(1));
LATB=1‹‹12;
LATB=1‹‹14|1‹‹12;
asm("nop");
LATB=1‹‹12;
__delay32(Delay_ms(5));
LATB=1‹‹11|1‹‹10;
LATB=1‹‹14|1‹‹11|1‹‹10;
asm("nop");
LATB=1‹‹11|1‹‹10;
__delay32(Delay_ms(1)); // конец инициализации
LATB=1‹‹9|1‹‹10|1‹‹11|1‹‹12; // включение индикатора
asm("nop; nop");
LATB=1‹‹14|1‹‹9|1‹‹10|1‹‹11|1‹‹12;
asm("nop; nop");
LATB=1‹‹9|1‹‹10|1‹‹11|1‹‹12;
__delay32(Delay_ms(1));
LATB=1‹‹13|1‹‹12|1‹‹10|1‹‹8|1‹‹7; // выводим 5
asm("nop; nop");
LATB=1‹‹14|1‹‹13|1‹‹12|1‹‹10|1‹‹8|1‹‹7;
asm("nop; nop");
LATB=1‹‹13|1‹‹12|1‹‹10|1‹‹8|1‹‹7;
__delay32(Delay_ms(1));
}
char LCDread(int addr){
int dummy;
while(PMMODEbits.BUSY);
PMADDR = addr;
dummy = PMDATA;
while(PMMODEbits.BUSY);
return(PMDATA);
}// LCDread
void LCDwrite(int addr, char c){
while(LCDbusy());
while(PMMODEbits.BUSY);
PMADDR = addr;
PMDATA = c;
}// LCDwrite
void putsLCD(char *s){
while(*s)
putLCD(*s++);
}// putsLCD
void main(){
char i;
CLKDIVbits.RCDIV=0; // настройка постскалера генератора FRC
TRISA=0;
AD1PCFG = 0xFFFF; // Все выводы - цифровые
// -----------------------------------------------------------------------------------------------------------------
// Конфигурация параллельного порта
// -----------------------------------------------------------------------------------------------------------------
/*
Подключение модуля PMP PIC24FJ64GA004 к ЖКИ (WH1602):
D0-D7 -› PMD0-PMD7 - шина данных
R/~W -› PMRD (RB13 - выв.11) - чтение/~запись
E -› PMWR (RB14 - выв.14) - строб
A0(RS) -› PMA0 (RC7 - выв.3) - доступ к регистрам контроллера ЖКИ
*/
T1CON=0x8030; // Fosc/2, прескалер 1:256, 16 uS/tick
LCDInit();
LCDon();
putsLCD("Flying the PIC24");
LCDsetG(0);
putLCD(2);
putLCD(2);
putLCD(6);
putLCD(0x1f);
putLCD(6);
putLCD(2);
putLCD(2);
putLCD(0);
putLCD(0);
putLCD(4);
putLCD(0x0c);
putLCD(0x1c);
putLCD(0);
putLCD(0);
putLCD(0);
putLCD(0);
while(1){
LCDsetC(0x40+14);
putLCD(0);
putLCD(1);
DELAY();
for(i=13;i›=0;i--)
{
LCDsetC(0x40+i);
putLCD(0);
putLCD(1);
putLCD(' ');
DELAY();
}
LCDsetC(0x40);
putLCD(1);
putLCD(' ');
DELAY();
LCDsetC(0x40);
putLCD(' ');
LCDsetC(0x40+15);
putLCD(0);
DELAY();
//LATA=~LATA;
//__delay32(Delay_ms(500));
}
}//~
|
Пользуйтесь!
Последний раз редактировалось dosikus; 28.04.2010 в 20:57.
|
|
|
Сказали "Спасибо" Petr_Dynin
|
|
|
28.04.2010, 21:39
|
|
Вид на жительство
Регистрация: 06.10.2006
Сообщений: 329
Сказал спасибо: 4
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
|
Re: Осваиваем PIC24
Сообщение от Petr_Dynin
|
Код:
|
LATB=1‹‹9|1‹‹8|1‹‹7;
LATB=1‹‹14|1‹‹9|1‹‹8|1‹‹7; |
|
Не знаю как кому, но мне такие записи глаз режут, да и сопровождать подобный код очень тяжело.
Мне кажется так и понятнее будет и сопровождать проще
Код:
|
#define LED0 B, 7, H
#define LED1 B, 8, H
#define LED2 B, 9, H
///
LATB = ((1 ‹‹ BITNUM(LED0 )) | (1 ‹‹ BITNUM(LED1 )) | (1 ‹‹ BITNUM(LED2 )) ); |
пример
|
|
|
Эти 2 пользователя(ей) сказали Спасибо DL36 за это сообщение:
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:08.
|
|