реклама на сайте
подробности

 
 
> F1 Evalution, Вопросы по изучению
Tonotuh
сообщение Jun 13 2013, 10:00
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 20-11-12
Из: Санкт Петербург
Пользователь №: 74 485



Здравствуйте.
Начинаю изучение пиков с бординой F1 Evaluation Kit (Part Number: DV164132) на основе PIC16F1937 и компилятором CCS 4.140.
Вопрос по работе с индикатором vim-332. Как с ним работать?
даташит не подробный Прикрепленный файл  VIM_332.pdf ( 24.28 килобайт ) Кол-во скачиваний: 214

пины:

B0 - pin 5 |rc |batt|- |ac
A6 - pin 6 |dh |rh |b-c|4dp
A7 - pin 7 |3a |3f |3e |3d
A4 - pin 8 |3b |3g |3c |3dp
A5 - pin 9 |2a |2f |2e |2d
C5 - pin 10 |2b |2g |2c |2dp
A0 - pin 11 |1a |1f |1e |1d
D3 - pin 12 |1b |1g |1c |
D4 - pin 13 |s1 |s2 |m |M
D7 - pin 14 |a |v |k |Omega

B4 - common 1
B5 - common 2
A2 - common 3
D0 - common 4

предполагал, что подам на B4 "1" (управляется 1) и на A4 "0" (управляется 0) и получу 3b сегмент, но не все так просто.
CODE

#include <16lF1937.h>
#use delay (clock = 10 000 000)
void main()
{
set_TRIS_A (0x0);
set_tris_B (0x4);

while(TRUE)
{
output_bit(PIN_A4, (0)); // pin 8 |3b |3g |3c |3dp
output_bit(PIN_B4, (1)); // common 1
delay_us (100);

output_bit(PIN_B4, (0)); // common 1
delay_us (100);
}
}

получаю DH (com1+A6), RH (com2+A6), S1 (com1+D4), A(com1+D7), 2A(com1+A5), 1A(com1+A0), 3B+2B+1B (COM1+A4+C5+D3)
Pullupы отключены на всех пинах.
Как можно подать одновременно на все порты VIM-332 значение ({B4,B5,A2,D0,B0,A6,A7,A4,A5,C5,A0,D3,D4,D7} = 0x9C2)?

Сообщение отредактировал Tonotuh - Jun 13 2013, 10:05
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
XVR
сообщение Jun 14 2013, 08:25
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Для работы с LCD модулем необходимо воспользоваться специальным модулем из PIC'а (глава 27.0 из его Даташита - LIQUID CRYSTAL DISPLAY (LCD) DRIVER MODULE). То, что вы сделали, это простейший и самый быстрый способ угробить LCD wink.gif
Go to the top of the page
 
+Quote Post
Tonotuh
сообщение Jun 24 2013, 06:07
Сообщение #3





Группа: Участник
Сообщений: 12
Регистрация: 20-11-12
Из: Санкт Петербург
Пользователь №: 74 485



Спасибо за совет. Почитал немного стало понятнее. Теперь проблема в том что не реагируют 2 ножки (A6 (segment 1) и A7(segment 2)), хотя я их настроил как пины LCD.
Подскажите, может каким регистром забыл установку дать?
CODE
(MCU_LCDSE0=0x37;
/*MCU_SE0 = 1;
MCU_SE1 = 1;
MCU_SE2 = 1;
MCU_SE3 = 0;
MCU_SE4 = 1;
MCU_SE5 = 1;
MCU_SE6 = 0;
MCU_SE7 = 0;*/).

Main
CODE

#include <16LF1937.h>
#include "PIC16F1937_registers.h"
#include "lcd_moi.c"
#fuses HS, WDT


void main(void)
{

lcd_init();

// light all segments

AMPS = 1;
VOLT = 1;
KILO = 1;
OHMS = 1;
S1 = 1;
S2 = 1;
MILLI = 1;
MEGA = 1;
B1 = G1 = C1 = 1;
A1 = F1 = E1 = D1 = 1;
B2 = G2 = C2 = DP2 = 1;
D2 = E2 = F2 = A2 = 1;
DP3 = C3 = G3 = B3 = 1;
D3 = E3 = F3 = A3 = 1;
DP4 = BC4 = RH = DH = 1;
AC = MINUS = BATT = RC = 1;

while(!MCU_WA);
// clear all segments
AMPS = 0;
VOLT = 0;
KILO = 0;
OHMS = 0;
S1 = 0;
S2 = 0;
MILLI = 0;
MEGA = 0;
B1 = G1 = C1 = 0;
A1 = F1 = E1 = D1 = 0;
B2 = G2 = C2 = DP2 = 0;
D2 = E2 = F2 = A2 = 0;
DP3 = C3 = G3 = B3 = 0;
D3 = E3 = F3 = A3 = 0;
DP4 = BC4 = RH = DH = 0;
AC = MINUS = BATT = RC = 0;

while (true)
{

output_bit (PIN_E2, A2);
output_bit (PIN_E1, D1);
output_bit (PIN_E0, A3);
output_bit (PIN_D1, C1);




AMPS = 1;
VOLT = 1;
KILO = 1;
OHMS = 1;
S1 = 1;
S2 = 1;
MILLI = 1;
MEGA = 1;

A3 = F3 = E3 = D3 = 1;
B3 = G3 = C3 = DP3 = 1;
A2 = F2 = E2 = D2 = 1;
B2 = G2 = C2 = DP2 = 1;
A1 = F1 = E1 = D1 = 1;
B1 = G1 = C1 = 1;

DP4 = BC4 = RH = DH = 1;
AC = MINUS = BATT = RC = 1;







}


}


lcd_moi.c
CODE


void lcd_init(void)
{


MCU_LCDPS = 0;
MCU_WFT = 1;

// activate the 32khz oscillator for our clock source*/
MCU_T1OSCEN = 1;



MCU_LCDSE0=0x37;

MCU_LCDSE1=0x14;

MCU_LCDSE2=0x13;



/*******************************************************/

// Configure LCDCON
// LCD enbled
// LCD enabled in sleep
// LCD Clock Select - T1OSC
// LCD Commons - 1/4

MCU_LMUX0 = 1;
MCU_LMUX1 = 1;
MCU_CS0 = 1;
MCU_CS1 = 0;
MCU_WERR = 0;
MCU_SLPEN = 0;




// clear ALL SEGMENT DATA

MCU_LCDIF = 0;

MCU_LCDDATA0 = 0;

MCU_LCDDATA1 = 0;

MCU_LCDDATA2 = 0;

MCU_LCDDATA3 = 0;

MCU_LCDDATA4 = 0;

MCU_LCDDATA5 = 0;

MCU_LCDDATA6 = 0;

MCU_LCDDATA7 = 0;

MCU_LCDDATA8 = 0;

MCU_LCDDATA9 = 0;

MCU_LCDDATA10 = 0;

MCU_LCDDATA11 = 0;



// Reference ladder control


MCU_LCDRL = 0x30;

// Configure LCDREF
// Internal reference enabled
// Internal Reference Source
// Internal Reference always on


MCU_LCDREF = 0;
MCU_LCDIRE = 1;
MCU_LCDIRS = 0;
MCU_LCDIRI = 0;


MCU_LCDCST = 0;


MCU_LCDEN = 1;
}

void lcd_display_off(void)
{
MCU_LCDEN = 0;
}

void lcd_display_on(void)
{
MCU_LCDEN = 1;
}



typedef union
{
INT16 val;
struct
{
unsigned digit0 : 4;
unsigned digit1 : 4;
unsigned digit2 : 4;
unsigned digit3 : 4;
};
} BCD_TYPE;

#define SEG_A 0x01
#define SEG_B 0x02
#define SEG_C 0x04
#define SEG_D 0x08
#define SEG_E 0x10
#define SEG_F 0x20
#define SEG_G 0x40
#define SEG_DP 0x80

#define DIGIT_0 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F)
#define DIGIT_1 (SEG_B | SEG_C)
#define DIGIT_2 (SEG_A | SEG_B | SEG_G | SEG_E | SEG_D)
#define DIGIT_3 (SEG_A | SEG_B | SEG_C | SEG_G | SEG_D)
#define DIGIT_4 (SEG_F | SEG_G | SEG_C | SEG_B)
#define DIGIT_5 (SEG_A | SEG_F | SEG_G | SEG_C | SEG_D)
#define DIGIT_6 (SEG_A | SEG_F | SEG_G | SEG_C | SEG_D | SEG_E)
#define DIGIT_7 (SEG_A | SEG_B | SEG_C)
#define DIGIT_8 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)
#define DIGIT_9 (SEG_A | SEG_B | SEG_C | SEG_F | SEG_G)
#define DIGIT_A (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G)
#define DIGIT_B (SEG_F | SEG_G | SEG_C | SEG_D | SEG_E)
#define DIGIT_C (SEG_A | SEG_F | SEG_E | SEG_D)
#define DIGIT_D (SEG_B | SEG_C | SEG_D | SEG_E | SEG_G)
#define DIGIT_E (SEG_A | SEG_F | SEG_G | SEG_E | SEG_D)
#define DIGIT_F (SEG_A | SEG_F | SEG_G | SEG_E)

typedef union
{
int val;

struct
{
unsigned segdp : 1;
unsigned segg : 1;
unsigned segf : 1;
unsigned sege : 1;
unsigned segd : 1;
unsigned segc : 1;
unsigned segb : 1;
unsigned sega : 1;

};
} SEVEN_SEGMENT_TYPE;





// Glass pin 5
#define RC MCU_SEG0COM0
#define BATT MCU_SEG0COM1
#define MINUS MCU_SEG0COM2
#define AC MCU_SEG0COM3

// Glass pin 6
#define DH MCU_SEG1COM0
#define RH MCU_SEG1COM1
#define BC4 MCU_SEG1COM2
#define DP4 MCU_SEG1COM3

// Glass pin 7
#define A3 MCU_SEG2COM0
#define F3 MCU_SEG2COM1
#define E3 MCU_SEG2COM2
#define D3 MCU_SEG2COM3

// Glass pin 8
#define B3 MCU_SEG4COM0
#define G3 MCU_SEG4COM1
#define C3 MCU_SEG4COM2
#define DP3 MCU_SEG4COM3

// Glass pin 9
#define A2 MCU_SEG5COM0
#define F2 MCU_SEG5COM1
#define E2 MCU_SEG5COM2
#define D2 MCU_SEG5COM3

// Glass pin 10
#define B2 MCU_SEG10COM0
#define G2 MCU_SEG10COM1
#define C2 MCU_SEG10COM2
#define DP2 MCU_SEG10COM3

// Glass pin 11
#define A1 MCU_SEG12COM0
#define F1 MCU_SEG12COM1
#define E1 MCU_SEG12COM2
#define D1 MCU_SEG12COM3

// Glass pin 12
#define B1 MCU_SEG16COM0
#define G1 MCU_SEG16COM1
#define C1 MCU_SEG16COM2

//#define SEG16COM3
// Glass pin 13
#define S1 MCU_SEG17COM0
#define S2 MCU_SEG17COM1
#define MILLI MCU_SEG17COM2
#define MEGA MCU_SEG17COM3

// Glass pin 14
#define AMPS MCU_SEG20COM0
#define VOLT MCU_SEG20COM1
#define KILO MCU_SEG20COM2
#define OHMS MCU_SEG20COM3

int1 lcd_display_digits(BCD_TYPE cool.gif
{

// Map Digit 3
INT8 val;

/*int8*/ const SEVEN_SEGMENT_TYPE segment_data[] = {DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, DIGIT_7, DIGIT_8, DIGIT_9, DIGIT_A, DIGIT_B, DIGIT_C, DIGIT_D, DIGIT_E, DIGIT_F};



// The long list of IF statements was the fastest code as of HITEC 9.65PL1

if(MCU_WA) // çàïèñü â ðåãèñòð LCD ðàçðåøåíà (lcdps<4>) //MCU_WA = MCU_LCDPS.4
{
val = segment_data[b.digit0].val;
if(val & SEG_A)
{
A1 = 1;
}

if(!(val & SEG_A))
{
A1 = 0;
}

if(val & SEG_B)
{
B1 = 1;
}

if(!(val & SEG_B))
{
B1 = 0;
}

if(val & SEG_C)
{
C1 = 1;
}

if(!(val & SEG_C))
{
C1 = 0;
}

if(val & SEG_D)
{
D1 = 1;
}

if(!(val & SEG_D))
{
D1 = 0;
}

if(val & SEG_E)
{
E1 = 1;
}

if(!(val & SEG_E))
{
E1 = 0;
}

if(val & SEG_F)
{
F1 = 1;
}

if(!(val & SEG_F))
{
F1 = 0;
}

if(val & SEG_G)
{
G1 = 1;
}

if(!(val & SEG_G))
{
G1 = 0;
}

val = segment_data[b.digit1].val;
if(val & SEG_A)
{
A2 = 1;
}

if(!(val & SEG_A))
{
A2 = 0;
}

if(val & SEG_B)
{
B2 = 1;
}

if(!(val & SEG_B))
{
B2 = 0;
}

if(val & SEG_C)
{
C2 = 1;
}

if(!(val & SEG_C))
{
C2 = 0;
}

if(val & SEG_D)
{
D2 = 1;
}

if(!(val & SEG_D))
{
D2 = 0;
}

if(val & SEG_E)
{
E2 = 1;
}

if(!(val & SEG_E))
{
E2 = 0;
}

if(val & SEG_F)
{
F2 = 1;
}

if(!(val & SEG_F))
{
F2 = 0;
}

if(val & SEG_G)
{
G2 = 1;
}

if(!(val & SEG_G))
{
G2 = 0;
}

val = segment_data[b.digit2].val;
if(val & SEG_A)
{
A3 = 1;
}

if(!(val & SEG_A))
{
A3 = 0;
}

if(val & SEG_B)
{
B3 = 1;
}

if(!(val & SEG_B))
{
B3 = 0;
}

if(val & SEG_C)
{
C3 = 1;
}

if(!(val & SEG_C))
{
C3 = 0;
}

if(val & SEG_D)
{
D3 = 1;
}

if(!(val & SEG_D))
{
D3 = 0;
}

if(val & SEG_E)
{
E3 = 1;
}

if(!(val & SEG_E))
{
E3 = 0;
}

if(val & SEG_F)
{
F3 = 1;
}

if(!(val & SEG_F))
{
F3 = 0;
}

if(val & SEG_G)
{
G3 = 1;
}

if(!(val & SEG_G))
{
G3 = 0;
}

if(b.digit3 > 0)
{
BC4 = 1;
}
else
{
BC4 = 0;
}

return (1);
}

return (0);
}



Файлы .c и .h проекта. Прикрепленный файл  Desktop.rar ( 17.69 килобайт ) Кол-во скачиваний: 54
Go to the top of the page
 
+Quote Post
Tonotuh
сообщение Jul 16 2013, 09:34
Сообщение #4





Группа: Участник
Сообщений: 12
Регистрация: 20-11-12
Из: Санкт Петербург
Пользователь №: 74 485



Помогите разобраться с выводом информации на экран не в статическом режиме.
Вывести число на экран получилось. А вот меняющуюся информацию нет, выводится только первое значение.
Как я понял последовательность такая
1. настройка LCD driver
2. запись числа в регистры LCD
3. LCD выдает прерывание
4. запись в регистры LCD следующих данных
5. снять прерывание
Прикрепленный файл  UnEncrypted111.pdf ( 86.23 килобайт ) Кол-во скачиваний: 215
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01414 секунд с 7
ELECTRONIX ©2004-2016