Например TDA7294

Форум РадиоКот • Просмотр темы - atmega8535 в Proteus не верное значение на LCD
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб авг 15, 2020 22:48:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Пт ноя 22, 2019 07:44:28 
Родился

Зарегистрирован: Пт ноя 22, 2019 07:01:10
Сообщений: 3
Рейтинг сообщения: -4
Привет всем , в программировании новечек, есть задание:
Реализовать МПС на базе МК фирмы Atmel серии AVR, которая принимает с
компьютера по UART 16 случайных чисел (байт). Произвести обработку принятых чисел
на Микро Контроллере согласно заданию. Исходник компилировал в CodevisionAWR. Язык программирования С.

Есть фрагмент исходника , код работает, должен выводить массив 16 чисел который ввожу я, а он выводит совсем не то число..
Я приложил скрин1, слева в Virtual terminal массив чисел которые ввожу , передаю по COM порту, а справа на LCD должно быть максимальное число 208. А появляется число 56... То есть терминал информацию получает , а LCD почему то нет.Подскажите где я допустил ошибку.Ниже приложил скриншоты и исходник.Исходник из методички , по идее должен работать
Hel[P!!! Спасибо !


// инициализация внешних библиотек
#include <mega8535.h>
#include "lcd.h"
#include "delay.h"
#include "stdlib.h"
//Инициализация порта А для передачи данных в ЖКИ.
//Для просмотра номера порта, нужно обратиться к заголовочному //файлу mega8535.h, с
целью определения номера порта.
//PortA = 0x1b;
#asm
.equ __lcd_port=0x1b; //PORTA
#endasm
//объявление служебных переменных
//однобайтный буфер
volatile unsigned char usartRxBuf = 0;
//Определение констант для конфигурации UART
#define RXCIE 7
#define RXEN 4
#define TXEN 3
#define URSEL 7
#define UCSZ1 2
#define UCSZ0 1
unsigned char MAXnum,buff = 0;
unsigned char i,j,n = 0;
unsigned char mas1 [16];
char* str1;
//Процедуры для управления передачей через UART
//инициализация usart`a
void USART_Init(void)
{
UBRRH = 0;
//скорость обмена 9600 бод
UBRRL = 51;
//разр. прерыв при приеме, разр приема, разр передачи.
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
//размер слова 8 разрядов
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); }
#define UDRE 5
//отправка символа по usart`у
void USART_SendChar(unsigned char sym)
{
while(!(UCSRA & (1<<UDRE)));
UDR = sym;
}
//чтение буфера
unsigned char USART_GetChar(void)
{
unsigned char tmp;
unsigned char saveState = SREG;
#asm("cli");
tmp = usartRxBuf;
usartRxBuf = 0;
SREG = saveState;
return tmp;
}
//прерывание при приеме символа по usart в буфер
interrupt [USART_RXC] void usart_rxc_my(void)
{
usartRxBuf = UDR;
buff = usartRxBuf;
if(buff)
{
if(i<16)
{
mas1[i] = buff;
i++;
}
}
}
void main( void )
{
lcd_init(20); //инициализация ЖКИ
USART_Init(); //инициализация UART
lcd_clear(); //очистка ЖКИ
lcd_gotoxy(0,0); //переместить курсор на ЖКИ в позицию 0,0
#asm("sei"); //разрешение прерываний
while(1) //бесконечный цикл
{
if(i == 15)
{
//обработка массива
for(i=0;i<16;i++)
{
if (mas1[i]%2 == 0)
{
if (MAXnum<=mas1[i])
{
MAXnum = mas1[i];
}
}
}
//вывод массива на ЖКИ
for(i=0;i<16;i++)
{
itoa(mas1[i],str1);
lcd_puts(str1);
j++;
if(j%4!=0)
{
lcd_gotoxy(j*5,n);
}
else
{
j = 0;
n++;
lcd_gotoxy(j*5,n);
}
}
delay_ms(10000);
//вывод результата на ЖКИ
lcd_clear();
lcd_gotoxy(0,0);
itoa(MAXnum,str1);
lcd_puts(str1);
}
}}


Вложения:
скрин 1.png [85.74 KiB]
Скачиваний: 149
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Пт ноя 22, 2019 10:39:33 
Модератор
Аватар пользователя

Карма: 78
Рейтинг сообщений: 817
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4085
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Отладка Вас спасёт.
Тем более, в Протеусе есть все необходимые для этого инструменты.
Хотите, чтобы этим занялись Мы ?

_________________
Я мненью вашему вращенье придавал, а осью был - мой детородный орган.


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Пт ноя 22, 2019 13:20:52 
Друг Кота
Аватар пользователя

Карма: 53
Рейтинг сообщений: 382
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 6864
Откуда: Ижевск
Рейтинг сообщения: 0
UBRRH = 0;
//скорость обмена 9600 бод
UBRRL = 51;
А в свойствах микроконтроллера модели протеуса столько же?

_________________
Docendo discimus


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Шестое юбилейное мероприятие в процессе
В сети
 Заголовок сообщения: Re: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Сб ноя 23, 2019 09:16:56 
Друг Кота
Аватар пользователя

Карма: 48
Рейтинг сообщений: 646
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 4279
Откуда: Minsk
Рейтинг сообщения: 0
to texac123 Эх, не в тот раздел ты обратился. Я же тебе советовал
https://radiokot.ru/forum/viewforum.php?f=2
может, и реакция была бы другой.
А слово "новичок" продолжаешь писать с ошибками. :))

_________________
Изображение


Вернуться наверх
 
Быстро и просто. Разработка бюджетного неизолированного источника питания на контроллере VIPer122

С помощью VIPer122 можно создавать как изолированные, так и неизолированные сетевые источники питания. Разберем самый простой и бюджетный вариант – разработку неизолированного понижающего источника питания с выходным током в несколько сотен миллиампер без трудоемких расчетов трансформаторов и компонентов обвязки.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Сб ноя 23, 2019 12:30:29 
Модератор
Аватар пользователя

Карма: 151
Рейтинг сообщений: 2320
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 15564
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
а что бы ты хотел от поколения ЕГЭ?

_________________
Мудрость приходит вместе с импотенцией...


Вернуться наверх
 
Микроконтроллеры STM32G4 полностью заменят STM32F3?

С начала выпуска микроконтроллеров STM32F3 прошло 8 лет. Изменились как технологии, так и потребности рынка. Понимая это, компания STMicroelectronics разработала новое семейство микроконтроллеров STM32G4 для систем со смешанными сигналами. Эти микроконтроллеры превосходят своих предшественников из семейства STM32F3 по уровню быстродействия, богатству периферии и при этом обеспечивают более низкий уровень потребления.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Пн ноя 25, 2019 13:27:14 
Родился

Зарегистрирован: Пт ноя 22, 2019 07:01:10
Сообщений: 3
Рейтинг сообщения: 0
pyzhman, Да на МК все поставлено верно, я пробовал менять разные значения и в коде и на МК , в результате на табло то больше то меньше цифер. Еще вопрос, если массив из 16 чисел, а на табло только 13, код из методички , получается не верный?)


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Вт ноя 26, 2019 06:24:40 
Вымогатель припоя

Карма: 11
Рейтинг сообщений: 93
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 631
Рейтинг сообщения: 0
texac123, вы объявили указатель char* str1; но не привязали его ни к чему.
К примеру так
Код:
str1 = &mas1[0];   // присваиваем указателю адрес самого первого элемента массива mas1
А так все правильно выводит
Код:
itoa(mas1[i],str1); // преобразует integer (целое) mas1[i] в символы в строке str1
lcd_puts(str1);      // вывод на дисплей

Допустим вы терминале нажали цифровую клавишу 1, HEX код этого символа 0х31 в десятичном представлении 49
lcd_puts(str1) у вас выведет 49
В чем проблема?


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Вт ноя 26, 2019 13:47:47 
Родился

Зарегистрирован: Пт ноя 22, 2019 07:01:10
Сообщений: 3
Рейтинг сообщения: 0
Хорошо, а если массив чисел конкретный : 85,199,140,135,172,203,157,83,199,208,100,180,122,253,104,195.
Как вывести из этого массива максимальное четное число 208?
Спасибо!


Вернуться наверх
 
Бытовой пирометр АКИП-9312 – просто удобно!

Диапазон 35 °С ...42°С (температура тела) погрешность 0,3 °С
Диапазон 0 °С ...100°С (бытовая сфера) погрешность 1,0 °С
Не в сети
 Заголовок сообщения: Re: atmega8535 в Proteus не верное значение на LCD
СообщениеДобавлено: Вт ноя 26, 2019 16:03:58 
Вымогатель припоя

Карма: 11
Рейтинг сообщений: 93
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 631
Рейтинг сообщения: 0
А разве этот код у вас не выводит
Код:
for(i=0;i<16;i++)
{
   if (mas1[i]%2 == 0)
   {
      if (MAXnum<=mas1[i])
      {
      MAXnum = mas1[i];
      }
   }
}


Вернуться наверх
 


Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y