ATmega8 UART

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Чт май 29, 2014 07:29:45

Сообщение Aria51 »

Здравствуйте. Нужна помощь. пытаюсь соединить пк и мегу8 по uart с терминала посылаются команды 0,1,2 для вкл. откл нагрузки и опрос датчиков температуры, вроде все работает но с одним условием, должен быть подключен ISP программатор stk-200 как только вытаскиваю шлейф то uart переходит в режим зеркала, c терминала отправляю 1 приходит 1 и ничего больше. Подключаю обратно шлейф начинает нормально работать, на команду 1 включает светодиод и присылает обратно в терминал текстовое сообщение о состоянии. Уже весь мозг сломал. кварц внутренний 8MHz, скорость передачи 9600. переходник USB-UART на FT232RL.
Реклама
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Программу и схему принципиальную в студию. Телепаты сегодня отсутствуют.
Реклама
Родился
Сообщения: 3
Зарегистрирован: Чт май 29, 2014 07:29:45

Сообщение Aria51 »

код в CVAVR

#include <mega8.h>
#include <stdio.h>
#include <string.h>
#asm
.equ __lcd_port=0x18;
#endasm
#include <lcd.h>
#asm
.equ __w1_port=0x18;
.equ __w1_bit=3;
#endasm
#include <1wire.h>;
#include <ds18b20.h>

int i;
int lng=0;
char mystr[]="test test test\r\n";
char mystr1[]="Light\r\n";
char mystr2[]="Dark\r\n";
char rc;
float temper;
char textBuf[17];
char inputText[];
int itn=0;
char com2[];
unsigned char *ttt;



void writeUART(char text[])
{
//вывод информации через UART
lng=strlen(text);
for(i=0; i<lng; i++)
{
while(!(UCSRA & (1<<5)))
{ }
UDR=text;
}
}

void initTemper()
{
w1_init();
ds18b20_init(0,-20,50,DS18B20_12BIT_RES);
}

void readTemper()
{
temper=ds18b20_temperature(0);
if(temper > 10)
{
PORTB.7=1;
}
sprintf(textBuf,"t=%.1fC\r\n",temper);
writeUART(textBuf);
}



void lampOFF()
{

lng=strlen(mystr2);
for(i=0; i<lng; i++)
{
while(!(UCSRA & (1<<5)))
{ }
UDR=mystr2;
}

}
void lampON()
{

lng=strlen(mystr1);
for(i=0; i<lng; i++)
{
while(!(UCSRA & (1<<5)))
{ }
UDR=mystr1;
}
}
void initUART()
{
UCSRB|=(1<<3)|(1<<4);
UBRRH=0x00;
UBRRL=0x33;
}
void print_lcds(char text[])
{
lng=strlen(text);
for(i=0; i<lng; i++)
{
lcd_gotoxy(i,1);
lcd_putchar(text);
}
}

//-----------------------------------------------------------
void main(void)
{
lcd_init(16);
lcd_putsf("hello");
initUART();
initTemper();
lng=strlen(mystr);
for(i=0; i<lng; i++)
{
while(!(UCSRA & (1<<5)))
{ }
UDR=mystr;
}
while(1)
{
if((UCSRA & (1<<7)))
{
rc=UDR;
if(itn<2){
com2[itn]=rc;
itn++;
}
}


switch(rc)
{
case '3': rc=0x00; break;
case '2':readTemper(); rc=0x00; break;
case '1':lampON(); rc=0x00; break;
case '0':lampOFF(); rc=0x00; itn=0; break;
}

}
}
Вложения
u2.jpg
в SL
(176.97 КБ) 515 скачиваний
u1.jpg
в протеусе
(151.5 КБ) 524 скачивания
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Я на Си не пишу, поэтому с ходу по программе не подскажу, а разбираться мне некогда. Но коли все якобы работает с подключенным STK, то причина, возможно, в схемотехнике.
Это вся схема, что-ли?
Блокировочные конденсаторы по питанию есть? AVCC почему не запитан? RESET почему к питанию не подтянут? Далее, Ваш "переходник USB-UART" понимает TTL-овские уровни сигнала?

Дайте нормальную схему, а не ублюдочную протеусовскую.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Вообще странное поведение, конечно можно было бы подумать на не подтянутый RESET, но при сбросе ноги были бы в HI-Z, а это равносильно разрыву и с режимом "эха" никак не стыкуется. Ждем фото реального устройства...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6345
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Alkul писал(а):Дайте нормальную схему, а не ублюдочную протеусовскую.
Вот Протеусята возмутятся :)
RESET почему к питанию не подтянут? Далее, Ваш "переходник USB-UART" понимает TTL-овские уровни сигнала?
По-моему, USB-UART по определению заточен на TTL-овские уровни. А вот насчет RESET -- категорически за . При этом прогнозировать как будет себя вести дивайс с болтающимся ресетом - неблагодарное занятие.
Реклама
Родился
Сообщения: 3
Зарегистрирован: Чт май 29, 2014 07:29:45

Сообщение Aria51 »

Всем большое спасибо за советы, оказалось все очень банально. Забыл замли соединить мк и конвертора. :facepalm:
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Aria51 писал(а):Всем большое спасибо за советы, оказалось все очень банально.
Но RESET все же подтяните к питанию.
Ответить

Вернуться в «AVR»