Кстати, будете смеяться, но так, как сейчас сделано, когда экранчик выключен, кнопки (увеличение/уменьшение) продолжают работать. Можете попробовать - выключите, нажмите кнопку, включите - будет новое значение :)
там ещё и термодатчики желательно предусмотреть )) и чтобы цифры что на дисплейчиках обрабатывать можно было ))) И ето готовый проект инфракрасной станции почти будет или просто паяльной но хорошей станции на AT1628 или TM1628
В общем поменял я местами микросхемы теперь правая работает левая нет и таки определения другие стоят так как светодиоды отдельные не правильно работают и потенциометр не регулирует ничего ))) а дисплеи чётко показывают
Здраствуйте Евгений В общем я тут немного всё усложнил и подключаю на место атмеги к плате плату ардуино и вот вопрос контакт AREF ссоеденять с таким же на месте атмеги (Atmega8l-8pu) ?
Блин, ну Вы так не шутите. У меня тут библиотека готова (только тесты осталось написать). Но это имеет смысл, если аппаратно всё работает. Оно же работало у нас!
Там добавлено там теперь паяльник включается и температура ставится , энкодер опрашивается, вот а как подключить одновременно 2 spi я так и не додумался, если прописать вашь готовый скетчь то всё работает как и было
Здраствуйте Евгений прилагаю код понимаю что у меня подключено по i2c 2 устройства отдельно но они не хотят совместно работать помогите распутать сей клубок код прилагаю за ошибки не ругайте
#include <stdio.h>
//#include <math.h>
static int serial_fputchar(const char ch, FILE *stream) { ((void*)stream); Serial.write(ch); return ch; }
static FILE *serial_stream = fdevopen(serial_fputchar, NULL);
//
// Подключение пинов
// разъём отверстиями кверху и синей стороной шлейфа к себе, тогда рсапиновка:
// GND 3,3V CLK DIO STB OUT-IR 5V
//
#define PIN_DIO 9
#define PIN_CLK 8
#define PIN_STB 7
#define PIN_DIO1 6 //
#define PIN_CLK1 5 // > ето я добавляю вторую группу дисплеев и кнопок по i2c - но ничего не выходит
#define PIN_STB1 4 // /
#define INIT_6x12 2
#define INIT_7x11 3
/////////////////////////////////////////////////////////////
///////////// ТИПА "библиотека" ДЛЯ TM1668 ////////////
/////////////////////////////////////////////////////////////
//
// при том подключении, что есть
// достаточно 10 байтов на светодиоды и 2 на кнопки
//
#define LED_DATA_LENGTH 14
#define KEY_DATA_LENGTH 5
//
// Маски нажатых кнопок (слева направо)
//
//#define KEY_2_BLUE 0x00001000ul
//#define KEY_1_BLUE 0x00000200ul
//#define KEY_2_RED 0x00020000ul
//#define KEY_1_RED 0x00000010ul
/*
#define KEY_2_BLUE 0x0010000000
#define KEY_1_BLUE 0x0002000000
#define KEY_2_RED 0x0000020000
#define KEY_1_RED 0x1000000000
#define POWER_2 0x0000000010 // LE6
#define POWER_1 0x0000000002 // LE8
*/
//
// Подключено 5 "цифр".
// 0-ая - это двоеточие, залействовано только два младших бита
// 1-4 - собственно цифры слева направо.
// В цифрах задействовано 7 битов под сегменты (с 0-го по 6-ой)
// и 7-ой бит под доплнительный символ (питание, конверт и т.п.)
//
#define LE6 0x0008 // зел справа
#define LE5 0x0020 // красн справа
#define LE7 0x0040 // красн слева
#define LE8 0x0080 // зел. слева
//#define LE4 0x0040
#define SEG_A 0x0001
#define SEG_F 0x0002
#define SEG_B 0x0004
#define SEG_G 0x0008
#define SEG_C 0x0010
#define SEG_DP 0x0020
#define SEG_D 0x0040
#define SEG_E 0x0080
//
// Символы (цифры / буквы, можно ещё добавить всяких)
//
#define SYMBOL_0 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F)
#define SYMBOL_1 (SEG_B | SEG_C)
#define SYMBOL_2 (SEG_A | SEG_B | SEG_D | SEG_E | SEG_G)
#define SYMBOL_3 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_G)
#define SYMBOL_4 (SEG_B | SEG_C | SEG_F | SEG_G)
#define SYMBOL_5 (SEG_A | SEG_C | SEG_D | SEG_F | SEG_G)
#define SYMBOL_6 (SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)
#define SYMBOL_7 (SEG_A | SEG_B | SEG_C)
#define SYMBOL_8 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)
#define SYMBOL_9 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G)
#define SYMBOL_MINUS (SEG_G)
#define SYMBOL_A (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G)
#define SYMBOL_C (SEG_A | SEG_E | SEG_F | SEG_D)
#define SYMBOL_E (SEG_A | SEG_D | SEG_E | SEG_F | SEG_G)
#define SYMBOL_H (SEG_B | SEG_C | SEG_E | SEG_F | SEG_G)
#define SYMBOL_P (SEG_A | SEG_B | SEG_E | SEG_F | SEG_G)
#define SYMBOL_G (SEG_A | SEG_E | SEG_F)
#define SYMBOL_L (SEG_D | SEG_E | SEG_F)
#define SYMBOL_F (SEG_A | SEG_E | SEG_F | SEG_G)
#define SYMBOL_d (SEG_B | SEG_C | SEG_D | SEG_E | SEG_G)
#define SYMBOL_b (SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)
#define SYMBOL_rP (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F)
//
// Глобальные переменные
//
static uint16_t ledGRID[LED_DATA_LENGTH / 2]; // текущее состояние экрана
static uint8_t currentBrightness = 7; // текущая яркость
static uint8_t digits[] = { SYMBOL_0, SYMBOL_1, SYMBOL_2, SYMBOL_3, SYMBOL_4, SYMBOL_5, SYMBOL_6, SYMBOL_7, SYMBOL_8, SYMBOL_9 };
//
static uint16_t saveGRID[LED_DATA_LENGTH / 2]; // нужно для сохранения состояния экрана на время теста
static uint8_t saveBrightness; // нужно для сохранения яркости на время теста
//
//
// Запись одиночной команды в TM1668
//
void writeSingleCommand(const uint8_t command) {
digitalWrite(PIN_STB, LOW);
shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, command);
digitalWrite(PIN_STB, HIGH);
delayMicroseconds(1); // Пауза до следующей команды
// digitalWrite(PIN_STB1, LOW);
// shiftOut(PIN_DIO1, PIN_CLK1, LSBFIRST, command);
// digitalWrite(PIN_STB1, HIGH);
// delayMicroseconds(1); // Пауза до следующей команды
}
//
// Запись состояния дисплея в TM1668
//
void updateDisplay(void) {
writeSingleCommand(0x40); // запись данных, автоматический адрес
digitalWrite(PIN_STB, LOW);
shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, 0xC0); // Установка адреса в 0
uint8_t * p = (uint8_t *) ledGRID;
for (int8_t i = 0; i < LED_DATA_LENGTH; i++, p++) shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, *p); // запись данных
digitalWrite(PIN_STB, HIGH);
shiftOut(PIN_DIO1, PIN_CLK1, LSBFIRST, 0xC0); // Установка адреса в 0
// uint8_t * p = (uint8_t *) ledGRID;
// for (int8_t i = 0; i < LED_DATA_LENGTH; i++, p++) shiftOut(PIN_DIO1, PIN_CLK1, LSBFIRST, *p); // запись данных
digitalWrite(PIN_STB1, HIGH);
// updateDisplay();
delayMicroseconds(1); // Пауза до следующей команды
}
//
// Чтение состояния кнопок с TM1668
//
#define KEY_2_BLUE 1
#define KEY_1_BLUE 2
#define KEY_2_RED 4
#define KEY_1_RED 8
#define POWER_2 16
#define POWER_1 32
#define POWER_3 64
void readKeyData(uint8_t * data) {
digitalWrite(PIN_STB, LOW);
shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, 0x42); // чтение данных
pinMode(PIN_DIO, INPUT_PULLUP);
delayMicroseconds(1);
byte buffer[KEY_DATA_LENGTH];
for (int i=0; i<KEY_DATA_LENGTH; i++) {
buffer[i] = shiftIn(PIN_DIO, PIN_CLK, LSBFIRST);
}
pinMode(PIN_DIO, OUTPUT);
digitalWrite(PIN_STB, HIGH);
* data = 0;
if (buffer[1] & 0x10) *data |= KEY_2_BLUE;
if (buffer[1] & 0x02) *data |= KEY_1_BLUE;
if (buffer[2] & 0x02) *data |= KEY_2_RED;
if (buffer[0] & 0x10) *data |= KEY_1_RED;
if (buffer[4] & 0x10) *data |= POWER_2;
if (buffer[4] & 0x02) *data |= POWER_1;
}
//
// Установить яркость от 0 (выключено) до 8
// (возвращает старую яркость)
//
static inline uint8_t setBrightness(const uint8_t newBrighness) {
const uint8_t res = currentBrightness;
currentBrightness = (newBrighness > 8) ? 8 : newBrighness;
if (currentBrightness == 0) writeSingleCommand(0x80); // Выключить дисплей
else writeSingleCommand(0x88 + (currentBrightness - 1)); // Установить яркость
return res;
}
//
// Увеличить яркость на 1 (возвращает старую яркость)
//
static inline uint8_t increaseBrightness(void) {
const uint8_t res = currentBrightness;
if (currentBrightness < 8) setBrightness(currentBrightness + 1);
return res;
}
//
// Уменьшить яркость на 1 (возвращает старую яркость)
//
static inline uint8_t decreaseBrightness(void) {
const uint8_t res = currentBrightness;
if (currentBrightness > 0) setBrightness(currentBrightness - 1);
return res;
}
//
// Показать тест экрана
// (все символы включены на максимальной яркости)
//
void showTest(void) {
memcpy(saveGRID, ledGRID, sizeof(saveGRID));
ledGRID[0] = 3;
ledGRID[1] = 0xFF;
ledGRID[2] = 0xFF;
ledGRID[3] = 0xFF;
ledGRID[4] = 0xFF;
updateDisplay();
saveBrightness = setBrightness(8);
}
//
// Восстановить экран после теста
//
void hideTest(void) {
memcpy(ledGRID, saveGRID, sizeof(saveGRID));
updateDisplay();
setBrightness(saveBrightness);
}
//
// Показать цифру value (0-9) в позиции digit (1-4)
// при этом, если у цифры горит дополнительный символ, сохраняем его
//
static inline void setDigit(const int8_t digit, const uint8_t value) {
if (digit < 0 || digit > 6) return; // цифры у нас с 1-ой по 4-ую слева направо
ledGRID[digit] = value; // не обижать дополнительный символ, если есть
}
//
// Показать число m в двух правых цифрах (типа минуты или там секунды)
//
static inline void showMinutes(const int8_t m) {
setDigit(0, digits[m % 10]);
setDigit(1, digits[m / 10]);
}
//
// Показать число h в двух левых цифрах (типа часы или там минуты)
//
static inline void showHours(const int8_t h) {
setDigit(2, digits[h % 10]);
setDigit(3, digits[h / 10]);
}
//
// Показать и часы, и минуты
//
static inline void showClock(const int8_t h, const int8_t m) {
showHours(h);
showMinutes(m);
}
#define LEFT_POSITION 3
#define RIGHT_POSITION 0
static inline void showNumber(const int8_t where, int num) {
for (uint8_t i = where; i < where + 3; i++) {
if (num == 0) {
setDigit(i, i == where ? SYMBOL_0 : 0);
} else {
setDigit(i, digits[num % 10]);
num /= 10;
}
}
}
/////////////////////////////////////////////////////////////
//////////// КОНЕЦ "библиотеки" ДЛЯ TM1668 ////////////
/////////////////////////////////////////////////////////////
static int l = 20, r = 000;
#include <math.h>
int encoder = 127;
int payaln = 378;
int sting_tmp;
int fadeAmount = 1;
byte Sens_A1 = A1;
byte sting = 13;
unsigned long currentTime;
unsigned long loopTime;
unsigned long timing;
const int enc_pin_A = 3;
const int enc_pin_B = 2;
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
void setup(void) {
stdout = serial_stream; // эта строка первая в setup
Serial.begin(115200);
//
// Инициализация пинов
pinMode(PIN_CLK, OUTPUT);
pinMode(PIN_DIO, OUTPUT);
pinMode(PIN_STB, OUTPUT);
/*
pinMode(PIN_CLK1, OUTPUT);//
pinMode(PIN_DIO1, OUTPUT);// я добавил
pinMode(PIN_STB1, OUTPUT);//
digitalWrite(PIN_STB1, HIGH);
digitalWrite(PIN_CLK1, HIGH);
*/
pinMode(A0, INPUT_PULLUP); //сенсор стола
pinMode(Sens_A1, INPUT_PULLUP); //сенсор паяльника
pinMode(sting, OUTPUT);
digitalWrite(PIN_STB, HIGH);
digitalWrite(PIN_CLK, HIGH);
// digitalWrite(PIN_STB1, HIGH); //я добавил
// digitalWrite(PIN_CLK1, HIGH); //
//
// Инициализация экрана
writeSingleCommand(INIT_7x11); // Режим отображения (1 и 2 - ничего не меняется)
setBrightness(currentBrightness);
//
// // Пишем на экране слово ПОПА
// setDigit(3, SYMBOL_rP);
// setDigit(2, SYMBOL_0);
// setDigit(1, SYMBOL_rP);
// setDigit(0, SYMBOL_A);
// updateDisplay();
// //
// // Даём 5 секунд полюбоваться
// delay(1000);
// //
// // Рисуем нулевое время
// showClock(0, 0);
// updateDisplay();
//
showNumber(LEFT_POSITION, l);
showNumber(RIGHT_POSITION, r);
updateDisplay();
// delay(5000);
// showNumber(LEFT_POSITION, 0);
// showNumber(RIGHT_POSITION, 3);
// updateDisplay();
// delay(5000);
// showNumber(LEFT_POSITION, 21);
// showNumber(RIGHT_POSITION, 1);
// updateDisplay();
// delay(5000);
// showNumber(LEFT_POSITION, 666);
// showNumber(RIGHT_POSITION, 321);
// updateDisplay();
// delay(5000);
//
// printf("Press key\n");
// Настрийки для энкодера
pinMode(enc_pin_A, INPUT_PULLUP);
pinMode(enc_pin_B, INPUT_PULLUP);
currentTime = millis();
loopTime = currentTime;
}
void loop(void) {
uint8_t newKeys;
readKeyData(& newKeys);
#define KEY_2_BLUE 1
#define KEY_1_BLUE 2
#define KEY_2_RED 4
#define KEY_1_RED 8
#define POWER_2 16
#define POWER_1 32
if (millis() - timing > 75){
if (newKeys & KEY_1_BLUE) {
if (l < 480) l++;
}
if (newKeys & KEY_1_RED) {
if (l > 20) l--;
}
if (newKeys & KEY_2_BLUE) {
if (r < 999) r++;
}
if (newKeys & KEY_2_RED) {
if (r > 0) r--;
}
timing = millis();
}
ENCODER(); //процедура опроса энкодера
if (newKeys == 0x00000020){
STING(); //процедура нагрева паяльника
}
if (newKeys == 0x00000030){
STING(); //процедура нагрева паяльника
// FEN(); //процедура нагрева фена
// STOL(); //процедура нагрева стола
// LAMPA(); //процедура нагрева ВЕРХНЕГО НАГРЕВАТЕЛЯ
}
if (newKeys == 0x00000000){
payaln = 378;
l = 20;
}
if (newKeys == 0x00000010){
payaln = 378;
l = 20;
}
showNumber(LEFT_POSITION, l);
showNumber(RIGHT_POSITION, encoder); //r
//#define POWER_2 0x0000000010 // LE6
//#define POWER_1 0x0000000002 // LE8
// if ()
// {
// setDigit(6, ledGRID[6] | LE7); //
// }
/* else
{
setDigit(6, ledGRID[6]); // & ~LE7
setDigit(0, 0);
setDigit(1, 0);
setDigit(2, 0);
}
*/
if (newKeys & POWER_1)
setDigit(6, ledGRID[6] | LE6); //
else
{
setDigit(6, ledGRID[6] & ~LE6);
setDigit(3, 0);
setDigit(4, 0);
setDigit(5, 0);
}
updateDisplay();
if (newKeys & POWER_2)
setDigit(6, ledGRID[6] | LE5); //
else
{
setDigit(6, ledGRID[6] & ~LE5);
setDigit(0, 0);
setDigit(1, 0);
setDigit(2, 0);
}
//saveBrightness = setBrightness(0);
updateDisplay();
Serial.println();
Serial.print(" Pay_Disp: ");
Serial.print(l);
Serial.print(" | Payalnik: ");
Serial.print(payaln);
Serial.print(" | Pay_Sensor: ");
Serial.print(sting_tmp);
Serial.print(" | Encoder: ");
Serial.print(encoder);
// printf("0x%08lX\n", newKeys);
// delay(100);
}
///// Всё! Веселье закончилось!
///// Мало нам веселья!
void ENCODER() //Процедура опроса энкодера
{
currentTime = millis();
if(currentTime >= (loopTime + 3))
{
encoder_A = digitalRead(enc_pin_A);
encoder_B = digitalRead(enc_pin_B);
if((!encoder_A) && (encoder_A_prev))
{
if(encoder_B)
{
if(encoder + fadeAmount <= 255)
encoder += fadeAmount;
}
else
{
if(encoder - fadeAmount >= 0)
encoder -= fadeAmount;
}
}
encoder_A_prev = encoder_A;
loopTime = currentTime;
}
}
void STING()
{
sting_tmp = analogRead(Sens_A1);
payaln = map(l, 20, 400, 378, 330);
if (sting_tmp > payaln)
{
analogWrite(sting, 768);
setDigit(6, ledGRID[6] | LE7);
updateDisplay();
}
if (sting_tmp <= payaln)
{
digitalWrite(sting, HIGH);
setDigit(6, ledGRID[6] | LE7);
updateDisplay();
}
}
void FEN()
{
}
/*static int l = 20, r = 000;
#include <math.h>
int encoder1 = 127;
int payaln1 = 378;
int sting_tmp1;
int fadeAmount1 = 1;
byte Sens_A2 = A2;
byte sting1 = 13;
unsigned long currentTime1;
unsigned long loopTime1;
unsigned long timing1;
const int enc_pin_A1 = 3;
const int enc_pin_B1 = 2;
unsigned char encoder_A1;
unsigned char encoder_B1;
unsigned char encoder_A_prev1=0;
void setup(void){
stdout1 = serial_stream1; // эта строка первая в setup
Serial.begin(115200);
//
// Инициализация пинов
pinMode(PIN_CLK1, OUTPUT);
pinMode(PIN_DIO1, OUTPUT);
pinMode(PIN_STB1, OUTPUT);
pinMode(PIN_CLK1, OUTPUT);//
pinMode(PIN_DIO1, OUTPUT);// я добавил
pinMode(PIN_STB1, OUTPUT);//
digitalWrite(PIN_STB1, HIGH);
digitalWrite(PIN_CLK1, HIGH);
pinMode(A0, INPUT_PULLUP); //сенсор стола
pinMode(Sens_A2, INPUT_PULLUP); //сенсор паяльника
pinMode(sting1, OUTPUT);
digitalWrite(PIN_STB1, HIGH);
digitalWrite(PIN_CLK1, HIGH);
// digitalWrite(PIN_STB1, HIGH); //я добавил
// digitalWrite(PIN_CLK1, HIGH); //
//
// Инициализация экрана
writeSingleCommand(INIT_7x11); // Режим отображения (1 и 2 - ничего не меняется)
setBrightness(currentBrightness);
//
// // Пишем на экране слово ПОПА
// setDigit(3, SYMBOL_rP);
// setDigit(2, SYMBOL_0);
// setDigit(1, SYMBOL_rP);
// setDigit(0, SYMBOL_A);
// updateDisplay();
// //
// // Даём 5 секунд полюбоваться
// delay(1000);
// //
// // Рисуем нулевое время
// showClock(0, 0);
// updateDisplay();
//
showNumber(LEFT_POSITION, l);
showNumber(RIGHT_POSITION, r);
updateDisplay();
// delay(5000);
// showNumber(LEFT_POSITION, 0);
// showNumber(RIGHT_POSITION, 3);
// updateDisplay();
// delay(5000);
// showNumber(LEFT_POSITION, 21);
// showNumber(RIGHT_POSITION, 1);
// updateDisplay();
// delay(5000);
// showNumber(LEFT_POSITION, 666);
// showNumber(RIGHT_POSITION, 321);
// updateDisplay();
// delay(5000);
//
// printf("Press key\n");
// Настрийки для энкодера
pinMode(enc_pin_A1, INPUT_PULLUP);
pinMode(enc_pin_B1, INPUT_PULLUP);
currentTime = millis();
loopTime = currentTime1;
}
void loop(void) {
uint8_t newKeys;
readKeyData(& newKeys);
#define KEY_2_BLUE 1
#define KEY_1_BLUE 2
#define KEY_2_RED 4
#define KEY_1_RED 8
#define POWER_2 16
#define POWER_1 32
if (millis() - timing > 75){
if (newKeys & KEY_1_BLUE) {
if (l < 480) l++;
}
if (newKeys & KEY_1_RED) {
if (l > 20) l--;
}
if (newKeys & KEY_2_BLUE) {
if (r < 999) r++;
}
if (newKeys & KEY_2_RED) {
if (r > 0) r--;
}
timing = millis();
}
ENCODER(); //процедура опроса энкодера
if (newKeys == 0x00000020){
STING(); //процедура нагрева паяльника
}
if (newKeys == 0x00000030){
STING(); //процедура нагрева паяльника
// FEN(); //процедура нагрева фена
// STOL(); //процедура нагрева стола
// LAMPA(); //процедура нагрева ВЕРХНЕГО НАГРЕВАТЕЛЯ
}
if (newKeys == 0x00000000){
payaln = 378;
l = 20;
}
if (newKeys == 0x00000010){
payaln = 378;
l = 20;
}
showNumber(LEFT_POSITION1, l);
showNumber(RIGHT_POSITION1, encoder); //r
//#define POWER_2 0x0000000010 // LE6
//#define POWER_1 0x0000000002 // LE8
// if ()
// {
// setDigit(6, ledGRID[6] | LE7); //
// }
/* else
{
setDigit(6, ledGRID[6]); // & ~LE7
setDigit(0, 0);
setDigit(1, 0);
setDigit(2, 0);
}
*/
/* if (newKeys & POWER_1)
setDigit(6, ledGRID[6] | LE6); //
else
{
setDigit(6, ledGRID[6] & ~LE6);
setDigit(3, 0);
setDigit(4, 0);
setDigit(5, 0);
}
updateDisplay();
Serial.println();
Serial.print(" Pay_Disp: ");
Serial.print(l);
Serial.print(" | Payalnik: ");
Serial.print(payaln);
Serial.print(" | Pay_Sensor: ");
Serial.print(sting_tmp);
Serial.print(" | Encoder: ");
Serial.print(encoder);
// printf("0x%08lX\n", newKeys);
// delay(100);
}
///// Всё! Веселье закончилось!
///// Мало нам веселья!
void ENCODER() //Процедура опроса энкодера
{
currentTime1 = millis();
if(currentTime1 >= (loopTime1 + 3))
{
encoder_A1 = digitalRead(enc_pin_A);
encoder_B1 = digitalRead(enc_pin_B);
if((!encoder_A) && (encoder_A_prev))
{
if(encoder_B)
{
if(encoder + fadeAmount <= 255)
encoder += fadeAmount;
}
else
{
if(encoder - fadeAmount >= 0)
encoder -= fadeAmount;
}
}
encoder_A_prev1 = encoder_A;
loopTime1 = currentTime;
}
}
void STING()
{
sting_tmp = analogRead(Sens_A1);
payaln = map(l, 20, 400, 378, 330);
if (sting_tmp > payaln)
{
analogWrite(sting, 768);
setDigit(6, ledGRID[6] | LE7);
updateDisplay();
}
if (sting_tmp <= payaln)
{
digitalWrite(sting, HIGH);
setDigit(6, ledGRID[6] | LE7);
updateDisplay();
}
}
void FEN()
{
}
*/
Алексей, я сегодня выложу Вам готовую библиотеку (собственно она с неделю как готова, нет только тестового примера). Давайте её дожмём, чтобы она у Вас уже была, а потом будем смотреть на i2c и что там ещё.
Если всё сделано правильно, он быдет компилироваться без ошибок.
Убедитесь, что наш старый пример работает на текущем железе.
Вы там меняли какие-то коды. Найдите их в файле TM1628Symbols.h и также поменяйте.
Убедитесь, что скорость сериала в строке 21 такая же как у Вас в мониторе порта. Включите Ваши тумбелры, чтобы дисплеи были включены. Запустите скетч. Скорее всего он повалится (мне проверять не на чем), но мы его дожмём - это не проблема.
По идее он должен делать два теста.
Тест №1. Занимает 20 секунд. В левом жисплее цифры меняются с 0 до 999, а в правом в то же самое время с 999 до 0. Если этот тест заработал и с ним всё в порядке, закомментируйте строку 23, чтобы впредь он не запускался.
Тест №2. Начинается после теста №1. Раз в 5 секунд в сериал печаются значения, которые Вы видите на дисплее. При этом Вы можете менять значения кнопками, выключать дисплей и т.п. Значения должны печататься текущими. Если Вы нажмёте кнопку изменения значения и будете держать не отпуская, то изменение будет ускоряться. Сейчас там стоят огромные задержки, чтобы видно было, но потом Вы поставите такие, какие Вам нравятся.
===============
В общем, запускайтесь, смотрите, пробуйте, фиксируйте ошибки. Я буду доступен примерно через полчаса-минут сорок.
Здравствуйте ЕвгенийП И вот какая интересная штука выявилась Если с етим кодом включен монитор порта то значения держатся а если монитор выключить то они примерно через 10-15 секунд обнуляются )) Проверил delay нету нигде а где были закоментировал не помогло
Ну, значит, она у Вас перегружается. Скорее всего из-за питания или чего-нмбудь подобного. Может, конечно, и программно чего, но вряд ли - там нет работы с памятью.
Для начала убедитесь, что она именно перегружается. Сможете?
1. Когда Вы питаете от USB оно работает, а когда питаете от "родного" питания в устройстве, оно иногда обнуляется. Значит, 90% проходит скачок по питанию (например, при включении нагрузки) и ардуина перегружается. Проверить это очень просто. Присоедините к ардуине какой-нибудь buzzer и вставьте в setup полусекундный писк. При запуске она пискнет. А потом, если при обнулении пискнет снова - значит действительно произошла перезагрузка. Проверьте.
2. Мы же с Вами выключали и всё было нормально? Или сейчас у Вас там нагрузка есть? Если так, то вполне может быть опять же "перезагрузка". Когда будете проверять п.1. Пощёлкайте и выключателем - если будет пищать, значит перезагрузка.
Если происходит перезагрузка, то почти наверняка дело в питании. Если бы дело было в программе - она бы всегда обнулялалсь, хоть с USB, хоть без. Ну, совсем чтобы убедиться, запитайте ардуину не от USB, а от совсем постороннего БП (только земли соедините) и убедитесь.
Если подтвердится, что проблема в питании, это уже Ваша епархия - Вы же электронщик, а не я. Ставьте там конденсаторы, дроссели или чего там ещё положено, в общем обеспечьте стабильное питание.
Огромное спасибо ЕвгенийП Очень доходчиво и практично обьяснили и помогли !!!
Кстати, будете смеяться, но так, как сейчас сделано, когда экранчик выключен, кнопки (увеличение/уменьшение) продолжают работать. Можете попробовать - выключите, нажмите кнопку, включите - будет новое значение :)
Забавно! Но мне потом всё равно дорабатывать мне отключение ещё и на силовую часть туда вводить
Так что когда доберусь до включения и отключения силовой части наверно тогда и отключу кнопки вместе с дисплеем
Я это в библиотеке предусмотрю.
там ещё и термодатчики желательно предусмотреть )) и чтобы цифры что на дисплейчиках обрабатывать можно было ))) И ето готовый проект инфракрасной станции почти будет или просто паяльной но хорошей станции на AT1628 или TM1628
В общем поменял я местами микросхемы теперь правая работает левая нет и таки определения другие стоят так как светодиоды отдельные не правильно работают и потенциометр не регулирует ничего ))) а дисплеи чётко показывают
Может микросхема битая? Ну, Вы разбирайтесь. С позициями-то нет проблем, также их исследуем.
100% битая я ею на дня заменю
Здраствуйте Евгений В общем я тут немного всё усложнил и подключаю на место атмеги к плате плату ардуино и вот вопрос контакт AREF ссоеденять с таким же на месте атмеги (Atmega8l-8pu) ?
Не знаю. Это зависит от того как и для чего Вы собираетесь ADC использовать.
ну ето продолжение истории с дисплеями только теперь ещё датчики и запуск силовых агрегатов нагревания через 0
Я тут допиливаю бибилотеку по мотивам наших прошлых изысканий. Скоро выложу. Будете проверять. А датчики - это уже другая опера :)
библиотека ето хорошо как только выложите начну проверять
ВОт кое что наваяли
Имикросхему драйвера поставил и энкодер опрашивается но не всё работает
В частности не рулят кнопки на пинах 9 8 7 и не можем разобратся как погасить диоды
А на левой половине (на которой мы отлаживались) всё по-прежнему нормально?
в том то и дело что чтобы энкодер наладить переместил микросхему туда на правую и там отладили
и теперь левая не работают кнопки ) и дисплеи паралельно естественно показывают
Блин, ну Вы так не шутите. У меня тут библиотека готова (только тесты осталось написать). Но это имеет смысл, если аппаратно всё работает. Оно же работало у нас!
Аппаратно всё работает если я пины в коде поменяю и удалю 3 пина что добавил то всё будет работать.
Вы наверно ваш изменённый мною скетч не смотрели, я скинул его
А что там изменено? Пины как раз поменяны?
Там добавлено там теперь паяльник включается и температура ставится , энкодер опрашивается, вот а как подключить одновременно 2 spi я так и не додумался, если прописать вашь готовый скетчь то всё работает как и было
Здраствуйте Евгений прилагаю код понимаю что у меня подключено по i2c 2 устройства отдельно но они не хотят совместно работать помогите распутать сей клубок код прилагаю за ошибки не ругайте
Тебе запятых отсыпать? У меня их есть, могу поделица.
Это был пост ради поста , или запятых в коде не хватает ?
Алексей, я сегодня выложу Вам готовую библиотеку (собственно она с неделю как готова, нет только тестового примера). Давайте её дожмём, чтобы она у Вас уже была, а потом будем смотреть на i2c и что там ещё.
Вся электроника уже в сборе. Я по своему незнанию толком и доработать ничего не могу. И вопросик сегодня ето во сколько ?
Вы во сколько сможете связатся со мной ?
1. Возьмите архив - https://drive.google.com/file/d/1VfI8f4kTwDvBZTEoE0acxKK2WD75-64p/view?usp=sharing
2. В нём находится папка TM1628L
3. распакуйте так, чтобы эта папка оказалась в Вашей папке libraries (в прошлый раз мы туда помещали другую библиотеку).
4. Создайте вот такой скетч
Если всё сделано правильно, он быдет компилироваться без ошибок.
Убедитесь, что наш старый пример работает на текущем железе.
Вы там меняли какие-то коды. Найдите их в файле TM1628Symbols.h и также поменяйте.
Убедитесь, что скорость сериала в строке 21 такая же как у Вас в мониторе порта. Включите Ваши тумбелры, чтобы дисплеи были включены. Запустите скетч. Скорее всего он повалится (мне проверять не на чем), но мы его дожмём - это не проблема.
По идее он должен делать два теста.
Тест №1. Занимает 20 секунд. В левом жисплее цифры меняются с 0 до 999, а в правом в то же самое время с 999 до 0. Если этот тест заработал и с ним всё в порядке, закомментируйте строку 23, чтобы впредь он не запускался.
Тест №2. Начинается после теста №1. Раз в 5 секунд в сериал печаются значения, которые Вы видите на дисплее. При этом Вы можете менять значения кнопками, выключать дисплей и т.п. Значения должны печататься текущими. Если Вы нажмёте кнопку изменения значения и будете держать не отпуская, то изменение будет ускоряться. Сейчас там стоят огромные задержки, чтобы видно было, но потом Вы поставите такие, какие Вам нравятся.
===============
В общем, запускайтесь, смотрите, пробуйте, фиксируйте ошибки. Я буду доступен примерно через полчаса-минут сорок.
1й тест в правом дисплее отлично в левом в последнем сегменте цифры только в остальных 2х сегментах бардак
Скетч
Файл библиотеки TM1628L.cpp
Здравствуйте ЕвгенийП И вот какая интересная штука выявилась Если с етим кодом включен монитор порта то значения держатся а если монитор выключить то они примерно через 10-15 секунд обнуляются )) Проверил delay нету нигде а где были закоментировал не помогло
С каким "етим кодом"? Моим? Или Вы добавили чего? И что значит обнуляются? Прямо на экране?
без каких либо дополнений, да прям на экране
Ну, значит, она у Вас перегружается. Скорее всего из-за питания или чего-нмбудь подобного. Может, конечно, и программно чего, но вряд ли - там нет работы с памятью.
Для начала убедитесь, что она именно перегружается. Сможете?
Как именно можно убедится если включить монитор порта то он не перегружается
И вот ещё что выявилось если выкллючить выключатели на передней панели дисплеи загораются со значением 0
Кнопки не работают естественно
Значит, давайте по-порядку.
1. Когда Вы питаете от USB оно работает, а когда питаете от "родного" питания в устройстве, оно иногда обнуляется. Значит, 90% проходит скачок по питанию (например, при включении нагрузки) и ардуина перегружается. Проверить это очень просто. Присоедините к ардуине какой-нибудь buzzer и вставьте в setup полусекундный писк. При запуске она пискнет. А потом, если при обнулении пискнет снова - значит действительно произошла перезагрузка. Проверьте.
2. Мы же с Вами выключали и всё было нормально? Или сейчас у Вас там нагрузка есть? Если так, то вполне может быть опять же "перезагрузка". Когда будете проверять п.1. Пощёлкайте и выключателем - если будет пищать, значит перезагрузка.
Если происходит перезагрузка, то почти наверняка дело в питании. Если бы дело было в программе - она бы всегда обнулялалсь, хоть с USB, хоть без. Ну, совсем чтобы убедиться, запитайте ардуину не от USB, а от совсем постороннего БП (только земли соедините) и убедитесь.
Если подтвердится, что проблема в питании, это уже Ваша епархия - Вы же электронщик, а не я. Ставьте там конденсаторы, дроссели или чего там ещё положено, в общем обеспечьте стабильное питание.