Страница 1 из 1
помогите написать программу для МЕГИ-8
Добавлено: Вт янв 15, 2008 13:34:45
m1sh
у меня есть АВР студио и WinAvr
есть примерная схема устройства..
http://pics.binary.ru/full/newg-1.gif
в зависимости от входного напряжения, на индикаторе должен отображатся параметр входного сигнала
перед выводом параметра, кратковременно показывать соркащенное наименование параметра..
сигналы 0-5 волт - каждый со свей таблицей преобразования
переключения между параметрами - кнопкой...
Назовите тему нормально! Aheir
Добавлено: Вт янв 15, 2008 20:54:21
mr.Kirill
А на Электрониксе тебе отказались разве помогать? Там тему уж раздули будь здоров, думаю там и дальше получил бы ответ

Добавлено: Ср янв 16, 2008 07:48:41
m1sh
да не - неотказались - но там половино темы мерянье что у кого круче...
большое спасибо AVR! с его помощью и получилась такая схема..
а насчет написания = просто наверно там все профессионалы..
и оченьпросто сказать- смотри там примеры - там всё понятно...
а я сильно начинающий - и мне трудно начать написание программы с "0", без всего.
под Микроконтроллеры я особо не программировал - так, подправлял готовые проги, либо заливал уже кем-то написанные..
Добавлено: Ср янв 16, 2008 20:46:38
mr.Kirill
Так может для начала выучить кое-какие основы и уже приступать, а потом по мере возникновения вопросов задавать их?
Добавлено: Чт янв 17, 2008 05:24:48
Mamonth
Я у себя на сайте выкладывал самые начальные сведения по АЦП Меги8. С индикацией. Ты почитай - может поможет. Смотри под кнопкой www.
Добавлено: Пт янв 18, 2008 11:10:47
m1sh
Код: Выделить всё
#define F_CPU 8000000UL // Тактовая частота.
#include <avr>
#include <util>
#include "include.h"
//PINC = 0x20; // кнопка - PC5
//PINC = 0x01; //pc0 АЦП1
//PINC = 0x02; //pc1 ацп2
//PINC = 0x04; //pc2 ацп3
//PINC = 0x08; //pc3 ацп4
//PINC = 0x10; //pc4 ацп5
int main(void) // Основная функция.
{
DDRD = 0xff;
DDRB = 0xff;
DDRC&=0x01; // делаем входа ??
DDRC&=0x02;
DDRC&=0x04;
DDRC&=0x08;
DDRC&=0x10;
PORTC|= 0x20; //подтяжку на кнопку ????
char bin2bcd[]={ //массив букв и цифр
a+b+c+d+e+f, // 0 - 0
b+c, // 1 -1
a+b+d+e+g, // 2- 2
a+b+c+d+g, // 3 -3
b+c+f+g, // 4 -4
a+c+d+f+g, // 5 -5
a+c+d+e+f+g, // 6 -6
a+b+c, // 7 -7
a+b+c+d+e+f+g, // 8
a+b+c+d+f+g, // 9
a+b+c+f+e+g, // A -10
f+e+g+d+c, // b - 11
a+f+e+d, // c - 12
e+g+d+c+b, // d - 13
a+f+e+d+g, // e - 14
a+f+e+g+a, // f - 15
g, // g - 16
f+e+d+g, //t - 17
dot, // dot - 18
f+a+b+e+g, //P - 19
};
while (1) {
PORTD = bin2bcd[1];
}
} // конец программы
вот пока что получилось только..
как теперь динамическую индикацию реализовать??
читал на коте - но там на ассемблере написано...
Добавлено: Пт янв 18, 2008 12:11:26
ARV
ассемблер или Си - какая разница? главное - алгоритм, а он одинаков:
1. Настроить таймер, разрешить прерывания от него
2. Завести переменную B1, которая хранит номер разряда индикатора, массив переменных D[] "дисплей" (каждый элемент соответствует изображению на индикаторе)
3. написать обработчик прерывания от таймера, в котором сначала погасить все индикаторы соответствующим выводом в нужный порт, затем сделать B1++ и проверить, не стало ли B1 больше, чем может быть индикаторов. Если стало - обнулить В1. Потом выводим в порт D[B1], т.е. светящиеся сегменты "следующего" индикатора, после чего выводим в порт "зажигания" разряда бит (1<<B1)
4. в основном цикле в массив D[] занести нужные "символы" - см. твой массив bin2bcd - и на индикаторе все засветится
алгоритм примерный, только для того, чтобы ты уловил идею.
Добавлено: Пт янв 18, 2008 12:32:46
Mamonth
m1sh писал(а):как теперь динамическую индикацию реализовать??
читал на коте - но там на ассемблере написано...
Плохо искал. Я выкладывал статью о термометре на Си, где организована динамическая индикация.
Добавлено: Пн янв 21, 2008 09:36:15
m1sh
c прерыванием кое что понял...
непонятно во что..
на индикатор вывожу так
PORTD = bin2bcd[m]; // m - это номер элемента массива, которому соответсвует буква или цифра
как записать, на какой индикатор из 3-х выводить в данный момент??
компилятор WINAVR...
Добавлено: Пн янв 21, 2008 11:13:29
Mamonth
Смотря как ты схему сделал.
Если так как у меня, то выводом в соответствующий порт единички в нужный разряд.
Добавлено: Пн янв 21, 2008 12:19:22
m1sh
с этим тоже разобрался...
только вот в протеусе на симуляции цыфры носятся как бешеные..
Добавлено: Пн янв 21, 2008 12:49:56
m1sh
замерил частотомеом в протеусе - частота 10 гц....

Добавлено: Вт янв 22, 2008 08:47:26
Mamonth
m1sh писал(а):с этим тоже разобрался...
только вот в протеусе на симуляции цыфры носятся как бешеные..
Просто Протеус работает с графикой, и мерцание - нормальное явление.
10 Гц - это частота чего? Мерцания индикатора? Если да - то этого мало. Нужно минимум 60 Гц. Иначе глаз видит мерцание боковым зрением, а это плохо влияет...
Добавлено: Вт фев 12, 2008 13:06:07
m1sh
c помощью
ARV (большое ему спасибо за ответы на мои глупые вопросы) уже со многим разобрался...
теперь по нажатию на кнопук прога переключает заголовки показаний..
осталось теперь сделать 5 каналов АЦП и вывести всё это на индикатор
