Передача строки по UART
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Передача строки по UART
Да, эхо.
Частота кварца практически не важна, при правильном настроенном делителе UART.
Раз в протеусе работает, то мешается какая-нибудь досадная мелочь. Большинство затыков из-за каких-то тупых мелочей.
Пример может быть таким и я не имею ввиду, что у Вас так. Включился светодиод, просадил питание которое было на грани, и после этого МК не может принять данные корректно.
Частота кварца практически не важна, при правильном настроенном делителе UART.
Раз в протеусе работает, то мешается какая-нибудь досадная мелочь. Большинство затыков из-за каких-то тупых мелочей.
Пример может быть таким и я не имею ввиду, что у Вас так. Включился светодиод, просадил питание которое было на грани, и после этого МК не может принять данные корректно.
Re: Передача строки по UART
В обвязке только уарт и диод. В протеусе у меня тоже все работает.
Re: Передача строки по UART
Z_h_e писал(а):Пример может быть таким и я не имею ввиду, что у Вас так. Включился светодиод, просадил питание которое было на грани, и после этого МК не может принять данные корректно.
Совершенно верно Ватсон
Просто устройство было подключено через хаб.
Сделал эхо для проверки отправленных данных
Спойлер
Код: Выделить всё
#include <avr/io.h>
#define F_CPU 8000000UL //8MHz
#include <util/delay.h>
#include <avr/interrupt.h>
#include <string.h>
#define RX_BUFFER_SIZE 5
uint8_t received;
char rx_data [5];
char string_data[] = "";
volatile uint8_t rx_flag = 0;
volatile uint8_t indexchar = 0;
void UARTInit(void) {
UBRRH = 0;
UBRRL = 51; //baud rate 9600
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8 bit, 1 stop bit
}
void UARTSend(uint8_t data) {
while(!(UCSRA & (1<<UDRE)));
UDR = data;
}
unsigned char UARTGet() {
while(!rx_flag);
rx_flag = 0;
indexchar = 0;
rx_data[4] = '\0';
return 1;
}
void Send_Uart_Str(char *s)
{
while (*s != 0) UARTSend(*s++);
}
int main(void) {
DDRC = 0b00000001;
sei();
UARTInit();
while(1) {
received = UARTGet();
if (strcmp("1ON2", rx_data) == 0)
{
PORTC = 0b00000001;
}
if (strcmp("1OF2", rx_data) == 0)
{
PORTC = 0b00000000;
}
}
}
ISR(USART_RXC_vect) {
rx_data[indexchar] = UDR;
if (rx_data[0] !='1')
{
indexchar = 0;
return;
}
if ((rx_data[0]=='1') && (rx_data[indexchar]=='2'))
{
rx_flag = 1;
Send_Uart_Str(rx_data);
return;
}
if(++indexchar >= RX_BUFFER_SIZE)
{
indexchar = 0;
}
}
Re: Передача строки по UART
Приветствую всех. Есть ещё пару вопросов, думаю тему создавать не нужно.
Вообщем с передачей байтов по уарт я разобрался. Теперь встал вопрос организовать два шим для регулирования нагревателями. То есть с программы на ПК я хочу управлять нагревательными элементами от 0 до 100%, прочитал все что касается шим но так и не понял какие можно использовать? На атмеге 16 их вроде как четыре. Возможно ли задействовать 4 и 18 контакт в качестве шим регулятора и использовать их в предыдущем коде? Или предыдущий код тоже переписывать нужно будет. И ни совсем понятно про прерывания.
Вообщем с передачей байтов по уарт я разобрался. Теперь встал вопрос организовать два шим для регулирования нагревателями. То есть с программы на ПК я хочу управлять нагревательными элементами от 0 до 100%, прочитал все что касается шим но так и не понял какие можно использовать? На атмеге 16 их вроде как четыре. Возможно ли задействовать 4 и 18 контакт в качестве шим регулятора и использовать их в предыдущем коде? Или предыдущий код тоже переписывать нужно будет. И ни совсем понятно про прерывания.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Передача строки по UART
Для нагревателей можно и программный ШИМ создать. Это не световые приборы, где частота играет важную роль. Тут частота может быть любой и от неё не будет ничего зависеть.
Re: Передача строки по UART
Да, частота мне не важна. Программный шим я так понимаю с использованием таймеров? Или как?
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Передача строки по UART
какая мощность нагревателей и какое напряжение необходимо нагревателям?
Есть пару способов управления мощностью нагревателей с помощью симистора:
http://www.microchip.com.ru/Support/dimm.html
Еще можно управлять мощностью нагревателей с помощью полевого транзистора - тут как раз шим, имхо пригодится
Есть пару способов управления мощностью нагревателей с помощью симистора:
http://www.microchip.com.ru/Support/dimm.html
Еще можно управлять мощностью нагревателей с помощью полевого транзистора - тут как раз шим, имхо пригодится
Re: Передача строки по UART
Мощность 3 киловатта, управление хотел делать через симистор и оптопару.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Передача строки по UART
Без разницы с помощью чего. Нужно в программе иметь периодически-повторяемое место с постоянным временем повторения. А таймер это будет, или просто delay - по барабану.LEX38RUS писал(а):Программный шим я так понимаю с использованием таймеров?
Re: Передача строки по UART
Управление нужно такое чтоб поддерживать температуру, вот и думаю что тут шим нужен был. Управлять оптопарой и симистром. Разве можно обойтись программным шимом?
Добавлено after 4 minutes 25 seconds:
Почитал про реализацию программного шим, это не подойдёт. Ведь он по достижению какого либо числа будет сразу подовать единичку на порт, а нужно чтоб скажем от нуля и до 1. Думаю программный шим тут не подойдёт. Или ошибаюсь?
Добавлено after 4 minutes 25 seconds:
Почитал про реализацию программного шим, это не подойдёт. Ведь он по достижению какого либо числа будет сразу подовать единичку на порт, а нужно чтоб скажем от нуля и до 1. Думаю программный шим тут не подойдёт. Или ошибаюсь?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Передача строки по UART
Это как ?LEX38RUS писал(а):а нужно чтоб скажем от нуля и до 1
Почитайте что такое вообще ШИМ. Тогда поймёте, что аппаратный ничем не отличается от программного. Разве что последний не сделаешь высокочастотным, который аппаратными средствами реализуется без проблем.
Re: Передача строки по UART
Ещё раз почитал. Признаю, не прав. Идём курить справку по реализации программного шим. Спасибо. Почитал еще что на простой атмеге даже реализовывают программным методом управление яркостью 760 светодиодов :-D
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Передача строки по UART
Управление нагревателем на переменке, лучше всего реализовывать с помощью пропуска периодов. Это тоже своего рода ШИМ, с шагом скважности в 20 мс.
Для этого необходимо будет задействовать внешнее прерывание - для синхронизации с сетью и детектирования перехода через ноль.
Для этого необходимо будет задействовать внешнее прерывание - для синхронизации с сетью и детектирования перехода через ноль.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Передача строки по UART
Не вижу особого смысла в синхронизации при регулировании с пропуском периодов. А вот тиристор лучше взять с детектором нуля. На мощной нагрузке, при таком методе, будут заметно моргать лампы накаливания, возможно у соседей тоже (от кобеляции будет зависеть
).
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Передача строки по UART
Ну если имеются какие-либо аппаратные средства детектирования нуля, то логично, что программные без надобностиZ_h_e писал(а):Не вижу особого смысла в синхронизации при регулировании с пропуском периодов.
Но, в таком случае, управление придётся удерживать на всё время открытия триака, т.к. моменты перехода нам неизвестны. Не знаю, хорошо это или плохо, но я предпочитаю открывать триак коротким импульсом после перехода через ноль. Отсюда, всегда делаю синхронизацию с сетью.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Передача строки по UART
мне кажется, это уже следует считать устаревшей догмой. данная рекомендация сформировалась во времена всеобщего аналогового телевидения и радиовещания, тем более когда радиовещание было в СВ и ДВ диапазонах и практически всегда с АМ. именно по этой причине все эти теле-радиоприборы были предельно чувствительны к помехам переключения тиристоров.Аlex писал(а):Управление нагревателем на переменке, лучше всего реализовывать с помощью пропуска периодов
сейчас же принципы связи и вещания поменялись, источники питания сейчас импульсные и не реагируют на такие помехи, и в целом только какие-то особо нежные (наверное, медицинские или научные) приборы могут сохранить чувствительность к этим помехам. просто же в быту никто никогда и не заметит этих помех.
а вот метод пропуска полупериодов как раз наоборот, может давать весьма заметные пульсации питающей сети, которые крайне неприятны, а для ламп накаливания еще и вредны. теле-радиоприемникам же будет все равно, если они современные, конечно.
вот-вот. а еще этот метод может вносить низкочастотные составляющие тока сети, близкие к постоянке, что может намагничивать трансформаторы со всеми вытекающими... в моей практике подобное было: сделали несколько терморегуляторов промышленных печей и вдруг стали перегреваться трансформаторы питания блоков... схалявили - не сделали запаса по железу, они и насыщались... сейчас эта проблема скорее виртуальная, но все-таки...Z_h_e писал(а):На мощной нагрузке, при таком методе, будут заметно моргать лампы накаливания
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Передача строки по UART
Как много нюансов. Спасибо, что просветили в этом. 
Re: Передача строки по UART
Подскажите ещё, вот делаю обмен с компом по rs232, а в чем отличие будет если сделать HID? Разница есть какая нибудь по обмену данными?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Передача строки по UART
конечно будет! ни один стандартный терминал не примет и не отправит данные по протоколу HIDLEX38RUS писал(а):а в чем отличие будет если сделать HID? Разница есть какая нибудь по обмену данными?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Передача строки по UART
На счёт этого все понятно. Программа и так будет отдельная. Просто интересно что лучше обмен по rs232 или по hid (как там его правильно) v-usb вроде.
