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

Язык СИ для микроконтроллеров


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

Вам, конечно, нужно немного разбираться в том, что накачали из Интернета.

Вот, к примеру, почему в LCDCommand() у Вас три раза запускается strob_lcd?

А сколько раз правильно?

И что ваще этот строб делает?

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Е порт "дергает". Так я понял как раз из документации, переписал так:

//Послать комманду в LCD

void LCDCommand(unsigned char data, unsigned char mode)
{
if(mode){PORTD |=(1<<7);}else{PORTD &=~(1<<7);}//1 - data 0 - command;

if (data & (1<<7)) {PORTD |=(1<<6);} else {PORTD &=~(1<<6);}
if (data & (1<<6)) {PORTD |=(1<<5);} else {PORTD &=~(1<<5);}
if (data & (1<<5)) {PORTB |=(1<<7);} else {PORTB &=~(1<<7);}
if (data & (1<<4)) {PORTB |=(1<<6);} else {PORTB &=~(1<<6);}
//Строб
strob_lcd();
if (data & (1<<3)) {PORTD |=(1<<6);} else {PORTD &=~(1<<6);}
if (data & (1<<2)) {PORTD |=(1<<5);} else {PORTD &=~(1<<5);}
if (data & (1<<1)) {PORTB |=(1<<7);} else {PORTB &=~(1<<7);}
if (data & (1<<0)) {PORTB |=(1<<6);} else {PORTB &=~(1<<6);}
//Строб
strob_lcd();
}

вроде начало принимать команды, но все же после выставления порта RS надо ли дергать порт E или нет?

команды на которые хватило знаний....

LCDCommand(0b00000011,0);

LCDCommand(0b00001111,0);

первая перемещает курсор в позицию 1строка 1символ

вторая включает дисплей, включает курсор, включает мигание курсора

отрабатывают.

с передачей данных или символа пока не разобрался

и так и не понял для чего эта строка?

PORTD &=~(1<<6); PORTD &=~(1<<5);PORTB &=~(1<<7);PORTB &=~(1<<6);

просто проставить в нули порты подключенные к дисплею, на всякий случай?

Yurkin2015, я пишу с нуля, некоторые функции смотрю как реализованы конечно из скачанного, пишу с нуля для того чтобы разобраться с работой портов и самим дисплеем ибо в программировании для МК я практически 0

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

вот это выводит, ну это так наугад...

    LCDCommand(0b00000010,0); //Перевод в первую позицию
   LCDCommand(0b00001111,0); //Мигающий курсор
   LCDCommand(0b00110100,1); //Вывод символа 4
   LCDCommand(0b00110101,1); //Вывод символа 5
   LCDCommand(0b00110110,1); //Вывод символа 6
   LCDCommand(0b00110111,1); //Вывод символа 7
   LCDCommand(0b00111101,1); //Вывод символа =

может кто подскажет как вывести строку или переменную?

что то в скачанных разобраться тяжело, функция в функции и т.д. и + дефайны...

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

Вот теперь правильно. Выставили на ногах D4-D7, RS и R/W нужные значения - дёрнули порт Е вверх-вниз для записи старшего полубайта. Потом выставили новые D4-D7, дёрнули второй раз - записали младшую половину байта. И всё, больше ничего с портами делать не надо. До следующей записи.

Это я про LCDCommand().

Для вывода букв-цифр поставьте букву в кавычки

LCDCommand('H',1);
LCDCommand('e',1);
LCDCommand('l',1);
LCDCommand('l',1);
LCDCommand('o',1);
LCDCommand('!',1);

получите "Hello!" на экране

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

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

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

действительно, спасибо, наконец что то начало получаться, буду пробовать дальше, вывод строки, вывод переменной, запись своего символа в озу экрана и вывод его

написал вывод строки, по примеру в библиотеке, работает, но нигде не могу найти что значит *

void print_str(char *str)
{
 uint8_t data;
 while (*str)
  {
   data =  *str++;
   LCDCommand(data,1);
  }
}

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

voltage = ((unsigned long)voltage * 3101)/1023;

Обясните зачем (unsigned long) перед voltage. Что он делает?

Потому что, результат умножения в большинстве случаев выйдет за пределы "unsigned int". Результат операций имеет тот же тип, что и операнд с "наибольшим" типом . Для этого одному из операндов нужно присвоить другой тип. Т.е. переменной voltage перед умножением присваивается тип "unsigned long"

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

Есть ли какой разделитель что ли переменных в С++ (не могу найти) есть константы:

//КНОПКИ
#define P_B1 PORTC
#define D_P_B1 DDRC
#define B1 4
#define PIN_B1 PINC

Как правильно правильно написать чтобы получилось:

if (!(PINC & (1<<PINC4)))

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

типо:

if(!PIN_B1&(1<<PIN_B1+B1))
{
 LCD_FLAG=1;
}

но так не работает

IMXO, нет вы не много не поняли, как написать константами PINC4, так не правильно: PIN_B1+B1, а как правильно найти не могу

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

вообще пишется

(1< < PC4)

а не

(1< < PINC4)

может поэтому и не работает? хотя слышал что сейчас можно и в PIN записывать

Не знаеш как? Спроси у Google'а !!!

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

типо:

if(!PIN_B1&(1<<PIN_B1+B1))
{
LCD_FLAG=1;
}

но так не работает

IMXO, нет вы не много не поняли, как написать константами PINC4, так не правильно: PIN_B1+B1, а как правильно найти не могу

if(!(PIN_B1&(1<<B1)))
{
LCD_FLAG=1;
}

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

Наверное, кто-то не заглядывал в соответствующие заголовки и не знает, что PINC4 = PC4 = PORTC4 = DDRC4 = PORTA4 = PINF4 = 4.

Так что запись (PINC & (1<<PINC4)) и (PINC & (1<<4)) абсолютно одинаковы (мне, кстати, второй способ больше нравится).

Ну и добавлю небольшой фокус с препроцессором. Просто так, мозг кому-нибудь поломать.

#define MY_PORT B
#define MY_PIN 4

#define _PORT(x) PORT##x
#define _DDR(x)  DDR##x
#define _PIN(x) PIN##x
#define PORT(x) _PORT(x)
#define DDR(x) _DDR(x)
#define PIN(x) PIN##x
...
DDR(MY_PORT) &=~ (1<<MY_PIN);	 // DDRB4 = 0
PORT(MY_PORT) |= (1<<MY_PIN);	 // PORTB4 = 1
if( PIN(MY_PORT) & (1<<MY_PIN) ){   // if( PINB4 == 1)
 //code
}

То есть можно объявить не сам порт, а только его букву. Это удобно, если надо перевесить что-то с одного порта на другой, поменять надо будет всего 2 макроса, а не 4, и уж тем более не лазить по всему коду.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

подскажите как проверить переменную на пустоту перерыл поисковики и пробовал различные варианты так ничего не получилось, работаю с EEPROM.

как узнать что переменная есть и мы ее получили из памяти?

H_SET = eeprom_read_byte(&H_SET_EEMEM)

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

пустоты в переменной не может быть по определению ее диапазон 0х00-0xFF

по дефолту в ячейки памяти записано 0xFF

а проверить правильность записи вы множите проверив регистор состояния записи + прочитав переменную сравнив с записываемой

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

да это один раз при включении происходит, как эффективнее я увы не знаю, не с проста же пишу на форуме....

да и так не работает говорит не декларированная переменная FF

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

ну если вас так сильно беспокоит целостность констант записанных в память выделяйте отдельные ячейки и делайте проверку контрольной суммы

да и так не работает говорит не декларированная переменная FF

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Там только на 4558 фильтр для сабвуфера. Других фильтров не видно.
    • Вообще с таким вопросом в гугл прямая дорога. А так-то можно посмотреть на "Лицемер" (он потом вроде "Бродвеем" стал) - нормально работает. У Smartec терминалы с распознаванием пальца - мы их пытались в автономном режиме запустить (по инструкции можно) - просто Гэ, кроме как обоссать разработчиков ничего больше не хочется. В обычном сетевом режиме не пробовал, но как-то большого доверия нет, софт капитально сырой, несмотря на возраст.  Сейчас активно пиарится BAS-IP и у них хорошие красивые буклеты в которых они обещают много всего... правда по реальным отзывам там работает хорошо если 20% от заявленного.
    • Здравствуйте,вот собрался делать супергетеродин по этой схеме радио конструктора китайского и мне надо как-то повторить катушки под него,это возможно или не очень?он то по схеме стандартной годов так 70-80 собран,может кто-то знает как намотать эго катушки,то в чем проблема стандартные не подходят те что у меня,только одна судя по выводам витков подходит,но и то она на "гантельке" как и в радио конструкторе том но витков хрен пойми у нее сколько,только есть информация что она без отводов чисто две обмотки паралельно одной конденсатор 410 пикофарад и она с жёлтой пометкой сверху,и она на 455 кГц что впринцепи мне и надо,можно ее перемотать как в радио конструкторе том?например в катушку для ПЧ или гетеродина и т.п,также есть красная,белая,серая,и у них все паралельно окроме красной конденсаторы,и отводы не там где надо или наоборот просто индуктивность там заместо трансформатора  Хотел намотать на ферите от магнитной антенны длинной 1.3 см как описано в "Юный радио любитель" но там размеры не адекватные у нее получаться  плюс тесная компоновка будет и без экранов как сделано в этой книге все будет само регенерировать жёстко а экранирование не сделаю то тогда точно не хватит даже места чтоб на смд собрать   Собрать труда особо не приставляет а вот найти эти катушки или изготовить с помощью тех что уже есть совсем не подходящих составляет для меня труда   
    • Да какая разница, если все равно в утиль?
    • С деревянной отверткой так и будет. Может быть уже пора заменить диодный мост и включить с лампой  вместо предохранителя?
    • Василич, тут никто не говорит про трансформаторы серебром намотанные. Речь шла конкретно про режим работы драйверной лампы в случае с резистивной нагрузкой и в случае с индуктивной. Какой по твоему режим работы 6н6п будет линейней ? С резистором 10 кОм и питающим напряжением в 250 вольт Либо через межкаскадный трансформатор с питанием 200 вольт и сеточным резистором выходной лампы в 100 кОм    Ну вот чисто визуально ?   И я не зря тебя спросил, на однотакте или двухтакте ты измерял. На однотакте вполне могла иметь место компенсация второй гармоники, поэтому искажения с резистивной нагрузкой у усилителя меньше, хотя сам драйверный каскад мог и бОльшие искажения давать. Ты же мерил усилитель, а не каскады по отдельности.
  • Похожий контент

×
×
  • Создать...