Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт май 17, 2011 11:48:47
Да есть такой в наличии. Как соберу отпишусь что получилось!
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Код: Выделить всё
//----------------------------------------------------------------------------
// Функция вывода показаний на дисплей
//----------------------------------------------------------------------------
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
};
Вот пока без операционника V/дел - 0,01, Время/дел - 20 ms. имею! завтра куплю MPC601Ратмир писал(а):Да есть такой в наличии. Как соберу отпишусь что получилось!
Делать как-нибудь лог. "И" кодов точки и числа перед выводом.Chip115 писал(а):Проблема в том что я не понимаю как зажечь точку, скажем третьего разряда, и само число одновременно.


Код: Выделить всё
SSIShiftesWord = CharSymbolsTable[Dig2] ^ (0x80*ZPT);Да, можно. От 400 кГц — это "Crystal Osc.", а 32768 Гц — "Low-Freq. Crystal".O-LED писал(а):Объясните кто понимает, так можно ли Тини25 затактировать от кварца на 32768гц???
Смастерил, спасибо ребятам с форумаpyzh_man писал(а):Смастерите и посмотрите, что выдает. Отсюда и надо плясать. От реала.
Ну ключиком -fsergeys писал(а):Привет! Вопрос вот в чем: как в АВРеАле ставить фузы? Понятно что надо в батник их записать= как?
Тут придётся юзать АЦП, файл прошивки исправлять - это "крутое нетрадиционное немецкое порно". Лучше для этого использовать исходник на asm или C.arhip1810 писал(а): хотелось бы сделать побольше эффектов, например как в вложенной картинке. Только проблемы с файлом прошивки, подскажите что где и как исправить чтобы было всё правильно. За много благодарен!
Код: Выделить всё
#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;
}
}