|
"Мусор" на входе Atmega |
|
|
|
Nov 24 2011, 13:50
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 22-07-11
Пользователь №: 66 352

|
Добрый день! Имеется следующая программа: CODE #include <avr/io.h> #include <util/delay.h> #include <string.h> #include <stdlib.h>
void USART_Transmit(char *data) { int i,s; s = strlen(data); for(i=0;i<s;i++) { /* Wait for empty transmit buffer */ while (!( UCSRA & (1<<UDRE))); /* Put data into buffer, sends the data */ UDR = data[i]; } }
int main(void) { int inputs; char str[10]; char *ptr; //Все выводы порта В - входы DDRB = 0x00; PORTB = 0x00; //Настройка параметров связи UBRRH = 0x0; UBRRL = 0x7; //скорость 115,2 Кбит UCSRC = 0x86; UCSRA = 0x0; UCSRB = 0x19; //8 бит данных
while(1) { inputs = PORTB; ptr = itoa(inputs, str, 10); USART_Transmit(str); } return 0; }
На терминал выводятся числовые или буквенные символы, хотя должен быть 0. Измерял мультиметром напряжение на каждом отводе - либо 0,02В либо -0,6В.
Сообщение отредактировал IgorKossak - Nov 24 2011, 17:57
Причина редактирования: [codebox]
|
|
|
|
|
 |
Ответов
|
Nov 24 2011, 14:51
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(nvk @ Nov 24 2011, 17:50)  На терминал выводятся числовые или буквенные символы, хотя должен быть 0. Причин того может быть несколько 1. Неправильно инициируете USART (проверить это затруднительно, поскольку Вы не указали ни тип МК, ни тактовую частоту). 2. Неверные настройки терминала. 3. Неверная установка fuses (можно зациклить программу на МК на выводе одного и того же символа - удобно "U" - и посмотреть/померить время импульсов на выходе USART осциллографом). 4. Ошибка в схеме или в кабеле подключения к ПК. 5. ....... Чем больше Вы дадите информации, тем быстрее получите конкретный совет, позволяющий решить Вашу проблему.
|
|
|
|
|
Nov 24 2011, 15:48
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 22-07-11
Пользователь №: 66 352

|
1. Микроконтроллер Atmega32, тактовая частота от внешнего кварцевого резонатора частотой 14,7456 МГц. Строки приходят на терминал правильно (например, "HELLO, WORLD!"). 2-4. См. пункт 1. Если написать: if ((PORTB!=0x00) <некое действие>, то это действие будет выполнятся, хотя на всех пинах 0В.
Сообщение отредактировал IgorKossak - Nov 24 2011, 17:58
Причина редактирования: Бездумное цитирование
|
|
|
|
|
Nov 24 2011, 16:50
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 22-07-11
Пользователь №: 66 352

|
Цитата(Палыч @ Nov 24 2011, 23:11)  Ноги порта посажены на землю, или "болтаются в воздухе", а потенциал на них Вы замеряете вольтметром? Болтаются в воздухе. Вольтметром. Цитата(ucMike @ Nov 24 2011, 23:29)  Может правильнее: Код .... while(1) { inputs = PINB; ... PORTB предназначен как для чтения так и для записи, а PINB только для чтения. В этом и отличие.
|
|
|
|
Сообщений в этой теме
nvk "Мусор" на входе Atmega Nov 24 2011, 13:50     nvk Цитата(Палыч @ Nov 25 2011, 01:54) Поскол... Nov 25 2011, 03:20    maksimp Цитата(nvk @ Nov 24 2011, 20:50) Болтаютс... Nov 25 2011, 05:58     Палыч Сообщите: какой компилятор используете.
Ошибка, с... Nov 25 2011, 06:19      nvk Цитата(Палыч @ Nov 25 2011, 13:19) Сообщи... Nov 25 2011, 10:47       nvk Для того, чтобы проверить один старший бит, написа... Nov 27 2011, 06:29        Палыч Цитата(nvk @ Nov 27 2011, 10:29) Работает... Nov 27 2011, 07:13      Marian Цитата(Палыч @ Nov 25 2011, 09:19) Ошибка... Nov 27 2011, 13:16       Палыч Цитата(Marian @ Nov 27 2011, 17:16) Кто в... Nov 27 2011, 15:25 ucMike Может правильнее:
Код....
while(1)
{
input... Nov 24 2011, 16:29 ucMike Для входов PORTB определяет состояние подтягивающи... Nov 24 2011, 17:18 usav Давайте разделим мух и будем властвовать!
1) П... Dec 8 2011, 19:58
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|