помогите написать программу для МЕГИ-8
-
m1sh
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Пн янв 14, 2008 12:29:09
- Откуда: Новомосковск
помогите написать программу для МЕГИ-8
у меня есть АВР студио и WinAvr
есть примерная схема устройства..
http://pics.binary.ru/full/newg-1.gif
в зависимости от входного напряжения, на индикаторе должен отображатся параметр входного сигнала
перед выводом параметра, кратковременно показывать соркащенное наименование параметра..
сигналы 0-5 волт - каждый со свей таблицей преобразования
переключения между параметрами - кнопкой...
Назовите тему нормально! Aheir
есть примерная схема устройства..
http://pics.binary.ru/full/newg-1.gif
в зависимости от входного напряжения, на индикаторе должен отображатся параметр входного сигнала
перед выводом параметра, кратковременно показывать соркащенное наименование параметра..
сигналы 0-5 волт - каждый со свей таблицей преобразования
переключения между параметрами - кнопкой...
Назовите тему нормально! Aheir
- Вложения
-
- newg.gif
- (44.42 КБ) 795 скачиваний
-
m1sh
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Пн янв 14, 2008 12:29:09
- Откуда: Новомосковск
да не - неотказались - но там половино темы мерянье что у кого круче...
большое спасибо AVR! с его помощью и получилась такая схема..
а насчет написания = просто наверно там все профессионалы..
и оченьпросто сказать- смотри там примеры - там всё понятно...
а я сильно начинающий - и мне трудно начать написание программы с "0", без всего.
под Микроконтроллеры я особо не программировал - так, подправлял готовые проги, либо заливал уже кем-то написанные..
большое спасибо AVR! с его помощью и получилась такая схема..
а насчет написания = просто наверно там все профессионалы..
и оченьпросто сказать- смотри там примеры - там всё понятно...
а я сильно начинающий - и мне трудно начать написание программы с "0", без всего.
под Микроконтроллеры я особо не программировал - так, подправлял готовые проги, либо заливал уже кем-то написанные..
-
m1sh
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Пн янв 14, 2008 12:29:09
- Откуда: Новомосковск
Код: Выделить всё
#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];
}
} // конец программы
вот пока что получилось только..
как теперь динамическую индикацию реализовать??
читал на коте - но там на ассемблере написано...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
ассемблер или Си - какая разница? главное - алгоритм, а он одинаков:
1. Настроить таймер, разрешить прерывания от него
2. Завести переменную B1, которая хранит номер разряда индикатора, массив переменных D[] "дисплей" (каждый элемент соответствует изображению на индикаторе)
3. написать обработчик прерывания от таймера, в котором сначала погасить все индикаторы соответствующим выводом в нужный порт, затем сделать B1++ и проверить, не стало ли B1 больше, чем может быть индикаторов. Если стало - обнулить В1. Потом выводим в порт D[B1], т.е. светящиеся сегменты "следующего" индикатора, после чего выводим в порт "зажигания" разряда бит (1<<B1)
4. в основном цикле в массив D[] занести нужные "символы" - см. твой массив bin2bcd - и на индикаторе все засветится
алгоритм примерный, только для того, чтобы ты уловил идею.
1. Настроить таймер, разрешить прерывания от него
2. Завести переменную B1, которая хранит номер разряда индикатора, массив переменных D[] "дисплей" (каждый элемент соответствует изображению на индикаторе)
3. написать обработчик прерывания от таймера, в котором сначала погасить все индикаторы соответствующим выводом в нужный порт, затем сделать B1++ и проверить, не стало ли B1 больше, чем может быть индикаторов. Если стало - обнулить В1. Потом выводим в порт D[B1], т.е. светящиеся сегменты "следующего" индикатора, после чего выводим в порт "зажигания" разряда бит (1<<B1)
4. в основном цикле в массив D[] занести нужные "символы" - см. твой массив bin2bcd - и на индикаторе все засветится
алгоритм примерный, только для того, чтобы ты уловил идею.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
m1sh писал(а):с этим тоже разобрался...
только вот в протеусе на симуляции цыфры носятся как бешеные..
Просто Протеус работает с графикой, и мерцание - нормальное явление.
10 Гц - это частота чего? Мерцания индикатора? Если да - то этого мало. Нужно минимум 60 Гц. Иначе глаз видит мерцание боковым зрением, а это плохо влияет...
Today fine night...