реклама на сайте
подробности

 
 
> Общение ATtiny2313 и компа по UART
aivs
сообщение Apr 16 2013, 14:38
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 114
Регистрация: 3-10-09
Пользователь №: 52 731



Изучаю UART, задействовал 2 МК attiny2313. Первый МК каждую секунду отправляет символ на Второй МК по UART, Второй МК принимает символ и показывает на экране HD44780, это работает, вот код:
Первый МК отправляет:
Код
#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>

void USART_Init( unsigned int baudrate );
unsigned char USART_Receive( void );
void USART_Transmit( unsigned char data );

int main( void ) //Главная функция
{    
  const unsigned int BAUDRATE = 9600;  
  const unsigned int BAUDDIVIDER = F_CPU/(16*BAUDRATE)-1;
  USART_Init(BAUDDIVIDER);// Скорость соединения 9600 бит/с
  
  _delay_ms(1000);
  while(1){
    USART_Transmit(0x68); //Отправка символа
    _delay_ms(1000);
    USART_Transmit(0x65); //Отправка символа
    _delay_ms(1000);
    USART_Transmit(0x6C); //Отправка символа
    _delay_ms(1000);
    USART_Transmit(0x6C); //Отправка символа
    _delay_ms(1000);
    USART_Transmit(0x6F); //Отправка символа
    _delay_ms(1000);
    USART_Transmit(0x78); //Команда очистки
    _delay_ms(1000);
  }
}


void USART_Init( unsigned int baudrate ) //Функция инициализации USART
{
    UBRRH = (unsigned char) (baudrate>>8);                  
    UBRRL = (unsigned char) baudrate;
    UCSRA = (1<<U2X); //Удвоение скорости
    UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) ); //Разрешение на прием и н апередачу через USART
    UCSRC = (1<<USBS) | (3<<UCSZ0);
}


unsigned char USART_Receive( void ) //Функция приема данных
{
    while ( !(UCSRA & (1<<RXC)) );     //Ожидание приема символа
    return UDR; //Возврат символа
}

void USART_Transmit( unsigned char data ) //Функция отправки данных
{
    while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
    UDR = data; //Начало передачи данных                    
}


Второй МК принимает и выводит на экран:
Код
#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "lcd_lib.h"        // библиотека для работы с LCD HD44780

void USART_Init( unsigned int baudrate );
unsigned char USART_Receive( void );
void USART_Transmit( unsigned char data );

int main( void ) //Главная функция
{
  lcd_init();// инициализация LCD
  _delay_ms(10);
  lcd_clr();// очистить LCD
  lcd_gotoxy(0, 0); // Переходим к 0 ячейки
  
  const unsigned int BAUDRATE = 9600;  
  const unsigned int BAUDDIVIDER = F_CPU/(16*BAUDRATE)-1;
  USART_Init(BAUDDIVIDER);// Скорость соединения 9600 бит/с
  
  unsigned char symbol;
  while(1) {
    symbol = USART_Receive();
    // Если пришел символ 0x00, то очищаем
    if (symbol == 0x78) {
      lcd_clr();
      lcd_gotoxy(0, 0);
    }
    else {
      lcd_dat(symbol);    // Показываем полученный символ на LCD
    }
  }
}


void USART_Init( unsigned int baudrate ) //Функция инициализации USART
{
    UBRRH = (unsigned char) (baudrate>>8);                  
    UBRRL = (unsigned char) baudrate;
    UCSRA = (1<<U2X); //Удвоение скорости
    UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) ); //Разрешение на прием и н апередачу через USART
    UCSRC = (1<<USBS) | (3<<UCSZ0);
}


unsigned char USART_Receive( void ) //Функция приема данных
{
    while ( !(UCSRA & (1<<RXC)) );     //Ожидание приема символа
    return UDR; //Возврат символа
}

void USART_Transmit( unsigned char data ) //Функция отправки данных
{
    while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
    UDR = data; //Начало передачи данных                    
}


Теперь я решил по UART подключиться компом к этим МК, на макетке собрал переходник RS232-->UART из MAX232 и 4 кондеров, подключаюсь и вижу в minicom, что символы приходят каждую секунду, но это не те символы что отправляет МК:


Скорость везде выставил 9600, да и по minicom видно что символы приходят каждую секунду, но не те, в чем может быть проблема?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 18:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.0136 секунд с 7
ELECTRONIX ©2004-2016