Форум

Радиолюбительский форум.

Если у Вас возникли вопросы, задавайте их на форуме.

В сети

Пользователей: 77
Из них просматривают:
Аналоги: 14. Даташиты: 25. Инструкции: 6. Новости: 4. Остальное: 3. Программы: 3. Профиль пользователя: 2. Теги: 3. Форум: 17.
Участников: 2
Гостей: 75

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

Просмотр этой темы: 

 1 анонимных пользователей
Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Эта же схема хорошо работает в CircuitMaker 2000.

Прикреплённый файл:



jpg  CircuitMaker.jpg (134.15 KB)
290_608703ed7d89d.jpg 1024X560 px



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
18.12.2008 1:23
Из: Тирасполь
Сообщений: 2262
Не в сети
Как же осциллограф в Протеусе выбешивает! Там нет ни нулевой линии, ни анализа сигнала с выводом частоты, ни коэффициента заполнения...
И это дерьмо гордо зовется "Digital Oscilloscope"

Паяй только то, что нельзя купить!
То что нельзя купить - надо спаять!


Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Может кому ещё пригодится. Сейчас есть очень наглядные платы в симуляторах, что делает это занятие интересней. Например, создадим часики на Arduino Uno
1. Запускаем Arduino IDE
2. В Arduino IDE открываем: "Инструменты" - "Плата" - выбираем - "Arduino Uno".
3. Затем в Arduino IDE открываем: "Файл" - "Настройки" и рядом с "Показать подробный вывод" ставим галочку, нажимаем "Ок".
4. Вставляем код в Arduino IDE в белое поле и нажимаем круглый значок с галочкой - "Проверить".
5. Сохраняем наш скетч с названием обязательно на латинице, например, Chasy.
6. Ждём, когда закончится компиляция, а чёрное поле в нижней части Arduino IDE заполнится строками.
7. В Arduino IDE в нижней части чёрного поля находим куда временно сохранился нужный нам файл с расширением hex, например это выглядит так: C:\\Users\\Alexander\\AppData\\Local\\Temp\\arduino_build_287535/chasy.ino.hex
8. Ничего не закрываем, а идём в проводник и переходим во временную папку, конкретно в C:\Users\Alexander\AppData\Local\Temp\arduino_build_287535\, где копируем нужный наш файл chasy.ino.hex в другую папку, например в "Мои документы".
9. Теперь можно закрыть Arduino IDE
10. Копируем из скаченного вами архива модели плат Arduino (ARDUINO.IDX и ARDUINO.LIB) в нашу программу Proteus в папку Library, например C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\Library\
11. В программе Proteus открываем проект Arduino DS1307.pdsprj — это проект схемы часов.
12. Кликаем по плате Arduino и в открывшемся окне "Edit Component" напротив строки "Program File" нажимаем на значок папки, где указываем путь на hex-файл часов, а конкретно "Мои документы" - chasy.ino.hex
13. Теперь в программе Proteus нажимаем кнопку симуляции, а на дисплее в схеме проекта должна появиться информация о времени и дате.
14. Копками на схеме выставляем нужное время. Всё.
Код для часов:
// Часы реального времени и календарь с кнопками настройки с использованием DS1307 и Arduino
 
// включить код библиотеки ЖК-дисплея 
#include <LiquidCrystal.h>
// включить код библиотеки Wire (необходим для устройств с протоколом I2C)
#include <Wire.h>
 
// Подключение ЖК-модуля (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(765432);
 
void setup() {
  
pinMode(8INPUT_PULLUP);                      // button1 подключен к контакту 8
  
pinMode(9INPUT_PULLUP);                      // button2 подключен к контакту 9
  // настроить количество столбцов и строк на ЖК-дисплее
  
lcd.begin(162);
  
Wire.begin();                                  // Присоединение к I2C
}
 
char Time[]     = "TIME:  :  :  ";
char Calendar[] = "DATE:  /  /20  ";
byte isecondminutehourdatemonthyear;
 
void DS1307_display(){
  
// Преобразовать двоично-десятичный формат в десятичный
  
second = (second >> 4) * 10 + (second 0x0F);
  
minute = (minute >> 4) * 10 + (minute 0x0F);
  
hour   = (hour >> 4)   * 10 + (hour 0x0F);
  
date   = (date >> 4)   * 10 + (date 0x0F);
  
month  = (month >> 4)  * 10 + (month 0x0F);
  
year   = (year >> 4)   * 10 + (year 0x0F);
  
// Завершить преобразование
  
Time[12]     = second 10 48;
  
Time[11]     = second 10 48;
  
Time[9]      = minute 10 48;
  
Time[8]      = minute 10 48;
  
Time[6]      = hour   10 48;
  
Time[5]      = hour   10 48;
  
Calendar[14] = year   10 48;
  
Calendar[13] = year   10 48;
  
Calendar[9]  = month  10 48;
  
Calendar[8]  = month  10 48;
  
Calendar[6]  = date   10 48;
  
Calendar[5]  = date   10 48;
  
lcd.setCursor(00);
  
lcd.print(Time);                               // отображение времени 
  
lcd.setCursor(01);
  
lcd.print(Calendar);                           // показать календарь
}
void blink_parameter(){
  
byte j 0;
  while(
10 && digitalRead(8) && digitalRead(9)){
    
j++;
    
delay(25);
  }
}
byte edit(byte xbyte ybyte parameter){
  
char text[3];
  while(!
digitalRead(8));                        // Подождите, пока кнопка (контакт # 8) не будет отпущена.
  
while(true){
    while(!
digitalRead(9)){                      // Если кнопка (пин # 9) нажата
      
parameter++;
      if(
== && parameter 23)               // Если часы> 23 ==> часы = 0
        
parameter 0;
      if(
== && parameter 59)               // Если минут> 59 ==> минут = 0
        
parameter 0;
      if(
== && parameter 31)               // Если дата> 31 ==> дата = 1
        
parameter 1;
      if(
== && parameter 12)               // Если месяц> 12 ==> месяц = 1
        
parameter 1;
      if(
== && parameter 99)               // Если год> 99 ==> год = 0
        
parameter 0;
      
sprintf(text,"%02u"parameter);
      
lcd.setCursor(xy);
      
lcd.print(text);
      
delay(200);                                // Подождать 200 мс
    
}
    
lcd.setCursor(xy);
    
lcd.print("  ");                             // Показать два пробела
    
blink_parameter();
    
sprintf(text,"%02u"parameter);
    
lcd.setCursor(xy);
    
lcd.print(text);
    
blink_parameter();
    if(!
digitalRead(8)){                         // Если кнопка (контакт # 8) нажата
      
i++;                                       // Приращение 'i' для следующего параметра
      
return parameter;                          // Вернуть значение параметра и выйти
    
}
  }
}
 
void loop() {
  if(!
digitalRead(8)){                           // Если кнопка (контакт # 8) нажата
      
0;
      
hour   edit(50hour);
      
minute edit(80minute);
      
date   edit(51date);
      
month  edit(81month);
      
year   edit(131year);
      
// Преобразование десятичной дроби в двоично-десятичный
      
minute = ((minute 10) << 4) + (minute 10);
      
hour = ((hour 10) << 4) + (hour 10);
      
date = ((date 10) << 4) + (date 10);
      
month = ((month 10) << 4) + (month 10);
      
year = ((year 10) << 4) + (year 10);
      
// Завершить преобразование
      // Запись данных в DS1307 RTC
      
Wire.beginTransmission(0x68);               // Запустить протокол I2C с адреса DS1307
      
Wire.write(0);                              // Отправить регистрационный адрес
      
Wire.write(0);                              // Сбросить секунды и запустить генератор
      
Wire.write(minute);                         // Написать минуту
      
Wire.write(hour);                           // Написать час
      
Wire.write(1);                              // Написать день (не используется)
      
Wire.write(date);                           // Написать дату
      
Wire.write(month);                          // Написать месяц
      
Wire.write(year);                           // Написать год
      
Wire.endTransmission();                     // Остановите передачу и освободить шину I2C
      
delay(200);                                 // Подождать 200 мс
    
}
    
Wire.beginTransmission(0x68);                 // Запустить протокол I2C с адреса DS1307
    
Wire.write(0);                                // Отправить регистрационный адрес
    
Wire.endTransmission(false);                  // I2C перезапуск
    
Wire.requestFrom(0x687);                    // Запросить 7 байтов от DS1307 и освободить шину I2C в конце чтения
    
second Wire.read();                         // Считать секунды из регистра 0
    
minute Wire.read();                         // Прочитать протокол из регистра 1
    
hour   Wire.read();                         // Считать час из регистра 2
    
Wire.read();                                  // Считать день из регистра 3 (не используется)
    
date   Wire.read();                         // Считать дату из регистра 4
    
month  Wire.read();                         // Прочитать месяц из регистра 5
    
year   Wire.read();                         // Считать год из регистра 6
    
DS1307_display();                             // Отображение времени и календаря
    
delay(50);                                    // Подождать 50 мс
}

Прикреплённый файл:



jpg  Часы на Arduino Uno.jpg (279.42 KB)
290_6097bf621a862.jpg 1024X730 px
zip Chasy na Arduino.zip Размер: 36.94 KB; Просмотры: 362


Отредактировано пользователем Kosmonavt 09.05.2021 14:11:35
Отредактировано пользователем Kosmonavt 09.05.2021 14:15:03
Отредактировано пользователем Kosmonavt 09.05.2021 14:16:21


Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Бар график — это меняющиеся состояния светодиодов в строке. Он состоит из ряда светодиодов, аналогового входа с потенциометром, и программного кода для правильной работы между ними. Этот пример демонстрирует, как можно управлять линейкой светодиодов. Для симуляции в Proteus загрузите проект bar graph.DSN из архива, файл hex barGraph.ino.hex для платы Arduino и нажмите симуляцию.

Прикреплённый файл:



gif  Светодиодный бар график.gif (36.22 KB)
290_60984b06f38b9.gif 1421X988 px
zip barGraph.zip Размер: 55.20 KB; Просмотры: 358



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Пример управления светодиодной матрицей в Proteus. Сразу скажу, что в симуляторе этот код работает странно. В реальности, возможно всё в порядке. Предполагаю, что автор задумывал отобразить на, светодиодной матрице управляющую светящуюся точку при помощи двух потенциометров. Однако в симуляторе у меня получилось другое: управление целым рядом светодиодов и чёрной точкой. Чтобы я не делал, но по другому не получается.
/*
  Сканирование светодиодной матрицы 8x8 по осям X-Y

  В этом примере выполняется управление светодиодной матрицей 8x8 с использованием 
  двух аналоговых входов.

  Данный пример работает для матрицы Lumex LDM-24488NI Matrix. Смотрите её даташит
  http://sigma.octopart.com/140413/datasheet/Lumex-LDM-24488NI.pdf
  чтобы правильно подключить.

  Для других светодиодных катодных матриц вам нужно только изменить номера 
  выводов в массивах строк и столбцов.

  ряды - это аноды
  столбцы - это катоды
  ---------

   Номера контактов:
  Для подключения к матрице светодиодов на плате Arduino задействаны:
  - цифровые выводы со 2 по 13,
  - аналоговые выводы с 2 по 5 используются как цифровые с порядковыми номерами 16 по 19
  Потенциометры:
   - центральные контакты подключены к аналоговым контактам А0 и А1 соответственно
   - боковые контакты подключены к + 5В и земле соответственно

   Создан 27 мая 2009 г.
   Изменен 30 августа 2011 г.
   Автор: Том Igoe

   Этот пример кода находится в общественном достоянии.
  http://www.arduino.cc/en/Tutorial/RowColumnScanning
*/
// Двумерный массив номеров выводов строк:
const int row[8] = {
  
2719513181216
};

// Двумерный массив номеров выводов столбцов:
const int col[8] = {
  
61110317489
};

// Двумерный массив пикселей:
int pixels[8][8];

// позиция курсора:
int x 5;
int y 5;

void setup() {
  
// инициализировать выводы ввода / вывода, поскольку выходы повторяются по выводам:
  
for (int thisPin 0thisPin 8thisPin++) {
    
// инициализировать выходные контакты:
    
pinMode(col[thisPin], OUTPUT);
    
pinMode(row[thisPin], OUTPUT);
    
// поднять на столбцах (т. е. катодах) высокий уровень, чтобы убедиться, что светодиоды выключены:
    
digitalWrite(col[thisPin], HIGH);
  }

  
// инициализировать матрицу пикселей:
  
for (int x 08x++) {
    for (
int y 08y++) {
      
pixels[x][y] = HIGH;
    }
  }
}

void loop() {
  
// читать ввод:
  
readSensors();

  
// вывести на экран:
  
refreshScreen();
}

void readSensors() {
  
// выключить последнюю позицию:
  
pixels[x][y] = HIGH;
  
// Считывание датчиков (потенциометров) для значений X и Y:
  
map(analogRead(A0), 0102307);
  
map(analogRead(A1), 0102307);
  
// установка низкого положения нового пикселя, чтобы загорелся следующий светодиод
  // обновление экрана:
  
pixels[x][y] = LOW;

}

void refreshScreen() {
  
// перебор строк (анодов):
  
for (int thisRow 0thisRow 8thisRow++) {
    
// придать контактам ряда (анодам) высокий уровень
    
digitalWrite(row[thisRow], HIGH);
    
// перебор столбцов (катодов):
    
for (int thisCol 0thisCol 8thisCol++) {
      
// получучение состояние текущего пикселя;
      
int thisPixel pixels[thisRow][thisCol];
      
// когда строка HIGH, а столбец LOW,
      // загорается светодиод в месте их пересечения: 
      
digitalWrite(col[thisCol], thisPixel);
      
// выключить пиксель:
      
if (thisPixel == LOW) {
        
digitalWrite(col[thisCol], HIGH);
      }
    }
    
// Присвоение низкого уровня контакта ряда, чтобы выключить весь ряд:
    
digitalWrite(row[thisRow], LOW);
  }
}
*/

Прикреплённый файл:



gif  rowcolumnscanning.gif (33.64 KB)
290_60996a117d554.gif 1296X689 px
zip RowColumnScanning_.zip Размер: 55.91 KB; Просмотры: 343



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Пример подключения ЖК-дисплея LM016L вместо Hitachi HD44780. Скетч и библиотека работают одинаково хорошо на двух разных дисплеях, где в качестве демонстрации показывается последовательный набор цифр в верхнем ряду и движение строки из цифр в нижнем ряду.
/*
  Библиотека LiquidCrystal - Пример автопрокрутки

  Демонстрирует использование ЖК-дисплея 16x2. Библиотека LiquidCrystal 
  работает со всеми ЖК-дисплеями, совместимыми с драйвером Hitachi HD44780. 
  Их много, и обычно вы можете определить их по 16-контактному интерфейсу.

  Этот скетч демонстрирует использование функций автопрокрутки и без 
  автопрокрутки, чтобы прокручивать новый текст или нет.

  Схема:
  * Вывод ЖК-дисплея RS на цифровой вывод 12
  * ЖК-дисплей Включить вывод на цифровой вывод 11
  * Вывод ЖК-дисплея D4 на цифровой вывод 5
  * Вывод ЖК-дисплея D5 на цифровой вывод 4
  * Вывод ЖК-дисплея D6 на цифровой вывод 3
  * Вывод ЖК-дисплея D7 на цифровой вывод 2
  * LCD R / W контакт к земле
  * Резистор 10 кОм:
  * подключается на + 5В и на землю
  * средний вывод потенциометра к выводу LCD VO (вывод 3)

  Библиотека изначально добавлена 18 апреля 2008 г.
  Дэвид А. Меллис
  библиотека изменена 5 июля 2009 г.
  Лимор Фрид (http://www.ladyada.net)
  пример добавлен 9 июля 2009 г.
  Том Igoe
  изменен 22 ноября 2010 г.
  Том Igoe
  изменен 7 нояб.2016 г.
  Артуро Гуадалупи

  Этот пример кода находится в общественном достоянии.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalAutoscroll

*/

// включить код библиотеки:
#include <LiquidCrystal.h>

// инициализировать библиотеку, связав любой необходимый вывод интерфейса 
// ЖК-дисплея с номером вывода Arduino, к которому он подключен
const int rs 12en 11d4 5d5 4d6 3d7 2;
LiquidCrystal lcd(rsend4d5d6d7);

void setup() {
  
// настройка количества столбцов и строк на ЖК-дисплее:
  
lcd.begin(162);
}

void loop() {
  
// установка курсора на (0,0):
  
lcd.setCursor(00);
  
// распечатать от 0 до 9:
  
for (int thisChar 0thisChar 10thisChar++) {
    
lcd.print(thisChar);
    
delay(500);
  }

  
// установка курсора на (16,1):
  
lcd.setCursor(161);
  
// настройка дисплея на автоматическую прокрутку:
  
lcd.autoscroll();
  
// распечатать от 0 до 9:
  
for (int thisChar 0thisChar 10thisChar++) {
    
lcd.print(thisChar);
    
delay(500);
  }
  
// отключение автоматической прокрутки
  
lcd.noAutoscroll();

  
// очистить экран для следующего цикла:
  
lcd.clear();
}


Прикреплённый файл:



gif  LiquidCrystal Library - Autoscroll.gif (22.67 KB)
290_60998caed8de9.gif 916X748 px
zip LiquidCrystal Library - Autoscroll.zip Размер: 42.39 KB; Просмотры: 332


Отредактировано пользователем Kosmonavt 10.05.2021 23:23:16


Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Пример использования мигающего курсора в виде прямоугольного блока в конце предложения.
/*
  Библиотека LiquidCrystal - Blink

  Демонстрирует использование ЖК-дисплея 16x2. Библиотека 
  LiquidCrystal работает со всеми ЖК-дисплеями, совместимыми 
  с драйвером Hitachi HD44780. Их много, и обычно вы можете 
  определить их по 16-контактному интерфейсу.

  На этом скетче написано "Hello World!" для ЖК-дисплея и создаёт
  мигающий курсор в виде блока.

  Схема:
  * Вывод ЖК-дисплея RS на цифровой вывод 12
  * ЖК-дисплей Enable вывод на цифровой вывод 11
  * Вывод ЖК-дисплея D4 на цифровой вывод 5
  * Вывод ЖК-дисплея D5 на цифровой вывод 4
  * Вывод ЖК-дисплея D6 на цифровой вывод 3
  * Вывод ЖК-дисплея D7 на цифровой вывод 2
  * Вывод ЖК-дисплея R/W контакт на землю
  * Резистор 10 кОм:
    * подключить к + 5В и на землю
    * средний вывод потенциометра к выводу VO ЖК-дисплея (вывод 3)

  Библиотека изначально добавлена 18 апреля 2008 г.
  Дэвид А. Меллис
  библиотека изменена 5 июля 2009 г.
  Лимор Фрид (http://www.ladyada.net)
  пример добавлен 9 июля 2009 г.
  Том Igoe
  изменен 22 ноября 2010 г.
  Том Igoe
  изменен 7 нояб.2016 г.
  Артуро Гуадалупи

  Этот пример кода находится в общественном достоянии.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalBlink

*/

// Подключаем библиотеку:
#include <LiquidCrystal.h>

// Инициализировать библиотеку, связав любой требуемый контакт интерфейса ЖК-дисплея
// с номером вывода Arduino, к которому он подключен 
const int rs 12en 11d4 5d5 4d6 3d7 2;
LiquidCrystal lcd(rsend4d5d6d7);

void setup() {
  
// Настроить количество столбцов и строк на ЖК-дисплее:
  
lcd.begin(162);
  
// Распечатать сообщение на ЖК-дисплее.
  
lcd.print("hello, world!");
}

void loop() {
  
// Отключить мигающий курсор:
  
lcd.noBlink();
  
delay(3000);
  
// Включить мигающий курсор:
  
lcd.blink();
  
delay(3000);
}

Прикреплённый файл:



gif  LiquidCrystal_Blink.gif (22.73 KB)
290_609996d2f3cb3.gif 919X750 px
zip LiquidCrystal_Blink.zip Размер: 41.29 KB; Просмотры: 337



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Пример как добавлять пользовательские символы на ЖК-дисплей и анимировать некоторые из них. Если запустить симуляцию, то человечек "оживёт". Если покрутить потенциометр, то скорость "жизнедеятельности" человечка будет меняться. На этот раз использован двухстрочный дисплей по 20 символов в каждой строке.
/*
  Библиотека LiquidCrystal - Пользовательские символы

 Демонстрирует, как добавлять собственные символы на ЖК-дисплей.
 Библиотека LiquidCrystal работает со всеми ЖК-дисплеями, совместимыми с драйвером Hitachi 
 HD44780. Их много, и обычно вы можете определить их по 16-контактному интерфейсу.

 На этом скетче написано "Я, <сердце>, Ардуино!" и маленький танцующий человечек на ЖК-дисплее.

  Схема:
 * Вывод ЖК-дисплея RS на цифровой вывод 12
 * ЖК-дисплей Enable вывод на цифровой вывод 11
 * Вывод ЖК-дисплея D4 на цифровой вывод 5
 * Вывод ЖК-дисплея D5 на цифровой вывод 4
 * Вывод ЖК-дисплея D6 на цифровой вывод 3
 * Вывод ЖК-дисплея D7 на цифровой вывод 2
 * LCD R / W контакт к земле
 * Потенциометр 10K:
 * Подключается на + 5В и на землю
 * Средний контакт к выводу LCD VO (вывод 3)
 * Потенциометр 10K на контакте A0

 Создано 21 марта 2011 г.
 Том Igoe
 изменен 11 ноября 2013 г.
 Скотт Фицджеральд
 изменен 7 нояб.2016 г.
 Артуро Гуадалупи

 На основе примера Adafruit в
 https://github.com/adafruit/SPI_VFD/bl ... createChar/createChar.pde

 Этот пример кода находится в общественном достоянии.
*/

// Подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализировать библиотеку, связав любой необходимый вывод интерфейса 
// ЖК-дисплея с номером вывода Arduino, к которому он подключен
const int rs 12en 11d4 5d5 4d6 3d7 2;
LiquidCrystal lcd(rsend4d5d6d7);

// Создаём несколько пользовательских персонажей:
byte heart[8] = {
  
0b00000,
  
0b01010,
  
0b11111,
  
0b11111,
  
0b11111,
  
0b01110,
  
0b00100,
  
0b00000
};

byte smiley[8] = {
  
0b00000,
  
0b00000,
  
0b01010,
  
0b00000,
  
0b00000,
  
0b10001,
  
0b01110,
  
0b00000
};

byte frownie[8] = {
  
0b00000,
  
0b00000,
  
0b01010,
  
0b00000,
  
0b00000,
  
0b00000,
  
0b01110,
  
0b10001
};

byte armsDown[8] = {
  
0b00100,
  
0b01010,
  
0b00100,
  
0b00100,
  
0b01110,
  
0b10101,
  
0b00100,
  
0b01010
};

byte armsUp[8] = {
  
0b00100,
  
0b01010,
  
0b00100,
  
0b10101,
  
0b01110,
  
0b00100,
  
0b00100,
  
0b01010
};

void setup() {
  
// Инициализировать ЖК-дисплей и настроить количество столбцов и строк:
  
lcd.begin(162);

  
// Создать нового персонажа
  
lcd.createChar(0heart);
  
// Создать нового персонажа
  
lcd.createChar(1smiley);
  
// Создать нового персонажа
  
lcd.createChar(2frownie);
  
// Создать нового персонажа
  
lcd.createChar(3armsDown);
  
// Создать нового персонажа
  
lcd.createChar(4armsUp);

  
// Установить курсор в верхний левый угол
  
lcd.setCursor(00);

  
// Распечатайть сообщение на ЖК-дисплее.
  
lcd.print("I ");
  
lcd.write(byte(0)); // при вызове lcd.write () '0' должен быть приведен как байт
  
lcd.print(" Arduino! ");
  
lcd.write((byte)1);

}

void loop() {
  
// Считывание потенциометра на A0:
  
int sensorReading analogRead(A0);
  
// Сопоставить результат с 200 - 1000:
  
int delayTime map(sensorReading010232001000);
  
// Установить курсор в нижнюю строку, 5 позицию:
  
lcd.setCursor(41);
  
// Нарисовать человечка с опущенными руками:
  
lcd.write(3);
  
delay(delayTime);
  
lcd.setCursor(41);
  
// Поднять человечку руки:
  
lcd.write(4);
  
delay(delayTime);
}

Прикреплённый файл:



gif  CustomCharacter.gif (25.32 KB)
290_6099a34075fad.gif 1140X803 px
zip CustomCharacter_.zip Размер: 45.51 KB; Просмотры: 329



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Пример демонстрации периодического включения и отключения отображения информации на дисплее.
/*
  Библиотека LiquidCrystal - отображение и без отображения

 Демонстрирует использование ЖК-дисплея 16x2. Библиотека LiquidCrystal 
работает со всеми ЖК-дисплеями, совместимыми с драйвером Hitachi HD44780. 
Их много, и обычно вы можете определить их по 16-контактному интерфейсу.

 На этом скетче печатается надпись "Hello World!" на ЖК-дисплее периодически
то появляется, то исчезает.

 Схема:
 * Вывод ЖК-дисплея RS на цифровой вывод 12
 * ЖК-дисплей Enable вывод на цифровой вывод 11
 * Вывод ЖК-дисплея D4 на цифровой вывод 5
 * Вывод ЖК-дисплея D5 на цифровой вывод 4
 * Вывод ЖК-дисплея D6 на цифровой вывод 3
 * Вывод ЖК-дисплея D7 на цифровой вывод 2
 * LCD R / W контакт к земле
 * Переменный резистор 10 кОм:
 * Подключается на + 5В и на землю
 * Средний вывод к выводу LCD VO (вывод 3)

 Библиотека изначально добавлена ​​18 апреля 2008 г.
 Дэвид А. Меллис
 библиотека изменена 5 июля 2009 г.
 Лимор Фрид (http://www.ladyada.net)
 пример добавлен 9 июля 2009 г.
 Том Igoe
 изменен 22 ноября 2010 г.
 Том Igoe
 изменен 7 нояб.2016 г.
 Артуро Гуадалупи

 Этот пример кода находится в общественном достоянии.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

*/

// Подключаем библиотеку ЖК-дисплея:
#include <LiquidCrystal.h>

// инициализировать библиотеку, связав любой необходимый вывод 
// интерфейса ЖК-дисплея с номером вывода Arduino, к которому он подключен
const int rs 12en 11d4 5d5 4d6 3d7 2;
LiquidCrystal lcd(rsend4d5d6d7);

void setup() {
  
// настроить количество столбцов и строк на ЖК-дисплее:
  
lcd.begin(162);
  
// Распечатать сообщение на ЖК-дисплее.
  
lcd.print("hello, world!");
}

void loop() {
  
// Выключить дисплей:
  
lcd.noDisplay();
  
delay(500);
  
// Включить дисплей::
  
lcd.display();
  
delay(500);
}

Прикреплённый файл:



gif  LiquidCrystal_Display.gif (45.51 KB)
290_6099b27e6db3a.gif 925X736 px
zip LiquidCrystal_Display.zip Размер: 40.93 KB; Просмотры: 325



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2520
Не в сети
Наглядный пример, когда в Proteus задействован серийный монитор позволяющий связать физическую клавиатуру с виртуальной платой Ардуино. В качестве демонстрации на виртуальном дисплее будет отображаться символ нажатой физической клавиши.
/*
  Библиотека LiquidCrystal - последовательный ввод

  Демонстрирует использование ЖК-дисплея 16x2. Библиотека LiquidCrystal 
  работает со всеми ЖК-дисплеями, совместимыми с драйвером Hitachi HD44780. 
  Их много, и обычно вы можете определить их по 16-контактному интерфейсу.

  Этот эскиз отображает текст, отправленный через последовательный порт 
  (например, с последовательного монитора) на подключенном ЖК-дисплее.

  Схема:
  * Вывод ЖК-дисплея RS на цифровой вывод 12
  * ЖК-дисплей Enable вывод на цифровой вывод 11
  * Вывод ЖК-дисплея D4 на цифровой вывод 5
  * Вывод ЖК-дисплея D5 на цифровой вывод 4
  * Вывод ЖК-дисплея D6 на цифровой вывод 3
  * Вывод ЖК-дисплея D7 на цифровой вывод 2
  * Вывод ЖК-дисплея R/W контакт к земле
  * Резистор 10 кОм:
  * подключается к + 5В и на землю
  * средний контакт к выводу ЖК-дисплея VO (вывод 3)

  Библиотека изначально добавлена 18 апреля 2008 г.
  Дэвид А. Меллис
  библиотека изменена 5 июля 2009 г.
  Лимор Фрид (http://www.ladyada.net)
  пример добавлен 9 июля 2009 г.
  Том Igoe
  изменен 22 ноября 2010 г.
  Том Igoe
  изменен 7 нояб.2016 г.
  Артуро Гуадалупи

  Этот пример кода находится в общественном достоянии.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalSerialDisplay

*/

// Подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализировать библиотеку, связав любой необходимый вывод 
// интерфейса ЖК-дисплея с номером вывода Arduino, к которому он подключен
const int rs 12en 11d4 5d5 4d6 3d7 2;
LiquidCrystal lcd(rsend4d5d6d7);

void setup() {
  
// настроить количество столбцов и строк на ЖК-дисплее:
  
lcd.begin(162);
  
// инициализировать последовательную связь:
  
Serial.begin(9600);
}

void loop() {
  
// когда символы прибывают через последовательный порт ...
  
if (Serial.available()) {
    
// подождать немного, чтобы пришло все сообщение
    
delay(100);
    
// очистить экран
    
lcd.clear();
    
// прочитать все доступные символы
    
while (Serial.available() > 0) {
      
// отображать каждый символ на ЖК-дисплее
      
lcd.write(Serial.read());
    }
  }
}


Прикреплённый файл:



gif  SerialDisplay.gif (24.77 KB)
290_609accb670261.gif 907X833 px
zip SerialDisplay.zip Размер: 44.75 KB; Просмотры: 381



Поиск по форуму


Расширенный поиск

Разное

Интересно

При пайке деталей над горловиной кинескопа накройте ее куском материи.
Этим Вы убережёте кинескоп от случайно падающего расплавленного припоя и, следовательно, от трещин в его стекле.