Файлы  •  Ссылки  •  Прошивки  •  Правила  •  Архив  •   FAQ  •  Участники  •  Поиск
Регистрация  •  Вход

Первый проект на СИ

Список форумов» Программное обеспечение» Микроконтроллеры На страницу 1, 2  След.
АвторСообщение
lee
Участник
Сообщения: 1098




24-04-2008 13:26

Учусь делать устройства на МК. Именно – писать программы на СИ. В качестве задачи на первый проект поставил сделать динамическое управление трехразрядным семисегментным индикатором. В качестве МК хочу использовать ATiny2313. Нарисовал схему (внизу) Управление анодами вывел в порт D, катодами – в порт В. Кнопки подключил к порту А.

Логику работы думаю сделать следующую:

Основной режим работы.

Отображение 3 цифр на индикаторе из трех разрядов, которые одновременно мигают с частотой 0,5Гц.

Управление кнопками.

Устройство управляется двумя кнопками S1 (sel) и S2 (inc). При нажатии на S1 первый разряд мигает, второй и третий просто горят. При повторном нажатии S1 мигает 2 разряд, первый и третий просто горят. При третьем нажатии – третий разряд мигает, первый и второй горят. Дальше по кругу. Если в момент выбора какого либо разряда нажимать S2, происходит увеличение цифры отображаемой разрядом (0,1,2,3,4,5,6,7,8,9) по кругу. Если кнопки не нажимаются в течении 3 секунд устройство переходит в основной режим.

Показания разрядов заданные кнопками должно сохраняться при отключении питания.

Сгенерил в САVR начальный код. Таймеры никакие не конфигурировал. Сделал порт А входами с подтяжкой к Vcc, порты B ,D выходами с состоянием 1 по умолчанию. Посвятил три дня изучению литературы для создания на си программ для АВР контроллеров. Пока в голове ничего еще не отложилось структурно. Смотрел другие похожие программы для динамической индикации, запутало, что они все разные (одно и то же делается разными способами).

Вопрос: что делать дальше и как? Я не хочу чтобы кто то за меня все сделал и сказал – делай так и все будет работать. От такой науки толку будет мало. Хочу сам дойти с небольшой помощью (задаванием направления) опытных специалистов по этому делу.

/*****************************************************
Chip type : ATtiny2313
Clock frequency : 1,000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/

#include

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=P State1=P State0=P
PORTA=0x07;
DDRA=0x00;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTB=0xFF;
DDRB=0xFF;

// Port D initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTD=0x7F;
DDRD=0x7F;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

while (1)
{
// Place your code here

};
}

  схема семисегментного индикатора.jpg  55,9 КБ  Скачано: 1098 раз(а)

kuzma700
Участник
Сообщения: 237




24-04-2008 14:36

lee писал:
Смотрел другие похожие программы для динамической индикации, запутало, что они все разные (одно и то же делается разными способами).
Одно и тоже можно решить разными способами, мастера тем и отличаются от новичков, что могут писать оптимальный код. Кто что достигнет - это все очень индивидуально и приобретается с опытом, одни быстро достигают хороших результатов, а у других идет туго.Нехватка времени тоже играет свою роль.
А компилятор что говорит или еще не компилировал ?
На всякий случай большое количество исходников разных проектов для ознакомления:
http://electronix.ru/forum/index.php?act=Print&client=printer& ...
В любом случае можно поздравить с начинаниями! мир, труд, май
P.S.Сезон начался не совсем предраспологающий для копания прог. и исходников, если только погода испортиться, наверно до холодов будет низкая активность в такой теме. рёв в три ручья
GarikBaza
Новичок
Сообщения: 664




24-04-2008 15:52

lee, Принцип динамической индикации на твоем примере.
Матрица светодиодных индикаторов имеет 3 анода для каждого индикатора и 8 катодов, которые обьеденины в корпусе. Индикатор будет светится , если на соответствующий анод подать + через резистор, и но катодах сформировать логические уровни, соответствующие необходимой цифре. В одну единицу времени засвечаваем один индикатор, т.е. подаем на анод +, а на катоды - цифру для вывода.
anod_1=0;//
anod_2=0;//
anod_3=0;// тушим все символы
PORTB=seg1;//заносим в порт значение для вывода
anod_1=1;//зажигаем анод
после вывода символа необходимо некоторое время подержать напряжение на аноде, т.к. светодиод имеет некоторую задержку на жагиние ( и на потушение тоже ) , после этого снять напряжение с анода, вывести следующий символ, и зажечь второй анод
anod_1=0;
anod_2=0;
anod_3=0;
anod_4=0;
PORTB=seg2;
anod_2=1;
И так повторять по количеству индикаторов
Очень удобно делать динамическую индикацию на таймере, в аттини я использовал таймер 0, с частотой около 15 кгц. Эта частота значит, что одно прибавление таймера будет происходить раз с частотой 15 000 раз в сек. Размер таймера 8 бит (может некорректно ) . При превышении значения 255 происходит прерывание по переполнению таймера

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)

В этом прерывании и происходит вывод индикации на сегменты, по алгоритму, который я описал выше
подготовкой данных, которые выводятся на катоды, - занимается отдельная подпрограмма, она забивает значение переменной в переменные seg1 seg2 seg3 , т.е. преобразовывает 456 в seg1=4, seg2=5, seg3=6. Эти значения и выводятся на катоды.
Значения, соотв цифрам описаны как
#define char0 0b00000011 //перекодировка значения char segx для вывода на индикатор
#define char1 0b10011111
#define char2 0b00100101
#define char3 0b00001101
#define char4 0b10011001
#define char5 0b01001001
#define char6 0b01000001
#define char7 0b00011111
#define char8 0b00000001
#define char9 0b00001001

Здесь также можно определить и другие символы, а например делал бегущую надпись "on" на 3-разрядном индикаторе
Вид как у китаейской поделки помираю со смеху!

  impulsometr.JPG  49,96 КБ  Скачано: 1047 раз(а)

Vasil_
Забанен
Забанен
Сообщения: 203




24-04-2008 19:10

Замечания:
- в базы нужно поставить токоогранич. резисторы ~2k;
- в катоды ~270-300;
- регистры инициализировать в 0х00 не нужно, если они устанавливаются 0 по умолчанию по ресету.
Дин. индикацию действительно, лучше делать по таймеру (прерыванию) тогда его работа не будет зависеть от работы основной
( main ) программы, кр.того, почти всегда в программе нужнО "системное время" , в прерывании его можно тоже отсчитывать. На индикатор (включен один блок) нужно выделять ~5mS, тогда уже не видно мерцания, а яркость свечения достаточна. Поэтому, для настройки таймера необходимо определиться с тактовой частотой контроллера.
Знакогенератор я обычно размещаю во флэш(for example):

flash char znak[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
// 0 1 2 3 4 5 6 7 8 9
flash- расширение Си в IAR AVR, означает, что данные будут размещены во флэш.(не знаю, есть ли что то подобное у CVAVR)
нули в байте - подключенные катоды(сегменты)
Лучше бы на индикатор поставить сдвиговый регистр с последовательным вводом и парал. выводом, тогда не придется отдавать 7м выводов портов ( а всего 2), у тини их и так немного, но это может, потом.

Добавлено 24-04-2008 20:02

PS
В Си IAR AVR программа обычно выглядит так :
voidmain(void) // входим по ресету
{
/////
for(;подмигивание//- это не смайлик, а точка с запятой и закрывающая скобка
}
///// основной цикл
{
}

7seg.jpg



lee
Участник
Сообщения: 1098




24-04-2008 20:47

GarikBaza, то есть я в начале присваиваю значения таким образом: (как ты делал в счетчике)

#include

#define char0 0b00000011 //Определение значений с кодом цифры 0
#define char1 0b10011111
#define char2 0b00100101
#define char3 0b00001101
#define char4 0b10011001
#define anod_1 PORTD.2 //Определяем Анод первого разряда подключенного к порту D бит 2
#define anod_2 PORTD.3
#define anod_3 PORTD.4

Правильно я сделал? И правильные ли комментарии написал? Какаие переменные нужно объявить и с какой целью?

kuzma700, спасибо. Просто пришло время просто.
Сам принцип динамической индикации мне понятен. Знаю как в железе изобразить. Резисторы я опустил на схеме. Осталось научиться программы писать для МК на СИ.
GarikBaza, не очень понял, что ты писал про счетчики. То есть нужно включить один счетчик, дастоту деления сделать ему чтобы получилось 15КГц? А какой именно счетчик включать? И почему 15 КГц?
Vasil_, я сейчас хочу просто разобраться с принципами написания программ для МК на Си. Потому и выбрал такую схему простую. Портов вроде для этой задачи хватает. А навороты потом уж после курса молодого бойца будут.
GarikBaza
Новичок
Сообщения: 664




24-04-2008 21:43

lee, Таймер0 в аттини восьмибитный, т.е. имеет ширину 8 разрядов. Макс число, которое помещается в 8 разрядов - 255, 0хFF, 11111111b, при добавлении единици, происходит переполнение разрядной сетки, 0, 0х00, 00000000b, и контроллер генерирует прерывание. Преравание происходит 15000 ( частота таймера, управляется , можно менять ) разделенное на 255, ~ 0,01сек 10мс. За одно прерывание подсвечиваем один анод. За второе - второй, и так по кругу, и с частотой 58 герц обновляем цифры. Это первое. Второе. Для того, чтобы вывести чтото на индикатор с общим анодом, необходимо не только подключить аноды к питанию,- на катодах надо сформировать комбинацию высоких и низких лог уровней. В моем случае
#define char0 0b00000011 //Определение значений с кодом цифры 0
будут засвечены сегменты с лог уровнем 0 на выходе , A,B,C,D,E,F,G , сегмент Н и точка будут потушены. Эта комбинация соответствует символу "0"
ноль. Я его и oбозначил char0.
Выводы анодов, как ты правильно заметил я обозначил
#define anod_1 PORTD.2 //Определяем Анод первого разряда подключенного к порту D бит 2

Отвлекусь. Частоту таймера можно взять выше, тогда , как заметилVasil_, упадет яркость свечения. Можно взять 16-разрядный таймер тогда обновлять цифру можно раз в день помираю со смеху! .

Переменные которые я обьявлял:
counter - это и есть сама цыфра, счетчик. В ней хранится количесво прерываний, тактов, произошедших на входе int0, её размер - слово, WORD. Теоретически этот счетчик считает до 65535, но так как число индикаторов у меня было 4, то выводится только до 9999
anod_x- понятно , выход соответствующего анода на индикаторе, размер байт 8 бит
charx - это таблица перекодировки числа в понятный для индикатора и глаза символ. Если соответствующий разряд числа counter будет 0, то по таблице он перекодируется в последовательность 00000011 , и выведеное значение в порт будет не 0, а 00000011, ЧТО СООТВЕТСТВУЕТ символу 0 для семисегментного индикатора

lee,
Если у тебя инет толстый, я тебе кину книгу интересную улыбка
Vasil_
Забанен
Забанен
Сообщения: 203




24-04-2008 22:08

Картинку привел как вроде общепринятую для семисегментных индикаторв, и нумерацию битов,тоже, общепринятую- с младшего разряда и т.д., соответственно - сегмент а-0, b-1, c-2 и т.д. , тогда 0хС0(знак "0") =0b1100 0000 -сегменты g,h выключены (для ОК).
lee
Участник
Сообщения: 1098




25-04-2008 01:26

GarikBaza, а что за книга? Я тут понакачал уже их немало. Если нету, кидай буду скачивать.
GarikBaza
Новичок
Сообщения: 664




25-04-2008 12:47

Vasil_, Согласен, но как pavel-pervomaysk развел, так я писал голливудская улыбка
pavel-pervomaysk
Your editor
Сообщения: 8037




25-04-2008 14:28

Я развожу как мне удобно голливудская улыбка , а далее дело програмиста....
GarikBaza
Новичок
Сообщения: 664




25-04-2008 14:31

pavel-pervomaysk, Это точно , еб****и подкидываешь стопудово одобряю

Добавлено 25-04-2008 13:32

помираю со смеху!
Vasil_
Забанен
Забанен
Сообщения: 203




26-04-2008 15:41

pavel-pervomaysk, GarikBaza, хорошо вам голливудская улыбка
Нехочу быть неправильно понятым, но сам это проходил, пока не подсказали и не рассказали.
Но на это нужно много времени, даже при общении живьем, а не стучании по клаве. Поэтому, это не совсем 1:1, что в ТЗ,
но похоже.
Кварц оставил внешний, лень было читать даташит про внутренний генератор, да и макетка с кварцем и контроллнром имелась готовая.
Мигает тоже по другому, все свется- мигает привыборе. Дальше можно разбираться и подстраивать,и переделывать, как самому хочется, бум считать, что это- "болванка". Прокомментил сколько мог(полный коммент- в архиве). Что не понятно- отвечу.Вобще то Си тем хорош, в частности, что если правильно давать имена ф-циям и переменным, можно обойтись минимумом комментов, но и не делать их слишком длинными, иначе читается плохо.
Может где и ошибки есть, но в целом, работает. Наверное можно исходник и под Кодевижн переделать, но это уже выше моих сил улыбка, хотя было бы интересно сравнить размер кода. Прошивка в архиве indicator.hex .При первом включении, сли ЕЕПРОМ пустая -0xFF,
на индикаторе-кракозябры, -кнопками вводим что хочем.

Добавлено 26-04-2008 15:48

ЗЫ, вобще то стараюсь не показывать свою писанину т.к. не уверен, что она соответствует правилам хорошего тона.
Поэтому, лицензионное соглашение,- используйте на свой страх и риск, я не несу никакой ответственноси за возможно причиненный материальный и моральный ущерб Нет голливудская улыбка

  Indicator.rar  174,28 КБ  Скачано: 840 раз(а)

GarikBaza
Новичок
Сообщения: 664




26-04-2008 16:46

Vasil_, Мы созванивались и списывались.Но дело срочное было... На обдумывание времени небыло.
lee,

Управление кнопками.

Устройство управляется двумя кнопками S1 (sel) и S2 (inc). При нажатии на S1 первый разряд мигает, второй и третий просто горят. При повторном нажатии S1 мигает 2 разряд, первый и третий просто горят. При третьем нажатии – третий разряд мигает, первый и второй горят. Дальше по кругу. Если в момент выбора какого либо разряда нажимать S2, происходит увеличение цифры отображаемой разрядом (0,1,2,3,4,5,6,7,8,9) по кругу. Если кнопки не нажимаются в течении 3 секунд устройство переходит в основной режим

По порядку .
По поводу кнопок, необходимо сделать антидребезг, в твоем случае проще всего програмно подождать 50 мс, и снова проверить состояние кнопки.
По поводу мигает. Тут напрашивается запуск Таймер1, для мигания, а типа 3 секунды можно взять как 6 миганий, если 0.25сек, два мырга в секунду
Про запись в еепром в кодвижине очень просто, обычное присваивание, компилятор все делает сам
lee
Участник
Сообщения: 1098




27-04-2008 21:43

Vasil_, а что за библиотека у тебя в JAR ? Какая аналогичная в CVAVR?
Vasil_, Как переделать запись в EEPROM для CVAVR?:
_EEPUT(0,ind[0]); // запись в еепром

Добавлено 27.04.2008 21:52

Вообще, друзья, у меня сложилось мнение, что программирование аналогично электроннике. Вначале и достаточно долго начинающий в электроннике копирует другие (чужие) схемы, включает их и отлаживает в работе. При этом он в состоянии сам сделать только простейшую схему, подключить светодиод к батарейке напимер. Затем, с накоплением достаточного опыта копирования чужих схем и осознавания принципа их построения и работы, новичек начинает уже самостоятельно разрабатывать свои сложные схемы. Так что, наверное, начну с программы Vasil_, зашью ее в МК. Поиграюсь (например попробую подключить не три разряда, а 4 и тп). Да, посоветуйте, как лучше новичку научиться переводить значения из одного типа счисления в другие. Или нужно просто один раз выучить наизусть? Или может Вы калькуляторы какие используете?
AlexM
Участник
Сообщения: 883




28-04-2008 09:14

Здесь, что то похожее человек делает.
http://electronix.ru/forum/index.php?showtopic=46956
Vasil_
Забанен
Забанен
Сообщения: 203




28-04-2008 09:41

ina90.h это хэдер - заголовочный файл, к- рый подлючает еще два хедера,
это текстовые фалы, приатачил, посмотри аналоги в Кодевижн.
Си хорош еще тем, что станартизирован- ANSI C
http://ru.wikipedia.org/wiki/ANSI_C
но вот расширения каждый производитель компиляторовделает свои.
В кодевижн не знаю, может ребята подскажут?. По идее в хэлпах жолжно быть на счет еепром.
GarikBaza,=> "....Про запись в еепром в кодвижине очень просто, обычное присваивание, компилятор все делает сам"
Не агитирую, но если надумаешь скачать, зашлю инструкции в личку,
проверил, ссылка пока живА:
h**p://rapidshare.com/files/29376896/ewavr-ev-228a.rar.html
Он конечно старенький, на сегодня уже v5.10а но мне хватает, да и в мой древний
ноут более новые версии просто не влазят, кстати, у IAR неплохой хэлп, правда, на аглицком.
Что касается, как лучше учить, то у меня на чужих примерах, здесь вот собраны апликухи:
http://www.gaw.ru/html.cgi/txt/app/micros/avr/index.htm
Калькулятор- обычный виндовс, только переключить вид-инженерный.
Иногда Hpmbcalc пришлось тут CRC16 ModBus_а вручную считать
//Функцию key() в индикаторе второй раз вызывать не надо.
// при первом нажатии кнопки sel начинает мгать первым ind 1(средний), попробуй сам исправить.
Добавлено 28-04-2008 09:51

Да вот, в 2.28 нет Тини 2313, приходится недостаюшие регистры ему руками прописывать, но это не смертельно.
ЗЫ, в данном проекте они не понадобились

ew.jpg


  headers.rar  5,81 КБ  Скачано: 709 раз(а)

GarikBaza
Новичок
Сообщения: 664




28-04-2008 11:55

Vasil_, я скачал уже 5.10а и вылечил от жадности. Вопрос в том что трудно начать с другой среды, если привык к кодвижину
Vasil_
Забанен
Забанен
Сообщения: 203




28-04-2008 15:44

GarikBaza, да я тоже скачал, только там вроде с лекарством какие то проблемы, поэтому, в частности, не устанавливал пока.
Мож скинешь пилюлю в почту?
Получилось (оптимизация по умолчанию):
IAR v2.28a 667 байт
CVAVR 1.25.8 Standard 763 байта - запутли меня румыны с еепромом недовольство, огорчение

  CVAVR_ind.rar  43,09 КБ  Скачано: 767 раз(а)

GarikBaza
Новичок
Сообщения: 664




28-04-2008 17:46

Vasil_, Лекарство в мыле.
Кодвижин выполняет ПОЛНУЮ инициализацию контроллера. Т.е. не оставляет НИОДНОГО неинициализированого регистра, переменной, полностью инициализируется ОЗУ. За счет этого получается больше размер, НО, но , и защита от случайного изменения данных.

Добавлено 28-04-2008 16:48

Я уже перенес твой проэкт на Кодвижин. Он у lee
Vasil_
Забанен
Забанен
Сообщения: 203




28-04-2008 18:49

GarikBaza, спасибо, полез в мыло.
Да вот, там в приатаченом выше файле строка
unsigned char eeprom *adr_eeprom=0;
по ошибке прописана дважды, но если хоть одну запись удалить, то или ругается компилятор, то или работа с еепром происходит не правильно, я не знаю, как это понимать
ЗЫ ивотэто:
for(*adr_eeprom=0;*adr_eeprom тоже не работает
AlexM
Участник
Сообщения: 883




28-04-2008 21:39

О как, В начале
Vasil_ писал:

Си хорош еще тем, что стандартизирован


А после , караул
Цитата:

то или ругается компилятор, то или работа с еепром происходит не правильно, я не знаю, как это понимать


голливудская улыбка

А вот с "плохим" ассемблером такого не происходит. улыбка
GarikBaza
Новичок
Сообщения: 664




28-04-2008 22:16

AlexM, ты неправ. Отличие Кодвижина от ИАР в том, что он с большим напрягом работает с указателями
Vasil_, Я не стал испытывать судьбу и выдрал _EEPUT из io2313.h , переделал под кодвижин, и написал асмовые вставки вместо _CLI(),_SEI(). А так все пошло без проблем
Vasil_
Забанен
Забанен
Сообщения: 203




29-04-2008 06:50

GarikBaza, голливудская улыбка , когда аттачил хэдеры, подумал, -зачем оно надо? Ты пошел правильным путем, а я установил КодеВижн улыбка.
AlexM, сколько людей, столько и мнений, к тому же, эти прибамбасы относятся к "расширениям Си", а там у каждого производителя свои "тараканы". В CVAVR интерфейс редактирования листинга мне показался более приятным, чем в IAR (не знаю, как там у них в более поздних версиях). Наверное, с ассемблера нужно начинать чтобы прочувствовать весь процесс. Но это, пока проект небольшой и есть время играться, ну и т.д., это уже тыщу раз везде обсуждалось
GarikBaza
Новичок
Сообщения: 664




29-04-2008 09:18

Vasil_, В кодвижене есть встроеный в оболочку програматор и терминал. Еще кодвижин хорош своим визардом инициализации, щелчками мыши определяешь всю конфигурацию периферии.
Что то lee притих, может чтото получается?...
tester33
Участник
Сообщения: 34




15-05-2008 12:30

Уважаемые!
Посмотрите в сторону WinAVR (AVR-GCC).
Такой же мощный как и IAR, но совершенно бесплатно.
Множество буржуйских примеров (буржуины не любят выставлять софт написанный с помощью платного софта), книжка на русском.
CVAVR же, для начинающих, слаб и немощен, хотя и со сладкими приманом (смотри выше).
AlexM
Участник
Сообщения: 883




15-05-2008 13:56

tester33 писал:
Уважаемые!
Посмотрите в сторону WinAVR (AVR-GCC).
Такой же мощный как и IAR, но совершенно бесплатно.
..., книжка на русском.
.


Какую книгу Вы имеете ввиду?
tester33
Участник
Сообщения: 34




16-05-2008 03:11

Программирование на языке C для AVR и PIC, Шпак Ю.А.
Микроконтроллеры AVR. Ступень 1....10 С.М. Рюмик, г. Чернигов

Все гуглится.
GarikBaza
Новичок
Сообщения: 664




16-05-2008 11:26

Я ж вылаживал книги, и ссылку, где их слить можно не напрягаясь http://monitor.net.ru/forum/viewtopic.php?t=217538
Krik99
Участник
Сообщения: 57




16-05-2008 14:36

Для начала Вы выбрали сложную задачу. попробуйте сделайте гирлянду например для начала. Я вот когда изучал МК и делал термометр , мне очень помог вот этот код, там и мой код есть. Не подумайте что реклама. http://www.radiokot.ru/forum/viewtopic.php?t=1344&start=40
Может поможет. улыбка
GarikBaza
Новичок
Сообщения: 664




16-05-2008 22:24

Krik99, Никто рекламой это не считает. Раздел развивается. Я сам туда периодически захожу. Иногда есть интересные вещи
Vasil_
Забанен
Забанен
Сообщения: 203




17-05-2008 12:07

Рано или поздно становится жалко раздавать порты на сегменты, один из способов- поставить регистр с посл. вводом и парал. выводом.
Например, 74НС164 , можно 595. Немного изменил схему и код, он конечно немного вырос, и немного увеличилось время выполнения, зато высвободилось 6ть ног. Загрузка регистра выполняется программно, но если SPI не задействован, то можно это поручить ему, т.е. сделать аппаратно (специально вывел на его ноги), уменьшится и размер кода и время.
Достаточно добавить/зарэмить те же строки и в исходнике Кодевижн- и все, на то он и Си.

Изменение размера ind_2.JPG


  ind_2.rar  16,06 КБ  Скачано: 779 раз(а)

GarikBaza
Новичок
Сообщения: 664




17-05-2008 15:31

Krik99, помираю со смеху! помираю со смеху! помираю со смеху!
Только заметил, твоя ссылка прям на мой пост
http://www.radiokot.ru/forum/viewtopic.php?t=1344&start=40
Список форумов» Программное обеспечение» Микроконтроллеры» Первый проект на СИ На страницу 1, 2  След.
Перейти:  
Текущий раздел» Программное обеспечение» Микроконтроллеры (Микроконтроллеры - AVR-ы, PIC-и и другие)


Похожая информация:
  • Первый серьезный проект на PIC или AVR.








  • Информация по ремонту для специалистов - справочники, инструкции, энциклопедия, советы и секреты ремонта,  настройка, сервисные режимы
    Powered by phpBB 2.0.18 © 2001, 2002 phpBB Group!