Нужна помощ ,не получаеться написать функцию дешифратора

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
edds
Встал на лапы
Сообщения: 91
Зарегистрирован: Пт авг 28, 2009 16:08:48
Откуда: г.Вязьма Смоленская обл

Нужна помощ ,не получаеться написать функцию дешифратора

Сообщение 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
Вложения
S.c
(3.65 КБ) 386 скачиваний
Реклама
Аватара пользователя
Krik99
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина
Контактная информация:

Сообщение Krik99 »

вместо if попробуй использовать switch :)
Изображение
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Гм... А чем плох массив ? Таблица дешифратора в массиве...
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение 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
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Krik99
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина
Контактная информация:

Сообщение 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; }
 }
Изображение
Реклама
Аватара пользователя
Storbox
Родился
Сообщения: 17
Зарегистрирован: Пт апр 27, 2007 08:27:10
Откуда: Москва

таблица поможет

Сообщение 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
просто и практично :)
Реклама
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

динамическая индикация делается совсем не так и никаких значений функция возвращать не должна
edds
Встал на лапы
Сообщения: 91
Зарегистрирован: Пт авг 28, 2009 16:08: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 - на щет динамической индикации, почему её так не делают, если всё работает?
Вложения
Q.c
(7.05 КБ) 277 скачиваний
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

почитайте про динамическую индикацию то, что я писал (на моем сайте) - возможно, вопросов поубавится
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

edds писал(а):Хотелось бы узнать что имел ввиду kalobyte - на щет динамической индикации, почему её так не делают, если всё работает?


Убойный аргумент , микроскопом гвозди так же получается забивать -то же работает.
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

я имел в виду, что переключение по индикаторам делается в цикле при помощи одной операции побитового сдвига
так ты потратиш меньше байт

ARV у себя на сайте про это вполне нормально написал
да и с использованием мк дешифратор тебе не нужен
можно использовать регистры на каждый индикатор и управлять по 1 или 2м проводам
если сделать динамическую индикацию, то хватит 2 регистра на 8 разрядов и 3 провода управления
edds
Встал на лапы
Сообщения: 91
Зарегистрирован: Пт авг 28, 2009 16:08:48
Откуда: г.Вязьма Смоленская обл

Сообщение edds »

Сегодня сделал с одной операцией побитового сдвига, а про регистры я знаю, просто была цель сделать всё в пределах только контроллера, без внешних элементов(активных). Это не законченое ус-во, чтоб поучиться. Проверяю в wmlab, потом сразу в железе.
Вложения
Q.c
Поправленный и урезанный.
(4.42 КБ) 373 скачивания
edds
Встал на лапы
Сообщения: 91
Зарегистрирован: Пт авг 28, 2009 16:08:48
Откуда: г.Вязьма Смоленская обл

Сообщение edds »

Каким образом грамотно прицепить в CVAVR библиотеку, например BCD?
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение 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 сегм.код.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Pooher Однако это и есть массив . Точней табличное преобразование.
А вообще зачем велосипед изобретать?
У ARV выложена прекрасная статья о индикации.
edds
Встал на лапы
Сообщения: 91
Зарегистрирован: Пт авг 28, 2009 16:08:48
Откуда: г.Вязьма Смоленская обл

Сообщение edds »

С ассемблером я ещё даж не начинал разбираться , если что не заработает не буду знать где искать..... А велосипед надо изобретать
чтобы понять как он работает.
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

dosikus писал(а):Pooher Однако это и есть массив . Точней табличное преобразование.
А вообще зачем велосипед изобретать?
У ARV выложена прекрасная статья о индикации.

А я что, говорил что это не табличное преобразование?
Велосипед я изобретать не собирался, я просто привык всё делать самостоятельно. Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Pooher писал(а):А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.
кстати, я никогда в виде статей не выкладываю каие-то законченные коды, всегда оставляю поле для самостоятельного творчества :) фундамент даю, но только без приложения собственных рук/головы с этим фундаметном ничего не сделашь... я именно в таком направлении вижу помощь в обучении тонкостям программирования.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Pooher писал(а):Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.


Чушь полная . По твоему и Fat и работу с USB и другой код , просто необходимо писать заного. Нельзя смотреть чужой, заимствовать , учится у других пусть даже на их ошибках ?
Кто же это запретил , нет я не говорю о полном слизывании чужого кода, почему нельзя использовать удачные решения и красивые куски кода ?

А что ты будешь делать если твой код один в один совпадет с чужим , притом ты его не слизывал ? Так же не будешь пользоватся ?
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Сообщение Synergetik »

Pooher писал(а):Велосипед я изобретать не собирался, я просто привык всё делать самостоятельно. Ещё ни куска чужого кода не использовал и пока не собираюсь. Есть только один источник, с которого есть смысл что-то заимствовать, и это даташит. А статьи можно бегло просматривать для уяснения основных принципов, но никак не для последующего использования чужих кодов.

Это конечно похвально. С одной строны. С другой по той же причине Вы не должны использовать в своих конструкциях МК, так как он уже кем-то изготовлен. Вы должны сначала вырастить кристалл кремний, поместить на нём логические структуры, пассивные элементы и умудриться поместить всё это в корпус 1х4 см., причём всё это чудо должно работать и причём стабильно.

На то и существуют отдельные всеобще известные блоки - и не только в электронике - которые уже можно применить для своих устройств. И не надо стыдится их использовать. Если они используются так, что можно добиться устойчивой работы, простоты и унификации схемы, то это большой плюс. А сколько бы времени Вы затратили на создание с полного нуля?

Тупо списывать весь код, разумеется, не нужно. Но использовать всем понятные и эффективные блоки можно без зазрения совести. Хотя каждый сам для себя устанавливает границы своей совести.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»