Страница 1 из 2
Нужна помощ ,не получаеться написать функцию дешифратора
Добавлено: Пт авг 28, 2009 16:38:07
edds
не получаеться написать функцию дешифратора для семисигментного индикатора ( преобразование двоичного в двоично-десятичное число и преобразование двоично-десятичного для вывода на семисигментные индикаторы. динамическая индикация)
unsigned char data( unsigned char el)
{
if(el==0){ x=0b000000 ; y=0b111111; } x,y надо вернуть в функцию main
else
if(el==1){ x=0b111100 ; y=0b111111; }
else
if(el==2){ x=0b010010 ; y=0b111110; }
else
if(el==3){ x=0b011000 ; y=0b111110; }
else
if(el==4){ x=0b101100 ; y=0b111110; }
else
if(el==5){ x=0b001001 ; y=0b111110; }
else
if(el==6){x=0b000001 ; y=0b111110; }
else
if(el==7){ x=0b011100 ; y=0b111111; }
else
if(el==8){ x=0b000000 ; y=0b111110; }
else
if(el==9){ x=0b001000 ; y=0b111110; }
Это функция для индикатора
не работает почему то...... CVAVR
Добавлено: Пт авг 28, 2009 20:22:40
Krik99
вместо if попробуй использовать switch

Добавлено: Пт авг 28, 2009 20:59:00
dosikus
Гм... А чем плох массив ? Таблица дешифратора в массиве...
Добавлено: Пт авг 28, 2009 21:22:06
sheva_s
Попробуй так
Код: Выделить всё
if(el==0){ x=0b000000 ; y=0b111111; }
if(el==1){ x=0b111100 ; y=0b111111; }
if(el==2){ x=0b010010 ; y=0b111110; }
if(el==3){ x=0b011000 ; y=0b111110; }
if(el==4){ x=0b101100 ; y=0b111110; }
if(el==5){ x=0b001001 ; y=0b111110; }
if(el==6){ x=0b000001 ; y=0b111110; }
if(el==7){ x=0b011100 ; y=0b111111; }
if(el==8){ x=0b000000 ; y=0b111110; }
if(el==9){ x=0b001000 ; y=0b111110; }
без
else
Добавлено: Пт авг 28, 2009 21:40:24
Krik99
чего вы так к этому if привязались, чем так плохо?
Код: Выделить всё
switch(el){
case 0: { x=0b000000 ; y=0b111111; break; }
case 1: { x=0b111100 ; y=0b111111; break; }
case 2: { x=0b010010 ; y=0b111110; break; }
case 3: { x=0b011000 ; y=0b111110; break; }
case 4: { x=0b101100 ; y=0b111110; break; }
case 5: { x=0b001001 ; y=0b111110; break; }
case 6: { x=0b000001 ; y=0b111110; break; }
case 7: { x=0b011100 ; y=0b111111; break; }
case 8: { x=0b000000 ; y=0b111110; break; }
case 9: { x=0b001000 ; y=0b111110; break; }
}
таблица поможет
Добавлено: Пт авг 28, 2009 21:42:16
Storbox
например...
unsigned char bin2led(unsigned char data){
const char tabl[] = {
0b00111111, //'0'
0b00000110, //'1'
0b01011011, //'2'
0b01001111, //'3'
0b01100110, //'4'
0b01101101, //'5'
0b01111101, //'6'
0b00000111, //'7'
0b01111111, //'8'
0b01101111}; //'9'
return tabl[data];
}
}
вызов bin2led(0) даёт на выходе код 0b00111111
или bin2led(4) даёт на выходе 0b01100110
просто и практично

Добавлено: Сб авг 29, 2009 06:15:03
kalobyte
динамическая индикация делается совсем не так и никаких значений функция возвращать не должна
Добавлено: Вс авг 30, 2009 06:43:48
edds
Спасибо всем кто откликнулся. Написал, получилось.
Вот этот вариант
unsigned char data(unsigned char data){
switch(el){
case 0: x=0b000000 ; y=0b111111; break;
case 1: x=0b111100 ; y=0b111111; break;
case 2: x=0b010010 ; y=0b111110; break;
case 3: x=0b011000 ; y=0b111110; break;
case 4: x=0b101100 ; y=0b111110; break;
case 5: x=0b001001 ; y=0b111110; break;
case 6: x=0b000001 ; y=0b111110; break;
case 7: x=0b011100 ; y=0b111111; break;
case 8: x=0b000000 ; y=0b111110; break;
case 9: x=0b001000 ; y=0b111110; break;
}
}
полностью рабочий, проверял в wmlab, потом в железе.
Хотелось бы узнать что имел ввиду kalobyte - на щет динамической индикации, почему её так не делают, если всё работает?
Добавлено: Вс авг 30, 2009 10:31:51
ARV
почитайте про динамическую индикацию то, что я писал (на моем сайте) - возможно, вопросов поубавится
Добавлено: Вс авг 30, 2009 11:27:56
dosikus
edds писал(а):Хотелось бы узнать что имел ввиду kalobyte - на щет динамической индикации, почему её так не делают, если всё работает?
Убойный аргумент , микроскопом гвозди так же получается забивать -то же работает.
Добавлено: Вс авг 30, 2009 12:35:03
kalobyte
я имел в виду, что переключение по индикаторам делается в цикле при помощи одной операции побитового сдвига
так ты потратиш меньше байт
ARV у себя на сайте про это вполне нормально написал
да и с использованием мк дешифратор тебе не нужен
можно использовать регистры на каждый индикатор и управлять по 1 или 2м проводам
если сделать динамическую индикацию, то хватит 2 регистра на 8 разрядов и 3 провода управления
Добавлено: Вс авг 30, 2009 13:05:05
edds
Сегодня сделал с одной операцией побитового сдвига, а про регистры я знаю, просто была цель сделать всё в пределах только контроллера, без внешних элементов(активных). Это не законченое ус-во, чтоб поучиться. Проверяю в wmlab, потом сразу в железе.
Добавлено: Вс авг 30, 2009 13:11:02
edds
Каким образом грамотно прицепить в CVAVR библиотеку, например BCD?
Добавлено: Вс авг 30, 2009 13:19:24
Pooher
По поводу дешифратора. Можно сделать ASM вставку:
Код: Выделить всё
Convert:
ldi ZL, LOW(DidGit*2)
ldi ZH, HIGH(DidGit*2)
clr r17
Conv:
cp r16, r17
breq did_Set
inc r17
rjmp conv
did_Set:
adc ZL, r16
lpm r16, Z
ret
DidGit:
;******0*****,*****1*****,******2******,****3******,...
.db 0b11011110, 0b00001100, 0b10111010, 0b10101110
.db 0b01101100, 0b11100110, 0b11110110, 0b10001100, 0xff, 0b11101110, 0b00010000
В r16 перед вызовом подпрограммы загружается десятичная цифра, после выполнения в r16 находится 7 сегм.код.
Добавлено: Вс авг 30, 2009 13:42:27
dosikus
Pooher Однако это и есть массив . Точней табличное преобразование.
А вообще зачем велосипед изобретать?
У ARV выложена прекрасная статья о индикации.
Добавлено: Вс авг 30, 2009 14:20:30
edds
С ассемблером я ещё даж не начинал разбираться , если что не заработает не буду знать где искать..... А велосипед надо изобретать
чтобы понять как он работает.
Добавлено: Вс авг 30, 2009 17:09:28
Pooher
dosikus писал(а):Pooher Однако это и есть массив . Точней табличное преобразование.
А вообще зачем велосипед изобретать?
У ARV выложена прекрасная статья о индикации.
А я что, говорил что это не табличное преобразование?
Велосипед я изобретать не собирался, я просто привык всё делать самостоятельно. Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
Добавлено: Вс авг 30, 2009 17:27:51
ARV
Pooher писал(а):А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
кстати, я никогда в виде статей не выкладываю каие-то законченные коды, всегда оставляю поле для самостоятельного творчества

фундамент даю, но только без приложения собственных рук/головы с этим фундаметном ничего не сделашь... я именно в таком направлении вижу помощь в обучении тонкостям программирования.
Добавлено: Вс авг 30, 2009 17:42:57
dosikus
Pooher писал(а):Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
Чушь полная . По твоему и Fat и работу с USB и другой код , просто необходимо писать заного. Нельзя смотреть чужой, заимствовать , учится у других пусть даже на их ошибках ?
Кто же это запретил , нет я не говорю о полном слизывании чужого кода, почему нельзя использовать удачные решения и красивые куски кода ?
А что ты будешь делать если твой код один в один совпадет с чужим , притом ты его не слизывал ? Так же не будешь пользоватся ?
Добавлено: Вс авг 30, 2009 18:24:13
Synergetik
Pooher писал(а):Велосипед я изобретать не собирался, я просто привык всё делать самостоятельно. Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
Это конечно похвально. С одной строны. С другой по той же причине Вы не должны использовать в своих конструкциях МК, так как он уже кем-то изготовлен. Вы должны сначала вырастить кристалл кремний, поместить на нём логические структуры, пассивные элементы и умудриться поместить всё это в корпус 1х4 см., причём всё это чудо должно работать и причём стабильно.
На то и существуют отдельные всеобще известные блоки - и не только в электронике - которые уже можно применить для своих устройств. И не надо стыдится их использовать. Если они используются так, что можно добиться устойчивой работы, простоты и унификации схемы, то это большой плюс. А сколько бы времени Вы затратили на создание с полного нуля?
Тупо списывать весь код, разумеется, не нужно. Но использовать всем понятные и эффективные блоки можно без зазрения совести. Хотя каждый сам для себя устанавливает границы своей совести.