Перейти к содержанию
    

Вопросы к спецам.

 

1.) В WinAVR есть хорошая функция sizeof (#include pgmspace). Нет ли чего похожено в CVavr, ели

есть то как называется, если нет то нельзя-ли ее как-то пристегнуть к CVavr.

2.) Можно ли в ATmega32 выделить область из FLash размером до 8 Кбайт чтобы использовать под

данные которые изредка нужно редактировать (оснвная задача чтение и выдача этих данных

в порт скажем PORTA ). Если можно то пожалуста пример на Си

3.) Если вариант по второму вопросу отсутствует то кто может подсказать кусок кода на Си для работы

протоколом i2c с микросхемой 24с64.

Заранее благодарен.

Леонид е-mail [email protected]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопросы к спецам.

 

1.) В WinAVR есть хорошая функция sizeof (#include pgmspace). Нет ли чего похожено в CVavr, ели

есть то как называется, если нет то нельзя-ли ее как-то пристегнуть к CVavr.

sizeof это не функция. Это оператор, который возращает количество байт какого-либо типа.

Например sizeof(char) будет равно еденице. Этот оператор не зависит от компилятора, является стандартным, поэтому в CV он должен быть.

2.) Можно ли в ATmega32 выделить область из FLash размером до 8 Кбайт чтобы использовать под

данные которые изредка нужно редактировать (оснвная задача чтение и выдача этих данных

в порт скажем PORTA ). Если можно то пожалуста пример на Си

Можно. Но для этого нужно чуть больше исходных данных: как и когда Вы собираетесь модифицировать данные (обновлением прошивки, используя самопрограммирование микроконтроллера и тп)

3.) Если вариант по второму вопросу отсутствует то кто может подсказать кусок кода на Си для работы

протоколом i2c с микросхемой 24с64.

Видимо речь идет о работе микроконтроллера AVR. Тогда поиск по соответствующей ветке на форуме даст Вам положительный результат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ.

При постаговке вопроса насчет выделения области в Flash Atmega32

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

данные в области (естественно наличие LCD) . По предварительным прикидкам 32к должно хватить и для программ и для данных.Я пытался открыть массив сразмером 8К но СVavr ругается (видимо хочет открывать массив в SRAM) .

 

По последнему вопросу что лучше использовать i2c или twi микросхема 24с64 ?

Изменено пользователем Леон

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ.

При постаговке вопроса насчет выделения области в Flash Atmega32

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

данные в области (естественно наличие LCD) . По предварительным прикидкам 32к должно хватить и для программ и для данных.Я пытался открыть массив сразмером 8К но СVavr ругается (видимо хочет открывать массив в SRAM) .

Можно использовать физические адреса памяти FLASH. Как с ней работать, описано в даташите на микроконтроллер. Можно поискать в инете различные бутлоадеры (bootloader) для AVR. Там Вы найдете примеры работы с памятью программ.

По последнему вопросу что лучше использовать i2c или twi микросхема 24с64 ?

I2C и TWI это одно и тоже. Первое - название от Phillips, второе - название от Atmel.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос к знатокам.

Если открыть массив в EEPROM, то его нужно обьявить как глобальный.

А если его нужно редактировать тогда как.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если открыть массив в EEPROM, то его нужно обьявить как глобальный.

А если его нужно редактировать тогда как.

Вопрос непонятен. Что значит "открыть массив"? EEPROM внешняя или внутренняя? Если внутреняя - умеет ли с ней работать компилятор (какой используете компилятор?)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос непонятен. Что значит "открыть массив"? EEPROM внешняя или внутренняя? Если внутреняя - умеет ли с ней работать компилятор (какой используете компилятор?)?

 

Я имел в виду внутренняя EEPROM, компилятор CVavr.

Можно и внешнюю но думаю что с ней будет сложнее ( придется использовать шину I2c).

Если знаете как то подскажите пожалуста.

С уважением Леонид.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CVAVR умеет работать с eeprom.

Так и объявляйте, например eeprom char m[10];

И редактируйте как надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извиняюсь за назойливость и прошу не пинать (только учусь)

Если объявить массив во внутренней EEPROM компилятор CVavr принимает его только как глобальный.

а как его потом редактировать? Програмно можно или нет?

Изменено пользователем Леон

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно. Объявил, как написали ранее eeprom char m[10]; ну а в программе работаешь как с обыкновенным массивом m[3]=55, m[2]=32, i=m[1], t=m[k] ну и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Знатоки помогите!

Написал код

 

// External Interrupt 0 service routine

interrupt [EXT_INT0] ext_int0_isr(void)

{ char i=0,n=0,key_0=0;//Начальные значения счетчиков

PORTB.3=1,delay_ms(30);//атидребезговая пауза+beep

PORTB.3=0;//Конец beep

while(PIND.2)//выполнять пока PIND.2=1

{PORTD=((i)<<4),n=i,key_0=n;

if(!PIND.2){break;}//если PIN.2=0 покинуть цикл

PORTD.3=1,n=(i+16),key_0=n;//включить дешифратор

if(!PIND.2){break;}// если PIN.2=0 покинуть цикл

i++;

}

PORTD.3=0,i=0,n=0;//Сбросить счетчики и дешифратор

PORTD=((0x0)<<4);//сбросить выходы PORT.4_7

GIFR|=1<<6;//Выставить 1 в регистре флагов(INT0)

//return (key_0);// не работает ругается

}

 

обслуживание клавы через дешифраторы(31 кнопка)

как правильно написать чтобы возвращалось значение key_0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Знатоки помогите!

Написал код

 

// External Interrupt 0 service routine

interrupt [EXT_INT0] ext_int0_isr(void)

{ char i=0,n=0,key_0=0;//Начальные значения счетчиков

PORTB.3=1,delay_ms(30);//атидребезговая пауза+beep

PORTB.3=0;//Конец beep

while(PIND.2)//выполнять пока PIND.2=1

{PORTD=((i)<<4),n=i,key_0=n;

if(!PIND.2){break;}//если PIN.2=0 покинуть цикл

PORTD.3=1,n=(i+16),key_0=n;//включить дешифратор

if(!PIND.2){break;}// если PIN.2=0 покинуть цикл

i++;

}

PORTD.3=0,i=0,n=0;//Сбросить счетчики и дешифратор

PORTD=((0x0)<<4);//сбросить выходы PORT.4_7

GIFR|=1<<6;//Выставить 1 в регистре флагов(INT0)

//return (key_0);// не работает ругается

}

 

обслуживание клавы через дешифраторы(31 кнопка)

как правильно написать чтобы возвращалось значение key_0

Прерывание не возвращает никакого значения, оно void! Если это писалось на языке С, то необходимо доставить в строках разделители операторов ; Правильно ли оформлены у Вас описание и вызов прерывания? Какой компилятор?

Изменено пользователем mdmitry

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем откликнувшимся.

Все пошло и заработало!!! :08:

Я заклинился на том что функции обработки прерываний пишутся первыми.

Оказалось достаточным переменную key_0 объявить до описания функции обработки прерывания и все встало на свои места.

Еще раз прошу подсказать, кто знает, как объявить массив типа char в области Flash (размер большой до 8 Кбайт) так чтобы он не писался в SRAM, Atmega32. Компилятор CVavr. И если можно особенности работы с этим массивом ( програмное чтение, запись, редактирование), можно ссылки. где можно прочитать об этом. :help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...