Pavel_1978 писал(а):тогда сразу будет видно например что скорость разная
Осциллограф прекрасно покажет, какая скорость передачи данных имеет место быть
Pavel_1978 писал(а):на аналоговом (тот что с зеленым лучом) даже отследить передачу единичного символа, если он не посылается постоянно в цикле, нетривиальная задача...
Во-первых, осциллографом надо уметь пользоваться, во-вторых, когда тестируют обмен на предмет глюков отправки данных и уточнения скорости обмена именно так и делают - зацикливают передачу пакета
urry писал(а):Проблема в том, что вы не должны посылать в UDR данные до тех пор, пока не выйдет предыдущая инфа.
А ведь верно, это я упустил. Я-то сам очень давно уже делаю все отправки данных только в прерываниях - сформировал пакет, отправил первый байт из него, а отправка всех последующих идет в обработчике прерывания по завершению передачи байта. Поэтому оно само получается, что байт в UDR заносится только после отправки предыдущего, и я просто не думаю о проверке на "очищенность" UDR.
Может кто нибудь написать программу, для этой схемы, чтобы по USART отправлялись символы, от A до N, при нажатии соответствующих кнопок, ну хотя бы для первых двух, постараюсь сам дальше разобраться, а то что то я явно не правильно написал. Я по крайней мере только учусь писать.
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Надеюсь понятно куда светодиоды цеплять аж целых 6 штук. Странно но по моему с этим может справиться и 6 транзисторов в ключевом режиме ну или логика по дешевле. Еще могу заставить их моргать если надо. может поможет мне кто с USARTом не все же мне моргалки да пищалки делать.
Спойлер#include <mega8.h>
#include <delay.h>
void main(void)
{
PORTB=0b00111111; //ввод
DDRB=0x00; //вывод
PORTC=0x00; //ввод
DDRC= 0b00111111; //вывод
PORTD=0x00; //ввод
DDRD=0x00; //вывод
while (1)
{
if (!PINB.0) { //если PB0 замкнут на землю и равен 0
PORTC.0=1; //то PC0 приравниваем к 1 тем самым зажигаем светодиод
}
if (PINB.0>0) { //если же PB0 больше чем 0
PORTC.0=0; //то PC0 приравниваем к 0 тем самым гасим светодиод
};
if (!PINB.1) { //ДАЛЬШЕ ПИСАТЬ РУССКИЕ БУКВЫ НЕТ СМЫСЛА кто в курсе тот знает о чем речь идет
PORTC.1=1;
}
if (PINB.1>0) {
PORTC.1=0;
};
if (!PINB.2) {
PORTC.2=1;
}
if (PINB.2>0) {
PORTC.2=0;
};
if (!PINB.3) {
PORTC.3=1;
}
if (PINB.3>0) {
PORTC.3=0;
};
if (!PINB.4) {
PORTC.4=1;
}
if (PINB.4>0) {
PORTC.4=0;
};
if (!PINB.5) {
PORTC.5=1;
}
if (PINB.5>0) {
PORTC.5=0;
};
};
};
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Топорная работа. С UARTом такое не прокатит. Сделайте чтобы по одному нажатию зажигался, а по по второму гас. И при этом чтобы если нажать и держать, он не моргал, как бешеный. И чтобы во время нажатий/отпусканий он не срабатывал несколько раз. хотя бы для двух кнопок. А уж потом я вам расскажу, как с UARTом работать.
А ты, как я погляжу, тут старший бла-блабол?
Очень деловой совет - послать в яндекс! Страно, и как это ТС сам не догадался?
Столько постов, и только одно "Я" и самопиар. А по делу абсолютно ничего...
Да, при этом "спасибо" мне, естесственно, за мой самопиар говорили. Не кажется, что личная неприязнь ко мне несколько мешает тебе выполнять свои обязанности модератора? Или ты почувствовал себя здесь всемогущим?
не соответствуют стандарту языка Си и "понимаются" только кодевижном. Привыкайте сразу писать так, чтобы это соответствовало стандарту и "понималось" любым компилятором Си.
Нужно бит установить нулевой бит в регистре PORTC, пишем не
PORTC&=~(1<<номер_бита); Установка бита
PORTC|=(1<<номер бита); Сброс бита
А по USART - если я и дам пример кода, то только на ассемблере.
Но вначале мне бы хотелось увидеть, что Вы пытаетесь разобраться сами. Пока я этого не вижу.
P.S. Коты, ну что вы тут разборки устроили. Добрее надо друг к другу.
Аlex писал(а):
ЗЫ: Столько постов, и только одно "Я" и самопиар. А по делу абсолютно ничего...
Ну раз ты Такой весь аж МОДЕРАТОР, то объясни котенку который полный ноль в МК как сразу обработку клавиатуры написать и сварганить СВОЙ!!! протокол обмена по UART не тыканьем носом в яндекс / гугл, а чтоб он сам смог понять и написать.
Полностью Поддерживаю Ломателя. Грамотно все он объясняет.
если заранее неизвестен разряд, который будет сбрасываться или устанавливаться,то да, долго, проще подставить таблицу.
Если задефайнить разряд, то код оптимизируется в то же SBI.
Ну это ладно.
Относительно наездов - "котенку который полный ноль в МК обучить не можете" - то подсказок было достаточно.
Все они были проигнорированы.
Посылка в гугль обоснована.
Pavel_1978 писал(а):Ну раз ты Такой весь аж МОДЕРАТОР, то объясни котенку который полный ноль в МК как сразу обработку клавиатуры написать и сварганить СВОЙ!!! протокол обмена по UART не тыканьем носом в яндекс / гугл, а чтоб он сам смог понять и написать.
Полностью Поддерживаю Ломателя. Грамотно все он объясняет.
Во первых. На "ты" мы не переходили. Я Вас не знаю и знать не собираюсь. Негоже "тыкать" незнакомому человеку.
Во вторых. Объяснять кому-то что-то я не собираюсь, ибо не обязан этого делать. Тем более, учитывая, что все объяснения находятся в гугле за пару минут. Пересказывать это всё - мартышкин труд.
В третьих. Причём тут модераторство ? Или Вы считаете, что модератор должен всем пользователям задницу лизать с улыбкой на лице ? Ошибаетесь.
Ну и в четвёртых. Если этот пользователь для Вас всё грамотно объясняет, то уровень Ваш понятен. Хотя, по разговору итак всё очевидно. Отсюда, упрёки в мою сторону по техническим вопросам, предлагаю Вам засунуть себе куда-нибудь в глубокое место и не высовывать их оттуда никогда. Ибо это моё дело какие давать подсказки людям - в гугол отправлять или что-то объяснять. Не Вам указывать что мне делать.
ЗЫ: Всё вышесказанное, так-же относится и к "пытателю".
Сорри, был мой косяк ночью.
Но я думаю вы со мной согласитесь, что в общем случае:
= операция присваивания;
|= операция чтение-модификация-запись и ее реализация может зависеть от конкретного компилятора.
ТС, если все еще актуально, могу поделиться библиотекой UART для Atmel Studio. В библиотеке описаны базовые функции отправки/получения данных, причем работа идет не на уровне массива данных, а на уровне addInt, addString, getInt, getString e.t.c., причем используется контрольная сумма CRC16 для проверки пришедших данных.
uk8amk писал(а):Alkul
С точки зрения портируемости на другие платформы и универсальности - да. С точки зрения оптимальности - нет.
Ну, во-первых, Вы ошиблись (но это Вам уже указали).
А во-вторых, я говорил не о портируемости на другие платформы, а о корректном понимании исходника другими компиляторами (генерирующими код для AVR контроллеров).
Что касается именно других платформ, то я лично считаю, что для микроконтроллеров портируемость Си-шных программ - ложь от лукавого. Конечно, те, кто ассемблера не знают и архитектуру МК не изучали, не понимают этого до конца. Ну возьмем, к примеру, ATtiny15, у которого и ОЗУ-то в полном понимании этого слова нет. Есть блок регистров и все. А стек - аппаратный, причем всего лишь трехуровневый. Если программа изначально писалась с использованием частых вызовов подпрограмм в расчете на МК из серии мега, как это увязать для тини15? А если архитектура программы задумывалась в расчете на наличие второго 16-ти разрядного таймера?
Вот и получается, что на самом деле "портируемость" возможна только между схожих МК одной серии, а в этом случае и ассемблер прекрасно портируем. И при этом речь идет еще о контроллерах одного семейства! Что уж говорить о портируемости на другие семейства. Конечно, если речь идет о программке для моргания светодиодом, тогда да, легко портируется. Если же речь о сложной программе, написанной с учетом архитектуры МК, то вряд ли возможна портируемость наподобие: "Изменил в заголовке файл-описатель контроллера, перекомпилировал и - вуаля". Не бывает такого.
Для Масяни. Ну, где Ваша самостоятельная работа по изучению USART? Что уже освоили, что поняли, что еще остается непонятным?
Я вот тут все почитал и думаю, зачем столько слов, не надо на меня наваливать все и сразу, я только начал программировать, помогли бы луче мне освоиться, разобраться где тут и что, и не надо меня в гугл и яндекс носом тыкать, я вродебы не где не нагадил. А пока я просил только пример того что мне надо, но и от реальной помощи в освоении этого пока что не понятного для меня мира программирования я же не программист в конце концов чтобы все и сразу понять не откажусь. У нас же в обучалке сам КОТ не смог нормально написать про программирование, И взял не самый популярный МК я лично такого даже в Улан-Удэ не нашел.
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!