Форум myROBOT.ru » Лаборатория » Микроконтроллеры » Как установиль 1 или 0 на выводе TxD com порта, что бы передать эти 1 или 0 USART-ом atmega 8 ?

Страниц (2): [1] 2 »
 

1. gravitino - 31 Декабря, 2012 - 22:57:18 - перейти к сообщению
Привет всем, с наступающим всех Голливудская улыбка
Как установиль 1 или 0 на выводе TxD com порта, что бы передать эти 1 или 0 USART-ом atmega 8 ?
2. Роботов - 31 Декабря, 2012 - 23:03:09 - перейти к сообщению
Надо всего лишь сконфигурировать USART согласно даташит, и выводы автоматически настроятся как надо. Тх-на выход Rx-на вход.
С наступающим!!!
3. gravitino - 31 Декабря, 2012 - 23:05:46 - перейти к сообщению
Вот этим способом не получается ставить 1 в txd com-a pc
CODE:
int main(int argc, char *argv[])
{
HANDLE handle = 0;
handle = CreateFile("\\\\.\\COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (handle == INVALID_HANDLE_VALUE) {
MessageBox(NULL, "Невозможно открыть последовательный порт", "Error", MB_OK);
ExitProcess(1);
}
std::cout << " com port succsesfuly opened :)" << std::endl;
DCB dcbSerialParams = {0};

if (!GetCommState(handle, &dcbSerialParams))
{
printf("failed to get current serial parameters!");
}
else
{
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;

if(!SetCommState(handle, &dcbSerialParams))
{
printf("ALERT: Could not set Serial Port parameters");
}
else {
Sleep(2000);
}
}
DWORD feedback;
char buff = 1;
std::cout << " handle " << handle << std::endl;
if(!WriteFile(handle, &buff, 10, &feedback, 0))
{
CloseHandle(handle);
handle = 0;
throw exception();
}

CloseHandle(handle);

(Добавление)
Вот мой код. CodeVisionAvr.
CODE:

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 12/31/2012
Author : F4CG
Company : F4CG
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 1.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here
int r;

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x06;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
{
// Place your code here
while(UCSRA.7==1)
{
r = UDR;
if(r=='1')
PORTD=0xFF;
else
PORTD = 0x00;
}

};

4. Роботов - 31 Декабря, 2012 - 23:12:09 - перейти к сообщению
gravitino пишет:
Вот этим способом не получается ставить

https://www.youtube.com/watch?v=e-qDHM0slB0
5. gravitino - 31 Декабря, 2012 - 23:12:31 - перейти к сообщению
Надо просто программно с компа ставить 1 на TxD com порта
6. Роботов - 31 Декабря, 2012 - 23:20:58 - перейти к сообщению
gravitino пишет:
Надо просто программно с компа ставить 1 на TxD com порта

Ничего не надо ставить, я же ссылку дал, про то кто на ком стоит Голливудская улыбка
А если серьезно, то надо не единицу ставить, а байт в порт отправлять. Но это после НГ, щас во мне уже много спиртного Подшучивать, дразнить
7. gravitino - 31 Декабря, 2012 - 23:23:01 - перейти к сообщению
Роботов пишет:
gravitino пишет:
Надо просто программно с компа ставить 1 на TxD com порта

Ничего не надо ставить, я же ссылку дал, про то кто на ком стоит Голливудская улыбка
А если серьезно, то надо не единицу ставить, а байт в порт отправлять. Но это после НГ, щас во мне уже много спиртного Подшучивать, дразнить

Ну да спасибо что вообще ответил, честно говоряне дал никакого ответа Улыбка
8. Роботов - 31 Декабря, 2012 - 23:38:00 - перейти к сообщению
gravitino пишет:
честно говоряне дал никакого ответа

Ну извините, отвечаю между подходами к столу.
А это вам действительно прям щас надо? может быть до завтра подождем?
С наступающим Голливудская улыбка
9. gravitino - 31 Декабря, 2012 - 23:43:05 - перейти к сообщению
Голливудская улыбка щас иду пить но потом обязательно вернусь к этой проблеме Ухмылка
10. killgur - 01 Января, 2013 - 00:17:31 - перейти к сообщению
смешной вопрос там же по любому или ноль или единица или одно из двух.
11. Роботов - 01 Января, 2013 - 00:22:36 - перейти к сообщению
killgur пишет:
смешной вопрос там же по любому или ноль или единица или одно из двух.

ТС хочет отправить единицу, на самом деле отправляется 00000001. Тоесть восемь бит, младший из которых единица.
12. killgur - 01 Января, 2013 - 01:22:31 - перейти к сообщению
Роботов пишет:
killgur пишет:
смешной вопрос там же по любому или ноль или единица или одно из двух.

ТС хочет отправить единицу, на самом деле отправляется 00000001. Тоесть восемь бит, младший из которых единица.


CODE:
if(r=='1')


ASCII '1' = 00110001

надо его и передавать, для начала через терминал.
13. gravitino - 01 Января, 2013 - 10:22:58 - перейти к сообщению
killgur пишет:
Роботов пишет:
killgur пишет:
смешной вопрос там же по любому или ноль или единица или одно из двух.

ТС хочет отправить единицу, на самом деле отправляется 00000001. Тоесть восемь бит, младший из которых единица.


CODE:
if(r=='1')


ASCII '1' = 00110001

надо его и передавать, для начала через терминал.

В Proteuse все работает, через Virtusl Terminal отпраеляю 1 и на порт D появляется лог 1. Я вот только не уверен. мега8 подключен к компу через программатор Громова, может тут проблема ?
14. gravitino - 01 Января, 2013 - 15:49:17 - перейти к сообщению
Извините за тупость, но я как то не заметил что программатор Громова не подает сигнал на вход МК Rxd. То есть мне надо собрать uart переходник использую max232. Так вот собрал простую схему в proteus -e, симуляция норм проходит. Но вопросы есть
1. Можно ли вместо электролитических кондеров ставить керамитические ?
2. так как выход R1 Out схемы max 232 инвертирован сиганл до входа мк RxD доходит инвертированным, что делать я вот в proteuse поставил элемент not и все стало норм но как то не подуше, что делать ?
15. Роботов - 01 Января, 2013 - 16:02:05 - перейти к сообщению
1. Можно.
2. Использовал МАХ232 без каких либо инверторов. Всё работало.