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

  • lee
1
L
lee
  • 24 Апр 2008
1
Учусь делать устройства на МК. Именно – писать программы на СИ. В качестве задачи на первый проект поставил сделать динамическое управление трехразрядным семисегментным индикатором. В качестве МК хочу использовать 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 <tiny2313.h>

// 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

};
}

_________________________________358.jpg
 
2
K
kuzma700
  • 24 Апр 2008
2
lee сказал(а):
Смотрел другие похожие программы для динамической индикации, запутало, что они все разные (одно и то же делается разными способами).
Одно и тоже можно решить разными способами, мастера тем и отличаются от новичков, что могут писать оптимальный код. Кто что достигнет - это все очень индивидуально и приобретается с опытом, одни быстро достигают хороших результатов, а у других идет туго.Нехватка времени тоже играет свою роль.
А компилятор что говорит или еще не компилировал ?
На всякий случай большое количество исходников разных проектов для ознакомления:
 ссылка скрыта от публикации 
В любом случае можно поздравить с начинаниями! :flag:
P.S.Сезон начался не совсем предраспологающий для копания прог. и исходников, если только погода испортиться, наверно до холодов будет низкая активность в такой теме. :cry:
 

Информация Неисправность Прошивки Схемы Справочники Маркировка Корпуса Сокращения и аббревиатуры Частые вопросы Полезные ссылки

  • Справочная информация

    Этот блок для тех, кто впервые попал на страницы нашего сайта. В форуме рассмотрены различные вопросы возникающие при ремонте бытовой и промышленной аппаратуры. Всю предоставленную информацию можно разбить на несколько пунктов:

    • Диагностика
    • Определение неисправности
    • Выбор метода ремонта
    • Поиск запчастей
    • Устранение дефекта
    • Настройка

    Учитывайте, что некоторые неисправности являются не причиной, а следствием другой неисправности, либо не правильной настройки. Подробную информацию Вы найдете в соответствующих разделах.

  • Неисправности

    Все неисправности по их проявлению можно разделить на два вида - стабильные и периодические. Наиболее часто рассматриваются следующие:

    • не включается
    • не корректно работает какой-то узел (блок)
    • периодически (иногда) что-то происходит

    Если у Вас есть свой вопрос по определению дефекта, способу его устранения, либо поиску и замене запчастей, Вы должны создать свою, новую тему в соответствующем разделе.
  • О прошивках

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

    На сайте существуют разделы с прошивками (дампами памяти) для микросхем, либо для обновления ПО через интерфейсы типа USB.


    По вопросам прошивки Вы должны выбрать раздел для вашего типа аппарата, иначе ответ и сам файл Вы не получите, а тема будет удалена.
  • Схемы аппаратуры

    Начинающие ремонтники часто ищут принципиальные схемы, схемы соединений, пользовательские и сервисные инструкции. Это могут быть как отдельные платы (блоки питания, основные платы, панели), так и полные Service Manual-ы. На сайте они размещены в специально отведенных разделах и доступны к скачиванию гостям, либо после создания аккаунта:


    Внимательно читайте описание. Перед запросом схемы или прошивки произведите поиск по форуму, возможно она уже есть в архивах. Поиск доступен после создания аккаунта.
  • Справочники

    На сайте Вы можете скачать справочную литературу по электронным компонентам (справочники, таблицу аналогов, SMD-кодировку элементов, и тд.).


    Информация размещена в каталогах, файловых архивах, и отдельных темах, в зависимости от типов элементов.

  • Marking (маркировка) - обозначение на электронных компонентах

    Современная элементная база стремится к миниатюрным размерам. Места на корпусе для нанесения маркировки не хватает. Поэтому, производители их маркируют СМД-кодами.


  • Package (корпус) - вид корпуса электронного компонента

    При создании запросов в определении точного названия (партномера) компонента, необходимо указывать не только его маркировку, но и тип корпуса. Наиболее распостранены:

    • DIP (Dual In Package) – корпус с двухрядным расположением контактов для монтажа в отверстия
    • SOT-89 - пластковый корпус для поверхностного монтажа
    • SOT-23 - миниатюрный пластиковый корпус для поверхностного монтажа
    • TO-220 - тип корпуса для монтажа (пайки) в отверстия
    • SOP (SOIC, SO) - миниатюрные корпуса для поверхностного монтажа (SMD)
    • TSOP (Thin Small Outline Package) – тонкий корпус с уменьшенным расстоянием между выводами
    • BGA (Ball Grid Array) - корпус для монтажа выводов на шарики из припоя

  • Краткие сокращения

    При подаче информации, на форуме принято использование сокращений и аббревиатур, например:

      Сокращение   Краткое описание
    LEDLight Emitting Diode - Светодиод (Светоизлучающий диод)
    MOSFETMetal Oxide Semiconductor Field Effect Transistor - Полевой транзистор с МОП структурой затвора
    EEPROMElectrically Erasable Programmable Read-Only Memory - Электрически стираемая память
    eMMCembedded Multimedia Memory Card - Встроенная мультимедийная карта памяти
    LCDLiquid Crystal Display - Жидкокристаллический дисплей (экран)
    SCLSerial Clock - Шина интерфейса I2C для передачи тактового сигнала
    SDASerial Data - Шина интерфейса I2C для обмена данными
    ICSPIn-Circuit Serial Programming – Протокол для внутрисхемного последовательного программирования
    IIC, I2CInter-Integrated Circuit - Двухпроводный интерфейс обмена данными между микросхемами
    PCBPrinted Circuit Board - Печатная плата
    PWMPulse Width Modulation - Широтно-импульсная модуляция
    SPISerial Peripheral Interface Protocol - Протокол последовательного периферийного интерфейса
    USBUniversal Serial Bus - Универсальная последовательная шина
    DMADirect Memory Access - Модуль для считывания и записи RAM без задействования процессора
    ACAlternating Current - Переменный ток
    DCDirect Current - Постоянный ток
    FMFrequency Modulation - Частотная модуляция (ЧМ)
    AFCAutomatic Frequency Control - Автоматическое управление частотой

  • Частые вопросы

    Как мне дополнить свой вопрос по теме Первый проект на СИ?

    После регистрации аккаунта на сайте Вы сможете опубликовать свой вопрос или отвечать в существующих темах. Участие абсолютно бесплатное.

    Кто отвечает в форуме на вопросы ?

    Ответ в тему Первый проект на СИ как и все другие советы публикуются всем сообществом. Большинство участников это профессиональные мастера по ремонту и специалисты в области электроники.

    Как найти нужную информацию по форуму ?

    Возможность поиска по всему сайту и файловому архиву появится после регистрации. В верхнем правом углу будет отображаться форма поиска по сайту.

    По каким еще маркам можно спросить ?

    По любым. Наиболее частые ответы по популярным брэндам - LG, Samsung, Philips, Toshiba, Sony, Panasonic, Xiaomi, Sharp, JVC, DEXP, TCL, Hisense, и многие другие в том числе китайские модели.

    Какие еще файлы я смогу здесь скачать ?

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


  • Здесь просто полезные ссылки для мастеров. Ссылки периодически обновляемые, в зависимости от востребованности тем.



3
G
GarikBaza
  • 24 Апр 2008
3
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-разрядном индикаторе
Вид как у китаейской поделки :lol:

impulsometr_140.jpg
 
4
V
Vasil_
Забанен
  • 24 Апр 2008
4
Замечания:
- в базы нужно поставить токоогранич. резисторы ~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_210.jpg
 
5
L
lee
  • 24 Апр 2008
5
GarikBaza, то есть я в начале присваиваю значения таким образом: (как ты делал в счетчике)

#include <tiny2313.h>

#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_, я сейчас хочу просто разобраться с принципами написания программ для МК на Си. Потому и выбрал такую схему простую. Портов вроде для этой задачи хватает. А навороты потом уж после курса молодого бойца будут.
 
6
G
GarikBaza
  • 24 Апр 2008
6
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-разрядный таймер тогда обновлять цифру можно раз в день :lol: .

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

lee,
Если у тебя инет толстый, я тебе кину книгу интересную :)
 
7
V
Vasil_
Забанен
  • 24 Апр 2008
7
Картинку привел как вроде общепринятую для семисегментных индикаторв, и нумерацию битов,тоже, общепринятую- с младшего разряда и т.д., соответственно - сегмент а-0, b-1, c-2 и т.д. , тогда 0хС0(знак "0") =0b1100 0000 -сегменты g,h выключены (для ОК).
 
8
L
lee
  • 25 Апр 2008
8
GarikBaza, а что за книга? Я тут понакачал уже их немало. Если нету, кидай буду скачивать.
 
9
G
GarikBaza
  • 25 Апр 2008
9
Vasil_, Согласен, но как pavel-pervomaysk развел, так я писал :mrgreen:
 
10
P
pavel-pervomaysk
Команда форума
  • 25 Апр 2008
10
Я развожу как мне удобно :mrgreen: , а далее дело програмиста....
 
11
G
GarikBaza
  • 25 Апр 2008
11
pavel-pervomaysk, Это точно , еб****и подкидываешь :stopud: :up:

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

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

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

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

Indicator.rar
 
13
G
GarikBaza
  • 26 Апр 2008
13
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сек, два мырга в секунду
Про запись в еепром в кодвижине очень просто, обычное присваивание, компилятор все делает сам
 
14
L
lee
  • 27 Апр 2008
14
Vasil_, а что за библиотека <ina90.h> у тебя в JAR ? Какая аналогичная в CVAVR?
Vasil_, Как переделать запись в EEPROM для CVAVR?:
_EEPUT(0,ind[0]); // запись в еепром

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

Вообще, друзья, у меня сложилось мнение, что программирование аналогично электроннике. Вначале и достаточно долго начинающий в электроннике копирует другие (чужие) схемы, включает их и отлаживает в работе. При этом он в состоянии сам сделать только простейшую схему, подключить светодиод к батарейке напимер. Затем, с накоплением достаточного опыта копирования чужих схем и осознавания принципа их построения и работы, новичек начинает уже самостоятельно разрабатывать свои сложные схемы. Так что, наверное, начну с программы Vasil_, зашью ее в МК. Поиграюсь (например попробую подключить не три разряда, а 4 и тп). Да, посоветуйте, как лучше новичку научиться переводить значения из одного типа счисления в другие. Или нужно просто один раз выучить наизусть? Или может Вы калькуляторы какие используете?
 
15
A
AlexM
  • 28 Апр 2008
15
Здесь, что то похожее человек делает.
 ссылка скрыта от публикации 
 
16
V
Vasil_
Забанен
  • 28 Апр 2008
16
ina90.h это хэдер - заголовочный файл, к- рый подлючает еще два хедера,
это текстовые фалы, приатачил, посмотри аналоги в Кодевижн.
Си хорош еще тем, что станартизирован- ANSI C
 ссылка скрыта от публикации 
но вот расширения каждый производитель компиляторовделает свои.
В кодевижн не знаю, может ребята подскажут?. По идее в хэлпах жолжно быть на счет еепром.
GarikBaza,=> "....Про запись в еепром в кодвижине очень просто, обычное присваивание, компилятор все делает сам"
Не агитирую, но если надумаешь скачать, зашлю инструкции в личку,
проверил, ссылка пока живА:
h**p://rapidshare.com/files/29376896/ewavr-ev-228a.rar.html
Он конечно старенький, на сегодня уже v5.10а но мне хватает, да и в мой древний
ноут более новые версии просто не влазят, кстати, у IAR неплохой хэлп, правда, на аглицком.
Что касается, как лучше учить, то у меня на чужих примерах, здесь вот собраны апликухи:
 ссылка скрыта от публикации 
Калькулятор- обычный виндовс, только переключить вид-инженерный.
Иногда Hpmbcalc пришлось тут CRC16 ModBus_а вручную считать
//Функцию key() в индикаторе второй раз вызывать не надо.
// при первом нажатии кнопки sel начинает мгать первым ind 1(средний), попробуй сам исправить.
Добавлено 28-04-2008 09:51

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

ew_115.jpg


headers.rar
 
17
G
GarikBaza
  • 28 Апр 2008
17
Vasil_, я скачал уже 5.10а и вылечил от жадности. Вопрос в том что трудно начать с другой среды, если привык к кодвижину
 
18
V
Vasil_
Забанен
  • 28 Апр 2008
18
GarikBaza, да я тоже скачал, только там вроде с лекарством какие то проблемы, поэтому, в частности, не устанавливал пока.
Мож скинешь пилюлю в почту?
Получилось (оптимизация по умолчанию):
IAR v2.28a 667 байт
CVAVR 1.25.8 Standard 763 байта - запутли меня румыны с еепромом :(

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

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

Я уже перенес твой проэкт на Кодвижин. Он у lee
 
20
V
Vasil_
Забанен
  • 28 Апр 2008
20
GarikBaza, спасибо, полез в мыло.
Да вот, там в приатаченом выше файле строка
unsigned char eeprom *adr_eeprom=0;
по ошибке прописана дважды, но если хоть одну запись удалить, то или ругается компилятор, то или работа с еепром происходит не правильно, я не знаю, как это понимать :pain25:
ЗЫ ивотэто:
for(*adr_eeprom=0;*adr_eeprom<2;*adr_eeprom++)ind[*adr_eeprom]=*adr_eeprom;
тоже не работает
 
21
A
AlexM
  • 28 Апр 2008
21
О как, В начале
Vasil_ сказал(а):
Си хорош еще тем, что стандартизирован

А после , караул

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

:mrgreen:

А вот с "плохим" ассемблером такого не происходит. :)
 
22
G
GarikBaza
  • 28 Апр 2008
22
AlexM, ты неправ. Отличие Кодвижина от ИАР в том, что он с большим напрягом работает с указателями
Vasil_, Я не стал испытывать судьбу и выдрал _EEPUT из io2313.h , переделал под кодвижин, и написал асмовые вставки вместо _CLI(),_SEI(). А так все пошло без проблем
 
23
V
Vasil_
Забанен
  • 29 Апр 2008
23
GarikBaza, :mrgreen: , когда аттачил хэдеры, подумал, -зачем оно надо? Ты пошел правильным путем, а я установил КодеВижн :).
AlexM, сколько людей, столько и мнений, к тому же, эти прибамбасы относятся к "расширениям Си", а там у каждого производителя свои "тараканы". В CVAVR интерфейс редактирования листинга мне показался более приятным, чем в IAR (не знаю, как там у них в более поздних версиях). Наверное, с ассемблера нужно начинать чтобы прочувствовать весь процесс. Но это, пока проект небольшой и есть время играться, ну и т.д., это уже тыщу раз везде обсуждалось
 
24
G
GarikBaza
  • 29 Апр 2008
24
Vasil_, В кодвижене есть встроеный в оболочку програматор и терминал. Еще кодвижин хорош своим визардом инициализации, щелчками мыши определяешь всю конфигурацию периферии.
Что то lee притих, может чтото получается?...
 
25
T
tester33
  • 15 Май 2008
25
Уважаемые!
Посмотрите в сторону WinAVR (AVR-GCC).
Такой же мощный как и IAR, но совершенно бесплатно.
Множество буржуйских примеров (буржуины не любят выставлять софт написанный с помощью платного софта), книжка на русском.
CVAVR же, для начинающих, слаб и немощен, хотя и со сладкими приманом (смотри выше).