Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
24 / 4 / 0
Регистрация: 16.03.2013
Сообщений: 62
1

Использование UART в ATMega8

08.06.2014, 13:52. Показов 2050. Ответов 1
Метки нет (Все метки)

Доброго времени суток!
Столкнулся с проблемой написания программы на C для микроконтроллера ATMega8
Что нужно сделать: при получении команды, брать напряжение АЦП и посылать его через uart (к примеру на компьютер)
Код:
Кликните здесь для просмотра всего текста
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
#include <mega8.h>
#include <string.h>
#include <delay.h>
#include <stdio.h>
#define ADC_VREF_TYPE 0x00
 
char rc;
unsigned char *adcc;
 
 
 
void lampOFF()
{
    PORTB.0=0;
}
 
void lampON()
{
    PORTB.0=1;
}
 
void initUART()
{
// USORT initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USORT Receiver: On
// USORT Transmitter: On
// USORT Mode: Asynchronous
// USORT Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
   
}
 
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
 
void uart_putc( char c )
{
  //ждем окончания передачи предыдущего байта
  while( ( UCSRA & ( 1 << UDRE ) ) == 0 );
  UDR = c;
}
 
void send( char *str )
{
  unsigned char c;
  while( ( c = *str++ ) != 0 ) {
    uart_putc( c );
  }
}
 
void main(void)
 
{
    DDRB.0=1;
    initUART();
 
    send("Atmega8 UART ready!");
    while (1)
    {
        if ((UCSRA & (1<<7)))
        {
            rc=UDR;
        }
 
        switch (rc)
        {
            case '1': {lampON();  
                       sprintf(adcc, "%d", read_adc(0)) ;
                       send(adcc); 
                       break;}
            case '2': {lampOFF(); 
                       break;}
        }
       
    }
 
}


Однако, при прогоне программы в протеусе, посылаю "1", загорается светодиод и ничего больше не происходит, данные не приходят. Где может быть ошибка?
Спасибо за внимание
0
Миниатюры
Использование UART в ATMega8  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2014, 13:52
Ответы с готовыми решениями:

Работа с UART ATMega8
Всем привет! Использую эту программу #include &lt;mega8.h&gt; #include &lt;delay.h&gt; #include &lt;stdio.h&gt; ...

Использование интерфейса UART и SPI на ATmega16
подскажите а можно ли использовать USORT и SPI для реализации радиоуправления?

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

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

1
24 / 4 / 0
Регистрация: 16.03.2013
Сообщений: 62
08.06.2014, 19:31  [ТС] 2
Проблема решилась более тщательным поиском. Кому понадобится, нашёл небольшой архивчик
Кликните здесь для просмотра всего текста

Программа написана на Си в CodeVisionAVR. Управление по UART осуществляется цифрами:

1-6 - смена канала АЦП.
7 - старт преобразования(всегда)
8 - одиночное преобразование
9 - стоп преобразования
0 - вывод помощи

В архиве "АЦП на ATmega8" находятся:
1.Проект в CodeVisionAVR.
2.Проект в Протеусе
3.Проект в VMLab.


взято с этого сайта
0
Вложения
Тип файла: zip ADC_m8.zip (165.7 Кб, 42 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2014, 19:31

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

Работа с UART ATMega8
к примеру надо отправить число 21367 в ком порт с атмеги8 чтобы потом на компе программой считать....

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

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


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

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

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