На склад поступили жидко-кристаллические индикаторы и дисплеи от KSE

Обмен МК с ПК по программному USART attiny 26

Страница 1 из 4
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
28.08.2019 23:14 #1
Короче надоели все ампервольтметры, всех видов , На ЛСД, на семисегментной индикации, термометры, таймеры, тупая логика ! Решил изучить передачу данных между МК и ПК, ну или все варианты между всеми вариантами . И решил начать с программного UART для Attiny 26, между оной и гипертерминалом . В общем есть USB-UART две штуки , одна на ftdi232 и есть какая то дешёвая версия YP-01.... Запилил прогу по алгоритму на с++ по ссылке в следующем посте . Она стабильно выдаёт какие то коды, которые не соответствуют пересылаемым с ПК.
Оценка
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
28.08.2019 23:17 #2
Ссылка https://radiohlam.ru/pic_pr_usart_prost/
Оценка
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
28.08.2019 23:18 #3
там правда на ассемблере .
Но вот на с++ такой код (это тестовая прога не судите строго)
Код:
/*******************************************************
прога написана в code vision AVR
фьюзы биты внутренний генератор на 4 Мгц
B6-'это вывод-9 МК который INT0
Chip type               : ATtiny26
AVR Core Clock frequency: 4,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 32
*******************************************************/

#include <tiny26.h>
#include <alcd.h>
#include <delay.h>
 unsigned char i,j, time,cod;

interrupt [EXT_INT0] void ext_int0_isr(void)
{
 i=1;  //флаг внешнего прерывания (старт приёма байта)
}

/*interrupt [TIM0_OVF] void timer0_ovf_isr(void)  // прерывание по таймеру пока не используем
{

}
*/
void print (void)    // вывод принятого кода и символа через тире на LCD
{    
     lcd_clear();     
       lcd_putsf("-");
        lcd_putchar((cod/100)+48);         //старший разряд   
         lcd_putchar((cod%100)/10+48);  //средний  
          lcd_putchar((cod%10)+48);        //младший 
           lcd_putsf("-");    
            lcd_putchar (cod);
             delay_ms(100);  //задержка для пропуска стопового бита

}

void main(void)
{

// Port A initialization   // тут стандартная настройка портов
// Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=P Bit5=T Bit4=T Bit3=T Bit2=P Bit1=P Bit0=P 
PORTB=(0<<PORTB7) | (1<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 4000,000 kHz
TCCR0=(0<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0x00;                                 // отключил его за ненадобностью после визарда


// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: при переходе в ноль
// Interrupt on any change on pins PA3, PA6, PA7 and PB4-7: Off
// Interrupt on any change on pins PB0-3: Off
GIMSK=(1<<INT0) | (0<<PCIE1) | (0<<PCIE0);
MCUCR=(0<<ISC01) | (0<<ISC00);
GIFR=(1<<INTF0) | (0<<PCIF);



// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 4
// RD - PORTB Bit 7
// EN - PORTA Bit 5
// D4 - PORTA Bit 0
// D5 - PORTA Bit 1
// D6 - PORTA Bit 2
// D7 - PORTA Bit 3
// Characters/line: 16
lcd_init(16);
 #asm("sei")

while (1)
  {
      
      if(i==1)  // стартовый бит от ПК был то:
      {
           GIMSK=(0<<INT0);  // запретить внешнее прерывание на время приёма
             i=0;            // сбросить флаг
              delay_us(220+55); //задержка длинна бита + 1/4
               for( j=0;j<8;j++) // 8 бит-8 раз
            {
             if  (PINB.6==0) cod|= (1 << 7); //считываем состояние приёмного порта устанавливаем 7й бит
                                             //приёмной переменной если на порте 0 то бит в единицу
              cod=cod>>1;       //сдвигаем содержимое приёмной переменной в право
               delay_us(220);   //пауза равная длинне приёмного бита (4800 бод 1000000/4800=208,33) ставим слегка больше
            }
                print ();     //вывод на ЛСД кода и символа
      
      }
              GIMSK=(1<<INT0); // разрешение на внешнее прерывание для приёма след. байта
               cod=0;          // обнуление раннее принятого значения
   }
}
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
28.08.2019 23:34 #4
Оба USB-UART выдают одно и то же , в двух разных гипертерминалах . Вопрос . Почему не то , что надо ?
Оценка
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,619
Репутация: 1069
1,215 82
480 0
 
28.08.2019 23:41 #5
Так может, скорости не совпадают ???
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
28.08.2019 23:43 #6
Цитата:
Сообщение от kovigor
Так может, скорости не совпадают ???
Дак совпадают ! И в терминалах, и в физических настройках портов 4800
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
28.08.2019 23:55 #7
Там чувак под ассемблер запилил алгоритм, может с с++ не канает, типа тайминги какие нить не канают .
Оценка
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,619
Репутация: 1069
1,215 82
480 0
 
28.08.2019 23:55 #8
Тогда ищите, что в формате посылки не так (старт-бит, стоп-бит). И биты данных - старшими разрядами вперед или младшими ?
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
29.08.2019 00:01 #9
Цитата:
Сообщение от kovigor
Тогда ищите, что в формате посылки не так (старт-бит, стоп-бит). И биты данных - старшими разрядами вперед или младшими ?
Там вроде как по его алгоритму то всё должно быть правильно , я про старты , стопы и направления ...Вот есть небольшое недопонимание под каой приём данных он имел ввиду ... у него какая то прога которая у меня не заработала на компе как надо . Может какой то свой теминал .... вот я то и спросил .
Оценка
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,619
Репутация: 1069
1,215 82
480 0
 
29.08.2019 00:03 #10
Так вот это и плохо, что вы пользуетесь неизвестным терминалом. Вообще не используйте терминал автора, используйте стандартный ГиперТерминал или TeraTerm. В конце концов, даже в CodeVision есть свой терминал ...
Оценка
Ответ
Страница 1 из 4
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Оценка этой теме
Оценка этой теме:
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 02:50.
Обратная связь РадиоЛоцман Вверх