Форум

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

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

В сети

Пользователей: 173
Из них просматривают:
Аналоги: 133. Галерея: 1. Даташиты: 17. Инструкции: 1. Новости: 3. Остальное: 3. Программы: 2. Производители: 1. Форум: 12.
Участников: 2
Гостей: 171

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

Партнёры


Партнёры

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

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

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

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

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



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



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

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


Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2533
Не в сети
Может кому ещё пригодится. Сейчас есть очень наглядные платы в симуляторах, что делает это занятие интересней. Например, создадим часики на 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; Просмотры: 363


Отредактировано пользователем 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
Из: Днестровск
Сообщений: 2533
Не в сети
Бар график — это меняющиеся состояния светодиодов в строке. Он состоит из ряда светодиодов, аналогового входа с потенциометром, и программного кода для правильной работы между ними. Этот пример демонстрирует, как можно управлять линейкой светодиодов. Для симуляции в 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; Просмотры: 360



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2533
Не в сети
Пример управления светодиодной матрицей в 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; Просмотры: 344



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2533
Не в сети
Пример подключения ЖК-дисплея 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; Просмотры: 335


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


Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2533
Не в сети
Пример использования мигающего курсора в виде прямоугольного блока в конце предложения.
/*
  Библиотека 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; Просмотры: 338



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2533
Не в сети
Пример как добавлять пользовательские символы на ЖК-дисплей и анимировать некоторые из них. Если запустить симуляцию, то человечек "оживёт". Если покрутить потенциометр, то скорость "жизнедеятельности" человечка будет меняться. На этот раз использован двухстрочный дисплей по 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; Просмотры: 331



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2533
Не в сети
Пример демонстрации периодического включения и отключения отображения информации на дисплее.
/*
  Библиотека 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; Просмотры: 327



Re: Симуляция в Proteus
Технический Директор
Зарегистрирован:
08.02.2009 21:08
Из: Днестровск
Сообщений: 2533
Не в сети
Наглядный пример, когда в 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; Просмотры: 384



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


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

Разное

Интересно

Диэлектрические и диамагнитные отвертки можно выпилить из старых стеклотекстолитовых плат.