Мелкие вопросы по МК и ПЛИС.
Re: Мелкие вопросы по МК и ПЛИС.
Да есть такой в наличии. Как соберу отпишусь что получилось!
- sergeys
- Поставщик валерьянки для Кота
- Сообщения: 1946
- Зарегистрирован: Сб сен 11, 2010 13:45:01
- Откуда: Екатеринбург
Re: Мелкие вопросы по МК и ПЛИС.
Привет! Вопрос вот в чем: как в АВРеАле ставить фузы? Понятно что надо в батник их записать= как? Или скажите пжл прогу чтоб работала с аля 5 проводков и с фейсом.
Ко мне можно на "ты", так даже лучше!
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Всем привет!
Появилась небольшая проблемка...
Имеется 4-х разрядный СИД индикатор.
Индикация статическая.
Имеются функции следующие функции для этого индикатора. // SSISend5CharVolt(0,0,0,0); светится 0000 и т.д
1. Функция вывода показаний на дисплей.
2. Таблицы символов.
Проблема в том что я не понимаю как зажечь точку, скажем третьего разряда, и само число одновременно.
Помогите пожалуйста ))
Схемы нет (( собран на четырех HC299M
Появилась небольшая проблемка...
Имеется 4-х разрядный СИД индикатор.
Индикация статическая.
Имеются функции следующие функции для этого индикатора. // SSISend5CharVolt(0,0,0,0); светится 0000 и т.д
1. Функция вывода показаний на дисплей.
2. Таблицы символов.
Код: Выделить всё
//----------
// Функция вывода показаний на дисплей
//----------
void SSISend5CharVolt (unsigned char Dig3, unsigned char Dig2, unsigned char Dig1, unsigned char Dig0)
{
SSISerOE = 1; //Disable indicators
SSIShiftesWord = CharSymbolsTable[Dig3];
for(CurrentBitNumber = 0; CurrentBitNumber < 8; CurrentBitNumber++)
{
if (1 == SSIBitForRegister)
{
SSISerData = 1; //Current bit is equal 1
}
else{
SSISerData = 0; //Current bit is equal 0
}
SSISerClk = 0; //Begin write data pulse
SSISerClk = 1; //Fix data in shift register
SSIShiftesWord = SSIShiftesWord >> 1;
}
SSIShiftesWord = CharSymbolsTable[Dig2];
for(CurrentBitNumber = 0; CurrentBitNumber < 8; CurrentBitNumber++)
{
if (1 == SSIBitForRegister){
SSISerData = 1; //Current bit is equal 1
}
else{
SSISerData = 0; //Current bit is equal 0
}
SSISerClk = 0; //Begin write data pulse
SSISerClk = 1; //Fix data in shift register
SSIShiftesWord = SSIShiftesWord >> 1;
}
SSIShiftesWord = CharSymbolsTable[Dig1];
for(CurrentBitNumber = 0; CurrentBitNumber < 8; CurrentBitNumber++)
{
if (1 == SSIBitForRegister){
SSISerData = 1; //Current bit is equal 1
}
else{
SSISerData = 0; //Current bit is equal 0
}
SSISerClk = 0; //Begin write data pulse
SSISerClk = 1; //Fix data in shift register
SSIShiftesWord = SSIShiftesWord >> 1;
}
SSIShiftesWord = CharSymbolsTable[Dig0];
for(CurrentBitNumber = 0; CurrentBitNumber < 8; CurrentBitNumber++)
{
if (1 == SSIBitForRegister){
SSISerData = 1; //Current bit is equal 1
}
else{
SSISerData = 0; //Current bit is equal 0
}
SSISerClk = 0; //Begin write data pulse
SSISerClk = 1; //Fix data in shift register
SSIShiftesWord = SSIShiftesWord >> 1;
}
SSISerOE = 0; //Enable indicators
}
Код: Выделить всё
/////////////////////////////////////////////////////////////////////////////////////
// About Serial Indicator
data char CurrentBitNumber;
unsigned int LED_andmask; //Word for shifting
data unsigned int SSISendedSymbol; //Contain symbol sample, prepared for SSI sending
unsigned int bdata SSIShiftesWord; //Word for shifting
sbit SSIBitForRegister = SSIShiftesWord ^ 8; //Serial bit for register
//8 - because of big endian in 8051
unsigned long bdata SSIShiftesDWord; //Word for shifting
sbit SSIBitForRegister2 = SSIShiftesDWord ^ 24;
sbit SSISerData = P2^0; //Pin 2.5 is serial data for 74HC299
sbit SSISerClk = P2^1; //Pin 2.4 is serial data for 74HC299
sbit SSISerOE = P2^2; //Pin 2.3 is serial data for 74HC299
code unsigned long LongSymbolsTable[12] = {
0xFFFFFF7F, 0xFFFF7FFF, 0xFF7FFFFF, 0x7FFFFFFF, //----
0xBFFFFFFF, 0xDFFFFFFF, //||
0xEFFFFFFF, 0xFFEFFFFF, 0xFFFFEFFF, 0xFFFFFFEF, //----
0xFFFFFFF7, 0xFFFFFFFB, //||
};
code unsigned int IntSymbolsTable [112] = {
0x0303, 0x9F03, 0x2503, 0x0D03, //00, 01, 02, 03
0x9903, 0x4903, 0x4103, 0x1F03, //04, 05, 06, 07
0x0103, 0x0903, 0x039F, 0x9F9F, //08, 09, 10, 11
0x259F, 0x0D9F, 0x999F, 0x499F, //12, 13, 14, 15
0x419F, 0x1F9F, 0x019F, 0x099F, //16, 17, 18, 19
0x0325, 0x9F25, 0x2525, 0x0D25, //20, 21, 22, 23
0x9925, 0x4925, 0x4125, 0x1F25, //24, 25, 26, 27
0x0125, 0x0925, 0x030D, 0x9F0D, //28, 29, 30, 31
0x250D, 0x0D0D, 0x990D, 0x490D, //32, 33, 34, 35
0x410D, 0x1F0D, 0x010D, 0x090D, //36, 37, 38, 39
0x0399, 0x9F99, 0x2599, 0x0D99, //40, 41, 42, 43
0x9999, 0x4999, 0x4199, 0x1F99, //44, 45, 46, 47
0x0199, 0x0999, 0x0349, 0x9F49, //48, 49, 50, 51
0x2549, 0x0D49, 0x9949, 0x4949, //52, 53, 54, 55
0x4149, 0x1F49, 0x0149, 0x0949, //56, 57, 58, 59
0x0341, 0x9F41, 0x2541, 0x0D41, //60, 61, 62, 63
0x9941, 0x4941, 0x4141, 0x1F41, //64, 65, 66, 67
0x0141, 0x0941, 0x031F, 0x9F1F, //68, 69, 70, 71
0x251F, 0x0D1F, 0x991F, 0x491F, //72, 73, 74, 75
0x411F, 0x1F1F, 0x011F, 0x091F, //76, 77, 78, 79
0x0301, 0x9F01, 0x2501, 0x0D01, //80, 81, 82, 83
0x9901, 0x4901, 0x4101, 0x1F01, //84, 85, 86, 87
0x0101, 0x0901, 0x0309, 0x9F09, //88, 89, 90, 91
0x2509, 0x0D09, 0x9909, 0x4909, //92, 93, 94, 95
0x4109, 0x1F09, 0x0109, 0x0909, //96, 97, 98, 99
0xFFFE, 0xFEFF, 0xFEFE, 0xFFFD, // , , ., -
0xFDFF, 0xFDFD, 0xFF6D, 0x6DFF, // - --
0xFF93, 0x93FF, 0x9393, 0x9191 // | | ||
};
code char CharSymbolsTable[] = {
0x03, 0x9f, 0x25, 0x0d, //0, 1, 2, 3
0x99, 0x49, 0x41, 0x1F, //4, 5, 6, 7
0x01, 0x09, 0xFFFF, 0xFFFD, //8, 9, , .
0xFFFD
};
Проблема в том что я не понимаю как зажечь точку, скажем третьего разряда, и само число одновременно.
Помогите пожалуйста ))
Схемы нет (( собран на четырех HC299M
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
Re: Мелкие вопросы по МК и ПЛИС.
Ратмир писал(а):Да есть такой в наличии. Как соберу отпишусь что получилось!
Вот пока без операционника V/дел - 0,01, Время/дел - 20 ms. имею! завтра куплю MPC601
- Вложения
-
- P1050913.JPG
- типо расходомер
- (162.75 КБ) 321 скачивание
-
- P1050912.JPG
- магнитик - супермагнит 12 рубл.
- (161.41 КБ) 333 скачивания
-
- P1050910.JPG
- минимальная частота вращения колесика, время между имульсами пока измерить нет возможности.
- (173.54 КБ) 306 скачиваний
-
- P1050911.JPG
- максимальная частота,время межу имп. примерно 200 ms
- (168.62 КБ) 316 скачиваний
Re: Мелкие вопросы по МК и ПЛИС.
Минималку поймал где-то 850ms растояние между импульсами , т.е получаем интервал 850 ms - 200 ms, это диапозон моего расходомера, осталось привязать к литрам, но без цифровика ни как 
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Chip115 писал(а):Проблема в том что я не понимаю как зажечь точку, скажем третьего разряда, и само число одновременно.
Делать как-нибудь лог. "И" кодов точки и числа перед выводом.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
Выход: лог. И или 2 таблицы символов - с точкой и без неё. В счётчике разрядов воткнуть условие проверки на 3-й разряд, следом же и вызывать 2-ю таблицу.
я делал немного по другому: У меня вывод на 7-сегм. LED производился через регистр 74HC595. Там код удачный получается - для добавления "зажигания точки" нужно было всего лишь инкрементировать выводимое число (в 16-м виде), таким образом обходился одной таблицей.
я делал немного по другому: У меня вывод на 7-сегм. LED производился через регистр 74HC595. Там код удачный получается - для добавления "зажигания точки" нужно было всего лишь инкрементировать выводимое число (в 16-м виде), таким образом обходился одной таблицей.
Re: Мелкие вопросы по МК и ПЛИС.
Котятки, помогите разобраться в данном вопросе.
ATtiny25.
В даташите на странице 25 есть такая таблица

из чего следует, что можно применить кварц с минимальной частотой 400кгц. В тоже время, в даташите на стр26 есть такой абзац

что онлайнпереводчиком переводится как -
6,5 Низкочастотные Кварцевый генератор
Для использования 32,768 кГц смотреть кристалла часы источника для данного устройства, низкочастотные кристалла
генератор должен быть выбран путем установки предохранителей CKSEL '0110 '. кристалла должен быть подключен
как показано на рисунке 6-3. Обратитесь к 32 кГц Кварцевый генератор Замечания по применению для подробной информации о
операции осциллятора и как выбрать соответствующие значения для C1 и C2.
Объясните кто понимает, так можно ли Тини25 затактировать от кварца на 32768гц???
Chip115
Глубоко не вникал, но тут все просто. Допустим седьмой бит у бебя точка.
тогда пишим.если ZPT равно нулю - точка погашена, если единице - горит постоянно, если значение менять раз в пол секунду - точка мигает раз в секунду.
ATtiny25.
В даташите на странице 25 есть такая таблица

из чего следует, что можно применить кварц с минимальной частотой 400кгц. В тоже время, в даташите на стр26 есть такой абзац

что онлайнпереводчиком переводится как -
6,5 Низкочастотные Кварцевый генератор
Для использования 32,768 кГц смотреть кристалла часы источника для данного устройства, низкочастотные кристалла
генератор должен быть выбран путем установки предохранителей CKSEL '0110 '. кристалла должен быть подключен
как показано на рисунке 6-3. Обратитесь к 32 кГц Кварцевый генератор Замечания по применению для подробной информации о
операции осциллятора и как выбрать соответствующие значения для C1 и C2.
Объясните кто понимает, так можно ли Тини25 затактировать от кварца на 32768гц???
Chip115
Глубоко не вникал, но тут все просто. Допустим седьмой бит у бебя точка.
тогда пишим.
Код: Выделить всё
SSIShiftesWord = CharSymbolsTable[Dig2] ^ (0x80*ZPT);KIT
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
O-LED писал(а):Объясните кто понимает, так можно ли Тини25 затактировать от кварца на 32768гц???
Да, можно. От 400 кГц — это "Crystal Osc.", а 32768 Гц — "Low-Freq. Crystal".
У Меги в режиме Low-Freq. Crystal подключаются встроенные кварцы на 36 пФ.
В АВР студии:
- Вложения
-
- Безымянный.GIF
- (32.8 КБ) 705 скачиваний
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Мелкие вопросы по МК и ПЛИС.
pyzh_man писал(а):Смастерите и посмотрите, что выдает. Отсюда и надо плясать. От реала.
Смастерил, спасибо ребятам с форума
, выдает расходчик следущее: сигнал постоянный 4,83В когда магнит вне зоны датчика Холла, при прохождении мимо датчика 0,00 В, длина импульса где-то 0,1сек прямоугольный, при минимальном расходе 1-2 импульса в сек, при максимальном 8-10 импульсов в сек. В таком виде могу подключить к МК?- Вложения
-
- P1050946.JPG
- (174.42 КБ) 1497 скачиваний
Последний раз редактировалось Ратмир Чт май 19, 2011 12:36:11, всего редактировалось 1 раз.
Re: Мелкие вопросы по МК и ПЛИС.
Здравствуйте товарищи коты. Хочу сделать подобный девайс http://radiohlam.ru/control/RGB_pic12.htm толь хотелось бы сделать побольше эффектов, например как в вложенной картинке. Только проблемы с файлом прошивки, подскажите что где и как исправить чтобы было всё правильно. За много благодарен!
- Вложения
-
- hjgj241.zip
- (8.56 КБ) 147 скачиваний
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Ну ключиком -fsergeys писал(а):Привет! Вопрос вот в чем: как в АВРеАле ставить фузы? Понятно что надо в батник их записать= как?
Только не забыть -w -- без него новые значения не запишет.
В -f можно перечислять имена и значения отдельных fuse в hex-формате (например, CKSEL=F), можно указывать значение целого байта (например, _LOW=AA).
Значения fuse -- как в табличках в документации от atmel -- там 0, значит и для avreal 0
там для CKSEL3..0 выходит какое-то 1110 -- значит для avreal перевести в шестнадцатеричную форму и задать CKSEL=E
Указывать можно только те fuse, которые хочетя изменить -- avreal сначала зачитыает текущее состояние, потом врезает в него данное в командной строке и результат пишет назад.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
arhip1810 писал(а): хотелось бы сделать побольше эффектов, например как в вложенной картинке. Только проблемы с файлом прошивки, подскажите что где и как исправить чтобы было всё правильно. За много благодарен!
Тут придётся юзать АЦП, файл прошивки исправлять - это "крутое нетрадиционное немецкое порно". Лучше для этого использовать исходник на asm или C.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Причем здесь АЦП? ШИМ согласно приведенным графикам, естественно все ручками, т.к. исправлять нечего.
Docendo discimus
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
А чем плавные фронты и спады делать предлагаете? Там есть и плавные и цифровые. ШИМ, насколько я помню в этой штуке нет.
Последний раз редактировалось Chettuser Пт май 20, 2011 18:19:23, всего редактировалось 1 раз.
Re: Мелкие вопросы по МК и ПЛИС.
Решил сделать 3-фазный генератор меандра на контроллере ATmega8. Использовал таймер2 в ежиме CTC и прерывание по OCR2. По идее таймер должен отсчитывать равные промежутки времени.
Симулирую в протеусе. На ногах контроллера не меандр, а импульсы разной скважности. В программе косяк?
Проект протеуса и прошивку МК прилепил. Прога написана в CVAVR 2.04
Код: Выделить всё
#include <mega8.h>
#define BLDC_DDR DDRC
#define BLDC_PORT PORTC
#define UH PORTC.0
#define UL PORTC.1
#define VH PORTC.2
#define VL PORTC.3
#define WH PORTC.4
#define WL PORTC.5
unsigned char a=0;
void main()
{
BLDC_DDR|=0x3F;
BLDC_PORT=0x00;
TCCR2|=(1<<WGM21)|(1<<CS21)|(1<<CS20); // clock/128, CTC
TIMSK|=(1<<OCIE2);//T/C2 compare match interrupt
OCR2=0x0F;
SREG|=0x90;
while (1);
}
interrupt [TIM2_COMP] void TC2_CMP(void)
{
a+=1;
//TCNT2=0x5F;
if (a==1)
{
UL=0;
UH=1;
}
else if (a==2)
{
VL=0;
VH=1;
}
else if (a==3)
{
UH=0;
UL=1;
WL=0;
WH=1;
}
else if (a==4)
{
VH=0;
VL=1;
}
else if (a==5)
{
WH=0;
WL=1;
UL=0;
UH=1;
a=0;
}
} Симулирую в протеусе. На ногах контроллера не меандр, а импульсы разной скважности. В программе косяк?
Проект протеуса и прошивку МК прилепил. Прога написана в CVAVR 2.04
- Вложения
-
- PRJ.rar
- (15.02 КБ) 140 скачиваний
Re: Мелкие вопросы по МК и ПЛИС.
Разобрался. 5-го else if не нужно, иначе лишний раз отрабатывается прерывание таймера и импульс уширяется.
Re: Мелкие вопросы по МК и ПЛИС.
Куда к меге 16ой подключать аналоговую землю?