Мелкие вопросы по МК и ПЛИС.
Да и так в 3064 впишется, на задачу уйдет где-то 26 LC. Можно, конечно, 4 LC сэкономить, если сделать сдвиговый регистр.
- Реклама
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
я на словах это понимаю,а как кодом это запишется? можете подсказать? а дат, это просто входные сигналы,их можно использовать) решил указать сразу все)

как понимать отмеченное слово в данном предложении ? может это опечатка ?
источник http://www.gaw.ru/html.cgi/txt/doc/micr ... 10_0_5.htm
Tell Me The Truth
- Сообщения: 155
- Зарегистрирован: Вс июн 27, 2010 17:24:13
Здравствуйте, возникла проблема. Нужно подключить семисегментник mega8 но с нестандартным подключение к портам.(со стандартным всё подключается) схема прилагается в протеусе. а архиве исходник и проект протеус. проблема - не выводятся сегменты подключённые к портуД, но аноды переключаются. перепробовал много вариантов и уже заплутался. Подскажите в чём может быть проблема. Заранее спасибо.
- Вложения
-
- test - копия.rar
- (35.5 КБ) 144 скачивания
Чем это смущает? Порог сравнения, он и есть порог... хоть и цифровой.может это опечатка ?
Порт D настроен на вывод? Что-то сомнение берет способ инициализации...не выводятся сегменты подключённые к портуД
- Реклама
- Сообщения: 155
- Зарегистрирован: Вс июн 27, 2010 17:24:13
Код: Выделить всё
void outputLED(char data)откуда функции знать чему равен cnt_led если вы его ей не посылаете, а посылаете всего лишь элемент массива(какой он по счету функция не догадаться не сможет)?
Код: Выделить всё
//global routine
void outputLED(char kathode, char anode)
{
//outputLED routine
if(kathode & (1 << 0))//a
SetBit(PORTD,6);
//outputLED routine
if (anode==0)
SetBit(LED_KAT_PORT,k1);
}
//global routine
ISR (TIMER0_OVF_vect)
{
//interrupt routine
outputLED(led_buffer[cnt_led], cnt_led);
}где катоды а где аноды разбирайтесь сами, а то у вас в коде фигурируют катоды, а в комментарии аноды
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Регистр хранит "пороговое значение" (число в двоичном виде, Alexeyslav уже написалFreshMan писал(а):как понимать отмеченное слово в данном предложении ? может это опечатка ?
Обычно под пороговым значением понимается величина, до этого значения, так сказать, одно состояние, после - другое.
Чтобы определить "до" или "после" надо сравнить это пороговое значение с отслеживаемой величиной (в этом случае со значением счётчика).
По смыслу, вроде, ничего не противоречит. Но перевод "кривоват", звучит не очень.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
Ребят,помогите пожалуйста.Nevox писал(а):я на словах это понимаю,а как кодом это запишется? можете подсказать?
- Сообщения: 155
- Зарегистрирован: Вс июн 27, 2010 17:24:13
unalex писал(а):и в теле этой функции зажигаете разрядыКод: Выделить всё
void outputLED(char data)
откуда функции знать чему равен cnt_led если вы его ей не посылаете, а посылаете всего лишь элемент массива(какой он по счету функция не догадаться не сможет)?Код: Выделить всё
//global routine void outputLED(char kathode, char anode) { //outputLED routine if(kathode & (1 << 0))//a SetBit(PORTD,6); //outputLED routine if (anode==0) SetBit(LED_KAT_PORT,k1); } //global routine ISR (TIMER0_OVF_vect) { //interrupt routine outputLED(led_buffer[cnt_led], cnt_led); }
где катоды а где аноды разбирайтесь сами, а то у вас в коде фигурируют катоды, а в комментарии аноды
переменная cnt_led объявлена как глобальна. с ней проблем и не было, аноды переключаются правильно. но я попробовал как вы говорили - результат тот же...
я думаю что когда я выполняю команду SetBit(LED_KAT_PORT,k1) у меня стирается значение порта которое выставлялось при помощи команды SetBit(PORTD,6) и горит только анод. но на анализаторе я это не заметил.
Если на словах Вы действительно понимаете(Вы так написали), а проблемы только с кодом - предлагаю Вам начать с составления схемы на логических элементах. Можно использовать счетчики, триггеры. По результату все вместе напишем код.Nevox писал(а):Ребят,помогите пожалуйста.
Ставим плюсы: )
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
вот допустим я прочитал одну статью и написал код, чтобы лампочка моргала,раз в какое-то время(при 0 у меня лампочка горит,при 1 гаснет):ibiza11 писал(а):По результату все вместе напишем код.
Код: Выделить всё
module test(CLOCK,IN);
input wire CLOCK;
output reg [15:0] IN;
reg [15:0] counter;
localparam F = 50; // тактовая частота в Гц
// временнЫе интервалы в миллисекундах
localparam t1 = 1000/(20*F), // необходимо пересчитать время для "0"
t2 = t1; // и "1", времена равны поскольку импульс типа "меандр"
// моменты времени в "тиках" тактовой частоты
localparam n1 = 1, // для нулевого момента времени, уровень "0"
n2 = n1 + t1 *F, // для момента времени где заканчивается "0", затем перейдёт в "1"
n3 = n2 + t2 *F; // конец "1", снова будет "0"
always @(posedge CLOCK) // работать по положительному фронту импульса
begin
if(counter == n3)
counter <= 0; // сброс счётчика при совпадении с конечным моментом времени (n3)
else
counter <= counter + 1; // иначе инкремент счётчика
case (counter)
n1: IN [15:0] <= 16'b1; // формируем "0" на выходе
n2: IN [15:0] <= 16'b0; // формируем "1" на выходе
default IN [15:0] <= 16'b1; // по умолчанию, если что-то не так, выводим "0"
endcase
end
endmoduleнееет. проблема в том, что Вы не понимаете как работает этот код, да и вообще либо статья не годная, либо Вы и её не поняли.Nevox писал(а):проблема в том,что моргает только первая лампочка
В коде проблем нет, как написалино, так и работает.
Ставим плюсы: )
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
Так я не тупо код скопировал,я его поправил, уже разобрался почему работал только 1 канал. Дальше буду думать,как зажигать каналы по очереди.ibiza11 писал(а):В коде проблем нет, как написалино, так и работает.
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
вот,если кому интересно,написал последовательное включение лампочек.
Код: Выделить всё
module test (CLOCK,IN);
input wire CLOCK;
output reg [15:0] IN;
reg [15:0] counter;
localparam F = 50;
localparam t1 = 1000/(20*F),
t2 = t1;
localparam n1 = t1 *F,
n2 = n1 + t1 *F,
n3 = n2 + t2 *F,
n4 = n3 + t2 *F,
n5 = n4 + t2 *F,
n6 = n5 + t2 *F,
n7 = n6 + t2 *F,
n8 = n7 + t2 *F,
n9 = n8 + t2 *F,
n10 = n9 + t2 *F,
n11 = n10 + t2 *F,
n12 = n11 + t2 *F,
n13 = n12 + t2 *F,
n14 = n13 + t2 *F,
n15 = n14 + t2 *F,
n16 = n15 + t2 *F;
always @(posedge CLOCK)
begin
if(counter == n16)
counter <= 0;
else
counter <= counter + 1;
case (counter)
n1: IN [15:0] <= 16'b1111111111111110;
n2: IN [15:0] <= 16'b1111111111111101;
n3: IN [15:0] <= 16'b1111111111111011;
n4: IN [15:0] <= 16'b1111111111110111;
n5: IN [15:0] <= 16'b1111111111101111;
n6: IN [15:0] <= 16'b1111111111011111;
n7: IN [15:0] <= 16'b1111111110111111;
n8: IN [15:0] <= 16'b1111111101111111;
n9: IN [15:0] <= 16'b1111111011111111;
n10: IN [15:0] <= 16'b1111110111111111;
n11: IN [15:0] <= 16'b1111101111111111;
n12: IN [15:0] <= 16'b1111011111111111;
n13: IN [15:0] <= 16'b1110111111111111;
n14: IN [15:0] <= 16'b1101111111111111;
n15: IN [15:0] <= 16'b1011111111111111;
n16: IN [15:0] <= 16'b0111111111111111;
default IN [15:0] <= 16'b1111111111111111;
endcase
end
endmodule
всем привет
решил собрать дозиметр микрон-1
возник вопрос-что нужно прошивать в первую очередь флэш или eeprom? или не имеет значения?
решил собрать дозиметр микрон-1
возник вопрос-что нужно прошивать в первую очередь флэш или eeprom? или не имеет значения?
молодчина!Nevox писал(а):вот,если кому интересно,написал последовательное включение лампочек.
Ставим плюсы: )
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
и мне тоже


