Перейти к содержанию

Язык - Си, + Pic Kit2 + Hi-Tech - Нужна Посильная Помощь.


Lev@

Рекомендуемые сообщения

Решил начать постигать азы Си.

Прикупил железа Pic Kit2 + 44 pin demo board с 16F887

Проверил работоспособность железа на прогах которые идут в комплекте(мигалки всякие и тд) - работает, но они все на ASM.

Пишу свою на Си вот код:

#include <pic.h>

__CONFIG (0x2007 & 0xEFFF & 0xF7FF & 0xFBFF & 0xFCFF & 0xFFFF & 0xFFFF & 0xFFDF & 0xFFEF & 0xFFF7 & 0xFFFD & 0x2008 & 0xFFFF & 0xFEFF);
//__CONFIG (CONFIG1 & LVP_OFF & FCMEN_OFF & IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON & WDT_OFF & INTRC_OSC_NOCLKOUT & CONFIG2 & WRT_OFF & BOR21V);

#define knopka RB0 // кнопка
#define diod   RD2 // светодиод

void podgot (void); // подготовка МК
void main (void)
{
podgot();
while(1)
{ // начало бесконечного цикла
diod = knopka;
} // конец бесконечного цикла
}
// === подготовка МК
void podgot (void)
{
TRISB = 0b11111111; // направление работы ножек порта А
TRISD = 0b00000000; // направление работы ножек порта В
PORTD = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б
}

... не работает (((

Ошибка "PK2Error0028: Unable to enter debug mode"

Для начала не могу понять со словом конфигурации в ASM его можно писать символами : CONFIG1 & LVP_OFF и тд, а в Си не понимает такого...

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Проверил, нормально компилируется в MPLAB X. Слово конфигурации настраивается прямо в проекте, во вкладке Configuration Bits (вкладка в окошке ниже исходника). Выставите там нужные значения, нажмете кнопку генерации кода и MPLAB выдаст нужные строчки в готовом виде. Останется их только скопировать в текст исходника.

И вообще, возьмите компилятор XC8 от Microchip вместо Hi-Tech. По крайней мере отпадет вопрос - что-то не так с кодом или компилятор глючит?

Изменено пользователем salyamkamrad
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Зайди сюда http://catcatcat.d-lan.dp.ua/obuchenie/s-chego-nachat/pervyiy-proekt-dlya-samyih-malenkih/ я там постарался описать один из вариантов как правильно построить программу на Си для ПИК. Тут есть заготовки для некоторых микроконтроллеров http://catcatcat.d-lan.dp.ua/skachat/primeryi-postroeniya-koda-programm-dlya-pic-kontrollerov/zagotovki-dlya-programm-si/

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

И вообще, возьмите компилятор XC8 от Microchip вместо Hi-Tech. По крайней мере отпадет вопрос - что-то не так с кодом или компилятор глючит?
Дороговато! .. счя в стране немного безденежье((( Т.е. - я убираю слово конфигурации из текста, выставляю нужные значения в меню - должно заработать? Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Дороговато! .. счя в стране немного безденежье

Компилятор от хайтек тоже не бесплатный, но вряд ли кто платит за него для ознакомления и обучения. То же самое с XC8.

Я скомпилировал Ваш исходник без изменений, с Вашим же словом конфигурации, ни ошибок, ни предупреждений. MPLAB X 1.80, компилятор HI-TECH PICC 9.83. Видать что-то не учли при создании проекта, возможно неправильно выбрали средство отладки, о чем, собственно, mplab пишет в сообщении об ошибке. Я в качестве отладочного инструмента указывал Proteus.

Ссылка на комментарий
Поделиться на другие сайты

И, раз уж собираетесь опрашивать линии порта B, не забудьте сделать входы на которых висят кнопки цифровыми (страница 47 даташита на F887).

Ссылка на комментарий
Поделиться на другие сайты

Компилятор достался бесплатно(условно), пока месть буду осиливать его - считаю дергаться можно когда уже чего-то можешь. Мануал жаль на английском, буду значит осиливать такой.

...

И, раз уж собираетесь опрашивать линии порта B, не забудьте сделать входы на которых висят кнопки цифровыми (страница 47 даташита на F887).

... спасибо, камень новый для меня буду учить по ходу движения)))

Ссылка на комментарий
Поделиться на другие сайты

Мануал жаль на английском, буду значит осиливать такой.
на шо мануал на англицком? на 887-й? ну так Справочник по среднему семейству микроконтроллеров PICmicro практически даташит на него ну или даташит на 877 практически тоже самое за исключением кол-ва входов АЦП и еще пару тонкостей....

ну а на хайтек мануал не нужен по определению - язык Си в чистом виде Ричи и Керниган вам в помощь....

Ссылка на комментарий
Поделиться на другие сайты

Походу различие есть и еще и наверное будут

Пример для порта В

в 887 есть регистр ANSELH который отвечает за то каким будет вход цифровой или аналоговый

а в 877 такого не нашел

Код моей мигалки теперь такой(кнопка отжата - светимся, нажата - гасим)

#include <pic.h>

__CONFIG(0xEFFF);
#define bt1 RB0 // кнопка
#define led0 RD0 // светодиод

podgot (); // подготовка МК
main ()
{
podgot();
PORTD=1;
while(1)
{ // начало бесконечного цикла
if (bt1==1){
PORTD=0b11111111;
}
PORTD=0b00000000;
} // конец бесконечного цикла
}
// === подготовка МК
podgot ()
{
ANSELH = 0b00000000; //Переключаем на цифровые входы
TRISB = 0b11111111; // направление работы ножек порта
TRISD = 0b00000000; // направление работы ножек порта
PORTD = 0; // очищаем порт
PORTB = 0; // очищаем порт
}

****************************************** ПОЗЖЕ************

Почему кода пишу слово конфигурации

__CONFIG(FOSC_INTRC_NOCLKOUT);

Error [800] C:\Users\ZloyLeva\AppData\Local\Temp\s61o.; 41. undefined symbol "FOSC_INTRC_NOCLKOUT"

********** Build failed! **********

А если объявить в начале

#define FOSC_INTRC_NOCLKOUT  0xFFFC

или

__CONFIG(0xFFFC);

Ведь тама в начале файлик в котором все должно быть описано?

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Ведь тама в начале файлик в котором все должно быть описано?

в тот файлик нехорошие дяди при портации с хайтека забыли в него названия битов конфигурации записать.... :)

в конец файла pic16f887.h добавить этот код:

// Configuration Mask Definitions
#define CONFIG_ADDR 0x2007
// Oscillator
#define EXTCLK 0x3FFF // External RC Clockout
#define EXTIO 0x3FFE // External RC No Clock
#define INTCLK 0x3FFD // Internal RC Clockout
#define INTIO 0x3FFC // Internal RC No Clock
#define EC 0x3FFB // EC
#define HS 0x3FFA // HS
#define XT 0x3FF9 // XT
#define LP 0x3FF8 // LP
// Watchdog Timer
#define WDTEN 0x3FFF // On
#define WDTDIS 0x3FF7 // Disabled / SWDTEN control
// Power Up Timer
#define PWRTDIS 0x3FFF // Off
#define PWRTEN 0x3FEF // On
// Master Clear Enable
#define MCLREN 0x3FFF // MCLR function is enabled
#define MCLRDIS 0x3FDF // MCLR functions as IO
// Code Protect
#define UNPROTECT 0x3FFF // Code is not protected
#define CP 0x3FBF // Code is protected
// Data EE Read Protect
#define DUNPROTECT 0x3FFF // Do not read protect EEPROM data
#define CPD 0x3F7F // Read protect EEPROM data
// Brown Out Detect
#define BORDIS 0x3CFF // BOD and SBOREN disabled
#define SWBOREN 0x3DFF // SBOREN controls BOR function (Software control)
#define BORXSLP 0x3EFF // BOD enabled in run, disabled in sleep, SBOREN disabled
#define BOREN 0x3FFF // BOD Enabled, SBOREN Disabled
// Internal External Switch Over Mode
#define IESOEN 0x3FFF // Enabled
#define IESODIS 0x3BFF // Disabled
// Monitor Clock Fail-safe
#define FCMEN 0x3FFF // Enabled
#define FCMDIS 0x37FF // Disabled
// Low Voltage Programming
#define LVPDIS 0x2FFF // Disabled
#define LVPEN 0x3FFF // Enabled
// In-Circuit Debugger Mode
#define DEBUGEN 0x1FFF // Enable ICD2 debugging
#define DEBUGDIS 0x3FFF // Disable ICD2 debugging
#define CONFIG_ADDR2 0x2008
// Brown-out Reset Voltage
#define BORV21 0x3EFF // 2.1 Volts
#define BORV40 0x3FFF // 4.0 Volts

Ссылка на комментарий
Поделиться на другие сайты

Про слово конфигурации ничего не скажу, а для тех кто хочет головной боли с hi-tech picc есть старый, но во многом годный еще мануал на русском, из которого есть что почерпнуть http://libbib.org/osobennosti-i-rabochaya-sreda-hi-tech-picc-yalovoj-i/

Ссылка на комментарий
Поделиться на другие сайты

Про слово конфигурации ничего не скажу, а для тех кто хочет головной боли с hi-tech picc есть старый, но во многом годный еще мануал на русском, из которого есть что почерпнуть http://libbib.org/os...picc-yalovoj-i/

А чё, сюда выложить никак ? Залил на какой-то дибильный файлообменник, с которого скачать - целая история, да ещё и ненужную картинку запихнул в архив для веса...

Яловой И_Особенности и рабочая среда HI-TECH PICC.pdf

Ссылка на комментарий
Поделиться на другие сайты

Залил на какой-то дибильный файлообменник, с которого скачать - целая история, да ещё и ненужную картинку запихнул в архив для веса...

Это первая ссылка на сайт с мануалом из выдачи Яндекса, поэтому все претензии, пожалуйста, к Яндексу. Кому заняться нечем, тот пусть обсуждением файлообменников занимается, а у меня с ними разбираться нет ни времени, ни желания. Я свое дело сделал, на мануал топикстартеру указал, остальное не мое дело.
Ссылка на комментарий
Поделиться на другие сайты

Пасиб ребята за помощь!

по конфигу:

В шапке проги указан

#include <htc.h>

Захожу в него, тама в начале есть такое:

#ifndef _PIC_H_
#define _PIC_H_

#ifndef _HTC_H_
#include <htc.h>
#endif

#ifdef _HAS_OSCVAL_
extern unsigned char __osccal_val(void);
#endif

#include <chip_select.h>
#endif

На сколько я понимаю этот кусок добавляет нам еще часть <htc.h> и <chip_select.h>, захожу в <chip_select.h>:

/*
* Select device-specific header file
*/
#ifndef _CHIP_SELECT_H_
#define _CHIP_SELECT_H_
.....
.....
.....
#ifdef _16F887
#ifdef _LEGACY_HEADERS
#include <legacy/pic16f887.h>
#else
#include <pic16f887.h>
#endif
#endif
.......
.......

и в <pic16f887.h> есть все....

что не так?

*************************************************************************

Кажется понял:

HI-TECH C PRO for the PIC10/12/16 MCU family (Lite)  V9.60PL5
Copyright (C) 1984-2009 HI-TECH SOFTWARE
(1273) Omniscient Code Generation not available in Lite mode (warning)
Error   [800] C:\Users\ZloyLeva\AppData\Local\Temp\s5jc.; 41. undefined symbol "WDTE_OFF"
Error   [800] C:\Users\ZloyLeva\AppData\Local\Temp\s5jc.; 41. undefined symbol "FOSC_INTRC_NOCLKOUT"

********** Build failed! **********

(1273) Omniscient Code Generation not available in Lite mode (warning) - Типа в лайт версии это не работает?

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

]HI-TECH C PRO for the PIC10/12/16 MCU family (Lite) V9.60PL5

это плохо.... ищите стандарт версию последняя окончилась HI-TECH std V9.60PL3

он вам предупреждение сделал что оптимизация кода не работает.... к битам конфигурации это не имеет отношения....

1.в хедере описание битов конфигурации есть?

2.в проекте указан нужный МК?

3. http://www.microchip.su/showthread.php?p=45278&highlight=pic16f887+config#post45278

Ссылка на комментарий
Поделиться на другие сайты

Вот скрин проэкта

Чтобы не забывать буду писать все свои шаги... может кому-то еще пригодится.

организация функции задержки

во включенном файле pic.h есть такое:

/****************************************************************/
/* Built-in delay routine	 */
/****************************************************************/
#pragma inline(_delay)
extern void _delay(unsigned long);
// NOTE: To use the macros below, YOU must have previously defined _XTAL_FREQ
#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
#endif

В заголовок добавить нужно еще значение тактовой частоты:

#define _XTAL_FREQ 4000000

в коде проги:

__delay_us(500);

... вопрос к знающим:

что означает двойное подчеркивание и одинарное перед словом(переменной)?

post-57910-0-77767600-1397332659_thumb.png

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Продолжаю мучать Си и железо.

Прога для измерения температуры. Отображение с помощью светодиодной шкалы... датчик 18b20+pic16f887+8LED

#include <stdio.h>
#include <pic.h>
#include "usart.h"
#define STATE TRISA1
#define PIN RA1
#define _XTAL_FREQ 4000000
char temperature;
unsigned char temp_drob;
unsigned char sign;

// ОБЪЯВЛЕНИЕ ФУНКЦИЙ
void get_temp(); // 1.ЗАМЕР ТЕМПЕРАТУРЫ
void TX(unsigned char cmd); // 2.ПЕРЕДАЧА настроек датчику
unsigned char RX(); // 3.ПОЛУЧЕНИЕ данных температуры
static bit INIT(void); // 4.Инициализация датчика
// *****ОСНОВНАЯ ПРОГРАММА*****
void main(void){
unsigned char i;
ANSEL=0;
INTCON=0; // purpose of disabling the interrupts.
TRISD=0b00000000;

while(1)
{
get_temp();
if (temperature>0) i=0;
if (temperature>10) i=1;
if (temperature>20) i=2;
if (temperature>30) i=3;
if (temperature>40) i=4;
if (temperature>50) i=5;
if (temperature>60) i=6;
if (temperature>70) i=7;
switch (i)
{
case 0: PORTD=0b00000001;break;
case 1: PORTD=0b00000011;break;
case 2: PORTD=0b00000111;break;
case 3: PORTD=0b00001111;break;
case 4: PORTD=0b00011111;break;
case 5: PORTD=0b00111111;break;
case 6: PORTD=0b01111111;break;
case 7: PORTD=0b11111111;break;
default: ;
}
__delay_ms(150);
}
}
// ТУТА БУДУТ ФУНКЦИИ
void get_temp(void) { // 1.ЗАМЕР ТЕМПЕРАТУРЫ
static bit init;
unsigned char temp1;
unsigned char temp2;
init = INIT();
if (!init) { //успешно инициализировались?
TX(0xCC);
TX(0x44);
__delay_ms(150); //ждем 750 мс
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
}
init = INIT(); //повторная инициализация

if (!init) {
TX(0xCC);
TX(0xBE); //команда на чтение
temp1 = RX(); //читаем младший байт
temp2 = RX(); //читаем старший байт
}

temp_drob = temp1 & 0b00001111; //Записываем дробную часть в отдельную переменную
temp_drob = ((temp_drob*6)+2)/10; //Переводим в нужное дробное число
temp1 >>= 4;
sign = temp2 & 0x80; //определяем знак температуры
temp2 <<= 4;
temp2 &= 0b01110000;
temp2 |= temp1; //помещаем все в одну переменную

if (sign) { //если минус
temperature = 127-temp2; //глобальная переменная
temp_drob = 10 - temp_drob; //глобальная переменная
} else temperature = temp2;
}

void TX(unsigned char cmd){// 2.ПЕРЕДАЧА настроек датчику

unsigned char temp = 0;
unsigned char i = 0;
temp = cmd;
for (i=0;i<8;i++)
{
if (temp&0x01) {
STATE = 0; //передаем 1
__delay_us(5);
STATE = 1;
__delay_us(70);
}
else { //передаем 0
STATE = 0;
__delay_us(70);
STATE = 1;
__delay_us(5);
}
temp >>= 1;
}
}

unsigned char RX() { // 3.ПОЛУЧЕНИЕ данных температуры

unsigned char d = 0;
unsigned char i = 0;
for (i=0;i<8;i++)
{
STATE = 0; //прижимаем линию
__delay_us(6);
STATE = 1;
d>>=1; //освобождаем место под новый бит
if (PIN == 1) d |= 0x80; //если 1 то записываем 1
__delay_us(70); //ждем до положенного времени
}
return d;
}

static bit INIT(void){ // 4.Инициализация датчика
static bit b;
STATE = 1;
STATE = 0; //Проваливаем линию
__delay_us(500); //Ждем 500 мкс
STATE = 1; //Переключаемся на вход
__delay_us(65); //Ждем 65 мкс
b = PIN; //Смотрим чего там на линии
__delay_us(450); //Дожидаемся до положенного временного интервала
return b; //Возвращаем 0 или 1
}

завтра буду оптимизировать код(большая часть кода - sarge и стандартные библиотеки) и делать в железе(в Протеусе - работает)

еще распишу работу с датчиком - то что я понял... )))

Line term.zip

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

С датчиком температуры разобрался - и в железе работает.

Теперь хочу выводить все на ЖК 16*2

Пишу пробный код:

#include <stdio.h>
#include <pic.h>
#include <htc.h>

#define _XTAL_FREQ 4000000
#define LCD_RS RA3
#define LCD_RW RA2
#define LCD_EN RA1
#define LCD_DATA PORTD //
void lcd_init();
void pic_init();
void lcd_out();
void
main(void)
{
pic_init();
lcd_init();
lcd_out();
for(;;
}
/* ИНИЦИАЛИЗАЦИЯ PIC */
void pic_init()
{
ADCON1 = 0x06; // Disable analog pins on PORTA
TRISA=0;
TRISB=0;
TRISD=0;
PORTA=0b11111111;
PORTB=0;
PORTD=0;
}

/* ИНИЦИАЛИЗАЦИЯ LCD - 8 bit mode */
void lcd_init()
{
PORTA=0;
__delay_ms(150); // Ждем больше 1 сек
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00110000;
__delay_ms(4);
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00110000;
__delay_us(100);
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00110000;
__delay_us(40);

LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00111111; // 0 0 1 DL N F * *
__delay_us(40);
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00001111; // 0 0 0 0 1 D C B
__delay_us(40);
LCD_DATA = 0b00000001; // Очистка дисплея
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0b00000110; // 0 0 0 0 0 1 I/D S
__delay_us(40);
RB0 = 1;
}
void lcd_out()
{
LCD_RS = 0;
LCD_EN = 1;
LCD_DATA = 0x00;
__delay_us(50);
LCD_RS = 0;
LCD_EN = 0;
__delay_us(100);
__delay_us(155);
LCD_RS = 0;
LCD_EN = 1;
LCD_DATA = 0x33;
__delay_us(50);
LCD_RS = 0;
LCD_EN = 0;
}

Моделирую в протеусе - полная тишина. Походу даже инициализация не прошла...

post-57910-0-81287800-1398634288_thumb.png

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Алекс, нужна помощь - я еще не сильно понимаю Си по этому помоги с вот этим куском кода. Ничего не понял

sprintf(lcd_buff, "Hello !!!");
lcd_gotoxy(0,0);
lcd_puts(lcd_buff);

..............................


/*******************************************************/
void lcd_puts(char * s){
while(*s) lcd_putch(*s++);
}
/*******************************************************/
void lcd_putch(char c){
RS_PIN = 1;
lcd_write(chr_to_cyr(c));
}
/*******************************************************/

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Чето я совсем потеряшку поймал

Вот файлик :

#include <stdio.h>
#include <pic.h>
#include <htc.h>
#include "io_pins.c"
#include "function_lcd.h"
#define _XTAL_FREQ 4000000

// ПРОТОТИПЫ ФУНКЦИЙ
extern void pic_init(void);
extern void Lcd_Strobe(void);
extern void lcd_init(void);
extern void SET_DATA(char);
extern void lcd_write(char);
extern void lcd_clear(void);
void main(void)
{
pic_init();
lcd_init();
__delay_us(10);
while(1)
{
;
}
}

это файлик с функциями function_lcd.h :

#define _XTAL_FREQ 4000000
void pic_init()
{
ADCON1 = 0x06; // Disable analog pins on PORTA
TRIS_EN = 0;
TRIS_RS = 0;
TRISD = 0;
}
void Lcd_Strobe(void)
{
LCD_EN=1;
__delay_us(1);
LCD_EN=0;
}
void SET_DATA(char d) //SET
{
PORTD = d;
}
void lcd_write(unsigned char c) // WRITE
{
SET_DATA(c);			 //
__delay_us(2);
Lcd_Strobe();
__delay_us(40);
}
void lcd_clear(void){ //CLEARNING
LCD_RS = 0;
lcd_write(0x01);
__delay_ms(2);
}
void lcd_init(){
LCD_RS = 0;
LCD_EN = 0;
__delay_ms(150); // wait 15mSec after power applied,
SET_DATA(0x30);
Lcd_Strobe();
__delay_ms(5);
SET_DATA(0x30);
Lcd_Strobe();
__delay_us(100);
SET_DATA(0x30);
Lcd_Strobe();
__delay_us(200);
SET_DATA(CMD_SETFUNCTION);
Lcd_Strobe();
__delay_us(200);
lcd_write(CMD_SETFUNCTION); // Set interface length
lcd_write(CMD_SETDISPLAY); // Display On, Cursor off, Cursor Blink off
lcd_clear();
__delay_us(10);
lcd_write(CMD_SETMODE); // Set entry Mode
}

Файлик с описаниями/присвоениями io_pins.c

#define LCD_RS RA3
#define LCD_EN RA2
#define TRIS_EN TRISA2
#define TRIS_RS TRISA3
#define D0_PIN RD0
#define D1_PIN RD1
#define D2_PIN RD2
#define D3_PIN RD3
#define D4_PIN RD4
#define D5_PIN RD5
#define D6_PIN RD6
#define D7_PIN RD7

#define CMD_SETFUNCTION 0b00111000
//	 |||||- *
//	 ||||-- *
//						 |||--- F: 1-5x10 dots, 0-5x8 dots
//						 ||---- N: 1-2 lines, 0-1 lines
//						 |----- DL:1-8 bits, 0-4 bits
#define CMD_SETDISPLAY 0b00001111
//							 |||- B: 1-on, 0-off blinks
//							 ||-- C: 1-on, 0-off cursor
//							 |--- D: 1-on, 0-off display
#define CMD_SETMODE	 0b00000110
//							 ||- S : 1-shift, 0-not shift
//							 |-- ID: 1-Inc, 0-Dec
#define CMD_SHIFT	 0b00010000
// ||||- *
// |||-- *
// ||--- RL: 1-shift right, 0-shift left
// |---- SC: 1-display shift, 0-cursor move

Курсор стоит на второй ячейке и мигает)))

теперь я могу сразу вводить данные, но можно сначала курсор поставить в нужное место... ?!

post-57910-0-86537500-1398798029_thumb.png

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

...ля нашел ошибку - еще плохо знаю камень(точнее совсем не знаю - дата от 877 не подходит )

// ADCON1 = 0x06; // Disable analog pins on PORTA
PORTA = 0;
ANSEL = 0;

не правильно инициализировал порт А

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...