Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/12: Рейтинг темы: голосов - 12, средняя оценка - 5.00
vasiaf2015
-22 / 1 / 0
Регистрация: 29.08.2013
Сообщений: 49
1

Работа с UART ATMega8

17.08.2014, 22:11. Просмотров 2206. Ответов 4
Метки нет (Все метки)

к примеру надо отправить число 21367 в ком порт с атмеги8 чтобы потом на компе программой считать.
набросал программку
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*******************************************************
This program was created by the
CodeWizardAVR V3.14 Evaluation
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
[url]http://www.hpinfotech.com[/url]
 
Project : 
Version : 
Date    : 17.08.2014
Author  : 
Company : 
Comments: 
 
 
Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 10,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*******************************************************/
 
#include <mega8.h>
 
// Declare your global variables here
 
// Standard Input/Output functions
#include <stdio.h>
#include <string.h>
#include <delay.h>
 
int i;
int lng;
char mystr[]="Atmega8 UART ready!";
 
void main(void)
{
// Declare your local variables here
 
// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
 
// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
 
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
 
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
 
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
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: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;
 
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);
 
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
 
// USORT initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USORT Receiver: On
// USORT Transmitter: On
// USORT Mode: Asynchronous
// USORT Baud Rate: 1200
UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
UBRRH=0x00;
UBRRL=0x520;
 
// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);
 
// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
 
// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
 
// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
 
while (1)
      {    
      
            UDR=0x9;
delay_ms (1000);
 
      
  //     lng=strlen(mystr);
 
  //  for (i=0; i < lng; i++)    {
  //      while ( !( UCSRA & (1<<5)) ) {}
   //     UDR=mystr[i];
   //     }
        
    //     delay_ms(100); //ждем 100 мс 
 
      }
}

кварц стоит 10 Мгц . тут http://www.atmega8.ru/uartcalc/ посчитал для скорости 1200 бит/c Принятое значение UBBR: 520 (UBBRH=0, UBBRL=520)

в программе и видео пытался отправить для начала число 9.
вот что на выходе атмеги 3 нога Tx - вырезано -
это то что в терминале - вырезано -

Добавлено через 10 минут
фьюзы - вырезано -
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2014, 22:11
Ответы с готовыми решениями:

Работа с UART в МК ATMega8
Не хочет работать передача данных. Подключаю к ножкам PD0 и PD1 через USB/UART TTL конвертор...

DS18B20->Atmega8->UART
Всем привет! Я ломаю голову над тем, как передавать температуру по UART, а именно как...

Передача по UART (ATMega8)
Доброго времени суток! Есть необходимость обработать передачу данных с помощью USORT через COM...

UART Atmega8 Terminal
Всем доброго времени суток! У меня есть код : #define F_CPU 8000000UL #include &lt;avr/io.h&gt;...

AtMega8, внешняя EEPROM и UART
Всем привет. Нумбский вопрос, я новичок. Думаю над новой разработкой. Нужно послушать шину...

4
vasiaf2015
-22 / 1 / 0
Регистрация: 29.08.2013
Сообщений: 49
17.08.2014, 22:12  [ТС] 2
когда делал мигалку светодиода мигало с частотой 1 герц как и прописывал в программе
0
Миниатюры
Работа с UART ATMega8  
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
20.08.2014, 11:40 3
Цитата Сообщение от vasiaf2015 Посмотреть сообщение
UBRRL=0x520;
???
у вас регистр 8 битный
UBBR: состоит из UBBRH и UBBRL
и если вы зотите записать туда 0x520, то по идее
UBBRH=0x05;
UBBRL=0x20;
1
Voland_
1696 / 1040 / 98
Регистрация: 04.01.2010
Сообщений: 3,525
20.08.2014, 15:43 4
...CV AVR также поддерживает _правильную_ работу с 16-битными регистрами. То есть можно написать UBRR = 0x520;
1
vasiaf2015
-22 / 1 / 0
Регистрация: 29.08.2013
Сообщений: 49
20.08.2014, 17:15  [ТС] 5
уже разобрался всё настроил и работает. основная проблема была в том что небыло хардварной инверсии на линии передачи данных
0
20.08.2014, 17:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2014, 17:15

Приём данных по UART Atmega8
Доброго времени суток! Продолжаю постигать азы микроконтроллеров. В прошлой теме задавал, как уже...

Передать нажатия c TOUCH SCREEN по UART (ATMega8)
Всем привет. Необходимо реализовать возможность получения координат касания и передать по...

Сигнализация: UART на AtMega16 работает, на AtMega8 нет
Здравствуйте. Изучение микроконтроллеров начал с знаменитой сигнализации на AtTiny2313. Но там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru