Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
3 / 3 / 0
Регистрация: 09.05.2020
Сообщений: 5
1

Передача данных и команд с ПК на ATmega128, по интерфейсу RS-232

09.05.2020, 17:37. Просмотров 1456. Ответов 20
Метки нет (Все метки)

Здравствуйте, уважаемые программисты и конструкторы, мне нужно сделать так, чтобы температура с DS18B20 отобразилась на ПК при запросе с него(можно с клавиатуры просто 1 иди t набрать)(или стандарт Modbus). Совсем не смогла понять как будет код выглядеть и нужно ли ещё как то Usart подключать(в коде). C подключением вроде разобралась(прикрепила скрин из протеуса). Что нужно добавить в коде?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// ОСновная Функция main.c
#include "SchemeSpec.h"
 
void port_ini(void)
{
    DDRD=0xff;
    PORTD=0x00;
    DDRE=(1<<0)|(1<<1);
    PORTE=(0<<0)|(0<<1);
}
int main(void)
{
    unsigned int tt=0; //переменная для хранения температуры
    
    port_ini();
    LCD_ini();
    
    while(1)
    {
        wirecheck();
        tt = MKconvert(DSconvert()); //измеряем температуру
        position(0,1);
        str_lcd("T=");
        if (tt<=0x80) // t>0
        {
            if(tt>=0x64)
            {
                LCDsendchar(0x31);
                LCDsendchar((tt)/10+0x30-0xa);
                LCDsendchar((tt)%10+0x30);
            }
            else
            {
                LCDsendchar((tt)/10+0x30);
                LCDsendchar((tt)%10+0x30);
            }
        }
        else
        {
            str_lcd("-");// t<0
            LCDsendchar((~tt+1)/10-0x50);
            LCDsendchar((~tt+1)%10+0x30);
        }
        str_lcd("*");
        str_lcd("C");
        LCDsendchar(0x0);
    }
}
C
1
2
3
4
5
6
7
8
9
10
11
12
//Подключение библиотек и Спецификация устройства
#ifndef SchemeSpec_H_
#define SchemeSpec_H_
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include "LCDspec.h"
#include "DSspec.h"
#endif
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//Отладка Термометра 
#include "DSspec.h"
 
char wirecheck(void)
{
    char stack=SREG;
    cli();
    char dt;
    DDRD |= (1<<1); //держим шину
    _delay_us(485);
    DDRD &= ~(1<<1); //отпускаем шину
    _delay_us(65);
    if ((PIND & (1<<1))==0)//проверяем подключено ли устройстово
    {
        dt=1;//устройство найдено
        position(0,0);
        str_lcd("Hello, Nice day");
    }
    else
    {
        dt=0;//устройства не найдено
        position(0,0);
        str_lcd("NO CONNECTION");
    }
    SREG=stack;
    _delay_us(480);
    return dt; //вернем результат
}
 
void DSsendbit(char bit)
{
    char stack=SREG;
    cli(); //запрещаем прерывание
    DDRD |= (1<<1); //держим шину
    _delay_us(2); //задержка (2мкс)
    if(bit)
    {
        DDRD &= ~(1<<1); //отпускаем шину
    }
    _delay_us(65); //задержка (60мкс)
    DDRD &= ~(1<<1); //отпускаем шину
    SREG=stack;
}
 
void DSsendbyte(unsigned char byte)
{
    char i;
    for(i=0;i<8;i++) //посылаем отдельно каждый бит на устройство
    {
        if((byte & (1<<i)) == 1<<i)
        {
            DSsendbit(1); //посылаем 1
        }
        else DSsendbit(0); //посылаем 0
    }
}
 
char DSreadbit(void)
{
    char stack=SREG;
    cli(); //запрещаем прерывание
    char bit; //хранения бита
    DDRD |= (1<<1); //притягиваем шину
    _delay_us(2); // задержка (2 мкс)
    DDRD &= ~(1<<1); //отпускаем шину
    _delay_us(13); // 15 мкс должно получиться суммарно, т.к. 2 мкс мы уже выждали
    bit = (PIND & (1<<1))>>1;
    _delay_us(45);
    SREG=stack;
    return bit; //вернем результат
}
 
unsigned char DSreadbyte(void)
{
    char c=0;
    char i;
    for(i=0;i<8;i++)
    {
        c|=DSreadbit()<<i; //читаем бит
    }
    return c;
}
 
int DSconvert(void)
{
    unsigned char byte;//для считывания байта
    unsigned int tt=0;
    if(wirecheck()==1)
    {
        DSsendbyte(SKIP_ROM); //пропуcкаем RОМ код
        DSsendbyte(T_CONVERT); //измеряем температуру
        _delay_ms(750); //в 12-битном режиме преобразования - 750 мс
        wirecheck();
        DSsendbyte(SKIP_ROM); //пропускаем ROM код
        DSsendbyte(READ_DATA); //даем команду на чтение данных с устройства
        byte = DSreadbyte(); //читаем младший бит LS
        tt = DSreadbyte(); //читаем старший бит MS
        tt = (tt<<8)|byte; //сдвигаем старший влево, младший пишем на его место,и получаем общий результат
    }
    return tt;
}
//преобразование температуры в десятичную систему счисления
char MKconvert(unsigned int tt)
{
    char t = tt>>4;//сдвиг и отсечение части старшего байта
    return t;
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
//Связь термометра с МК
#ifndef DSSPEC_H_
#define DSSPEC_H_
 
#include "SchemeSpec.h"
 
#define SKIP_ROM 0xCC //пропустить ROM код
#define T_CONVERT  0x44 //измерить температуру
#define READ_DATA 0xBE //передать байты ведущему
 
int DSconvert(void); //функция преобразования показаний датчика в температуру
char MKconvert(unsigned int tt); //преобразование температуры в единицы
#endif
2
Миниатюры
Передача данных и команд с ПК на ATmega128, по интерфейсу RS-232  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2020, 17:37
Ответы с готовыми решениями:

Некорректный прием данных по UART интерфейсу на ATMega128
Контроллер: ATMega 128 Пишу в Visual Studio 2005 Создаю диалоговое MFC приложение Суть...

Передача команд SCPI по RS-232
Привет всем есть такая задачка нужно написать программу на (MFC)c++ для управления измерительными...

Как определить протокол обмена по интерфейсу RS-232?
Здравствуйте! Есть определенное устройство с блоком управления. К блоку управления через нуль...

Передача данных с PIC16 по RS-232
Добрый день! Требуется передать результат вычислений по RS-232C (о приеме ничего не сказано),...

20
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
11.05.2020, 00:29 2
Если кроме отображения температуры на ПК, ничего не нужно, то без контроллера можно обойтись. DS18B20 прямо на UART вешается через развязывающий диод.
1
3 / 3 / 0
Регистрация: 09.05.2020
Сообщений: 5
11.05.2020, 14:53  [ТС] 3
Нужно как раз, чтобы по команде с ПК, а не просто на нём выдавалось. И проблема сама больше в том, что не понятно как этот UART в коде должен выглядеть.
0
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
11.05.2020, 23:09 4
А без контроллера и будет как определенные команды через COM порт, и надо анализировать ответ чтоб вычислить температуру.

UART надо сначала проинициализировать. Это 3 регистра UCSR0A,UCSR0B,UCSR0C, потом скорость - UBRR0H и UBRR0L. А дальше слать команды через UDR0.

Добавлено через 14 минут
И еще для приема надо флаг RXC в регистре А анализировать.
Это если без прерываний работать.

Пример инициализации - кварц 16, скорость 9600:
C
1
2
3
4
5
6
  
  UCSR1A=0;
  UCSR1B=0x18;
  UCSR1C=0x06;
  UBRR1H=0;
  UBRR1L=103;
1
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
12.05.2020, 22:33 5
Цитата Сообщение от paskal Посмотреть сообщение
Если кроме отображения температуры на ПК, ничего не нужно, то без контроллера можно обойтись. DS18B20 прямо на UART вешается через развязывающий диод.
Тихий ужасъ. Или я сошёл с ума, отстал от жизни. Поясните, пожалуйста, свою мысль более выразительно.
Цитата Сообщение от paskal Посмотреть сообщение
И еще для приема надо флаг RXC в регистре А анализировать.
Регистры в AVR мнемонически обозначают как R0..R31, пары как X, Y, Z. Всё остальное - порты ввода-вывода. Порт А в ATmega128 - цифровой. Контакты RXD0/TXD0 относятся к порту E, RXD1/TXD1 к порту D. С терминологией у Вас беда.
Цитата Сообщение от paskal Посмотреть сообщение
Пример инициализации - кварц 16, скорость 9600:
16 чего? Это безразмерная величина или всё-таки МГц? Скорость первая космическая 9600 м/с или всё-таки бит/с? Беда у Вас с терминологией, БЕДА.
И вишенка на торте, когда пишут "магические константы" без понимания процесса:
Цитата Сообщение от paskal Посмотреть сообщение
C
1
2
3
4
5
UCSR1A=0;
UCSR1B=0x18;
UCSR1C=0x06;
UBRR1H=0;
UBRR1L=103;
На кой ляд они нужны здесь, для МК с другой скоростью тактирования (значение F_CPU указано 1000000UL, т.е. 1 МГц)? Какие биты устанавливаете, на что они влияют, Вы можете сказать навскидку? Не учите плохому неокрепшие умы. Опытные разработчики указывают мнемонические обозначения полей, а константы в формулах вычисляются на этапе макроподстановок.

Цитата Сообщение от Vika141995 Посмотреть сообщение
И проблема сама больше в том, что не понятно как этот UART в коде должен выглядеть.
Библиотека UART для AVR, в том числе для ATmega128. Поиск Гугл по словам "atmega128 uart github" рулит.
0
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
13.05.2020, 20:39 6
sharpey, Вам охота засорять дискуссию глупыми вопросами? Вы видели кварцы на 16 кГц? Или может на 16 ГГц видели? Если нет, то зачем вы пишете глупости? Регистр А это подразумевался UCSR0A, если что.
А ваш бред про регистры даже комментировать нечего. Просто откройте даташит, и увидите что UCSR0A и прочие регистрами называются.
Цитата Сообщение от sharpey Посмотреть сообщение
Тихий ужасъ. Или я сошёл с ума, отстал от жизни. Поясните, пожалуйста, свою мысль более выразительно.
Да что то с вами правда не в порядке. Стыковка DS18B20 с компом широко известная вещь. Информации в инете полно. Такое например{del} . Даже апнот от Максима был где всё расписано, включая теорию.
Вы тут начинающую девушку в гугль отправляли, а чего сами то искать не умеете?
1
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,135
Записей в блоге: 6
13.05.2020, 23:54 7
Цитата Сообщение от sharpey Посмотреть сообщение
Поясните, пожалуйста, свою мысль более выразительно.
Небольшая статья по теме.
1
3 / 3 / 0
Регистрация: 09.05.2020
Сообщений: 5
14.05.2020, 00:12  [ТС] 8
В принципе со всем разобралась, кроме того как с пк отправлять что то(с клавиатуры именно)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
void init_USART() 
{
    UBRR0L = UBRRL_value;       //Младшие 8 бит
    UBRR0H = UBRRL_value >> 8;  //Старшие 8 бит
    UCSR0B |=(1<<TXEN);         //Бит разрешения передачи
    UCSR0C |=(1<< UCSZ0)|(1<< UCSZ1); //Устанавливем формат 8 бит данных
}
 
void send_UART(char value) 
{
    while(!( UCSR0A & (1 << UDRE)));   // Ожидаем когда очистится буфер передачи
    UDR0 = value; // Помещаем данные в буфер, начинаем передачу
}
 
void port_ini(void)
{
    DDRD=0xff;
    PORTD=0x00;
    DDRE=(1<<0)|(1<<1);
    PORTE=(0<<0)|(0<<1);
}
 
int main(void)
{
    unsigned int tt=0; //переменная для хранения температуры
    unsigned int tt1=0;
    port_ini();
    LCD_ini();
    while(1)
    {
        wirecheck();
        tt = MKconvert(DSconvert());//измеряем температуру
        position(0,1);
        str_lcd("T=");
        if (tt<=0x80) // для t>0
        {
            if(tt>=0x64)
            {
                LCDsendchar(0x31);
                LCDsendchar((tt)/10+0x30-0xa);
                LCDsendchar((tt)%10+0x30);
            }
            else
            {
                LCDsendchar((tt)/10+0x30);
                LCDsendchar((tt)%10+0x30);
            }
        }
        else
        {
            str_lcd("-");// для t<0
            LCDsendchar((~tt+1)/10-0x50);
            LCDsendchar((~tt+1)%10+0x30);
        }
        str_lcd("*");
        str_lcd("C");
        LCDsendchar(0x0);
        if(tt1 != tt)
        {
        init_USART();//инициализация USART в режиме 9600/8-N-1
            send_UART(0x54); //вывод посимвольно на экран пк
            send_UART(0x45); 
            send_UART(0x4d); 
            send_UART(0x50);
            send_UART(0x45); 
            send_UART(0x52); 
            send_UART(0x41);
            send_UART(0x54); 
            send_UART(0x55); 
            send_UART(0x52); 
            send_UART(0x45);
            send_UART(0x3d);
                    if (tt<=0x80) // для t>0
                    {
                        if(tt>=0x64)
                        {
                            send_UART(0x31);
                            send_UART((tt)/10+0x30-0xa);
                            send_UART((tt)%10+0x30);
                        }
                        else
                        {
                            send_UART((tt)/10+0x30);
                            send_UART((tt)%10+0x30);
                        }
                    }
                    else
                    {
                        send_UART(0x2d);// для t<0
                        send_UART((~tt+1)/10-0x50);
                        send_UART((~tt+1)%10+0x30);
                    }
            send_UART(0x2a);
            send_UART(0x43);
            send_UART(0x0d);// переход на новую строку
        }
        tt1 = tt;// обновление переменной
    }
}
1
Миниатюры
Передача данных и команд с ПК на ATmega128, по интерфейсу RS-232  
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
14.05.2020, 00:58 9
C
1
2
3
4
5
6
7
8
9
10
11
12
            send_UART(0x54); //вывод посимвольно на экран пк
            send_UART(0x45); 
            send_UART(0x4d); 
            send_UART(0x50);
            send_UART(0x45); 
            send_UART(0x52); 
            send_UART(0x41);
            send_UART(0x54); 
            send_UART(0x55); 
            send_UART(0x52); 
            send_UART(0x45);
            send_UART(0x3d);
Этот момент совсем не красивый. А если строку поменять надо?
Так лучше:
C
1
2
sprintf(s,"TEMPERATURE=%i",tt);
while(*s)send_UART(*s++);
Или тупой вариант без sprintf объявить s="TEMPERATURE="; если stdio подключать не хочется.
0
3 / 3 / 0
Регистрация: 09.05.2020
Сообщений: 5
14.05.2020, 01:16  [ТС] 10
Цитата Сообщение от paskal Посмотреть сообщение
Или тупой вариант без sprintf объявить s="TEMPERATURE="; если stdio подключать не хочется
Я так сначала сделала и передавались просто кривые символы.
0
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
14.05.2020, 04:46 11
Цитата Сообщение от paskal Посмотреть сообщение
sharpey, Вам охота засорять дискуссию глупыми вопросами?
Разве не глупость написанное Вами:
Цитата Сообщение от paskal Посмотреть сообщение
Если кроме отображения температуры на ПК, ничего не нужно, то без контроллера можно обойтись. DS18B20 прямо на UART вешается через развязывающий диод.
На какой UART без МК, в который он встроен? Без МК никакого UART нет. Или под UART Вы опять подразумевали микросхему-переходник USB-UART-TTL типа PL2303, CH340, MAX232 и т.п.? А автор темы в курсе про них?
Цитата Сообщение от paskal Посмотреть сообщение
Вы видели кварцы на 16 кГц? Или может на 16 ГГц видели? Если нет, то зачем вы пишете глупости?
Я много чего встречал и видел в этой жизни. Из написанного Вами мной сделан вывод, что расчёт выполнен на частоту 16 Гц. Вы подразумевали это, ибо никаких других иных величин частоты Вами не было приведено. По умолчанию частоту указывают в Герцах. И в даташите на МК расчёт константы выполнен так же.
Цитата Сообщение от paskal Посмотреть сообщение
Регистр А это подразумевался UCSR0A, если что.
Попробуйте это подразумевание сказать компилятору для однозначного выполнения. Без указания точного имени (UCSR0A) ничего не получится. И в ATmega128 два УСАПП. Автор темы может подразумевала использование второго УСАПП, а?
Цитата Сообщение от paskal Посмотреть сообщение
А ваш бред про регистры даже комментировать нечего. Просто откройте даташит, и увидите что UCSR0A и прочие регистрами называются.
Тут "Акелла промахнулся", признаю. Регистрами ввода-вывода (РВВ) они называются.
0
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
14.05.2020, 21:57 12
Цитата Сообщение от Vika141995 Посмотреть сообщение
Я так сначала сделала и передавались просто кривые символы.
Тем не менее это рабочий вариант. Я так уже делал. Работало и в протеусе, и на реальном железе. Ищите где ошибка. Может с указателями что то неправильно делали, или формат строки. А кидать ascii коды по одному это полная чушь.

Добавлено через 17 минут
Цитата Сообщение от sharpey Посмотреть сообщение
На какой UART без МК, в который он встроен? Без МК никакого UART нет. Или под UART Вы опять подразумевали микросхему-переходник USB-UART-TTL типа PL2303, CH340, MAX232 и т.п.? А автор темы в курсе про них?
Хватит тупить уже! Вика показывала свою схему. Там MAX232 стоит, и с левой стороны макса тот самый UART которого вы в упор не видите.
Цитата Сообщение от sharpey Посмотреть сообщение
Автор темы может подразумевала использование второго УСАПП, а?
Смотрите еще раз схему. Автор UART0 использует.
1
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
15.05.2020, 11:23 13
paskal, слушайте сюда, умник. Откройте даташит на чип от уважаемого производителя Texas Instruments и на странице 3 увидите следующее:
R2OUT, R1OUT 9, 12 O Logic data output (to UART)
T2IN, T1IN 10, 11 I Logic data input (from UART)
Сиречь для истинно тупых поясняю: выходы из микросхемы MAX232 (контакты 9, 12) идёт к UART, входы чипа-преобразователя логических уровней (контакты 10, 11) принимают сигналы от UART. UART находится в микроконтроллере.
1
3 / 3 / 0
Регистрация: 09.05.2020
Сообщений: 5
15.05.2020, 12:48  [ТС] 14
Это конечно всё здорово, но мне нужно чтобы вы не мой код делали более красивым и правильным, а сказали что нужно дописать к тому что есть. Чтобы на компьютере по команде с клавиатуры выдавалась значение температуры. Можно использовать и ModbusRTU.
0
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
16.05.2020, 14:07 15
Цитата Сообщение от Vika141995 Посмотреть сообщение
Это конечно всё здорово, но мне нужно чтобы вы не мой код делали более красивым и правильным, а сказали что нужно дописать к тому что есть. Чтобы на компьютере по команде с клавиатуры выдавалась значение температуры. Можно использовать и ModbusRTU
Я вам предлагал варианты, вы отказывались. А знаете в чем проблема? Как у нас говорят "без понятного тз результат всегда хз". Мы же ничего не знаем о вашей задаче. Это хоть учебное задание, или вы реальное устройство делаете?

А вы знаете что DS18B20 не работает так как вы хотите? Вы хотите выдать команду и получить температуру. А надо запустить преобразователь, сделать паузу, потом можно слать команду на выдачу температуры. Если послать как вы хотите, то он выдаст температуру, но неправильную. Для учебного варианта сойдет, для других - нет. Вот почему надо бы побольше знать о вашем задании.

Сейчас в первую очередь вам надо определится с протоколом. Здесь непонятно - зачем вам Modbus? Modbus сложный протокол для работы в сети устройств с разными адресами. Но у вас нет сети. Просто ПК соединен с термометром. Кстати у DS18B20 тоже свои команды имеются. Например 44h - запустить преобразователь температуры. Может вам их и использовать?

Добавлено через 22 минуты
Цитата Сообщение от sharpey Посмотреть сообщение
paskal, слушайте сюда, умник
И что за разборки вы здесь устраиваете? Вам заняться нечем? От безделья маетесь?
Цитата Сообщение от sharpey Посмотреть сообщение
Сиречь для истинно тупых поясняю: выходы из микросхемы MAX232 (контакты 9, 12) идёт к UART, входы чипа-преобразователя логических уровней (контакты 10, 11) принимают сигналы от UART
А теперь перестаньте скандалить, напрягите голову и сообразите, что те выводы которые идут к/от UART и есть совместимые с UART. И следовательно их также можно подключить к датчику. В полном соответствии как это написано по ссылке у locm.
0
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
16.05.2020, 18:28 16
Цитата Сообщение от paskal Посмотреть сообщение
И что за разборки вы здесь устраиваете? Вам заняться нечем? От безделья маетесь?
Забавляют пёрлы типа
Цитата Сообщение от paskal Посмотреть сообщение
без контроллера можно обойтись. DS18B20 прямо на UART вешается через развязывающий диод.
До сих пор принципиально понять и принять не можете, что аппаратный/программный UART может быть только в МК или ПК, а не в самой "железяке" - преобразователе логических ровней? Упирайтесь дальше.
В примере с датчиком DS18B20 ошибочно на картинке написано "UART RS-232 на 2102". Даташит от TI в этом однозначен.
Про поддельные датчики полезная тема.
0
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
17.05.2020, 19:12 17
Цитата Сообщение от sharpey Посмотреть сообщение
До сих пор принципиально понять и принять не можете, что аппаратный/программный UART может быть только в МК или ПК, а не в самой "железяке" - преобразователе логических ровней? Упирайтесь дальше.
Смешны ваши измышления, поскольку у меня на работе термометр лежит как раз на таком преобразователе. Я его сам спаял, и программу на ПК писал. Также для МК я эти датчики применял тоже. И программы я разрабатывал, а не искал готовые в инете. Поэтому с пониманием принципов работы у меня все в порядке.
А у вас с DS18B20 какие наработки есть, или только теоретизируете?
0
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
20.05.2020, 20:34 18
Давненько не встречал таких упоротыхпёртых, как paskal. Ему про Фому говоришь, а он всё про Ерёму.
Я рад за Вас, такого умникаого красивого. За то, что находите время изобретать повторно велосипед, доступный и готовый в виде библиотечного кода. Продолжайте, ведь Вы - суперспециалист в магии программирования и непризнанный экспертъ русского языка. Даже местоимения правильно написать не можете.

Vika141995, что значит?
Цитата Сообщение от Vika141995 Посмотреть сообщение
передавались просто кривые символы
Настройки USART МК (скорость передачи, длина символа, проверка на чётность, длина стоп-бита) совпадают с настройками терминальной программы, например такой?
Цитата Сообщение от Vika141995 Посмотреть сообщение
В принципе со всем разобралась, кроме того как с пк отправлять что то(с клавиатуры именно)
Во вложении допиленная применительно к ATmega328P библиотека UART от Stefan Sicklinger. Для ATmega128A возможно придётся править. Используйте функцию приема строки из терминальной программы в буфер МК uartReadString для последующего анализа. По умолчанию буфер приёма RX_BUFF всего 10 байт.
0
Вложения
Тип файла: zip uart.zip (1.9 Кб, 1 просмотров)
1779 / 1109 / 109
Регистрация: 04.01.2010
Сообщений: 3,888
21.05.2020, 11:02 19
Цитата Сообщение от paskal Посмотреть сообщение
Как у нас говорят "без понятного тз результат всегда хз".
Так себе "постулат". Наверное, вы не слышали про разработку по методологии Agile
sharpey, чего вы взъелись? Вы придираетесь к словам, насчет "диодной развязки UART'а и подключения к ПК напрямую?" Ну, не стоит, имхо, так придираться. Сейчас многие UART-USB шлюзы могут довольно много. Может, не в случае с CP2102, но допустим, FT232 (и ее современные производные) может ой как много. Ну, и о главном. Мне кажется, на сегодня понимание "ПК" немного потеряло свою суть. Что вы называете "ПК"? Десктоп? Ноутбук? Серверную стойку? NAS? или может определения "экран + клавиатура + мышь" уже достаточно? Тогда под это определение подпадает и планшет, смартфон, Andro-TV и приставки. Но самое главное, тогда в эту категорию можно причислить Raspberry Pi, и даже некоторые кортексы M4/M7. А у последних UART является их стандартной комплектацией, в которую можно воткнуть DS18B20 "напрямую, с диодной развязкой".

PS: не хочу никого обидеть, просто увидел, что вы (sharpey, paskal) перешли на личности совершенно понапрасну
0
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
22.05.2020, 20:13 20
Цитата Сообщение от Voland_ Посмотреть сообщение
не хочу никого обидеть, просто увидел, что вы (sharpey, paskal) перешли на личности совершенно понапрасну
И где вы увидели что я на личности переходил? Это sharpey отпускал в мой адрес словечки "слушайте сюда, умник", "упертый", "тупой". Я себе такого не позволял, даже утихомирить его пытался.
Цитата Сообщение от paskal Посмотреть сообщение
И что за разборки вы здесь устраиваете? Вам заняться нечем? От безделья маетесь?
И если вы не заметили, я нормально с ТС общался, это sharpey влез и с первого поста вызывающий тон включил.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2020, 20:13

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

RS-232. Передача и прием данных
Подскажите пожалуйста. не опытному программисту в чем может быть проблема с этим кодом: вставляю в...

Передача данных с ATMega128 (советы начинающему)
Доброго времени суток. Есть микроконтроллер Atmega128. Есть задача написать программу его работы по...

Передача входных данных для CMD команд
Добрый день ! Столкнулся с такой бедой в консольном приложении : многие команды cmd дополнительные...

Передача 4-х байтного значения по RS-232
Доброго времени суток товарищи программеры. Вопрос по работе с rs232. Работаю в AVR Studio4. ...

C#. Передача массива СОМ интерфейсу принимающему ссылку
C#. Передача массива СОМ объекту принимающему ссылку. проблема вот в чем -- есть СОМ интерфейс...

Чтение данных с RS-232
Добрый день . Пишу программу для тестирования устройств подключенных через rs-232 . В ходе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.