Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> atmega128 и UART, не работает программа 
V
    Опции темы
Vilandrew
Дата 23.11.2008, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.6.2006
Где: Казань

Репутация: нет
Всего: нет



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

#include <avr/io.h>
#include <avr/iom128.h>
#include <util/delay.h>
#define F_CPU 8000000UL  // 8 MHz

//================================================================================
void Init_UART0(void)
{
UCSR0A = 0x0;        //    0000 0000
UBRR0H=0x0;
UBRR0L=0x33;               // скорость 9600 при 8MHz
UCSR0B |= (1<<RXEN0) | (1<<TXEN0);    //    0001 1000 - разрешены только прием и передача 9-бит данных
UCSR0C |= (1<<UCSZ01) | (3<<UCSZ00);    //    0000 0110 бит 8, стоп бит 1
}
//================================================================================
// Выводит один символ data в последовательный порт channel
void _put(char data)
{
while ( !( UCSR0A & (1<<UDRE0)) );    // Ждем,если предыдущий символ не передался.
        UDR0 = data;                        // Кладем данные в регистр UDR    
}
//================================================================================

int main (void)
{
Init_UART0();
DDRD = 0xff;
DDRC = 0xff;
DDRB = 0Xff;

    while (1)
    {
    PORTD = 0xff;
    PORTC = 0x00;
    PORTB = 0x00;
    _delay_ms(1000);
    _put('1');
    PORTD = 0x00;
    PORTC = 0xff;
    PORTB = 0xff;
 _delay_ms(1000);
    }
}


Это сообщение отредактировал(а) Vilandrew - 23.11.2008, 22:59
PM MAIL WWW ICQ Jabber   Вверх
cardinal
Дата 24.11.2008, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Посмотри тут примеры
http://g24-tec.com/files/G24-ATM8-Examples-RevA.pdf
не думаю, что эта часть сильно отличается от ATmega128 (с ним я не работал)...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Mazzi
Дата 24.11.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Скорее всего у тебя неправильно установлены Fuses. 
По умолчанию ATmega128 настроена на работу со встроеным тактовым генератором(т.е. твой кварц не используется) см. даташит стр.288, и включена аппаратная совместимость с ATmega103(т.е. необходимо выключить эту совместимость).
Неплохое описание fuses вот здесь http://ulei.by.ru/Fuses_Ru.htm хотя и для 64 атмеги но там эти моменты совпадают с 128 атмегой.

Удачи!


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Vilandrew
Дата 24.11.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.6.2006
Где: Казань

Репутация: нет
Всего: нет



Mazzi, спасибо, действительно проблема была во фьюзах smile

Это сообщение отредактировал(а) Vilandrew - 24.11.2008, 19:11
PM MAIL WWW ICQ Jabber   Вверх
Mazzi
Дата 25.11.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Vilandrew,  рад за тебя.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Vilandrew
Дата 14.12.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.6.2006
Где: Казань

Репутация: нет
Всего: нет



Столкнулся с новой проблемой. Данные передаются на компьютер, дальше уже программа обрабатывает эти значения и отправляет результат обратно на контроллер. Но, контроллер никак не реагирует. Вот собственно кусок кода который у меня не хочет работать:
Код

#include <avr/io.h>
#include <avr/iom128.h>
#include <stdio.h>
#include <stdlib.h>
#include <util/delay.h>
#include <string.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL  // 8 MHz

void Init_UART0(void)
{
UCSR0A = 0x0;        //    0000 0000
UBRR0H=0x0;        // скорость 9600 при 8MHz
UBRR0L=0x33;
UCSR0B |= (1<<RXEN0) | (1<<TXEN0);    //    0001 1000 - разрешены только прием и передача 9-бит данных
UCSR0C |= (1<<UCSZ01) | (3<<UCSZ00);    //    0000 0110 бит 8, стоп бит 1
}

char _get(void)        
{
    while ( !(UCSR0A & (1<<RXC0)) );
    return UDR0;

}

void _put(char data)
{
    while ( !( UCSR0A & (1<<UDRE0)) );
    UDR0 = data;

}

int main (void)
{
unsigned char received_data;
Init_UART0();
DDRC = 0xff;

while (1)
{
received_data = _get();
    if(received_data == 'a')
    {
    PORTC = 0x08;
    _delay_ms(1000);
    PORTC = 0x00;
    }
    else
    {
    PORTC = 0x20;
    _delay_ms(1000);
    PORTC = 0x00;
    }
_put(received_data);
}

}

PM MAIL WWW ICQ Jabber   Вверх
Mazzi
Дата 15.12.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Причина в том, что у тебя не используются прерывания. 

Нужно написать обработчики прерывания по приёму и передаче через Uart и разрешить процессору работать по прерываниям, тогда код заработает.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Vilandrew
Дата 15.12.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.6.2006
Где: Казань

Репутация: нет
Всего: нет



Mazzi, спасибо, буду двигаться в этом направлении.
PM MAIL WWW ICQ Jabber   Вверх
rmise
Дата 11.4.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 11.4.2009

Репутация: нет
Всего: нет



Уважаемые форумчане!
Помогите пожалуйста.
Схемка на ATMega8535, он отправляет команду телефону, а телефон молчит.
Подключал к компу (схемку) работает, телефон с компом тоже общается (правда только на 19 200). Думаю что дело в скорости.
Почитал на форумах, говорят что кварц надо ставить на 7,3728 Мг. Может можно без него?
Если да, то как?
Если нет, то скажите пожалуйста, что нужно в коде изменить, что бы контроллер от кварца работал?

\\\\\\\\\\\\\\\\\\\\\\\\\
uart_init:;
.equ XTAL = 8000000; частота процессора.
.equ baudrate = 19200
.equ bauddivider = XTAL/(16*baudrate)-1
outi UBRRL , low(bauddivider)
outi UBRRH , high(bauddivider)
outi UCSRA , 0
outi UCSRC , 1<<URSEL|3<<UCSZ0
outi UCSRB , 1<<RXEN|1<<TXEN|1<<RXCIE|1<<TXCIE
\\\\\\\\\\\\\\\\\
PM MAIL   Вверх
Mazzi
Дата 13.4.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Цитата(rmise @ 11.4.2009,  22:10)
Подключал к компу (схемку) работает, телефон с компом тоже общается (правда только на 19 200). Думаю что дело в скорости.

Ты сначала точно определись на каких скоростях что работает, а потом уже ищи решение.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
rmise
Дата 15.4.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 11.4.2009

Репутация: нет
Всего: нет



Я уже нашел решение smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0881 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.