ATmega128 : USART1

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

Почему оно не работает?
потому что не работает... зарплату заплатите этому УСАРТу у него вообще забастовка...
Исправил на INTERRUPT(SIG_UART_TRANS) и INTERRUPT(SIG_UART_RECV)
да оставьте вы SIGNAL, а вот нули убрали это хорошо... это достойно

Код: Выделить всё

void USART_Init(unsigned int baud) //Инициализация УСАРТ
{
  UCSRC = 0;

  uint16_t baud1;
  baud1 = (F_CPU/16/baud - 1);

  UBRRH = (unsigned char)(baud1>>8);
  UBRRL = (unsigned char)baud1;
  UCSRB = (1<<RXEN)|(1<<RXCIE); //разрешить приём и прерывание
  UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); //8 байт, 2 стоп бита
}
вот ваша функция должна так выглядеть... потом не настраивайте PD0, PD1 МК сам должен это всё настроить...
ах да вот что в протеусе частоту МК постаьте, которая F_CPU

з.ы. потом ещё одно если вы хотите установить бит то пользуйтесь либо _BV(bit); либо (1 << bit); читаемость улучшится в 10 раз...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

заработала??
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

Нет. Если бы заработало уже все бы знали :))
С передатчиком всё в порядке это 100% - просматривал виртуальным осцилографом УСАРТ, посылает всё как положено.
А вот приёмник виснет!
Не понимаю почему, а самое непонятное почему имено на том месте.

Код: Выделить всё

PORTC = UDR;                                  
a = massive[1];
b = massive[2];
LCD_Comm(0x80);
LCD_Data((a/100)%10 + 0x30);
После этой строки зацикливается в прерывании...
Наверно там всё просто но у меня уже голова не варит :cry:
Всё я спать.
Вложения
USART.rar
Исходники WinAVR и HEX
(3.56 КБ) 265 скачиваний
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

хитрый...
Наверно там всё просто но у меня уже голова не варит Всё я спать.
а я бы сейчас тоже спать бы пошёл... так что именно не работает?? ничего не принимается??
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

в общем
1. приятных вам снов...
2. поставьте резисторы по 1к на каждую кнопку с подтяшкой на +5В!!!
а то у вас не понятное состояние кнопок...
3. у вас логика программы вообще жуткая...
если отбросить дисплеи и ацп то подумайте как следует!!! как вы будете передавать данные с одного мк на другой

я вам выкладываю свои труды... в урезанном виде....
Вложения
xxx.rar
вот...
(51.92 КБ) 278 скачиваний
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

я вам выкладываю свои труды... в урезанном виде....

Код: Выделить всё

SIGNAL(SIG_UART_RECV)
{
  if (cur < 3) massive[cur++] = UDR;
  else
  {
    cur = 0;
    massive[cur++] = UDR;
    a = massive[0];
    b = massive[1];
    c = massive[2];
  }
}
зделал как у вас, только добавил "massive[cur++] = UDR;"
потому что получается что теряем пакет при cur = 3

УРА!!! УРА!!! УРА!!! :))) :))) :)))
Работает :))

Mozart, Спасибо Вам БОЛЬШОЕ за помощь!
Вложения
USART.rar
Выкладываю работающие програмы и проэкт в протэус(довольно интересный)
(42.64 КБ) 296 скачиваний
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

поздравляю...
теперь оптимизируйте... убирайте лишниее ЛСД если есть... ибо стоят они по 200р за штуку...
код программы разносите по файлам... пишите описание.. и в папочку "My_development"
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

это не правильно!!!

Код: Выделить всё

    
    cur = 0; 
    massive[cur++] = UDR; 
    a = massive[0]; 
    b = massive[1]; 
    c = massive[2];
правильнее было бы так

Код: Выделить всё

    
    cur = 0; 
    a = massive[0]; 
    b = massive[1]; 
    c = massive[2];
    massive[cur++] = UDR; 
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

теперь оптимизируйте... убирайте лишниее ЛСД если есть...
То я так для прикола 3 штукин наципил
ибо стоят они по 200р за штуку...
у нас дороже
код программы разносите по файлам... пишите описание.. и в папочку "My_development"
оки :)

наверное я ещё эту програму помучаю...
зделаю посылки по 8 бит в которых первых 4 будет адрес пакета,
а младшие 4 бита будут сами данные.
а на приёмнике это всё будет распознаваться и склевиваться байты по 4 бита.
это так на всякий случай чтоб если потиряю посылку ничего не поперемешывалось...
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

Mozart писал(а):это не правильно!!!

Код: Выделить всё

    
    cur = 0; 
    massive[cur++] = UDR; 
    a = massive[0]; 
    b = massive[1]; 
    c = massive[2];
правильнее было бы так

Код: Выделить всё

    
    cur = 0; 
    a = massive[0]; 
    b = massive[1]; 
    c = massive[2];
    massive[cur++] = UDR; 
точно :)
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

мда... извращенству нет предела... тогда уж про CRC16 почитайте.... начните писать что-нить для компутера... что бы вся эта муть передавалась в комп...

з.ы. начните что-нить другое изучать... напишите статью коту... вам будут благодарны... например и2с актуально... сейчас еепром на и2с... возьмите приделайте к мк... соберите всё это в железо... сфоткайте видео снимите...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

извращенству нет предела...
ну почемуже...а вдруг в голову стукнит сигналы с Усарт по радио пустить...
начните писать что-нить для компутера... что бы вся эта муть передавалась в комп...
это ж ещё на комп программу писать надо...
напишите статью коту...
мне их читать надо, а не писать - я только начал осваивать МК
например и2с актуально...
с и2с уже работал - управлял аудиочипом TDA7314
соберите всё это в железо... сфоткайте видео снимите...
нету возможности в железе(на даный момент) - я начал активно осваивать МК потому, что нашол такой замечательный симулятор PROTEUS
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»